1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-20 21:08:08 +01:00

move dock/icons size adjustments, to fix window placement

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>
This commit is contained in:
Amadeusz Sławiński
2013-11-24 13:47:08 +01:00
committed by Carlos R. Mafra
parent 895a6e97e1
commit 0faff93cf7
2 changed files with 24 additions and 20 deletions

View 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);

View 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;
}