Do not switch workspace to follow new windows in others
authorMartin Dietze <di@fh-wedel.de>
Mon, 24 Aug 2009 19:40:47 +0000 (24 21:40 +0200)
committerCarlos R. Mafra <crmafra@gmail.com>
Mon, 24 Aug 2009 22:47:37 +0000 (25 00:47 +0200)
New windows should only be focused if they are in the current workspace.
Not performing this check can lead to WM switching workspaces if a
window is opened which:

   (a) is configured to appear in a particular workspace

and

   (b) sends a _NET_ACTIVE_WINDOW message to give focus to
       something, e.g. a sub window.

This behaviour was observed with firefox if a session with more
than one tab open was restored at startup because:

 "If a Client wants to activate another window, it MUST send a
   _NET_ACTIVE_WINDOW client message to the root window:"

Original-post: http://lists.windowmaker.info/dev/msg00442.html

[crmafra: Added comment]

src/wmspec.c

index 87c0a19..b24cde2 100644 (file)
@@ -1446,7 +1446,13 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent * event)
        if (!wwin)
                return False;
 
-       if (event->message_type == net_active_window) {
+       /*
+        * Firefox with multiple tabs sends aditional 'net_active_window'
+        * signals on startup, which causes unnecessary workspace switching
+        * if its initial workspace is different from the current
+        */
+       if (event->message_type == net_active_window &&
+           wwin->frame->workspace == wwin->screen_ptr->current_workspace) {
                wNETWMShowingDesktop(scr, False);
                wMakeWindowVisible(wwin);
        } else if (event->message_type == net_close_window) {