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