move dock/icons size adjustments, to fix window placement
authorAmadeusz Sławiński <amade@asmblr.net>
Sun, 24 Nov 2013 12:47:08 +0000 (24 13:47 +0100)
committerCarlos R. Mafra <crmafra@gmail.com>
Mon, 30 Dec 2013 18:11:07 +0000 (30 18:11 +0000)
Functions placing windows (PlaceWindow - src/placement.c, wMaximizeWindow -
src/actions.c) need to calculate area differently than ones placing icons
(PlaceIcon - src/placement.c, wArrangeIcons - src/actions.c).
So this patch puts adjustment code in wGetUsableAreaForHead which is
used by all those functions but called with different 'bool noicons'
argument depending on if it's called in window or icon placement
function.

Reported-by: Carlos R. Mafra <crmafra@gmail.com>
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
src/actions.c
src/xinerama.c

index 4b336c9..13dffec 100644 (file)
@@ -387,26 +387,6 @@ void wMaximizeWindow(WWindow *wwin, int directions)
                usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True);
        }
 
-       /* check if user wants dock covered */
-       if (scr->dock && (!scr->dock->lowered || wPreferences.no_window_over_dock)) {
-               int offset = wPreferences.icon_size + DOCK_EXTRA_SPACE;
-
-               if (scr->dock->on_right_side)
-                       usableArea.x2 -= offset;
-               else
-                       usableArea.x1 += offset;
-       }
-
-       /* check if icons are on the same side as dock, and adjust if not done already */
-       if (scr->dock && wPreferences.no_window_over_icons && !wPreferences.no_window_over_dock && (wPreferences.icon_yard & IY_VERT)) {
-               int offset = wPreferences.icon_size + DOCK_EXTRA_SPACE;
-
-               if (scr->dock->on_right_side && (wPreferences.icon_yard & IY_RIGHT))
-                       usableArea.x2 -= offset;
-               /* can't use IY_LEFT in if, it's 0 ... */
-               if (!scr->dock->on_right_side && !(wPreferences.icon_yard & IY_RIGHT))
-                       usableArea.x1 += offset;
-       }
 
        /* Only save directions, not kbd or xinerama hints */
        directions &= (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS);
index 92944b1..e1e47ee 100644 (file)
@@ -26,6 +26,7 @@
 #include "window.h"
 #include "framewin.h"
 #include "placement.h"
+#include "dock.h"
 
 #ifdef USE_XINERAMA
 # ifdef SOLARIS_XINERAMA       /* sucks */
@@ -303,6 +304,29 @@ WArea wGetUsableAreaForHead(WScreen * scr, int head, WArea * totalAreaPtr, Bool
        } else
                usableArea = totalArea;
 
+       if (noicons) {
+               /* check if user wants dock covered */
+               if (scr->dock && (!scr->dock->lowered || wPreferences.no_window_over_dock)) {
+                       int offset = wPreferences.icon_size + DOCK_EXTRA_SPACE;
+
+                       if (scr->dock->on_right_side)
+                               usableArea.x2 -= offset;
+                       else
+                               usableArea.x1 += offset;
+               }
+
+               /* check if icons are on the same side as dock, and adjust if not done already */
+               if (scr->dock && wPreferences.no_window_over_icons && !wPreferences.no_window_over_dock && (wPreferences.icon_yard & IY_VERT)) {
+                       int offset = wPreferences.icon_size + DOCK_EXTRA_SPACE;
+
+                       if (scr->dock->on_right_side && (wPreferences.icon_yard & IY_RIGHT))
+                               usableArea.x2 -= offset;
+                       /* can't use IY_LEFT in if, it's 0 ... */
+                       if (!scr->dock->on_right_side && !(wPreferences.icon_yard & IY_RIGHT))
+                               usableArea.x1 += offset;
+               }
+       }
+
        return usableArea;
 }