]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
add the showdesktop action
[chaz/openbox] / openbox / client.c
index f8ebd1361cf29681eb318f9dc880b5ed2d1e931e..771294a4b3081897fc9db34da889040ae33c7e5a 100644 (file)
@@ -394,7 +394,7 @@ void client_manage(Window window)
     */
     if (ob_state() == OB_STATE_RUNNING &&
         (transient ||
-         (!(self->sized & USSize) &&
+         (!(self->sized & USSize || self->positioned & USPosition) &&
           client_normal(self) &&
           !self->session)))
     {
@@ -2084,8 +2084,11 @@ void client_update_icons(ObClient *self)
     /* set the default icon onto the window
        in theory, this could be a race, but if a window doesn't set an icon
        or removes it entirely, it's not very likely it is going to set one
-       right away afterwards */
-    if (self->nicons == 0) {
+       right away afterwards
+
+       if it has parents, then one of them will have an icon already 
+    */
+    if (self->nicons == 0 && !self->parents) {
         RrPixel32 *icon = ob_rr_theme->def_win_icon;
         gulong *data;
 
@@ -3260,7 +3263,8 @@ void client_set_desktop_recursive(ObClient *self,
         frame_adjust_state(self->frame);
         /* 'move' the window to the new desktop */
         if (!donthide)
-            client_showhide(self);
+            client_hide(self);
+        client_show(self);
         /* raise if it was not already on the desktop */
         if (old != DESKTOP_ALL && !dontraise)
             stacking_raise(CLIENT_AS_WINDOW(self));
@@ -4079,3 +4083,30 @@ gboolean client_has_group_siblings(ObClient *self)
 {
     return self->group && self->group->members->next;
 }
+
+ObClientIcon *client_thumbnail(ObClient *self, gint wantw, gint wanth)
+{
+    ObClientIcon *ret;
+    RrPixel32 *data;
+    gint w, h;
+
+    if (!self->frame->pixmap) return NULL;
+    if (!RrPixmapToRGBA(ob_rr_inst, self->frame->pixmap, None, &w, &h, &data))
+        return NULL;
+
+    /* resize the thumbnail (within aspect ratio) to the given sizes */
+
+    ret = g_new(ObClientIcon, 1);
+    ret->data = data;
+    ret->width = w;
+    ret->height = h;
+    return ret;
+}
+
+void clienticon_free(ObClientIcon *ci)
+{
+    if (ci) {
+        g_free(ci->data);
+        g_free(ci);
+    }
+}
This page took 0.021047 seconds and 4 git commands to generate.