[gnome-notes] bjb-list-view: Update note title/content when needed



commit 9c5b0a5c94dc9c03d89608ebe0f89d4555130d7d
Author: Jonathan Kang <jonathankang gnome org>
Date:   Thu Aug 5 15:09:43 2021 +0800

    bjb-list-view: Update note title/content when needed
    
    Update the note title/content in the list row if a note's title or
    content is amended.
    
    https://gitlab.gnome.org/GNOME/gnome-notes/-/issues/154

 src/bjb-list-view-row.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
---
diff --git a/src/bjb-list-view-row.c b/src/bjb-list-view-row.c
index af241ef8..77af156b 100644
--- a/src/bjb-list-view-row.c
+++ b/src/bjb-list-view-row.c
@@ -19,6 +19,7 @@
  */
 
 #include <biji-string.h>
+#include "bjb-application.h"
 #include "bjb-list-view.h"
 #include "bjb-list-view-row.h"
 #include "bjb-utils.h"
@@ -36,10 +37,50 @@ struct _BjbListViewRow
 
   char           *uuid;
   char           *model_iter;
+
+  gulong          display_note_amended;
 };
 
 G_DEFINE_TYPE (BjbListViewRow, bjb_list_view_row, GTK_TYPE_LIST_BOX_ROW);
 
+static void
+on_manager_changed (BijiManager            *manager,
+                    BijiItemsGroup          group,
+                    BijiManagerChangeFlag   flag,
+                    gpointer               *biji_item,
+                    BjbListViewRow         *self)
+{
+  BijiItem *item = BIJI_ITEM (biji_item);
+  BijiNoteObj *note_obj = BIJI_NOTE_OBJ (item);
+
+  /* Note title/content amended. */
+  if (flag == BIJI_MANAGER_NOTE_AMENDED)
+    {
+      if (g_strcmp0 (self->uuid, biji_item_get_uuid (item)) == 0)
+        {
+          if (biji_note_obj_get_title (note_obj) != NULL &&
+              g_strcmp0 (gtk_label_get_text (self->title),
+                         biji_note_obj_get_title (note_obj)) != 0)
+            {
+              gtk_label_set_text (self->title, biji_note_obj_get_title (note_obj));
+            }
+          if (biji_note_obj_get_raw_text (note_obj) != NULL &&
+              g_strcmp0 (gtk_label_get_text (self->content),
+                         biji_note_obj_get_raw_text (note_obj)) != 0)
+            {
+              g_auto(GStrv)   lines         = NULL;
+              g_autofree char *one_line     = NULL;
+              g_autofree char *preview      = NULL;
+
+              lines = g_strsplit (biji_note_obj_get_raw_text (note_obj), "\n", -1);
+              one_line = g_strjoinv (" ", lines);
+              preview = biji_str_clean (one_line);
+              gtk_label_set_text (self->content, preview);
+            }
+        }
+    }
+}
+
 static void
 on_toggled_cb (BjbListViewRow *self,
                gpointer        data)
@@ -76,6 +117,7 @@ bjb_list_view_row_setup (BjbListViewRow *self,
   GdkRGBA          rgba;
   gboolean         selected;
   BjbController   *controller;
+  BijiManager     *manager;
   GtkListBox      *list_box;
   g_auto (GStrv)   lines        = NULL;
   g_autofree char *one_line     = NULL;
@@ -138,6 +180,14 @@ bjb_list_view_row_setup (BjbListViewRow *self,
   else
     gtk_list_box_unselect_row (list_box, GTK_LIST_BOX_ROW (self));
 
+  if (self->display_note_amended != 0)
+    {
+      g_signal_handler_disconnect (controller, self->display_note_amended);
+    }
+
+  manager = bijiben_get_manager (BJB_APPLICATION (g_application_get_default ()));
+  self->display_note_amended = g_signal_connect (manager, "changed",
+                                                 G_CALLBACK (on_manager_changed), self);
 }
 
 const char *
@@ -161,6 +211,14 @@ bjb_list_view_row_finalize (GObject *object)
   g_free (self->uuid);
   g_free (self->model_iter);
 
+  if (self->display_note_amended != 0)
+    {
+      BijiManager *manager;
+
+      manager = bijiben_get_manager (BJB_APPLICATION (g_application_get_default ()));
+      g_signal_handler_disconnect (manager, self->display_note_amended);
+    }
+
   G_OBJECT_CLASS (bjb_list_view_row_parent_class)->finalize (object);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]