diff options
Diffstat (limited to 'applets/clock/clock.c')
-rw-r--r-- | applets/clock/clock.c | 823 |
1 files changed, 160 insertions, 663 deletions
diff --git a/applets/clock/clock.c b/applets/clock/clock.c index d728354e..f86722b6 100644 --- a/applets/clock/clock.c +++ b/applets/clock/clock.c @@ -27,6 +27,7 @@ * George Lebl * Gediminas Paulauskas * Mark McLoughlin + * Stefano Karapetsas */ #include "config.h" @@ -42,24 +43,20 @@ #include <locale.h> #include <mate-panel-applet.h> -#include <mate-panel-applet-mateconf.h> +#include <mate-panel-applet-gsettings.h> #include <glib/gi18n.h> #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include <gdk/gdkx.h> -#include <mateconf/mateconf-client.h> +#include <gio/gio.h> #include <libmateweather/mateweather-prefs.h> #include <libmateweather/mateweather-xml.h> #include <libmateweather/location-entry.h> #include <libmateweather/timezone-menu.h> -#ifdef HAVE_LIBECAL -#include <libedataserverui/e-passwords.h> -#endif - #include "clock.h" #include "calendar-window.h" @@ -75,26 +72,16 @@ #define NEVER_SENSITIVE "never_sensitive" -#define N_MATECONF_PREFS 11 /* Keep this in sync with the number of keys below! */ #define KEY_FORMAT "format" -#define KEY_SHOW_SECONDS "show_seconds" -#define KEY_SHOW_DATE "show_date" -#define KEY_SHOW_WEATHER "show_weather" -#define KEY_SHOW_TEMPERATURE "show_temperature" -#define KEY_CUSTOM_FORMAT "custom_format" -#define KEY_SHOW_WEEK "show_week_numbers" +#define KEY_SHOW_SECONDS "show-seconds" +#define KEY_SHOW_DATE "show-date" +#define KEY_SHOW_WEATHER "show-weather" +#define KEY_SHOW_TEMPERATURE "show-temperature" +#define KEY_CUSTOM_FORMAT "custom-format" +#define KEY_SHOW_WEEK "show-week-numbers" #define KEY_CITIES "cities" -#define KEY_TEMPERATURE_UNIT "temperature_unit" -#define KEY_SPEED_UNIT "speed_unit" - -static MateConfEnumStringPair format_type_enum_map [] = { - { CLOCK_FORMAT_12, "12-hour" }, - { CLOCK_FORMAT_24, "24-hour" }, - { CLOCK_FORMAT_UNIX, "unix" }, - { CLOCK_FORMAT_INTERNET, "internet" }, - { CLOCK_FORMAT_CUSTOM, "custom" }, - { 0, NULL } -}; +#define KEY_TEMPERATURE_UNIT "temperature-unit" +#define KEY_SPEED_UNIT "speed-unit" enum { COL_CITY_NAME = 0, @@ -163,8 +150,6 @@ struct _ClockData { gboolean show_weather; gboolean show_temperature; - gboolean use_temperature_default; - gboolean use_speed_default; TempUnit temperature_unit; SpeedUnit speed_unit; @@ -194,7 +179,7 @@ struct _ClockData { gboolean can_handle_format_12; - guint listeners [N_MATECONF_PREFS]; + GSettings *settings; }; /* Used to count the number of clock instances. It's there to know when we @@ -489,7 +474,8 @@ get_updated_timeformat (ClockData *cd) static void update_timeformat (ClockData *cd) { - g_free (cd->timeformat); + if (cd->timeformat) + g_free (cd->timeformat); cd->timeformat = get_updated_timeformat (cd); } @@ -671,21 +657,12 @@ update_tooltip (ClockData * cd) g_free (utf8); g_free (tip); } else { -#ifdef HAVE_LIBECAL - if (cd->calendar_popup) - gtk_widget_set_tooltip_text (cd->panel_button, - _("Click to hide your appointments and tasks")); - else - gtk_widget_set_tooltip_text (cd->panel_button, - _("Click to view your appointments and tasks")); -#else if (cd->calendar_popup) gtk_widget_set_tooltip_text (cd->panel_button, _("Click to hide month calendar")); else gtk_widget_set_tooltip_text (cd->panel_button, _("Click to view month calendar")); -#endif } } @@ -726,28 +703,23 @@ refresh_click_timeout_time_only (ClockData *cd) static void free_locations (ClockData *cd) { - GList *l; + if (cd->locations != NULL) { + GList *l; - for (l = cd->locations; l; l = l->next) - g_object_unref (l->data); + for (l = cd->locations; l; l = l->next) + g_object_unref (l->data); - g_list_free (cd->locations); + g_list_free (cd->locations); + } cd->locations = NULL; } static void destroy_clock (GtkWidget * widget, ClockData *cd) { - MateConfClient *client; - int i; - - client = mateconf_client_get_default (); - - for (i = 0; i < N_MATECONF_PREFS; i++) - mateconf_client_notify_remove ( - client, cd->listeners [i]); - - g_object_unref (G_OBJECT (client)); + if (cd->settings) + g_object_unref (cd->settings); + cd->settings = NULL; if (cd->timeout) g_source_remove (cd->timeout); @@ -766,7 +738,8 @@ destroy_clock (GtkWidget * widget, ClockData *cd) free_locations (cd); - g_list_free (cd->location_tiles); + if (cd->location_tiles) + g_list_free (cd->location_tiles); cd->location_tiles = NULL; if (cd->systz) { @@ -785,13 +758,6 @@ destroy_clock (GtkWidget * widget, ClockData *cd) } g_free (cd); - -#ifdef HAVE_LIBECAL - if (clock_numbers > 0) { - e_passwords_shutdown (); - clock_numbers--; - } -#endif } static gboolean @@ -830,18 +796,16 @@ static GtkWidget * create_calendar (ClockData *cd) { GtkWidget *window; - char *prefs_dir; + char *prefs_path; - prefs_dir = mate_panel_applet_get_preferences_key (MATE_PANEL_APPLET (cd->applet)); + prefs_path = mate_panel_applet_get_preferences_path (MATE_PANEL_APPLET (cd->applet)); window = calendar_window_new (&cd->current_time, - prefs_dir, + prefs_path, cd->orient == MATE_PANEL_APPLET_ORIENT_UP); - g_free (prefs_dir); + g_free (prefs_path); calendar_window_set_show_weeks (CALENDAR_WINDOW (window), cd->showweek); - calendar_window_set_time_format (CALENDAR_WINDOW (window), - cd->format); gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (cd->applet)); @@ -1116,7 +1080,8 @@ create_cities_section (ClockData *cd) cd->cities_section = NULL; } - g_list_free (cd->location_tiles); + if (cd->location_tiles) + g_list_free (cd->location_tiles); cd->location_tiles = NULL; cd->cities_section = gtk_vbox_new (FALSE, 6); @@ -1209,7 +1174,8 @@ update_calendar_popup (ClockData *cd) cd->map_widget = NULL; cd->clock_vbox = NULL; - g_list_free (cd->location_tiles); + if (cd->location_tiles) + g_list_free (cd->location_tiles); cd->location_tiles = NULL; } update_tooltip (cd); @@ -1370,11 +1336,6 @@ weather_tooltip (GtkWidget *widget, static void create_clock_widget (ClockData *cd) { -#ifdef HAVE_LIBECAL - clock_numbers++; - e_passwords_init (); -#endif - /* Main toggle button */ cd->panel_button = create_main_clock_button (); g_signal_connect (cd->panel_button, "button_press_event", @@ -1882,20 +1843,12 @@ static const GtkActionEntry clock_menu_actions [] = { }; static void -format_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, +format_changed (GSettings *settings, + gchar *key, ClockData *clock) { - const char *value; int new_format; - - if (!entry->value || entry->value->type != MATECONF_VALUE_STRING) - return; - - value = mateconf_value_get_string (entry->value); - if (!mateconf_string_to_enum (format_type_enum_map, value, &new_format)) - return; + new_format = g_settings_get_enum (settings, key); if (!clock->can_handle_format_12 && new_format == CLOCK_FORMAT_12) new_format = CLOCK_FORMAT_24; @@ -1907,43 +1860,26 @@ format_changed (MateConfClient *client, refresh_clock_timeout (clock); if (clock->calendar_popup != NULL) { - calendar_window_set_time_format (CALENDAR_WINDOW (clock->calendar_popup), clock->format); position_calendar_popup (clock); } } static void -show_seconds_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, - ClockData *clock) +show_seconds_changed (GSettings *settings, + gchar *key, + ClockData *clock) { - gboolean value; - - if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL) - return; - - value = mateconf_value_get_bool (entry->value); - - clock->showseconds = (value != 0); + clock->showseconds = g_settings_get_boolean (settings, key); refresh_clock_timeout (clock); } static void -show_date_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, +show_date_changed (GSettings *settings, + gchar *key, ClockData *clock) { - gboolean value; - - if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL) - return; - - value = mateconf_value_get_bool (entry->value); - - clock->showdate = (value != 0); + clock->showdate = g_settings_get_boolean (settings, key); update_timeformat (clock); refresh_clock (clock); } @@ -1971,16 +1907,13 @@ update_panel_weather (ClockData *cd) } static void -update_weather_bool_value_and_toggle_from_mateconf (ClockData *cd, MateConfEntry *entry, +update_weather_bool_value_and_toggle_from_gsettings (ClockData *cd, gchar *key, gboolean *value_loc, const char *widget_name) { GtkWidget *widget; gboolean value; - if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL) - return; - - value = mateconf_value_get_bool (entry->value); + value = g_settings_get_boolean (cd->settings, key); *value_loc = (value != 0); @@ -1993,21 +1926,19 @@ update_weather_bool_value_and_toggle_from_mateconf (ClockData *cd, MateConfEntry } static void -show_weather_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, +show_weather_changed (GSettings *settings, + gchar *key, ClockData *cd) { - update_weather_bool_value_and_toggle_from_mateconf (cd, entry, &cd->show_weather, "weather_check"); + update_weather_bool_value_and_toggle_from_gsettings (cd, key, &cd->show_weather, "weather_check"); } static void -show_temperature_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, +show_temperature_changed (GSettings *settings, + gchar *key, ClockData *cd) { - update_weather_bool_value_and_toggle_from_mateconf (cd, entry, &cd->show_temperature, "temperature_check"); + update_weather_bool_value_and_toggle_from_gsettings (cd, key, &cd->show_temperature, "temperature_check"); } static void @@ -2110,7 +2041,7 @@ typedef struct { ClockData *cd; } LocationParserData; -/* Parser for our serialized locations in mateconf */ +/* Parser for our serialized locations in gsettings */ static void location_start_element (GMarkupParseContext *context, const gchar *element_name, @@ -2194,13 +2125,11 @@ static GMarkupParser location_parser = { }; static void -cities_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, +cities_changed (GSettings *settings, + gchar *key, ClockData *cd) { LocationParserData data; - GSList *cur = NULL; GMarkupParseContext *context; @@ -2208,17 +2137,13 @@ cities_changed (MateConfClient *client, data.cities = NULL; data.cd = cd; - if (!entry->value || entry->value->type != MATECONF_VALUE_LIST) - return; - context = g_markup_parse_context_new (&location_parser, 0, &data, NULL); - cur = mateconf_value_get_list (entry->value); + cur = mate_panel_applet_settings_get_gslist (settings, key); while (cur) { - const char *str = mateconf_value_get_string (cur->data); + const char *str = cur->data; g_markup_parse_context_parse (context, str, strlen (str), NULL); - cur = cur->next; } @@ -2229,22 +2154,6 @@ cities_changed (MateConfClient *client, } static void -update_temperature_combo (ClockData *cd) -{ - GtkWidget *widget; - int active_index; - - widget = _clock_get_widget (cd, "temperature_combo"); - - if (cd->use_temperature_default) - active_index = 0; - else - active_index = cd->temperature_unit - 1; - - gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active_index); -} - -static void update_weather_locations (ClockData *cd) { GList *locations, *l; @@ -2269,43 +2178,6 @@ update_weather_locations (ClockData *cd) } static void -clock_migrate_to_26 (ClockData *clock) -{ - gboolean unixtime; - gboolean internettime; - int hourformat; - - internettime = mate_panel_applet_mateconf_get_bool (MATE_PANEL_APPLET (clock->applet), - "internet_time", - NULL); - unixtime = mate_panel_applet_mateconf_get_bool (MATE_PANEL_APPLET (clock->applet), - "unix_time", - NULL); - hourformat = mate_panel_applet_mateconf_get_int (MATE_PANEL_APPLET (clock->applet), - "hour_format", - NULL); - - if (unixtime) - clock->format = CLOCK_FORMAT_UNIX; - else if (internettime) - clock->format = CLOCK_FORMAT_INTERNET; - else if (hourformat == 12) - clock->format = CLOCK_FORMAT_12; - else if (hourformat == 24) - clock->format = CLOCK_FORMAT_24; - - /* It's still possible that we have none of the old keys, in which case - * we're not migrating from 2.6, but the config is simply wrong. So - * don't set the format key in this case. */ - if (clock->format != CLOCK_FORMAT_INVALID) - mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (clock->applet), - KEY_FORMAT, - mateconf_enum_to_string (format_type_enum_map, - clock->format), - NULL); -} - -static void clock_timezone_changed (SystemTimezone *systz, const char *new_tz, ClockData *cd) @@ -2317,111 +2189,65 @@ clock_timezone_changed (SystemTimezone *systz, } static void -parse_and_set_temperature_string (const char *str, ClockData *cd) -{ - gint value = 0; - gboolean use_default = FALSE; - - value = mateweather_prefs_parse_temperature (str, &use_default); - - cd->use_temperature_default = use_default; - cd->temperature_unit = value; -} - -static void -parse_and_set_speed_string (const char *str, ClockData *cd) -{ - gint value = 0; - gboolean use_default = FALSE; - - value = mateweather_prefs_parse_speed (str, &use_default); - - cd->use_speed_default = use_default; - cd->speed_unit = value; -} - -static void -temperature_unit_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, +temperature_unit_changed (GSettings *settings, + gchar *key, ClockData *cd) { - const gchar *value; - - if (!entry->value || entry->value->type != MATECONF_VALUE_STRING) - return; - - value = mateconf_value_get_string (entry->value); - parse_and_set_temperature_string (value, cd); - update_temperature_combo (cd); + cd->temperature_unit = g_settings_get_enum (settings, key); + if (cd->temperature_unit > 0) + { + GtkWidget *widget; + gint oldvalue; + widget = _clock_get_widget (cd, "temperature_combo"); + oldvalue = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) + 1; + if (oldvalue != cd->speed_unit) + gtk_combo_box_set_active (GTK_COMBO_BOX (widget), cd->temperature_unit -1); + } update_weather_locations (cd); } static void -update_speed_combo (ClockData *cd) -{ - GtkWidget *widget; - int active_index; - - widget = _clock_get_widget (cd, "wind_speed_combo"); - - if (cd->use_speed_default) - active_index = 0; - else - active_index = cd->speed_unit - 1; - - gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active_index); -} - -static void -speed_unit_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, +speed_unit_changed (GSettings *settings, + gchar *key, ClockData *cd) { - const gchar *value; - - if (!entry->value || entry->value->type != MATECONF_VALUE_STRING) - return; - - value = mateconf_value_get_string (entry->value); - parse_and_set_speed_string (value, cd); - update_speed_combo (cd); + cd->speed_unit = g_settings_get_enum (settings, key); + if (cd->speed_unit > 0) + { + GtkWidget *widget; + gint oldvalue; + widget = _clock_get_widget (cd, "wind_speed_combo"); + oldvalue = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) + 1; + if (oldvalue != cd->speed_unit) + gtk_combo_box_set_active (GTK_COMBO_BOX (widget), cd->speed_unit -1); + } update_weather_locations (cd); } static void -custom_format_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, +custom_format_changed (GSettings *settings, + gchar *key, ClockData *clock) { - const char *value; - - if (!entry->value || entry->value->type != MATECONF_VALUE_STRING) - return; - - value = mateconf_value_get_string (entry->value); + gchar *value; + value = g_settings_get_string (settings, key); g_free (clock->custom_format); clock->custom_format = g_strdup (value); if (clock->format == CLOCK_FORMAT_CUSTOM) refresh_clock (clock); + g_free (value); } static void -show_week_changed (MateConfClient *client, - guint cnxn_id, - MateConfEntry *entry, +show_week_changed (GSettings *settings, + gchar *key, ClockData *clock) { gboolean value; - if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL) - return; - - value = mateconf_value_get_bool (entry->value); + value = g_settings_get_boolean (settings, key); if (clock->showweek == (value != 0)) return; @@ -2434,71 +2260,39 @@ show_week_changed (MateConfClient *client, } } -static guint -setup_mateconf_preference (ClockData *cd, MateConfClient *client, const char *key_name, MateConfClientNotifyFunc callback) -{ - char *key; - guint id; - - key = mate_panel_applet_mateconf_get_full_key (MATE_PANEL_APPLET (cd->applet), - key_name); - id = mateconf_client_notify_add (client, key, - callback, - cd, NULL, NULL); - g_free (key); - - return id; -} - static void -setup_mateconf (ClockData *cd) +setup_gsettings (ClockData *cd) { - struct { - const char *key_name; - MateConfClientNotifyFunc callback; - } prefs[] = { - { KEY_FORMAT, (MateConfClientNotifyFunc) format_changed }, - { KEY_SHOW_SECONDS, (MateConfClientNotifyFunc) show_seconds_changed }, - { KEY_SHOW_DATE, (MateConfClientNotifyFunc) show_date_changed }, - { KEY_SHOW_WEATHER, (MateConfClientNotifyFunc) show_weather_changed }, - { KEY_SHOW_TEMPERATURE, (MateConfClientNotifyFunc) show_temperature_changed }, - { KEY_CUSTOM_FORMAT, (MateConfClientNotifyFunc) custom_format_changed }, - { KEY_SHOW_WEEK, (MateConfClientNotifyFunc) show_week_changed }, - { KEY_CITIES, (MateConfClientNotifyFunc) cities_changed }, - { KEY_TEMPERATURE_UNIT, (MateConfClientNotifyFunc) temperature_unit_changed }, - { KEY_SPEED_UNIT, (MateConfClientNotifyFunc) speed_unit_changed }, - }; - - MateConfClient *client; - int i; - - client = mateconf_client_get_default (); - - for (i = 0; i < G_N_ELEMENTS (prefs); i++) - cd->listeners[i] = setup_mateconf_preference (cd, client, prefs[i].key_name, prefs[i].callback); - - g_object_unref (G_OBJECT (client)); + cd->settings = mate_panel_applet_settings_new (MATE_PANEL_APPLET (cd->applet), CLOCK_SCHEMA); + g_signal_connect (cd->settings, "changed::" KEY_FORMAT, G_CALLBACK (format_changed), cd); + g_signal_connect (cd->settings, "changed::" KEY_SHOW_SECONDS, G_CALLBACK (show_seconds_changed), cd); + g_signal_connect (cd->settings, "changed::" KEY_SHOW_DATE, G_CALLBACK (show_date_changed), cd); + g_signal_connect (cd->settings, "changed::" KEY_SHOW_WEATHER, G_CALLBACK (show_weather_changed), cd); + g_signal_connect (cd->settings, "changed::" KEY_SHOW_TEMPERATURE, G_CALLBACK (show_temperature_changed), cd); + g_signal_connect (cd->settings, "changed::" KEY_CUSTOM_FORMAT, G_CALLBACK (custom_format_changed), cd); + g_signal_connect (cd->settings, "changed::" KEY_SHOW_WEEK, G_CALLBACK (show_week_changed), cd); + g_signal_connect (cd->settings, "changed::" KEY_CITIES, G_CALLBACK (cities_changed), cd); + g_signal_connect (cd->settings, "changed::" KEY_TEMPERATURE_UNIT, G_CALLBACK (temperature_unit_changed), cd); + g_signal_connect (cd->settings, "changed::" KEY_SPEED_UNIT, G_CALLBACK (speed_unit_changed), cd); } static GList * -parse_mateconf_cities (ClockData *cd, GSList *values) +parse_gsettings_cities (ClockData *cd, gchar **values) { - GSList *cur = values; + gint i; LocationParserData data; GMarkupParseContext *context; data.cities = NULL; data.cd = cd; - context = - g_markup_parse_context_new (&location_parser, 0, &data, NULL); - - while (cur) { - const char *str = (char *)cur->data; - g_markup_parse_context_parse (context, str, strlen(str), NULL); + context = g_markup_parse_context_new (&location_parser, 0, &data, NULL); - cur = cur->next; - } + if (values) { + for (i = 0; values[i]; i++) { + g_markup_parse_context_parse (context, values[i], strlen(values[i]), NULL); + } + } g_markup_parse_context_free (context); @@ -2506,70 +2300,37 @@ parse_mateconf_cities (ClockData *cd, GSList *values) } static void -load_mateconf_settings (ClockData *cd) +load_gsettings (ClockData *cd) { - MatePanelApplet *applet; - int format; - char *format_str; - char *value; - GError *error; - GSList *values = NULL; + gchar **values; GList *cities = NULL; - applet = MATE_PANEL_APPLET (cd->applet); - - cd->format = CLOCK_FORMAT_INVALID; - - format_str = mate_panel_applet_mateconf_get_string (applet, KEY_FORMAT, NULL); - if (format_str && - mateconf_string_to_enum (format_type_enum_map, format_str, &format)) - cd->format = format; - else - clock_migrate_to_26 (cd); - - g_free (format_str); + cd->format = g_settings_get_enum (cd->settings, KEY_FORMAT); if (cd->format == CLOCK_FORMAT_INVALID) cd->format = clock_locale_format (); - cd->custom_format = mate_panel_applet_mateconf_get_string (applet, KEY_CUSTOM_FORMAT, NULL); - cd->showseconds = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_SECONDS, NULL); - - error = NULL; - cd->showdate = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_DATE, &error); - if (error) { - g_error_free (error); - /* if on a small screen don't show date by default */ - if (gdk_screen_width () <= 800) - cd->showdate = FALSE; - else - cd->showdate = TRUE; - } - - cd->show_weather = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_WEATHER, NULL); - cd->show_temperature = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_TEMPERATURE, NULL); - cd->showweek = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_WEEK, NULL); + cd->custom_format = g_settings_get_string (cd->settings, KEY_CUSTOM_FORMAT); + cd->showseconds = g_settings_get_boolean (cd->settings, KEY_SHOW_SECONDS); + cd->showdate = g_settings_get_boolean (cd->settings, KEY_SHOW_DATE); + cd->show_weather = g_settings_get_boolean (cd->settings, KEY_SHOW_WEATHER); + cd->show_temperature = g_settings_get_boolean (cd->settings, KEY_SHOW_TEMPERATURE); + cd->showweek = g_settings_get_boolean (cd->settings, KEY_SHOW_WEEK); cd->timeformat = NULL; cd->can_handle_format_12 = (clock_locale_format () == CLOCK_FORMAT_12); if (!cd->can_handle_format_12 && cd->format == CLOCK_FORMAT_12) cd->format = CLOCK_FORMAT_24; - value = mate_panel_applet_mateconf_get_string (applet, KEY_TEMPERATURE_UNIT, NULL); - parse_and_set_temperature_string (value, cd); - g_free (value); - - value = mate_panel_applet_mateconf_get_string (applet, KEY_SPEED_UNIT, NULL); - parse_and_set_speed_string (value, cd); - g_free (value); + cd->temperature_unit = g_settings_get_enum (cd->settings, KEY_TEMPERATURE_UNIT); + cd->speed_unit = g_settings_get_enum (cd->settings, KEY_SPEED_UNIT); - values = mate_panel_applet_mateconf_get_list (MATE_PANEL_APPLET (cd->applet), KEY_CITIES, - MATECONF_VALUE_STRING, NULL); + values = g_settings_get_strv (cd->settings, KEY_CITIES); - if (g_slist_length (values) == 0) { + if (!values || (g_strv_length (values) == 0)) { cities = NULL; } else { - cities = parse_mateconf_cities (cd, values); + cities = parse_gsettings_cities (cd, values); } set_locations (cd, cities); @@ -2585,7 +2346,6 @@ fill_clock_applet (MatePanelApplet *applet) char *filename; GError *error; - mate_panel_applet_add_preferences (applet, CLOCK_SCHEMA_DIR, NULL); mate_panel_applet_set_flags (applet, MATE_PANEL_APPLET_EXPAND_MINOR); cd = g_new0 (ClockData, 1); @@ -2594,8 +2354,8 @@ fill_clock_applet (MatePanelApplet *applet) cd->applet = GTK_WIDGET (applet); - setup_mateconf (cd); - load_mateconf_settings (cd); + setup_gsettings (cd); + load_gsettings (cd); cd->builder = gtk_builder_new (); gtk_builder_set_translation_domain (cd->builder, GETTEXT_PACKAGE); @@ -2665,181 +2425,6 @@ fill_clock_applet (MatePanelApplet *applet) return TRUE; } -/* FIXME old clock applet */ -#if 0 -static void -setup_writability_sensitivity (ClockData *clock, GtkWidget *w, GtkWidget *label, const char *key) -{ - /* FMQ: was used from old preferences dialog; fix this up */ - char *fullkey; - MateConfClient *client; - - client = mateconf_client_get_default (); - - fullkey = mate_panel_applet_mateconf_get_full_key - (MATE_PANEL_APPLET (clock->applet), key); - - if ( ! mateconf_client_key_is_writable (client, fullkey, NULL)) { - g_object_set_data (G_OBJECT (w), NEVER_SENSITIVE, - GINT_TO_POINTER (1)); - gtk_widget_set_sensitive (w, FALSE); - if (label != NULL) { - g_object_set_data (G_OBJECT (label), NEVER_SENSITIVE, - GINT_TO_POINTER (1)); - gtk_widget_set_sensitive (label, FALSE); - } - } - - g_free (fullkey); - - g_object_unref (G_OBJECT (client)); -} - -static void -update_properties_for_format (ClockData *cd, - GtkComboBox *combo, - ClockFormat format) -{ - - /* show the custom format things the first time we actually - * have a custom format set in MateConf, but after that don't - * unshow it if the format changes - */ - if (!cd->custom_format_shown && - (cd->format == CLOCK_FORMAT_CUSTOM || - (cd->custom_format && cd->custom_format [0]))) { - gtk_widget_show (cd->custom_hbox); - gtk_widget_show (cd->custom_label); - gtk_widget_show (cd->custom_entry); - - gtk_combo_box_append_text (combo, _("Custom format")); - - cd->custom_format_shown = TRUE; - } - - /* Some combinations of options do not make sense */ - switch (format) { - case CLOCK_FORMAT_12: - case CLOCK_FORMAT_24: - gtk_widget_set_sensitive (cd->showseconds_check, TRUE); - gtk_widget_set_sensitive (cd->showdate_check, TRUE); - gtk_widget_set_sensitive (cd->custom_entry, FALSE); - gtk_widget_set_sensitive (cd->custom_label, FALSE); - break; - case CLOCK_FORMAT_UNIX: - gtk_widget_set_sensitive (cd->showseconds_check, FALSE); - gtk_widget_set_sensitive (cd->showdate_check, FALSE); - gtk_widget_set_sensitive (cd->custom_entry, FALSE); - gtk_widget_set_sensitive (cd->custom_label, FALSE); - break; - case CLOCK_FORMAT_INTERNET: - gtk_widget_set_sensitive (cd->showseconds_check, TRUE); - gtk_widget_set_sensitive (cd->showdate_check, FALSE); - gtk_widget_set_sensitive (cd->custom_entry, FALSE); - gtk_widget_set_sensitive (cd->custom_label, FALSE); - break; - case CLOCK_FORMAT_CUSTOM: - gtk_widget_set_sensitive (cd->showseconds_check, FALSE); - gtk_widget_set_sensitive (cd->showdate_check, FALSE); - gtk_widget_set_sensitive (cd->custom_entry, TRUE); - gtk_widget_set_sensitive (cd->custom_label, TRUE); - break; - default: - g_assert_not_reached (); - break; - } -} - -static void -set_format_cb (GtkComboBox *combo, - ClockData *cd) -{ - /* FMQ: was used from old preferences dialog; fix this up */ - ClockFormat format; - - /* valid values begin from 1 */ - if (cd->can_handle_format_12) - format = gtk_combo_box_get_active (combo) + 1; - else - format = gtk_combo_box_get_active (combo) + 2; - - update_properties_for_format (cd, combo, format); - - if (cd->format != format) - mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), - KEY_FORMAT, - mateconf_enum_to_string (format_type_enum_map, format), - NULL); -} -#endif - -static void -set_show_seconds_cb (GtkWidget *w, - ClockData *clock) -{ - mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), - KEY_SHOW_SECONDS, - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)), - NULL); -} - -static void -set_show_date_cb (GtkWidget *w, - ClockData *clock) -{ - mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), - KEY_SHOW_DATE, - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)), - NULL); -} - -static void -set_show_weather_cb (GtkWidget *w, - ClockData *clock) -{ - mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), - KEY_SHOW_WEATHER, - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)), - NULL); -} - -static void -set_show_temperature_cb (GtkWidget *w, - ClockData *clock) -{ - mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), - KEY_SHOW_TEMPERATURE, - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)), - NULL); -} - -#if 0 -static void -set_show_zones_cb (GtkWidget *w, - ClockData *clock) -{ - mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), - KEY_SHOW_ZONES, - GTK_TOGGLE_BUTTON (w)->active, - NULL); -} -#endif - -/* FIXME old clock applet */ -#if 0 -static void -set_custom_format_cb (GtkEntry *entry, - ClockData *cd) -{ - /* FMQ: was used from old preferences dialog; fix this up */ - const char *custom_format; - - custom_format = gtk_entry_get_text (entry); - mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), - KEY_CUSTOM_FORMAT, custom_format, NULL); -} -#endif - static void prefs_locations_changed (GtkTreeSelection *selection, ClockData *cd) { @@ -2882,28 +2467,26 @@ save_cities_store (ClockData *cd) { ClockLocation *loc; GList *node = cd->locations; - - GSList *root = NULL; - GSList *list = NULL; + gint len = g_list_length(cd->locations); + gchar **array[len + 1]; + gchar **array_reverse[len + 1]; + gint i = 0; while (node) { loc = CLOCK_LOCATION (node->data); - list = g_slist_prepend (list, loc_to_string (loc)); + array[i] = loc_to_string (loc); + i++; node = node->next; } + array[i] = NULL; - list = g_slist_reverse (list); - mate_panel_applet_mateconf_set_list (MATE_PANEL_APPLET (cd->applet), - KEY_CITIES, MATECONF_VALUE_STRING, list, NULL); - - root = list; - - while (list) { - g_free (list->data); - list = g_slist_next (list); + for (i = 0; i <= (len - 1); i++) { + array_reverse [len - i - 1] = g_strdup (array [i]); } + array_reverse[i] = NULL; - g_slist_free (root); + g_settings_set_strv (cd->settings, KEY_CITIES, (const gchar **) array_reverse); + /* FIXME free arrays */ } static void @@ -2980,7 +2563,7 @@ run_prefs_edit_save (GtkButton *button, ClockData *cd) g_free (city); /* This will update everything related to locations to take into - * account the new location (via the mateconf notification) */ + * account the new location (via the gsettings changed signal) */ save_cities_store (cd); edit_hide (edit_window, cd); @@ -3179,7 +2762,7 @@ remove_tree_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpoi g_object_unref (loc); /* This will update everything related to locations to take into - * account the removed location (via the mateconf notification) */ + * account the removed location (via the gsettings changed signal) */ save_cities_store (cd); } @@ -3293,7 +2876,6 @@ run_prefs_locations_edit (GtkButton *unused, ClockData *cd) static void set_12hr_format_radio_cb (GtkWidget *widget, ClockData *cd) { - const gchar *val; ClockFormat format; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) @@ -3301,10 +2883,7 @@ set_12hr_format_radio_cb (GtkWidget *widget, ClockData *cd) else format = CLOCK_FORMAT_24; - val = mateconf_enum_to_string (format_type_enum_map, format); - - mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), - KEY_FORMAT, val, NULL); + g_settings_set_enum (cd->settings, KEY_FORMAT, format); } static void @@ -3315,19 +2894,12 @@ temperature_combo_changed (GtkComboBox *combo, ClockData *cd) const gchar *str; value = gtk_combo_box_get_active (combo) + 1; - - if (cd->use_temperature_default) - old_value = TEMP_UNIT_DEFAULT; - else - old_value = cd->temperature_unit; + old_value = cd->temperature_unit; if (value == old_value) return; - str = mateweather_prefs_temp_enum_to_string (value); - - mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), - KEY_TEMPERATURE_UNIT, str, NULL); + g_settings_set_enum (cd->settings, KEY_TEMPERATURE_UNIT, value); } static void @@ -3338,21 +2910,15 @@ speed_combo_changed (GtkComboBox *combo, ClockData *cd) const gchar *str; value = gtk_combo_box_get_active (combo) + 1; - - if (cd->use_speed_default) - old_value = SPEED_UNIT_DEFAULT; - else - old_value = cd->speed_unit; + old_value = cd->speed_unit; if (value == old_value) return; - str = mateweather_prefs_speed_enum_to_string (value); - - mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), - KEY_SPEED_UNIT, str, NULL); + g_settings_set_enum (cd->settings, KEY_SPEED_UNIT, value); } + static void fill_prefs_window (ClockData *cd) { @@ -3398,27 +2964,23 @@ fill_prefs_window (ClockData *cd) /* Set the "Show Date" checkbox */ widget = _clock_get_widget (cd, "date_check"); - g_signal_connect (widget, "toggled", - G_CALLBACK (set_show_date_cb), cd); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->showdate); + g_settings_bind (cd->settings, KEY_SHOW_DATE, widget, "active", + G_SETTINGS_BIND_DEFAULT); /* Set the "Show Seconds" checkbox */ widget = _clock_get_widget (cd, "seconds_check"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->showseconds); - g_signal_connect (widget, "toggled", - G_CALLBACK (set_show_seconds_cb), cd); + g_settings_bind (cd->settings, KEY_SHOW_SECONDS, widget, "active", + G_SETTINGS_BIND_DEFAULT); /* Set the "Show weather" checkbox */ widget = _clock_get_widget (cd, "weather_check"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_weather); - g_signal_connect (widget, "toggled", - G_CALLBACK (set_show_weather_cb), cd); + g_settings_bind (cd->settings, KEY_SHOW_WEATHER, widget, "active", + G_SETTINGS_BIND_DEFAULT); /* Set the "Show temperature" checkbox */ widget = _clock_get_widget (cd, "temperature_check"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_temperature); - g_signal_connect (widget, "toggled", - G_CALLBACK (set_show_temperature_cb), cd); + g_settings_bind (cd->settings, KEY_SHOW_TEMPERATURE, widget, "active", + G_SETTINGS_BIND_DEFAULT); /* Fill the Cities list */ widget = _clock_get_widget (cd, "cities_list"); @@ -3448,10 +3010,12 @@ fill_prefs_window (ClockData *cd) for (i = 0; temperatures[i] != -1; i++) gtk_combo_box_append_text (GTK_COMBO_BOX (widget), mateweather_prefs_get_temp_display_name (temperatures[i])); - - update_temperature_combo (cd); + + if (cd->temperature_unit > 0) + gtk_combo_box_set_active (GTK_COMBO_BOX (widget), + cd->temperature_unit - 1); g_signal_connect (widget, "changed", - G_CALLBACK (temperature_combo_changed), cd); + G_CALLBACK (temperature_combo_changed), cd); /* Wind speed combo */ widget = _clock_get_widget (cd, "wind_speed_combo"); @@ -3465,7 +3029,9 @@ fill_prefs_window (ClockData *cd) gtk_combo_box_append_text (GTK_COMBO_BOX (widget), mateweather_prefs_get_speed_display_name (speeds[i])); - update_speed_combo (cd); + if (cd->speed_unit > 0) + gtk_combo_box_set_active (GTK_COMBO_BOX (widget), + cd->speed_unit - 1); g_signal_connect (widget, "changed", G_CALLBACK (speed_combo_changed), cd); } @@ -3603,75 +3169,6 @@ display_properties_dialog (ClockData *cd, gboolean start_in_locations_page) gtk_window_present (GTK_WINDOW (cd->prefs_window)); refresh_click_timeout_time_only (cd); - - /* FMQ: cd->props was the old preferences window; remove references to it */ - /* FMQ: connect to the Help button by hand; look at properties_response_cb() for the help code */ -#if 0 - /* FMQ: check the code below; replace the proper parts */ - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *combo; - GtkWidget *label; - - gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("24 hour")); - gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("UNIX time")); - gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("Internet time")); - - gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); - gtk_widget_show (combo); - - cd->custom_hbox = gtk_hbox_new (FALSE, 12); - gtk_box_pack_start (GTK_BOX (vbox), cd->custom_hbox, TRUE, TRUE, 0); - - cd->custom_label = gtk_label_new_with_mnemonic (_("Custom _format:")); - gtk_label_set_use_markup (GTK_LABEL (cd->custom_label), TRUE); - gtk_label_set_justify (GTK_LABEL (cd->custom_label), - GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment (GTK_MISC (cd->custom_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (cd->custom_hbox), - cd->custom_label, - FALSE, FALSE, 0); - - cd->custom_entry = gtk_entry_new (); - gtk_box_pack_start (GTK_BOX (cd->custom_hbox), - cd->custom_entry, - FALSE, FALSE, 0); - gtk_entry_set_text (GTK_ENTRY (cd->custom_entry), - cd->custom_format); - g_signal_connect (cd->custom_entry, "changed", - G_CALLBACK (set_custom_format_cb), - cd); - - g_signal_connect (cd->props, "destroy", - G_CALLBACK (gtk_widget_destroyed), - &cd->props); - g_signal_connect (cd->props, "response", - G_CALLBACK (properties_response_cb), - cd); - - cd->custom_format_shown = FALSE; - update_properties_for_format (cd, GTK_COMBO_BOX (combo), cd->format); - - /* valid values begin from 1 */ - if (cd->can_handle_format_12) - gtk_combo_box_set_active (GTK_COMBO_BOX (combo), - cd->format - 1); - else - gtk_combo_box_set_active (GTK_COMBO_BOX (combo), - cd->format - 2); - - g_signal_connect (combo, "changed", - G_CALLBACK (set_format_cb), cd); - - /* Now set up the sensitivity based on mateconf key writability */ - setup_writability_sensitivity (cd, combo, label, KEY_FORMAT); - setup_writability_sensitivity (cd, cd->custom_entry, cd->custom_label, - KEY_CUSTOM_FORMAT); - setup_writability_sensitivity (cd, cd->showseconds_check, NULL, KEY_SHOW_SECONDS); - setup_writability_sensitivity (cd, cd->showdate_check, NULL, KEY_SHOW_DATE); - - gtk_widget_show (cd->props); -#endif } static void |