ewmh: Cache idx to avoid xcb_change_property calls

Updates ewmh_update_current_desktop, ewmh_update_number_of_desktops
This commit is contained in:
Orestis Floros 2019-05-03 16:04:32 +03:00
parent 8c25bc1bd4
commit 830465b39f
No known key found for this signature in database
GPG Key ID: E9AD9F32E401E38F
1 changed files with 13 additions and 2 deletions

View File

@ -24,10 +24,15 @@ xcb_window_t ewmh_window;
* *
*/ */
void ewmh_update_current_desktop(void) { void ewmh_update_current_desktop(void) {
static uint32_t old_idx = NET_WM_DESKTOP_NONE;
const uint32_t idx = ewmh_get_workspace_index(focused); const uint32_t idx = ewmh_get_workspace_index(focused);
if (idx != NET_WM_DESKTOP_NONE) {
xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root, A__NET_CURRENT_DESKTOP, XCB_ATOM_CARDINAL, 32, 1, &idx); if (idx == old_idx || idx == NET_WM_DESKTOP_NONE) {
return;
} }
old_idx = idx;
xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root, A__NET_CURRENT_DESKTOP, XCB_ATOM_CARDINAL, 32, 1, &idx);
} }
/* /*
@ -36,12 +41,18 @@ void ewmh_update_current_desktop(void) {
*/ */
void ewmh_update_number_of_desktops(void) { void ewmh_update_number_of_desktops(void) {
Con *output, *ws; Con *output, *ws;
static uint32_t old_idx = 0;
uint32_t idx = 0; uint32_t idx = 0;
FOREACH_NONINTERNAL { FOREACH_NONINTERNAL {
idx++; idx++;
}; };
if (idx == old_idx) {
return;
}
old_idx = idx;
xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root, xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root,
A__NET_NUMBER_OF_DESKTOPS, XCB_ATOM_CARDINAL, 32, 1, &idx); A__NET_NUMBER_OF_DESKTOPS, XCB_ATOM_CARDINAL, 32, 1, &idx);
} }