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