mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 14:31:10 +00:00
Gdk X11: Add setter for startup notify ID
For launch requests coming in over DBus.
This commit is contained in:
parent
b613cc6478
commit
8cca398a2f
@ -2010,45 +2010,15 @@ _gdk_windowing_set_default_display (GdkDisplay *display)
|
||||
startup_id = g_getenv ("DESKTOP_STARTUP_ID");
|
||||
if (startup_id && *startup_id != '\0')
|
||||
{
|
||||
gchar *time_str;
|
||||
|
||||
if (!g_utf8_validate (startup_id, -1, NULL))
|
||||
g_warning ("DESKTOP_STARTUP_ID contains invalid UTF-8");
|
||||
g_warning ("DESKTOP_STARTUP_ID contains invalid UTF-8");
|
||||
else
|
||||
display_x11->startup_notification_id = g_strdup (startup_id);
|
||||
|
||||
/* Find the launch time from the startup_id, if it's there. Newer spec
|
||||
* states that the startup_id is of the form <unique>_TIME<timestamp>
|
||||
*/
|
||||
time_str = g_strrstr (startup_id, "_TIME");
|
||||
if (time_str != NULL)
|
||||
{
|
||||
gulong retval;
|
||||
gchar *end;
|
||||
errno = 0;
|
||||
|
||||
/* Skip past the "_TIME" part */
|
||||
time_str += 5;
|
||||
|
||||
retval = strtoul (time_str, &end, 0);
|
||||
if (end != time_str && errno == 0)
|
||||
display_x11->user_time = retval;
|
||||
}
|
||||
gdk_x11_display_set_startup_notification_id (display, startup_id);
|
||||
|
||||
/* Clear the environment variable so it won't be inherited by
|
||||
* child processes and confuse things.
|
||||
*/
|
||||
g_unsetenv ("DESKTOP_STARTUP_ID");
|
||||
|
||||
/* Set the startup id on the leader window so it
|
||||
* applies to all windows we create on this display
|
||||
*/
|
||||
XChangeProperty (display_x11->xdisplay,
|
||||
display_x11->leader_window,
|
||||
gdk_x11_get_xatom_by_name_for_display (display, "_NET_STARTUP_ID"),
|
||||
gdk_x11_get_xatom_by_name_for_display (display, "UTF8_STRING"), 8,
|
||||
PropModeReplace,
|
||||
(guchar *)startup_id, strlen (startup_id));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2487,6 +2457,69 @@ gdk_x11_display_get_startup_notification_id (GdkDisplay *display)
|
||||
return GDK_DISPLAY_X11 (display)->startup_notification_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_display_set_startup_notification_id:
|
||||
* @display: a #GdkDisplay
|
||||
* @startup_id: the startup notification ID (must be valid utf8)
|
||||
*
|
||||
* Sets the startup notification ID for a display.
|
||||
*
|
||||
* This is usually taken from the value of the DESKTOP_STARTUP_ID
|
||||
* environment variable, but in some cases (such as the application not
|
||||
* being launched using exec()) it can come from other sources.
|
||||
*
|
||||
* If the ID contains the string "_TIME" then the portion following that
|
||||
* string is taken to be the X11 timestamp of the event that triggered
|
||||
* the application to be launched and the GDK current event time is set
|
||||
* accordingly.
|
||||
*
|
||||
* The startup ID is also what is used to signal that the startup is
|
||||
* complete (for example, when opening a window or when calling
|
||||
* gdk_notify_startup_complete()).
|
||||
*
|
||||
* Since: 3.0
|
||||
**/
|
||||
void
|
||||
gdk_x11_display_set_startup_notification_id (GdkDisplay *display,
|
||||
const gchar *startup_id)
|
||||
{
|
||||
GdkDisplayX11 *display_x11;
|
||||
gchar *time_str;
|
||||
|
||||
display_x11 = GDK_DISPLAY_X11 (display);
|
||||
|
||||
g_free (display_x11->startup_notification_id);
|
||||
display_x11->startup_notification_id = g_strdup (startup_id);
|
||||
|
||||
/* Find the launch time from the startup_id, if it's there. Newer spec
|
||||
* states that the startup_id is of the form <unique>_TIME<timestamp>
|
||||
*/
|
||||
time_str = g_strrstr (startup_id, "_TIME");
|
||||
if (time_str != NULL)
|
||||
{
|
||||
gulong retval;
|
||||
gchar *end;
|
||||
errno = 0;
|
||||
|
||||
/* Skip past the "_TIME" part */
|
||||
time_str += 5;
|
||||
|
||||
retval = strtoul (time_str, &end, 0);
|
||||
if (end != time_str && errno == 0)
|
||||
display_x11->user_time = retval;
|
||||
}
|
||||
|
||||
/* Set the startup id on the leader window so it
|
||||
* applies to all windows we create on this display
|
||||
*/
|
||||
XChangeProperty (display_x11->xdisplay,
|
||||
display_x11->leader_window,
|
||||
gdk_x11_get_xatom_by_name_for_display (display, "_NET_STARTUP_ID"),
|
||||
gdk_x11_get_xatom_by_name_for_display (display, "UTF8_STRING"), 8,
|
||||
PropModeReplace,
|
||||
(guchar *)startup_id, strlen (startup_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_supports_composite:
|
||||
* @display: a #GdkDisplay
|
||||
|
@ -107,6 +107,8 @@ guint32 gdk_x11_get_server_time (GdkWindow *window);
|
||||
guint32 gdk_x11_display_get_user_time (GdkDisplay *display);
|
||||
|
||||
G_CONST_RETURN gchar *gdk_x11_display_get_startup_notification_id (GdkDisplay *display);
|
||||
void gdk_x11_display_set_startup_notification_id (GdkDisplay *display,
|
||||
const gchar *startup_id);
|
||||
|
||||
void gdk_x11_display_set_cursor_theme (GdkDisplay *display,
|
||||
const gchar *theme,
|
||||
|
Loading…
Reference in New Issue
Block a user