]> Dogcows Code - chaz/openbox/commitdiff
don't give focus to transient when it is ambiguous, but only if they have a parent
authorDana Jansens <danakj@orodu.net>
Mon, 28 May 2007 02:12:36 +0000 (02:12 +0000)
committerDana Jansens <danakj@orodu.net>
Mon, 28 May 2007 02:12:36 +0000 (02:12 +0000)
openbox/client.c
openbox/client.h

index 2974083aacda8279daab9547af2a49cfe011c7dc..e7877c7843a861176ffe469ebac5d8104755d34c 100644 (file)
@@ -498,7 +498,7 @@ void client_manage(Window window)
                is ambiguous (either the current focus target doesn't have
                a timestamp, or they are the same (we probably inherited it
                from them) */
-            else if (self->transient_for != NULL &&
+            else if (client_has_parent(self) &&
                      (!last_time || self->user_time == last_time))
             {
                 activate = FALSE;
@@ -2374,6 +2374,13 @@ ObClient *client_search_focus_tree_full(ObClient *self)
     return client_search_focus_tree(self);
 }
 
+gboolean client_has_parent(ObClient *self)
+{
+    return (self->transient_for &&
+            (self->transient_for != TRAN_GROUP ||
+             self->group && self->group->members->next));
+}
+
 static ObStackingLayer calc_layer(ObClient *self)
 {
     ObStackingLayer l;
index 3d81b270cc2130f3c6279a02934cf9a1ca8a6e7a..55b684ff2d6fa3e73dd6997109f41da08135304a 100644 (file)
@@ -612,6 +612,11 @@ void client_get_type_and_transientness(ObClient *self);
 
 const ObClientIcon *client_icon(ObClient *self, gint w, gint h);
 
+/*! Return TRUE if the client is transient for some other window. Return
+  FALSE if it's not transient or there is no window for it to be
+  transient for */
+gboolean client_has_parent(ObClient *self);
+
 /*! Searches a client's direct parents for a focused window. The function does
   not check for the passed client, only for *ONE LEVEL* of its parents.
   If no focused parentt is found, NULL is returned.
This page took 0.032376 seconds and 4 git commands to generate.