From 26db7e16274b430436b5073b178fa93ab22c7cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20G=C3=B6llnitz?= Date: Sun, 30 Mar 2025 04:56:28 +0200 Subject: [PATCH] window: only allow changing to visible view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As of now, every view is visible. That however, will change with a subsequent commit moving the agenda view to the main area and introducing breakpoint-dependent view visibilities. Signed-off-by: Markus Göllnitz Part-of: --- src/gui/gcal-window.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/gui/gcal-window.c b/src/gui/gcal-window.c index 79372807..8d501d62 100644 --- a/src/gui/gcal-window.c +++ b/src/gui/gcal-window.c @@ -446,16 +446,21 @@ on_view_action_activated (GSimpleAction *action, view = g_variant_get_int32 (param); - /* -1 means next view */ + /* -1 means next view, -2 means previous view */ if (view == -1) - view = ++(window->active_view); + view = window->active_view + 1; else if (view == -2) - view = --(window->active_view); + view = window->active_view - 1; - window->active_view = CLAMP (view, 0, GCAL_WINDOW_VIEW_N_VIEWS - 1); - adw_view_stack_set_visible_child (window->views_stack, window->views[window->active_view]); + view = CLAMP (view, 0, GCAL_WINDOW_VIEW_N_VIEWS - 1); - g_object_notify_by_pspec (G_OBJECT (user_data), properties[PROP_ACTIVE_VIEW]); + if (adw_view_stack_page_get_visible (adw_view_stack_get_page (window->views_stack, window->views[view]))) + { + window->active_view = view; + adw_view_stack_set_visible_child (window->views_stack, window->views[window->active_view]); + + g_object_notify_by_pspec (G_OBJECT (user_data), properties[PROP_ACTIVE_VIEW]); + } GCAL_EXIT; } @@ -1110,7 +1115,6 @@ gcal_window_set_property (GObject *object, { case PROP_ACTIVE_VIEW: self->active_view = g_value_get_enum (value); - gtk_widget_set_visible (self->views[self->active_view], TRUE); adw_view_stack_set_visible_child (self->views_stack, self->views[self->active_view]); break;