let windows that cant iconify still iconify with their parents, but not non-normal...
authorDana Jansens <danakj@orodu.net>
Tue, 8 May 2007 22:53:09 +0000 (22:53 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 8 May 2007 22:53:09 +0000 (22:53 +0000)
let you focus windows that wouldnt normally by clicking on their decor (if they have any)

openbox/action.c
openbox/client.c
openbox/client.h

index 4ff6bdb..4839088 100644 (file)
@@ -1199,7 +1199,9 @@ void action_execute(union ActionData *data)
 void action_activate(union ActionData *data)
 {
     if (data->client.any.c) {
-        if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
+        if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
+            data->any.context != OB_FRAME_CONTEXT_CLIENT)
+        {
             /* if using focus_delay, stop the timer now so that focus doesn't
                go moving on us */
             event_halt_focus_delay();
@@ -1217,7 +1219,9 @@ void action_activate(union ActionData *data)
 void action_focus(union ActionData *data)
 {
     if (data->client.any.c) {
-        if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
+        if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
+            data->any.context != OB_FRAME_CONTEXT_CLIENT)
+        {
             /* if using focus_delay, stop the timer now so that focus doesn't
                go moving on us */
             event_halt_focus_delay();
index d50388e..0084588 100644 (file)
@@ -2814,7 +2814,9 @@ static void client_iconify_recursive(ObClient *self,
                  self->window);
 
         if (iconic) {
-            if (self->functions & OB_CLIENT_FUNC_ICONIFY) {
+            /* don't let non-normal windows iconify along with their parents
+               or whatever */
+            if (client_normal(self)) {
                 self->iconic = iconic;
 
                 /* update the focus lists.. iconic windows go to the bottom of
index 5c5fdb9..654945b 100644 (file)
@@ -339,8 +339,9 @@ gboolean client_normal(ObClient *self);
 gboolean client_helper(ObClient *self);
 
 /*! Return if the client is a type which should be given focus from mouse
-  actions like button presses. This doesn't count for focus cycling, different
-  rules apply to that. */
+  presses on the *client* window. This doesn't affect clicking on the
+  decorations. This doesn't count for focus cycling, different rules apply to
+  that. */
 gboolean client_mouse_focusable(ObClient *self);
 
 /*! Return if the client is a type which should be given focus from the