all repos — openbox @ 1514ce75b654903003c7f38fec6482d61c79bb48

openbox fork - make it a bit more like ryudo

ignore the dock in placing as a last resort
Dana Jansens danakj@orodu.net
commit

1514ce75b654903003c7f38fec6482d61c79bb48

parent

cbaafd2ff9194570686cc242910f81e104ee8c42

3 files changed, 35 insertions(+), 17 deletions(-)

jump to
M openbox/dock.copenbox/dock.c

@@ -637,3 +637,8 @@ ob_main_loop_timeout_remove(ob_main_loop, show_timeout);

} } } + +void dock_get_area(Rect *a) +{ + RECT_SET(*a, dock->x, dock->y, dock->w, dock->h); +}
M openbox/dock.hopenbox/dock.h

@@ -82,4 +82,6 @@

void dock_app_drag(ObDockApp *app, XMotionEvent *e); void dock_app_configure(ObDockApp *app, gint w, gint h); +void dock_get_area(Rect *a); + #endif
M openbox/place.copenbox/place.c

@@ -23,7 +23,10 @@ #include "screen.h"

#include "frame.h" #include "focus.h" #include "config.h" +#include "dock.h" #include "debug.h" + +extern ObDock *dock; static void add_choice(guint *choice, guint mychoice) {

@@ -220,14 +223,15 @@ return result;

} enum { - IGNORE_FULLSCREEN = 1 << 0, - IGNORE_MAXIMIZED = 1 << 1, - IGNORE_MENUTOOL = 1 << 2, - /*IGNORE_SHADED = 1 << 3,*/ - IGNORE_NONGROUP = 1 << 3, - IGNORE_BELOW = 1 << 4, - IGNORE_NONFOCUS = 1 << 5, - IGNORE_END = 1 << 6 + IGNORE_FULLSCREEN = 1, + IGNORE_MAXIMIZED = 2, + IGNORE_MENUTOOL = 3, + /*IGNORE_SHADED = 3,*/ + IGNORE_NONGROUP = 4, + IGNORE_BELOW = 5, + /*IGNORE_NONFOCUS = 1 << 5,*/ + IGNORE_DOCK = 6, + IGNORE_END = 7 }; static gboolean place_nooverlap(ObClient *c, gint *x, gint *y)

@@ -245,7 +249,7 @@ maxsize = 0;

maxit = NULL; /* try ignoring different things to find empty space */ - for (ignore = 0; ignore < IGNORE_END && !ret; ignore = (ignore << 1) + 1) { + for (ignore = 0; ignore < IGNORE_END && !ret; ignore++) { guint i; /* try all monitors in order of preference */

@@ -274,29 +278,36 @@ if (test->type == OB_CLIENT_TYPE_SPLASH ||

test->type == OB_CLIENT_TYPE_DESKTOP) continue; - if ((ignore & IGNORE_FULLSCREEN) && + if ((ignore >= IGNORE_FULLSCREEN) && test->fullscreen) continue; - if ((ignore & IGNORE_MAXIMIZED) && + if ((ignore >= IGNORE_MAXIMIZED) && test->max_horz && test->max_vert) continue; - if ((ignore & IGNORE_MENUTOOL) && + if ((ignore >= IGNORE_MENUTOOL) && (test->type == OB_CLIENT_TYPE_MENU || test->type == OB_CLIENT_TYPE_TOOLBAR) && client_has_parent(c)) continue; /* - if ((ignore & IGNORE_SHADED) && + if ((ignore >= IGNORE_SHADED) && test->shaded) continue; */ - if ((ignore & IGNORE_NONGROUP) && + if ((ignore >= IGNORE_NONGROUP) && client_has_group_siblings(c) && test->group != c->group) continue; - if ((ignore & IGNORE_BELOW) && + if ((ignore >= IGNORE_BELOW) && test->layer < c->layer) continue; - if ((ignore & IGNORE_NONFOCUS) && + /* + if ((ignore >= IGNORE_NONFOCUS) && focus_client != test) continue; - + */ /* don't ignore this window, so remove it from the available area */ spaces = area_remove(spaces, &test->frame->area); + } + + if (ignore < IGNORE_DOCK) { + Rect a; + dock_get_area(&a); + spaces = area_remove(spaces, &a); } for (sit = spaces; sit; sit = g_slist_next(sit)) {