diff options
Diffstat (limited to 'libmate-panel-applet')
-rw-r--r-- | libmate-panel-applet/Makefile.am | 2 | ||||
-rw-r--r-- | libmate-panel-applet/mate-panel-applet-factory.c | 173 | ||||
-rw-r--r-- | libmate-panel-applet/mate-panel-applet-factory.h | 38 | ||||
-rw-r--r-- | libmate-panel-applet/mate-panel-applet-gsettings.c | 113 | ||||
-rw-r--r-- | libmate-panel-applet/mate-panel-applet-gsettings.h | 9 | ||||
-rw-r--r-- | libmate-panel-applet/mate-panel-applet.c | 805 | ||||
-rw-r--r-- | libmate-panel-applet/mate-panel-applet.h | 220 | ||||
-rw-r--r-- | libmate-panel-applet/panel-applet-private.h | 3 | ||||
-rw-r--r-- | libmate-panel-applet/panel-plug-private.h | 1 | ||||
-rw-r--r-- | libmate-panel-applet/panel-plug.c | 1 | ||||
-rw-r--r-- | libmate-panel-applet/test-dbus-applet.c | 10 |
11 files changed, 790 insertions, 585 deletions
diff --git a/libmate-panel-applet/Makefile.am b/libmate-panel-applet/Makefile.am index 196436e9..dbb640b1 100644 --- a/libmate-panel-applet/Makefile.am +++ b/libmate-panel-applet/Makefile.am @@ -95,7 +95,7 @@ appletdir = $(datadir)/mate-panel/applets applet_in_files = org.mate.panel.TestApplet.mate-panel-applet.desktop.in noinst_DATA = $(applet_in_files:.mate-panel-applet.desktop.in=.mate-panel-applet) $(noinst_DATA): $(applet_in_files) - $(AM_V_GEN) $(MSGFMT) --desktop --keyword Name --keyword Description --template $< -d $(top_srcdir)/po -o $@ + $(AM_V_GEN) $(MSGFMT) --desktop --keyword=Name --keyword=Description --template $< -d $(top_srcdir)/po -o $@ EXTRA_DIST = \ org.mate.panel.TestApplet.mate-panel-applet.desktop.in \ diff --git a/libmate-panel-applet/mate-panel-applet-factory.c b/libmate-panel-applet/mate-panel-applet-factory.c index c9a331a6..521ab4d4 100644 --- a/libmate-panel-applet/mate-panel-applet-factory.c +++ b/libmate-panel-applet/mate-panel-applet-factory.c @@ -2,6 +2,7 @@ * mate-panel-applet-factory.c: panel applet writing API. * * Copyright (C) 2010 Carlos Garcia Campos <[email protected]> + * Copyright (C) 2012-2021 MATE Developers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -31,13 +32,13 @@ #endif struct _MatePanelAppletFactory { - GObject base; + GObject base; - gchar *factory_id; - guint n_applets; - gboolean out_of_process; - GType applet_type; - GClosure *closure; + gchar *factory_id; + guint n_applets; + gboolean out_of_process; + GType applet_type; + GClosure *closure; GDBusConnection *connection; gint owner_id; @@ -47,10 +48,6 @@ struct _MatePanelAppletFactory { guint next_uid; }; -struct _MatePanelAppletFactoryClass { - GObjectClass base_class; -}; - #define MATE_PANEL_APPLET_FACTORY_OBJECT_PATH "/org/mate/panel/applet/%s" #define MATE_PANEL_APPLET_FACTORY_SERVICE_NAME "org.mate.panel.applet.%s" @@ -64,7 +61,8 @@ mate_panel_applet_factory_finalize (GObject *object) MatePanelAppletFactory *factory = MATE_PANEL_APPLET_FACTORY (object); if (factory->registration_id) { - g_dbus_connection_unregister_object (factory->connection, factory->registration_id); + g_dbus_connection_unregister_object (factory->connection, + factory->registration_id); factory->registration_id = 0; } @@ -80,10 +78,7 @@ mate_panel_applet_factory_finalize (GObject *object) factories = NULL; } - if (factory->factory_id) { - g_free (factory->factory_id); - factory->factory_id = NULL; - } + g_clear_pointer (&factory->factory_id, g_free); if (factory->applets) { g_hash_table_unref (factory->applets); @@ -95,32 +90,33 @@ mate_panel_applet_factory_finalize (GObject *object) factory->closure = NULL; } - G_OBJECT_CLASS (mate_panel_applet_factory_parent_class)->finalize (object); + G_OBJECT_CLASS (mate_panel_applet_factory_parent_class) + ->finalize (object); } static void mate_panel_applet_factory_init (MatePanelAppletFactory *factory) { - factory->applets = g_hash_table_new (NULL, NULL); + factory->applets = g_hash_table_new (NULL, NULL); factory->next_uid = 1; } static void mate_panel_applet_factory_class_init (MatePanelAppletFactoryClass *klass) { - GObjectClass *g_object_class = G_OBJECT_CLASS (klass); + GObjectClass *g_object_class; + g_object_class = G_OBJECT_CLASS (klass); g_object_class->finalize = mate_panel_applet_factory_finalize; } static void mate_panel_applet_factory_applet_removed (MatePanelAppletFactory *factory, - GObject *applet) + GObject *applet) { guint uid; - uid = GPOINTER_TO_UINT (g_object_get_data (applet, "uid")); - + uid = GPOINTER_TO_UINT (g_object_get_data (applet, "uid")); g_hash_table_remove (factory->applets, GUINT_TO_POINTER (uid)); factory->n_applets--; @@ -130,9 +126,9 @@ mate_panel_applet_factory_applet_removed (MatePanelAppletFactory *factory, MatePanelAppletFactory * mate_panel_applet_factory_new (const gchar *factory_id, - gboolean out_of_process, - GType applet_type, - GClosure *closure) + gboolean out_of_process, + GType applet_type, + GClosure *closure) { MatePanelAppletFactory *factory; @@ -141,9 +137,9 @@ mate_panel_applet_factory_new (const gchar *factory_id, factory->out_of_process = out_of_process; factory->applet_type = applet_type; factory->closure = g_closure_ref (closure); - if (factories == NULL) { + + if (factories == NULL) factories = g_hash_table_new (g_str_hash, g_str_equal); - } g_hash_table_insert (factories, factory->factory_id, factory); @@ -152,7 +148,7 @@ mate_panel_applet_factory_new (const gchar *factory_id, static void set_applet_constructor_properties (GObject *applet, - GVariant *props) + GVariant *props) { GVariantIter iter; GVariant *value; @@ -161,37 +157,29 @@ set_applet_constructor_properties (GObject *applet, g_variant_iter_init (&iter, props); while (g_variant_iter_loop (&iter, "{sv}", &key, &value)) { switch (g_variant_classify (value)) { - case G_VARIANT_CLASS_UINT32: { - guint32 v = g_variant_get_uint32 (value); - - g_object_set (applet, key, v, NULL); - } - break; - case G_VARIANT_CLASS_STRING: { - const gchar *v = g_variant_get_string (value, NULL); - - g_object_set (applet, key, v, NULL); - } - break; - case G_VARIANT_CLASS_BOOLEAN: { - gboolean v = g_variant_get_boolean (value); - - g_object_set (applet, key, v, NULL); - } - break; - default: - g_assert_not_reached (); - break; + case G_VARIANT_CLASS_UINT32: { + guint32 v = g_variant_get_uint32 (value); + g_object_set (applet, key, v, NULL); + break; + } case G_VARIANT_CLASS_STRING: { + const gchar *v = g_variant_get_string (value, NULL); + g_object_set (applet, key, v, NULL); + break; + } case G_VARIANT_CLASS_BOOLEAN: { + gboolean v = g_variant_get_boolean (value); + g_object_set (applet, key, v, NULL); + break; + } default: + g_assert_not_reached (); } } } - static void -mate_panel_applet_factory_get_applet (MatePanelAppletFactory *factory, - GDBusConnection *connection, - GVariant *parameters, - GDBusMethodInvocation *invocation) +mate_panel_applet_factory_get_applet (MatePanelAppletFactory *factory, + GDBusConnection *connection, + GVariant *parameters, + GDBusMethodInvocation *invocation) { GObject *applet; const gchar *applet_id; @@ -205,13 +193,15 @@ mate_panel_applet_factory_get_applet (MatePanelAppletFactory *factory, g_variant_get (parameters, "(&si@a{sv})", &applet_id, &screen_num, &props); applet = g_object_new (factory->applet_type, - "out-of-process", factory->out_of_process, - "id", applet_id, - "connection", connection, - "closure", factory->closure, + "out-of-process", factory->out_of_process, + "id", applet_id, + "connection", connection, + "closure", factory->closure, NULL); factory->n_applets++; - g_object_weak_ref (applet, (GWeakNotify) mate_panel_applet_factory_applet_removed, factory); + g_object_weak_ref (applet, + (GWeakNotify) mate_panel_applet_factory_applet_removed, + factory); set_applet_constructor_properties (applet, props); g_variant_unref (props); @@ -225,7 +215,7 @@ mate_panel_applet_factory_get_applet (MatePanelAppletFactory *factory, gdk_screen_get_default (); xid = mate_panel_applet_get_xid (MATE_PANEL_APPLET (applet), screen); } else -#endif +#endif /* HAVE_X11 */ { /* Not using X11 */ xid = 0; } @@ -256,9 +246,9 @@ method_call_cb (GDBusConnection *connection, { MatePanelAppletFactory *factory = MATE_PANEL_APPLET_FACTORY (user_data); - if (g_strcmp0 (method_name, "GetApplet") == 0) { - mate_panel_applet_factory_get_applet (factory, connection, parameters, invocation); - } + if (g_strcmp0 (method_name, "GetApplet") == 0) + mate_panel_applet_factory_get_applet (factory, connection, + parameters, invocation); } static const gchar introspection_xml[] = @@ -279,31 +269,38 @@ static const gchar introspection_xml[] = static const GDBusInterfaceVTable interface_vtable = { method_call_cb, NULL, - NULL + NULL, + { 0 } }; static GDBusNodeInfo *introspection_data = NULL; static void -on_bus_acquired (GDBusConnection *connection, - const gchar *name, - MatePanelAppletFactory *factory) +on_bus_acquired (GDBusConnection *connection, + const gchar *name, + MatePanelAppletFactory *factory) { gchar *object_path; GError *error = NULL; if (!introspection_data) - introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL); - object_path = g_strdup_printf (MATE_PANEL_APPLET_FACTORY_OBJECT_PATH, factory->factory_id); + introspection_data + = g_dbus_node_info_new_for_xml (introspection_xml, NULL); + + object_path = g_strdup_printf (MATE_PANEL_APPLET_FACTORY_OBJECT_PATH, + factory->factory_id); + factory->connection = connection; - factory->registration_id = g_dbus_connection_register_object (connection, - object_path, - introspection_data->interfaces[0], - &interface_vtable, - factory, NULL, - &error); + factory->registration_id + = g_dbus_connection_register_object (connection, + object_path, + introspection_data->interfaces[0], + &interface_vtable, + factory, NULL, + &error); if (error) { - g_printerr ("Failed to register object %s: %s\n", object_path, error->message); + g_printerr ("Failed to register object %s: %s\n", + object_path, error->message); g_error_free (error); } @@ -311,9 +308,9 @@ on_bus_acquired (GDBusConnection *connection, } static void -on_name_lost (GDBusConnection *connection, - const gchar *name, - MatePanelAppletFactory *factory) +on_name_lost (GDBusConnection *connection, + const gchar *name, + MatePanelAppletFactory *factory) { g_object_unref (factory); } @@ -326,14 +323,16 @@ mate_panel_applet_factory_register_service (MatePanelAppletFactory *factory) if (!factory) return FALSE; - service_name = g_strdup_printf (MATE_PANEL_APPLET_FACTORY_SERVICE_NAME, factory->factory_id); + service_name = g_strdup_printf (MATE_PANEL_APPLET_FACTORY_SERVICE_NAME, + factory->factory_id); + factory->owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, - service_name, - G_BUS_NAME_OWNER_FLAGS_NONE, - (GBusAcquiredCallback) on_bus_acquired, - NULL, - (GBusNameLostCallback) on_name_lost, - factory, NULL); + service_name, + G_BUS_NAME_OWNER_FLAGS_NONE, + (GBusAcquiredCallback) on_bus_acquired, + NULL, + (GBusNameLostCallback) on_name_lost, + factory, NULL); g_free (service_name); return TRUE; @@ -341,10 +340,10 @@ mate_panel_applet_factory_register_service (MatePanelAppletFactory *factory) GtkWidget * mate_panel_applet_factory_get_applet_widget (const gchar *id, - guint uid) + guint uid) { MatePanelAppletFactory *factory; - GObject *object; + GObject *object; if (!factories) return NULL; diff --git a/libmate-panel-applet/mate-panel-applet-factory.h b/libmate-panel-applet/mate-panel-applet-factory.h index 3eb9a22d..a7d2aa53 100644 --- a/libmate-panel-applet/mate-panel-applet-factory.h +++ b/libmate-panel-applet/mate-panel-applet-factory.h @@ -2,6 +2,7 @@ * mate-panel-applet-factory.h: panel applet writing API. * * Copyright (C) 2010 Carlos Garcia Campos <[email protected]> + * Copyright (C) 2012-2021 MATE Developers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -26,28 +27,19 @@ #include "mate-panel-applet.h" -#ifdef __cplusplus -extern "C" { -#endif - -#define PANEL_TYPE_APPLET_FACTORY (mate_panel_applet_factory_get_type ()) -#define MATE_PANEL_APPLET_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANEL_TYPE_APPLET_FACTORY, MatePanelAppletFactory)) -#define MATE_PANEL_APPLET_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PANEL_TYPE_APPLET_FACTORY, MatePanelAppletFactoryClass)) -#define PANEL_IS_APPLET_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANEL_TYPE_APPLET_FACTORY)) - -typedef struct _MatePanelAppletFactory MatePanelAppletFactory; -typedef struct _MatePanelAppletFactoryClass MatePanelAppletFactoryClass; - -GType mate_panel_applet_factory_get_type (void) G_GNUC_CONST; -MatePanelAppletFactory *mate_panel_applet_factory_new (const gchar *applet_id, - gboolean out_of_process, - GType applet_type, - GClosure *closure); -gboolean mate_panel_applet_factory_register_service (MatePanelAppletFactory *factory); -GtkWidget *mate_panel_applet_factory_get_applet_widget (const gchar *id, - guint uid); -#ifdef __cplusplus -} -#endif +G_BEGIN_DECLS + +#define PANEL_TYPE_APPLET_FACTORY mate_panel_applet_factory_get_type () +G_DECLARE_FINAL_TYPE (MatePanelAppletFactory, mate_panel_applet_factory, MATE_PANEL, APPLET_FACTORY, GObject) + +MatePanelAppletFactory *mate_panel_applet_factory_new (const gchar *applet_id, + gboolean out_of_process, + GType applet_type, + GClosure *closure); +gboolean mate_panel_applet_factory_register_service (MatePanelAppletFactory *factory); +GtkWidget *mate_panel_applet_factory_get_applet_widget (const gchar *id, + guint uid); + +G_END_DECLS #endif /* MATE_PANEL_APPLET_FACTORY_H */ diff --git a/libmate-panel-applet/mate-panel-applet-gsettings.c b/libmate-panel-applet/mate-panel-applet-gsettings.c index 9387053d..82867639 100644 --- a/libmate-panel-applet/mate-panel-applet-gsettings.c +++ b/libmate-panel-applet/mate-panel-applet-gsettings.c @@ -2,6 +2,7 @@ * mate-panel-applet-gsettings.c: panel applet preferences handling. * * Copyright (C) 2012 Stefano Karapetsas + * Copyright (C) 2012-2021 MATE Developers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -28,18 +29,100 @@ #include "mate-panel-applet.h" #include "mate-panel-applet-gsettings.h" +static GVariant * +add_to_dict (GVariant *dict, const gchar *schema, const gchar *path) +{ + GVariantIter iter; + GVariantBuilder builder; + gboolean is_schema_found; + gboolean is_incorrect_schema; + gint path_counter; + + gchar *key; + gchar *value; + + g_variant_builder_init (&builder, (const GVariantType *) "a{ss}"); + g_variant_iter_init (&iter, dict); + + is_schema_found = FALSE; + is_incorrect_schema = FALSE; + path_counter = 0; + + while (g_variant_iter_next (&iter, "{ss}", &key, &value)) { + gboolean path_is_found = FALSE; + if (g_strcmp0 (value, path) == 0) { + path_is_found = TRUE; + path_counter++; + if (g_strcmp0 (key, schema) == 0) { + is_schema_found = TRUE; + } else { + // skip incoorect schema for path + is_incorrect_schema = TRUE; + g_free (key); + g_free (value); + continue; + } + } + + gboolean need_add_to_dict = !path_is_found || path_counter < 2; + + if (need_add_to_dict) { + g_variant_builder_add (&builder, "{ss}", key, value); + } + + g_free (key); + g_free (value); + } + + if (!is_schema_found) { + g_variant_builder_add (&builder, "{ss}", schema, path); + } + + if (!is_schema_found || is_incorrect_schema || (path_counter > 1)) { + return g_variant_ref_sink (g_variant_builder_end (&builder)); + } else { + g_variant_builder_clear (&builder); + // no changes + return NULL; + } +} + +static void +register_dconf_editor_relocatable_schema (const gchar *schema, const gchar *path) +{ + GSettings *dconf_editor_settings; + dconf_editor_settings = g_settings_new ("ca.desrt.dconf-editor.Settings"); + + if (dconf_editor_settings && g_settings_is_writable (dconf_editor_settings, "relocatable-schemas-user-paths")) { + GVariant *relocatable_schemas = g_settings_get_value (dconf_editor_settings, "relocatable-schemas-user-paths"); + + if (g_variant_is_of_type (relocatable_schemas, G_VARIANT_TYPE_DICTIONARY)) { + GVariant * new_relocatable_schemas = add_to_dict (relocatable_schemas, schema, path); + if (new_relocatable_schemas) { + g_settings_set_value (dconf_editor_settings, "relocatable-schemas-user-paths", new_relocatable_schemas); + g_variant_unref (new_relocatable_schemas); + } + } + + g_variant_unref (relocatable_schemas); + } + + g_object_unref (dconf_editor_settings); +} + GSettings * mate_panel_applet_settings_new (MatePanelApplet *applet, gchar *schema) { GSettings *settings = NULL; gchar *path; - g_return_val_if_fail (PANEL_IS_APPLET (applet), NULL); + g_return_val_if_fail (MATE_PANEL_IS_APPLET (applet), NULL); path = mate_panel_applet_get_preferences_path (applet); if (path) { settings = g_settings_new_with_path (schema, path); + register_dconf_editor_relocatable_schema (schema, path); g_free (path); } @@ -51,24 +134,24 @@ mate_panel_applet_settings_get_glist (GSettings *settings, gchar *key) { gchar **array; GList *list = NULL; - gint i; + array = g_settings_get_strv (settings, key); if (array != NULL) { - for (i = 0; array[i]; i++) { - list = g_list_append (list, g_strdup (array[i])); + for (gint i = 0; array[i]; i++) { + list = g_list_prepend (list, array[i]); } + g_free (array); } - g_strfreev (array); - return list; + return g_list_reverse (list); } void mate_panel_applet_settings_set_glist (GSettings *settings, gchar *key, GList *list) { GArray *array; - GList *l; + array = g_array_new (TRUE, TRUE, sizeof (gchar *)); - for (l = list; l; l = l->next) { + for (GList *l = list; l; l = l->next) { array = g_array_append_val (array, l->data); } g_settings_set_strv (settings, key, (const gchar **) array->data); @@ -80,24 +163,24 @@ mate_panel_applet_settings_get_gslist (GSettings *settings, gchar *key) { gchar **array; GSList *list = NULL; - gint i; + array = g_settings_get_strv (settings, key); if (array != NULL) { - for (i = 0; array[i]; i++) { - list = g_slist_append (list, g_strdup (array[i])); + for (gint i = 0; array[i]; i++) { + list = g_slist_prepend (list, array[i]); } + g_free (array); } - g_strfreev (array); - return list; + return g_slist_reverse (list); } void mate_panel_applet_settings_set_gslist (GSettings *settings, gchar *key, GSList *list) { GArray *array; - GSList *l; + array = g_array_new (TRUE, TRUE, sizeof (gchar *)); - for (l = list; l; l = l->next) { + for (GSList *l = list; l; l = l->next) { array = g_array_append_val (array, l->data); } g_settings_set_strv (settings, key, (const gchar **) array->data); diff --git a/libmate-panel-applet/mate-panel-applet-gsettings.h b/libmate-panel-applet/mate-panel-applet-gsettings.h index 43b2de8c..152a73d2 100644 --- a/libmate-panel-applet/mate-panel-applet-gsettings.h +++ b/libmate-panel-applet/mate-panel-applet-gsettings.h @@ -2,6 +2,7 @@ * mate-panel-applet-gsettings.h: panel applet preferences handling. * * Copyright (C) 2012 Stefano Karapetsas + * Copyright (C) 2012-2021 MATE Developers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -34,7 +35,15 @@ G_BEGIN_DECLS +/** + * mate_panel_applet_settings_new: + * @applet A #MatePanelApplet + * @schema applet's schema id + * + * Returns: (transfer full): a #GSettings. free when you used it + */ GSettings* mate_panel_applet_settings_new (MatePanelApplet *applet, gchar *schema); + GList* mate_panel_applet_settings_get_glist (GSettings *settings, gchar *key); void mate_panel_applet_settings_set_glist (GSettings *settings, gchar *key, GList *list); GSList* mate_panel_applet_settings_get_gslist (GSettings *settings, gchar *key); diff --git a/libmate-panel-applet/mate-panel-applet.c b/libmate-panel-applet/mate-panel-applet.c index 0acd3dda..48e12622 100644 --- a/libmate-panel-applet/mate-panel-applet.c +++ b/libmate-panel-applet/mate-panel-applet.c @@ -3,6 +3,7 @@ * * Copyright (c) 2010 Carlos Garcia Campos <[email protected]> * Copyright (C) 2001 Sun Microsystems, Inc. + * Copyright (C) 2012-2021 MATE Developers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -51,7 +52,7 @@ #include "mate-panel-applet-marshal.h" #include "mate-panel-applet-enums.h" -struct _MatePanelAppletPrivate { +typedef struct { GtkWidget *plug; GDBusConnection *connection; @@ -82,7 +83,7 @@ struct _MatePanelAppletPrivate { gboolean locked; gboolean locked_down; -}; +} MatePanelAppletPrivate; enum { CHANGE_ORIENT, @@ -147,7 +148,8 @@ static const GtkActionEntry menu_entries[] = { static const GtkToggleActionEntry menu_toggle_entries[] = { { "Lock", NULL, N_("Loc_k To Panel"), NULL, NULL, - G_CALLBACK (mate_panel_applet_menu_cmd_lock) } + G_CALLBACK (mate_panel_applet_menu_cmd_lock), + FALSE } }; G_DEFINE_TYPE_WITH_PRIVATE (MatePanelApplet, mate_panel_applet, GTK_TYPE_EVENT_BOX) @@ -158,28 +160,33 @@ G_DEFINE_TYPE_WITH_PRIVATE (MatePanelApplet, mate_panel_applet, GTK_TYPE_EVENT_B char * mate_panel_applet_get_preferences_path (MatePanelApplet *applet) { - g_return_val_if_fail (PANEL_IS_APPLET (applet), NULL); + MatePanelAppletPrivate *priv; + + g_return_val_if_fail (MATE_PANEL_IS_APPLET (applet), NULL); - if (!applet->priv->prefs_path) + priv = mate_panel_applet_get_instance_private (applet); + if (!priv->prefs_path) return NULL; - return g_strdup (applet->priv->prefs_path); + return g_strdup (priv->prefs_path); } static void mate_panel_applet_set_preferences_path (MatePanelApplet *applet, const char *prefs_path) { - if (applet->priv->prefs_path == prefs_path) + MatePanelAppletPrivate *priv; + + priv = mate_panel_applet_get_instance_private (applet); + + if (priv->prefs_path == prefs_path) return; - if (g_strcmp0 (applet->priv->prefs_path, prefs_path) == 0) + if (g_strcmp0 (priv->prefs_path, prefs_path) == 0) return; - if (prefs_path) { - applet->priv->prefs_path = g_strdup (prefs_path); - - } + if (prefs_path) + priv->prefs_path = g_strdup (prefs_path); g_object_notify (G_OBJECT (applet), "prefs-path"); } @@ -187,25 +194,33 @@ mate_panel_applet_set_preferences_path (MatePanelApplet *applet, MatePanelAppletFlags mate_panel_applet_get_flags (MatePanelApplet *applet) { - g_return_val_if_fail (PANEL_IS_APPLET (applet), MATE_PANEL_APPLET_FLAGS_NONE); + MatePanelAppletPrivate *priv; + + g_return_val_if_fail (MATE_PANEL_IS_APPLET (applet), MATE_PANEL_APPLET_FLAGS_NONE); - return applet->priv->flags; + priv = mate_panel_applet_get_instance_private (applet); + + return priv->flags; } void mate_panel_applet_set_flags (MatePanelApplet *applet, MatePanelAppletFlags flags) { - g_return_if_fail (PANEL_IS_APPLET (applet)); + MatePanelAppletPrivate *priv; + + g_return_if_fail (MATE_PANEL_IS_APPLET (applet)); - if (applet->priv->flags == flags) + priv = mate_panel_applet_get_instance_private (applet); + + if (priv->flags == flags) return; - applet->priv->flags = flags; + priv->flags = flags; g_object_notify (G_OBJECT (applet), "flags"); - if (applet->priv->connection) { + if (priv->connection) { GVariantBuilder builder; GVariantBuilder invalidated_builder; GError *error = NULL; @@ -214,18 +229,18 @@ mate_panel_applet_set_flags (MatePanelApplet *applet, g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); g_variant_builder_add (&builder, "{sv}", "Flags", - g_variant_new_uint32 (applet->priv->flags)); - - g_dbus_connection_emit_signal (applet->priv->connection, - NULL, - applet->priv->object_path, - "org.freedesktop.DBus.Properties", - "PropertiesChanged", - g_variant_new ("(sa{sv}as)", - MATE_PANEL_APPLET_INTERFACE, - &builder, - &invalidated_builder), - &error); + g_variant_new_uint32 (priv->flags)); + + g_dbus_connection_emit_signal (priv->connection, + NULL, + priv->object_path, + "org.freedesktop.DBus.Properties", + "PropertiesChanged", + g_variant_new ("(sa{sv}as)", + MATE_PANEL_APPLET_INTERFACE, + &builder, + &invalidated_builder), + &error); if (error) { g_printerr ("Failed to send signal PropertiesChanged::Flags: %s\n", error->message); @@ -240,13 +255,16 @@ static void mate_panel_applet_size_hints_ensure (MatePanelApplet *applet, int new_size) { - if (applet->priv->size_hints && applet->priv->size_hints_len < new_size) { - g_free (applet->priv->size_hints); - applet->priv->size_hints = g_new (gint, new_size); - } else if (!applet->priv->size_hints) { - applet->priv->size_hints = g_new (gint, new_size); + MatePanelAppletPrivate *priv; + + priv = mate_panel_applet_get_instance_private (applet); + if (priv->size_hints && priv->size_hints_len < new_size) { + g_free (priv->size_hints); + priv->size_hints = g_new (gint, new_size); + } else if (!priv->size_hints) { + priv->size_hints = g_new (gint, new_size); } - applet->priv->size_hints_len = new_size; + priv->size_hints_len = new_size; } static gboolean @@ -255,16 +273,19 @@ mate_panel_applet_size_hints_changed (MatePanelApplet *applet, int n_elements, int base_size) { + MatePanelAppletPrivate *priv; gint i; - if (!applet->priv->size_hints) + priv = mate_panel_applet_get_instance_private (applet); + + if (!priv->size_hints) return TRUE; - if (applet->priv->size_hints_len != n_elements) + if (priv->size_hints_len != n_elements) return TRUE; for (i = 0; i < n_elements; i++) { - if (size_hints[i] + base_size != applet->priv->size_hints[i]) + if (size_hints[i] + base_size != priv->size_hints[i]) return TRUE; } @@ -284,19 +305,22 @@ mate_panel_applet_set_size_hints (MatePanelApplet *applet, int n_elements, int base_size) { + MatePanelAppletPrivate *priv; gint i; /* Make sure property has really changed to avoid bus traffic */ if (!mate_panel_applet_size_hints_changed (applet, size_hints, n_elements, base_size)) return; + priv = mate_panel_applet_get_instance_private (applet); + mate_panel_applet_size_hints_ensure (applet, n_elements); for (i = 0; i < n_elements; i++) - applet->priv->size_hints[i] = size_hints[i] + base_size; + priv->size_hints[i] = size_hints[i] + base_size; g_object_notify (G_OBJECT (applet), "size-hints"); - if (applet->priv->connection) { + if (priv->connection) { GVariantBuilder builder; GVariantBuilder invalidated_builder; GVariant **children; @@ -305,24 +329,24 @@ mate_panel_applet_set_size_hints (MatePanelApplet *applet, g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); - children = g_new (GVariant *, applet->priv->size_hints_len); + children = g_new (GVariant *, priv->size_hints_len); for (i = 0; i < n_elements; i++) - children[i] = g_variant_new_int32 (applet->priv->size_hints[i]); + children[i] = g_variant_new_int32 (priv->size_hints[i]); g_variant_builder_add (&builder, "{sv}", "SizeHints", - g_variant_new_array (G_VARIANT_TYPE_INT32, - children, applet->priv->size_hints_len)); + g_variant_new_array (G_VARIANT_TYPE_INT32, + children, priv->size_hints_len)); g_free (children); - g_dbus_connection_emit_signal (applet->priv->connection, - NULL, - applet->priv->object_path, - "org.freedesktop.DBus.Properties", - "PropertiesChanged", - g_variant_new ("(sa{sv}as)", - MATE_PANEL_APPLET_INTERFACE, - &builder, - &invalidated_builder), - &error); + g_dbus_connection_emit_signal (priv->connection, + NULL, + priv->object_path, + "org.freedesktop.DBus.Properties", + "PropertiesChanged", + g_variant_new ("(sa{sv}as)", + MATE_PANEL_APPLET_INTERFACE, + &builder, + &invalidated_builder), + &error); if (error) { g_printerr ("Failed to send signal PropertiesChanged::SizeHints: %s\n", error->message); @@ -336,9 +360,13 @@ mate_panel_applet_set_size_hints (MatePanelApplet *applet, guint mate_panel_applet_get_size (MatePanelApplet *applet) { - g_return_val_if_fail (PANEL_IS_APPLET (applet), 0); + MatePanelAppletPrivate *priv; - return applet->priv->size; + g_return_val_if_fail (MATE_PANEL_IS_APPLET (applet), 0); + + priv = mate_panel_applet_get_instance_private (applet); + + return priv->size; } /* Applets cannot set their size, so API is not public. */ @@ -346,12 +374,16 @@ static void mate_panel_applet_set_size (MatePanelApplet *applet, guint size) { - g_return_if_fail (PANEL_IS_APPLET (applet)); + MatePanelAppletPrivate *priv; + + g_return_if_fail (MATE_PANEL_IS_APPLET (applet)); + + priv = mate_panel_applet_get_instance_private (applet); - if (applet->priv->size == size) + if (priv->size == size) return; - applet->priv->size = size; + priv->size = size; g_signal_emit (G_OBJECT (applet), mate_panel_applet_signals [CHANGE_SIZE], 0, size); @@ -362,9 +394,13 @@ mate_panel_applet_set_size (MatePanelApplet *applet, MatePanelAppletOrient mate_panel_applet_get_orient (MatePanelApplet *applet) { - g_return_val_if_fail (PANEL_IS_APPLET (applet), 0); + MatePanelAppletPrivate *priv; - return applet->priv->orient; + g_return_val_if_fail (MATE_PANEL_IS_APPLET (applet), 0); + + priv = mate_panel_applet_get_instance_private (applet); + + return priv->orient; } /* Applets cannot set their orientation, so API is not public. */ @@ -372,12 +408,16 @@ static void mate_panel_applet_set_orient (MatePanelApplet *applet, MatePanelAppletOrient orient) { - g_return_if_fail (PANEL_IS_APPLET (applet)); + MatePanelAppletPrivate *priv; + + g_return_if_fail (MATE_PANEL_IS_APPLET (applet)); - if (applet->priv->orient == orient) + priv = mate_panel_applet_get_instance_private (applet); + + if (priv->orient == orient) return; - applet->priv->orient = orient; + priv->orient = orient; g_signal_emit (G_OBJECT (applet), mate_panel_applet_signals [CHANGE_ORIENT], 0, orient); @@ -389,14 +429,17 @@ static void mate_panel_applet_set_locked (MatePanelApplet *applet, gboolean locked) { + MatePanelAppletPrivate *priv; GtkAction *action; - g_return_if_fail (PANEL_IS_APPLET (applet)); + g_return_if_fail (MATE_PANEL_IS_APPLET (applet)); + + priv = mate_panel_applet_get_instance_private (applet); - if (applet->priv->locked == locked) + if (priv->locked == locked) return; - applet->priv->locked = locked; + priv->locked = locked; action = mate_panel_applet_menu_get_action (applet, "Lock"); g_signal_handlers_block_by_func (action, @@ -411,15 +454,15 @@ mate_panel_applet_set_locked (MatePanelApplet *applet, g_object_notify (G_OBJECT (applet), "locked"); - if (applet->priv->connection) { + if (priv->connection) { GError *error = NULL; - g_dbus_connection_emit_signal (applet->priv->connection, - NULL, - applet->priv->object_path, - MATE_PANEL_APPLET_INTERFACE, - locked ? "Lock" : "Unlock", - NULL, &error); + g_dbus_connection_emit_signal (priv->connection, + NULL, + priv->object_path, + MATE_PANEL_APPLET_INTERFACE, + locked ? "Lock" : "Unlock", + NULL, &error); if (error) { g_printerr ("Failed to send signal %s: %s\n", locked ? "Lock" : "Unlock", @@ -432,9 +475,13 @@ mate_panel_applet_set_locked (MatePanelApplet *applet, gboolean mate_panel_applet_get_locked_down (MatePanelApplet *applet) { - g_return_val_if_fail (PANEL_IS_APPLET (applet), FALSE); + MatePanelAppletPrivate *priv; - return applet->priv->locked_down; + g_return_val_if_fail (MATE_PANEL_IS_APPLET (applet), FALSE); + + priv = mate_panel_applet_get_instance_private (applet); + + return priv->locked_down; } /* Applets cannot set the lockdown state, so API is not public. */ @@ -442,12 +489,16 @@ static void mate_panel_applet_set_locked_down (MatePanelApplet *applet, gboolean locked_down) { - g_return_if_fail (PANEL_IS_APPLET (applet)); + MatePanelAppletPrivate *priv; + + g_return_if_fail (MATE_PANEL_IS_APPLET (applet)); + + priv = mate_panel_applet_get_instance_private (applet); - if (applet->priv->locked_down == locked_down) + if (priv->locked_down == locked_down) return; - applet->priv->locked_down = locked_down; + priv->locked_down = locked_down; mate_panel_applet_menu_update_actions (applet); g_object_notify (G_OBJECT (applet), "locked-down"); @@ -563,9 +614,9 @@ mate_panel_applet_request_focus (MatePanelApplet *applet, if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ())) return; - g_return_if_fail (PANEL_IS_APPLET (applet)); + g_return_if_fail (MATE_PANEL_IS_APPLET (applet)); - screen = gtk_window_get_screen (GTK_WINDOW (applet->priv->plug)); + screen = gdk_screen_get_default(); /*There is only one screen since GTK 3.22*/ root = gdk_screen_get_root_window (screen); display = gdk_screen_get_display (screen); @@ -601,42 +652,50 @@ static GtkAction * mate_panel_applet_menu_get_action (MatePanelApplet *applet, const gchar *action) { - return gtk_action_group_get_action (applet->priv->panel_action_group, action); + MatePanelAppletPrivate *priv; + + priv = mate_panel_applet_get_instance_private (applet); + + return gtk_action_group_get_action (priv->panel_action_group, action); } static void mate_panel_applet_menu_update_actions (MatePanelApplet *applet) { - gboolean locked = applet->priv->locked; - gboolean locked_down = applet->priv->locked_down; + MatePanelAppletPrivate *priv; + priv = mate_panel_applet_get_instance_private (applet); g_object_set (mate_panel_applet_menu_get_action (applet, "Lock"), - "visible", !locked_down, NULL); + "visible", !priv->locked_down, + NULL); g_object_set (mate_panel_applet_menu_get_action (applet, "Move"), - "sensitive", !locked, - "visible", !locked_down, - NULL); + "sensitive", !priv->locked, + "visible", !priv->locked_down, + NULL); g_object_set (mate_panel_applet_menu_get_action (applet, "Remove"), - "sensitive", !locked, - "visible", !locked_down, - NULL); + "sensitive", !priv->locked, + "visible", !priv->locked_down, + NULL); } static void mate_panel_applet_menu_cmd_remove (GtkAction *action, MatePanelApplet *applet) { + MatePanelAppletPrivate *priv; GError *error = NULL; - if (!applet->priv->connection) + priv = mate_panel_applet_get_instance_private (applet); + + if (!priv->connection) return; - g_dbus_connection_emit_signal (applet->priv->connection, - NULL, - applet->priv->object_path, - MATE_PANEL_APPLET_INTERFACE, - "RemoveFromPanel", - NULL, &error); + g_dbus_connection_emit_signal (priv->connection, + NULL, + priv->object_path, + MATE_PANEL_APPLET_INTERFACE, + "RemoveFromPanel", + NULL, &error); if (error) { g_printerr ("Failed to send signal RemoveFromPanel: %s\n", error->message); @@ -648,14 +707,17 @@ static void mate_panel_applet_menu_cmd_move (GtkAction *action, MatePanelApplet *applet) { - GError *error = NULL; + MatePanelAppletPrivate *priv; + GError *error = NULL; + + priv = mate_panel_applet_get_instance_private (applet); - if (!applet->priv->connection) + if (!priv->connection) return; - g_dbus_connection_emit_signal (applet->priv->connection, + g_dbus_connection_emit_signal (priv->connection, NULL, - applet->priv->object_path, + priv->object_path, MATE_PANEL_APPLET_INTERFACE, "Move", NULL, &error); @@ -681,25 +743,28 @@ mate_panel_applet_setup_menu (MatePanelApplet *applet, const gchar *xml, GtkActionGroup *applet_action_group) { + MatePanelAppletPrivate *priv; gchar *new_xml; GError *error = NULL; - g_return_if_fail (PANEL_IS_APPLET (applet)); + g_return_if_fail (MATE_PANEL_IS_APPLET (applet)); g_return_if_fail (xml != NULL); - if (applet->priv->applet_action_group) + priv = mate_panel_applet_get_instance_private (applet); + + if (priv->applet_action_group) return; - applet->priv->applet_action_group = g_object_ref (applet_action_group); - gtk_ui_manager_insert_action_group (applet->priv->ui_manager, + priv->applet_action_group = g_object_ref (applet_action_group); + gtk_ui_manager_insert_action_group (priv->ui_manager, applet_action_group, 0); new_xml = g_strdup_printf ("<ui><popup name=\"MatePanelAppletPopup\" action=\"AppletItems\">" "<placeholder name=\"AppletItems\">%s\n</placeholder>\n" "</popup></ui>\n", xml); - gtk_ui_manager_add_ui_from_string (applet->priv->ui_manager, new_xml, -1, &error); + gtk_ui_manager_add_ui_from_string (priv->ui_manager, new_xml, -1, &error); g_free (new_xml); - gtk_ui_manager_ensure_update (applet->priv->ui_manager); + gtk_ui_manager_ensure_update (priv->ui_manager); if (error) { g_warning ("Error merging menus: %s\n", error->message); g_error_free (error); @@ -767,46 +832,35 @@ mate_panel_applet_setup_menu_from_resource (MatePanelApplet *applet, static void mate_panel_applet_finalize (GObject *object) { - MatePanelApplet *applet = MATE_PANEL_APPLET (object); + MatePanelApplet *applet; + MatePanelAppletPrivate *priv; - if (applet->priv->connection) { - if (applet->priv->object_id) - g_dbus_connection_unregister_object (applet->priv->connection, - applet->priv->object_id); - applet->priv->object_id = 0; - g_object_unref (applet->priv->connection); - applet->priv->connection = NULL; + applet = MATE_PANEL_APPLET (object); + priv = mate_panel_applet_get_instance_private (applet); + + if (priv->connection) { + if (priv->object_id) + g_dbus_connection_unregister_object (priv->connection, + priv->object_id); + priv->object_id = 0; + g_clear_object (&priv->connection); } - if (applet->priv->object_path) { - g_free (applet->priv->object_path); - applet->priv->object_path = NULL; - } + g_clear_pointer (&priv->object_path, g_free); mate_panel_applet_set_preferences_path (applet, NULL); - if (applet->priv->applet_action_group) { - g_object_unref (applet->priv->applet_action_group); - applet->priv->applet_action_group = NULL; - } + g_clear_object (&priv->applet_action_group); + g_clear_object (&priv->panel_action_group); + g_clear_object (&priv->ui_manager); - if (applet->priv->panel_action_group) { - g_object_unref (applet->priv->panel_action_group); - applet->priv->panel_action_group = NULL; - } - - if (applet->priv->ui_manager) { - g_object_unref (applet->priv->ui_manager); - applet->priv->ui_manager = NULL; - } - - g_free (applet->priv->size_hints); - g_free (applet->priv->prefs_path); - g_free (applet->priv->background); - g_free (applet->priv->id); + g_clear_pointer (&priv->size_hints, g_free); + g_clear_pointer (&priv->prefs_path, g_free); + g_clear_pointer (&priv->background, g_free); + g_clear_pointer (&priv->id, g_free); /* closure is owned by the factory */ - applet->priv->closure = NULL; + priv->closure = NULL; G_OBJECT_CLASS (mate_panel_applet_parent_class)->finalize (object); } @@ -839,10 +893,12 @@ static void mate_panel_applet_menu_popup (MatePanelApplet *applet, GdkEvent *event) { + MatePanelAppletPrivate *priv; GtkWidget *menu; - menu = gtk_ui_manager_get_widget (applet->priv->ui_manager, - "/MatePanelAppletPopup"); + priv = mate_panel_applet_get_instance_private (applet); + menu = gtk_ui_manager_get_widget (priv->ui_manager, + "/MatePanelAppletPopup"); /* Set up theme and transparency support */ GtkWidget *toplevel = gtk_widget_get_toplevel (menu); @@ -857,7 +913,7 @@ mate_panel_applet_menu_popup (MatePanelApplet *applet, gtk_style_context_add_class(context,"mate-panel-menu-bar"); GdkGravity widget_anchor = GDK_GRAVITY_NORTH_WEST; GdkGravity menu_anchor = GDK_GRAVITY_NORTH_WEST; - switch (applet->priv->orient) { + switch (priv->orient) { case MATE_PANEL_APPLET_ORIENT_UP: menu_anchor = GDK_GRAVITY_SOUTH_WEST; break; @@ -888,7 +944,7 @@ mate_panel_applet_can_focus (GtkWidget *widget) if (gtk_widget_get_has_tooltip (widget)) return TRUE; - if (!PANEL_IS_APPLET (widget)) + if (!MATE_PANEL_IS_APPLET (widget)) return FALSE; return !container_has_focusable_child (GTK_CONTAINER (widget)); @@ -900,16 +956,19 @@ mate_panel_applet_button_event (MatePanelApplet *applet, GdkEventButton *event) { #ifdef HAVE_X11 - GtkWidget *widget; - GdkWindow *window; - GdkWindow *socket_window; - XEvent xevent; - GdkDisplay *display; + MatePanelAppletPrivate *priv; + GtkWidget *widget; + GdkWindow *window; + GdkWindow *socket_window; + XEvent xevent; + GdkDisplay *display; + + priv = mate_panel_applet_get_instance_private (applet); - if (!applet->priv->out_of_process) + if (!priv->out_of_process) return FALSE; - widget = applet->priv->plug; + widget = priv->plug; if (!gtk_widget_is_toplevel (widget)) return FALSE; @@ -983,12 +1042,22 @@ mate_panel_applet_button_press (GtkWidget *widget, } } +#ifdef HAVE_WAYLAND + /*Limit the window list's applet menu to the handle area*/ + if (!(GDK_IS_X11_DISPLAY (gdk_display_get_default ()))) + { + MatePanelAppletFlags flags; + flags = mate_panel_applet_get_flags (applet); + if (flags & MATE_PANEL_APPLET_EXPAND_MAJOR) + return FALSE; + } +#endif + if (event->button == 3) { mate_panel_applet_menu_popup (applet, (GdkEvent *) event); return TRUE; } - return mate_panel_applet_button_event (applet, event); } @@ -1026,8 +1095,10 @@ mate_panel_applet_get_preferred_width (GtkWidget *widget, natural_width); #if !GTK_CHECK_VERSION (3, 23, 0) - MatePanelApplet *applet = MATE_PANEL_APPLET (widget); - if (applet->priv->out_of_process) { + MatePanelAppletPrivate *priv; + + priv = mate_panel_applet_get_instance_private (MATE_PANEL_APPLET (widget)); + if (priv->out_of_process) { /* Out-of-process applets end up scaled up doubly with GTK 3.22. * For these builds divide by the scale factor to ensure * they are back at their own intended size. @@ -1050,8 +1121,10 @@ mate_panel_applet_get_preferred_height (GtkWidget *widget, natural_height); #if !GTK_CHECK_VERSION (3, 23, 0) - MatePanelApplet *applet = MATE_PANEL_APPLET (widget); - if (applet->priv->out_of_process) { + MatePanelAppletPrivate *priv; + + priv = mate_panel_applet_get_instance_private (MATE_PANEL_APPLET (widget)); + if (priv->out_of_process) { gint scale; /* Out-of-process applets end up scaled up doubly with GTK 3.22. * For these builds divide by the scale factor to ensure @@ -1082,13 +1155,13 @@ static void mate_panel_applet_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { + MatePanelAppletPrivate *priv; GtkAllocation child_allocation; MatePanelApplet *applet; if (!mate_panel_applet_can_focus (widget)) { GTK_WIDGET_CLASS (mate_panel_applet_parent_class)->size_allocate (widget, allocation); } else { - int border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); gtk_widget_set_allocation (widget, allocation); @@ -1113,12 +1186,12 @@ mate_panel_applet_size_allocate (GtkWidget *widget, } applet = MATE_PANEL_APPLET (widget); + priv = mate_panel_applet_get_instance_private (applet); - if (applet->priv->previous_height != allocation->height || - applet->priv->previous_width != allocation->width) { - applet->priv->previous_height = allocation->height; - applet->priv->previous_width = allocation->width; - + if ((priv->previous_height != allocation->height) || + (priv->previous_width != allocation->width)) { + priv->previous_height = allocation->height; + priv->previous_width = allocation->width; mate_panel_applet_handle_background (applet); } } @@ -1161,19 +1234,19 @@ static gboolean mate_panel_applet_focus (GtkWidget *widget, GtkDirectionType dir) { + MatePanelAppletPrivate *priv; gboolean ret; GtkWidget *previous_focus_child; - MatePanelApplet *applet; - g_return_val_if_fail (PANEL_IS_APPLET (widget), FALSE); + g_return_val_if_fail (MATE_PANEL_IS_APPLET (widget), FALSE); - applet = MATE_PANEL_APPLET (widget); - if (applet->priv->moving_focus_out) { + priv = mate_panel_applet_get_instance_private (MATE_PANEL_APPLET (widget)); + if (priv->moving_focus_out) { /* * Applet will retain focus if there is nothing else on the * panel to get focus */ - applet->priv->moving_focus_out = FALSE; + priv->moving_focus_out = FALSE; return FALSE; } @@ -1297,7 +1370,7 @@ mate_panel_applet_get_pattern_from_pixmap (MatePanelApplet *applet, cairo_t *cr; cairo_pattern_t *pattern; - g_return_val_if_fail (PANEL_IS_APPLET (applet), NULL); + g_return_val_if_fail (MATE_PANEL_IS_APPLET (applet), NULL); if (!gtk_widget_get_realized (GTK_WIDGET (applet))) return NULL; @@ -1349,15 +1422,17 @@ mate_panel_applet_handle_background_string (MatePanelApplet *applet, GdkRGBA *color, cairo_pattern_t **pattern) { + MatePanelAppletPrivate *priv; MatePanelAppletBackgroundType retval; char **elements; + priv = mate_panel_applet_get_instance_private (applet); retval = PANEL_NO_BACKGROUND; - if (!gtk_widget_get_realized (GTK_WIDGET (applet)) || !applet->priv->background) + if (!gtk_widget_get_realized (GTK_WIDGET (applet)) || !priv->background) return retval; - elements = g_strsplit (applet->priv->background, ":", -1); + elements = g_strsplit (priv->background, ":", -1); if (elements [0] && !strcmp (elements [0], "none" )) { retval = PANEL_NO_BACKGROUND; @@ -1416,11 +1491,12 @@ mate_panel_applet_get_background (MatePanelApplet *applet, GdkRGBA *color, cairo_pattern_t **pattern) { - g_return_val_if_fail (PANEL_IS_APPLET (applet), PANEL_NO_BACKGROUND); + g_return_val_if_fail (MATE_PANEL_IS_APPLET (applet), PANEL_NO_BACKGROUND); /* initial sanity */ if (pattern != NULL) *pattern = NULL; + if (color != NULL) memset (color, 0, sizeof (GdkRGBA)); @@ -1431,15 +1507,18 @@ static void mate_panel_applet_set_background_string (MatePanelApplet *applet, const gchar *background) { - if (applet->priv->background == background) + MatePanelAppletPrivate *priv; + + priv = mate_panel_applet_get_instance_private (applet); + + if (priv->background == background) return; - if (g_strcmp0 (applet->priv->background, background) == 0) + if (g_strcmp0 (priv->background, background) == 0) return; - if (applet->priv->background) - g_free (applet->priv->background); - applet->priv->background = background ? g_strdup (background) : NULL; + g_free (priv->background); + priv->background = background ? g_strdup (background) : NULL; mate_panel_applet_handle_background (applet); g_object_notify (G_OBJECT (applet), "background"); @@ -1455,6 +1534,10 @@ mate_panel_applet_handle_background (MatePanelApplet *applet) type = mate_panel_applet_get_background (applet, &color, &pattern); + if (!gdk_screen_is_composited (gdk_screen_get_default ())) { + color.alpha = 1.; + } + switch (type) { case PANEL_NO_BACKGROUND: g_signal_emit (G_OBJECT (applet), @@ -1472,7 +1555,6 @@ mate_panel_applet_handle_background (MatePanelApplet *applet) 0, PANEL_PIXMAP_BACKGROUND, NULL, pattern); - cairo_pattern_destroy (pattern); break; @@ -1485,24 +1567,31 @@ mate_panel_applet_handle_background (MatePanelApplet *applet) static void mate_panel_applet_realize (GtkWidget *widget) { + MatePanelApplet *applet; + MatePanelAppletPrivate *priv; + GTK_WIDGET_CLASS (mate_panel_applet_parent_class)->realize (widget); - if (MATE_PANEL_APPLET (widget)->priv->background) - mate_panel_applet_handle_background (MATE_PANEL_APPLET (widget)); + applet = MATE_PANEL_APPLET (widget); + priv = mate_panel_applet_get_instance_private (applet); + if (priv->background) + mate_panel_applet_handle_background (applet); } static void mate_panel_applet_move_focus_out_of_applet (MatePanelApplet *applet, GtkDirectionType dir) { - GtkWidget *toplevel; + MatePanelAppletPrivate *priv; + GtkWidget *toplevel; - applet->priv->moving_focus_out = TRUE; + priv = mate_panel_applet_get_instance_private (applet); + priv->moving_focus_out = TRUE; toplevel = gtk_widget_get_toplevel (GTK_WIDGET (applet)); g_return_if_fail (toplevel); gtk_widget_child_focus (toplevel, dir); - applet->priv->moving_focus_out = FALSE; + priv->moving_focus_out = FALSE; } static void @@ -1511,35 +1600,39 @@ mate_panel_applet_change_background(MatePanelApplet *applet, GdkRGBA* color, cairo_pattern_t *pattern) { - GdkWindow *window; + MatePanelAppletPrivate *priv; + GdkWindow *window; + + priv = mate_panel_applet_get_instance_private (applet); - if (applet->priv->out_of_process) - window = gtk_widget_get_window (GTK_WIDGET (applet->priv->plug)); + if (priv->out_of_process) + window = gtk_widget_get_window (GTK_WIDGET (priv->plug)); else window = gtk_widget_get_window (GTK_WIDGET (applet)); - gtk_widget_set_app_paintable(GTK_WIDGET(applet),TRUE); + gtk_widget_set_app_paintable (GTK_WIDGET (applet),TRUE); - if (applet->priv->out_of_process) - _mate_panel_applet_apply_css(GTK_WIDGET(applet->priv->plug),type); + if (priv->out_of_process) + _mate_panel_applet_apply_css (GTK_WIDGET (priv->plug),type); switch (type) { case PANEL_NO_BACKGROUND: - if (applet->priv->out_of_process){ - pattern = cairo_pattern_create_rgba (0,0,0,0); /* Using NULL here breaks transparent */ - gdk_window_set_background_pattern(window,pattern); /* backgrounds set by GTK theme */ + if (priv->out_of_process){ + cairo_pattern_t *transparent = cairo_pattern_create_rgba (0, 0, 0, 0); /* Using NULL here breaks transparent */ + gdk_window_set_background_pattern (window, transparent); /* backgrounds set by GTK theme */ + cairo_pattern_destroy (transparent); } break; case PANEL_COLOR_BACKGROUND: - if (applet->priv->out_of_process){ + if (priv->out_of_process){ gdk_window_set_background_rgba(window,color); - gtk_widget_queue_draw (applet->priv->plug); /*change the bg right away always */ + gtk_widget_queue_draw (priv->plug); /*change the bg right away always */ } break; case PANEL_PIXMAP_BACKGROUND: - if (applet->priv->out_of_process){ + if (priv->out_of_process){ gdk_window_set_background_pattern(window,pattern); - gtk_widget_queue_draw (applet->priv->plug); /*change the bg right away always */ + gtk_widget_queue_draw (priv->plug); /*change the bg right away always */ } break; default: @@ -1547,78 +1640,81 @@ mate_panel_applet_change_background(MatePanelApplet *applet, break; } - if (applet->priv->out_of_process){ - GtkStyleContext *context = - gtk_widget_get_style_context (GTK_WIDGET(applet->priv->plug)); + if (priv->out_of_process){ + GtkStyleContext *context; - if (applet->priv->orient == MATE_PANEL_APPLET_ORIENT_UP || - applet->priv->orient == MATE_PANEL_APPLET_ORIENT_DOWN){ - gtk_style_context_add_class(context,"horizontal"); - } - else { - gtk_style_context_add_class(context,"vertical"); - } + context = gtk_widget_get_style_context (GTK_WIDGET (priv->plug)); + + if (priv->orient == MATE_PANEL_APPLET_ORIENT_UP || + priv->orient == MATE_PANEL_APPLET_ORIENT_DOWN) + gtk_style_context_add_class (context, "horizontal"); + else + gtk_style_context_add_class (context, "vertical"); } } static void mate_panel_applet_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) + guint prop_id, + GValue *value, + GParamSpec *pspec) { - MatePanelApplet *applet = MATE_PANEL_APPLET (object); + MatePanelApplet *applet; + MatePanelAppletPrivate *priv; - switch (prop_id) { - case PROP_OUT_OF_PROCESS: - g_value_set_boolean (value, applet->priv->out_of_process); - break; - case PROP_ID: - g_value_set_string (value, applet->priv->id); - break; - case PROP_CLOSURE: - g_value_set_pointer (value, applet->priv->closure); - break; - case PROP_CONNECTION: - g_value_set_object (value, applet->priv->connection); - break; - case PROP_PREFS_PATH: - g_value_set_string (value, applet->priv->prefs_path); - break; - case PROP_ORIENT: - g_value_set_uint (value, applet->priv->orient); - break; - case PROP_SIZE: - g_value_set_uint (value, applet->priv->size); - break; - case PROP_BACKGROUND: - g_value_set_string (value, applet->priv->background); - break; - case PROP_FLAGS: - g_value_set_uint (value, applet->priv->flags); - break; - case PROP_SIZE_HINTS: { - GVariant **children; - GVariant *variant; - gint i; + applet = MATE_PANEL_APPLET (object); + priv = mate_panel_applet_get_instance_private (applet); - children = g_new (GVariant *, applet->priv->size_hints_len); - for (i = 0; i < applet->priv->size_hints_len; i++) - children[i] = g_variant_new_int32 (applet->priv->size_hints[i]); - variant = g_variant_new_array (G_VARIANT_TYPE_INT32, - children, applet->priv->size_hints_len); - g_free (children); - g_value_set_pointer (value, variant); - } - break; - case PROP_LOCKED: - g_value_set_boolean (value, applet->priv->locked); - break; - case PROP_LOCKED_DOWN: - g_value_set_boolean (value, applet->priv->locked_down); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + switch (prop_id) { + case PROP_OUT_OF_PROCESS: + g_value_set_boolean (value, priv->out_of_process); + break; + case PROP_ID: + g_value_set_string (value, priv->id); + break; + case PROP_CLOSURE: + g_value_set_pointer (value, priv->closure); + break; + case PROP_CONNECTION: + g_value_set_object (value, priv->connection); + break; + case PROP_PREFS_PATH: + g_value_set_string (value, priv->prefs_path); + break; + case PROP_ORIENT: + g_value_set_uint (value, priv->orient); + break; + case PROP_SIZE: + g_value_set_uint (value, priv->size); + break; + case PROP_BACKGROUND: + g_value_set_string (value, priv->background); + break; + case PROP_FLAGS: + g_value_set_uint (value, priv->flags); + break; + case PROP_SIZE_HINTS: { + GVariant **children; + GVariant *variant; + gint i; + + children = g_new (GVariant *, priv->size_hints_len); + for (i = 0; i < priv->size_hints_len; i++) + children[i] = g_variant_new_int32 (priv->size_hints[i]); + variant = g_variant_new_array (G_VARIANT_TYPE_INT32, + children, priv->size_hints_len); + g_free (children); + g_value_set_pointer (value, variant); + break; + } + case PROP_LOCKED: + g_value_set_boolean (value, priv->locked); + break; + case PROP_LOCKED_DOWN: + g_value_set_boolean (value, priv->locked_down); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } @@ -1628,22 +1724,26 @@ mate_panel_applet_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - MatePanelApplet *applet = MATE_PANEL_APPLET (object); + MatePanelApplet *applet; + MatePanelAppletPrivate *priv; + + applet = MATE_PANEL_APPLET (object); + priv = mate_panel_applet_get_instance_private (applet); switch (prop_id) { case PROP_OUT_OF_PROCESS: - applet->priv->out_of_process = g_value_get_boolean (value); + priv->out_of_process = g_value_get_boolean (value); break; case PROP_ID: - applet->priv->id = g_value_dup_string (value); + priv->id = g_value_dup_string (value); break; case PROP_CLOSURE: - applet->priv->closure = g_value_get_pointer (value); - g_closure_set_marshal (applet->priv->closure, + priv->closure = g_value_get_pointer (value); + g_closure_set_marshal (priv->closure, mate_panel_applet_marshal_BOOLEAN__STRING); break; case PROP_CONNECTION: - applet->priv->connection = g_value_dup_object (value); + priv->connection = g_value_dup_object (value); break; case PROP_PREFS_PATH: mate_panel_applet_set_preferences_path (applet, g_value_get_string (value)); @@ -1696,13 +1796,15 @@ add_tab_bindings (GtkBindingSet *binding_set, static void mate_panel_applet_setup (MatePanelApplet *applet) { + MatePanelAppletPrivate *priv; GValue value = {0, }; GArray *params; - gint i; + guint i; gboolean ret; - g_assert (applet->priv->id != NULL && - applet->priv->closure != NULL); + priv = mate_panel_applet_get_instance_private (applet); + + g_assert ((priv->id != NULL) && (priv->closure != NULL)); params = g_array_sized_new (FALSE, TRUE, sizeof (GValue), 2); value.g_type = 0; @@ -1712,16 +1814,16 @@ mate_panel_applet_setup (MatePanelApplet *applet) value.g_type = 0; g_value_init (&value, G_TYPE_STRING); - g_value_set_string (&value, applet->priv->id); + g_value_set_string (&value, priv->id); g_array_append_val (params, value); value.g_type = 0; g_value_init (&value, G_TYPE_BOOLEAN); - g_closure_invoke (applet->priv->closure, - &value, params->len, - (GValue *) params->data, - NULL); + g_closure_invoke (priv->closure, + &value, params->len, + (GValue *) params->data, + NULL); for (i = 0; i < params->len; i++) g_value_unset (&g_array_index (params, GValue, i)); @@ -1785,28 +1887,30 @@ static void _mate_panel_applet_prepare_css (GtkStyleContext *context) static void mate_panel_applet_init (MatePanelApplet *applet) { - applet->priv = mate_panel_applet_get_instance_private (applet); - - applet->priv->flags = MATE_PANEL_APPLET_FLAGS_NONE; - applet->priv->orient = MATE_PANEL_APPLET_ORIENT_UP; - applet->priv->size = 24; - - applet->priv->panel_action_group = gtk_action_group_new ("PanelActions"); - gtk_action_group_set_translation_domain (applet->priv->panel_action_group, GETTEXT_PACKAGE); - gtk_action_group_add_actions (applet->priv->panel_action_group, - menu_entries, - G_N_ELEMENTS (menu_entries), - applet); - gtk_action_group_add_toggle_actions (applet->priv->panel_action_group, - menu_toggle_entries, - G_N_ELEMENTS (menu_toggle_entries), - applet); - - applet->priv->ui_manager = gtk_ui_manager_new (); - gtk_ui_manager_insert_action_group (applet->priv->ui_manager, - applet->priv->panel_action_group, 1); - gtk_ui_manager_add_ui_from_string (applet->priv->ui_manager, - panel_menu_ui, -1, NULL); + MatePanelAppletPrivate *priv; + + priv = mate_panel_applet_get_instance_private (applet); + + priv->flags = MATE_PANEL_APPLET_FLAGS_NONE; + priv->orient = MATE_PANEL_APPLET_ORIENT_UP; + priv->size = 24; + + priv->panel_action_group = gtk_action_group_new ("PanelActions"); + gtk_action_group_set_translation_domain (priv->panel_action_group, GETTEXT_PACKAGE); + gtk_action_group_add_actions (priv->panel_action_group, + menu_entries, + G_N_ELEMENTS (menu_entries), + applet); + gtk_action_group_add_toggle_actions (priv->panel_action_group, + menu_toggle_entries, + G_N_ELEMENTS (menu_toggle_entries), + applet); + + priv->ui_manager = gtk_ui_manager_new (); + gtk_ui_manager_insert_action_group (priv->ui_manager, + priv->panel_action_group, 1); + gtk_ui_manager_add_ui_from_string (priv->ui_manager, + panel_menu_ui, -1, NULL); gtk_widget_set_events (GTK_WIDGET (applet), GDK_BUTTON_PRESS_MASK | @@ -1820,35 +1924,38 @@ mate_panel_applet_constructor (GType type, { GObject *object; MatePanelApplet *applet; + MatePanelAppletPrivate *priv; object = G_OBJECT_CLASS (mate_panel_applet_parent_class)->constructor (type, n_construct_properties, construct_properties); applet = MATE_PANEL_APPLET (object); + priv = mate_panel_applet_get_instance_private (applet); - if (!applet->priv->out_of_process) + if (!priv->out_of_process) return object; #ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { - applet->priv->plug = gtk_plug_new (0); - - GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (applet->priv->plug)); - GdkVisual *visual = gdk_screen_get_rgba_visual (screen); - gtk_widget_set_visual (GTK_WIDGET (applet->priv->plug), visual); GtkStyleContext *context; - context = gtk_widget_get_style_context (GTK_WIDGET(applet->priv->plug)); - gtk_style_context_add_class (context,"gnome-panel-menu-bar"); - gtk_style_context_add_class (context,"mate-panel-menu-bar"); - gtk_widget_set_name (GTK_WIDGET (applet->priv->plug), "PanelPlug"); + GtkWidget *widget; + + priv->plug = gtk_plug_new (0); + widget = GTK_WIDGET (priv->plug); + gtk_widget_set_visual (widget, + gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget))); + context = gtk_widget_get_style_context (widget); + gtk_style_context_add_class (context, "gnome-panel-menu-bar"); + gtk_style_context_add_class (context, "mate-panel-menu-bar"); + gtk_widget_set_name (widget, "PanelPlug"); _mate_panel_applet_prepare_css (context); - g_signal_connect_swapped (G_OBJECT (applet->priv->plug), "embedded", - G_CALLBACK (mate_panel_applet_setup), - applet); + g_signal_connect_swapped (priv->plug, "embedded", + G_CALLBACK (mate_panel_applet_setup), + applet); - gtk_container_add (GTK_CONTAINER (applet->priv->plug), GTK_WIDGET (applet)); + gtk_container_add (GTK_CONTAINER (priv->plug), GTK_WIDGET (applet)); } else #endif { /* not using X11 */ @@ -1895,7 +2002,6 @@ mate_panel_applet_class_init (MatePanelAppletClass *klass) widget_class->realize = mate_panel_applet_realize; widget_class->key_press_event = mate_panel_applet_key_press_event; - gobject_class->finalize = mate_panel_applet_finalize; g_object_class_install_property (gobject_class, @@ -1991,7 +2097,7 @@ mate_panel_applet_class_init (MatePanelAppletClass *klass) G_PARAM_READWRITE)); mate_panel_applet_signals [CHANGE_ORIENT] = - g_signal_new ("change_orient", + g_signal_new ("change-orient", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (MatePanelAppletClass, change_orient), @@ -2003,7 +2109,7 @@ mate_panel_applet_class_init (MatePanelAppletClass *klass) G_TYPE_UINT); mate_panel_applet_signals [CHANGE_SIZE] = - g_signal_new ("change_size", + g_signal_new ("change-size", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (MatePanelAppletClass, change_size), @@ -2015,7 +2121,7 @@ mate_panel_applet_class_init (MatePanelAppletClass *klass) G_TYPE_INT); mate_panel_applet_signals [CHANGE_BACKGROUND] = - g_signal_new ("change_background", + g_signal_new ("change-background", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (MatePanelAppletClass, change_background), @@ -2115,35 +2221,35 @@ get_property_cb (GDBusConnection *connection, GError **error, gpointer user_data) { - MatePanelApplet *applet = MATE_PANEL_APPLET (user_data); - GVariant *retval = NULL; + MatePanelAppletPrivate *priv; + GVariant *retval = NULL; + + priv = mate_panel_applet_get_instance_private (MATE_PANEL_APPLET (user_data)); if (g_strcmp0 (property_name, "PrefsPath") == 0) { - retval = g_variant_new_string (applet->priv->prefs_path ? - applet->priv->prefs_path : ""); + retval = g_variant_new_string (priv->prefs_path ? priv->prefs_path : ""); } else if (g_strcmp0 (property_name, "Orient") == 0) { - retval = g_variant_new_uint32 (applet->priv->orient); + retval = g_variant_new_uint32 (priv->orient); } else if (g_strcmp0 (property_name, "Size") == 0) { - retval = g_variant_new_uint32 (applet->priv->size); + retval = g_variant_new_uint32 (priv->size); } else if (g_strcmp0 (property_name, "Background") == 0) { - retval = g_variant_new_string (applet->priv->background ? - applet->priv->background : ""); + retval = g_variant_new_string (priv->background ? priv->background : ""); } else if (g_strcmp0 (property_name, "Flags") == 0) { - retval = g_variant_new_uint32 (applet->priv->flags); + retval = g_variant_new_uint32 (priv->flags); } else if (g_strcmp0 (property_name, "SizeHints") == 0) { GVariant **children; gint i; - children = g_new (GVariant *, applet->priv->size_hints_len); - for (i = 0; i < applet->priv->size_hints_len; i++) - children[i] = g_variant_new_int32 (applet->priv->size_hints[i]); + children = g_new (GVariant *, priv->size_hints_len); + for (i = 0; i < priv->size_hints_len; i++) + children[i] = g_variant_new_int32 (priv->size_hints[i]); retval = g_variant_new_array (G_VARIANT_TYPE_INT32, - children, applet->priv->size_hints_len); + children, priv->size_hints_len); g_free (children); } else if (g_strcmp0 (property_name, "Locked") == 0) { - retval = g_variant_new_boolean (applet->priv->locked); + retval = g_variant_new_boolean (priv->locked); } else if (g_strcmp0 (property_name, "LockedDown") == 0) { - retval = g_variant_new_boolean (applet->priv->locked_down); + retval = g_variant_new_boolean (priv->locked_down); } return retval; @@ -2211,7 +2317,8 @@ static const gchar introspection_xml[] = static const GDBusInterfaceVTable interface_vtable = { method_call_cb, get_property_cb, - set_property_cb + set_property_cb, + { 0 } }; static GDBusNodeInfo *introspection_data = NULL; @@ -2219,22 +2326,24 @@ static GDBusNodeInfo *introspection_data = NULL; static void mate_panel_applet_register_object (MatePanelApplet *applet) { + MatePanelAppletPrivate *priv; GError *error = NULL; static gint id = 0; if (!introspection_data) introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL); - applet->priv->object_path = g_strdup_printf (MATE_PANEL_APPLET_OBJECT_PATH, applet->priv->id, id++); - applet->priv->object_id = - g_dbus_connection_register_object (applet->priv->connection, - applet->priv->object_path, - introspection_data->interfaces[0], - &interface_vtable, - applet, NULL, - &error); - if (!applet->priv->object_id) { - g_printerr ("Failed to register object %s: %s\n", applet->priv->object_path, error->message); + priv = mate_panel_applet_get_instance_private (applet); + priv->object_path = g_strdup_printf (MATE_PANEL_APPLET_OBJECT_PATH, priv->id, id++); + priv->object_id = + g_dbus_connection_register_object (priv->connection, + priv->object_path, + introspection_data->interfaces[0], + &interface_vtable, + applet, NULL, + &error); + if (!priv->object_id) { + g_printerr ("Failed to register object %s: %s\n", priv->object_path, error->message); g_error_free (error); } } @@ -2307,7 +2416,6 @@ _mate_panel_applet_factory_main_internal (const gchar *factory_id, GType applet_type, MatePanelAppletFactoryCallback callback, gpointer user_data) - { MatePanelAppletFactory* factory; GClosure* closure; @@ -2316,7 +2424,6 @@ _mate_panel_applet_factory_main_internal (const gchar *factory_id, g_return_val_if_fail(callback != NULL, 1); g_assert(g_type_is_a(applet_type, PANEL_TYPE_APPLET)); - #ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { /*Use this both in and out of process as the tray applet always uses GtkSocket @@ -2414,15 +2521,19 @@ guint32 mate_panel_applet_get_xid (MatePanelApplet *applet, GdkScreen *screen) { + MatePanelAppletPrivate *priv; + + priv = mate_panel_applet_get_instance_private (applet); + /* out_of_process should only be true on X11, so an extra runtime Wayland check is not needed */ - if (applet->priv->out_of_process == FALSE) + if (priv->out_of_process == FALSE) return 0; #ifdef HAVE_X11 - gtk_window_set_screen (GTK_WINDOW (applet->priv->plug), screen); - gtk_widget_show (applet->priv->plug); + gtk_window_set_screen (GTK_WINDOW (priv->plug), screen); + gtk_widget_show (priv->plug); - return gtk_plug_get_id (GTK_PLUG (applet->priv->plug)); + return gtk_plug_get_id (GTK_PLUG (priv->plug)); #else return 0; #endif @@ -2431,7 +2542,11 @@ mate_panel_applet_get_xid (MatePanelApplet *applet, const gchar * mate_panel_applet_get_object_path (MatePanelApplet *applet) { - return applet->priv->object_path; + MatePanelAppletPrivate *priv; + + priv = mate_panel_applet_get_instance_private (applet); + + return priv->object_path; } G_MODULE_EXPORT GtkWidget * diff --git a/libmate-panel-applet/mate-panel-applet.h b/libmate-panel-applet/mate-panel-applet.h index 4f1b4cf5..9cc48ae8 100644 --- a/libmate-panel-applet/mate-panel-applet.h +++ b/libmate-panel-applet/mate-panel-applet.h @@ -2,6 +2,7 @@ * mate-panel-applet.h: panel applet writing API. * * Copyright (C) 2001 Sun Microsystems, Inc. + * Copyright (C) 2012-2021 MATE Developers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -31,168 +32,175 @@ #include <cairo.h> #include <cairo-gobject.h> -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS + +#define PANEL_TYPE_APPLET mate_panel_applet_get_type () +G_DECLARE_DERIVABLE_TYPE (MatePanelApplet, mate_panel_applet, MATE_PANEL, APPLET, GtkEventBox) typedef enum { - MATE_PANEL_APPLET_ORIENT_UP, - MATE_PANEL_APPLET_ORIENT_DOWN, - MATE_PANEL_APPLET_ORIENT_LEFT, - MATE_PANEL_APPLET_ORIENT_RIGHT + MATE_PANEL_APPLET_ORIENT_UP, + MATE_PANEL_APPLET_ORIENT_DOWN, + MATE_PANEL_APPLET_ORIENT_LEFT, + MATE_PANEL_APPLET_ORIENT_RIGHT #define MATE_PANEL_APPLET_ORIENT_FIRST MATE_PANEL_APPLET_ORIENT_UP #define MATE_PANEL_APPLET_ORIENT_LAST MATE_PANEL_APPLET_ORIENT_RIGHT } MatePanelAppletOrient; -#define PANEL_TYPE_APPLET (mate_panel_applet_get_type ()) -#define MATE_PANEL_APPLET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PANEL_TYPE_APPLET, MatePanelApplet)) -#define MATE_PANEL_APPLET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), PANEL_TYPE_APPLET, MatePanelAppletClass)) -#define PANEL_IS_APPLET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PANEL_TYPE_APPLET)) -#define PANEL_IS_APPLET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), PANEL_TYPE_APPLET)) -#define MATE_PANEL_APPLET_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), PANEL_TYPE_APPLET, MatePanelAppletClass)) - typedef enum { - PANEL_NO_BACKGROUND, - PANEL_COLOR_BACKGROUND, - PANEL_PIXMAP_BACKGROUND + PANEL_NO_BACKGROUND, + PANEL_COLOR_BACKGROUND, + PANEL_PIXMAP_BACKGROUND } MatePanelAppletBackgroundType; typedef enum { - MATE_PANEL_APPLET_FLAGS_NONE = 0, - MATE_PANEL_APPLET_EXPAND_MAJOR = 1 << 0, - MATE_PANEL_APPLET_EXPAND_MINOR = 1 << 1, - MATE_PANEL_APPLET_HAS_HANDLE = 1 << 2 + MATE_PANEL_APPLET_FLAGS_NONE = 0, + MATE_PANEL_APPLET_EXPAND_MAJOR = 1 << 0, + MATE_PANEL_APPLET_EXPAND_MINOR = 1 << 1, + MATE_PANEL_APPLET_HAS_HANDLE = 1 << 2 #define MATE_PANEL_APPLET_FLAGS_ALL (MATE_PANEL_APPLET_EXPAND_MAJOR|MATE_PANEL_APPLET_EXPAND_MINOR|MATE_PANEL_APPLET_HAS_HANDLE) } MatePanelAppletFlags; -typedef struct _MatePanelApplet MatePanelApplet; -typedef struct _MatePanelAppletClass MatePanelAppletClass; -typedef struct _MatePanelAppletPrivate MatePanelAppletPrivate; +typedef gboolean (*MatePanelAppletFactoryCallback) (MatePanelApplet *applet, const gchar *iid, gpointer user_data); -typedef gboolean (*MatePanelAppletFactoryCallback) (MatePanelApplet* applet, const gchar *iid, gpointer user_data); +struct _MatePanelAppletClass { + GtkEventBoxClass event_box_class; -struct _MatePanelApplet { - GtkEventBox event_box; + void (*change_orient) (MatePanelApplet *applet, + MatePanelAppletOrient orient); - MatePanelAppletPrivate* priv; -}; + void (*change_size) (MatePanelApplet *applet, + guint size); -struct _MatePanelAppletClass { - GtkEventBoxClass event_box_class; + void (*change_background) (MatePanelApplet *applet, + MatePanelAppletBackgroundType type, + GdkRGBA *color, + cairo_pattern_t *pattern); - void (*change_orient) (MatePanelApplet* applet, MatePanelAppletOrient orient); + void (*move_focus_out_of_applet) (MatePanelApplet *frame, + GtkDirectionType direction); +}; - void (*change_size) (MatePanelApplet* applet, guint size); +GtkWidget* mate_panel_applet_new (void); - void (*change_background) (MatePanelApplet *applet, MatePanelAppletBackgroundType type, GdkRGBA* color, cairo_pattern_t *pattern); +MatePanelAppletOrient mate_panel_applet_get_orient (MatePanelApplet *applet); - void (*move_focus_out_of_applet) (MatePanelApplet* frame, GtkDirectionType direction); -}; +guint mate_panel_applet_get_size (MatePanelApplet *applet); -GType mate_panel_applet_get_type(void) G_GNUC_CONST; +MatePanelAppletBackgroundType mate_panel_applet_get_background (MatePanelApplet *applet, + /* return values */ GdkRGBA *color, + cairo_pattern_t **pattern); -GtkWidget* mate_panel_applet_new(void); +void mate_panel_applet_set_background_widget (MatePanelApplet *applet, + GtkWidget *widget); -MatePanelAppletOrient mate_panel_applet_get_orient(MatePanelApplet* applet); -guint mate_panel_applet_get_size(MatePanelApplet* applet); -MatePanelAppletBackgroundType mate_panel_applet_get_background (MatePanelApplet *applet, /* return values */ GdkRGBA* color, cairo_pattern_t** pattern); -void mate_panel_applet_set_background_widget(MatePanelApplet* applet, GtkWidget* widget); +gchar* mate_panel_applet_get_preferences_path (MatePanelApplet *applet); -gchar* mate_panel_applet_get_preferences_path(MatePanelApplet* applet); +MatePanelAppletFlags mate_panel_applet_get_flags (MatePanelApplet *applet); -MatePanelAppletFlags mate_panel_applet_get_flags(MatePanelApplet* applet); -void mate_panel_applet_set_flags(MatePanelApplet* applet, MatePanelAppletFlags flags); +void mate_panel_applet_set_flags (MatePanelApplet *applet, + MatePanelAppletFlags flags); -void mate_panel_applet_set_size_hints(MatePanelApplet* applet, const int* size_hints, int n_elements, int base_size); +void mate_panel_applet_set_size_hints (MatePanelApplet *applet, + const int *size_hints, + int n_elements, + int base_size); -gboolean mate_panel_applet_get_locked_down(MatePanelApplet* applet); +gboolean mate_panel_applet_get_locked_down (MatePanelApplet *applet); /* Does nothing when not on X11 */ -void mate_panel_applet_request_focus(MatePanelApplet* applet, guint32 timestamp); +void mate_panel_applet_request_focus (MatePanelApplet *applet, + guint32 timestamp); -void mate_panel_applet_setup_menu(MatePanelApplet* applet, const gchar* xml, GtkActionGroup* action_group); -void mate_panel_applet_setup_menu_from_file(MatePanelApplet* applet, const gchar* filename, GtkActionGroup* action_group); -void mate_panel_applet_setup_menu_from_resource (MatePanelApplet *applet, - const gchar *resource_path, - GtkActionGroup *action_group); +void mate_panel_applet_setup_menu (MatePanelApplet *applet, + const gchar *xml, + GtkActionGroup *action_group); -int mate_panel_applet_factory_main(const gchar* factory_id,gboolean out_process, GType applet_type, MatePanelAppletFactoryCallback callback, gpointer data); +void mate_panel_applet_setup_menu_from_file (MatePanelApplet *applet, + const gchar *filename, + GtkActionGroup *action_group); -int mate_panel_applet_factory_setup_in_process (const gchar *factory_id, - GType applet_type, - MatePanelAppletFactoryCallback callback, - gpointer data); +void mate_panel_applet_setup_menu_from_resource (MatePanelApplet *applet, + const gchar *resource_path, + GtkActionGroup *action_group); +int mate_panel_applet_factory_main (const gchar *factory_id, + gboolean out_process, + GType applet_type, + MatePanelAppletFactoryCallback callback, + gpointer data); + +int mate_panel_applet_factory_setup_in_process (const gchar *factory_id, + GType applet_type, + MatePanelAppletFactoryCallback callback, + gpointer data); /* * These macros are getting a bit unwieldy. * * Things to define for these: - * + required if Native Language Support is enabled (ENABLE_NLS): + * + required if Native Language Support is enabled (ENABLE_NLS): * GETTEXT_PACKAGE and MATELOCALEDIR */ #if !defined(ENABLE_NLS) - #define _MATE_PANEL_APPLET_SETUP_GETTEXT(call_textdomain) \ - do { } while (0) + #define _MATE_PANEL_APPLET_SETUP_GETTEXT(call_textdomain) \ + do { } while (0) #else /* defined(ENABLE_NLS) */ - #include <libintl.h> - #define _MATE_PANEL_APPLET_SETUP_GETTEXT(call_textdomain) \ - do { \ - bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR); \ - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); \ - if (call_textdomain) \ - textdomain (GETTEXT_PACKAGE); \ - } while (0) + #include <libintl.h> + #define _MATE_PANEL_APPLET_SETUP_GETTEXT(call_textdomain) \ + do { \ + bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR); \ + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); \ + if (call_textdomain) \ + textdomain (GETTEXT_PACKAGE); \ + } while (0) #endif /* !defined(ENABLE_NLS) */ #define MATE_PANEL_APPLET_OUT_PROCESS_FACTORY(factory_id, type, name, callback, data) \ -int main(int argc, char* argv[]) \ +int main(int argc, char *argv[]) \ { \ - GOptionContext* context; \ - GError* error; \ - int retval; \ - \ - _MATE_PANEL_APPLET_SETUP_GETTEXT (TRUE); \ - \ - context = g_option_context_new(""); \ - g_option_context_add_group (context, gtk_get_option_group(TRUE)); \ - \ - error = NULL; \ - if (!g_option_context_parse (context, &argc, &argv, &error)) \ - { \ - if (error) \ - { \ - g_printerr ("Cannot parse arguments: %s.\n", error->message); \ - g_error_free (error); \ - } \ - else \ - { \ - g_printerr ("Cannot parse arguments.\n"); \ - } \ - g_option_context_free (context); \ - return 1; \ - } \ - \ - gtk_init (&argc, &argv); \ - \ - retval = mate_panel_applet_factory_main (factory_id,TRUE, type, callback, data); \ - g_option_context_free (context); \ - \ - return retval; \ + GOptionContext *context; \ + GError *error; \ + int retval; \ + \ + _MATE_PANEL_APPLET_SETUP_GETTEXT (TRUE); \ + \ + context = g_option_context_new(""); \ + g_option_context_add_group (context, gtk_get_option_group(TRUE)); \ + \ + error = NULL; \ + if (!g_option_context_parse (context, &argc, &argv, &error)) \ + { \ + if (error) \ + { \ + g_printerr ("Cannot parse arguments: %s.\n", error->message); \ + g_error_free (error); \ + } \ + else \ + { \ + g_printerr ("Cannot parse arguments.\n"); \ + } \ + g_option_context_free (context); \ + return 1; \ + } \ + \ + gtk_init (&argc, &argv); \ + \ + retval = mate_panel_applet_factory_main (factory_id,TRUE, type, callback, data); \ + g_option_context_free (context); \ + \ + return retval; \ } #define MATE_PANEL_APPLET_IN_PROCESS_FACTORY(factory_id, type, descr, callback, data) \ -gboolean _mate_panel_applet_shlib_factory (void); \ +gboolean _mate_panel_applet_shlib_factory (void); \ G_MODULE_EXPORT gint _mate_panel_applet_shlib_factory(void) \ { \ - _MATE_PANEL_APPLET_SETUP_GETTEXT(FALSE); \ + _MATE_PANEL_APPLET_SETUP_GETTEXT(FALSE); \ return mate_panel_applet_factory_setup_in_process (factory_id, type, \ callback, data); \ } -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* __MATE_PANEL_APPLET_H__ */ diff --git a/libmate-panel-applet/panel-applet-private.h b/libmate-panel-applet/panel-applet-private.h index ea1dd6c2..904a94a6 100644 --- a/libmate-panel-applet/panel-applet-private.h +++ b/libmate-panel-applet/panel-applet-private.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2010 Carlos Garcia Campos + * Copyright (C) 2012-2021 MATE Developers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -19,7 +20,7 @@ */ #ifndef PANEL_APPLET_PRIVATE_H -#define PANEL_APPLET_RPIVATE_H +#define PANEL_APPLET_PRIVATE_H #include "mate-panel-applet.h" diff --git a/libmate-panel-applet/panel-plug-private.h b/libmate-panel-applet/panel-plug-private.h index 5d5f1265..ae906fc7 100644 --- a/libmate-panel-applet/panel-plug-private.h +++ b/libmate-panel-applet/panel-plug-private.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2016 Alberts Muktupāvels + * Copyright (C) 2016-2021 MATE Developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/libmate-panel-applet/panel-plug.c b/libmate-panel-applet/panel-plug.c index 3bf3def0..ec24a85a 100644 --- a/libmate-panel-applet/panel-plug.c +++ b/libmate-panel-applet/panel-plug.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2016 Alberts Muktupāvels + * Copyright (C) 2016-2021 MATE Developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/libmate-panel-applet/test-dbus-applet.c b/libmate-panel-applet/test-dbus-applet.c index bfd00e5e..cb520680 100644 --- a/libmate-panel-applet/test-dbus-applet.c +++ b/libmate-panel-applet/test-dbus-applet.c @@ -171,18 +171,15 @@ test_applet_fill (TestApplet *applet) mate_panel_applet_set_flags (MATE_PANEL_APPLET (applet), MATE_PANEL_APPLET_HAS_HANDLE); - g_signal_connect (G_OBJECT (applet), - "change_orient", + g_signal_connect (applet, "change-orient", G_CALLBACK (test_applet_handle_orient_change), NULL); - g_signal_connect (G_OBJECT (applet), - "change_size", + g_signal_connect (applet, "change-size", G_CALLBACK (test_applet_handle_size_change), NULL); - g_signal_connect (G_OBJECT (applet), - "change_background", + g_signal_connect (applet, "change-background", G_CALLBACK (test_applet_handle_background_change), NULL); @@ -202,7 +199,6 @@ test_applet_factory (TestApplet *applet, return retval; } - MATE_PANEL_APPLET_OUT_PROCESS_FACTORY ("TestAppletFactory", test_applet_get_type (), "A Test Applet for the MATE-3.0 Panel", |