[gnome-notes] note-view: Simplify
- From: Mohammed Sadiq <pksadiq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-notes] note-view: Simplify
- Date: Fri, 14 Oct 2022 10:05:46 +0000 (UTC)
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]