LINUX.ORG.RU

Как повесить GtkToolips на GtkComboBox?


0

0

Как подключить GtkTooltips к GtkComboBox или GtkComboBoxEntry?
Вот так, например:

GtkComboBox *combo_box = ...
...
GtkTooltips *tooltips = gtk_tooltips_new();
gtk_tooltips_set_tip(tooltips, combo_box, "comments", NULL);

Не работает. Не работает и в случае c GtkComboBoxEntry.
Т.е. tooltips просто не всплывает.
Если же сделать, используя GtkCombo и его entry, вот так:

GtkCombo *combo = ...
...
gkt_tooltips_set_tip(tooltips, GTK_ENTRY(GTK_COMBO(combo)->entry), "comment", NULL);

Так работает, но GtkCombo объявлен как устаревший. Как прилепить к неустаревшим?
★★

>Так работает, но GtkCombo объявлен как устаревший. Как прилепить к неустаревшим?

Нут ы парень ддаешь, без преобразования ругаться будет - пробуй делать так.

GtkWidget *combo_box = ... /*создаешь то что тебе надо*/
...
GtkWidget *tooltips = gtk_tooltips_new();
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), GTK_WIDGET(combo_box), "comments", NULL);

должно работать.

alphex_kaanoken ★★★
()
Ответ на: комментарий от alphex_kaanoken

Преобразовать что к чему? :)

GTK_WIDGET это и есть (GtkWidget*), а GTK_TOOLTIPS - (GtkTooltips*), и если объявлено как ты сам написал, ничего преобразовавывать не надо. И ничего не на кого ругаться, естественно не будет.

А речь шла совсем не об этом, прочитай еще раз мое сообщение, только не подиагонали, а нормально.

hapchu ★★
() автор топика
Ответ на: комментарий от hapchu

А у тебя там tooltips, как GtkWidget* объявлен, тогда конечно да. В общем речь не о преобразовании была в вопросе, с типами у меня все правильно. Просто не всплывает GtkTooltips если его приклеить к GtkComboBox* или GtkComboBoxEntry*, всплывает только если к (GtkCombo*)->entry, но это устаревшая форма. Возможно GtkTooltips вообще к GtkComboBox и GtkComboBoxEntry не предусмотрен? Очень жаль в таком случае.

hapchu ★★
() автор топика
Ответ на: комментарий от hapchu

хе - нет вообще правильно все определять как GtkWidget* а потом в случае чего вешать макрос который делает преобразование.

поводу тултипсов - по идеи должно вешаться - дело все в том что сам не проверял - надо смотреть на практике. Ведь написано что в принципе к любому виджету можно его повесить - следовательно тултип и к интри и к кнопке должен повеситься.

alphex_kaanoken ★★★
()

#include <gtk/gtk.h>

#include <string.h>
#include <stdio.h>

static void
setup_combo_entry (GtkWidget *entry_box)
{
	gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
				   "dum de dum");
	gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
				   "la la la");
	gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
				   "la la la dum de dum la la la la la la boom de da la la");
	gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
				   "bloop");
	gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
				   "bleep");
	gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
				   "klaas");
}

int
main (int argc, char **argv)
{
        GtkWidget *window;
        GtkWidget *comboboxtext;
	GtkWidget *event_window;
	GtkTooltips *tooltips;

        gtk_init (&argc, &argv);

	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	event_window = gtk_event_box_new ();

        comboboxtext = gtk_combo_box_entry_new_text ();
	setup_combo_entry (comboboxtext);
        gtk_container_add (GTK_CONTAINER (event_window), comboboxtext);
	gtk_container_add (GTK_CONTAINER (window), event_window);

	tooltips = gtk_tooltips_new(); 
	gtk_tooltips_set_tip(tooltips,
		 	     GTK_WIDGET(event_window), "Here is tooltip", NULL); 
	
	/* Note from gtk documentation:
	
	Tooltips can only be set on widgets which have their own X
	window. To check if a widget has its own window use
	GTK_WIDGET_NO_WINDOW(). To add a tooltip to a widget that
	doesn't have its own window, place the widget inside a
	GtkEventBox and add a tooltip to that instead.
        */
	
        gtk_widget_show_all (window);

        gtk_main ();

        return 0;
}

anonymous
()
Ответ на: комментарий от anonymous

Спасибо большое! что-то я это не нашел, плохо искал

hapchu ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.