diff --git a/src/core/window-private.h b/src/core/window-private.h index 535fcdb22..b425aed7a 100644 --- a/src/core/window-private.h +++ b/src/core/window-private.h @@ -101,9 +101,12 @@ struct _MetaWindow char *startup_id; char *mutter_hints; char *gtk_theme_variant; - char *dbus_application_id; - char *dbus_unique_name; - char *dbus_object_path; + char *gtk_application_id; + char *gtk_unique_bus_name; + char *gtk_application_object_path; + char *gtk_window_object_path; + char *gtk_app_menu_object_path; + char *gtk_menubar_object_path; int hide_titlebar_when_maximized; int net_wm_pid; diff --git a/src/core/window-props.c b/src/core/window-props.c index f73c26fb1..bd8262a22 100644 --- a/src/core/window-props.c +++ b/src/core/window-props.c @@ -1617,71 +1617,30 @@ reload_gtk_hide_titlebar_when_maximized (MetaWindow *window, } } -static void -reload_dbus_application_id (MetaWindow *window, - MetaPropValue *value, - gboolean initial) -{ - char *new_id = NULL; - char *current_id = window->dbus_application_id; +#define RELOAD_STRING(var_name, propname) \ + static void \ + reload_ ## var_name (MetaWindow *window, \ + MetaPropValue *value, \ + gboolean initial) \ + { \ + g_free (window->var_name); \ + \ + if (value->type != META_PROP_VALUE_INVALID) \ + window->var_name = g_strdup (value->v.str); \ + else \ + window->var_name = NULL; \ + \ + g_object_notify (G_OBJECT (window), propname); \ + } - if (value->type != META_PROP_VALUE_INVALID) - new_id = value->v.str; +RELOAD_STRING (gtk_unique_bus_name, "gtk-unique-bus-name") +RELOAD_STRING (gtk_application_id, "gtk-application-id") +RELOAD_STRING (gtk_application_object_path, "gtk-application-object-path") +RELOAD_STRING (gtk_window_object_path, "gtk-window-object-path") +RELOAD_STRING (gtk_app_menu_object_path, "gtk-app-menu-object-path") +RELOAD_STRING (gtk_menubar_object_path, "gtk-menubar-object-path") - if (g_strcmp0 (new_id, current_id) != 0) - { - g_free (current_id); - - if (new_id) - window->dbus_application_id = g_strdup (new_id); - else - window->dbus_application_id = NULL; - - g_object_notify ((GObject*)window, "dbus-application-id"); - } -} - -static void -reload_dbus_unique_name (MetaWindow *window, - MetaPropValue *value, - gboolean initial) -{ - char *new_id = NULL; - char *current_id = window->dbus_unique_name; - - if (value->type != META_PROP_VALUE_INVALID) - new_id = value->v.str; - - if (g_strcmp0 (new_id, current_id) != 0) - { - g_free (current_id); - - window->dbus_unique_name = g_strdup (new_id); - - g_object_notify ((GObject*)window, "dbus-unique-name"); - } -} - -static void -reload_dbus_object_path (MetaWindow *window, - MetaPropValue *value, - gboolean initial) -{ - char *new_path = NULL; - char *current_path = window->dbus_object_path; - - if (value->type != META_PROP_VALUE_INVALID) - new_path = value->v.str; - - if (g_strcmp0 (new_path, current_path) != 0) - { - g_free (current_path); - - window->dbus_object_path = g_strdup (new_path); - - g_object_notify ((GObject*)window, "dbus-object-path"); - } -} +#undef RELOAD_STRING /** * Initialises the property hooks system. Each row in the table named "hooks" @@ -1737,9 +1696,12 @@ meta_display_init_window_prop_hooks (MetaDisplay *display) { XA_WM_TRANSIENT_FOR, META_PROP_VALUE_WINDOW, reload_transient_for, TRUE, FALSE }, { display->atom__GTK_THEME_VARIANT, META_PROP_VALUE_UTF8, reload_gtk_theme_variant, TRUE, FALSE }, { display->atom__GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED, META_PROP_VALUE_CARDINAL, reload_gtk_hide_titlebar_when_maximized, TRUE, FALSE }, - { display->atom__DBUS_APPLICATION_ID, META_PROP_VALUE_UTF8, reload_dbus_application_id, TRUE, FALSE }, - { display->atom__DBUS_UNIQUE_NAME, META_PROP_VALUE_UTF8, reload_dbus_unique_name, TRUE, FALSE }, - { display->atom__DBUS_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_dbus_object_path, TRUE, FALSE }, + { display->atom__GTK_APPLICATION_ID, META_PROP_VALUE_UTF8, reload_gtk_application_id, TRUE, FALSE }, + { display->atom__GTK_UNIQUE_BUS_NAME, META_PROP_VALUE_UTF8, reload_gtk_unique_bus_name, TRUE, FALSE }, + { display->atom__GTK_APPLICATION_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_application_object_path, TRUE, FALSE }, + { display->atom__GTK_WINDOW_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_window_object_path, TRUE, FALSE }, + { display->atom__GTK_APP_MENU_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_app_menu_object_path, TRUE, FALSE }, + { display->atom__GTK_MENUBAR_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_menubar_object_path, TRUE, FALSE }, { display->atom__NET_WM_USER_TIME_WINDOW, META_PROP_VALUE_WINDOW, reload_net_wm_user_time_window, TRUE, FALSE }, { display->atom_WM_STATE, META_PROP_VALUE_INVALID, NULL, FALSE, FALSE }, { display->atom__NET_WM_ICON, META_PROP_VALUE_INVALID, reload_net_wm_icon, FALSE, FALSE }, diff --git a/src/core/window.c b/src/core/window.c index 378b49b57..efd1b3c04 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -165,9 +165,12 @@ enum { PROP_RESIZEABLE, PROP_ABOVE, PROP_WM_CLASS, - PROP_DBUS_APPLICATION_ID, - PROP_DBUS_UNIQUE_NAME, - PROP_DBUS_OBJECT_PATH + PROP_GTK_APPLICATION_ID, + PROP_GTK_UNIQUE_BUS_NAME, + PROP_GTK_APPLICATION_OBJECT_PATH, + PROP_GTK_WINDOW_OBJECT_PATH, + PROP_GTK_APP_MENU_OBJECT_PATH, + PROP_GTK_MENUBAR_OBJECT_PATH }; enum @@ -224,9 +227,12 @@ meta_window_finalize (GObject *object) g_free (window->icon_name); g_free (window->desc); g_free (window->gtk_theme_variant); - g_free (window->dbus_application_id); - g_free (window->dbus_unique_name); - g_free (window->dbus_object_path); + g_free (window->gtk_application_id); + g_free (window->gtk_unique_bus_name); + g_free (window->gtk_application_object_path); + g_free (window->gtk_window_object_path); + g_free (window->gtk_app_menu_object_path); + g_free (window->gtk_menubar_object_path); } static void @@ -290,14 +296,23 @@ meta_window_get_property(GObject *object, case PROP_ABOVE: g_value_set_boolean (value, win->wm_state_above); break; - case PROP_DBUS_APPLICATION_ID: - g_value_set_string (value, win->dbus_application_id); + case PROP_GTK_APPLICATION_ID: + g_value_set_string (value, win->gtk_application_id); break; - case PROP_DBUS_UNIQUE_NAME: - g_value_set_string (value, win->dbus_unique_name); + case PROP_GTK_UNIQUE_BUS_NAME: + g_value_set_string (value, win->gtk_unique_bus_name); break; - case PROP_DBUS_OBJECT_PATH: - g_value_set_string (value, win->dbus_object_path); + case PROP_GTK_APPLICATION_OBJECT_PATH: + g_value_set_string (value, win->gtk_application_object_path); + break; + case PROP_GTK_WINDOW_OBJECT_PATH: + g_value_set_string (value, win->gtk_window_object_path); + break; + case PROP_GTK_APP_MENU_OBJECT_PATH: + g_value_set_string (value, win->gtk_app_menu_object_path); + break; + case PROP_GTK_MENUBAR_OBJECT_PATH: + g_value_set_string (value, win->gtk_menubar_object_path); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -466,26 +481,50 @@ meta_window_class_init (MetaWindowClass *klass) G_PARAM_READABLE)); g_object_class_install_property (object_class, - PROP_DBUS_APPLICATION_ID, - g_param_spec_string ("dbus-application-id", - "DBusApplicationID", - "Contents of the _DBUS_APPLICATION_ID property of this window", + PROP_GTK_APPLICATION_ID, + g_param_spec_string ("gtk-application-id", + "_GTK_APPLICATION_ID", + "Contents of the _GTK_APPLICATION_ID property of this window", NULL, G_PARAM_READABLE)); g_object_class_install_property (object_class, - PROP_DBUS_UNIQUE_NAME, - g_param_spec_string ("dbus-unique-name", - "_DBUS_UNIQUE_NAME", - "Contents of the _DBUS_UNIQUE_NAME property of this window", + PROP_GTK_UNIQUE_BUS_NAME, + g_param_spec_string ("gtk-unique-bus-name", + "_GTK_UNIQUE_BUS_NAME", + "Contents of the _GTK_UNIQUE_BUS_NAME property of this window", NULL, G_PARAM_READABLE)); g_object_class_install_property (object_class, - PROP_DBUS_OBJECT_PATH, - g_param_spec_string ("dbus-object-path", - "_DBUS_OBJECT_PATH", - "Contents of the _DBUS_OBJECT_PATH property of this window", + PROP_GTK_APPLICATION_OBJECT_PATH, + g_param_spec_string ("gtk-application-object-path", + "_GTK_APPLICATION_OBJECT_PATH", + "Contents of the _GTK_APPLICATION_OBJECT_PATH property of this window", + NULL, + G_PARAM_READABLE)); + + g_object_class_install_property (object_class, + PROP_GTK_WINDOW_OBJECT_PATH, + g_param_spec_string ("gtk-window-object-path", + "_GTK_WINDOW_OBJECT_PATH", + "Contents of the _GTK_WINDOW_OBJECT_PATH property of this window", + NULL, + G_PARAM_READABLE)); + + g_object_class_install_property (object_class, + PROP_GTK_APP_MENU_OBJECT_PATH, + g_param_spec_string ("gtk-app-menu-object-path", + "_GTK_APP_MENU_OBJECT_PATH", + "Contents of the _GTK_APP_MENU_OBJECT_PATH property of this window", + NULL, + G_PARAM_READABLE)); + + g_object_class_install_property (object_class, + PROP_GTK_MENUBAR_OBJECT_PATH, + g_param_spec_string ("gtk-menubar-object-path", + "_GTK_MENUBAR_OBJECT_PATH", + "Contents of the _GTK_MENUBAR_OBJECT_PATH property of this window", NULL, G_PARAM_READABLE)); @@ -10251,39 +10290,75 @@ meta_window_get_wm_class_instance (MetaWindow *window) } /** - * meta_window_get_dbus_application_id: + * meta_window_get_gtk_application_id: * @window: a #MetaWindow * * Return value: (transfer none): the application ID **/ const char * -meta_window_get_dbus_application_id (MetaWindow *window) +meta_window_get_gtk_application_id (MetaWindow *window) { - return window->dbus_application_id; + return window->gtk_application_id; } /** - * meta_window_get_dbus_unique_name: + * meta_window_get_gtk_unique_bus_name: * @window: a #MetaWindow * * Return value: (transfer none): the unique name **/ const char * -meta_window_get_dbus_unique_name (MetaWindow *window) +meta_window_get_gtk_unique_bus_name (MetaWindow *window) { - return window->dbus_unique_name; + return window->gtk_unique_bus_name; } /** - * meta_window_get_dbus_object_path: + * meta_window_get_gtk_application_object_path: * @window: a #MetaWindow * * Return value: (transfer none): the object path **/ const char * -meta_window_get_dbus_object_path (MetaWindow *window) +meta_window_get_gtk_application_object_path (MetaWindow *window) { - return window->dbus_object_path; + return window->gtk_application_object_path; +} + +/** + * meta_window_get_gtk_window_object_path: + * @window: a #MetaWindow + * + * Return value: (transfer none): the object path + **/ +const char * +meta_window_get_gtk_window_object_path (MetaWindow *window) +{ + return window->gtk_window_object_path; +} + +/** + * meta_window_get_gtk_app_menu_object_path: + * @window: a #MetaWindow + * + * Return value: (transfer none): the object path + **/ +const char * +meta_window_get_gtk_app_menu_object_path (MetaWindow *window) +{ + return window->gtk_app_menu_object_path; +} + +/** + * meta_window_get_gtk_menubar_object_path: + * @window: a #MetaWindow + * + * Return value: (transfer none): the object path + **/ +const char * +meta_window_get_gtk_menubar_object_path (MetaWindow *window) +{ + return window->gtk_menubar_object_path; } /** diff --git a/src/meta/atomnames.h b/src/meta/atomnames.h index aa33ab7a6..210e5a23d 100644 --- a/src/meta/atomnames.h +++ b/src/meta/atomnames.h @@ -60,9 +60,12 @@ item(_MUTTER_TOGGLE_VERBOSE) item(_MUTTER_HINTS) item(_GTK_THEME_VARIANT) item(_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED) -item(_DBUS_APPLICATION_ID) -item(_DBUS_UNIQUE_NAME) -item(_DBUS_OBJECT_PATH) +item(_GTK_APPLICATION_ID) +item(_GTK_UNIQUE_BUS_NAME) +item(_GTK_APPLICATION_OBJECT_PATH) +item(_GTK_WINDOW_OBJECT_PATH) +item(_GTK_APP_MENU_OBJECT_PATH) +item(_GTK_MENUBAR_OBJECT_PATH) item(_GNOME_WM_KEYBINDINGS) item(_GNOME_PANEL_ACTION) item(_GNOME_PANEL_ACTION_MAIN_MENU) diff --git a/src/meta/window.h b/src/meta/window.h index fbb9a3f16..765ef28eb 100644 --- a/src/meta/window.h +++ b/src/meta/window.h @@ -95,9 +95,12 @@ const char * meta_window_get_wm_class (MetaWindow *window); const char * meta_window_get_wm_class_instance (MetaWindow *window); gboolean meta_window_showing_on_its_workspace (MetaWindow *window); -const char * meta_window_get_dbus_application_id (MetaWindow *window); -const char * meta_window_get_dbus_unique_name (MetaWindow *window); -const char * meta_window_get_dbus_object_path (MetaWindow *window); +const char * meta_window_get_gtk_application_id (MetaWindow *window); +const char * meta_window_get_gtk_unique_bus_name (MetaWindow *window); +const char * meta_window_get_gtk_application_object_path (MetaWindow *window); +const char * meta_window_get_gtk_window_object_path (MetaWindow *window); +const char * meta_window_get_gtk_app_menu_object_path (MetaWindow *window); +const char * meta_window_get_gtk_menubar_object_path (MetaWindow *window); void meta_window_move(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw); void meta_window_move_frame(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw);