Author: olivier
Date: 2007-10-28 19:29:01 +0000 (Sun, 28 Oct 2007)
New Revision: 26213

Modified:
   xfwm4/trunk/src/client.c
   xfwm4/trunk/src/startup_notification.c
   xfwm4/trunk/src/transients.c
   xfwm4/trunk/src/transients.h
Log:
Improve compatibily with libwnck tasklist

Modified: xfwm4/trunk/src/client.c
===================================================================
--- xfwm4/trunk/src/client.c    2007-10-28 19:18:22 UTC (rev 26212)
+++ xfwm4/trunk/src/client.c    2007-10-28 19:29:01 UTC (rev 26213)
@@ -2637,11 +2637,13 @@
 clientActivate (Client * c, Time timestamp)
 {
     ScreenInfo *screen_info;
+    Client *sibling;
 
     g_return_if_fail (c != NULL);
     TRACE ("entering clientActivate \"%s\" (0x%lx)", c->name, c->window);
 
     screen_info = c->screen_info;
+    sibling = clientGetTransientFor(c);
     if ((screen_info->current_ws == c->win_workspace) || 
(screen_info->params->activate_action != ACTIVATE_ACTION_NONE))
     {
         if (screen_info->current_ws != c->win_workspace)
@@ -2655,10 +2657,10 @@
                 workspaceSwitch (screen_info, c->win_workspace, NULL, FALSE, 
timestamp);
             }
         }
-        clientShow (c, TRUE);
+        clientRaise (sibling, None);
+        clientShow (sibling, TRUE);
         clientClearAllShowDesktop (screen_info);
         clientSetFocus (screen_info, c, timestamp, NO_FOCUS_FLAG);
-        clientRaise (c, None);
     }
     else
     {

Modified: xfwm4/trunk/src/startup_notification.c
===================================================================
--- xfwm4/trunk/src/startup_notification.c      2007-10-28 19:18:22 UTC (rev 
26212)
+++ xfwm4/trunk/src/startup_notification.c      2007-10-28 19:29:01 UTC (rev 
26213)
@@ -288,7 +288,10 @@
         if ((c->user_time == (Time) 0) || TIMESTAMP_IS_BEFORE(c->user_time, 
timestamp))
         {
             c->user_time = timestamp;
-            myDisplaySetLastUserTime (screen_info->display_info, c->user_time);
+            if (c->user_time != (Time) 0)
+            {
+                myDisplaySetLastUserTime (screen_info->display_info, 
c->user_time);
+            }
         }
         FLAG_SET (c->flags, CLIENT_FLAG_HAS_STARTUP_TIME);
 

Modified: xfwm4/trunk/src/transients.c
===================================================================
--- xfwm4/trunk/src/transients.c        2007-10-28 19:18:22 UTC (rev 26212)
+++ xfwm4/trunk/src/transients.c        2007-10-28 19:29:01 UTC (rev 26213)
@@ -293,6 +293,38 @@
     return latest_modal;
 }
 
+Client *
+clientGetTransientFor (Client * c)
+{
+    ScreenInfo *screen_info;
+    Client *latest_transient;
+    Client *c2;
+    GList *index;
+
+    g_return_val_if_fail (c != NULL, NULL);
+    TRACE ("entering clientGetTransientFor");
+
+    latest_transient = c;
+    screen_info = c->screen_info;
+    for (index = g_list_last(screen_info->windows_stack); index; index = 
g_list_previous (index))
+    {
+        if (!clientIsTransient (latest_transient))
+        {
+            break;
+        }
+        c2 = (Client *) index->data;
+        if (c2)
+        {
+            if (clientIsTransientFor (latest_transient, c2))
+            {
+                latest_transient = c2;
+            }
+        }
+    }
+
+    return latest_transient;
+}
+
 /* Build a GList of clients that have a transient relationship */
 GList *
 clientListTransient (Client * c)

Modified: xfwm4/trunk/src/transients.h
===================================================================
--- xfwm4/trunk/src/transients.h        2007-10-28 19:18:22 UTC (rev 26212)
+++ xfwm4/trunk/src/transients.h        2007-10-28 19:29:01 UTC (rev 26213)
@@ -47,6 +47,7 @@
 gboolean                 clientTransientOrModalHasAncestor      (Client *,
                                                                  int);
 Client                  *clientGetModalFor                      (Client *);
+Client                  *clientGetTransientFor                  (Client *);
 GList                   *clientListTransient                    (Client *);
 GList                   *clientListTransientOrModal             (Client *);
 gboolean                 clientCheckTransientWindow             (Client *,

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to