[gnome-panel/wip/applets/clock] clock: move preferences to ClockPreferences
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-panel/wip/applets/clock] clock: move preferences to ClockPreferences
- Date: Tue, 18 Nov 2014 01:23:51 +0000 (UTC)
commit c32cee12266378f5eb282387e33b228348ad0a55
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Tue Nov 18 01:50:57 2014 +0200
clock: move preferences to ClockPreferences
applets/clock/Makefile.am | 38 +--
applets/clock/calendar-window.c | 1 -
applets/clock/clock-common.h | 8 +
applets/clock/clock-location-edit.c | 118 +----
applets/clock/clock-location-edit.ui | 1 +
applets/clock/clock-location.c | 25 +-
applets/clock/clock-preferences.c | 774 ++++++++++++++++++++++++++--
applets/clock/clock-preferences.h | 11 +-
applets/clock/clock-preferences.ui | 189 ++++----
applets/clock/clock-utils.c | 68 ---
applets/clock/clock-utils.h | 4 -
applets/clock/clock.c | 521 ++-----------------
applets/clock/clock.gresource.xml | 1 -
applets/clock/clock.ui | 932 ----------------------------------
applets/clock/gdesktop-enum-types.c | 40 ++
applets/clock/gdesktop-enum-types.h | 33 ++
16 files changed, 980 insertions(+), 1784 deletions(-)
---
diff --git a/applets/clock/Makefile.am b/applets/clock/Makefile.am
index 26ae8b9..a278ead 100644
--- a/applets/clock/Makefile.am
+++ b/applets/clock/Makefile.am
@@ -46,6 +46,8 @@ CLOCK_SOURCES = \
clock-time.h \
clock-utils.c \
clock-utils.h \
+ gdesktop-enum-types.c \
+ gdesktop-enum-types.h \
set-timezone.c \
set-timezone.h \
$(BUILT_SOURCES) \
@@ -94,46 +96,13 @@ clock-marshallers.c: clock-marshallers.list
clock-marshallers.h: clock-marshallers.list
$(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --internal $< > $@
-clock_enum_headers = \
- $(top_srcdir)/applets/clock/clock-utils.h
-
-clock-typebuiltins.c: $(clock_enum_headers)
- $(AM_V_GEN)glib-mkenums \
- --fhead "#include <glib-object.h>\n" \
- --fhead "#include \"clock-typebuiltins.h\"\n\n" \
- --fprod "\n/* enumerations from \"@filename \" */" \
- --fprod "\n#include \"@filename \"\n" \
- --vhead "static const GEnumValue _ enum_name@_values[] = {" \
- --vprod " { @VALUENAME@, \"@VALUENAME \", \"@valuenick \" }," \
- --vtail " { 0, NULL, NULL }\n};\n\n" \
- --vtail "GType\n enum_name@_get_type (void)\n{\n" \
- --vtail " static GType type = 0;\n\n" \
- --vtail " if (!type)\n" \
- --vtail " type = g_enum_register_static (\"@EnumName \", _
enum_name@_values);\n\n" \
- --vtail " return type;\n}\n\n" \
- $(clock_enum_headers) > $@
-
-clock-typebuiltins.h: $(clock_enum_headers)
- $(AM_V_GEN)glib-mkenums \
- --fhead "#ifndef __CLOCK_TYPEBUILTINS_H__\n" \
- --fhead "#define __CLOCK_TYPEBUILTINS_H__ 1\n\n" \
- --fhead "G_BEGIN_DECLS\n\n" \
- --ftail "G_END_DECLS\n\n" \
- --ftail "#endif /* __CLOCK_TYPEBUILTINS_H__ */\n" \
- --fprod "\n/* --- @filename@ --- */" \
- --eprod "#define CLOCK_TYPE_ ENUMSHORT@ @enum_name _get_type()\n" \
- --eprod "GType @enum_name _get_type (void);\n" \
- $(clock_enum_headers) > $@
-
BUILT_SOURCES = \
timedate1.c \
timedate1.h \
clock-marshallers.c \
clock-marshallers.h \
clock-resources.c \
- clock-resources.h \
- clock-typebuiltins.c \
- clock-typebuiltins.h
+ clock-resources.h
appletdir = $(appletsdir)
applet_in_files = org.gnome.panel.ClockApplet.panel-applet.in
@@ -148,7 +117,6 @@ $(applet_in_files): $(applet_in_files).in Makefile
@PANEL_INTLTOOL_PANEL_APPLET_RULE@
ui_FILES = \
- clock.ui \
clock-location-edit.ui \
clock-preferences.ui \
clock-menu.xml
diff --git a/applets/clock/calendar-window.c b/applets/clock/calendar-window.c
index 7ea82c4..28dffbb 100644
--- a/applets/clock/calendar-window.c
+++ b/applets/clock/calendar-window.c
@@ -44,7 +44,6 @@
#include "clock-common.h"
#include "clock-utils.h"
-#include "clock-typebuiltins.h"
#ifdef HAVE_EDS
#include "calendar-client.h"
#endif
diff --git a/applets/clock/clock-common.h b/applets/clock/clock-common.h
index ac9cae0..1a4a1f0 100644
--- a/applets/clock/clock-common.h
+++ b/applets/clock/clock-common.h
@@ -50,6 +50,14 @@ G_BEGIN_DECLS
#define KEY_TEMPERATURE_UNIT "temperature-unit"
#define KEY_SPEED_UNIT "speed-unit"
+enum
+{
+ COLUMN_NAME,
+ COLUMN_TIMEZONE,
+ COLUMN_LOCATION,
+ COLUMN_LAST
+};
+
G_END_DECLS
#endif
diff --git a/applets/clock/clock-location-edit.c b/applets/clock/clock-location-edit.c
index a1e8cdd..5d6b89b 100644
--- a/applets/clock/clock-location-edit.c
+++ b/applets/clock/clock-location-edit.c
@@ -34,6 +34,7 @@
#include "clock-common.h"
#include "clock-location-edit.h"
+#include "clock-preferences.h"
struct _ClockLocationEditPrivate
{
@@ -41,7 +42,6 @@ struct _ClockLocationEditPrivate
ClockLocation *clock_location;
GtkWidget *ok_button;
- GtkWidget *cancel_button;
GtkWidget *location_label;
GtkWidget *location_box;
@@ -69,87 +69,6 @@ enum
static GParamSpec *object_properties[N_PROPERTIES] = { NULL, };
-static gint
-sort_locations_by_name (gconstpointer a,
- gconstpointer b)
-{
- ClockLocation *location1;
- ClockLocation *location2;
- const gchar *name1;
- const gchar *name2;
-
- location1 = CLOCK_LOCATION (a);
- location2 = CLOCK_LOCATION (a);
-
- name1 = clock_location_get_name (location1);
- name2 = clock_location_get_name (location2);
-
- return g_strcmp0 (name1, name2);
-}
-
-static void
-update_cities (ClockLocationEdit *edit,
- ClockLocation *clock_location)
-{
- ClockLocationEditPrivate *priv;
- GVariantIter *iter;
- GList *locations;
- const gchar *name;
- const gchar *code;
- gboolean latlon_override;
- gdouble latitude;
- gdouble longitude;
- GList *l;
- GVariantBuilder builder;
-
- priv = edit->priv;
-
- g_settings_get (priv->settings, KEY_CITIES, "a(ssm(dd))", &iter);
- locations = NULL;
-
- while (g_variant_iter_loop (iter, "(&s&sm(dd))",
- &name, &code,
- &latlon_override,
- &latitude, &longitude)) {
- ClockLocation *location;
-
- location = clock_location_new (name, code,
- latlon_override,
- latitude, longitude);
-
- if (priv->clock_location) {
- if (clock_location_equal (priv->clock_location, location)) {
- g_clear_object (&priv->clock_location);
- continue;
- }
- }
-
- locations = g_list_append (locations, location);
- }
-
- locations = g_list_append (locations, clock_location);
- locations = g_list_sort (locations, sort_locations_by_name);
-
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ssm(dd))"));
-
- for (l = locations; l; l = l->next) {
- ClockLocation *tmp;
-
- tmp = CLOCK_LOCATION (l->data);
- g_variant_builder_add_value (&builder,
- clock_location_serialize (tmp));
- g_object_unref (tmp);
- }
-
- g_settings_set_value (priv->settings, KEY_CITIES,
- g_variant_builder_end (&builder));
-
- g_object_unref (clock_location);
- g_list_free (locations);
-
- gtk_widget_destroy (GTK_WIDGET (edit));
-}
-
static void
ok_button_clicked (GtkButton *button,
gpointer user_data)
@@ -213,7 +132,11 @@ ok_button_clicked (GtkButton *button,
longitude);
g_free (name);
- update_cities (edit, clock_location);
+ clock_preferences_update_locations (edit->priv->settings,
+ edit->priv->clock_location,
+ clock_location);
+
+ gtk_widget_destroy (GTK_WIDGET (edit));
}
static void
@@ -326,9 +249,6 @@ clock_location_edit_connect_signals (ClockLocationEdit *edit)
priv = edit->priv;
- g_signal_connect_swapped (priv->cancel_button, "clicked",
- G_CALLBACK (gtk_widget_destroy), GTK_WIDGET (edit));
-
g_signal_connect (priv->ok_button, "clicked",
G_CALLBACK (ok_button_clicked), edit);
@@ -430,14 +350,19 @@ clock_location_edit_constructor (GType type,
{
GObject *object;
ClockLocationEdit *edit;
+ GtkWidget *entry;
object = G_OBJECT_CLASS (clock_location_edit_parent_class)->constructor (type,
n_properties,
properties);
edit = CLOCK_LOCATION_EDIT (object);
+ entry = GTK_WIDGET (edit->priv->location_entry);
clock_location_edit_connect_signals (edit);
+ gtk_widget_grab_focus (entry);
+ gtk_editable_set_position (GTK_EDITABLE (entry), -1);
+
return object;
}
@@ -553,9 +478,6 @@ clock_location_edit_class_init (ClockLocationEditClass *class)
gtk_widget_class_bind_template_child_private (widget_class,
ClockLocationEdit,
ok_button);
- gtk_widget_class_bind_template_child_private (widget_class,
- ClockLocationEdit,
- cancel_button);
gtk_widget_class_bind_template_child_private (widget_class,
ClockLocationEdit,
@@ -598,15 +520,17 @@ clock_location_edit_new (GSettings *settings,
GtkWindow *parent,
ClockLocation *clock_location)
{
- GObject *object;
+ GObject *object;
+ GtkWindow *window;
- object = g_object_new (CLOCK_TYPE_LOCATION_EDIT,
- "settings", settings,
- "clock-location", clock_location,
- NULL);
+ object = g_object_new (CLOCK_TYPE_LOCATION_EDIT,
+ "settings", settings,
+ "clock-location", clock_location,
+ NULL);
+ window = GTK_WINDOW (object);
- gtk_window_set_transient_for (GTK_WINDOW (object),
- parent);
+ gtk_window_set_modal (window, TRUE);
+ gtk_window_set_transient_for (window, parent);
- return GTK_WIDGET (object);
+ return GTK_WIDGET (object);
}
diff --git a/applets/clock/clock-location-edit.ui b/applets/clock/clock-location-edit.ui
index d384ea1..6c20c84 100644
--- a/applets/clock/clock-location-edit.ui
+++ b/applets/clock/clock-location-edit.ui
@@ -53,6 +53,7 @@
<property name="can_default">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
+ <signal name="clicked" handler="gtk_widget_destroy" object="ClockLocationEdit"
swapped="yes"/>
</object>
<packing>
<property name="expand">False</property>
diff --git a/applets/clock/clock-location.c b/applets/clock/clock-location.c
index 5b696c4..2cbbb38 100644
--- a/applets/clock/clock-location.c
+++ b/applets/clock/clock-location.c
@@ -47,6 +47,7 @@
#include "clock-location.h"
#include "clock-marshallers.h"
+#include "gdesktop-enum-types.h"
#include "set-timezone.h"
#include "system-timezone.h"
@@ -95,28 +96,6 @@ static void clock_location_finalize (GObject *);
static gboolean update_weather_info (gpointer user_data);
static void setup_weather_updates (ClockLocation *loc);
-/*
- * Should match enum values in gdesktop-enums.h:
- * https://git.gnome.org/browse/gsettings-desktop-schemas/tree/headers/gdesktop-enums.h
- */
-static GType
-g_desktop_clock_format_get_type (void)
-{
- static GType etype = 0;
-
- if (etype == 0) {
- static const GEnumValue values[] = {
- { G_DESKTOP_CLOCK_FORMAT_24H, "G_DESKTOP_CLOCK_FORMAT_24H", "24h" },
- { G_DESKTOP_CLOCK_FORMAT_12H, "G_DESKTOP_CLOCK_FORMAT_12H", "12h" },
- { 0, NULL, NULL }
- };
-
- etype = g_enum_register_static ("GDesktopClockFormat", values);
- }
-
- return etype;
-}
-
ClockLocation *
clock_location_new (const gchar *name,
const gchar *metar_code,
@@ -245,7 +224,7 @@ clock_location_class_init (ClockLocationClass *class)
g_param_spec_enum ("clock-format",
"clock-format",
"clock-format",
- g_desktop_clock_format_get_type (),
+ G_DESKTOP_TYPE_CLOCK_FORMAT,
G_DESKTOP_CLOCK_FORMAT_24H,
G_PARAM_READWRITE);
diff --git a/applets/clock/clock-preferences.c b/applets/clock/clock-preferences.c
index 9bdf1b4..b9bb615 100644
--- a/applets/clock/clock-preferences.c
+++ b/applets/clock/clock-preferences.c
@@ -1,5 +1,6 @@
/*
- * Copyright (C) 2014 Alberts Muktupāvels
+ * Copyright (C) 1997-2003 Free Software Foundation, Inc.
+ * Copyright (C) 2014 Alberts Muktupāvels
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -16,40 +17,60 @@
*
* Authors:
* Alberts Muktupāvels <alberts muktupavels gmail com>
+ * Alexander Larsson
+ * Frederico Mena
+ * Gediminas Paulauskas
+ * George Lebl
+ * Mark McLoughlin
+ * Miguel de Icaza
+ * Stuart Parmenter
*/
+#include <glib/gi18n.h>
+#include <gio/gdesktopappinfo.h>
#include <gtk/gtk.h>
+#include <libgweather/gweather-enum-types.h>
#include "clock-common.h"
+#include "clock-location-edit.h"
#include "clock-preferences.h"
+#include "clock-utils.h"
+#include "gdesktop-enum-types.h"
struct _ClockPreferencesPrivate
{
- GSettings *settings;
+ GSettings *applet_settings;
+ GSettings *interface_settings;
+ GSettings *gweather_settings;
- GtkWidget *help_button;
- GtkWidget *time_settings_button;
- GtkWidget *close_button;
+ GtkWidget *help_button;
+ GtkWidget *time_settings_button;
+
+ GDesktopAppInfo *app_info;
+
+ GtkListStore *cities_store;
+ GtkTreeView *tree_view;
+ GList *locations;
+
+ GtkWidget *notebook;
/* General */
- GtkWidget *clock_format_12hr;
- GtkWidget *clock_format_24hr;
- GtkWidget *show_date;
- GtkWidget *show_seconds;
- GtkWidget *show_weather;
- GtkWidget *show_temperature;
+ GtkWidget *clock_options;
+ GtkWidget *clock_format_combo;
+ GtkWidget *show_date;
+ GtkWidget *show_seconds;
+ GtkWidget *show_weather;
+ GtkWidget *show_temperature;
/* Locations */
- GtkWidget *cities_list;
- GtkWidget *add_button;
- GtkWidget *edit_button;
- GtkWidget *remove_button;
+ GtkWidget *cities_list;
+ GtkWidget *add_button;
+ GtkWidget *edit_button;
+ GtkWidget *remove_button;
/* Weather */
- GtkWidget *temperature_combo;
- GtkWidget *wind_speed_combo;
- GtkWidget *pressure_combo;
- GtkWidget *visibility_combo;
+ GtkWidget *temperature_combo;
+ GtkWidget *wind_speed_combo;
};
G_DEFINE_TYPE_WITH_PRIVATE (ClockPreferences,
@@ -59,20 +80,610 @@ G_DEFINE_TYPE_WITH_PRIVATE (ClockPreferences,
enum
{
PROP_0,
- PROP_SETTINGS,
+ PROP_APPLET_SETTINGS,
N_PROPERTIES
};
static GParamSpec *object_properties[N_PROPERTIES] = { NULL, };
static void
+free_locations (ClockPreferences *preferences)
+{
+ ClockPreferencesPrivate *priv;
+ GList *l;
+
+ priv = preferences->priv;
+
+ for (l = priv->locations; l; l = l->next)
+ g_object_unref (l->data);
+
+ g_list_free (priv->locations);
+ priv->locations = NULL;
+}
+
+static void
+cities_changed (GSettings *settings,
+ const gchar *key,
+ gpointer user_data)
+{
+ ClockPreferences *preferences;
+ ClockPreferencesPrivate *priv;
+ GVariantIter *variant_iter;
+ const gchar *name;
+ const gchar *code;
+ gboolean has_custom_coords;
+ gdouble latitude;
+ gdouble longitude;
+ GtkTreeIter tree_iter;
+
+ preferences = CLOCK_PREFERENCES (user_data);
+ priv = preferences->priv;
+
+ gtk_list_store_clear (priv->cities_store);
+ free_locations (preferences);
+
+ g_settings_get (priv->applet_settings,
+ KEY_CITIES,
+ "a(ssm(dd))",
+ &variant_iter);
+
+ while (g_variant_iter_loop (variant_iter,
+ "(&s&sm(dd))",
+ &name,
+ &code,
+ &has_custom_coords,
+ &latitude,
+ &longitude)) {
+ ClockLocation *location;
+
+ location = clock_location_new (name,
+ code,
+ has_custom_coords,
+ latitude,
+ longitude);
+
+ gtk_list_store_append (priv->cities_store,
+ &tree_iter);
+ gtk_list_store_set (priv->cities_store,
+ &tree_iter,
+ COLUMN_NAME,
+ clock_location_get_name (location),
+ COLUMN_TIMEZONE,
+ clock_location_get_timezone (location),
+ COLUMN_LOCATION,
+ location,
+ -1);
+
+ priv->locations = g_list_append (priv->locations, location);
+ }
+}
+
+static gint
+sort_locations_by_name (gconstpointer a,
+ gconstpointer b)
+{
+ ClockLocation *location1;
+ ClockLocation *location2;
+ const gchar *name1;
+ const gchar *name2;
+
+ location1 = CLOCK_LOCATION (a);
+ location2 = CLOCK_LOCATION (a);
+
+ name1 = clock_location_get_name (location1);
+ name2 = clock_location_get_name (location2);
+
+ return g_strcmp0 (name1, name2);
+}
+
+static void
+edit_tree_row (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ ClockPreferences *preferences;
+ ClockLocation *edit_location;
+ GtkWidget *edit;
+
+ preferences = CLOCK_PREFERENCES (user_data);
+
+ gtk_tree_model_get (model,
+ iter,
+ COLUMN_LOCATION,
+ &edit_location,
+ -1);
+
+ edit = clock_location_edit_new (preferences->priv->applet_settings,
+ GTK_WINDOW (preferences),
+ edit_location);
+
+ gtk_window_present (GTK_WINDOW (edit));
+}
+
+static void
+remove_tree_row (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ ClockPreferences *preferences;
+ ClockPreferencesPrivate *priv;
+ ClockLocation *remove_location;
+
+ preferences = CLOCK_PREFERENCES (user_data);
+ priv = preferences->priv;
+
+ gtk_tree_model_get (model,
+ iter,
+ COLUMN_LOCATION,
+ &remove_location,
+ -1);
+
+ clock_preferences_update_locations (priv->applet_settings,
+ remove_location,
+ NULL);
+}
+
+static void
+locations_selection_changed (GtkTreeSelection *selection,
+ gpointer user_data)
+{
+ ClockPreferences *preferences;
+ gint n;
+
+ preferences = CLOCK_PREFERENCES (user_data);
+ n = gtk_tree_selection_count_selected_rows (selection);
+
+ gtk_widget_set_sensitive (preferences->priv->edit_button, n > 0);
+ gtk_widget_set_sensitive (preferences->priv->remove_button, n > 0);
+}
+
+static void
+add_clicked (ClockPreferences *preferences)
+{
+ GtkWidget *edit;
+
+ edit = clock_location_edit_new (preferences->priv->applet_settings,
+ GTK_WINDOW (preferences),
+ NULL);
+
+ gtk_window_present (GTK_WINDOW (edit));
+}
+
+static void
+edit_clicked (ClockPreferences *preferences)
+{
+ ClockPreferencesPrivate *priv;
+ GtkTreeSelection *selection;
+
+ priv = preferences->priv;
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
+
+ gtk_tree_selection_selected_foreach (selection,
+ edit_tree_row,
+ preferences);
+}
+
+static void
+remove_clicked (ClockPreferences *preferences)
+{
+ ClockPreferencesPrivate *priv;
+ GtkTreeSelection *selection;
+
+ priv = preferences->priv;
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
+
+ gtk_tree_selection_selected_foreach (selection,
+ remove_tree_row,
+ preferences);
+}
+
+static void
+help_clicked (ClockPreferences *preferences)
+{
+ GdkScreen *screen;
+ GError *error;
+ GtkWidget *dialog;
+ const gchar *primary;
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (preferences));
+
+ error = NULL;
+ gtk_show_uri (screen,
+ "help:clock/clock-settings",
+ GDK_CURRENT_TIME,
+ &error);
+
+ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ g_error_free (error);
+ return;
+ }
+
+ if (!error)
+ return;
+
+ primary = _("Could not display help document 'clock'");
+ dialog = gtk_message_dialog_new (GTK_WINDOW (preferences),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s",
+ primary);
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s",
+ error->message);
+
+ g_error_free (error);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+
+ gtk_window_set_icon_name (GTK_WINDOW (dialog),
+ CLOCK_ICON);
+ gtk_window_present (GTK_WINDOW (dialog));
+}
+
+static void
+time_settings_clicked (ClockPreferences *preferences)
+{
+ ClockPreferencesPrivate *priv;
+ GdkDisplay *display;
+ GdkAppLaunchContext *context;
+ GError *error;
+ GtkWidget *dialog;
+
+ priv = preferences->priv;
+
+ if (!priv->app_info)
+ return;
+
+ display = gdk_display_get_default ();
+ context = gdk_display_get_app_launch_context (display);
+ error = NULL;
+
+ g_app_info_launch (G_APP_INFO (priv->app_info),
+ NULL,
+ (GAppLaunchContext *) context,
+ &error);
+ g_object_unref (context);
+
+ if (!error)
+ return;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (preferences),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s",
+ _("Failed to open the time settings"));
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s",
+ error->message);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+
+ gtk_window_present (GTK_WINDOW (dialog));
+
+ g_error_free (error);
+}
+
+static void
+clock_preferences_connect_signals (ClockPreferences *preferences)
+{
+ ClockPreferencesPrivate *priv;
+
+ priv = preferences->priv;
+
+ g_signal_connect_swapped (priv->add_button,
+ "clicked",
+ G_CALLBACK (add_clicked),
+ preferences);
+ g_signal_connect_swapped (priv->edit_button,
+ "clicked",
+ G_CALLBACK (edit_clicked),
+ preferences);
+ g_signal_connect_swapped (priv->remove_button,
+ "clicked",
+ G_CALLBACK (remove_clicked),
+ preferences);
+
+ g_signal_connect_swapped (priv->help_button,
+ "clicked",
+ G_CALLBACK (help_clicked),
+ preferences);
+ g_signal_connect_swapped (priv->time_settings_button,
+ "clicked",
+ G_CALLBACK (time_settings_clicked),
+ preferences);
+}
+
+static gboolean
+get_mapping1 (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ GType (* get_type) (void) = user_data;
+ GEnumClass *klass;
+ GEnumValue *eval = NULL;
+ const char *s;
+ guint i;
+
+ g_variant_get (variant, "&s", &s);
+
+ klass = g_type_class_ref (get_type ());
+ for (i = 0; i < klass->n_values; ++i) {
+ if (g_strcmp0 (klass->values[i].value_nick, s) != 0)
+ continue;
+
+ eval = &klass->values[i];
+ break;
+ }
+
+ if (eval)
+ g_value_set_int (value, eval->value);
+
+ g_type_class_unref (klass);
+
+ return eval != NULL;
+}
+
+static GVariant *
+set_mapping1 (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ GType (* get_type) (void) = user_data;
+ GEnumClass *klass;
+ GEnumValue *eval = NULL;
+ int val;
+ guint i;
+ GVariant *variant = NULL;
+
+ val = g_value_get_int (value);
+
+ klass = g_type_class_ref (get_type ());
+ for (i = 0; i < klass->n_values; ++i) {
+ if (klass->values[i].value != val)
+ continue;
+
+ eval = &klass->values[i];
+ break;
+ }
+
+ if (eval)
+ variant = g_variant_new_string (eval->value_nick);
+
+ g_type_class_unref (klass);
+
+ return variant;
+}
+
+
+static gboolean
+get_mapping2 (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ GType (* get_type) (void) = user_data;
+ GEnumClass *klass;
+ GEnumValue *eval = NULL;
+ const char *s;
+ guint i;
+
+ g_variant_get (variant, "&s", &s);
+
+ klass = g_type_class_ref (get_type ());
+ for (i = 0; i < klass->n_values; ++i) {
+ if (g_strcmp0 (klass->values[i].value_nick, s) != 0)
+ continue;
+
+ eval = &klass->values[i];
+ break;
+ }
+
+ if (eval)
+ g_value_set_int (value, eval->value - 1);
+
+ g_type_class_unref (klass);
+
+ return eval != NULL;
+}
+
+static GVariant *
+set_mapping2 (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ GType (* get_type) (void) = user_data;
+ GEnumClass *klass;
+ GEnumValue *eval = NULL;
+ int val;
+ guint i;
+ GVariant *variant = NULL;
+
+ val = g_value_get_int (value) + 1;
+
+ klass = g_type_class_ref (get_type ());
+ for (i = 0; i < klass->n_values; ++i) {
+ if (klass->values[i].value != val)
+ continue;
+
+ eval = &klass->values[i];
+ break;
+ }
+
+ if (eval)
+ variant = g_variant_new_string (eval->value_nick);
+
+ g_type_class_unref (klass);
+
+ return variant;
+}
+
+static void
+clock_preferences_setup_general (ClockPreferences *preferences)
+{
+ ClockPreferencesPrivate *priv;
+
+ priv = preferences->priv;
+
+ g_settings_bind_with_mapping (priv->interface_settings,
+ KEY_CLOCK_FORMAT,
+ priv->clock_format_combo,
+ "active",
+ G_SETTINGS_BIND_DEFAULT,
+ get_mapping1,
+ set_mapping1,
+ g_desktop_clock_format_get_type,
+ NULL);
+
+ g_settings_bind (priv->interface_settings,
+ KEY_CLOCK_SHOW_DATE,
+ priv->show_date,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (priv->interface_settings,
+ KEY_CLOCK_SHOW_SECONDS,
+ priv->show_seconds,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (priv->applet_settings,
+ KEY_SHOW_WEATHER,
+ priv->show_weather,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (priv->applet_settings,
+ KEY_SHOW_TEMPERATURE,
+ priv->show_temperature,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ if (!clock_locale_supports_am_pm ())
+ gtk_widget_hide (priv->clock_options);
+}
+
+static void
+clock_preferences_setup_locations (ClockPreferences *preferences)
+{
+ ClockPreferencesPrivate *priv;
+ GtkTreeSelection *selection;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *col;
+
+ priv = preferences->priv;
+
+ priv->tree_view = GTK_TREE_VIEW (priv->cities_list);
+ selection = gtk_tree_view_get_selection (priv->tree_view);
+
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (locations_selection_changed), preferences);
+
+ renderer = gtk_cell_renderer_text_new ();
+ col = gtk_tree_view_column_new_with_attributes (_("City Name"),
+ renderer,
+ "text",
+ COLUMN_NAME,
+ NULL);
+ gtk_tree_view_insert_column (GTK_TREE_VIEW (priv->cities_list),
+ col,
+ -1);
+
+ renderer = gtk_cell_renderer_text_new ();
+ col = gtk_tree_view_column_new_with_attributes (_("City Time Zone"),
+ renderer,
+ "text",
+ COLUMN_TIMEZONE,
+ NULL);
+ gtk_tree_view_insert_column (GTK_TREE_VIEW (priv->cities_list),
+ col,
+ -1);
+
+ priv->cities_store = gtk_list_store_new (COLUMN_LAST,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ CLOCK_TYPE_LOCATION);
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->cities_list),
+ GTK_TREE_MODEL (priv->cities_store));
+
+ g_signal_connect (priv->applet_settings,
+ "changed::" KEY_CITIES,
+ G_CALLBACK (cities_changed),
+ preferences);
+ cities_changed (priv->applet_settings,
+ KEY_CITIES,
+ preferences);
+}
+
+static void
+clock_preferences_setup_weather (ClockPreferences *preferences)
+{
+ g_settings_bind_with_mapping (preferences->priv->gweather_settings,
+ KEY_TEMPERATURE_UNIT,
+ preferences->priv->temperature_combo,
+ "active",
+ G_SETTINGS_BIND_DEFAULT,
+ get_mapping2,
+ set_mapping2,
+ gweather_temperature_unit_get_type,
+ NULL);
+ g_settings_bind_with_mapping (preferences->priv->gweather_settings,
+ KEY_SPEED_UNIT,
+ preferences->priv->wind_speed_combo,
+ "active",
+ G_SETTINGS_BIND_DEFAULT,
+ get_mapping2,
+ set_mapping2,
+ gweather_speed_unit_get_type,
+ NULL);
+}
+
+static GObject *
+clock_preferences_constructor (GType type,
+ guint n_properties,
+ GObjectConstructParam *properties)
+{
+ GObject *object;
+ ClockPreferences *preferences;
+ ClockPreferencesPrivate *priv;
+
+ object = G_OBJECT_CLASS (clock_preferences_parent_class)->constructor (type,
+ n_properties,
+ properties);
+ preferences = CLOCK_PREFERENCES (object);
+ priv = preferences->priv;
+
+ clock_preferences_setup_general (preferences);
+ clock_preferences_setup_locations (preferences);
+ clock_preferences_setup_weather (preferences);
+
+ gtk_widget_set_sensitive (priv->time_settings_button,
+ priv->app_info != NULL);
+
+ clock_preferences_connect_signals (preferences);
+
+ return object;
+}
+
+static void
clock_preferences_finalize (GObject *object)
{
ClockPreferences *preferences;
preferences = CLOCK_PREFERENCES (object);
- g_clear_object (&preferences->priv->settings);
+ g_clear_object (&preferences->priv->cities_store);
+ g_clear_object (&preferences->priv->app_info);
+
+ g_clear_object (&preferences->priv->applet_settings);
+ g_clear_object (&preferences->priv->interface_settings);
+ g_clear_object (&preferences->priv->gweather_settings);
+
+ free_locations (preferences);
G_OBJECT_CLASS (clock_preferences_parent_class)->finalize (object);
}
@@ -90,9 +701,9 @@ clock_preferences_set_property (GObject *object,
switch (property_id)
{
- case PROP_SETTINGS:
- settings = g_value_get_object (value);
- preferences->priv->settings = g_object_ref (settings);
+ case PROP_APPLET_SETTINGS:
+ settings = g_value_get_object (value);
+ preferences->priv->applet_settings = g_object_ref (settings);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
@@ -114,8 +725,8 @@ clock_preferences_get_property (GObject *object,
switch (property_id)
{
- case PROP_SETTINGS:
- g_value_set_object (value, preferences->priv->settings);
+ case PROP_APPLET_SETTINGS:
+ g_value_set_object (value, preferences->priv->applet_settings);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
@@ -134,14 +745,15 @@ clock_preferences_class_init (ClockPreferencesClass *class)
object_class = G_OBJECT_CLASS (class);
widget_class = GTK_WIDGET_CLASS (class);
+ object_class->constructor = clock_preferences_constructor;
object_class->finalize = clock_preferences_finalize;
object_class->set_property = clock_preferences_set_property;
object_class->get_property = clock_preferences_get_property;
- object_properties[PROP_SETTINGS] =
- g_param_spec_object ("settings",
- "settings",
- "settings",
+ object_properties[PROP_APPLET_SETTINGS] =
+ g_param_spec_object ("applet-settings",
+ "applet-settings",
+ "applet-settings",
G_TYPE_SETTINGS,
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_WRITABLE);
@@ -159,16 +771,17 @@ clock_preferences_class_init (ClockPreferencesClass *class)
gtk_widget_class_bind_template_child_private (widget_class,
ClockPreferences,
time_settings_button);
+
gtk_widget_class_bind_template_child_private (widget_class,
ClockPreferences,
- close_button);
+ notebook);
gtk_widget_class_bind_template_child_private (widget_class,
ClockPreferences,
- clock_format_12hr);
+ clock_options);
gtk_widget_class_bind_template_child_private (widget_class,
ClockPreferences,
- clock_format_24hr);
+ clock_format_combo);
gtk_widget_class_bind_template_child_private (widget_class,
ClockPreferences,
show_date);
@@ -201,34 +814,101 @@ clock_preferences_class_init (ClockPreferencesClass *class)
gtk_widget_class_bind_template_child_private (widget_class,
ClockPreferences,
wind_speed_combo);
- gtk_widget_class_bind_template_child_private (widget_class,
- ClockPreferences,
- pressure_combo);
- gtk_widget_class_bind_template_child_private (widget_class,
- ClockPreferences,
- visibility_combo);
}
static void
clock_preferences_init (ClockPreferences *preferences)
{
+ ClockPreferencesPrivate *priv;
+
preferences->priv = clock_preferences_get_instance_private (preferences);
+ priv = preferences->priv;
+
+ priv->interface_settings = g_settings_new (DESKTOP_INTERFACE_SCHEMA);
+ priv->gweather_settings = g_settings_new (GWEATHER_SCHEMA);
+
+ priv->app_info = g_desktop_app_info_new ("gnome-datetime-panel.desktop");
gtk_widget_init_template (GTK_WIDGET (preferences));
}
GtkWidget *
-clock_preferences_new (GSettings *settings,
- GtkWindow *parent)
+clock_preferences_new (GSettings *applet_settings,
+ GtkWindow *parent,
+ gint page_number)
{
- GObject *object;
+ GObject *object;
+ ClockPreferences *preferences;
+ GtkWindow *window;
- object = g_object_new (CLOCK_TYPE_PREFERENCES,
- "settings", settings,
+ object = g_object_new (CLOCK_TYPE_PREFERENCES,
+ "applet-settings", applet_settings,
NULL);
+ preferences = CLOCK_PREFERENCES (object);
+ window = GTK_WINDOW (object);
+
+ gtk_window_set_transient_for (window, parent);
+ gtk_window_set_icon_name (window, CLOCK_ICON);
+
+ if (page_number > -1)
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (preferences->priv->notebook),
+ page_number);
+
+ return GTK_WIDGET (object);
+}
+
+void
+clock_preferences_update_locations (GSettings *settings,
+ ClockLocation *edit_or_remove_location,
+ ClockLocation *new_or_edited_location)
+{
+ GVariantIter *iter;
+ GList *locations;
+ const gchar *name;
+ const gchar *code;
+ gboolean latlon_override;
+ gdouble latitude;
+ gdouble longitude;
+ GList *l;
+ GVariantBuilder builder;
+
+ g_settings_get (settings, KEY_CITIES, "a(ssm(dd))", &iter);
+ locations = NULL;
+
+ while (g_variant_iter_loop (iter, "(&s&sm(dd))",
+ &name, &code,
+ &latlon_override,
+ &latitude, &longitude)) {
+ ClockLocation *location;
+
+ location = clock_location_new (name, code,
+ latlon_override,
+ latitude, longitude);
+
+ if (edit_or_remove_location)
+ if (clock_location_equal (edit_or_remove_location, location))
+ continue;
+
+ locations = g_list_append (locations, location);
+ }
+
+ if (new_or_edited_location)
+ locations = g_list_append (locations, new_or_edited_location);
+ locations = g_list_sort (locations, sort_locations_by_name);
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ssm(dd))"));
+
+ for (l = locations; l; l = l->next) {
+ ClockLocation *tmp;
+
+ tmp = CLOCK_LOCATION (l->data);
+ g_variant_builder_add_value (&builder,
+ clock_location_serialize (tmp));
+ g_object_unref (tmp);
+ }
- gtk_window_set_transient_for (GTK_WINDOW (object),
- parent);
+ g_settings_set_value (settings, KEY_CITIES,
+ g_variant_builder_end (&builder));
- return GTK_WIDGET (object);
+ g_list_free (locations);
}
diff --git a/applets/clock/clock-preferences.h b/applets/clock/clock-preferences.h
index 959a4f4..abefcbc 100644
--- a/applets/clock/clock-preferences.h
+++ b/applets/clock/clock-preferences.h
@@ -55,10 +55,15 @@ struct _ClockPreferencesClass
GtkDialogClass parent_class;
};
-GType clock_preferences_get_type (void);
+GType clock_preferences_get_type (void);
-GtkWidget *clock_preferences_new (GSettings *settings,
- GtkWindow *parent);
+GtkWidget *clock_preferences_new (GSettings *applet_settings,
+ GtkWindow *parent,
+ gint page_number);
+
+void clock_preferences_update_locations (GSettings *settings,
+ ClockLocation *edit_or_remove_location,
+ ClockLocation *new_or_edited_location);
G_END_DECLS
diff --git a/applets/clock/clock-preferences.ui b/applets/clock/clock-preferences.ui
index 16f90f0..600c9e4 100644
--- a/applets/clock/clock-preferences.ui
+++ b/applets/clock/clock-preferences.ui
@@ -2,6 +2,66 @@
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
+ <object class="GtkListStore" id="liststore1">
+ <columns>
+ <!-- column-name name -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">Default</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Kelvin</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Celsius</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Fahrenheit</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkListStore" id="liststore2">
+ <columns>
+ <!-- column-name name -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">Default</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">m/s</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">km/h</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">mph</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">knots</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Beaufort scale</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkListStore" id="liststore3">
+ <columns>
+ <!-- column-name name -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">24 hour format</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">12 hour format</col>
+ </row>
+ </data>
+ </object>
<template class="ClockPreferences" parent="GtkDialog">
<property name="can_focus">False</property>
<property name="border_width">5</property>
@@ -59,6 +119,7 @@
<property name="has_default">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
+ <signal name="clicked" handler="gtk_widget_destroy" object="ClockPreferences" swapped="yes"/>
</object>
<packing>
<property name="expand">False</property>
@@ -109,53 +170,21 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="hbox49">
+ <object class="GtkComboBox" id="clock_format_combo">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="margin_left">12</property>
- <property name="margin_start">12</property>
- <property name="spacing">13</property>
+ <property name="model">liststore3</property>
<child>
- <object class="GtkRadioButton" id="clock_format_12hr">
- <property name="label" translatable="yes">_12 hour format</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="halign">start</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="clock_format_24hr">
- <property name="label" translatable="yes">_24 hour format</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="halign">start</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- <property name="group">clock_format_12hr</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
+ <object class="GtkCellRendererText" id="cellrenderertext3"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
@@ -447,67 +476,17 @@
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
- <object class="GtkComboBox" id="visibility_combo">
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="visibility_label">
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_Visibility unit:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">visibility_combo</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="pressure_combo">
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="pressure_label">
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_Pressure unit:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">pressure_combo</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="wind_speed_combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
- <child>
<object class="GtkComboBox" id="temperature_combo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
+ <property name="model">liststore1</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
</object>
<packing>
<property name="left_attach">1</property>
@@ -542,6 +521,24 @@
<property name="top_attach">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkComboBox" id="wind_speed_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="model">liststore2</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext2"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
diff --git a/applets/clock/clock-utils.c b/applets/clock/clock-utils.c
index f147705..c42b356 100644
--- a/applets/clock/clock-utils.c
+++ b/applets/clock/clock-utils.c
@@ -54,71 +54,3 @@ clock_locale_format (void)
G_DESKTOP_CLOCK_FORMAT_12H :
G_DESKTOP_CLOCK_FORMAT_24H;
}
-
-void
-clock_utils_display_help (GtkWidget *widget,
- const char *doc_id,
- const char *link_id)
-{
- GError *error = NULL;
- char *uri;
-
- if (link_id)
- uri = g_strdup_printf ("help:%s/%s", doc_id, link_id);
- else
- uri = g_strdup_printf ("help:%s", doc_id);
-
- gtk_show_uri (gtk_widget_get_screen (widget), uri,
- gtk_get_current_event_time (), &error);
-
- g_free (uri);
-
- if (error &&
- g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_error_free (error);
- else if (error) {
- GtkWidget *parent;
- GtkWidget *dialog;
- char *primary;
-
- if (GTK_IS_WINDOW (widget))
- parent = widget;
- else
- parent = NULL;
-
- primary = g_markup_printf_escaped (
- _("Could not display help document '%s'"),
- doc_id);
- dialog = gtk_message_dialog_new (
- parent ? GTK_WINDOW (parent) : NULL,
- GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "%s", primary);
-
- gtk_message_dialog_format_secondary_text (
- GTK_MESSAGE_DIALOG (dialog),
- "%s", error->message);
-
- g_error_free (error);
- g_free (primary);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (gtk_widget_destroy),
- NULL);
-
- gtk_window_set_icon_name (GTK_WINDOW (dialog), CLOCK_ICON);
- gtk_window_set_screen (GTK_WINDOW (dialog),
- gtk_widget_get_screen (widget));
-
- if (parent == NULL) {
- /* we have no parent window */
- gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog),
- FALSE);
- gtk_window_set_title (GTK_WINDOW (dialog),
- _("Error displaying help document"));
- }
-
- gtk_widget_show (dialog);
- }
-}
diff --git a/applets/clock/clock-utils.h b/applets/clock/clock-utils.h
index c008d51..b0c17c6 100644
--- a/applets/clock/clock-utils.h
+++ b/applets/clock/clock-utils.h
@@ -33,10 +33,6 @@ G_BEGIN_DECLS
gboolean clock_locale_supports_am_pm (void);
GDesktopClockFormat clock_locale_format (void);
-void clock_utils_display_help (GtkWidget *widget,
- const char *doc_id,
- const char *link_id);
-
G_END_DECLS
#endif /* __CLOCK_UTILS_H__ */
diff --git a/applets/clock/clock.c b/applets/clock/clock.c
index 3f03966..d3aa185 100644
--- a/applets/clock/clock.c
+++ b/applets/clock/clock.c
@@ -60,19 +60,13 @@
#include "calendar-window.h"
#include "clock-location.h"
#include "clock-location-edit.h"
+#include "clock-preferences.h"
#include "clock-location-tile.h"
#include "clock-map.h"
#include "clock-utils.h"
#include "timedate1.h"
#include "system-timezone.h"
-enum {
- COL_CITY_NAME = 0,
- COL_CITY_TZ,
- COL_CITY_LOC,
- COL_CITY_LAST
-};
-
typedef struct _ClockData ClockData;
struct _ClockData {
@@ -98,20 +92,9 @@ struct _ClockData {
GtkBuilder *builder;
/* Preferences dialog */
- GtkWidget *prefs_window;
- GtkTreeView *prefs_locations;
-
- GtkWidget *prefs_location_add_button;
- GtkWidget *prefs_location_edit_button;
- GtkWidget *prefs_location_remove_button;
-
GWeatherLocationEntry *location_entry;
GWeatherTimezoneMenu *zone_combo;
- GtkWidget *time_settings_button;
- GAppInfo *datetime_appinfo;
-
- GtkListStore *cities_store;
GtkWidget *cities_section;
GtkWidget *map_widget;
@@ -163,7 +146,6 @@ static void update_orient (ClockData *cd);
static void applet_change_orient (PanelApplet *applet,
PanelAppletOrient orient,
ClockData *cd);
-static void save_cities_store (ClockData *cd);
/* ClockBox, an instantiable GtkBox */
@@ -337,20 +319,11 @@ destroy_clock (GtkWidget * widget, ClockData *cd)
gtk_widget_destroy (cd->calendar_popup);
cd->calendar_popup = NULL;
- if (cd->datetime_appinfo)
- g_object_unref (cd->datetime_appinfo);
- cd->datetime_appinfo = NULL;
-
free_locations (cd);
g_list_free (cd->location_tiles);
cd->location_tiles = NULL;
- if (cd->cities_store) {
- g_object_unref (cd->cities_store);
- cd->cities_store = NULL;
- }
-
if (cd->builder) {
g_object_unref (cd->builder);
cd->builder = NULL;
@@ -548,61 +521,6 @@ create_clock_window (ClockData *cd)
}
static gint
-sort_locations_by_name (gconstpointer a, gconstpointer b)
-{
- ClockLocation *loc_a = (ClockLocation *) a;
- ClockLocation *loc_b = (ClockLocation *) b;
-
- const char *name_a = clock_location_get_name (loc_a);
- const char *name_b = clock_location_get_name (loc_b);
-
- return strcmp (name_a, name_b);
-}
-
-static void
-create_cities_store (ClockData *cd)
-{
- GtkTreeIter iter;
- GList *cities = cd->locations;
- GList *list = NULL;
-
- if (cd->cities_store) {
- g_object_unref (G_OBJECT (cd->cities_store));
- cd->cities_store = NULL;
- }
-
- /* City name, Timezone name, Coordinates in lat/long */
- cd->cities_store = g_object_ref (gtk_list_store_new (COL_CITY_LAST,
- G_TYPE_STRING, /* COL_CITY_NAME */
- G_TYPE_STRING, /* COL_CITY_TZ */
- CLOCK_TYPE_LOCATION)); /* COL_CITY_LOC */
-
- list = g_list_copy (cities);
- list = g_list_sort (list, sort_locations_by_name);
-
- while (list) {
- ClockLocation *loc = CLOCK_LOCATION (list->data);
-
- gtk_list_store_append (cd->cities_store, &iter);
- gtk_list_store_set (cd->cities_store, &iter,
- COL_CITY_NAME, clock_location_get_name (loc),
- /* FIXME: translate the timezone */
- COL_CITY_TZ, clock_location_get_timezone (loc),
- COL_CITY_LOC, loc,
- -1);
-
- list = list->next;
- }
-
-
- if (cd->prefs_window) {
- GtkWidget *widget = _clock_get_widget (cd, "cities_list");
- gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
- GTK_TREE_MODEL (cd->cities_store));
- }
-}
-
-static gint
sort_locations_by_time (gconstpointer a, gconstpointer b)
{
ClockLocation *loc_a = (ClockLocation *) a;
@@ -746,7 +664,6 @@ update_calendar_popup (ClockData *cd)
update_tooltip (cd);
create_clock_window (cd);
- create_cities_store (cd);
create_cities_section (cd);
create_map_section (cd);
}
@@ -1038,74 +955,55 @@ copy_time (GSimpleAction *action,
}
static void
-ensure_datetime_appinfo (ClockData *cd)
-{
- if (!cd->datetime_appinfo)
- cd->datetime_appinfo = (GAppInfo *) g_desktop_app_info_new ("gnome-datetime-panel.desktop");
-}
-
-static void
-update_set_time_button (ClockData *cd)
-{
- if (!cd->time_settings_button)
- return;
-
- ensure_datetime_appinfo (cd);
-
- gtk_widget_set_sensitive (cd->time_settings_button,
- cd->datetime_appinfo != NULL);
-}
-
-static void
-run_time_settings (GtkWidget *unused, ClockData *cd)
+config_date (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GdkScreen *screen;
+ GDesktopAppInfo *app_info;
GdkDisplay *display;
GdkAppLaunchContext *context;
GError *error;
+ ClockData *cd;
+ GtkWidget *dialog;
- update_set_time_button (cd);
- ensure_datetime_appinfo (cd);
-
- if (!cd->datetime_appinfo)
+ app_info = g_desktop_app_info_new ("gnome-datetime-panel.desktop");
+ if (!app_info)
return;
- screen = gtk_widget_get_screen (cd->applet);
- display = gdk_screen_get_display (screen);
- context = gdk_display_get_app_launch_context (display);
- gdk_app_launch_context_set_screen (context, screen);
-
+ display = gdk_display_get_default ();
+ context = gdk_display_get_app_launch_context (display);
error = NULL;
- g_app_info_launch (cd->datetime_appinfo, NULL,
- (GAppLaunchContext *) context, &error);
+ g_app_info_launch (G_APP_INFO (app_info),
+ NULL,
+ (GAppLaunchContext *) context,
+ &error);
+
+ g_object_unref (app_info);
g_object_unref (context);
- if (error) {
- GtkWidget *dialog;
+ if (!error)
+ return;
- dialog = gtk_message_dialog_new (NULL,
- 0,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- _("Failed to open the time settings"));
+ cd = user_data;
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message);
- g_signal_connect (dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
- gtk_window_present (GTK_WINDOW (dialog));
+ dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (cd->applet)),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s",
+ _("Failed to open the time settings"));
- g_error_free (error);
- }
-}
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s",
+ error->message);
-static void
-config_date (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- ClockData *cd = (ClockData *) user_data;
- run_time_settings (NULL, cd);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+
+ gtk_window_present (GTK_WINDOW (dialog));
+
+ g_error_free (error);
}
static const GActionEntry clock_menu_actions [] = {
@@ -1391,351 +1289,20 @@ fill_clock_applet (PanelApplet *applet)
}
static void
-prefs_locations_changed (GtkTreeSelection *selection, ClockData *cd)
-{
- gint n;
-
- n = gtk_tree_selection_count_selected_rows (selection);
- gtk_widget_set_sensitive (cd->prefs_location_edit_button, n > 0);
- gtk_widget_set_sensitive (cd->prefs_location_remove_button, n > 0);
-}
-
-static void
-save_cities_store (ClockData *cd)
-{
- ClockLocation *loc;
- GVariantBuilder builder;
- GList *list;
-
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ssm(dd))"));
-
- list = cd->locations;
- while (list) {
- loc = CLOCK_LOCATION (list->data);
- g_variant_builder_add_value (&builder,
- clock_location_serialize (loc));
-
- list = list->next;
- }
-
- g_settings_set_value (cd->applet_settings, KEY_CITIES,
- g_variant_builder_end (&builder));
-
- create_cities_store (cd);
-}
-
-static void
-prefs_hide (GtkWidget *widget, ClockData *cd)
-{
- GtkWidget *tree;
-
- gtk_widget_hide (cd->prefs_window);
-
- tree = _clock_get_widget (cd, "cities_list");
-
- gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)));
-}
-
-static gboolean
-prefs_hide_event (GtkWidget *widget, GdkEvent *event, ClockData *cd)
-{
- prefs_hide (widget, cd);
-
- return TRUE;
-}
-
-static void
-prefs_help (GtkWidget *widget, ClockData *cd)
-{
- clock_utils_display_help (cd->prefs_window,
- "clock", "clock-settings");
-}
-
-static void
-remove_tree_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
-{
- ClockData *cd = data;
- ClockLocation *loc = NULL;
-
- gtk_tree_model_get (model, iter, COL_CITY_LOC, &loc, -1);
- cd->locations = g_list_remove (cd->locations, loc);
- g_object_unref (loc);
-
- /* This will update everything related to locations to take into
- * account the removed location (via the gconf notification) */
- save_cities_store (cd);
-}
-
-static void
-run_prefs_locations_remove (GtkButton *button, ClockData *cd)
-{
- GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (cd->prefs_locations));
-
- gtk_tree_selection_selected_foreach (sel, remove_tree_row, cd);
-}
-
-static void
-run_prefs_locations_add (GtkButton *button, ClockData *cd)
-{
- GtkWidget *edit_window;
-
- edit_window = clock_location_edit_new (cd->applet_settings,
- GTK_WINDOW (cd->prefs_window),
- NULL);
-
- /*gtk_widget_grab_focus (GTK_WIDGET (cd->location_entry));
- gtk_editable_set_position (GTK_EDITABLE (cd->location_entry), -1);*/
-
- gtk_window_present_with_time (GTK_WINDOW (edit_window), gtk_get_current_event_time ());
-}
-
-static void
-edit_tree_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
-{
- ClockData *cd;
- GtkWidget *edit_window;
- ClockLocation *clock_location;
-
- cd = data;
-
- gtk_tree_model_get (model, iter, COL_CITY_LOC, &clock_location, -1);
-
- edit_window = clock_location_edit_new (cd->applet_settings,
- GTK_WINDOW (cd->prefs_window),
- clock_location);
-
- /*gtk_widget_grab_focus (GTK_WIDGET (cd->location_entry));
- gtk_editable_set_position (GTK_EDITABLE (cd->location_entry), -1);*/
-
- gtk_window_present (GTK_WINDOW (edit_window));
-}
-
-static void
-run_prefs_locations_edit (GtkButton *unused, ClockData *cd)
-{
- GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (cd->prefs_locations));
-
- gtk_tree_selection_selected_foreach (sel, edit_tree_row, cd);
-}
-
-static void
-set_12hr_format_radio_cb (GtkWidget *widget, ClockData *cd)
-{
- GDesktopClockFormat format;
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
- format = G_DESKTOP_CLOCK_FORMAT_12H;
- else
- format = G_DESKTOP_CLOCK_FORMAT_24H;
-
- g_settings_set_enum (cd->clock_settings, KEY_CLOCK_FORMAT, format);
-}
-
-static void
-fill_prefs_window (ClockData *cd)
-{
- struct int_char_pair {
- int v;
- const char *c;
- };
-
- static const struct int_char_pair temperatures[] = {
- { GWEATHER_TEMP_UNIT_DEFAULT, N_("Default") },
- { GWEATHER_TEMP_UNIT_KELVIN, N_("Kelvin") },
- { GWEATHER_TEMP_UNIT_CENTIGRADE, N_("Celsius") },
- { GWEATHER_TEMP_UNIT_FAHRENHEIT, N_("Fahrenheit") },
- { -1 }
- };
-
- static const struct int_char_pair speeds[] = {
- { GWEATHER_SPEED_UNIT_DEFAULT, N_("Default") },
- { GWEATHER_SPEED_UNIT_MS, N_("Meters per second (m/s)") },
- { GWEATHER_SPEED_UNIT_KPH, N_("Kilometers per hour (kph)") },
- { GWEATHER_SPEED_UNIT_MPH, N_("Miles per hour (mph)") },
- { GWEATHER_SPEED_UNIT_KNOTS, N_("Knots") },
- { GWEATHER_SPEED_UNIT_BFT, N_("Beaufort scale") },
- { -1 }
- };
-
- GtkWidget *radio_12hr;
- GtkWidget *radio_24hr;
- GtkWidget *widget;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *col;
- GtkListStore *store;
- GtkTreeIter iter;
- GEnumClass *enum_class;
- int i;
-
- /* Set the 12 hour / 24 hour widget */
- radio_12hr = _clock_get_widget (cd, "12hr_radio");
- radio_24hr = _clock_get_widget (cd, "24hr_radio");
-
- if (g_settings_get_enum (cd->clock_settings, KEY_CLOCK_FORMAT) ==
- G_DESKTOP_CLOCK_FORMAT_12H)
- widget = radio_12hr;
- else
- widget = radio_24hr;
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
-
- g_signal_connect (radio_12hr, "toggled",
- G_CALLBACK (set_12hr_format_radio_cb), cd);
-
- /* Set the "Show Date" checkbox */
- widget = _clock_get_widget (cd, "date_check");
- g_settings_bind (cd->clock_settings, KEY_CLOCK_SHOW_DATE, widget, "active",
- G_SETTINGS_BIND_DEFAULT);
-
- /* Set the "Show Seconds" checkbox */
- widget = _clock_get_widget (cd, "seconds_check");
- g_settings_bind (cd->clock_settings, KEY_CLOCK_SHOW_SECONDS, widget, "active",
- G_SETTINGS_BIND_DEFAULT);
-
- /* Set the "Show weather" checkbox */
- widget = _clock_get_widget (cd, "weather_check");
- g_settings_bind (cd->applet_settings, KEY_SHOW_WEATHER, widget, "active",
- G_SETTINGS_BIND_DEFAULT);
-
- /* Set the "Show temperature" checkbox */
- widget = _clock_get_widget (cd, "temperature_check");
- g_settings_bind (cd->applet_settings, KEY_SHOW_TEMPERATURE, widget, "active",
- G_SETTINGS_BIND_DEFAULT);
-
- /* Fill the Cities list */
- widget = _clock_get_widget (cd, "cities_list");
-
- renderer = gtk_cell_renderer_text_new ();
- col = gtk_tree_view_column_new_with_attributes (_("City Name"), renderer, "text", COL_CITY_NAME,
NULL);
- gtk_tree_view_insert_column (GTK_TREE_VIEW (widget), col, -1);
-
- renderer = gtk_cell_renderer_text_new ();
- col = gtk_tree_view_column_new_with_attributes (_("City Time Zone"), renderer, "text", COL_CITY_TZ,
NULL);
- gtk_tree_view_insert_column (GTK_TREE_VIEW (widget), col, -1);
-
- if (cd->cities_store == NULL)
- create_cities_store (cd);
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
- GTK_TREE_MODEL (cd->cities_store));
-
- /* Temperature combo */
- widget = _clock_get_widget (cd, "temperature_combo");
- store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
- gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
- gtk_combo_box_set_id_column (GTK_COMBO_BOX (widget), 0);
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 1, NULL);
-
- enum_class = g_type_class_ref (GWEATHER_TYPE_TEMPERATURE_UNIT);
- for (i = 0; temperatures[i].v != -1; i++)
- gtk_list_store_insert_with_values (store, &iter, -1,
- 0, g_enum_get_value (enum_class,
temperatures[i].v)->value_nick,
- 1, gettext (temperatures[i].c),
- -1);
- g_type_class_unref (enum_class);
-
- g_settings_bind (cd->weather_settings, KEY_TEMPERATURE_UNIT, widget, "active-id",
- G_SETTINGS_BIND_DEFAULT);
-
- /* Wind speed combo */
- widget = _clock_get_widget (cd, "wind_speed_combo");
- store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
- gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
- gtk_combo_box_set_id_column (GTK_COMBO_BOX (widget), 0);
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 1, NULL);
-
- enum_class = g_type_class_ref (GWEATHER_TYPE_SPEED_UNIT);
- for (i = 0; speeds[i].v != -1; i++)
- gtk_list_store_insert_with_values (store, &iter, -1,
- 0, g_enum_get_value (enum_class, speeds[i].v)->value_nick,
- 1, gettext (speeds[i].c),
- -1);
- g_type_class_unref (enum_class);
-
- g_settings_bind (cd->weather_settings, KEY_SPEED_UNIT, widget, "active-id",
- G_SETTINGS_BIND_DEFAULT);
-}
-
-static void
-ensure_prefs_window_is_created (ClockData *cd)
-{
- GtkWidget *prefs_close_button;
- GtkWidget *prefs_help_button;
- GtkWidget *clock_options;
- GtkTreeSelection *selection;
-
- if (cd->prefs_window)
- return;
-
- cd->prefs_window = _clock_get_widget (cd, "prefs-window");
-
- gtk_window_set_icon_name (GTK_WINDOW (cd->prefs_window), CLOCK_ICON);
-
- prefs_close_button = _clock_get_widget (cd, "prefs-close-button");
- prefs_help_button = _clock_get_widget (cd, "prefs-help-button");
- clock_options = _clock_get_widget (cd, "clock-options");
- cd->prefs_locations = GTK_TREE_VIEW (_clock_get_widget (cd, "cities_list"));
-
- if (!clock_locale_supports_am_pm ())
- gtk_widget_hide (clock_options);
-
- selection = gtk_tree_view_get_selection (cd->prefs_locations);
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (prefs_locations_changed), cd);
-
- g_signal_connect (G_OBJECT (cd->prefs_window), "delete_event",
- G_CALLBACK (prefs_hide_event), cd);
-
- g_signal_connect (G_OBJECT (prefs_close_button), "clicked",
- G_CALLBACK (prefs_hide), cd);
-
- g_signal_connect (G_OBJECT (prefs_help_button), "clicked",
- G_CALLBACK (prefs_help), cd);
-
- cd->prefs_location_remove_button = _clock_get_widget (cd, "prefs-locations-remove-button");
-
- g_signal_connect (G_OBJECT (cd->prefs_location_remove_button), "clicked",
- G_CALLBACK (run_prefs_locations_remove), cd);
-
- cd->prefs_location_add_button = _clock_get_widget (cd, "prefs-locations-add-button");
-
- g_signal_connect (G_OBJECT (cd->prefs_location_add_button), "clicked",
- G_CALLBACK (run_prefs_locations_add), cd);
-
- cd->prefs_location_edit_button = _clock_get_widget (cd, "prefs-locations-edit-button");
-
- g_signal_connect (G_OBJECT (cd->prefs_location_edit_button), "clicked",
- G_CALLBACK (run_prefs_locations_edit), cd);
-
- /* Set up the time setting section */
-
- cd->time_settings_button = _clock_get_widget (cd, "time-settings-button");
- g_signal_connect (cd->time_settings_button, "clicked",
- G_CALLBACK (run_time_settings), cd);
-
- /* fill it with the current preferences */
- fill_prefs_window (cd);
-}
-
-static void
display_properties_dialog (ClockData *cd, gboolean start_in_locations_page)
{
- ensure_prefs_window_is_created (cd);
+ gint page_number;
+ GtkWidget *prefs_window;
- if (start_in_locations_page) {
- GtkWidget *notebook = _clock_get_widget (cd, "notebook");
- gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 1);
- }
+ page_number = 0;
+ if (start_in_locations_page)
+ page_number = 1;
- update_set_time_button (cd);
+ prefs_window = clock_preferences_new (cd->applet_settings,
+ GTK_WINDOW (gtk_widget_get_toplevel (cd->applet)),
+ page_number);
- gtk_window_set_screen (GTK_WINDOW (cd->prefs_window),
- gtk_widget_get_screen (cd->applet));
- gtk_window_present (GTK_WINDOW (cd->prefs_window));
+ gtk_window_present (GTK_WINDOW (prefs_window));
}
static void
diff --git a/applets/clock/clock.gresource.xml b/applets/clock/clock.gresource.xml
index 43092e9..b81bde0 100644
--- a/applets/clock/clock.gresource.xml
+++ b/applets/clock/clock.gresource.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/panel/applet/clock">
- <file compressed="true">clock.ui</file>
<file compressed="true">clock-location-edit.ui</file>
<file compressed="true">clock-preferences.ui</file>
<file compressed="true">clock-menu.xml</file>
diff --git a/applets/clock/gdesktop-enum-types.c b/applets/clock/gdesktop-enum-types.c
new file mode 100644
index 0000000..0d083d0
--- /dev/null
+++ b/applets/clock/gdesktop-enum-types.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2014 Alberts Muktupāvels
+ *
+ * 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/>.
+ *
+ * Authors:
+ * Alberts Muktupāvels <alberts muktupavels gmail com>
+ */
+
+#include <gdesktop-enums.h>
+
+#include "gdesktop-enum-types.h"
+
+static const GEnumValue values[] = {
+ { G_DESKTOP_CLOCK_FORMAT_24H, "G_DESKTOP_CLOCK_FORMAT_24H", "24h" },
+ { G_DESKTOP_CLOCK_FORMAT_12H, "G_DESKTOP_CLOCK_FORMAT_12H", "12h" },
+ { 0, NULL, NULL }
+};
+
+GType
+g_desktop_clock_format_get_type (void)
+{
+ static GType type = 0;
+
+ if (!type)
+ type = g_enum_register_static ("GDesktopClockFormat", values);
+
+ return type;
+}
diff --git a/applets/clock/gdesktop-enum-types.h b/applets/clock/gdesktop-enum-types.h
new file mode 100644
index 0000000..f2f4656
--- /dev/null
+++ b/applets/clock/gdesktop-enum-types.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2014 Alberts Muktupāvels
+ *
+ * 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/>.
+ *
+ * Authors:
+ * Alberts Muktupāvels <alberts muktupavels gmail com>
+ */
+
+#ifndef G_DESKTOP_ENUM_TYPES_H
+#define G_DESKTOP_ENUM_TYPES_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define G_DESKTOP_TYPE_CLOCK_FORMAT (g_desktop_clock_format_get_type ())
+GType g_desktop_clock_format_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]