diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2017-06-08 07:59:09 -0300 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2017-06-19 14:46:43 -0300 |
commit | c2b05ceec30975724532935df35dea231af3245f (patch) | |
tree | 0d09aff90498ca350e2a77af395320c5b141241c | |
parent | 0c50c8b04c3ef9065ef56027f2e6316d85bfd2ab (diff) | |
download | gnome-calendar-wip/gbsneto/sidebar.tar.gz |
window: store sidebar statewip/gbsneto/sidebar
-rw-r--r-- | data/org.gnome.calendar.gschema.xml | 5 | ||||
-rw-r--r-- | src/gcal-window.c | 163 |
2 files changed, 99 insertions, 69 deletions
diff --git a/data/org.gnome.calendar.gschema.xml b/data/org.gnome.calendar.gschema.xml index e938690f..8c9ad288 100644 --- a/data/org.gnome.calendar.gschema.xml +++ b/data/org.gnome.calendar.gschema.xml @@ -21,5 +21,10 @@ <summary>Type of the active view</summary> <description>Type of the active window view, default value is: monthly view</description> </key> + <key name="show-sidebar" type="b"> + <default>false</default> + <summary>Whether the sidebar is visible</summary> + <description>Whether the sidebar is visible or not</description> + </key> </schema> </schemalist> diff --git a/src/gcal-window.c b/src/gcal-window.c index dfeac7c7..1f1929a6 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -101,7 +101,7 @@ struct _GcalWindow GtkApplicationWindow parent; /* timeout ids */ - guint save_geometry_timeout_id; + guint save_settings_timeout_id; guint notification_timeout; /* upper level widgets */ @@ -181,7 +181,7 @@ enum PROP_NEW_EVENT_MODE }; -#define SAVE_GEOMETRY_ID_TIMEOUT 100 /* ms */ +#define SAVE_SETTINGS_ID_TIMEOUT 100 /* ms */ #define FAST_REFRESH_TIMEOUT 900000 /* ms */ #define SLOW_REFRESH_TIMEOUT 3600000 /* ms */ @@ -545,58 +545,8 @@ calendar_listbox_sort_func (GtkListBoxRow *row1, return g_ascii_strcasecmp (e_source_get_display_name (source1), e_source_get_display_name (source2)); } -static void -load_geometry (GcalWindow *window) -{ - GcalApplication *app; - GSettings *settings; - GVariant *variant; - gboolean maximized; - const gint32 *position; - const gint32 *size; - gsize n_elements; - - GCAL_ENTRY; - - app = GCAL_APPLICATION (gtk_window_get_application (GTK_WINDOW (window))); - settings = gcal_application_get_settings (app); - - /* load window settings: size */ - variant = g_settings_get_value (settings, - "window-size"); - size = g_variant_get_fixed_array (variant, - &n_elements, - sizeof (gint32)); - if (n_elements == 2) - gtk_window_set_default_size (GTK_WINDOW (window), - size[0], - size[1]); - g_variant_unref (variant); - - /* load window settings: position */ - variant = g_settings_get_value (settings, - "window-position"); - position = g_variant_get_fixed_array (variant, - &n_elements, - sizeof (gint32)); - if (n_elements == 2) - gtk_window_move (GTK_WINDOW (window), - position[0], - position[1]); - - g_variant_unref (variant); - - /* load window settings: state */ - maximized = g_settings_get_boolean (settings, - "window-maximized"); - if (maximized) - gtk_window_maximize (GTK_WINDOW (window)); - - GCAL_EXIT; -} - static gboolean -save_geometry (gpointer user_data) +save_settings (gpointer user_data) { GcalWindow *window; GtkWindow *self; @@ -628,7 +578,7 @@ save_geometry (gpointer user_data) if (maximized) { - window->save_geometry_timeout_id = 0; + window->save_settings_timeout_id = 0; GCAL_RETURN (G_SOURCE_REMOVE); } @@ -656,11 +606,85 @@ save_geometry (gpointer user_data) "window-position", variant); - window->save_geometry_timeout_id = 0; + /* Sidebar */ + g_settings_set_boolean (settings, + "show-sidebar", + gtk_revealer_get_reveal_child (GTK_REVEALER (window->sidebar))); + + window->save_settings_timeout_id = 0; GCAL_RETURN (G_SOURCE_REMOVE); } +static void +load_settings (GcalWindow *window) +{ + GcalApplication *app; + GSettings *settings; + GVariant *variant; + gboolean maximized; + gboolean show_sidebar; + const gint32 *position; + const gint32 *size; + gsize n_elements; + + GCAL_ENTRY; + + app = GCAL_APPLICATION (gtk_window_get_application (GTK_WINDOW (window))); + settings = gcal_application_get_settings (app); + + /* load window settings: size */ + variant = g_settings_get_value (settings, + "window-size"); + size = g_variant_get_fixed_array (variant, + &n_elements, + sizeof (gint32)); + if (n_elements == 2) + gtk_window_set_default_size (GTK_WINDOW (window), + size[0], + size[1]); + g_variant_unref (variant); + + /* load window settings: position */ + variant = g_settings_get_value (settings, + "window-position"); + position = g_variant_get_fixed_array (variant, + &n_elements, + sizeof (gint32)); + if (n_elements == 2) + gtk_window_move (GTK_WINDOW (window), + position[0], + position[1]); + + g_variant_unref (variant); + + /* load window settings: state */ + maximized = g_settings_get_boolean (settings, + "window-maximized"); + if (maximized) + gtk_window_maximize (GTK_WINDOW (window)); + + /* Show the sidebar */ + show_sidebar = g_settings_get_boolean (settings, "show-sidebar"); + + if (show_sidebar) + { + g_signal_handlers_block_by_func (window->sidebar, save_settings, window); + + gtk_revealer_set_transition_type (GTK_REVEALER (window->sidebar), + GTK_REVEALER_TRANSITION_TYPE_NONE); + + gtk_revealer_set_reveal_child (GTK_REVEALER (window->sidebar), TRUE); + + gtk_revealer_set_transition_type (GTK_REVEALER (window->sidebar), + GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT); + + g_signal_handlers_unblock_by_func (window->sidebar, save_settings, window); + } + + GCAL_EXIT; +} + /** * view_changed: * @object: @@ -1309,10 +1333,10 @@ gcal_window_finalize (GObject *object) GCAL_ENTRY; - if (window->save_geometry_timeout_id > 0) + if (window->save_settings_timeout_id > 0) { - g_source_remove (window->save_geometry_timeout_id); - window->save_geometry_timeout_id = 0; + g_source_remove (window->save_settings_timeout_id); + window->save_settings_timeout_id = 0; } if (window->open_edit_dialog_timeout_id > 0) @@ -1461,14 +1485,14 @@ gcal_window_configure_event (GtkWidget *widget, window = GCAL_WINDOW (widget); - if (window->save_geometry_timeout_id != 0) + if (window->save_settings_timeout_id != 0) { - g_source_remove (window->save_geometry_timeout_id); - window->save_geometry_timeout_id = 0; + g_source_remove (window->save_settings_timeout_id); + window->save_settings_timeout_id = 0; } - window->save_geometry_timeout_id = g_timeout_add (SAVE_GEOMETRY_ID_TIMEOUT, - save_geometry, + window->save_settings_timeout_id = g_timeout_add (SAVE_SETTINGS_ID_TIMEOUT, + save_settings, window); retval = GTK_WIDGET_CLASS (gcal_window_parent_class)->configure_event (widget, event); @@ -1485,14 +1509,14 @@ gcal_window_state_event (GtkWidget *widget, window = GCAL_WINDOW (widget); - if (window->save_geometry_timeout_id != 0) + if (window->save_settings_timeout_id != 0) { - g_source_remove (window->save_geometry_timeout_id); - window->save_geometry_timeout_id = 0; + g_source_remove (window->save_settings_timeout_id); + window->save_settings_timeout_id = 0; } - window->save_geometry_timeout_id = g_timeout_add (SAVE_GEOMETRY_ID_TIMEOUT, - save_geometry, + window->save_settings_timeout_id = g_timeout_add (SAVE_SETTINGS_ID_TIMEOUT, + save_settings, window); retval = GTK_WIDGET_CLASS (gcal_window_parent_class)->window_state_event (widget, event); @@ -1608,6 +1632,7 @@ gcal_window_class_init(GcalWindowClass *klass) gtk_widget_class_bind_template_callback (widget_class, event_activated); /* Syncronization related */ + gtk_widget_class_bind_template_callback (widget_class, save_settings); gtk_widget_class_bind_template_callback (widget_class, window_state_changed); /* search related */ @@ -1741,7 +1766,7 @@ gcal_window_new_with_view_and_date (GcalApplication *app, NULL); /* loading size */ - load_geometry (win); + load_settings (win); if (view_type == GCAL_WINDOW_VIEW_DAY) view_changed (NULL, NULL, win); |