From dec31cadd4e3f802b926d9274f05f978a0c72e63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20G=C3=B6llnitz?= Date: Wed, 5 Feb 2025 23:10:13 +0100 Subject: [PATCH] views: move agenda view to main area MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This prepares for multiple views to be there for mobile users, and is the location at which a dedicated agenda view for desktop will be, once the current agenda view is refactored to suit desktop use-cases better. Signed-off-by: Markus Göllnitz Part-of: --- src/gcal-enums.h | 2 + src/gui/gcal-window.c | 55 +++++++- src/gui/gcal-window.ui | 143 ++++++++++++--------- src/gui/icons/calendar-agenda-symbolic.svg | 4 + src/gui/icons/icons.gresource.xml | 1 + src/gui/views/gcal-agenda-view.ui | 11 +- 6 files changed, 145 insertions(+), 71 deletions(-) create mode 100644 src/gui/icons/calendar-agenda-symbolic.svg diff --git a/src/gcal-enums.h b/src/gcal-enums.h index b9b14c2e..2e3cac17 100644 --- a/src/gcal-enums.h +++ b/src/gcal-enums.h @@ -35,6 +35,7 @@ typedef enum * GcalWindowViewType: * @GCAL_WINDOW_VIEW_WEEK: Week view * @GCAL_WINDOW_VIEW_MONTH: Month view + * GCAL_WINDOW_VIEW_AGENDA: Agenda/list view * * Enum with the available views. */ @@ -42,6 +43,7 @@ typedef enum { GCAL_WINDOW_VIEW_WEEK, GCAL_WINDOW_VIEW_MONTH, + GCAL_WINDOW_VIEW_AGENDA, GCAL_WINDOW_VIEW_N_VIEWS, } GcalWindowView; diff --git a/src/gui/gcal-window.c b/src/gui/gcal-window.c index 8d501d62..1954f175 100644 --- a/src/gui/gcal-window.c +++ b/src/gui/gcal-window.c @@ -109,7 +109,6 @@ struct _GcalWindow GtkWidget *month_view; GtkWidget *agenda_view; GtkWidget *date_chooser; - GtkWidget *action_bar; GcalSyncIndicator *sync_indicator; GcalToolbarEnd *toolbar_end; GcalToolbarEnd *sidebar_toolbar_end; @@ -203,6 +202,7 @@ update_today_action_enabled (GcalWindow *window) { case GCAL_WINDOW_VIEW_WEEK: case GCAL_WINDOW_VIEW_MONTH: + case GCAL_WINDOW_VIEW_AGENDA: enabled = g_date_time_get_year (window->active_date) != g_date_time_get_year (now) || g_date_time_get_week_of_year (window->active_date) != g_date_time_get_week_of_year (now); @@ -263,7 +263,6 @@ update_active_date (GcalWindow *window, for (i = 0; i < GCAL_WINDOW_VIEW_N_VIEWS; i++) gcal_view_set_date (GCAL_VIEW (window->views[i]), new_date); - gcal_view_set_date (GCAL_VIEW (window->agenda_view), new_date); gcal_view_set_date (GCAL_VIEW (window->date_chooser), new_date); update_today_action_enabled (window); @@ -333,10 +332,17 @@ content_title (GcalWindow *self, GcalWindowView active_view) { /* We check for NULL so we get the right page name during initialization */ - if (active_view == GCAL_WINDOW_VIEW_WEEK) - return g_strdup (_("Week")); - else - return g_strdup (_("Month")); + switch (active_view) + { + case GCAL_WINDOW_VIEW_WEEK: + return g_strdup (_("Week")); + case GCAL_WINDOW_VIEW_MONTH: + return g_strdup (_("Month")); + case GCAL_WINDOW_VIEW_AGENDA: + return g_strdup (_("Agenda")); + default: + return g_strdup (_("Calendar")); + } } static inline void @@ -594,6 +600,32 @@ on_window_undo_delete_event_cb (GSimpleAction *action, GCAL_EXIT; } +static void +on_breakpoint_changed (GObject *object, + GParamSpec *pspec, + GcalWindow *window) +{ + gint32 view = window->active_view; + + while (!adw_view_stack_page_get_visible (adw_view_stack_get_page (window->views_stack, window->views[view]))) + { + view--; + + if (view < 0) + view += GCAL_WINDOW_VIEW_N_VIEWS; + + if (view == window->active_view) + return; + } + + if (window->active_view != 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 (window), properties[PROP_ACTIVE_VIEW]); + } +} + static void view_changed (GObject *object, GParamSpec *pspec, @@ -610,6 +642,14 @@ view_changed (GObject *object, if (!gtk_widget_get_visible (GTK_WIDGET (window->views_stack))) return; + /* + * As there are no guarantees for the order of AdwBreakpoint setters, + * it is possible that the agenda view disappears before the month and + * week views reappears, and vice versa. + */ + if (!adw_view_stack_get_visible_child_name (window->views_stack)) + return; + eklass = g_type_class_ref (GCAL_TYPE_WINDOW_VIEW); eval = g_enum_get_value_by_nick (eklass, adw_view_stack_get_visible_child_name (window->views_stack)); @@ -1271,7 +1311,6 @@ gcal_window_class_init (GcalWindowClass *klass) gtk_widget_class_bind_template_child (widget_class, GcalWindow, header_bar); gtk_widget_class_bind_template_child (widget_class, GcalWindow, menu_button); gtk_widget_class_bind_template_child (widget_class, GcalWindow, month_view); - gtk_widget_class_bind_template_child (widget_class, GcalWindow, action_bar); gtk_widget_class_bind_template_child (widget_class, GcalWindow, quick_add_popover); gtk_widget_class_bind_template_child (widget_class, GcalWindow, overlay); gtk_widget_class_bind_template_child (widget_class, GcalWindow, sidebar_toolbar_end); @@ -1285,6 +1324,7 @@ gcal_window_class_init (GcalWindowClass *klass) gtk_widget_class_bind_template_child (widget_class, GcalWindow, drop_overlay); gtk_widget_class_bind_template_child (widget_class, GcalWindow, drop_target); + gtk_widget_class_bind_template_callback (widget_class, on_breakpoint_changed); gtk_widget_class_bind_template_callback (widget_class, view_changed); /* Event creation related */ @@ -1329,6 +1369,7 @@ gcal_window_init (GcalWindow *self) self->views[GCAL_WINDOW_VIEW_WEEK] = self->week_view; self->views[GCAL_WINDOW_VIEW_MONTH] = self->month_view; + self->views[GCAL_WINDOW_VIEW_AGENDA] = self->agenda_view; self->active_date = g_date_time_new_from_unix_local (0); self->rtl = gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL; diff --git a/src/gui/gcal-window.ui b/src/gui/gcal-window.ui index 34a8157b..7efd9db3 100644 --- a/src/gui/gcal-window.ui +++ b/src/gui/gcal-window.ui @@ -80,6 +80,13 @@ 1 + + + <Alt>3 + action(win.change-view) + 3 + + <Ctrl>n @@ -147,82 +154,52 @@ - - vertical - - - - - - - - - - - - open-menu-symbolic - win_menu - Main Menu - True - - + + + + + + + + + + open-menu-symbolic + win_menu + Main Menu + True + + + + + vertical - False + True False - - - - - - - - True - - - + + + - - - - False - - - win.today - - - _Today - True - calendar-today-symbolic - True - Go to Today - - - - - - - - - - + + False + @@ -279,7 +256,7 @@ - + week _Week True @@ -294,7 +271,7 @@ - + month _Month True @@ -309,9 +286,48 @@ + + + agenda + _Agenda + True + calendar-agenda-symbolic + False + + + True + + + + + + + + + + + + win.today + + + _Today + True + calendar-today-symbolic + True + Go to Today + + + + + + + + + + @@ -321,14 +337,19 @@ + + max-width: 700sp True - True - True - - False + False + True + + + False + False + True diff --git a/src/gui/icons/calendar-agenda-symbolic.svg b/src/gui/icons/calendar-agenda-symbolic.svg new file mode 100644 index 00000000..0bb7aeff --- /dev/null +++ b/src/gui/icons/calendar-agenda-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/gui/icons/icons.gresource.xml b/src/gui/icons/icons.gresource.xml index 4ec18af5..40ef09d1 100644 --- a/src/gui/icons/icons.gresource.xml +++ b/src/gui/icons/icons.gresource.xml @@ -2,6 +2,7 @@ add-reminder-symbolic.svg + calendar-agenda-symbolic.svg calendar-month-symbolic.svg calendar-week-symbolic.svg calendar-today-symbolic.svg diff --git a/src/gui/views/gcal-agenda-view.ui b/src/gui/views/gcal-agenda-view.ui index 16a43b66..6ca98c56 100644 --- a/src/gui/views/gcal-agenda-view.ui +++ b/src/gui/views/gcal-agenda-view.ui @@ -2,6 +2,14 @@