From 0faff93cf770927b6f5c3811688cd5e42d498970 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Amadeusz=20S=C5=82awi=C5=84ski?= Date: Sun, 24 Nov 2013 13:47:08 +0100 Subject: [PATCH] move dock/icons size adjustments, to fix window placement MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Amadeusz Sławiński --- src/actions.c | 20 -------------------- src/xinerama.c | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/actions.c b/src/actions.c index 4b336c94..13dffec6 100644 --- a/src/actions.c +++ b/src/actions.c @@ -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); diff --git a/src/xinerama.c b/src/xinerama.c index 92944b12..e1e47ee5 100644 --- a/src/xinerama.c +++ b/src/xinerama.c @@ -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; } -- 2.11.4.GIT