[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 😞


Anmelden zum Antworten