summaryrefslogtreecommitdiff
path: root/mate-panel
diff options
context:
space:
mode:
authorStefano Karapetsas <[email protected]>2014-02-12 12:05:37 +0100
committerStefano Karapetsas <[email protected]>2014-02-12 12:05:37 +0100
commita47009814ce3418f5e861ba425e8fab2ac01f9da (patch)
tree49ce8190c861d010ec80fee1aeeb23ead0d52b08 /mate-panel
parentcd6f4678430417bf1675db8ce2343acc1f60f32b (diff)
downloadmate-panel-a47009814ce3418f5e861ba425e8fab2ac01f9da.tar.bz2
mate-panel-a47009814ce3418f5e861ba425e8fab2ac01f9da.tar.xz
Allow to customize menu bar with GSettings
Diffstat (limited to 'mate-panel')
-rw-r--r--mate-panel/panel-menu-bar.c47
-rw-r--r--mate-panel/panel-schemas.h7
2 files changed, 51 insertions, 3 deletions
diff --git a/mate-panel/panel-menu-bar.c b/mate-panel/panel-menu-bar.c
index 005e6be0..358eac95 100644
--- a/mate-panel/panel-menu-bar.c
+++ b/mate-panel/panel-menu-bar.c
@@ -47,6 +47,7 @@
#include "panel-stock-icons.h"
#include "panel-typebuiltins.h"
#include "panel-icon-names.h"
+#include "panel-schemas.h"
G_DEFINE_TYPE (PanelMenuBar, panel_menu_bar, GTK_TYPE_MENU_BAR)
@@ -61,6 +62,8 @@ struct _PanelMenuBarPrivate {
GtkWidget* places_item;
GtkWidget* desktop_item;
+ GSettings* settings;
+
PanelOrientation orientation;
};
@@ -107,12 +110,34 @@ static void panel_menu_bar_setup_tooltip(PanelMenuBar* menubar)
g_signal_connect(GTK_MENU_SHELL (menubar), "deactivate", G_CALLBACK (panel_menu_bar_reinit_tooltip), menubar);
}
+static void panel_menu_bar_update_visibility (GSettings* settings, gchar* key, PanelMenuBar* menubar)
+{
+ GtkWidget* image;
+ gchar *str;
+
+ gtk_widget_set_visible (GTK_WIDGET (menubar->priv->applications_item), g_settings_get_boolean (settings, PANEL_MENU_BAR_SHOW_APPLICATIONS_KEY));
+ gtk_widget_set_visible (GTK_WIDGET (menubar->priv->places_item), g_settings_get_boolean (settings, PANEL_MENU_BAR_SHOW_PLACES_KEY));
+ gtk_widget_set_visible (GTK_WIDGET (menubar->priv->desktop_item), g_settings_get_boolean (settings, PANEL_MENU_BAR_SHOW_DESKTOP_KEY));
+
+ if (g_settings_get_boolean (settings, PANEL_MENU_BAR_SHOW_ICON_KEY))
+ {
+ str = g_settings_get_string (settings, PANEL_MENU_BAR_ICON_NAME_KEY);
+ if (str != NULL && str[0] != 0)
+ image = gtk_image_new_from_icon_name(str, panel_menu_bar_icon_get_size());
+ else
+ image = gtk_image_new_from_icon_name(PANEL_ICON_MAIN_MENU, panel_menu_bar_icon_get_size());
+ g_free (str);
+ }
+ else
+ image = NULL;
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menubar->priv->applications_item), image);
+}
+
static void panel_menu_bar_init(PanelMenuBar* menubar)
{
#if GTK_CHECK_VERSION (3, 0, 0)
GtkCssProvider *provider;
#endif
- GtkWidget* image;
menubar->priv = PANEL_MENU_BAR_GET_PRIVATE(menubar);
@@ -131,13 +156,12 @@ static void panel_menu_bar_init(PanelMenuBar* menubar)
menubar->priv->info = NULL;
+ menubar->priv->settings = g_settings_new (PANEL_MENU_BAR_SCHEMA);
menubar->priv->applications_menu = create_applications_menu("mate-applications.menu", NULL, TRUE);
menubar->priv->applications_item = panel_image_menu_item_new();
gtk_menu_item_set_label(GTK_MENU_ITEM(menubar->priv->applications_item), _("Applications"));
- image = gtk_image_new_from_icon_name(PANEL_ICON_MAIN_MENU, panel_menu_bar_icon_get_size());
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menubar->priv->applications_item), image);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menubar->priv->applications_item), menubar->priv->applications_menu);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menubar->priv->applications_item);
@@ -150,6 +174,9 @@ static void panel_menu_bar_init(PanelMenuBar* menubar)
panel_menu_bar_setup_tooltip(menubar);
+ panel_menu_bar_update_visibility(menubar->priv->settings, NULL, menubar);
+ g_signal_connect(menubar->priv->settings, "changed", G_CALLBACK (panel_menu_bar_update_visibility), menubar);
+
panel_menu_bar_update_text_gravity(menubar);
g_signal_connect(menubar, "screen-changed", G_CALLBACK(panel_menu_bar_update_text_gravity), NULL);
}
@@ -249,6 +276,19 @@ static void panel_menu_bar_size_allocate(GtkWidget* widget, GtkAllocation* alloc
panel_menu_bar_change_background(PANEL_MENU_BAR(widget));
}
+static void panel_menu_bar_finalize (GObject* object)
+{
+ PanelMenuBar* menubar;
+
+ menubar = PANEL_MENU_BAR (object);
+
+ if (menubar->priv->settings != NULL)
+ {
+ g_object_unref (menubar->priv->settings);
+ menubar->priv->settings = NULL;
+ }
+}
+
static void panel_menu_bar_class_init(PanelMenuBarClass* klass)
{
GObjectClass* gobject_class = (GObjectClass*) klass;
@@ -256,6 +296,7 @@ static void panel_menu_bar_class_init(PanelMenuBarClass* klass)
gobject_class->get_property = panel_menu_bar_get_property;
gobject_class->set_property = panel_menu_bar_set_property;
+ gobject_class->finalize = panel_menu_bar_finalize;
widget_class->parent_set = panel_menu_bar_parent_set;
widget_class->size_allocate = panel_menu_bar_size_allocate;
diff --git a/mate-panel/panel-schemas.h b/mate-panel/panel-schemas.h
index b57a4063..c21a8464 100644
--- a/mate-panel/panel-schemas.h
+++ b/mate-panel/panel-schemas.h
@@ -59,6 +59,13 @@
#define PANEL_OBJECT_LAUNCHER_LOCATION_KEY "launcher-location"
#define PANEL_OBJECT_ACTION_TYPE_KEY "action-type"
+#define PANEL_MENU_BAR_SCHEMA "org.mate.panel.menubar"
+#define PANEL_MENU_BAR_SHOW_APPLICATIONS_KEY "show-applications"
+#define PANEL_MENU_BAR_SHOW_PLACES_KEY "show-places"
+#define PANEL_MENU_BAR_SHOW_DESKTOP_KEY "show-desktop"
+#define PANEL_MENU_BAR_SHOW_ICON_KEY "show-icon"
+#define PANEL_MENU_BAR_ICON_NAME_KEY "icon-name"
+
/* external schemas */
#define CAJA_DESKTOP_SCHEMA "org.mate.caja.desktop"