[gnome-todo] task-list-panel: Handle renaming lists
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] task-list-panel: Handle renaming lists
- Date: Sun, 16 Dec 2018 02:05:59 +0000 (UTC)
commit 8873274c5d168791ccc8bf84cdb202d961a843bc
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sat Dec 15 23:54:08 2018 -0200
task-list-panel: Handle renaming lists
Also in order to implement the proposed mockups.
src/gtd-task-list-panel.c | 78 +++++++++++++++++++++++++++++++++
src/gtd-task-list-panel.ui | 60 +++++++++++++++++++++++++
src/sidebar/gtd-sidebar-list-row.c | 87 +------------------------------------
src/sidebar/gtd-sidebar-list-row.ui | 57 ------------------------
4 files changed, 139 insertions(+), 143 deletions(-)
---
diff --git a/src/gtd-task-list-panel.c b/src/gtd-task-list-panel.c
index ee92184..5f0dd40 100644
--- a/src/gtd-task-list-panel.c
+++ b/src/gtd-task-list-panel.c
@@ -35,6 +35,8 @@ struct _GtdTaskListPanel
GtkFlowBox *colors_flowbox;
GtkPopover *popover;
+ GtkWidget *rename_button;
+ GtkEntry *rename_entry;
GtdTaskListView *task_list_view;
GtkWidget *previous_color_button;
@@ -145,6 +147,38 @@ update_selected_color (GtdTaskListPanel *self)
}
}
+static void
+rename_list (GtdTaskListPanel *self)
+{
+ g_autofree gchar *new_name = NULL;
+ GtdTaskList *list;
+
+ g_assert (gtk_widget_get_visible (GTK_WIDGET (self->popover)));
+ g_assert (g_utf8_validate (gtk_entry_get_text (self->rename_entry), -1, NULL));
+
+ list = GTD_TASK_LIST (gtd_task_list_view_get_model (self->task_list_view));
+ g_assert (list != NULL);
+
+ new_name = g_strdup (gtk_entry_get_text (self->rename_entry));
+ new_name = g_strstrip (new_name);
+
+ /*
+ * Even though the Rename button is insensitive, we may still reach here
+ * by activating the entry.
+ */
+ if (!new_name || new_name[0] == '\0')
+ return;
+
+ if (g_strcmp0 (gtk_entry_get_text (self->rename_entry), gtd_task_list_get_name (list)) != 0)
+ {
+ gtd_task_list_set_name (list, gtk_entry_get_text (self->rename_entry));
+ gtd_provider_update_task_list (gtd_task_list_get_provider (list), list);
+ }
+
+ gtk_popover_popdown (self->popover);
+ gtk_entry_set_text (self->rename_entry, "");
+}
+
/*
* Callbacks
@@ -197,6 +231,44 @@ on_delete_button_clicked_cb (GtkModelButton *button,
g_signal_emit (self, signals[LIST_DELETED], 0, list);
}
+static void
+on_popover_hidden_cb (GtkPopover *popover,
+ GtdTaskListPanel *self)
+{
+ gtk_entry_set_text (self->rename_entry, "");
+}
+
+static void
+on_rename_button_clicked_cb (GtkButton *button,
+ GtdTaskListPanel *self)
+{
+ rename_list (self);
+}
+
+static void
+on_rename_entry_activated_cb (GtkEntry *entry,
+ GtdTaskListPanel *self)
+{
+ rename_list (self);
+}
+
+static void
+on_rename_entry_text_changed_cb (GtkEntry *entry,
+ GParamSpec *pspec,
+ GtdTaskListPanel *self)
+{
+
+ g_autofree gchar *new_name = NULL;
+ gboolean valid;
+
+ new_name = g_strdup (gtk_entry_get_text (self->rename_entry));
+ new_name = g_strstrip (new_name);
+
+ valid = new_name && new_name[0] != '\0';
+
+ gtk_widget_set_sensitive (self->rename_button, valid);
+}
+
/*
* GtdPanel iface
@@ -363,10 +435,16 @@ gtd_task_list_panel_class_init (GtdTaskListPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, GtdTaskListPanel, colors_flowbox);
gtk_widget_class_bind_template_child (widget_class, GtdTaskListPanel, popover);
+ gtk_widget_class_bind_template_child (widget_class, GtdTaskListPanel, rename_button);
+ gtk_widget_class_bind_template_child (widget_class, GtdTaskListPanel, rename_entry);
gtk_widget_class_bind_template_child (widget_class, GtdTaskListPanel, task_list_view);
gtk_widget_class_bind_template_callback (widget_class, on_colors_flowbox_child_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, on_delete_button_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class, on_popover_hidden_cb);
+ gtk_widget_class_bind_template_callback (widget_class, on_rename_button_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class, on_rename_entry_activated_cb);
+ gtk_widget_class_bind_template_callback (widget_class, on_rename_entry_text_changed_cb);
}
static void
diff --git a/src/gtd-task-list-panel.ui b/src/gtd-task-list-panel.ui
index 6ffe714..01a23c2 100644
--- a/src/gtd-task-list-panel.ui
+++ b/src/gtd-task-list-panel.ui
@@ -15,6 +15,8 @@
<!-- Popover -->
<object class="GtkPopoverMenu" id="popover">
<property name="visible">false</property>
+ <signal name="hide" handler="on_popover_hidden_cb" object="GtdTaskListPanel" swapped="no" />
+
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
@@ -31,6 +33,13 @@
</object>
</child>
+ <child>
+ <object class="GtkModelButton">
+ <property name="text" translatable="yes">Rename</property>
+ <property name="menu-name">rename</property>
+ </object>
+ </child>
+
<child>
<object class="GtkModelButton">
<property name="text" translatable="yes">Clear completed tasks…</property>
@@ -51,5 +60,56 @@
</child>
</object>
</child>
+
+ <!-- Rename submenu -->
+ <child>
+ <object class="GtkBox">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="margin">12</property>
+
+ <child>
+ <object class="GtkModelButton" id="rename_header_button">
+ <property name="text" translatable="yes">Rename</property>
+ <property name="menu-name">main</property>
+ <property name="inverted">true</property>
+ <property name="centered">true</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkBox">
+ <property name="can_focus">False</property>
+ <property name="spacing">12</property>
+
+ <!-- Entry -->
+ <child>
+ <object class="GtkEntry" id="rename_entry">
+ <signal name="activate" handler="on_rename_entry_activated_cb" object="GtdTaskListPanel"
swapped="no" />
+ <signal name="notify::text" handler="on_rename_entry_text_changed_cb"
object="GtdTaskListPanel" swapped="no" />
+ </object>
+ </child>
+
+ <!-- Button -->
+ <child>
+ <object class="GtkButton" id="rename_button">
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Rename</property>
+ <signal name="clicked" handler="on_rename_button_clicked_cb" object="GtdTaskListPanel"
swapped="no" />
+ <style>
+ <class name="destructive-action"/>
+ </style>
+ </object>
+ </child>
+
+ </object>
+ </child>
+
+ </object>
+ <packing>
+ <property name="submenu">rename</property>
+ </packing>
+ </child>
</object>
</interface>
diff --git a/src/sidebar/gtd-sidebar-list-row.c b/src/sidebar/gtd-sidebar-list-row.c
index 4f35d2d..4224304 100644
--- a/src/sidebar/gtd-sidebar-list-row.c
+++ b/src/sidebar/gtd-sidebar-list-row.c
@@ -38,10 +38,6 @@ struct _GtdSidebarListRow
GtkImage *color_icon;
GtkLabel *name_label;
- GtkWidget *rename_button;
- GtkEntry *rename_entry;
- GtkLabel *rename_label;
- GtkPopover *rename_popover;
GtkLabel *tasks_counter_label;
GActionMap *action_group;
@@ -142,28 +138,6 @@ set_list (GtdSidebarListRow *self,
G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
}
-static void
-rename_list (GtdSidebarListRow *self)
-{
- g_assert (gtk_widget_get_visible (GTK_WIDGET (self->rename_popover)));
- g_assert (g_utf8_validate (gtk_entry_get_text (self->rename_entry), -1, NULL));
-
- /*
- * Even though the Rename button is insensitive, we may still reach here
- * by activating the entry.
- */
- if (gtk_entry_get_text_length (self->rename_entry) == 0)
- return;
-
- if (g_strcmp0 (gtk_entry_get_text (self->rename_entry), gtd_task_list_get_name (self->list)) != 0)
- {
- gtd_task_list_set_name (self->list, gtk_entry_get_text (self->rename_entry));
- gtd_provider_update_task_list (gtd_task_list_get_provider (self->list), self->list);
- }
-
- gtk_popover_popdown (self->rename_popover);
-}
-
static void
popup_menu (GtdSidebarListRow *self)
{
@@ -182,31 +156,6 @@ popup_menu (GtdSidebarListRow *self)
* Callbacks
*/
-static void
-on_rename_action_activated_cb (GSimpleAction *action,
- GVariant *parameters,
- gpointer user_data)
-{
- GtdSidebarListRow *self;
- g_autofree gchar *text;
-
- GTD_ENTRY;
-
- self = GTD_SIDEBAR_LIST_ROW (user_data);
-
- g_assert (self->list != NULL);
-
- text = g_strdup_printf (_("Rename %s"), gtd_task_list_get_name (self->list));
- gtk_label_set_label (self->rename_label, text);
-
- gtk_entry_set_text (self->rename_entry, gtd_task_list_get_name (self->list));
-
- gtk_popover_set_relative_to (self->rename_popover, GTK_WIDGET (self));
- gtk_popover_popup (self->rename_popover);
-
- GTD_EXIT;
-}
-
static void
on_gesture_multipress_released_cb (GtkGesture *gesture,
guint n_press,
@@ -243,30 +192,6 @@ on_list_color_changed_cb (GtdTaskList *list,
update_color_icon (self);
}
-static void
-on_rename_button_clicked_cb (GtkButton *button,
- GtdSidebarListRow *self)
-{
- rename_list (self);
-}
-
-static void
-on_rename_entry_activated_cb (GtkEntry *entry,
- GtdSidebarListRow *self)
-{
- rename_list (self);
-}
-
-static void
-on_rename_entry_text_changed_cb (GtkEntry *entry,
- GParamSpec *pspec,
- GtdSidebarListRow *self)
-{
- gboolean valid = gtk_entry_get_text_length (entry) > 0;
-
- gtk_widget_set_sensitive (self->rename_button, valid);
-}
-
static void
on_rename_popover_hidden_cb (GtkPopover *popover,
GtdSidebarListRow *self)
@@ -356,27 +281,17 @@ gtd_sidebar_list_row_class_init (GtdSidebarListRowClass *klass)
gtk_widget_class_bind_template_child (widget_class, GtdSidebarListRow, color_icon);
gtk_widget_class_bind_template_child (widget_class, GtdSidebarListRow, menu);
gtk_widget_class_bind_template_child (widget_class, GtdSidebarListRow, name_label);
- gtk_widget_class_bind_template_child (widget_class, GtdSidebarListRow, rename_button);
- gtk_widget_class_bind_template_child (widget_class, GtdSidebarListRow, rename_entry);
- gtk_widget_class_bind_template_child (widget_class, GtdSidebarListRow, rename_label);
- gtk_widget_class_bind_template_child (widget_class, GtdSidebarListRow, rename_popover);
gtk_widget_class_bind_template_child (widget_class, GtdSidebarListRow, tasks_counter_label);
gtk_widget_class_bind_template_callback (widget_class, on_gesture_long_press_cb);
gtk_widget_class_bind_template_callback (widget_class, on_gesture_multipress_released_cb);
- gtk_widget_class_bind_template_callback (widget_class, on_rename_button_clicked_cb);
- gtk_widget_class_bind_template_callback (widget_class, on_rename_entry_activated_cb);
- gtk_widget_class_bind_template_callback (widget_class, on_rename_entry_text_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, on_rename_popover_hidden_cb);
}
static void
gtd_sidebar_list_row_init (GtdSidebarListRow *self)
{
- const GActionEntry entries[] =
- {
- { "rename", on_rename_action_activated_cb },
- };
+ const GActionEntry entries[] = { };
gtk_widget_init_template (GTK_WIDGET (self));
diff --git a/src/sidebar/gtd-sidebar-list-row.ui b/src/sidebar/gtd-sidebar-list-row.ui
index b38904c..b371eb3 100644
--- a/src/sidebar/gtd-sidebar-list-row.ui
+++ b/src/sidebar/gtd-sidebar-list-row.ui
@@ -60,63 +60,6 @@
</child>
</template>
- <!-- Rename popover -->
- <object class="GtkPopover" id="rename_popover">
- <property name="visible">false</property>
- <property name="can_focus">False</property>
- <property name="position">right</property>
- <signal name="hide" handler="on_rename_popover_hidden_cb" object="GtdSidebarListRow" swapped="no" />
-
- <child>
- <object class="GtkBox">
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <property name="margin">12</property>
-
- <child>
- <object class="GtkLabel" id="rename_label">
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0.0</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
-
- <child>
- <object class="GtkBox">
- <property name="can_focus">False</property>
- <property name="spacing">12</property>
-
- <!-- Entry -->
- <child>
- <object class="GtkEntry" id="rename_entry">
- <signal name="activate" handler="on_rename_entry_activated_cb" object="GtdSidebarListRow"
swapped="no" />
- <signal name="notify::text" handler="on_rename_entry_text_changed_cb"
object="GtdSidebarListRow" swapped="no" />
- </object>
- </child>
-
- <!-- Button -->
- <child>
- <object class="GtkButton" id="rename_button">
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Rename</property>
- <signal name="clicked" handler="on_rename_button_clicked_cb" object="GtdSidebarListRow"
swapped="no" />
- <style>
- <class name="destructive-action"/>
- </style>
- </object>
- </child>
-
- </object>
- </child>
-
- </object>
- </child>
- </object>
-
<!-- Right-click menu -->
<menu id="menu">
<section>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]