summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Davenport <qball@gmpclient.org>2021-05-31 14:02:08 +0200
committerDave Davenport <qball@gmpclient.org>2021-05-31 14:02:08 +0200
commitf14c5c2ada07d3c1c392b25846a59590cc12c8e6 (patch)
tree1c6e839fecd33f8382be53e955f07a143d8a8413
parentac179cd2d917cdbbb058592c10084bed98b817ae (diff)
[X11Helper] Add exception for bspwm window placing above window.
fixes: #1169
-rw-r--r--include/xcb.h2
-rw-r--r--source/dialogs/window.c1
-rw-r--r--source/xcb.c10
3 files changed, 12 insertions, 1 deletions
diff --git a/include/xcb.h b/include/xcb.h
index 9a71dc38..90a896b7 100644
--- a/include/xcb.h
+++ b/include/xcb.h
@@ -208,6 +208,8 @@ typedef enum
WM_DO_NOT_CHANGE_CURRENT_DESKTOP = 1,
/** PANGO WORKSPACE NAMES */
WM_PANGO_WORKSPACE_NAMES = 2,
+ /** Root window offset (for bspwm) */
+ WM_ROOT_WINDOW_OFFSET = 4,
} WindowManagerQuirk;
/**
diff --git a/source/dialogs/window.c b/source/dialogs/window.c
index 4fcf6e95..d2e2d792 100644
--- a/source/dialogs/window.c
+++ b/source/dialogs/window.c
@@ -496,6 +496,7 @@ static void _window_mode_load_data ( Mode *sw, unsigned int cd )
current_desktop = 0;
}
+ g_debug("Get list from: %d", xcb->screen_nbr);
c = xcb_ewmh_get_client_list_stacking ( &xcb->ewmh, xcb->screen_nbr );
xcb_ewmh_get_windows_reply_t clients = { 0, };
if ( xcb_ewmh_get_client_list_stacking_reply ( &xcb->ewmh, c, &clients, NULL ) ) {
diff --git a/source/xcb.c b/source/xcb.c
index ce5722d0..0e3c9594 100644
--- a/source/xcb.c
+++ b/source/xcb.c
@@ -824,6 +824,11 @@ static int monitor_active_from_id_focused ( int mon_id, workarea *mon )
mon->w = r->width;
mon->h = r->height;
retv = TRUE;
+ if ( (current_window_manager&WM_ROOT_WINDOW_OFFSET) == WM_ROOT_WINDOW_OFFSET ){
+ mon->x += r->x;
+ mon->y += r->y;
+ }
+ g_debug("mon pos: %d %d %d-%d", mon->x, mon->y, mon->w, mon->h);
}
else if ( mon_id == -4 ) {
monitor_dimensions ( t->dst_x, t->dst_y, mon );
@@ -1345,10 +1350,13 @@ static void x11_helper_discover_window_manager ( void )
xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_name_unchecked ( &( xcb->ewmh ), wm_win );
if ( xcb_ewmh_get_wm_name_reply ( &( xcb->ewmh ), cookie, &wtitle, (void *) 0 ) ) {
if ( wtitle.strings_len > 0 ) {
- g_debug ( "Found window manager: %s", wtitle.strings );
+ g_debug ( "Found window manager: |%s|", wtitle.strings );
if ( g_strcmp0 ( wtitle.strings, "i3" ) == 0 ) {
current_window_manager = WM_DO_NOT_CHANGE_CURRENT_DESKTOP | WM_PANGO_WORKSPACE_NAMES;
}
+ else if ( g_strcmp0 ( wtitle.strings, "bspwm" ) == 0 ) {
+ current_window_manager = WM_ROOT_WINDOW_OFFSET;
+ }
}
xcb_ewmh_get_utf8_strings_reply_wipe ( &wtitle );
}