]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
remove debug print
[chaz/openbox] / openbox / client.c
index 097ca12dea3497ecee3579b96684a95b1a765456..17172dd99f37fb40b4597f24dad32ac4cbd9f0b2 100644 (file)
@@ -54,7 +54,8 @@ void client_startup()
 
     /* save the stacking order on startup! */
     PROP_GETA32(ob_root, net_client_list_stacking, window,
-                &client_startup_stack_order, &client_startup_stack_size);
+                (guint32**)&client_startup_stack_order,
+                &client_startup_stack_size);
 
     client_set_list();
 }
@@ -79,7 +80,7 @@ void client_set_list()
     } else
        windows = NULL;
 
-    PROP_SETA32(ob_root, net_client_list, window, windows, size);
+    PROP_SETA32(ob_root, net_client_list, window, (guint32*)windows, size);
 
     if (windows)
        g_free(windows);
@@ -517,14 +518,6 @@ static void client_get_all(Client *self)
     client_update_icons(self);
     client_update_kwm_icon(self);
 
-    /* this makes sure that these windows appear on all desktops */
-    if (self->type == Type_Desktop)
-       self->desktop = DESKTOP_ALL;
-
-    /* set the desktop hint, to make sure that it always exists, and to
-       reflect any changes we've made here */
-    PROP_SET32(self->window, net_wm_desktop, cardinal, self->desktop);
-
     client_change_state(self);
 }
 
@@ -542,21 +535,24 @@ static void client_get_area(Client *self)
 
 static void client_get_desktop(Client *self)
 {
-    unsigned int d;
+    guint32 d;
 
-    if (PROP_GET32(self->window, net_wm_desktop, cardinal, d)) {
+    if (PROP_GET32(self->window, net_wm_desktop, cardinal, &d)) {
        if (d >= screen_num_desktops && d != DESKTOP_ALL)
            d = screen_num_desktops - 1;
        self->desktop = d;
     } else {
        /* defaults to the current desktop */
        self->desktop = screen_desktop;
+
+        /* set the desktop hint, to make sure that it always exists */
+        PROP_SET32(self->window, net_wm_desktop, cardinal, self->desktop);
     }
 }
 
 static void client_get_state(Client *self)
 {
-    Atom *state;
+    guint32 *state;
     guint num;
   
     self->modal = self->shaded = self->max_horz = self->max_vert =
@@ -688,7 +684,7 @@ static void client_get_mwm_hints(Client *self)
 void client_get_type(Client *self)
 {
     guint num, i;
-    Atom *val;
+    guint32 *val;
 
     self->type = -1;
   
@@ -734,11 +730,15 @@ void client_get_type(Client *self)
        else
            self->type = Type_Normal;
     }
+
+    /* this makes sure that these windows appear on all desktops */
+    if (self->type == Type_Desktop)
+       self->desktop = DESKTOP_ALL;
 }
 
 void client_update_protocols(Client *self)
 {
-    Atom *proto;
+    guint32 *proto;
     guint num_return, i;
 
     self->focus_notify = FALSE;
@@ -949,7 +949,7 @@ void client_setup_decor_and_functions(Client *self)
 
 static void client_change_allowed_actions(Client *self)
 {
-    Atom actions[9];
+    guint32 actions[9];
     int num = 0;
 
     actions[num++] = prop_atoms.net_wm_action_change_desktop;
@@ -1014,6 +1014,7 @@ void client_update_wmhints(Client *self)
 {
     XWMHints *hints;
     gboolean ur = FALSE;
+    GSList *it;
 
     /* assume a window takes input if it doesnt specify */
     self->can_focus = TRUE;
@@ -1032,35 +1033,57 @@ void client_update_wmhints(Client *self)
            ur = TRUE;
 
        if (!(hints->flags & WindowGroupHint))
-            hints->window_group = None; /* no group */
+            hints->window_group = None;
+
         /* did the group state change? */
-        if (hints->window_group != (self->group ? self->group->leader : None)){
+        if (hints->window_group !=
+            (self->group ? self->group->leader : None)) {
             /* remove from the old group if there was one */
-            if (self->group != NULL)
+            if (self->group != NULL) {
+                /* remove transients of the group */
+                for (it = self->group->members; it; it = it->next)
+                    if (it->data != self &&
+                        ((Client*)it->data)->transient_for == TRAN_GROUP) {
+                        self->transients = g_slist_remove(self->transients,
+                                                          it->data);
+                    }
                 group_remove(self->group, self);
-            if (hints->window_group != None)
+                self->group = NULL;
+            }
+            if (hints->window_group != None) {
                 self->group = group_add(hints->window_group, self);
 
+                /* add other transients of the group that are already
+                   set up */
+                for (it = self->group->members; it; it = it->next)
+                    if (it->data != self &&
+                        ((Client*)it->data)->transient_for == TRAN_GROUP)
+                        self->transients = g_slist_append(self->transients,
+                                                          it->data);
+            }
+
             /* because the self->transient flag wont change from this call,
                we don't need to update the window's type and such, only its
-               transient_for, and the transients lists of other windows in the
-               group may be affected */
+               transient_for, and the transients lists of other windows in
+               the group may be affected */
             client_update_transient_for(self);
         }
 
-       if (hints->flags & IconPixmapHint) {
-           client_update_kwm_icon(self);
-           /* try get the kwm icon first, this is a fallback only */
-           if (self->pixmap_icon == None) {
-               self->pixmap_icon = hints->icon_pixmap;
-               if (hints->flags & IconMaskHint)
-                   self->pixmap_icon_mask = hints->icon_mask;
-               else
-                   self->pixmap_icon_mask = None;
-
-               if (self->frame)
-                   frame_adjust_icon(self->frame);
-           }
+        client_update_kwm_icon(self);
+        /* try get the kwm icon first, this is a fallback only */
+        if (self->pixmap_icon == None) {
+            if (hints->flags & IconPixmapHint) {
+                if (self->pixmap_icon == None) {
+                    self->pixmap_icon = hints->icon_pixmap;
+                    if (hints->flags & IconMaskHint)
+                        self->pixmap_icon_mask = hints->icon_mask;
+                    else
+                        self->pixmap_icon_mask = None;
+
+                    if (self->frame)
+                        frame_adjust_icon(self->frame);
+                }
+            }
        }
 
        XFree(hints);
@@ -1133,10 +1156,9 @@ void client_update_class(Client *self)
             if (data[1])
                 self->class = g_strdup(data[1]);
         }
+        g_strfreev(data);     
     }
 
-    g_strfreev(data);     
-
     if (PROP_GETS(self->window, wm_window_role, locale, &s))
        self->role = g_strdup(s);
 
@@ -1213,7 +1235,7 @@ void client_update_icons(Client *self)
 void client_update_kwm_icon(Client *self)
 {
     guint num;
-    Pixmap *data;
+    guint32 *data;
 
     if (!PROP_GETA32(self->window, kwm_win_icon, kwm_win_icon, &data, &num)) {
        self->pixmap_icon = self->pixmap_icon_mask = None;
@@ -1231,9 +1253,9 @@ void client_update_kwm_icon(Client *self)
 
 static void client_change_state(Client *self)
 {
-    unsigned long state[2];
-    Atom netstate[10];
-    int num;
+    guint32 state[2];
+    guint32 netstate[10];
+    guint num;
 
     state[0] = self->wmstate;
     state[1] = None;
@@ -1313,7 +1335,7 @@ void client_calc_layer(Client *self)
             for (it = self->group->members; it; it = it->next)
                 if (it->data != self &&
                     ((Client*)it->data)->transient_for != TRAN_GROUP) {
-                    self = self->transient_for;
+                    self = it->data;
                     break;
                 }
         }
@@ -1586,7 +1608,7 @@ void client_fullscreen(Client *self, gboolean fs, gboolean savearea)
         x = y = w = h = 0;
     } else {
         guint num;
-       guint32 *dimensions;
+       gint32 *dimensions;
 
         /* pick some fallbacks... */
         x = screen_area(self->desktop)->x +
@@ -1597,7 +1619,7 @@ void client_fullscreen(Client *self, gboolean fs, gboolean savearea)
         h = screen_area(self->desktop)->height / 2;
 
        if (PROP_GETA32(self->window, openbox_premax, cardinal,
-                        dimensions, &num)) {
+                        (guint32**)&dimensions, &num)) {
             if (num == 4) {
                 x = dimensions[0];
                 y = dimensions[1];
@@ -1715,7 +1737,7 @@ void client_maximize(Client *self, gboolean max, int dir, gboolean savearea)
            /* get the property off the window and use it for the dimensions
               we are already maxed on */
            if (PROP_GETA32(self->window, openbox_premax, cardinal,
-                           &readdim, &num)) {
+                           (guint32**)&readdim, &num)) {
                 if (num == 4) {
                     if (self->max_horz) {
                         dimensions[0] = readdim[0];
@@ -1730,7 +1752,7 @@ void client_maximize(Client *self, gboolean max, int dir, gboolean savearea)
            }
 
            PROP_SETA32(self->window, openbox_premax, cardinal,
-                       dimensions, 4);
+                       (guint32*)dimensions, 4);
        }
     } else {
         guint num;
@@ -1749,7 +1771,7 @@ void client_maximize(Client *self, gboolean max, int dir, gboolean savearea)
         }
 
        if (PROP_GETA32(self->window, openbox_premax, cardinal,
-                       &dimensions, &num)) {
+                       (guint32**)&dimensions, &num)) {
             if (num == 4) {
                 if (dir == 0 || dir == 1) { /* horz */
                     x = dimensions[0];
This page took 0.030212 seconds and 4 git commands to generate.