Xfce4-whiskermenu-plugin git from today kept on crashing when clicking a folder in the menu. I narrowed this down to a very bad desktop file. 1) create ~/.local/share/applications/crash.desktop with: [Desktop Entry] Version=1.0.0 Type=Application Name=CrashForFun GenericName=Crashing Comment= Exec=/bin/false Icon=/usr/local/share/icons/what/ever.svg Categories=Other; Terminal=false Note the Icon line. You are NOT supported to do what. NO. no-no using a full path to an icon like that. 2) click the other folder in current xfce4-whiskermenu-plugin 3) The CRASH, see below. I feel compelled to point out that you're NOT supposed to be doing "Icon=/usr/local/share/icons/what/ever.svg". However, kernelshark.desktop looks like: [Desktop Entry] Version=1.0.0 Type=Application Name=Kernel Shark GenericName=Kernel Shark Comment= Exec=/usr/local/bin/kernelshark Icon=/usr/local/share/icons/kernelshark/KS_icon_shark.svg Categories=System; Terminal=false and I installed the kernelshark at some point which is why I ran into this problem. It is something users could run into if they install software with desktop files who are doing the wrong thing. That is technically a bug in .. their software. Still, it could/should be handled better. The regular panel menu handles it by not showing an icon (there is an icon indicating missing icon). whiskermenu just crashes. NOTE: It does not seem to make any difference if the icon referenced with a full path and an extension exists or not. 0x00007f07251faa6f in __GI___poll (fds=0x93ab30, nfds=3, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29 29 return SYSCALL_CANCEL (poll, fds, nfds, timeout); Missing separate debuginfos, use: dnf debuginfo-install gvfs-client-1.42.2-1.fc31.x86_64 (gdb) c Continuing. [New Thread 0x7f0715631700 (LWP 1951316)] Thread 1 "panel-30-whiske" received signal SIGSEGV, Segmentation fault. INT_cairo_image_surface_get_width (surface=surface@entry=0x0) at cairo-image-surface.c:615 615 if (! _cairo_surface_is_image (surface)) { (gdb) bt #0 INT_cairo_image_surface_get_width (surface=surface@entry=0x0) at cairo-image-surface.c:615 #1 0x00007f0725fe0a3b in whiskermenu_icon_renderer_render(GtkCellRenderer*, cairo_t*, GtkWidget*, GdkRectangle const*, GdkRectangle const*, GtkCellRendererState) (renderer=<optimized out>, cr=0x9ca600, widget=<optimized out>, cell_area=0x7ffcd8b3a1b0) at /home/oyvinds/src/xfce4/xfce4-whiskermenu-plugin/panel-plugin/icon-renderer.cpp:141 #2 0x00007f07259f1358 in gtk_cell_renderer_render (cell=0xbbc460 [WhiskerMenuIconRenderer], cr=0x9ca600, widget=0xb88890 [GtkIconView], background_area=0x7ffcd8b3a2d0, cell_area=0x7ffcd8b3a1b0, flags=(unknown: 0)) at gtkcellrenderer.c:833 #3 0x00007f07259e7653 in render_cell (renderer=0xbbc460 [WhiskerMenuIconRenderer], cell_area=cell_area@entry=0x7ffcd8b3a2c0, cell_background=cell_background@entry=0x7ffcd8b3a2d0, data=data@entry=0x7ffcd8b3a340) at gtkcellarea.c:1147 #4 0x00007f07259ea302 in gtk_cell_area_box_foreach_alloc (area=<optimized out>, context=<optimized out>, widget=<optimized out>, cell_area=<optimized out>, background_area=<optimized out>, callback=<optimized out>, callback_data=<optimized out>) at gtkcellareabox.c:1291 #5 0x00007f07259e718e in gtk_cell_area_real_render (area=0xbb7340 [GtkCellAreaBox], context=0x7f070c011850 [GtkCellAreaBoxContext], widget=0xb88890 [GtkIconView], cr=0x9ca600, background_area=0x7ffcd8b3a3e0, cell_area=0x7ffcd8b3a3e0, flags=(unknown: 0), paint_focus=1) at gtkcellarea.c:1189 #6 0x00007f0725abda6c in gtk_icon_view_paint_item (icon_view=icon_view@entry=0xb88890 [GtkIconView], cr=cr@entry=0x9ca600, item=item@entry=0xa2c740, x=742, y=181, draw_focus=1) at gtkiconview.c:3159 #7 0x00007f0725ac2dca in gtk_icon_view_draw (widget=0xb88890 [GtkIconView], cr=0x9ca600) at gtkiconview.c:1907 #8 0x00007f0725c388d4 in gtk_widget_draw_internal (clip_to_size=1, cr=0x9ca600, widget=0xb88890 [GtkIconView]) at gtkwidget.c:7080 #9 gtk_widget_draw_internal (widget=widget@entry=0xb88890 [GtkIconView], cr=cr@entry=0x9ca600, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7018 #10 0x00007f0725a1952b in gtk_container_propagate_draw (container=container@entry=0xb96b60 [GtkScrolledWindow], child=0xb88890 [GtkIconView], cr=cr@entry=0x9ca600) at gtkcontainer.c:3853 #11 0x00007f0725a195fd in gtk_container_draw (widget=0xb96b60 [GtkScrolledWindow], cr=0x9ca600) at gtkcontainer.c:3673 #12 0x00007f0725b6d03d in gtk_scrolled_window_render (gadget=<optimized out>, cr=0x9ca600, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>, data=0x0) at gtkscrolledwindow.c:2103 #13 0x00007f0725a1e891 in gtk_css_custom_gadget_draw (gadget=<optimized out>, cr=<optimized out>, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>) at gtkcsscustomgadget.c:159 #14 0x00007f0725a2373c in gtk_css_gadget_draw (gadget=0xbbc580 [GtkCssCustomGadget], cr=0x9ca600) at gtkcssgadget.c:885 #15 0x00007f0725b6b305 in gtk_scrolled_window_draw (widget=<optimized out>, cr=<optimized out>) at gtkscrolledwindow.c:3030 --Type <RET> for more, q to quit, c to continue without paging-- #16 0x00007f0725c388d4 in gtk_widget_draw_internal (clip_to_size=1, cr=0x9ca600, widget=0xb96b60 [GtkScrolledWindow]) at gtkwidget.c:7080 #17 gtk_widget_draw_internal (widget=widget@entry=0xb96b60 [GtkScrolledWindow], cr=cr@entry=0x9ca600, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7018 #18 0x00007f0725a1952b in gtk_container_propagate_draw (container=container@entry=0xafd600 [GtkStack], child=0xb96b60 [GtkScrolledWindow], cr=cr@entry=0x9ca600) at gtkcontainer.c:3853 #19 0x00007f0725b8d246 in gtk_stack_render (gadget=<optimized out>, cr=0x9ca600, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>, data=0x0) at gtkstack.c:2207 #20 0x00007f0725a1e891 in gtk_css_custom_gadget_draw (gadget=<optimized out>, cr=<optimized out>, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>) at gtkcsscustomgadget.c:159 #21 0x00007f0725a2373c in gtk_css_gadget_draw (gadget=0xbe1920 [GtkCssCustomGadget], cr=0x9ca600) at gtkcssgadget.c:885 #22 0x00007f0725b8cdf9 in gtk_stack_draw (widget=<optimized out>, cr=<optimized out>) at gtkstack.c:2119 #23 0x00007f0725c388d4 in gtk_widget_draw_internal (clip_to_size=1, cr=0x9ca600, widget=0xafd600 [GtkStack]) at gtkwidget.c:7080 #24 gtk_widget_draw_internal (widget=widget@entry=0xafd600 [GtkStack], cr=cr@entry=0x9ca600, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7018 #25 0x00007f0725a1952b in gtk_container_propagate_draw (container=container@entry=0xaf2b10 [GtkBox], child=0xafd600 [GtkStack], cr=cr@entry=0x9ca600) at gtkcontainer.c:3853 #26 0x00007f0725a195fd in gtk_container_draw (widget=0xaf2b10 [GtkBox], cr=cr@entry=0x9ca600) at gtkcontainer.c:3673 #27 0x00007f07259ca268 in gtk_box_draw_contents (gadget=<optimized out>, cr=0x9ca600, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>, unused=0x0) at gtkbox.c:453 #28 0x00007f0725a1e891 in gtk_css_custom_gadget_draw (gadget=<optimized out>, cr=<optimized out>, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>) at gtkcsscustomgadget.c:159 #29 0x00007f0725a2373c in gtk_css_gadget_draw (gadget=0xbd6770 [GtkCssCustomGadget], cr=0x9ca600) at gtkcssgadget.c:885 #30 0x00007f07259ccba5 in gtk_box_draw (widget=<optimized out>, cr=<optimized out>) at gtkbox.c:462 #31 0x00007f0725c388d4 in gtk_widget_draw_internal (clip_to_size=1, cr=0x9ca600, widget=0xaf2b10 [GtkBox]) at gtkwidget.c:7080 #32 gtk_widget_draw_internal (widget=widget@entry=0xaf2b10 [GtkBox], cr=cr@entry=0x9ca600, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7018 #33 0x00007f0725a1952b in gtk_container_propagate_draw (container=container@entry=0xafd420 [GtkStack], child=0xaf2b10 [GtkBox], cr=cr@entry=0x9ca600) --Type <RET> for more, q to quit, c to continue without paging-- at gtkcontainer.c:3853 #34 0x00007f0725b8d246 in gtk_stack_render (gadget=<optimized out>, cr=0x9ca600, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>, data=0x0) at gtkstack.c:2207 #35 0x00007f0725a1e891 in gtk_css_custom_gadget_draw (gadget=<optimized out>, cr=<optimized out>, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>) at gtkcsscustomgadget.c:159 #36 0x00007f0725a2373c in gtk_css_gadget_draw (gadget=0xbd6670 [GtkCssCustomGadget], cr=0x9ca600) at gtkcssgadget.c:885 #37 0x00007f0725b8cdf9 in gtk_stack_draw (widget=<optimized out>, cr=<optimized out>) at gtkstack.c:2119 #38 0x00007f0725c388d4 in gtk_widget_draw_internal (clip_to_size=1, cr=0x9ca600, widget=0xafd420 [GtkStack]) at gtkwidget.c:7080 #39 gtk_widget_draw_internal (widget=widget@entry=0xafd420 [GtkStack], cr=cr@entry=0x9ca600, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7018 #40 0x00007f0725a1952b in gtk_container_propagate_draw (container=container@entry=0xaf2590 [GtkBox], child=0xafd420 [GtkStack], cr=cr@entry=0x9ca600) at gtkcontainer.c:3853 #41 0x00007f0725a195fd in gtk_container_draw (widget=0xaf2590 [GtkBox], cr=cr@entry=0x9ca600) at gtkcontainer.c:3673 #42 0x00007f07259ca268 in gtk_box_draw_contents (gadget=<optimized out>, cr=0x9ca600, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>, unused=0x0) at gtkbox.c:453 #43 0x00007f0725a1e891 in gtk_css_custom_gadget_draw (gadget=<optimized out>, cr=<optimized out>, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>) at gtkcsscustomgadget.c:159 #44 0x00007f0725a2373c in gtk_css_gadget_draw (gadget=0xbc8700 [GtkCssCustomGadget], cr=0x9ca600) at gtkcssgadget.c:885 #45 0x00007f07259ccba5 in gtk_box_draw (widget=<optimized out>, cr=<optimized out>) at gtkbox.c:462 #46 0x00007f0725c388d4 in gtk_widget_draw_internal (clip_to_size=1, cr=0x9ca600, widget=0xaf2590 [GtkBox]) at gtkwidget.c:7080 #47 gtk_widget_draw_internal (widget=widget@entry=0xaf2590 [GtkBox], cr=cr@entry=0x9ca600, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7018 #48 0x00007f0725a1952b in gtk_container_propagate_draw (container=container@entry=0xafd240 [GtkStack], child=0xaf2590 [GtkBox], cr=cr@entry=0x9ca600) at gtkcontainer.c:3853 #49 0x00007f0725b8d246 in gtk_stack_render (gadget=<optimized out>, cr=0x9ca600, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>, data=0x0) at gtkstack.c:2207 #50 0x00007f0725a1e891 in gtk_css_custom_gadget_draw (gadget=<optimized out>, cr=<optimized out>, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>) at gtkcsscustomgadget.c:159 --Type <RET> for more, q to quit, c to continue without paging-- #51 0x00007f0725a2373c in gtk_css_gadget_draw (gadget=0xafa500 [GtkCssCustomGadget], cr=0x9ca600) at gtkcssgadget.c:885 #52 0x00007f0725b8cdf9 in gtk_stack_draw (widget=<optimized out>, cr=<optimized out>) at gtkstack.c:2119 #53 0x00007f0725c388d4 in gtk_widget_draw_internal (clip_to_size=1, cr=0x9ca600, widget=0xafd240 [GtkStack]) at gtkwidget.c:7080 #54 gtk_widget_draw_internal (widget=widget@entry=0xafd240 [GtkStack], cr=cr@entry=0x9ca600, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7018 #55 0x00007f0725a1952b in gtk_container_propagate_draw (container=container@entry=0xafb1a0 [GtkFrame], child=0xafd240 [GtkStack], cr=cr@entry=0x9ca600) at gtkcontainer.c:3853 #56 0x00007f0725a195fd in gtk_container_draw (widget=0xafb1a0 [GtkFrame], cr=0x9ca600) at gtkcontainer.c:3673 #57 0x00007f0725a9c8b3 in gtk_frame_render (gadget=<optimized out>, cr=0x9ca600, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>, data=0x0) at gtkframe.c:775 #58 0x00007f0725a1e891 in gtk_css_custom_gadget_draw (gadget=<optimized out>, cr=<optimized out>, x=<optimized out>, y=<optimized out>, width=<optimized out>, height=<optimized out>) at gtkcsscustomgadget.c:159 #59 0x00007f0725a2373c in gtk_css_gadget_draw (gadget=0xafa200 [GtkCssCustomGadget], cr=0x9ca600) at gtkcssgadget.c:885 #60 0x00007f0725a9c775 in gtk_frame_draw (widget=<optimized out>, cr=<optimized out>) at gtkframe.c:719 #61 0x00007f0725c388d4 in gtk_widget_draw_internal (clip_to_size=1, cr=0x9ca600, widget=0xafb1a0 [GtkFrame]) at gtkwidget.c:7080 #62 gtk_widget_draw_internal (widget=widget@entry=0xafb1a0 [GtkFrame], cr=cr@entry=0x9ca600, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7018 #63 0x00007f0725a1952b in gtk_container_propagate_draw (container=container@entry=0xaf8270 [GtkWindow], child=0xafb1a0 [GtkFrame], cr=cr@entry=0x9ca600) at gtkcontainer.c:3853 #64 0x00007f0725a195fd in gtk_container_draw (widget=0xaf8270 [GtkWindow], cr=0x9ca600) at gtkcontainer.c:3673 #65 0x00007f0725c46fd5 in gtk_window_draw (widget=widget@entry=0xaf8270 [GtkWindow], cr=0x9ca600) at gtkwindow.c:10473 #66 0x00007f0725c82cab in _gtk_marshal_BOOLEAN__BOXED (closure=closure@entry=0x874730, return_value=return_value@entry=0x7ffcd8b3b7f0, n_param_values=n_param_values@entry=2, param_values=param_values@entry=0x7ffcd8b3b850, invocation_hint=invocation_hint@entry=0x7ffcd8b3b7d0, marshal_data=marshal_data@entry=0x7f0725c46f20 <gtk_window_draw>) at gtkmarshalers.c:83 #67 0x00007f0725c2bb83 in gtk_widget_draw_marshaller (closure=0x874730, return_value=0x7ffcd8b3b7f0, n_param_values=2, param_values=0x7ffcd8b3b850, invocation_hint=0x7ffcd8b3b7d0, marshal_data=0x7f0725c46f20 <gtk_window_draw>) at gtkwidget.c:947 #71 0x00007f072543e9d3 in <emit signal ??? on instance 0xaf8270 [GtkWindow]> (instance=instance@entry=0xaf8270, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3453 #68 0x00007f0725421742 in g_closure_invoke --Type <RET> for more, q to quit, c to continue without paging-- (closure=0x874730, return_value=0x7ffcd8b3b7f0, n_param_values=2, param_values=0x7ffcd8b3b850, invocation_hint=0x7ffcd8b3b7d0) at ../gobject/gclosure.c:810 #69 0x00007f0725434d84 in signal_emit_unlocked_R (node=<optimized out>, detail=detail@entry=0, instance=instance@entry=0xaf8270, emission_return=emission_return@entry=0x7ffcd8b3b980, instance_and_params=instance_and_params@entry=0x7ffcd8b3b850) at ../gobject/gsignal.c:3679 #70 0x00007f072543da21 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffcd8b3ba30) at ../gobject/gsignal.c:3407 #72 0x00007f0725c38a32 in gtk_widget_draw_internal (clip_to_size=<optimized out>, cr=0x9ca600, widget=0xaf8270 [GtkWindow]) at gtkwidget.c:7073 #73 gtk_widget_draw_internal (widget=0xaf8270 [GtkWindow], cr=0x9ca600, clip_to_size=<optimized out>) at gtkwidget.c:7018 #74 0x00007f0725c41d10 in gtk_widget_render (widget=widget@entry=0xaf8270 [GtkWindow], window=0xce4400 [GdkX11Window], region=<optimized out>) at gtkwidget.c:17606 #75 0x00007f0725aeb2b9 in gtk_main_do_event (event=0x7ffcd8b3bc70) at gtkmain.c:1840 #76 gtk_main_do_event (event=<optimized out>) at gtkmain.c:1687 #77 0x00007f07257d3f79 in _gdk_event_emit (event=event@entry=0x7ffcd8b3bc70) at gdkevents.c:73 #78 0x00007f07257e5291 in _gdk_window_process_updates_recurse_helper (window=0xce4400 [GdkX11Window], expose_region=<optimized out>) at gdkwindow.c:3874 #79 0x00007f07257e6465 in gdk_window_process_updates_internal (window=0xce4400 [GdkX11Window]) at gdkwindow.c:4020 #80 0x00007f07257e6624 in gdk_window_process_updates_with_mode (recurse_mode=<optimized out>, window=<optimized out>) at gdkwindow.c:4215 #81 gdk_window_process_updates_with_mode (window=<optimized out>, recurse_mode=<optimized out>) at gdkwindow.c:4186 #82 0x00007f0725421996 in _g_closure_invoke_va (closure=0xd39fd0, return_value=0x0, instance=0x86c520, args=0x7ffcd8b3bfb0, n_params=0, param_types=0x0) at ../gobject/gclosure.c:873 #83 0x00007f072543e228 in g_signal_emit_valist (instance=0x86c520, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7ffcd8b3bfb0) at ../gobject/gsignal.c:3306 #84 0x00007f072543e9d3 in g_signal_emit (instance=instance@entry=0x86c520, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3453 #85 0x00007f07257dd383 in _gdk_frame_clock_emit_paint (frame_clock=frame_clock@entry=0x86c520 [GdkFrameClockIdle]) at gdkframeclock.c:643 #86 0x00007f07257ddcc3 in gdk_frame_clock_paint_idle (data=0x86c520) at gdkframeclockidle.c:450 #87 0x00007f07257c7f3d in gdk_threads_dispatch (data=data@entry=0x9cba80) at gdk.c:777 #88 0x00007f072531f021 in g_timeout_dispatch (source=source@entry=0x886760, callback=0x7f07257c7f10 <gdk_threads_dispatch>, user_data=0x9cba80) at ../glib/gmain.c:4668 --Type <RET> for more, q to quit, c to continue without paging-- #89 0x00007f072531e510 in g_main_dispatch (context=0x863670) at ../glib/gmain.c:3179 #90 g_main_context_dispatch (context=context@entry=0x863670) at ../glib/gmain.c:3844 #91 0x00007f072531e8a0 in g_main_context_iterate (context=0x863670, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:3917 #92 0x00007f072531eb93 in g_main_loop_run (loop=0x93aba0) at ../glib/gmain.c:4111 #93 0x00007f0725aea3bd in gtk_main () at gtkmain.c:1325 #94 0x0000000000403aae in main (argc=<optimized out>, argv=<optimized out>) at main.c:432 (gdb) c Continuing. Couldn't get registers: No such process. Couldn't get registers: No such process. (gdb) [Thread 0x7f0715631700 (LWP 1951316) exited] [Thread 0x7f0716781700 (LWP 1950158) exited] [Thread 0x7f0716f82700 (LWP 1950157) exited] Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists. (gdb)
Interestingly, Whisker Menu doesn't crash for me with Kernel Shark. The .desktop file has a full path for the icon, and it still loads and renders properly for me. However, I have added a check to make sure the cairo surface loads properly. Does that fix the crash?
Yes. Thank you.