[gnome-todo] sidebar: Activate appropriate rows when selected one vanishes
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] sidebar: Activate appropriate rows when selected one vanishes
- Date: Sun, 9 Jun 2019 19:52:31 +0000 (UTC)
commit a34d3b5df8df40cd132700bea3288463544551f3
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sun Jun 9 16:48:06 2019 -0300
sidebar: Activate appropriate rows when selected one vanishes
src/sidebar/gtd-sidebar.c | 61 ++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 58 insertions(+), 3 deletions(-)
---
diff --git a/src/sidebar/gtd-sidebar.c b/src/sidebar/gtd-sidebar.c
index ef61ef6..aa4f0fd 100644
--- a/src/sidebar/gtd-sidebar.c
+++ b/src/sidebar/gtd-sidebar.c
@@ -55,16 +55,18 @@ G_DEFINE_TYPE (GtdSidebar, gtd_sidebar, GTK_TYPE_BOX)
* Auxiliary methods
*/
-static void
+static gboolean
activate_row_below (GtdSidebar *self,
GtdSidebarListRow *current_row)
{
g_autoptr (GList) children = NULL;
GtkWidget *next_row;
+ GtkWidget *parent;
GList *l;
gboolean after_deleted;
- children = gtk_container_get_children (GTK_CONTAINER (self->listbox));
+ parent = gtk_widget_get_parent (GTK_WIDGET (current_row));
+ children = gtk_container_get_children (GTK_CONTAINER (parent));
after_deleted = FALSE;
next_row = NULL;
@@ -92,6 +94,8 @@ activate_row_below (GtdSidebar *self,
if (next_row)
g_signal_emit_by_name (next_row, "activate");
+
+ return next_row != NULL;
}
static void
@@ -233,6 +237,20 @@ get_row_for_task_list (GtdSidebar *self,
list);
}
+static void
+activate_appropriate_row (GtdSidebar *self,
+ GtkListBoxRow *row)
+{
+ GtkListBoxRow *to_be_activated;
+
+ if (activate_row_below (self, GTD_SIDEBAR_LIST_ROW (row)))
+ return;
+
+ gtd_sidebar_set_archive_visible (self, FALSE);
+
+ to_be_activated = gtk_list_box_get_row_at_index (self->listbox, 0);
+ g_signal_emit_by_name (to_be_activated, "activate");
+}
/*
* Callbacks
@@ -314,7 +332,7 @@ on_task_list_panel_list_deleted_cb (GtdTaskListPanel *panel,
* there are no other task list after this one).
*/
if (gtk_list_box_row_is_selected (GTK_LIST_BOX_ROW (row)))
- activate_row_below (self, row);
+ activate_appropriate_row (self, GTK_LIST_BOX_ROW (row));
gtk_widget_hide (GTK_WIDGET (row));
}
@@ -451,6 +469,42 @@ on_task_list_added_cb (GtdManager *manager,
add_task_list (self, list);
}
+static void
+on_task_list_changed_cb (GtdManager *manager,
+ GtdTaskList *list,
+ GtdSidebar *self)
+{
+ GtkListBoxRow *row;
+ gboolean archived;
+
+ archived = gtd_task_list_get_archived (list);
+ row = get_row_for_task_list (self,
+ archived ? self->archive_listbox : self->listbox,
+ list);
+
+ /*
+ * The task was either archived or unarchived; remove it and add to
+ * the appropriate listbox.
+ */
+ if (!row)
+ {
+ row = get_row_for_task_list (self,
+ archived ? self->listbox : self->archive_listbox,
+ list);
+ g_assert (row != NULL);
+
+ /* Change to another panel or taklist */
+ if (gtk_list_box_row_is_selected (row))
+ activate_appropriate_row (self, row);
+
+ /* Destroy the old row */
+ gtk_widget_destroy (GTK_WIDGET (row));
+
+ /* Add a new row */
+ add_task_list (self, list);
+ }
+}
+
static void
on_task_list_removed_cb (GtdManager *manager,
GtdTaskList *list,
@@ -625,6 +679,7 @@ gtd_sidebar_constructed (GObject *object)
}
g_signal_connect (manager, "list-added", G_CALLBACK (on_task_list_added_cb), self);
+ g_signal_connect (manager, "list-changed", G_CALLBACK (on_task_list_changed_cb), self);
g_signal_connect (manager, "list-removed", G_CALLBACK (on_task_list_removed_cb), self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]