GtkApplication: avoid using stale timestamps

Avoid using a stale timestamp (from the last user interaction with the
application) when a message arrives from D-Bus requesting that a new
window be created.

In this case the most-correct thing that we can do is to use no
timestamp at all.

We modify gdk_x11_display_set_startup_notification_id() to allow a NULL
value to mean "reset everything" and then call this function
unconditionally on receipt of D-Bus activation requests.  The result
will be that a missing desktop-startup-id in the platform-data struct
will reset the timestamp.

Under their default configuration metacity and mutter will both map
windows presented with no timestamp in the foreground.  This could
result in false-positive, but there is very little we can do about that
without the original timestamp from the user event.

https://bugzilla.gnome.org/show_bug.cgi?id=752000
This commit is contained in:
Ryan Lortie
2015-07-06 14:08:11 -04:00
committed by Jasper St. Pierre
parent 18dbe181fb
commit a00a5ed210
2 changed files with 38 additions and 30 deletions

View File

@ -82,14 +82,11 @@ static void
gtk_application_impl_x11_before_emit (GtkApplicationImpl *impl,
GVariant *platform_data)
{
const char *startup_notification_id;
const char *startup_notification_id = NULL;
if (g_variant_lookup (platform_data, "desktop-startup-id",
"&s", &startup_notification_id))
{
gdk_x11_display_set_startup_notification_id (gdk_display_get_default (),
startup_notification_id);
}
g_variant_lookup (platform_data, "desktop-startup-id", "&s", &startup_notification_id);
gdk_x11_display_set_startup_notification_id (gdk_display_get_default (), startup_notification_id);
}
static void