Переглянути джерело

Add ewmh_manage_window_type to manage state & others hints without event

Martin Duquesnoy 12 роки тому
батько
коміт
c5d95b5999
3 змінених файлів з 27 додано та 0 видалено
  1. 1 0
      src/client.c
  2. 25 0
      src/ewmh.c
  3. 1 0
      src/ewmh.h

+ 1 - 0
src/client.c

@@ -853,6 +853,7 @@ client_new(Window w, XWindowAttributes *wa, bool scan)
           client_get_name(c);
           client_focus(c);
           client_configure(c);
+          ewmh_manage_window_type(c);
      }
 
      return c;

+ 25 - 0
src/ewmh.c

@@ -169,3 +169,28 @@ ewmh_manage_state(long data[], struct client *c)
      }
 }
 
+void
+ewmh_manage_window_type(struct client *c)
+{
+     Atom *atom, rf;
+     int f;
+     unsigned long n, il, i;
+     unsigned char *data = NULL;
+     long ldata[5] = { _NET_WM_STATE_ADD };
+
+     /* _NET_WM_STATE at window mangement */
+     if(XGetWindowProperty(W->dpy, c->win, W->net_atom[net_wm_state], 0L, 0x7FFFFFFFL, false,
+                           XA_ATOM, &rf, &f, &n, &il, &data) == Success && n)
+     {
+          atom = (Atom*)data;
+
+          for(i = 0; i < n; ++i)
+          {
+               ldata[1] = atom[i];
+               ewmh_manage_state(ldata, c);
+          }
+
+          XFree(data);
+     }
+}
+

+ 1 - 0
src/ewmh.h

@@ -76,5 +76,6 @@ void ewmh_init(void);
 void ewmh_set_wm_state(Window w, int state);
 void ewmh_update_wmfs_props(void);
 void ewmh_manage_state(long data[], struct client *c);
+void ewmh_manage_window_type(struct client *c);
 
 #endif /* EWMH_H */