[gnome-notes] note-view: Simplify



commit 58081113f4595d2844ebd0c952e65afa4044d4c4
Author: Mohammed Sadiq <sadiq sadiqpk org>
Date:   Wed Jun 1 14:50:47 2022 +0530

    note-view: Simplify
    
    Set note after note-view is created.  Eventually we shall use
    a single note view for every note instead of creating
    a view for every open note.

 data/resources/bjb-window.ui |   9 +++
 src/bjb-note-view.c          | 158 ++++++++++++++-----------------------------
 src/bjb-note-view.h          |   4 +-
 src/bjb-window.c             |  27 ++------
 4 files changed, 70 insertions(+), 128 deletions(-)
---
diff --git a/data/resources/bjb-window.ui b/data/resources/bjb-window.ui
index 4e29d2c0..74b8bad5 100644
--- a/data/resources/bjb-window.ui
+++ b/data/resources/bjb-window.ui
@@ -160,6 +160,15 @@
                 </child>
               </object>
             </child>
+            <child>
+              <object class="BjbNoteView" id="note_view">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="fill">True</property>
+                <property name="expand">True</property>
+              </packing>
+            </child>
           </object>
         </child>
       </object>
diff --git a/src/bjb-note-view.c b/src/bjb-note-view.c
index 012e921e..fee132ca 100644
--- a/src/bjb-note-view.c
+++ b/src/bjb-note-view.c
@@ -24,15 +24,6 @@
 #include "bjb-editor-toolbar.h"
 #include "bjb-note-view.h"
 
-enum
-{
-  PROP_0,
-  PROP_NOTE,
-  NUM_PROPERTIES
-};
-
-static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
-
 struct _BjbNoteView
 {
   GtkOverlay         parent_instance;
@@ -70,7 +61,8 @@ bjb_note_view_set_detached (BjbNoteView *self,
 static void
 bjb_note_view_disconnect (BjbNoteView *self)
 {
-  g_signal_handlers_disconnect_by_func (self->note, on_note_color_changed_cb, self);
+  if (self->note)
+    g_signal_handlers_disconnect_by_func (self->note, on_note_color_changed_cb, self);
 }
 
 
@@ -86,44 +78,6 @@ bjb_note_view_finalize(GObject *object)
   G_OBJECT_CLASS (bjb_note_view_parent_class)->finalize (object);
 }
 
-static void
-bjb_note_view_get_property (GObject      *object,
-                            guint        prop_id,
-                            GValue       *value,
-                            GParamSpec   *pspec)
-{
-  BjbNoteView *self = BJB_NOTE_VIEW (object);
-
-  switch (prop_id)
-  {
-    case PROP_NOTE:
-      g_value_set_object (value, self->note);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-bjb_note_view_set_property ( GObject        *object,
-                             guint          prop_id,
-                             const GValue   *value,
-                             GParamSpec     *pspec)
-{
-  BjbNoteView *self = BJB_NOTE_VIEW (object);
-
-  switch (prop_id)
-  {
-    case PROP_NOTE:
-      self->note = g_value_get_object(value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
 static void
 bjb_note_view_init (BjbNoteView *self)
 {
@@ -151,6 +105,9 @@ view_font_changed_cb (BjbNoteView *self,
   g_assert (BJB_IS_NOTE_VIEW (self));
   g_assert (BJB_IS_SETTINGS (settings));
 
+  if (!self->view)
+    return;
+
   default_font = bjb_settings_get_font (settings);
 
   if (default_font != NULL)
@@ -165,19 +122,13 @@ bjb_note_view_constructed (GObject *obj)
 {
   BjbNoteView            *self = BJB_NOTE_VIEW (obj);
   BjbSettings            *settings;
-  g_autofree gchar       *default_font = NULL;
-  GdkRGBA                 color;
-  BjbTextSizeType         text_size;
 
   settings = bjb_app_get_settings(g_application_get_default());
 
   g_signal_connect_object (settings, "notify::font",
                            G_CALLBACK (view_font_changed_cb),
                            self, G_CONNECT_SWAPPED);
-
-
-  /* view new from note deserializes the note-content. */
-  self->view = biji_note_obj_open (self->note);
+  view_font_changed_cb (self, NULL, settings);
 
   self->stack = gtk_stack_new ();
   gtk_widget_show (self->stack);
@@ -193,67 +144,62 @@ bjb_note_view_constructed (GObject *obj)
   gtk_stack_add_named (GTK_STACK (self->stack), self->box, "note-box");
   gtk_stack_set_visible_child (GTK_STACK (self->stack), self->box);
 
-  /* Text Editor (WebKitMainView) */
-  gtk_box_pack_start (GTK_BOX (self->box), GTK_WIDGET(self->view), TRUE, TRUE, 0);
-  gtk_widget_show (self->view);
-
-  /* Apply the gsettings font */
-  default_font = bjb_settings_get_font (settings);
+  /* Edition Toolbar for text selection */
+  self->edit_bar = g_object_new (BJB_TYPE_EDITOR_TOOLBAR, NULL);
+  gtk_box_pack_end (GTK_BOX (self->box), self->edit_bar, FALSE, TRUE, 0);
+}
 
-  if (default_font != NULL)
-    biji_webkit_editor_set_font (BIJI_WEBKIT_EDITOR (self->view), default_font);
+static void
+bjb_note_view_class_init (BjbNoteViewClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-  /* Apply the gsettings text size */
-  text_size = bjb_settings_get_text_size (settings);
-  biji_webkit_editor_set_text_size (BIJI_WEBKIT_EDITOR (self->view), text_size);
+  object_class->finalize = bjb_note_view_finalize;
+  object_class->constructed = bjb_note_view_constructed;
+}
 
-  /* User defined color */
+void
+bjb_note_view_set_note (BjbNoteView *self,
+                        BijiNoteObj *note)
+{
+  g_return_if_fail (BJB_IS_NOTE_VIEW (self));
+  g_return_if_fail (!note || BIJI_IS_NOTE_OBJ (note));
 
-  if (!biji_note_obj_get_rgba(self->note, &color))
-  {
-    if (gdk_rgba_parse (&color, bjb_settings_get_default_color (settings)))
-      biji_note_obj_set_rgba (self->note, &color);
-  }
+  if (self->note == note)
+    return;
 
-  g_signal_connect (self->note, "color-changed",
-                    G_CALLBACK (on_note_color_changed_cb), self);
+  bjb_editor_toolbar_set_note (BJB_EDITOR_TOOLBAR (self->edit_bar), note);
+  if (note)
+    gtk_widget_set_visible (self->edit_bar, !biji_note_obj_is_trashed (note));
+  bjb_note_view_disconnect (self);
 
+  self->note = note;
+  if (self->view)
+    gtk_widget_destroy (self->view);
+  g_clear_object (&self->view);
 
-  /* Edition Toolbar for text selection */
-  if (!biji_note_obj_is_trashed (BIJI_NOTE_OBJ (self->note)))
+  if (note)
     {
-      self->edit_bar = g_object_new (BJB_TYPE_EDITOR_TOOLBAR, NULL);
-      bjb_editor_toolbar_set_note (BJB_EDITOR_TOOLBAR (self->edit_bar), self->note);
+      GdkRGBA color;
 
-      gtk_box_pack_start (GTK_BOX (self->box), self->edit_bar, FALSE, TRUE, 0);
-    }
-}
+      /* Text Editor (WebKitMainView) */
+      self->view = biji_note_obj_open (note);
+      gtk_widget_show (self->view);
+      gtk_box_pack_start (GTK_BOX (self->box), GTK_WIDGET(self->view), TRUE, TRUE, 0);
 
-BjbNoteView *
-bjb_note_view_new (BijiNoteObj *note)
-{
-  return g_object_new (BJB_TYPE_NOTE_VIEW,
-                       "note", note,
-                       NULL);
-}
+      if (!biji_note_obj_get_rgba (self->note, &color))
+        {
+          BjbSettings *settings;
 
-static void
-bjb_note_view_class_init (BjbNoteViewClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+          settings = bjb_app_get_settings (g_application_get_default ());
 
-  object_class->finalize = bjb_note_view_finalize;
-  object_class->constructed = bjb_note_view_constructed;
-  object_class->get_property = bjb_note_view_get_property;
-  object_class->set_property = bjb_note_view_set_property;
-
-  properties[PROP_NOTE] = g_param_spec_object ("note",
-                                               "Note",
-                                               "Note",
-                                               BIJI_TYPE_NOTE_OBJ,
-                                               G_PARAM_READWRITE |
-                                               G_PARAM_CONSTRUCT |
-                                               G_PARAM_STATIC_STRINGS);
-
-  g_object_class_install_property (object_class,PROP_NOTE,properties[PROP_NOTE]);
+          if (gdk_rgba_parse (&color, bjb_settings_get_default_color (settings)))
+            biji_note_obj_set_rgba (self->note, &color);
+        }
+
+      g_signal_connect (self->note, "color-changed",
+                        G_CALLBACK (on_note_color_changed_cb), self);
+
+      gtk_widget_show (self->view);
+    }
 }
diff --git a/src/bjb-note-view.h b/src/bjb-note-view.h
index 9466c903..634c0caa 100644
--- a/src/bjb-note-view.h
+++ b/src/bjb-note-view.h
@@ -30,7 +30,7 @@ G_DECLARE_FINAL_TYPE (BjbNoteView, bjb_note_view, BJB, NOTE_VIEW, GtkOverlay)
 
 void                bjb_note_view_set_detached       (BjbNoteView *self,
                                                       gboolean     detached);
-
-BjbNoteView        *bjb_note_view_new                (BijiNoteObj *note);
+void                bjb_note_view_set_note           (BjbNoteView *self,
+                                                      BijiNoteObj *note);
 
 G_END_DECLS
diff --git a/src/bjb-window.c b/src/bjb-window.c
index 00ff024b..76febdf1 100644
--- a/src/bjb-window.c
+++ b/src/bjb-window.c
@@ -59,7 +59,6 @@ struct _BjbWindow
   GtkStack             *stack;
   BjbWindowView         current_view;
   BjbListView          *note_list;
-  BjbNoteView          *note_view;
   GtkWidget            *spinner;
   GtkWidget            *no_note;
 
@@ -79,6 +78,7 @@ struct _BjbWindow
   GtkWidget            *headerbar;
   GtkWidget            *note_box;
   GtkWidget            *note_headerbar;
+  GtkWidget            *note_view;
   GtkWidget            *notebooks_box;
   GtkWidget            *sidebar_box;
   GtkWidget            *search_bar;
@@ -102,25 +102,13 @@ static guint signals[N_SIGNALS];
 static void
 destroy_note_if_needed (BjbWindow *self)
 {
-  if (self->note_deleted != 0)
-    {
-      g_signal_handler_disconnect (self->note, self->note_deleted);
-      self->note_deleted = 0;
-    }
-  if (self->note_trashed != 0)
-    {
-      g_signal_handler_disconnect (self->note, self->note_trashed);
-      self->note_trashed = 0;
-    }
+  g_clear_signal_handler (&self->note_deleted, self->note);
+  g_clear_signal_handler (&self->note_trashed, self->note);
 
   g_clear_object (&self->note);
-
-  if (self->note_view && GTK_IS_WIDGET (self->note_view))
-    gtk_widget_destroy (GTK_WIDGET (self->note_view));
+  bjb_note_view_set_note (BJB_NOTE_VIEW (self->note_view), NULL);
 
   gtk_widget_hide (self->title_entry);
-
-  self->note_view = NULL;
 }
 
 static void
@@ -355,7 +343,7 @@ on_detach_window_cb (GSimpleAction *action,
   else
     bjb_window_set_view (self, BJB_WINDOW_MAIN_VIEW);
 
-  bjb_note_view_set_detached (self->note_view, TRUE);
+  bjb_note_view_set_detached (BJB_NOTE_VIEW (self->note_view), TRUE);
 
   detached_window = BJB_WINDOW (bjb_window_new ());
   gtk_window_set_default_size (GTK_WINDOW (detached_window), width, height);
@@ -773,6 +761,7 @@ bjb_window_class_init (BjbWindowClass *klass)
   gtk_widget_class_bind_template_child (widget_class, BjbWindow, filter_menu_button);
   gtk_widget_class_bind_template_child (widget_class, BjbWindow, note_box);
   gtk_widget_class_bind_template_child (widget_class, BjbWindow, note_headerbar);
+  gtk_widget_class_bind_template_child (widget_class, BjbWindow, note_view);
   gtk_widget_class_bind_template_child (widget_class, BjbWindow, notebooks_box);
   gtk_widget_class_bind_template_child (widget_class, BjbWindow, sidebar_box);
   gtk_widget_class_bind_template_child (widget_class, BjbWindow, search_bar);
@@ -989,9 +978,7 @@ bjb_window_set_note (BjbWindow   *self,
     return;
 
   self->note = g_object_ref (note);
-  self->note_view = bjb_note_view_new (note);
-  gtk_box_pack_end (GTK_BOX (self->note_box), GTK_WIDGET (self->note_view), TRUE, TRUE, 0);
-  gtk_widget_show (GTK_WIDGET (self->note_view));
+  bjb_note_view_set_note (BJB_NOTE_VIEW (self->note_view), self->note);
 
   self->note_deleted = g_signal_connect (self->note, "deleted",
                                          G_CALLBACK (on_note_trashed), self);


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