summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/atomnames.h1
-rw-r--r--src/core/window-private.h1
-rw-r--r--src/core/window-props.c25
-rw-r--r--src/core/window.c5
4 files changed, 31 insertions, 1 deletions
diff --git a/src/core/atomnames.h b/src/core/atomnames.h
index cea869d0..4b99f163 100644
--- a/src/core/atomnames.h
+++ b/src/core/atomnames.h
@@ -60,6 +60,7 @@ item(_MARCO_SET_KEYBINDINGS_MESSAGE)
item(_MARCO_TOGGLE_VERBOSE)
item(_GTK_THEME_VARIANT)
item(_GTK_FRAME_EXTENTS)
+item(_GTK_APPLICATION_ID)
item(_GTK_SHOW_WINDOW_MENU)
item(_GTK_WORKAREAS)
item(_MATE_PANEL_ACTION)
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 02b7df42..c6117654 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -133,6 +133,7 @@ struct _MetaWindow
char *wm_client_machine;
char *startup_id;
char *gtk_theme_variant;
+ char *gtk_application_id;
int net_wm_pid;
diff --git a/src/core/window-props.c b/src/core/window-props.c
index e1275817..fd08d33f 100644
--- a/src/core/window-props.c
+++ b/src/core/window-props.c
@@ -1603,6 +1603,30 @@ reload_gtk_theme_variant (MetaWindow *window,
meta_ui_update_frame_style (window->screen->ui, window->frame->xwindow);
}
}
+
+static void
+reload_gtk_application_id (MetaWindow *window,
+ MetaPropValue *value,
+ gboolean initial)
+{
+ char *requested = NULL;
+ char *current = window->gtk_application_id;
+
+ if (value->type != META_PROP_VALUE_INVALID)
+ {
+ requested = value->v.str;
+ meta_verbose ("Requested \"%s\" gtk-application-id for window %s.\n",
+ requested, window->desc);
+ }
+
+ if (g_strcmp0 (requested, current) != 0)
+ {
+ g_free (current);
+
+ window->gtk_application_id = g_strdup (requested);
+ }
+}
+
/**
* Initialises the property hooks system. Each row in the table named "hooks"
* represents an action to take when a property is found on a newly-created
@@ -1652,6 +1676,7 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
{ display->atom__NET_WM_USER_TIME_WINDOW, META_PROP_VALUE_WINDOW, reload_net_wm_user_time_window },
{ display->atom__GTK_THEME_VARIANT, META_PROP_VALUE_UTF8, reload_gtk_theme_variant, },
{ display->atom__GTK_FRAME_EXTENTS, META_PROP_VALUE_CARDINAL_LIST, reload_gtk_frame_extents },
+ { display->atom__GTK_APPLICATION_ID, META_PROP_VALUE_UTF8, reload_gtk_application_id },
{ 0 },
};
diff --git a/src/core/window.c b/src/core/window.c
index c1702dd8..658ca957 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -263,7 +263,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
gulong existing_wm_state;
gulong event_mask;
MetaMoveResizeFlags flags;
-#define N_INITIAL_PROPS 20
+#define N_INITIAL_PROPS 21
Atom initial_props[N_INITIAL_PROPS];
int i;
gboolean has_shape;
@@ -563,6 +563,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
window->wm_client_machine = NULL;
window->startup_id = NULL;
window->gtk_theme_variant = NULL;
+ window->gtk_application_id = NULL;
window->net_wm_pid = -1;
@@ -621,6 +622,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
initial_props[i++] = display->atom__NET_WM_USER_TIME_WINDOW;
initial_props[i++] = display->atom__NET_WM_FULLSCREEN_MONITORS;
initial_props[i++] = display->atom__GTK_THEME_VARIANT;
+ initial_props[i++] = display->atom__GTK_APPLICATION_ID;
g_assert (N_INITIAL_PROPS == i);
meta_window_reload_properties (window, initial_props, N_INITIAL_PROPS, TRUE);
@@ -9015,6 +9017,7 @@ meta_window_finalize (GObject *object)
g_clear_pointer (&window->icon_name, g_free);
g_clear_pointer (&window->desc, g_free);
g_clear_pointer (&window->gtk_theme_variant, g_free);
+ g_clear_pointer (&window->gtk_application_id, g_free);
G_OBJECT_CLASS (meta_window_parent_class)->finalize (object);
}