summaryrefslogtreecommitdiff
path: root/gdk/x11
diff options
context:
space:
mode:
authorAllison Ryan Lortie <desrt@desrt.ca>2016-01-27 15:50:42 +0100
committerAllison Ryan Lortie <desrt@desrt.ca>2016-01-27 18:14:40 +0100
commit0d109867d2f66e986f98aa49222429f29609f509 (patch)
treefd4debd4d0e9badad440f1b3f72d7c8a86b816e2 /gdk/x11
parent299b32438d2d0f508183ab557c68d8cab13572fc (diff)
downloadgtk+-0d109867d2f66e986f98aa49222429f29609f509.tar.gz
Tweak startup-notification after the first window
Presently, Gtk will only send a startup notification completion message for the first window that is shown. This is not good for the case of GtkApplication, where we are expected to participate in startup-notification for all windows. We have avoided this problem by manually emitting the startup complete message from after_emit in GtkApplication. Unfortunately, this causes problems for windows that are shown with a delay. It is also a dirty hack. The reason for the original behaviour is simple: there is a static boolean in gtkwindow.c which controls it. We remove this. Instead, clear the startup notification ID stored in GDK when sending the completion message. GtkApplication will re-set this the next time an event comes in which needs startup-notification handling. In the non-GtkApplication case, newly shown windows will still not send the message, since the cookie will have been cleared. Finally, we remove the hack from GtkApplication's after_emit. This will probably cause some regressions in terms of lingering startup notification messages. The correct solution here is to always use gtk_window_present(), including when merely opening a new document (with a new tab, for example). https://bugzilla.gnome.org/show_bug.cgi?id=690791
Diffstat (limited to 'gdk/x11')
-rw-r--r--gdk/x11/gdkdisplay-x11.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index f600b9b11b..248eb8af16 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -2255,9 +2255,15 @@ static void
gdk_x11_display_notify_startup_complete (GdkDisplay *display,
const gchar *startup_id)
{
+ gchar *free_this = NULL;
+
if (startup_id == NULL)
{
- startup_id = GDK_X11_DISPLAY (display)->startup_notification_id;
+ GdkX11Display *display_x11 = GDK_X11_DISPLAY (display);
+
+ startup_id = free_this = display_x11->startup_notification_id;
+ display_x11->startup_notification_id = NULL;
+
if (startup_id == NULL)
return;
}
@@ -2265,6 +2271,8 @@ gdk_x11_display_notify_startup_complete (GdkDisplay *display,
gdk_x11_display_broadcast_startup_message (display, "remove",
"ID", startup_id,
NULL);
+
+ g_free (free_this);
}
static gboolean