Index: doc/how-to-get-focus-right.txt
===================================================================
RCS file: /cvs/gnome/metacity/doc/how-to-get-focus-right.txt,v
retrieving revision 1.3
diff -p -u -r1.3 how-to-get-focus-right.txt
--- doc/how-to-get-focus-right.txt	15 Sep 2004 16:53:20 -0000	1.3
+++ doc/how-to-get-focus-right.txt	21 Dec 2004 05:14:43 -0000
@@ -76,9 +76,13 @@ and LeaveNotify events should be ignored
 without using the mouse, for example, by grabs).
 
 Finally, windows of type WM_DOCK or WM_DESKTOP (e.g. the desktop and
-the panel) present a special case.  For all focus modes, we only focus
-these windows if the user clicks on them or uses Ctrl-Alt-Tab to
-navigate to them.
+the panel) present a special case, at least partially due to the lack
+of decorations.  For WM_DESKTOP windows, we only focus them if the
+user explicitly requests it (e.g. clicks on the window, uses
+Ctrl-Alt-Tab to navigate to it, uses a keybinding to show the desktop,
+etc.).  For WM_DOCK windows, we do not focus unless we receive a very
+explicit request (e.g. Ctrl-Alt-Tab or a _NET_ACTIVE_WINDOW message;
+not normal clicks).
 
 
 
@@ -94,7 +98,8 @@ To read more about the bugs that inspire
   - Ignoring EnterNotify and LeaveNotify events during keynav
     http://bugzilla.gnome.org/show_bug.cgi?id=101190
   - Not focusing panels
-    http://bugzilla.gnome.org/show_bug.cgi?id=120100 (maybe a different bug?)
+    http://bugzilla.gnome.org/show_bug.cgi?id=160470
+    http://bugzilla.gnome.org/show_bug.cgi?id=120100
 
 There were many bugs which had to be fixed to get all the above
 working; they helped form these policies and/or show the difficulties
Index: src/display.c
===================================================================
RCS file: /cvs/gnome/metacity/src/display.c,v
retrieving revision 1.238
diff -p -u -r1.238 display.c
--- src/display.c	20 Dec 2004 02:46:42 -0000	1.238
+++ src/display.c	21 Dec 2004 05:14:45 -0000
@@ -1589,30 +1589,30 @@ event_callback (XEvent   *event,
           if (unmodified ||
               event->xbutton.button == 1)
             {
+              /* don't focus if frame received, will be lowered in
+               * frames.c or special-cased if the click was on a
+               * minimize/close button.
+               */
               if (!frame_was_receiver)
                 {
-                  /* don't focus if frame received, will be lowered in
-                   * frames.c or special-cased if the click was on a
-                   * minimize/close button.
-                   */
-
                   /* Raise on clicking the client area always or only
                    * in click to focus mode? The debate rages.
                    * Feel free to change TRUE to FALSE or vice versa
                    */
                   if (TRUE /* meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK */) 
+                    meta_window_raise (window);
+                  else
+                    meta_topic (META_DEBUG_FOCUS,
+                                "Not raising window on click due to mouse/sloppy focus mode\n");
+
+                  /* Don't focus panels--they must explicitly request focus.
+                   * See bug 160470
+                   */
+		  if (window->type != META_WINDOW_DOCK)
                     {
-                      meta_window_raise (window);
-                      
                       meta_topic (META_DEBUG_FOCUS,
                                   "Focusing %s due to unmodified button %d press (display.c)\n",
                                   window->desc, event->xbutton.button);
-                      meta_window_focus (window, event->xbutton.time);
-                    }
-                  else
-                    {
-                      meta_topic (META_DEBUG_FOCUS,
-                                  "Not raising window on click due to mouse/sloppy focus mode\n");
                       meta_window_focus (window, event->xbutton.time);
                     }
                 }
