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
+
+
+
+
+
+ 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 @@
vertical
+
+
+ False
+ False
+ end
+
+
+
True
@@ -12,9 +20,6 @@
none
True
-
False