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().
This commit is contained in:
Elijah Newren 2006-08-07 18:08:27 +00:00 committed by Elijah Newren
parent 3917d818f5
commit adc46fc970
4 changed files with 59 additions and 8 deletions

View File

@ -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> 2006-08-07 Thomas Thurman <thomas@thurman.org.uk>
* src/frames.h: add new MetaButtonSpace struct; use it for * src/frames.h: add new MetaButtonSpace struct; use it for

View File

@ -687,6 +687,9 @@ static void
reload_net_startup_id (MetaWindow *window, reload_net_startup_id (MetaWindow *window,
MetaPropValue *value) MetaPropValue *value)
{ {
guint32 timestamp = window->net_wm_user_time;
MetaWorkspace *workspace = NULL;
g_free (window->startup_id); g_free (window->startup_id);
if (value->type != META_PROP_VALUE_INVALID) if (value->type != META_PROP_VALUE_INVALID)
@ -694,6 +697,22 @@ reload_net_startup_id (MetaWindow *window,
else else
window->startup_id = NULL; 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", meta_verbose ("New _NET_STARTUP_ID \"%s\" for %s\n",
window->startup_id ? window->startup_id : "unset", window->startup_id ? window->startup_id : "unset",
window->desc); window->desc);

View File

@ -2489,7 +2489,8 @@ unminimize_window_and_all_transient_parents (MetaWindow *window)
static void static void
window_activate (MetaWindow *window, window_activate (MetaWindow *window,
guint32 timestamp, guint32 timestamp,
MetaClientType source_indication) MetaClientType source_indication,
MetaWorkspace *workspace)
{ {
gboolean can_ignore_outdated_timestamps; gboolean can_ignore_outdated_timestamps;
meta_topic (META_DEBUG_FOCUS, meta_topic (META_DEBUG_FOCUS,
@ -2529,11 +2530,11 @@ window_activate (MetaWindow *window,
/* disable show desktop mode unless we're a desktop component */ /* disable show desktop mode unless we're a desktop component */
maybe_leave_show_desktop_mode (window); maybe_leave_show_desktop_mode (window);
/* Get window on current workspace */ /* Get window on current or given workspace */
if (!meta_window_located_on_workspace (window, if (workspace == NULL)
window->screen->active_workspace)) workspace = window->screen->active_workspace;
meta_window_change_workspace (window, if (!meta_window_located_on_workspace (window, workspace))
window->screen->active_workspace); meta_window_change_workspace (window, workspace);
if (window->shaded) if (window->shaded)
meta_window_unshade (window); 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 * we were such. If we change the pager behavior later, we could revisit
* this and just add extra flags to window_activate. * 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 /* 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 */ /* Client using older EWMH _NET_ACTIVE_WINDOW without a timestamp */
timestamp = meta_display_get_current_time (window->display); timestamp = meta_display_get_current_time (window->display);
window_activate (window, timestamp, source_indication); window_activate (window, timestamp, source_indication, NULL);
return TRUE; return TRUE;
} }

View File

@ -401,6 +401,10 @@ void meta_window_unstick (MetaWindow *window);
void meta_window_activate (MetaWindow *window, void meta_window_activate (MetaWindow *window,
guint32 current_time); 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_make_fullscreen (MetaWindow *window);
void meta_window_unmake_fullscreen (MetaWindow *window); void meta_window_unmake_fullscreen (MetaWindow *window);