diff --git a/src/modules/linux/FiretrayWindow.jsm b/src/modules/linux/FiretrayWindow.jsm index 98f40d6..09f435f 100644 --- a/src/modules/linux/FiretrayWindow.jsm +++ b/src/modules/linux/FiretrayWindow.jsm @@ -290,10 +290,17 @@ firetray.Window = { log.debug("save: windowStates="+winStates); }, + // NOTE: fluxbox bug probably: if hidden and restored iconified, then + // switching to desktop de-iconifies it ?! restoreStates: function(xid) { let winStates = firetray.Handler.windows[xid].savedStates; log.debug("restored WindowStates: " + winStates); + if (winStates & FIRETRAY_XWINDOW_HIDDEN) { + firetray.Handler.windows[xid].chromeWin.minimize(); + log.debug("restored minimized"); + } + /* helps prevent getting iconify event following show() */ if (firetray.Utils.prefService.getBoolPref('hides_on_minimize')) firetray.Handler.windows[xid].chromeWin.restore(); // nsIDOMChromeWindow.idl @@ -303,11 +310,6 @@ firetray.Window = { log.debug("restored maximized"); } - if (winStates & FIRETRAY_XWINDOW_HIDDEN) { - firetray.Handler.windows[xid].chromeWin.minimize(); - log.debug("restored minimized"); - } - delete firetray.Handler.windows[xid].savedStates; }, @@ -522,6 +524,8 @@ firetray.Window = { case x11.MapNotify: log.debug("MapNotify"); + let gdkWinStateOnMap = gdk.gdk_window_get_state(firetray.Handler.gdkWindows.get(xid)); + log.debug("gdkWinState="+gdkWinStateOnMap+" for xid="+xid); let win = firetray.Handler.windows[xid]; if (!win.visible && firetray.Handler.appStarted) { // happens when hidden app called from command line log.warn("window not visible, correcting visibility"); @@ -531,10 +535,11 @@ firetray.Window = { break; case x11.UnmapNotify: // for catching 'iconify' - let gdkWinState = gdk.gdk_window_get_state(firetray.Handler.gdkWindows.get(xid)); - log.debug("gdkWinState="+gdkWinState+" for xid="+xid); + log.debug("UnmapNotify"); + let gdkWinStateOnUnmap = gdk.gdk_window_get_state(firetray.Handler.gdkWindows.get(xid)); + log.debug("gdkWinStateOnUnmap="+gdkWinStateOnUnmap+" for xid="+xid); // NOTE: Gecko 8.0 provides the 'sizemodechange' event - if (gdkWinState === gdk.GDK_WINDOW_STATE_ICONIFIED) { + if (gdkWinStateOnUnmap & gdk.GDK_WINDOW_STATE_ICONIFIED) { log.debug("GOT ICONIFIED"); let hides_on_minimize = firetray.Utils.prefService.getBoolPref('hides_on_minimize'); let hides_single_window = firetray.Utils.prefService.getBoolPref('hides_single_window');