User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.7) Gecko/20071013 Firefox/2.0.0.7 Build Identifier: I use xinerama and the new xrandr 1.2 features to add and remove external monitors on my laptop without restarting X. Normally, when I de-activate the external monitor all windows are moved to be at least partially within the remaining monitor, to prevent them from getting lost. The XFCE panel, however, does not move back onto the remaining screen on de-activation, and is lost until I re-connect the screen and move it back manually. Reproducible: Always Steps to Reproduce: 1. Plug a monitor into the laptop VGA port and issue the commands: xrandr --output LVDS --mode 1024x768 # make sure the laptop LCD stays on xrandr --output VGA --mode 1024x768 xrandr --output VGA --left-of LVDS 2. Move the xfce panel to the VGA screen in the right click->Customize Panel menu. 3. Disable the external monitor with: xrandr --output LVDS --mode 1024x768 # still make sure the LCD is on. . . xrandr --output VGA --off Actual Results: The Panel is no longer visible even though all other windows are moved onto the remaining monitor automatically, and I must regain it by re-activating the VGA monitor and moving it back before de-activating it. Expected Results: I expected the panel to move to the remaining monitor when the monitor is de-activated. emerge -vpq gtk+ glib [ebuild R ] x11-libs/gtk+-2.10.14 USE="X doc jpeg tiff xinerama -debug" [ebuild R ] dev-libs/glib-2.12.13 USE="-debug -doc -hardened"
Just wanted to add that this does _not_ happen if I log in while already having both screens active.
There are lots of problems with the new xrandr, I'm afraid. I guess we'll have to wait for Gtk to support this.
Well actually gtk support this and that causes the panel to crash. The list of monitors is dynamic (monitors can be added/removed dynamically) and sometimes changing the resolution causes the display to switch to another monitor. When that happens, the "monitor_list" of the panel contains deprecated data and causes a crash in the panel: (xfce4-panel:28332): Gdk-CRITICAL **: get_monitor: assertion `monitor_num < screen_x11->n_monitors' failed [1]+ Segmentation fault (core dumped) xfce4-panel (gdb) bt #0 0x005b5999 in gdk_screen_get_monitor_geometry () from /usr/lib/libgdk-x11-2.0.so.0 #1 0x08051736 in monitor_size_changed (screen=0x9ca70d0) at panel-app.c:433 #2 0x0076b964 in g_cclosure_marshal_VOID__VOID () from /lib/libgobject-2.0.so.0 #3 0x0075e1db in g_closure_invoke () from /lib/libgobject-2.0.so.0 #4 0x00774625 in ?? () from /lib/libgobject-2.0.so.0 #5 0x00775d3c in g_signal_emit_valist () from /lib/libgobject-2.0.so.0 #6 0x0077605d in g_signal_emit_by_name () from /lib/libgobject-2.0.so.0 #7 0x005b67d1 in ?? () from /usr/lib/libgdk-x11-2.0.so.0 #8 0x005a9508 in ?? () from /usr/lib/libgdk-x11-2.0.so.0 #9 0x005a9d23 in ?? () from /usr/lib/libgdk-x11-2.0.so.0 #10 0x005aa14f in ?? () from /usr/lib/libgdk-x11-2.0.so.0 #11 0x007da208 in g_main_context_dispatch () from /lib/libglib-2.0.so.0 #12 0x007dd8b3 in ?? () from /lib/libglib-2.0.so.0 #13 0x007dddd2 in g_main_loop_run () from /lib/libglib-2.0.so.0 #14 0x0028d459 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0 #15 0x08051d4a in panel_app_run (client_id=0x0) at panel-app.c:751 #16 0x0804f4af in main (argc=1, argv=0xbf96ecc4) at main.c:154
Created attachment 1911 Fix crash with gtk+-2.14/xrandr 1.2 This patch fixes the crash mentioned above by checking the monitor number, please consider for inclusion in beta2.
Free free to commit this patch.
Err, feel free..
Olivier, is this bug fixed now?
Err, no, I fixed a crash, fixing this bug requires more work, as the panel keeps a separate list of monitors.
Not going to fix this in the 4.6 release. It just requires too much changes in the monitor code. Will try to fix this in the 4.8 release.
New code will move the panel to the active monitor unless the output-name property is set. In that case the panel will hide until the output is activated again.
Devel branch has been merged in master. A 4.7.0 release will follow soon. If you think this bug is not fixed? Feel free to reopen the bug.