diff options
author | Fabien Broquard <[email protected]> | 2018-10-02 20:35:14 +0200 |
---|---|---|
committer | lukefromdc <[email protected]> | 2018-10-20 13:35:24 -0400 |
commit | d68268a7200b0f9ecf93566f1da9beca58ca4c1d (patch) | |
tree | b964e7bfbad4ac21f6d62374b5d50533d5f27bf8 /applets | |
parent | 10b9c30fc79de5f8d9516ba153df233c4968da65 (diff) | |
download | mate-panel-d68268a7200b0f9ecf93566f1da9beca58ca4c1d.tar.bz2 mate-panel-d68268a7200b0f9ecf93566f1da9beca58ca4c1d.tar.xz |
na-tray: add preferences dialog and applet menu entry
The only option in the preferences is a GtkSpinButton
for the user to be able to set the icon sizes easily
without having to use dconf-editor.
Diffstat (limited to 'applets')
-rw-r--r-- | applets/notification_area/Makefile.am | 1 | ||||
-rw-r--r-- | applets/notification_area/main.c | 95 | ||||
-rw-r--r-- | applets/notification_area/na.gresource.xml | 1 | ||||
-rw-r--r-- | applets/notification_area/notification-area-menu.xml | 1 | ||||
-rw-r--r-- | applets/notification_area/notification-area-preferences-dialog.ui | 164 |
5 files changed, 262 insertions, 0 deletions
diff --git a/applets/notification_area/Makefile.am b/applets/notification_area/Makefile.am index 67d4f8c6..57ee0a3b 100644 --- a/applets/notification_area/Makefile.am +++ b/applets/notification_area/Makefile.am @@ -97,6 +97,7 @@ notification_area_gschemas_in = org.mate.panel.applet.notification-area.gschema. gsettings_SCHEMAS = $(notification_area_gschemas_in:.xml.in=.xml) ui_FILES = \ + notification-area-preferences-dialog.ui \ notification-area-menu.xml na-resources.c: na.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/na.gresource.xml) diff --git a/applets/notification_area/main.c b/applets/notification_area/main.c index 9fc63e04..8d97ee59 100644 --- a/applets/notification_area/main.c +++ b/applets/notification_area/main.c @@ -40,10 +40,19 @@ #define NOTIFICATION_AREA_ICON "mate-panel-notification-area" +typedef struct +{ + GtkWidget *preferences_dialog; + GtkWidget *min_icon_size_spin; +} NAPreferencesDialog; + struct _NaTrayAppletPrivate { GtkWidget *grid; + NAPreferencesDialog *dialog; + GtkBuilder *builder; + GSettings *settings; gint min_icon_size; @@ -116,6 +125,10 @@ gsettings_changed_min_icon_size (GSettings *settings, { applet->priv->min_icon_size = g_settings_get_int (settings, key); + if (applet->priv->dialog) + gtk_spin_button_set_value (GTK_SPIN_BUTTON (applet->priv->dialog->min_icon_size_spin), + applet->priv->min_icon_size); + na_grid_set_min_icon_size (NA_GRID (applet->priv->grid), applet->priv->min_icon_size); } @@ -126,6 +139,78 @@ setup_gsettings (NaTrayApplet *applet) g_signal_connect (applet->priv->settings, "changed::" KEY_MIN_ICON_SIZE, G_CALLBACK (gsettings_changed_min_icon_size), applet); } +static void +na_preferences_dialog_min_icon_size_changed (NaTrayApplet *applet, + GtkSpinButton *spin_button) +{ + applet->priv->min_icon_size = gtk_spin_button_get_value_as_int (spin_button); + g_settings_set_int (applet->priv->settings, KEY_MIN_ICON_SIZE, applet->priv->min_icon_size); +} + +static gboolean +na_preferences_dialog_hide_event (GtkWidget *widget, + GdkEvent *event, + NaTrayApplet *applet) +{ + gtk_widget_hide (applet->priv->dialog->preferences_dialog); + return TRUE; +} + +static void +na_preferences_dialog_response (NaTrayApplet *applet, + int response, + GtkWidget *preferences_dialog) +{ + switch (response) + { + case GTK_RESPONSE_CLOSE: + gtk_widget_hide (preferences_dialog); + break; + default: + break; + } +} + +static void +ensure_prefs_window_is_created (NaTrayApplet *applet) +{ + if (applet->priv->dialog) + return; + + applet->priv->dialog = g_new0 (NAPreferencesDialog, 1); + + applet->priv->dialog->preferences_dialog = GTK_WIDGET (gtk_builder_get_object (applet->priv->builder, "notification_area_preferences_dialog")); + + gtk_window_set_icon_name (GTK_WINDOW (applet->priv->dialog->preferences_dialog), NOTIFICATION_AREA_ICON); + + applet->priv->dialog->min_icon_size_spin = GTK_WIDGET (gtk_builder_get_object (applet->priv->builder, "min_icon_size_spin")); + g_return_if_fail (applet->priv->dialog->min_icon_size_spin != NULL); + + gtk_spin_button_set_range (GTK_SPIN_BUTTON (applet->priv->dialog->min_icon_size_spin), 7, 100); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (applet->priv->dialog->min_icon_size_spin), applet->priv->min_icon_size); + + g_signal_connect_swapped (applet->priv->dialog->min_icon_size_spin, "value_changed", + G_CALLBACK (na_preferences_dialog_min_icon_size_changed), + applet); + + g_signal_connect_swapped (applet->priv->dialog->preferences_dialog, "response", + G_CALLBACK (na_preferences_dialog_response), applet); + + g_signal_connect (G_OBJECT (applet->priv->dialog->preferences_dialog), "delete_event", + G_CALLBACK (na_preferences_dialog_hide_event), applet); +} + +static void +properties_dialog (GtkAction *action, + NaTrayApplet *applet) +{ + ensure_prefs_window_is_created (applet); + + gtk_window_set_screen (GTK_WINDOW (applet->priv->dialog->preferences_dialog), + gtk_widget_get_screen (GTK_WIDGET (applet))); + gtk_window_present (GTK_WINDOW (applet->priv->dialog->preferences_dialog)); +} + static void help_cb(GtkAction* action, NaTrayApplet* applet) { GError* error = NULL; @@ -173,6 +258,7 @@ static void about_cb(GtkAction* action, NaTrayApplet* applet) "Vincent Untz <[email protected]>", "Alberts Muktupāvels", "Colomban Wendling <[email protected]>", + "Fabien Broquard <[email protected]>", NULL }; @@ -200,6 +286,9 @@ static void about_cb(GtkAction* action, NaTrayApplet* applet) } static const GtkActionEntry menu_actions [] = { + { "SystemTrayPreferences", "document-properties", N_("_Preferences"), + NULL, NULL, + G_CALLBACK (properties_dialog) }, { "SystemTrayHelp", "help-browser", N_("_Help"), NULL, NULL, G_CALLBACK (help_cb) }, @@ -230,6 +319,10 @@ na_tray_applet_realize (GtkWidget *widget) // load min icon size gsettings_changed_min_icon_size (applet->priv->settings, KEY_MIN_ICON_SIZE, applet); + + applet->priv->builder = gtk_builder_new (); + gtk_builder_set_translation_domain (applet->priv->builder, GETTEXT_PACKAGE); + gtk_builder_add_from_resource (applet->priv->builder, NA_RESOURCE_PATH "notification-area-preferences-dialog.ui", NULL); } static void @@ -239,6 +332,8 @@ na_tray_applet_dispose (GObject *object) g_clear_object (&NA_TRAY_APPLET (object)->priv->sn_watcher); #endif + g_clear_object (&NA_TRAY_APPLET (object)->priv->builder); + G_OBJECT_CLASS (na_tray_applet_parent_class)->dispose (object); } diff --git a/applets/notification_area/na.gresource.xml b/applets/notification_area/na.gresource.xml index 1b20172a..e65ca5d0 100644 --- a/applets/notification_area/na.gresource.xml +++ b/applets/notification_area/na.gresource.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <gresources> <gresource prefix="/org/mate/panel/applet/na"> + <file compressed="true">notification-area-preferences-dialog.ui</file> <file compressed="true">notification-area-menu.xml</file> </gresource> </gresources> diff --git a/applets/notification_area/notification-area-menu.xml b/applets/notification_area/notification-area-menu.xml index fdbcc83f..18b624ab 100644 --- a/applets/notification_area/notification-area-menu.xml +++ b/applets/notification_area/notification-area-menu.xml @@ -1,3 +1,4 @@ +<menuitem name="Notification Area Preferences Item" action="SystemTrayPreferences" /> <menuitem name="Notification Area Help Item" action="SystemTrayHelp" /> <menuitem name="Notification Area About Item" action="SystemTrayAbout" /> diff --git a/applets/notification_area/notification-area-preferences-dialog.ui b/applets/notification_area/notification-area-preferences-dialog.ui new file mode 100644 index 00000000..d4be2a0c --- /dev/null +++ b/applets/notification_area/notification-area-preferences-dialog.ui @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.22.1 + +mate-panel - panel-properties-dialog +Copyright (C) Mate Developer + +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 the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +Author: Wolfgang Ulbrich + +--> +<interface> + <requires lib="gtk+" version="3.14"/> + <!-- interface-license-type gplv2 --> + <!-- interface-name mate-panel --> + <!-- interface-description panel-properties-dialog --> + <!-- interface-copyright Mate Developer --> + <!-- interface-authors Wolfgang Ulbrich --> + <object class="GtkAdjustment" id="adjustment1"> + <property name="lower">7</property> + <property name="upper">100</property> + <property name="value">26</property> + <property name="step_increment">1</property> + <property name="page_increment">1</property> + </object> + <object class="GtkDialog" id="notification_area_preferences_dialog"> + <property name="can_focus">False</property> + <property name="border_width">5</property> + <property name="title" translatable="yes">Notification Area Preferences</property> + <property name="resizable">False</property> + <property name="window_position">center</property> + <property name="type_hint">dialog</property> + <child> + <placeholder/> + </child> + <child internal-child="vbox"> + <object class="GtkBox" id="dialog-vbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkButton" id="closebutton"> + <property name="label">gtk-close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkNotebook" id="notebook"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">5</property> + <property name="show_tabs">False</property> + <property name="show_border">False</property> + <child> + <object class="GtkGrid" id="general_grid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + <property name="margin_bottom">6</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkLabel" id="min_icon_size_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">_Minimum Icon Size:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">min_icon_size_spin</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="min_icon_size_spin"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + <property name="text" translatable="yes">26</property> + <property name="adjustment">adjustment1</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + <property name="value">26</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="min_icon_size_label_pixels"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">pixels</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">0</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child type="tab"> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-7">closebutton</action-widget> + </action-widgets> + </object> +</interface> |