diff options
author | Elijah Newren <newren gmail com> | 2006-08-07 18:08:27 +0000 |
---|---|---|
committer | Elijah Newren <newren@src.gnome.org> | 2006-08-07 18:08:27 +0000 |
commit | adc46fc970f2d09a23e6ad4bbadc651b1cf2f9bc (patch) | |
tree | e908775166444f581ed0099d8fe13d1f35808e95 | |
parent | 3917d818f5a94f83ef79e44c9aef385c2e309e83 (diff) | |
download | metacity-adc46fc970f2d09a23e6ad4bbadc651b1cf2f9bc.tar.gz |
Patch from Vytautas Liuolia to react to _NET_STARTUP_ID changes, as
2006-08-07 Elijah Newren <newren gmail com>
Patch from Vytautas Liuolia to react to _NET_STARTUP_ID changes,
as proposed for the new startup-notification/EWMH spec. #347515
* src/window-props.c (reload_net_startup_id): be sure to act on
the new id instead of just recording it
* src/window.[ch] (window_activate, meta_window_activate,
meta_window_activate_with_workspace, meta_window_client_message):
change window_activate() to take a workspace parameter instead of
hardcoding to the current workspace, add
meta_window_activate_with_workspace() function needed by
reload_net_startup_id().
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | src/window-props.c | 19 | ||||
-rw-r--r-- | src/window.c | 29 | ||||
-rw-r--r-- | src/window.h | 4 |
4 files changed, 59 insertions, 8 deletions
@@ -1,3 +1,18 @@ +2006-08-07 Elijah Newren <newren gmail com> + + Patch from Vytautas Liuolia to react to _NET_STARTUP_ID changes, + as proposed for the new startup-notification/EWMH spec. #347515 + + * src/window-props.c (reload_net_startup_id): be sure to act on + the new id instead of just recording it + + * src/window.[ch] (window_activate, meta_window_activate, + meta_window_activate_with_workspace, meta_window_client_message): + change window_activate() to take a workspace parameter instead of + hardcoding to the current workspace, add + meta_window_activate_with_workspace() function needed by + reload_net_startup_id(). + 2006-08-07 Thomas Thurman <thomas@thurman.org.uk> * src/frames.h: add new MetaButtonSpace struct; use it for diff --git a/src/window-props.c b/src/window-props.c index a84e25fc..7c20de50 100644 --- a/src/window-props.c +++ b/src/window-props.c @@ -687,12 +687,31 @@ static void reload_net_startup_id (MetaWindow *window, MetaPropValue *value) { + guint32 timestamp = window->net_wm_user_time; + MetaWorkspace *workspace = NULL; + g_free (window->startup_id); if (value->type != META_PROP_VALUE_INVALID) window->startup_id = g_strdup (value->v.str); else window->startup_id = NULL; + + /* Update timestamp and workspace on a running window */ + if (!window->constructing) + { + window->initial_timestamp_set = 0; + window->initial_workspace_set = 0; + + meta_screen_apply_startup_properties (window->screen, window); + + if (window->initial_timestamp_set) + timestamp = window->initial_timestamp; + if (window->initial_workspace_set) + workspace = meta_screen_get_workspace_by_index (window->screen, window->initial_workspace); + + meta_window_activate_with_workspace (window, timestamp, workspace); + } meta_verbose ("New _NET_STARTUP_ID \"%s\" for %s\n", window->startup_id ? window->startup_id : "unset", diff --git a/src/window.c b/src/window.c index 0d56e69d..72821bd7 100644 --- a/src/window.c +++ b/src/window.c @@ -2489,7 +2489,8 @@ unminimize_window_and_all_transient_parents (MetaWindow *window) static void window_activate (MetaWindow *window, guint32 timestamp, - MetaClientType source_indication) + MetaClientType source_indication, + MetaWorkspace *workspace) { gboolean can_ignore_outdated_timestamps; meta_topic (META_DEBUG_FOCUS, @@ -2529,11 +2530,11 @@ window_activate (MetaWindow *window, /* disable show desktop mode unless we're a desktop component */ maybe_leave_show_desktop_mode (window); - /* Get window on current workspace */ - if (!meta_window_located_on_workspace (window, - window->screen->active_workspace)) - meta_window_change_workspace (window, - window->screen->active_workspace); + /* Get window on current or given workspace */ + if (workspace == NULL) + workspace = window->screen->active_workspace; + if (!meta_window_located_on_workspace (window, workspace)) + meta_window_change_workspace (window, workspace); if (window->shaded) meta_window_unshade (window); @@ -2562,7 +2563,19 @@ meta_window_activate (MetaWindow *window, * we were such. If we change the pager behavior later, we could revisit * this and just add extra flags to window_activate. */ - window_activate (window, timestamp, META_CLIENT_TYPE_PAGER); + window_activate (window, timestamp, META_CLIENT_TYPE_PAGER, NULL); +} + +void +meta_window_activate_with_workspace (MetaWindow *window, + guint32 timestamp, + MetaWorkspace *workspace) +{ + /* We're not really a pager, but the behavior we want is the same as if + * we were such. If we change the pager behavior later, we could revisit + * this and just add extra flags to window_activate. + */ + window_activate (window, timestamp, META_CLIENT_TYPE_APPLICATION, workspace); } /* Manually fix all the weirdness explained in the big comment at the @@ -4743,7 +4756,7 @@ meta_window_client_message (MetaWindow *window, /* Client using older EWMH _NET_ACTIVE_WINDOW without a timestamp */ timestamp = meta_display_get_current_time (window->display); - window_activate (window, timestamp, source_indication); + window_activate (window, timestamp, source_indication, NULL); return TRUE; } diff --git a/src/window.h b/src/window.h index e1d93d66..5a6af585 100644 --- a/src/window.h +++ b/src/window.h @@ -401,6 +401,10 @@ void meta_window_unstick (MetaWindow *window); void meta_window_activate (MetaWindow *window, guint32 current_time); +void meta_window_activate_with_workspace (MetaWindow *window, + guint32 current_time, + MetaWorkspace *workspace); + void meta_window_make_fullscreen (MetaWindow *window); void meta_window_unmake_fullscreen (MetaWindow *window); |