diff options
Diffstat (limited to 'netspeed')
-rw-r--r-- | netspeed/data/netspeed-preferences.ui | 12 | ||||
-rw-r--r-- | netspeed/src/Makefile.am | 2 | ||||
-rw-r--r-- | netspeed/src/netspeed-preferences.c | 259 | ||||
-rw-r--r-- | netspeed/src/netspeed-preferences.h | 31 | ||||
-rw-r--r-- | netspeed/src/netspeed.c | 368 | ||||
-rw-r--r-- | netspeed/src/netspeed.h | 7 |
6 files changed, 458 insertions, 221 deletions
diff --git a/netspeed/data/netspeed-preferences.ui b/netspeed/data/netspeed-preferences.ui index 9bc04f65..bc1e5587 100644 --- a/netspeed/data/netspeed-preferences.ui +++ b/netspeed/data/netspeed-preferences.ui @@ -12,13 +12,13 @@ <property name="can-focus">False</property> <property name="icon-name">window-close</property> </object> - <object class="GtkDialog" id="preferences_dialog"> + <template class="NetspeedPreferences" parent="GtkDialog"> <property name="can-focus">False</property> <property name="border-width">12</property> <property name="title" translatable="yes">MATE Netspeed Preferences</property> + <property name="destroy-with-parent">True</property> <property name="icon-name">mate-netspeed-applet</property> <property name="type-hint">dialog</property> - <signal name="response" handler="on_preferences_dialog_response" swapped="no"/> <child internal-child="vbox"> <object class="GtkBox"> <property name="can-focus">False</property> @@ -135,7 +135,6 @@ <property name="halign">start</property> <property name="use-underline">True</property> <property name="draw-indicator">True</property> - <signal name="toggled" handler="on_show_sum_checkbutton_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -152,7 +151,6 @@ <property name="halign">start</property> <property name="use-underline">True</property> <property name="draw-indicator">True</property> - <signal name="toggled" handler="on_show_bits_checkbutton_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -169,7 +167,6 @@ <property name="halign">start</property> <property name="use-underline">True</property> <property name="draw-indicator">True</property> - <signal name="toggled" handler="on_change_icon_checkbutton_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -186,7 +183,6 @@ <property name="halign">start</property> <property name="use-underline">True</property> <property name="draw-indicator">True</property> - <signal name="toggled" handler="on_show_icon_checkbutton_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -203,7 +199,6 @@ <property name="halign">start</property> <property name="use-underline">True</property> <property name="draw-indicator">True</property> - <signal name="toggled" handler="on_show_quality_icon_checkbutton_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -220,7 +215,6 @@ <property name="halign">start</property> <property name="use-underline">True</property> <property name="draw-indicator">True</property> - <signal name="toggled" handler="on_show_all_addresses_checkbutton_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -256,5 +250,5 @@ <action-widget response="-11">button1</action-widget> <action-widget response="-3">button2</action-widget> </action-widgets> - </object> + </template> </interface> diff --git a/netspeed/src/Makefile.am b/netspeed/src/Makefile.am index faf55e0b..8358b3c9 100644 --- a/netspeed/src/Makefile.am +++ b/netspeed/src/Makefile.am @@ -22,6 +22,8 @@ mate_netspeed_applet_SOURCES = \ backend.c \ netspeed.c \ netspeed.h \ + netspeed-preferences.c \ + netspeed-preferences.h \ $(NULL) if HAVE_NL diff --git a/netspeed/src/netspeed-preferences.c b/netspeed/src/netspeed-preferences.c new file mode 100644 index 00000000..7ed05a3b --- /dev/null +++ b/netspeed/src/netspeed-preferences.c @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2020 MATE Development Team + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <glib/gi18n-lib.h> +#include <gtk/gtk.h> +#include "backend.h" +#include "netspeed-preferences.h" + +struct _NetspeedPreferences +{ + GtkDialog parent; + + NetspeedApplet *netspeed; + + GSettings *settings; + GtkWidget *network_device_combo; + GtkWidget *show_all_addresses_checkbutton; + GtkWidget *show_sum_checkbutton; + GtkWidget *show_bits_checkbutton; + GtkWidget *show_icon_checkbutton; + GtkWidget *show_quality_icon_checkbutton; + GtkWidget *change_icon_checkbutton; +}; + +typedef enum +{ + PROP_NETSPEED_APPLET = 1, + N_PROPERTIES +} NetspeedPreferencesProperty; + +G_DEFINE_TYPE (NetspeedPreferences, netspeed_preferences, GTK_TYPE_DIALOG) + +static void +netspeed_preferences_init (NetspeedPreferences *preferences) +{ + gtk_widget_init_template (GTK_WIDGET (preferences)); +} + +static void +netspeed_preferences_finalize (GObject *object) +{ + G_OBJECT_CLASS (netspeed_preferences_parent_class)->finalize (object); +} + +static void +netspeed_preferences_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + NetspeedPreferences *self = NETSPEED_PREFERENCES (object); + + switch ((NetspeedPreferencesProperty) property_id) { + case PROP_NETSPEED_APPLET: + self->netspeed = g_value_get_pointer (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +netspeed_preferences_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + NetspeedPreferences *self = NETSPEED_PREFERENCES (object); + + switch ((NetspeedPreferencesProperty) property_id) { + case PROP_NETSPEED_APPLET: + g_value_set_pointer (value, self->netspeed); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +netspeed_preferences_response (GtkDialog *dialog, + gint response_id) +{ + NetspeedPreferences *preferences; + + preferences = NETSPEED_PREFERENCES (dialog); + + switch (response_id) { + case GTK_RESPONSE_HELP: + netspeed_applet_display_help (GTK_WIDGET (dialog), + "netspeed_applet-settings"); + break; + default: + gtk_widget_destroy (GTK_WIDGET (preferences)); + } +} + +static void +on_network_device_combo_changed (GtkComboBox *combo, + NetspeedPreferences *preferences) +{ + GList *devices; + int i, active; + gboolean old_auto_change_device, auto_change_device; + + devices = g_object_get_data (G_OBJECT (combo), "devices"); + active = gtk_combo_box_get_active (combo); + g_assert (active > -1); + + old_auto_change_device = auto_change_device = g_settings_get_boolean (preferences->settings, + "auto-change-device"); + if (0 == active) { + if (auto_change_device) + return; + auto_change_device = TRUE; + } else { + const gchar *current_device_name; + + current_device_name = netspeed_applet_get_current_device_name (preferences->netspeed); + auto_change_device = FALSE; + for (i = 1; i < active; i++) { + devices = g_list_next (devices); + } + if (g_str_equal (devices->data, current_device_name)) + return; + g_settings_set_string (preferences->settings, + "device", devices->data); + } + if (old_auto_change_device != auto_change_device) + g_settings_set_boolean (preferences->settings, + "auto-change-device", auto_change_device); +} + +static void +netspeed_preferences_class_init (NetspeedPreferencesClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass); + + object_class->finalize = netspeed_preferences_finalize; + object_class->set_property = netspeed_preferences_set_property; + object_class->get_property = netspeed_preferences_get_property; + + dialog_class->response = netspeed_preferences_response; + + g_object_class_install_property (object_class, + PROP_NETSPEED_APPLET, + g_param_spec_pointer ("netspeed-applet", + "Netspeed Applet", + "The Netspeed Applet", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + gtk_widget_class_set_template_from_resource (widget_class, NETSPEED_RESOURCE_PATH "netspeed-preferences.ui"); + + gtk_widget_class_bind_template_child (widget_class, NetspeedPreferences, network_device_combo); + gtk_widget_class_bind_template_child (widget_class, NetspeedPreferences, show_all_addresses_checkbutton); + gtk_widget_class_bind_template_child (widget_class, NetspeedPreferences, show_sum_checkbutton); + gtk_widget_class_bind_template_child (widget_class, NetspeedPreferences, show_bits_checkbutton); + gtk_widget_class_bind_template_child (widget_class, NetspeedPreferences, show_icon_checkbutton); + gtk_widget_class_bind_template_child (widget_class, NetspeedPreferences, show_quality_icon_checkbutton); + gtk_widget_class_bind_template_child (widget_class, NetspeedPreferences, change_icon_checkbutton); + + gtk_widget_class_bind_template_callback (widget_class, on_network_device_combo_changed); +} + +static void +free_devices (gpointer data) +{ + g_list_free_full (data, g_free); +} + +static void +fill_device_combo (NetspeedPreferences *preferences, GSettings *settings) +{ + GList *ptr, *devices; + int i, active = -1; + const gchar *current_device_name; + gboolean auto_change_device; + + /* Default means device with default route set */ + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (preferences->network_device_combo), + _("Default")); + ptr = devices = get_available_devices (); + current_device_name = netspeed_applet_get_current_device_name (preferences->netspeed); + auto_change_device = g_settings_get_boolean (settings, "auto-change-device"); + for (i = 0; ptr; ptr = g_list_next (ptr)) { + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (preferences->network_device_combo), + ptr->data); + if (g_str_equal (ptr->data, current_device_name)) + active = (i + 1); + ++i; + } + if (active < 0 || auto_change_device) + active = 0; + gtk_combo_box_set_active (GTK_COMBO_BOX (preferences->network_device_combo), active); + g_object_set_data_full (G_OBJECT (preferences->network_device_combo), "devices", + devices, free_devices); +} + +GtkWidget * +netspeed_preferences_new (NetspeedApplet *netspeed) +{ + NetspeedPreferences *preferences; + GSettings *settings; + + preferences = g_object_new (NETSPEED_TYPE_PREFERENCES, + "netspeed-applet", netspeed, + NULL); + + preferences->settings = settings = netspeed_applet_get_settings (preferences->netspeed); + + fill_device_combo (preferences, settings); + + g_settings_bind (settings, "show-all-addresses", + preferences->show_all_addresses_checkbutton, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind (settings, "show-sum", + preferences->show_sum_checkbutton, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind (settings, "show-bits", + preferences->show_bits_checkbutton, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind (settings, "show-icon", + preferences->show_icon_checkbutton, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind (settings, "show-quality-icon", + preferences->show_quality_icon_checkbutton, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind (settings, "change-icon", + preferences->change_icon_checkbutton, "active", + G_SETTINGS_BIND_DEFAULT); + + return GTK_WIDGET (preferences); +} diff --git a/netspeed/src/netspeed-preferences.h b/netspeed/src/netspeed-preferences.h new file mode 100644 index 00000000..d10470ab --- /dev/null +++ b/netspeed/src/netspeed-preferences.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2020 MATE Development Team + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef NETSPEED_PREFERENCES_H +#define NETSPEED_PREFERENCES_H + +#include <gtk/gtk.h> + +#include "netspeed.h" + +#define NETSPEED_TYPE_PREFERENCES netspeed_preferences_get_type () +G_DECLARE_FINAL_TYPE (NetspeedPreferences, netspeed_preferences, + NETSPEED, PREFERENCES, GtkDialog) + +GtkWidget *netspeed_preferences_new (NetspeedApplet *netspeed); + +#endif diff --git a/netspeed/src/netspeed.c b/netspeed/src/netspeed.c index 2dc2f276..c9cdf936 100644 --- a/netspeed/src/netspeed.c +++ b/netspeed/src/netspeed.c @@ -32,6 +32,8 @@ #include <gio/gio.h> #include "backend.h" +#include "netspeed-preferences.h" + #include "netspeed.h" #define GET_COLOR_CHOOSER(x) (GTK_COLOR_CHOOSER (gtk_builder_get_object (builder, (x)))) @@ -131,8 +133,7 @@ struct _NetspeedApplet GtkWidget *netlink_box; GtkWidget *wireless_box; /* settings dialog */ - GtkWidget *settings; - GtkWidget *network_device_combo; + GtkWidget *preferences; guint index_old; guint64 in_old [OLD_VALUES]; @@ -144,7 +145,7 @@ struct _NetspeedApplet GtkWidget *connect_dialog; gboolean show_tooltip; GtkIconTheme *icon_theme; - GSettings *gsettings; + GSettings *settings; }; G_DEFINE_TYPE (NetspeedApplet, netspeed_applet, PANEL_TYPE_APPLET) @@ -152,9 +153,17 @@ G_DEFINE_TYPE (NetspeedApplet, netspeed_applet, PANEL_TYPE_APPLET) static void update_tooltip (NetspeedApplet *netspeed); -static void -device_change_cb (GtkComboBox *combo, - NetspeedApplet *netspeed); +GSettings * +netspeed_applet_get_settings (NetspeedApplet *netspeed) +{ + return netspeed->settings; +} + +const gchar * +netspeed_applet_get_current_device_name (NetspeedApplet *netspeed) +{ + return netspeed->devinfo->name; +} /* Adds a Pango markup "foreground" to a bytestring */ @@ -982,9 +991,9 @@ timeout_function (NetspeedApplet *netspeed) /* Display a section of netspeed help */ -static void -display_help (GtkWidget *dialog, - const gchar *section) +void +netspeed_applet_display_help (GtkWidget *dialog, + const gchar *section) { GError *error = NULL; gboolean ret; @@ -1024,7 +1033,7 @@ static void help_cb (GtkAction *action, NetspeedApplet *netspeed) { - display_help (GTK_WIDGET (netspeed), NULL); + netspeed_applet_display_help (GTK_WIDGET (netspeed), NULL); } /* Just the about window... If it's already open, just fokus it @@ -1059,117 +1068,15 @@ about_cb (GtkAction *action, NULL); } -/* this basically just retrieves the new devicestring - * and then calls applet_device_change () and change_icons () - */ static void -device_change_cb (GtkComboBox *combo, - NetspeedApplet *netspeed) +netspeed_applet_destory_preferences (GtkWidget *widget, + gpointer user_data) { - GList *devices; - int i, active; + NetspeedApplet *netspeed; + (void) widget; - g_assert (combo); - devices = g_object_get_data (G_OBJECT (combo), "devices"); - active = gtk_combo_box_get_active (combo); - g_assert (active > -1); - - if (0 == active) { - if (netspeed->auto_change_device) - return; - netspeed->auto_change_device = TRUE; - } else { - netspeed->auto_change_device = FALSE; - for (i = 1; i < active; i++) { - devices = g_list_next (devices); - } - if (g_str_equal (devices->data, netspeed->devinfo->name)) - return; - free_device_info (netspeed->devinfo); - get_device_info (devices->data, &netspeed->devinfo); - } - - netspeed->device_has_changed = TRUE; - update_applet (netspeed); -} - -/* Handle preference dialog response event - */ -static void -pref_response_cb (GtkDialog *dialog, - gint id, - NetspeedApplet *netspeed) -{ - if (id == GTK_RESPONSE_HELP) { - display_help (GTK_WIDGET (dialog), "netspeed_applet-settings"); - return; - } - g_settings_delay (netspeed->gsettings); - g_settings_set_string (netspeed->gsettings, "device", netspeed->devinfo->name); - g_settings_set_boolean (netspeed->gsettings, "auto-change-device", netspeed->auto_change_device); - g_settings_apply (netspeed->gsettings); - - gtk_widget_destroy (netspeed->settings); - netspeed->settings = NULL; -} - -/* Called when the showalladdresses checkbutton is toggled... - */ -static void -showalladdresses_change_cb (GtkToggleButton *button, - NetspeedApplet *netspeed) -{ - netspeed->show_all_addresses = gtk_toggle_button_get_active (button); -} - -/* Called when the showsum checkbutton is toggled... - */ -static void -showsum_change_cb (GtkToggleButton *button, - NetspeedApplet *netspeed) -{ - netspeed->show_sum = gtk_toggle_button_get_active (button); - applet_change_size_or_orient (MATE_PANEL_APPLET (netspeed), -1, netspeed); - change_icons (netspeed); -} - -/* Called when the showbits checkbutton is toggled... - */ -static void -showbits_change_cb (GtkToggleButton *button, - NetspeedApplet *netspeed) -{ - netspeed->show_bits = gtk_toggle_button_get_active (button); -} - -/* Called when the showicon checkbutton is toggled... - */ -static void -showicon_change_cb (GtkToggleButton *button, - NetspeedApplet *netspeed) -{ - netspeed->show_icon = gtk_toggle_button_get_active (button); - change_icons (netspeed); -} - -/* Called when the showqualityicon checkbutton is toggled... - */ -static void -showqualityicon_change_cb (GtkToggleButton *button, - NetspeedApplet *netspeed) -{ - netspeed->show_quality_icon = gtk_toggle_button_get_active (button); - change_quality_icon (netspeed); -} - -/* Called when the changeicon checkbutton is toggled... - */ -static void -changeicon_change_cb (GtkToggleButton *button, - NetspeedApplet *netspeed) -{ - netspeed->change_icon = gtk_toggle_button_get_active (button); - change_icons (netspeed); + netspeed = NETSPEED_APPLET (user_data); + netspeed->preferences = NULL; } /* Creates the settings dialog @@ -1180,86 +1087,18 @@ static void settings_cb (GtkAction *action, NetspeedApplet *netspeed) { - GtkBuilder *builder; - GList *ptr, *devices; - int i, active = -1; - g_assert (netspeed); - if (netspeed->settings) + if (netspeed->preferences) { - gtk_window_present (GTK_WINDOW (netspeed->settings)); + gtk_window_present (GTK_WINDOW (netspeed->preferences)); return; } - builder = gtk_builder_new_from_resource (NETSPEED_RESOURCE_PATH "netspeed-preferences.ui"); - - netspeed->settings = GET_WIDGET ("preferences_dialog"); - netspeed->network_device_combo = GET_WIDGET ("network_device_combo"); - - gtk_window_set_screen (GTK_WINDOW (netspeed->settings), - gtk_widget_get_screen (netspeed->settings)); - - gtk_dialog_set_default_response (GTK_DIALOG (netspeed->settings), GTK_RESPONSE_CLOSE); - - g_settings_bind (netspeed->gsettings, "show-all-addresses", - gtk_builder_get_object (builder, "show_all_addresses_checkbutton"), - "active", G_SETTINGS_BIND_DEFAULT); - - g_settings_bind (netspeed->gsettings, "show-sum", - gtk_builder_get_object (builder, "show_sum_checkbutton"), - "active", G_SETTINGS_BIND_DEFAULT); - - g_settings_bind (netspeed->gsettings, "show-bits", - gtk_builder_get_object (builder, "show_bits_checkbutton"), - "active", G_SETTINGS_BIND_DEFAULT); - - g_settings_bind (netspeed->gsettings, "show-icon", - gtk_builder_get_object (builder, "show_icon_checkbutton"), - "active", G_SETTINGS_BIND_DEFAULT); - - g_settings_bind (netspeed->gsettings, "show-quality-icon", - gtk_builder_get_object (builder, "show_quality_icon_checkbutton"), - "active", G_SETTINGS_BIND_DEFAULT); - - g_settings_bind (netspeed->gsettings, "change-icon", - gtk_builder_get_object (builder, "change_icon_checkbutton"), - "active", G_SETTINGS_BIND_DEFAULT); - - /* Default means device with default route set */ - gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (netspeed->network_device_combo), - _("Default")); - ptr = devices = get_available_devices (); - for (i = 0; ptr; ptr = g_list_next (ptr)) { - gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (netspeed->network_device_combo), - ptr->data); - if (g_str_equal (ptr->data, netspeed->devinfo->name)) - active = (i + 1); - ++i; - } - if (active < 0 || netspeed->auto_change_device) { - active = 0; - } - gtk_combo_box_set_active (GTK_COMBO_BOX (netspeed->network_device_combo), active); - g_object_set_data_full (G_OBJECT (netspeed->network_device_combo), "devices", - devices, (GDestroyNotify)free_devices_list); - - /* signals */ - gtk_builder_add_callback_symbols (builder, - "on_network_device_combo_changed", G_CALLBACK (device_change_cb), - "on_show_all_addresses_checkbutton_toggled", G_CALLBACK (showalladdresses_change_cb), - "on_show_sum_checkbutton_toggled", G_CALLBACK (showsum_change_cb), - "on_show_bits_checkbutton_toggled", G_CALLBACK (showbits_change_cb), - "on_change_icon_checkbutton_toggled", G_CALLBACK (changeicon_change_cb), - "on_show_icon_checkbutton_toggled", G_CALLBACK (showicon_change_cb), - "on_show_quality_icon_checkbutton_toggled", G_CALLBACK (showqualityicon_change_cb), - "on_preferences_dialog_response", G_CALLBACK (pref_response_cb), - NULL); - gtk_builder_connect_signals (builder, netspeed); - - g_object_unref (builder); - - gtk_widget_show_all (netspeed->settings); + netspeed->preferences = netspeed_preferences_new (netspeed); + g_signal_connect (netspeed->preferences, "destroy", + G_CALLBACK (netspeed_applet_destory_preferences), netspeed); + gtk_widget_show_all (netspeed->preferences); } static gboolean @@ -1283,7 +1122,7 @@ incolor_changed_cb (GtkColorChooser *button, netspeed->in_color = color; string = gdk_rgba_to_string (&color); - g_settings_set_string (netspeed->gsettings, "in-color", string); + g_settings_set_string (netspeed->settings, "in-color", string); g_free (string); } @@ -1298,7 +1137,7 @@ outcolor_changed_cb (GtkColorChooser *button, netspeed->out_color = color; string = gdk_rgba_to_string (&color); - g_settings_set_string (netspeed->gsettings, "out-color", string); + g_settings_set_string (netspeed->settings, "out-color", string); g_free (string); } @@ -1311,7 +1150,7 @@ info_response_cb (GtkDialog *dialog, { if (id == GTK_RESPONSE_HELP) { - display_help (GTK_WIDGET (dialog), "netspeed_applet-details"); + netspeed_applet_display_help (GTK_WIDGET (dialog), "netspeed_applet-details"); return; } @@ -1507,18 +1346,16 @@ netspeed_applet_finalize (GObject *object) netspeed->timeout_id = 0; } - g_clear_object (&netspeed->gsettings); + g_clear_object (&netspeed->settings); g_clear_pointer (&netspeed->details, gtk_widget_destroy); - g_clear_pointer (&netspeed->settings, gtk_widget_destroy); + g_clear_pointer (&netspeed->preferences, gtk_widget_destroy); g_free (netspeed->up_cmd); g_free (netspeed->down_cmd); /* Should never be NULL */ free_device_info (netspeed->devinfo); - - G_OBJECT_CLASS (netspeed_applet_parent_class)->finalize (object); } static void @@ -1658,6 +1495,81 @@ netspeed_applet_init (NetspeedApplet *netspeed) { } +static void +changeicon_settings_changed (GSettings *settings, + const gchar *key, + NetspeedApplet *netspeed) +{ + netspeed->change_icon = g_settings_get_boolean (settings, key); + change_icons (netspeed); +} + +static void +showalladdresses_settings_changed (GSettings *settings, + const gchar *key, + NetspeedApplet *netspeed) +{ + netspeed->show_all_addresses = g_settings_get_boolean (settings, key); +} + +static void +showsum_settings_changed (GSettings *settings, + const gchar *key, + NetspeedApplet *netspeed) +{ + netspeed->show_sum = g_settings_get_boolean (settings, key); + applet_change_size_or_orient (MATE_PANEL_APPLET (netspeed), -1, netspeed); + change_icons (netspeed); +} + +static void +showbits_settings_changed (GSettings *settings, + const gchar *key, + NetspeedApplet *netspeed) +{ + netspeed->show_bits = g_settings_get_boolean (settings, key); +} + +static void +showicon_settings_changed (GSettings *settings, + const gchar *key, + NetspeedApplet *netspeed) +{ + netspeed->show_icon = g_settings_get_boolean (settings, key); + change_icons (netspeed); +} + +static void +showqualityicon_settings_changed (GSettings *settings, + const gchar *key, + NetspeedApplet *netspeed) +{ + netspeed->show_quality_icon = g_settings_get_boolean (settings, key); + change_quality_icon (netspeed); +} + +static void +auto_change_device_settings_changed (GSettings *settings, + const gchar *key, + NetspeedApplet *netspeed) +{ + netspeed->auto_change_device = g_settings_get_boolean (settings, key); + netspeed->device_has_changed = TRUE; + update_applet (netspeed); +} + +static void +device_settings_changed (GSettings *settings, + const gchar *key, + NetspeedApplet *netspeed) +{ + char *davice; + + davice = g_settings_get_string (settings, key); + set_applet_devinfo (netspeed, davice); + g_free (davice); +} + /* The "main" function of the applet */ static gboolean @@ -1694,44 +1606,44 @@ netspeed_applet_factory (MatePanelApplet *applet, netspeed->out_graph[i] = -1; } - netspeed->gsettings = mate_panel_applet_settings_new (applet, "org.mate.panel.applet.netspeed"); + netspeed->settings = mate_panel_applet_settings_new (applet, "org.mate.panel.applet.netspeed"); /* Get stored settings from gsettings */ - netspeed->show_all_addresses = g_settings_get_boolean (netspeed->gsettings, "show-all-addresses"); - netspeed->show_sum = g_settings_get_boolean (netspeed->gsettings, "show-sum"); - netspeed->show_bits = g_settings_get_boolean (netspeed->gsettings, "show-bits"); - netspeed->show_icon = g_settings_get_boolean (netspeed->gsettings, "show-icon"); - netspeed->show_quality_icon = g_settings_get_boolean (netspeed->gsettings, "show-quality-icon"); - netspeed->change_icon = g_settings_get_boolean (netspeed->gsettings, "change-icon"); - netspeed->auto_change_device = g_settings_get_boolean (netspeed->gsettings, "auto-change-device"); + netspeed->show_all_addresses = g_settings_get_boolean (netspeed->settings, "show-all-addresses"); + netspeed->show_sum = g_settings_get_boolean (netspeed->settings, "show-sum"); + netspeed->show_bits = g_settings_get_boolean (netspeed->settings, "show-bits"); + netspeed->show_icon = g_settings_get_boolean (netspeed->settings, "show-icon"); + netspeed->show_quality_icon = g_settings_get_boolean (netspeed->settings, "show-quality-icon"); + netspeed->change_icon = g_settings_get_boolean (netspeed->settings, "change-icon"); + netspeed->auto_change_device = g_settings_get_boolean (netspeed->settings, "auto-change-device"); char *tmp = NULL; - tmp = g_settings_get_string (netspeed->gsettings, "device"); + tmp = g_settings_get_string (netspeed->settings, "device"); if (tmp && strcmp (tmp, "")) { get_device_info (tmp, &netspeed->devinfo); g_free (tmp); } - tmp = g_settings_get_string (netspeed->gsettings, "up-command"); + tmp = g_settings_get_string (netspeed->settings, "up-command"); if (tmp && strcmp (tmp, "")) { netspeed->up_cmd = g_strdup (tmp); g_free (tmp); } - tmp = g_settings_get_string (netspeed->gsettings, "down-command"); + tmp = g_settings_get_string (netspeed->settings, "down-command"); if (tmp && strcmp (tmp, "")) { netspeed->down_cmd = g_strdup (tmp); g_free (tmp); } - tmp = g_settings_get_string (netspeed->gsettings, "in-color"); + tmp = g_settings_get_string (netspeed->settings, "in-color"); if (tmp) { gdk_rgba_parse (&netspeed->in_color, tmp); g_free (tmp); } - tmp = g_settings_get_string (netspeed->gsettings, "out-color"); + tmp = g_settings_get_string (netspeed->settings, "out-color"); if (tmp) { gdk_rgba_parse (&netspeed->out_color, tmp); g_free (tmp); @@ -1810,6 +1722,38 @@ netspeed_applet_factory (MatePanelApplet *applet, G_CALLBACK (label_size_allocate_cb), netspeed); + g_signal_connect (netspeed->settings, "changed::auto-change-device", + G_CALLBACK (auto_change_device_settings_changed), + netspeed); + + g_signal_connect (netspeed->settings, "changed::device", + G_CALLBACK (device_settings_changed), + netspeed); + + g_signal_connect (netspeed->settings, "changed::show-all-addresses", + G_CALLBACK (showalladdresses_settings_changed), + netspeed); + + g_signal_connect (netspeed->settings, "changed::show-sum", + G_CALLBACK (showsum_settings_changed), + netspeed); + + g_signal_connect (netspeed->settings, "changed::show-bits", + G_CALLBACK (showbits_settings_changed), + netspeed); + + g_signal_connect (netspeed->settings, "changed::change-icon", + G_CALLBACK (changeicon_settings_changed), + netspeed); + + g_signal_connect (netspeed->settings, "changed::show-icon", + G_CALLBACK (showicon_settings_changed), + netspeed); + + g_signal_connect (netspeed->settings, "changed::show-quality-icon", + G_CALLBACK (showqualityicon_settings_changed), + netspeed); + action_group = gtk_action_group_new ("Netspeed Applet Actions"); gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions (action_group, diff --git a/netspeed/src/netspeed.h b/netspeed/src/netspeed.h index 66574c04..2e954e8e 100644 --- a/netspeed/src/netspeed.h +++ b/netspeed/src/netspeed.h @@ -21,8 +21,15 @@ #include <mate-panel-applet.h> +#include "backend.h" +#include "netspeed-preferences.h" + #define NETSPEED_TYPE_APPLET netspeed_applet_get_type () G_DECLARE_FINAL_TYPE (NetspeedApplet, netspeed_applet, NETSPEED, APPLET, MatePanelApplet) +GSettings * netspeed_applet_get_settings (NetspeedApplet *netspeed); +const gchar * netspeed_applet_get_current_device_name (NetspeedApplet *netspeed); +void netspeed_applet_display_help (GtkWidget *dialog, const gchar *section); + #endif |