Yes, we're not compositing, as the compositing is disabled, so this is expected. But relative-bg is not set, too -- apparently, the visuals of the socket widget and its parent differ. And indeed, they are. Here is a part of my gdb session:
(gdb) step
gtk_widget_get_visual (widget=0x434f30) at gtkwidget.c:11685
11685 g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
(gdb) finish
Run till exit from #0 gtk_widget_get_visual (widget=0x434f30) at gtkwidget.c:11685
0x00007ffff7fc3dd8 in systray_socket_realize (widget=0x434f30) at systray-socket.c:139
139 else if (gtk_widget_get_visual (widget) ==
Value returned is $7 = (GdkVisual *) 0x43c590
(gdb) step
gdk_window_get_parent (window=window@entry=0x6f20c0) at gdkwindow.c:2436
2436 g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
(gdb) finish
Run till exit from #0 gdk_window_get_parent (window=window@entry=0x6f20c0) at gdkwindow.c:2436
0x00007ffff7fc3de3 in systray_socket_realize (widget=0x434f30) at systray-socket.c:139
139 else if (gtk_widget_get_visual (widget) ==
Value returned is $8 = (GdkWindow *) 0x434900
(gdb) step
gdk_window_get_visual (window=0x434900) at gdkwindow.c:2288
2288 g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
(gdb) finish
Run till exit from #0 gdk_window_get_visual (window=0x434900) at gdkwindow.c:2288
0x00007ffff7fc3deb in systray_socket_realize (widget=0x434f30) at systray-socket.c:139
139 else if (gtk_widget_get_visual (widget) ==
Value returned is $9 = (GdkVisual *) 0x442850
(gdb) p *((GdkVisual *) 0x43c590)
$10 = {parent_instance = {g_type_instance = {g_class = 0x43c090}, ref_count = 2, qdata = 0x0}, type = GDK_VISUAL_TRUE_COLOR, depth = 24, byte_order = GDK_LSB_FIRST, colormap_size = 256, bits_per_rgb = 8, red_mask = 16711680,
green_mask = 65280, blue_mask = 255, screen = 0x43a020}
(gdb) p *((GdkVisual *) 0x442850)
$11 = {parent_instance = {g_type_instance = {g_class = 0x43c090}, ref_count = 2, qdata = 0x0}, type = GDK_VISUAL_TRUE_COLOR, depth = 32, byte_order = GDK_LSB_FIRST, colormap_size = 256, bits_per_rgb = 8, red_mask = 16711680,
green_mask = 65280, blue_mask = 255, screen = 0x43a020}
So, the widget has 24 bit visual, but it's parent has 32 bit visual, so no parent-relative background.
I'm also affected by the problem, with gtk+3 3.24.11 and xfce4 panel 4.14.0.
When I run xfce4-panel with PANEL_DEBUG=systray I see the following in the debug log:
xfce4-panel( external) : xkb-3: child is embedded; 7 properties in queue systray) : registered manager on screen 0 systray) : socket networkmanager applet[0x1244f30] (composited=false, relative-bg=false systray) : added networkmanager applet[0x1244f30] icon systray) : socket clipman[0x14fe490] (composited=false, relative-bg=false systray) : added clipman[0x14fe490] icon
xfce4-panel(
xfce4-panel(
xfce4-panel(
xfce4-panel(
xfce4-panel(
I tried to dig into that a bit and that lead me to systray_ socket_ realize function:
https:/ /git.xfce. org/xfce/ xfce4-panel/ tree/plugins/ systray/ systray- socket. c?h=xfce- 4.14.0# n122
Yes, we're not compositing, as the compositing is disabled, so this is expected. But relative-bg is not set, too -- apparently, the visuals of the socket widget and its parent differ. And indeed, they are. Here is a part of my gdb session:
(gdb) step get_visual (widget=0x434f30) at gtkwidget.c:11685 val_if_ fail (GTK_IS_WIDGET (widget), NULL); get_visual (widget=0x434f30) at gtkwidget.c:11685 socket_ realize (widget=0x434f30) at systray- socket. c:139 get_visual (widget) == get_parent (window= window@ entry=0x6f20c0) at gdkwindow.c:2436 val_if_ fail (GDK_IS_WINDOW (window), NULL); get_parent (window= window@ entry=0x6f20c0) at gdkwindow.c:2436 socket_ realize (widget=0x434f30) at systray- socket. c:139 get_visual (widget) == get_visual (window=0x434900) at gdkwindow.c:2288 val_if_ fail (GDK_IS_WINDOW (window), NULL); get_visual (window=0x434900) at gdkwindow.c:2288 socket_ realize (widget=0x434f30) at systray- socket. c:139 get_visual (widget) == TRUE_COLOR, depth = 24, byte_order = GDK_LSB_FIRST, colormap_size = 256, bits_per_rgb = 8, red_mask = 16711680, TRUE_COLOR, depth = 32, byte_order = GDK_LSB_FIRST, colormap_size = 256, bits_per_rgb = 8, red_mask = 16711680,
gtk_widget_
11685 g_return_
(gdb) finish
Run till exit from #0 gtk_widget_
0x00007ffff7fc3dd8 in systray_
139 else if (gtk_widget_
Value returned is $7 = (GdkVisual *) 0x43c590
(gdb) step
gdk_window_
2436 g_return_
(gdb) finish
Run till exit from #0 gdk_window_
0x00007ffff7fc3de3 in systray_
139 else if (gtk_widget_
Value returned is $8 = (GdkWindow *) 0x434900
(gdb) step
gdk_window_
2288 g_return_
(gdb) finish
Run till exit from #0 gdk_window_
0x00007ffff7fc3deb in systray_
139 else if (gtk_widget_
Value returned is $9 = (GdkVisual *) 0x442850
(gdb) p *((GdkVisual *) 0x43c590)
$10 = {parent_instance = {g_type_instance = {g_class = 0x43c090}, ref_count = 2, qdata = 0x0}, type = GDK_VISUAL_
green_mask = 65280, blue_mask = 255, screen = 0x43a020}
(gdb) p *((GdkVisual *) 0x442850)
$11 = {parent_instance = {g_type_instance = {g_class = 0x43c090}, ref_count = 2, qdata = 0x0}, type = GDK_VISUAL_
green_mask = 65280, blue_mask = 255, screen = 0x43a020}
So, the widget has 24 bit visual, but it's parent has 32 bit visual, so no parent-relative background.