From 375b9fc53c643af13f742eb2d643bad4a3aadda6 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sun, 2 Jun 2019 15:39:21 -0300 Subject: [PATCH] calendar-management-dialog: Response to page switch --- .../gcal-calendar-management-dialog.c | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/src/gui/calendar-management/gcal-calendar-management-dialog.c b/src/gui/calendar-management/gcal-calendar-management-dialog.c index 37521d36..5dd37a2d 100644 --- a/src/gui/calendar-management/gcal-calendar-management-dialog.c +++ b/src/gui/calendar-management/gcal-calendar-management-dialog.c @@ -1336,10 +1336,52 @@ remove_button_clicked (GtkWidget *button, } #endif +static void +set_page (GcalCalendarManagementDialog *self, + const gchar *page_name, + gpointer page_data) +{ + GcalCalendarManagementPage *current_page; + guint i; + + GCAL_TRACE_MSG ("Switching to page '%s'", page_name); + + current_page = (GcalCalendarManagementPage*) gtk_stack_get_visible_child (GTK_STACK (self->stack)); + + for (i = 0; i < N_PAGES; i++) + { + GcalCalendarManagementPage *page = self->pages[i]; + + if (g_strcmp0 (page_name, gcal_calendar_management_page_get_name (page)) != 0) + continue; + + gtk_stack_set_visible_child (GTK_STACK (self->stack), GTK_WIDGET (page)); + gtk_header_bar_set_title (GTK_HEADER_BAR (self->headerbar), + gcal_calendar_management_page_get_title (page)); + gcal_calendar_management_page_activate (page, page_data); + break; + } + + gcal_calendar_management_page_deactivate (current_page); +} + /* * Callbacks */ +static void +on_page_switched_cb (GcalCalendarManagementPage *page, + const gchar *next_page, + gpointer page_data, + GcalCalendarManagementDialog *self) +{ + GCAL_ENTRY; + + set_page (self, next_page, page_data); + + GCAL_EXIT; +} + static void setup_context (GcalCalendarManagementDialog *self) { @@ -1353,7 +1395,7 @@ setup_context (GcalCalendarManagementDialog *self) GCAL_ENTRY; - for (i = 0; i < G_N_ELEMENTS (pages); i++) + for (i = 0; i < N_PAGES; i++) { GcalCalendarManagementPage *page; @@ -1367,9 +1409,17 @@ setup_context (GcalCalendarManagementDialog *self) gcal_calendar_management_page_get_name (page), gcal_calendar_management_page_get_title (page)); - self->pages[pages[i].page_type] = page; + g_signal_connect_object (page, + "switch-page", + G_CALLBACK (on_page_switched_cb), + self, + 0); + + self->pages[i] = page; } + set_page (self, "calendars", NULL); + GCAL_EXIT; }