]> Dogcows Code - chaz/openbox/commitdiff
place transients without a parent in the middle of the screen
authorDana Jansens <danakj@orodu.net>
Mon, 23 Apr 2007 23:46:13 +0000 (23:46 +0000)
committerDana Jansens <danakj@orodu.net>
Mon, 23 Apr 2007 23:46:13 +0000 (23:46 +0000)
dont use non-normal windows as parents

openbox/client.c
openbox/place.c

index c184c891dbb90efab902c47cb0f20f1e771dc2b3..ef948428ad793b24f55cbdb79ac5b1b3a4967049 100644 (file)
@@ -3225,7 +3225,8 @@ guint client_monitor(ObClient *self)
 
 ObClient *client_search_top_parent(ObClient *self)
 {
-    while (self->transient_for && self->transient_for != OB_TRAN_GROUP)
+    while (self->transient_for && self->transient_for != OB_TRAN_GROUP &&
+           client_normal(self))
         self = self->transient_for;
     return self;
 }
index 4717cbfc3c3ca98ca962d4a7f8fb093a6e562b51..5614ecf3e002d55f06109c30e13a3330503e9bef 100644 (file)
@@ -418,11 +418,14 @@ static gboolean place_transient(ObClient *client, gint *x, gint *y)
         if (client->transient_for != OB_TRAN_GROUP) {
             ObClient *c = client;
             ObClient *p = client->transient_for;
-            *x = (p->frame->area.width - c->frame->area.width) / 2 +
-                p->frame->area.x;
-            *y = (p->frame->area.height - c->frame->area.height) / 2 +
-                p->frame->area.y;
-            return TRUE;
+
+            if (client_normal(p)) {
+                *x = (p->frame->area.width - c->frame->area.width) / 2 +
+                    p->frame->area.x;
+                *y = (p->frame->area.height - c->frame->area.height) / 2 +
+                    p->frame->area.y;
+                return TRUE;
+            }
         } else {
             GSList *it;
             gboolean first = TRUE;
@@ -451,6 +454,19 @@ static gboolean place_transient(ObClient *client, gint *x, gint *y)
             }
         }
     }
+
+    if (client->transient) {
+        Rect **areas;
+
+        areas = pick_head(client);
+
+        *x = (areas[0]->width - client->frame->area.width) / 2 + areas[0]->x;
+        *y = (areas[0]->height - client->frame->area.height) / 2 + areas[0]->y;
+
+        g_free(areas);
+        return TRUE;
+    }
+
     return FALSE;
 }
 
This page took 0.028446 seconds and 4 git commands to generate.