]> git.sur5r.net Git - i3/i3/blobdiff - src/ewmh.c
ewmh: Cache idx to avoid xcb_change_property calls
[i3/i3] / src / ewmh.c
index bd8100b359475c029cc83689cb7d54edee93ffb6..a26eef39c491931033fb932a6bfbe4bf54d41593 100644 (file)
@@ -24,10 +24,15 @@ xcb_window_t ewmh_window;
  *
  */
 void ewmh_update_current_desktop(void) {
+    static uint32_t old_idx = NET_WM_DESKTOP_NONE;
     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) {
     Con *output, *ws;
+    static uint32_t old_idx = 0;
     uint32_t idx = 0;
 
     FOREACH_NONINTERNAL {
         idx++;
     };
 
+    if (idx == old_idx) {
+        return;
+    }
+    old_idx = idx;
+
     xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root,
                         A__NET_NUMBER_OF_DESKTOPS, XCB_ATOM_CARDINAL, 32, 1, &idx);
 }