GDL / GDLMM grip no longer working on docks

I am running into an issue on both windows and linux with the newer gdl/gdlmm releases since 3.38 where docks no longer have grips and throw a new assertion which never before happened back when things were working.

Upon running show_all on a newly created dock I get this…

gdl_dock_item_grip_realize: assertion ‘grip->priv->label != NULL’ failed

Then the dock appears and can be iconified but not dragged and the entire toolbar is blank where the label text used to be.

I have a debug build of gdl and gdlmm where I am working this and it seems gdl_dock_item_grip_realize() hits an assert where grip->priv->label is null and the code path was expecting it not to be.

I get no other gtk warnings before that. If I backdate gdl the issue goes away thus I am confused what is going on. Can trace in lldb just not sure why or what is going on.

  • frame #0: 0x00007fffeffa17b6 libgdl-3.so.5gdl_dock_item_grip_realize(widget=0x0000555559653e30) at gdl-dock-item-grip.c:404:9 frame #1: 0x00007ffff033f649 libgobject-2.0.so.0_g_closure_invoke_va + 377
    frame #2: 0x00007ffff0358bb2 libgobject-2.0.so.0g_signal_emit_valist + 3842 frame #3: 0x00007ffff0358dd7 libgobject-2.0.so.0g_signal_emit + 151
    frame #4: 0x00007ffff0cc88d7 libgtk-3.so.0gtk_widget_realize + 295 frame #5: 0x00007ffff0cc8c28 libgtk-3.so.0gtk_widget_map + 216
    frame #6: 0x00007fffeff9cd30 libgdl-3.so.5gdl_dock_item_map(widget=<unavailable>) at gdl-dock-item.c:1163:9 frame #7: 0x00007ffff033f649 libgobject-2.0.so.0_g_closure_invoke_va + 377
    frame #8: 0x00007ffff0358bb2 libgobject-2.0.so.0g_signal_emit_valist + 3842 frame #9: 0x00007ffff0358dd7 libgobject-2.0.so.0g_signal_emit + 151
    frame #10: 0x00007ffff0cc8bd0 libgtk-3.so.0gtk_widget_map + 128 frame #11: 0x00007fffeff92f45 libgdl-3.so.5gdl_dock_object_show(widget=0x000055555774e820) at gdl-dock-object.c:521:5
    frame #12: 0x00007ffff033f450 libgobject-2.0.so.0g_closure_invoke + 352 frame #13: 0x00007ffff0351e09 libgobject-2.0.so.0signal_emit_unlocked_R.isra.0 + 1673
    frame #14: 0x00007ffff0358be7 libgobject-2.0.so.0g_signal_emit_valist + 3895 frame #15: 0x00007ffff0358dd7 libgobject-2.0.so.0g_signal_emit + 151
    frame #16: 0x00007ffff0cc2356 libgtk-3.so.0`gtk_widget_show + 166

Oddly if I manually create a new gtk::label, then get the dockItems grip using get_grip() then set_label() I can get the dock grip to appear again (still no label visible) but I can drag it.

Upon doing anything though the assertion comes back and the behavior with the grip triggers again and no dragging is possible. If I create two dock windows something causes the first to call realize() again and it ruins the fix and dumps the warning again the console.

I am still investigating but it seems something is happening when unrealized that trashes the label when realize is expecting it not to be?

Seems like packages from ubuntu don’t exhibit the bug but the latest packages from Gentoo and windows/mingw64 do.

Still trying to track down more…

Seems like this may be too obvious or easy… but I patched GDL and fixed the issue for me.

 @@ -401,7 +401,11 @@ gdl_dock_item_grip_realize (GtkWidget *widget)
          GdkWindowAttr  attributes;
          GdkCursor     *cursor;
  
 -        g_return_if_fail (grip->priv->label != NULL);
 +        if (grip->priv->label == NULL) {
 +            gdl_dock_item_grip_set_label (grip, gdl_dock_item_create_label_widget(grip) );
 +        }
 +

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.