From 289795b22a2ab0bf3f24e514c50f43df860f2690 Mon Sep 17 00:00:00 2001 From: Dave Davenport Date: Tue, 9 Feb 2016 21:25:29 +0100 Subject: [PATCH] Fix finding active desktop! --- include/textbox.h | 18 +++++++++--------- include/x11-helper.h | 1 + source/dialogs/dmenu.c | 4 ++-- source/rofi.c | 3 ++- source/textbox.c | 2 +- source/x11-helper.c | 14 ++++++++++++++ 6 files changed, 29 insertions(+), 13 deletions(-) diff --git a/include/textbox.h b/include/textbox.h index ecc52784..fe59b02a 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -40,15 +40,15 @@ typedef struct typedef enum { - TB_AUTOHEIGHT = 1 << 0, - TB_AUTOWIDTH = 1 << 1, - TB_LEFT = 1 << 16, - TB_RIGHT = 1 << 17, - TB_CENTER = 1 << 18, - TB_EDITABLE = 1 << 19, - TB_MARKUP = 1 << 20, - TB_WRAP = 1 << 21, - TB_PASSWORD = 1 << 22, + TB_AUTOHEIGHT = 1 << 0, + TB_AUTOWIDTH = 1 << 1, + TB_LEFT = 1 << 16, + TB_RIGHT = 1 << 17, + TB_CENTER = 1 << 18, + TB_EDITABLE = 1 << 19, + TB_MARKUP = 1 << 20, + TB_WRAP = 1 << 21, + TB_PASSWORD = 1 << 22, } TextboxFlags; typedef enum diff --git a/include/x11-helper.h b/include/x11-helper.h index b075feeb..a3647b71 100644 --- a/include/x11-helper.h +++ b/include/x11-helper.h @@ -55,6 +55,7 @@ int window_get_cardinal_prop ( Display *display, Window w, Atom atom, unsigned l X ( _NET_WM_WINDOW_TYPE_NORMAL ), \ X ( _NET_WM_STATE_FULLSCREEN ), \ X ( _NET_WM_DESKTOP ), \ + X ( _NET_DESKTOP_VIEWPORT ), \ X ( CLIPBOARD ), \ X ( UTF8_STRING ), \ X ( _NET_WM_WINDOW_OPACITY ) diff --git a/source/dialogs/dmenu.c b/source/dialogs/dmenu.c index f336a1fd..a6153b6c 100644 --- a/source/dialogs/dmenu.c +++ b/source/dialogs/dmenu.c @@ -89,8 +89,8 @@ static char **get_dmenu ( FILE *fd, unsigned int *length ) data[l - 1] = '\0'; l--; } - if ( ! g_utf8_validate ( data, l, NULL) ) { - fprintf(stderr, "String: '%s' is not valid utf-8\n", data); + if ( !g_utf8_validate ( data, l, NULL ) ) { + fprintf ( stderr, "String: '%s' is not valid utf-8\n", data ); continue; } diff --git a/source/rofi.c b/source/rofi.c index 0a1f0d13..8db09233 100644 --- a/source/rofi.c +++ b/source/rofi.c @@ -1568,7 +1568,8 @@ MenuState *menu ( Mode *sw, state->top_offset = state->border * 1 + state->line_height + 2 + config.line_margin * 2; // Move indicator to end. - widget_move ( WIDGET ( state->case_indicator ), state->border + textbox_get_width ( state->prompt_tb ) + entrybox_width, state->border ); + widget_move ( WIDGET ( state->case_indicator ), state->border + textbox_get_width ( state->prompt_tb ) + entrybox_width, + state->border ); textbox_text ( state->case_indicator, get_matching_state () ); state->message_tb = NULL; diff --git a/source/textbox.c b/source/textbox.c index d291327b..6a2ee40e 100644 --- a/source/textbox.c +++ b/source/textbox.c @@ -140,7 +140,7 @@ static void __textbox_update_pango_text ( textbox *tb ) pango_layout_set_attributes ( tb->layout, NULL ); pango_layout_set_text ( tb->layout, string, l ); } - else if ( tb->flags & TB_MARKUP || tb->tbft & MARKUP ) { + else if ( tb->flags & TB_MARKUP || tb->tbft & MARKUP ) { pango_layout_set_markup ( tb->layout, tb->text, -1 ); } else { diff --git a/source/x11-helper.c b/source/x11-helper.c index 9c408748..b21e6ff3 100644 --- a/source/x11-helper.c +++ b/source/x11-helper.c @@ -265,6 +265,20 @@ void monitor_active ( Display *display, workarea *mon ) } fprintf ( stderr, "Failed to find selected monitor.\n" ); } + // Get the current desktop. + unsigned long current_desktop = 0; + if ( window_get_cardinal_prop ( display, root, netatoms[_NET_CURRENT_DESKTOP], ¤t_desktop, 1 ) ) { + unsigned long desktops = 0; + if ( window_get_cardinal_prop ( display, root, netatoms[_NET_NUMBER_OF_DESKTOPS], &desktops, 1 ) ) { + unsigned long deskg[desktops * 2]; + if ( window_get_cardinal_prop ( display, root, netatoms[_NET_DESKTOP_VIEWPORT], &deskg[0], desktops * 2 ) ) { + if ( current_desktop < desktops ) { + monitor_dimensions ( display, screen, deskg[current_desktop * 2], deskg[current_desktop * 2 + 1], mon ); + return; + } + } + } + } if ( window_get_prop ( display, root, netatoms[_NET_ACTIVE_WINDOW], &type, &count, &id, sizeof ( Window ) ) && type == XA_WINDOW && count > 0 ) { XWindowAttributes attr;