[GTK+] leave-notify-event wird zweimal ausgeführt
-
Hi
ich hab ein GtkTreeView, für das ich auf enter-notify-event und leave-notify-event reagieren will.
Ich hab dann
g_signal_connect(gui->cfg_plugin_dir_list, "enter-notify-event", G_CALLBACK(cfg_pl_mouse_in), gui); g_signal_connect(gui->cfg_plugin_dir_list, "leave-notify-event", G_CALLBACK(cfg_pl_mouse_out), gui);
cfg_pl_mouse_in wird nur ausgeführt, wenn ich die Mouse über das GtkViewTree bewege, jedoch wenn die Mouse das GtkTreeView verlässt, wird cfg_pl_mouse_out zweimal ausgeführt. Meine Haendler sehen zur Zeit so aus:
gboolean cfg_pl_mouse_in(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data) { cfg_interface *gui = user_data; g_print("mouse entering...\n"); return FALSE; } gboolean cfg_pl_mouse_out(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data) { cfg_interface *gui = user_data; GdkWindowType type; g_print("widget = 0x%x\n", widget); g_print("event->window = 0x%x\n", event->window); g_print("event->x = %lf, event->y = %lf\n", event->x, event->y); g_print("event->time = %d\n", event->time); g_print("event->send_event = %d\n", event->send_event); g_print("event->type = 0x%x\n", event->type); g_print("event->state = 0x%x\n", event->state); return FALSE; }
Auffällig ist es, dass nur event->window sich ändert, alles andere ist identisch. Ich kriege dann
mouse entering... widget = 0x80af148 event->window = 0x8121018 event->x = 15.000000, event->y = 120.000000 event->time = 990189441 event->send_event = 0 event->type = 0xb event->state = 0x10 widget = 0x80af148 event->window = 0x8118380 event->x = 15.000000, event->y = 120.000000 event->time = 990189441 event->send_event = 0 event->type = 0xb event->state = 0x10
Ich weiß aber nicht warum zwei GdkWindow das leave-notify-event bekommen und wieß auch nicht, wie ich herausfinden kann, welche sie sind (die GUI lade ich mit libglade). In der Doku habe ich leider nichts darüber gefunden. Weiß jemand, ob ich irgendwo einen Fehler mache?
-
Hi,
kannst du compilerfertigen Code posten? Bin in GTK+ etwas zu sehr aus der Übung und in Zeitnot, um mal kurz ein Beispiel dazu zu basteln.
Cheers
GPC
-
Ja und nein. Hab gerade mein Szenaro nachgebaut aber da pasiert es nicht
ich verstehe es nicht.
Ausführbaren Code, wo das Problem auftritt, findet man bei meinen Repository
(wobei da nur das Problem mit beiden TreeViews auftritt, mit den anderen Widgets nicht)
danke für die Hilfe
-
Das zweite mal könnte durch das GtkViewport ausgelöst werden, welches von Glade hinzugefügt wird. Ich bin mir aber nicht sicher.
-
das habe ich mir auch gedacht, aber in meinem nachgebauten Bsp habe ich auch sowas und dort wird es nur einmal ausgeführt (werd nochmal nachschauen) ...
-
*bump* nach mehreren Tagen