give the dock a strut and use it
Dana Jansens danakj@orodu.net
3 files changed,
57 insertions(+),
1 deletions(-)
M
openbox/dock.c
→
openbox/dock.c
@@ -11,10 +11,14 @@ #define DOCKAPP_EVENT_MASK (StructureNotifyMask)
static Dock *dock; +Strut dock_strut; + void dock_startup() { XSetWindowAttributes attrib; int i; + + STRUT_SET(dock_strut, 0, 0, 0, 0); dock = g_new0(struct Dock, 1); dock->obwin.type = Window_Dock;@@ -273,6 +277,49 @@ break;
} } + /* set the strut */ + switch (config_dock_pos) { + case DockPos_Floating: + STRUT_SET(dock_strut, 0, 0, 0, 0); + break; + case DockPos_TopLeft: + if (config_dock_horz) + STRUT_SET(dock_strut, 0, dock->h, 0, 0); + else + STRUT_SET(dock_strut, dock->w, 0, 0, 0); + break; + case DockPos_Top: + STRUT_SET(dock_strut, 0, dock->h, 0, 0); + break; + case DockPos_TopRight: + if (config_dock_horz) + STRUT_SET(dock_strut, 0, dock->h, 0, 0); + else + STRUT_SET(dock_strut, 0, 0, dock->w, 0); + break; + case DockPos_Left: + STRUT_SET(dock_strut, dock->w, 0, 0, 0); + break; + case DockPos_Right: + STRUT_SET(dock_strut, 0, 0, dock->w, 0); + break; + case DockPos_BottomLeft: + if (config_dock_horz) + STRUT_SET(dock_strut, 0, 0, 0, dock->h); + else + STRUT_SET(dock_strut, dock->w, 0, 0, 0); + break; + case DockPos_Bottom: + STRUT_SET(dock_strut, 0, 0, 0, dock->h); + break; + case DockPos_BottomRight: + if (config_dock_horz) + STRUT_SET(dock_strut, 0, 0, 0, dock->h); + else + STRUT_SET(dock_strut, 0, 0, dock->w, 0); + break; + } + /* not used for actually sizing shit */ dock->w -= theme_bwidth * 2; dock->h -= theme_bwidth * 2;@@ -290,6 +337,8 @@
/* but they are useful outside of this function! */ dock->w += theme_bwidth * 2; dock->h += theme_bwidth * 2; + + screen_update_struts(); } void dock_app_configure(DockApp *app, int w, int h)
M
openbox/dock.h
→
openbox/dock.h
@@ -2,9 +2,10 @@ #ifndef __dock_h
#define __dock_h #include "timer.h" -#include "render/render.h" #include "window.h" #include "stacking.h" +#include "geom.h" +#include "render/render.h" #include <glib.h> #include <X11/Xlib.h>@@ -50,6 +51,8 @@ int y;
int w; int h; } DockApp; + +extern Strut dock_strut; void dock_startup(); void dock_shutdown();
M
openbox/screen.c
→
openbox/screen.c
@@ -497,6 +497,10 @@ }
/* apply to the 'all desktops' strut */ STRUT_ADD(strut[screen_num_desktops], c->strut); } + + for (i = 0; i < screen_num_desktops; ++i) + STRUT_ADD(strut[i], dock_strut); + screen_update_area(); }