[gtk+] x11: Add gdk_x11_display_set_program_class
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] x11: Add gdk_x11_display_set_program_class
- Date: Fri, 17 Nov 2017 04:22:44 +0000 (UTC)
commit d73898437f3de3f007f9e0c0a201920f3ba55a3a
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Nov 16 23:18:58 2017 -0500
x11: Add gdk_x11_display_set_program_class
The program class is a very X-specific concept.
There should be x11-backend api to deal with it.
docs/reference/gdk/gdk4-sections.txt | 1 +
gdk/x11/gdkdisplay-x11.c | 33 ++++++++++++++++++++++++++++++++-
gdk/x11/gdkdisplay-x11.h | 1 +
gdk/x11/gdkwindow-x11.c | 2 +-
gdk/x11/gdkx11display.h | 3 +++
5 files changed, 38 insertions(+), 2 deletions(-)
---
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt
index 97d1d25..ce11ad3 100644
--- a/docs/reference/gdk/gdk4-sections.txt
+++ b/docs/reference/gdk/gdk4-sections.txt
@@ -902,6 +902,7 @@ gdk_x11_get_server_time
gdk_x11_device_get_id
gdk_x11_device_manager_lookup
gdk_x11_display_open
+gdk_x11_display_set_program_class
gdk_x11_display_get_user_time
gdk_x11_display_broadcast_startup_message
gdk_x11_display_get_startup_notification_id
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index c89753a..cdca966 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -1663,7 +1663,7 @@ gdk_x11_display_open (const gchar *display_name)
class_hint = XAllocClassHint();
class_hint->res_name = (char *) g_get_prgname ();
- class_hint->res_class = (char *)gdk_get_program_class ();
+ class_hint->res_class = (char *) g_get_prgname ();
/* XmbSetWMProperties sets the RESOURCE_NAME environment variable
* from argv[0], so we just synthesize an argument array here.
@@ -1760,6 +1760,35 @@ gdk_x11_display_open (const gchar *display_name)
return display;
}
+/**
+ * gdk_x11_display_set_program_class:
+ * @display: a #GdkDisplay
+ * @program_class: a string
+ *
+ * Sets the program class.
+ *
+ * The X11 backend uses the program class to set the class name part
+ * of the `WM_CLASS` property on toplevel windows; see the ICCCM.
+ *
+ * Since: 3.94
+ */
+void
+gdk_x11_display_set_program_class (GdkDisplay *display,
+ const char *program_class)
+{
+ GdkX11Display *display_x11 = GDK_X11_DISPLAY (display);
+ XClassHint *class_hint;
+
+ g_free (display_x11->program_class);
+ display_x11->program_class = g_strdup (program_class);
+
+ class_hint = XAllocClassHint();
+ class_hint->res_name = (char *) g_get_prgname ();
+ class_hint->res_class = (char *) program_class;
+ XSetClassHint (display_x11->xdisplay, display_x11->leader_window, class_hint);
+ XFree (class_hint);
+}
+
/*
* XLib internal connection handling
*/
@@ -2071,6 +2100,8 @@ gdk_x11_display_finalize (GObject *object)
g_slice_free (GdkErrorTrap, trap);
}
+ g_free (display_x11->program_class);
+
G_OBJECT_CLASS (gdk_x11_display_parent_class)->finalize (object);
}
diff --git a/gdk/x11/gdkdisplay-x11.h b/gdk/x11/gdkdisplay-x11.h
index 60e6168..73189e2 100644
--- a/gdk/x11/gdkdisplay-x11.h
+++ b/gdk/x11/gdkdisplay-x11.h
@@ -90,6 +90,7 @@ struct _GdkX11Display
GHashTable *atom_to_virtual;
/* Session Management leader window see ICCCM */
+ char *program_class;
Window leader_window;
GdkWindow *leader_gdk_window;
gboolean leader_window_title_set;
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index 84273f4..ef99753 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -1000,7 +1000,7 @@ _gdk_x11_display_create_window_impl (GdkDisplay *display,
class_hint = XAllocClassHint ();
class_hint->res_name = (char *) g_get_prgname ();
- class_hint->res_class = (char *) gdk_get_program_class ();
+ class_hint->res_class = (char *) display_x11->program_class;
XSetClassHint (xdisplay, impl->xid, class_hint);
XFree (class_hint);
diff --git a/gdk/x11/gdkx11display.h b/gdk/x11/gdkx11display.h
index 2203556..d43ebee 100644
--- a/gdk/x11/gdkx11display.h
+++ b/gdk/x11/gdkx11display.h
@@ -76,6 +76,9 @@ const gchar * gdk_x11_display_get_startup_notification_id (GdkDisplay *d
GDK_AVAILABLE_IN_ALL
void gdk_x11_display_set_startup_notification_id (GdkDisplay *display,
const gchar *startup_id);
+GDK_AVAILABLE_IN_3_94
+void gdk_x11_display_set_program_class (GdkDisplay *display,
+ const char *program_class);
GDK_AVAILABLE_IN_ALL
void gdk_x11_display_set_cursor_theme (GdkDisplay *display,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]