[gnome-notes] settings: Derive from GObject



commit 1209698ac94ee2792bfcb2b5b001504059f43935
Author: Mohammed Sadiq <sadiq sadiqpk org>
Date:   Fri Jun 4 12:15:51 2021 +0530

    settings: Derive from GObject
    
    and cleanup the code.  Also add related APIs to
    get/set various properties.
    
    If the object is derived from GSettings, users
    may modify the underlying GSettings directly
    which may result in undesired states (eg: property
    changes may not be notified)
    
    Also adapt to changes

 src/bjb-application.c     |  43 +++++--
 src/bjb-note-view.c       |   7 +-
 src/bjb-settings-dialog.c |   2 +-
 src/bjb-settings.c        | 322 ++++++++++++++++++++++++++++++----------------
 src/bjb-settings.h        |  51 ++++----
 src/bjb-window.c          |  49 +++----
 6 files changed, 293 insertions(+), 181 deletions(-)
---
diff --git a/src/bjb-application.c b/src/bjb-application.c
index 4ac702a0..9d660a98 100644
--- a/src/bjb-application.c
+++ b/src/bjb-application.c
@@ -409,6 +409,34 @@ manager_ready_cb (GObject *source,
   bijiben_new_window_internal (self, NULL);
 }
 
+static gboolean
+transform_to (GBinding     *binding,
+              const GValue *from_value,
+              GValue       *to_value,
+              gpointer      user_data)
+{
+  const char *value;
+
+  value = g_value_get_string (from_value);
+  g_value_set_variant (to_value, g_variant_new_string (value));
+
+  return TRUE;
+}
+
+static gboolean
+transform_from (GBinding     *binding,
+                const GValue *from_value,
+                GValue       *to_value,
+                gpointer      user_data)
+{
+  GVariant *value;
+
+  value = g_value_get_variant (from_value);
+  g_value_set_string (to_value, g_variant_get_string (value, NULL));
+
+  return TRUE;
+}
+
 static GActionEntry app_entries[] = {
   { "import-notes", on_import_notes_cb, NULL, NULL, NULL },
   { "text-size", NULL, "s", "'medium'", NULL },
@@ -476,15 +504,10 @@ bijiben_startup (GApplication *application)
   gdk_rgba_parse (&color, default_color);
 
   self->text_size = g_action_map_lookup_action (G_ACTION_MAP (application), "text-size");
-  g_settings_bind_with_mapping (G_SETTINGS (self->settings),
-                                "text-size",
-                                self->text_size,
-                                "state",
-                                G_SETTINGS_BIND_DEFAULT,
-                                text_size_mapping_get,
-                                text_size_mapping_set,
-                                NULL,
-                                NULL);
+  g_object_bind_property_full (BJB_SETTINGS (self->settings), "text-size",
+                               self->text_size, "state",
+                               G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL,
+                               transform_to, transform_from, NULL, NULL);
 
   g_application_hold (application);
 
@@ -492,7 +515,7 @@ bijiben_startup (GApplication *application)
   biji_manager_load_providers_async (self->manager, manager_ready_cb, self);
 
   /* Load last opened note item. */
-  path = g_settings_get_string (G_SETTINGS (self->settings), "last-opened-item");
+  path = bjb_settings_get_last_opened_item (self->settings);
   if (!bijiben_open_path (self, path, NULL))
     g_queue_push_head (&self->files_to_open, path);
 }
diff --git a/src/bjb-note-view.c b/src/bjb-note-view.c
index 64a4ec36..e592129f 100644
--- a/src/bjb-note-view.c
+++ b/src/bjb-note-view.c
@@ -199,12 +199,7 @@ bjb_note_view_constructed (GObject *obj)
   gtk_widget_show (self->view);
 
   /* Apply the gsettings font */
-
-  if (bjb_settings_use_system_font (settings))
-     default_font = bjb_settings_get_system_font (settings);
-
-  else
-     default_font = g_strdup (bjb_settings_get_default_font (settings));
+  default_font = bjb_settings_get_font (settings);
 
   if (default_font != NULL)
     biji_webkit_editor_set_font (BIJI_WEBKIT_EDITOR (self->view), default_font);
diff --git a/src/bjb-settings-dialog.c b/src/bjb-settings-dialog.c
index 3cb9af5d..a2e2bd4c 100644
--- a/src/bjb-settings-dialog.c
+++ b/src/bjb-settings-dialog.c
@@ -316,7 +316,7 @@ bjb_settings_dialog_constructed (GObject *object)
                           G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
 
   gtk_font_chooser_set_font (GTK_FONT_CHOOSER (self->font_button),
-                             bjb_settings_get_default_font (self->settings));
+                             bjb_settings_get_custom_font (self->settings));
 
   gdk_rgba_parse (&color, bjb_settings_get_default_color (self->settings));
   gtk_color_chooser_set_rgba (self->color_button, &color);
diff --git a/src/bjb-settings.c b/src/bjb-settings.c
index 17c7ae90..10f76a58 100644
--- a/src/bjb-settings.c
+++ b/src/bjb-settings.c
@@ -1,5 +1,7 @@
 /* bjb-settings.c
+ *
  * Copyright (C) Pierre-Yves LUYTEN 2011 <py luyten fr>
+ * Copyright 2021 Mohammed Sadiq <sadiq sadiqpk org>
  *
  * bijiben is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -12,62 +14,65 @@
  * See the GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along
- * with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+*/
+
+#define G_LOG_DOMAIN "bjb-settings"
 
-#include "config.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 
-#include "bjb-application.h"
 #include "bjb-settings.h"
 #include "bjb-settings-dialog.h"
 
 
 struct _BjbSettings
 {
-  GSettings parent_instance;
+  GObject    parent_instance;
 
   /* Note Appearance settings */
-  gboolean use_system_font;
-  gchar *font;
-  gchar *color;
+  gboolean   use_system_font;
+  char      *font;
+  char      *color;
 
   /* Default Provider */
-  gchar *primary;
+  char      *primary;
 
   /* org.gnome.desktop */
   GSettings *system;
+  /* org.gnome.Notes */
+  GSettings *app_settings;
 };
 
 
-enum
-{
+enum {
   PROP_0,
   PROP_USE_SYSTEM_FONT,
   PROP_FONT,
   PROP_COLOR,
   PROP_PRIMARY,
-  N_PROPERTIES
+  PROP_TEXT_SIZE,
+  N_PROPS
 };
 
 
-static GParamSpec *properties[N_PROPERTIES] = { NULL, };
-
-G_DEFINE_TYPE (BjbSettings, bjb_settings, G_TYPE_SETTINGS)
+static GParamSpec *properties[N_PROPS];
 
-static void
-bjb_settings_init (BjbSettings *self)
-{
-}
+G_DEFINE_TYPE (BjbSettings, bjb_settings, G_TYPE_OBJECT)
 
 static void
 bjb_settings_finalize (GObject *object)
 {
-  BjbSettings *self;
+  BjbSettings *self = BJB_SETTINGS (object);
 
-  self = BJB_SETTINGS (object);
   g_object_unref (self->system);
+  g_object_unref (self->app_settings);
 
   g_free (self->font);
   g_free (self->color);
@@ -85,7 +90,7 @@ bjb_settings_get_property (GObject    *object,
   BjbSettings *self = BJB_SETTINGS (object);
 
   switch (prop_id)
-  {
+    {
     case PROP_USE_SYSTEM_FONT:
       g_value_set_boolean (value, self->use_system_font);
       break;
@@ -102,10 +107,14 @@ bjb_settings_get_property (GObject    *object,
       g_value_set_string (value, self->primary);
       break;
 
+    case PROP_TEXT_SIZE:
+      g_value_take_string (value, g_settings_get_string (self->app_settings, "text-size"));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
-  }
+    }
 }
 
 static void
@@ -115,13 +124,13 @@ bjb_settings_set_property (GObject      *object,
                            GParamSpec   *pspec)
 {
   BjbSettings *self = BJB_SETTINGS (object);
-  GSettings   *settings = G_SETTINGS (object);
+  GSettings *settings = self->app_settings;
 
   switch (prop_id)
-  {
+    {
     case PROP_USE_SYSTEM_FONT:
-      self->use_system_font = g_value_get_boolean (value);
-      g_settings_set_boolean (settings, "use-system-font", self->use_system_font);
+      g_settings_set_boolean (settings, "use-system-font",
+                              g_value_get_boolean (value));
       break;
 
     case PROP_FONT:
@@ -142,137 +151,232 @@ bjb_settings_set_property (GObject      *object,
       g_settings_set_string (settings, "default-location", self->primary);
       break;
 
+    case PROP_TEXT_SIZE:
+      g_settings_set_string (settings, "text-size", g_value_get_string (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
-  }
+    }
 }
 
-
-static void
-bjb_settings_constructed (GObject *object)
-{
-  BjbSettings *self;
-  GSettings   *settings;
-
-  G_OBJECT_CLASS (bjb_settings_parent_class)->constructed (object);
-
-  self = BJB_SETTINGS (object);
-  settings = G_SETTINGS (object);
-  self->system = g_settings_new ("org.gnome.desktop.interface");
-
-  self->use_system_font = g_settings_get_boolean (settings, "use-system-font");
-  self->font = g_settings_get_string (settings, "font");
-  self->color = g_settings_get_string (settings, "color");
-  self->primary = g_settings_get_string (settings, "default-location");
-}
-
-
 static void
 bjb_settings_class_init (BjbSettingsClass *klass)
 {
-  GObjectClass* object_class = G_OBJECT_CLASS (klass);
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-  object_class->constructed = bjb_settings_constructed;
   object_class->finalize = bjb_settings_finalize;
   object_class->get_property = bjb_settings_get_property;
   object_class->set_property = bjb_settings_set_property;
 
-  properties[PROP_USE_SYSTEM_FONT] = g_param_spec_boolean (
-                                   "use-system-font",
-                                   "Use system font",
-                                   "Default System Font for Notes",
-                                   TRUE,
-                                   G_PARAM_READWRITE |
-                                   G_PARAM_STATIC_STRINGS);
+  properties[PROP_USE_SYSTEM_FONT] =
+    g_param_spec_boolean ("use-system-font",
+                          "Use system font",
+                          "Default System Font for Notes",
+                          TRUE,
+                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  properties[PROP_FONT] =
+    g_param_spec_string ("font",
+                         "Notes Font",
+                         "Font for Notes",
+                         NULL,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  properties[PROP_COLOR] =
+    g_param_spec_string ("color",
+                         "New Notes Color",
+                         "Default Color for New Notes",
+                         NULL,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  properties[PROP_PRIMARY] =
+    g_param_spec_string ("default-location",
+                         "Primary Location",
+                         "Default Provider for New Notes",
+                         NULL,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  properties[PROP_TEXT_SIZE] =
+    g_param_spec_string ("text-size",
+                         "Text size",
+                         "Text size for notes",
+                         NULL,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  g_object_class_install_properties (object_class, N_PROPS, properties);
+}
 
+static void
+bjb_settings_init (BjbSettings *self)
+{
+  self->system = g_settings_new ("org.gnome.desktop.interface");
+  self->app_settings = g_settings_new ("org.gnome.Notes");
 
-  properties[PROP_FONT] = g_param_spec_string (
-                                   "font",
-                                   "Notes Font",
-                                   "Font for Notes",
-                                   NULL,
-                                   G_PARAM_READWRITE |
-                                   G_PARAM_STATIC_STRINGS);
+  self->font = g_settings_get_string (self->app_settings, "font");
+  self->color = g_settings_get_string (self->app_settings, "color");
+  self->primary = g_settings_get_string (self->app_settings, "default-location");
+}
 
+BjbSettings *
+bjb_settings_new (void)
+{
+  return g_object_new (BJB_TYPE_SETTINGS, NULL);
+}
 
-  properties[PROP_COLOR] = g_param_spec_string (
-                                   "color",
-                                   "New Notes Color",
-                                   "Default Color for New Notes",
-                                   NULL,
-                                   G_PARAM_READWRITE |
-                                   G_PARAM_STATIC_STRINGS);
+/**
+ * bjb_settings_get_font:
+ * @self: A #BjbSettings
+ *
+ * Get the font that should be used for notes.
+ * If :use-system-font is set, the name of system wide
+ * document font is returned.
+ *
+ * Returns: (transfer full): The font string
+ */
+char *
+bjb_settings_get_font (BjbSettings *self)
+{
+  g_return_val_if_fail (BJB_IS_SETTINGS (self), NULL);
 
+  if (g_settings_get_boolean (self->app_settings, "use-system-font"))
+    return g_settings_get_string (self->system, "document-font-name");
 
-  properties[PROP_PRIMARY] = g_param_spec_string (
-                                   "default-location",
-                                   "Primary Location",
-                                   "Default Provider for New Notes",
-                                   NULL,
-                                   G_PARAM_READWRITE |
-                                   G_PARAM_STATIC_STRINGS);
+  return g_strdup (self->font);
+}
 
+/**
+ * bjb_settings_get_custom_font:
+ * @self: A #BjbSettings
+ *
+ * Get the custom font if set.  Use this function
+ * if you want to get the custom font name
+ * regardless of whether :use-system-font is set
+ * or not.
+ * Also see bjb_settings_get_font()
+ *
+ * Returns: (transfer none): The font string
+ */
+const char *
+bjb_settings_get_custom_font (BjbSettings *self)
+{
+  g_return_val_if_fail (BJB_IS_SETTINGS (self), NULL);
 
-  g_object_class_install_properties (object_class, N_PROPERTIES, properties);
+  return self->font;
 }
 
+const char *
+bjb_settings_get_default_color (BjbSettings *self)
+{
+  g_return_val_if_fail (BJB_IS_SETTINGS (self), NULL);
 
+  return self->color;
+}
 
-
-BjbSettings *
-bjb_settings_new (void)
+const char *
+bjb_settings_get_default_location (BjbSettings *self)
 {
-  return g_object_new (BJB_TYPE_SETTINGS, "schema-id", "org.gnome.Notes", NULL);
-}
+  g_return_val_if_fail (BJB_IS_SETTINGS (self), NULL);
 
+  return self->primary;
+}
 
-gboolean
-bjb_settings_use_system_font            (BjbSettings *self)
+BjbTextSizeType
+bjb_settings_get_text_size (BjbSettings *self)
 {
-  return self->use_system_font;
-}
+  g_return_val_if_fail (BJB_IS_SETTINGS (self), BJB_TEXT_SIZE_MEDIUM);
 
+  return g_settings_get_enum (self->app_settings, "text-size");
+}
 
 void
-bjb_settings_set_use_system_font        (BjbSettings *self, gboolean value)
+bjb_settings_set_last_opened_item (BjbSettings *self,
+                                   const char  *note_path)
 {
-  self->use_system_font = value;
-}
+  g_return_if_fail (BJB_IS_SETTINGS (self));
 
+  g_settings_set_string (self->app_settings, "last-opened-item", note_path);
+}
 
-const gchar *
-bjb_settings_get_default_font           (BjbSettings *self)
+char *
+bjb_settings_get_last_opened_item (BjbSettings *self)
 {
-  return self->font;
-}
+  g_return_val_if_fail (BJB_IS_SETTINGS (self), NULL);
 
+  return g_settings_get_string (self->app_settings, "last-opened-item");
+}
 
-const gchar *
-bjb_settings_get_default_color          (BjbSettings *self)
+/**
+ * bjb_settings_get_window_maximized:
+ * @self: A #BjbSettings
+ *
+ * Get the window maximized state as saved in @self.
+ *
+ * Returns: %TRUE if maximized.  %FALSE otherwise.
+ */
+gboolean
+bjb_settings_get_window_maximized (BjbSettings *self)
 {
-  return self->color;
-}
+  g_return_val_if_fail (BJB_IS_SETTINGS (self), FALSE);
 
+  return g_settings_get_boolean (self->app_settings, "window-maximized");
+}
 
-const gchar *
-bjb_settings_get_default_location       (BjbSettings *self)
+/**
+ * bjb_settings_set_window_maximized:
+ * @self: A #BjbSettings
+ * @maximized: The window state to save
+ *
+ * Set the window maximized state in @self.
+ */
+void
+bjb_settings_set_window_maximized (BjbSettings *self,
+                                   gboolean     maximized)
 {
-  return self->primary;
-}
+  g_return_if_fail (BJB_IS_SETTINGS (self));
 
+  g_settings_set_boolean (self->app_settings, "window-maximized", !!maximized);
+}
 
-gchar *
-bjb_settings_get_system_font            (BjbSettings *self)
+/**
+ * bjb_settings_get_window_geometry:
+ * @self: A #BjbSettings
+ * @geometry: (out): A #GdkRectangle
+ *
+ * Get the window geometry as saved in @self.
+ */
+void
+bjb_settings_get_window_geometry (BjbSettings  *self,
+                                  GdkRectangle *geometry)
 {
-  return g_settings_get_string (self->system,
-                                "document-font-name");
+  g_return_if_fail (BJB_IS_SETTINGS (self));
+  g_return_if_fail (geometry != NULL);
+
+  g_settings_get (self->app_settings, "window-size", "(ii)",
+                  &geometry->width, &geometry->height);
+  g_settings_get (self->app_settings, "window-position", "(ii)",
+                  &geometry->x, &geometry->y);
 }
 
-BjbTextSizeType
-bjb_settings_get_text_size              (BjbSettings *self)
+/**
+ * bjb_settings_set_window_geometry:
+ * @self: A #BjbSettings
+ * @geometry: A #GdkRectangle
+ *
+ * Set the window geometry in @self.
+ */
+void
+bjb_settings_set_window_geometry (BjbSettings  *self,
+                                  GdkRectangle *geometry)
 {
-  return g_settings_get_enum (G_SETTINGS (self), "text-size");
+  g_return_if_fail (BJB_IS_SETTINGS (self));
+  g_return_if_fail (geometry != NULL);
+
+  g_settings_set (self->app_settings, "window-size", "(ii)",
+                  geometry->width, geometry->height);
+  g_settings_set (self->app_settings, "window-position", "(ii)",
+                  geometry->x, geometry->y);
 }
 
 void
diff --git a/src/bjb-settings.h b/src/bjb-settings.h
index d06503af..625ada1a 100644
--- a/src/bjb-settings.h
+++ b/src/bjb-settings.h
@@ -1,5 +1,7 @@
 /* bjb-settings.h
+ *
  * Copyright © 2012, 2013 Pierre-Yves LUYTEN <py luyten fr>
+ * Copyright 2021 Mohammed Sadiq <sadiq sadiqpk org>
  *
  * bijiben is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -13,19 +15,21 @@
  *
  * You should have received a copy of the GNU General Public License along
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
  */
 
 #pragma once
 
 #include <glib-object.h>
-
-
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
 #define BJB_TYPE_SETTINGS (bjb_settings_get_type ())
 
-G_DECLARE_FINAL_TYPE (BjbSettings, bjb_settings, BJB, SETTINGS, GSettings)
+G_DECLARE_FINAL_TYPE (BjbSettings, bjb_settings, BJB, SETTINGS, GObject)
 
 typedef enum {
   BJB_TEXT_SIZE_LARGE,
@@ -33,29 +37,22 @@ typedef enum {
   BJB_TEXT_SIZE_SMALL
 } BjbTextSizeType;
 
-BjbSettings      *bjb_settings_new                        (void);
-
-
-gboolean          bjb_settings_use_system_font            (BjbSettings *self);
-
-
-void              bjb_settings_set_use_system_font        (BjbSettings *self,
-                                                           gboolean value);
-
-
-const gchar      *bjb_settings_get_default_font           (BjbSettings *self);
-
-
-const gchar      *bjb_settings_get_default_color          (BjbSettings *self);
-
-
-const gchar      *bjb_settings_get_default_location       (BjbSettings *self);
-
-
-gchar            *bjb_settings_get_system_font            (BjbSettings *self);
-
-BjbTextSizeType   bjb_settings_get_text_size              (BjbSettings *self);
-
-void              show_bijiben_settings_window            (GtkWidget *parent_window);
+BjbSettings     *bjb_settings_new                    (void);
+char            *bjb_settings_get_font               (BjbSettings  *self);
+const char      *bjb_settings_get_custom_font        (BjbSettings  *self);
+const char      *bjb_settings_get_default_color      (BjbSettings  *self);
+const char      *bjb_settings_get_default_location   (BjbSettings  *self);
+BjbTextSizeType  bjb_settings_get_text_size          (BjbSettings  *self);
+void             bjb_settings_set_last_opened_item   (BjbSettings  *self,
+                                                      const char   *note_path);
+char            *bjb_settings_get_last_opened_item   (BjbSettings  *self);
+gboolean         bjb_settings_get_window_maximized   (BjbSettings  *self);
+void             bjb_settings_set_window_maximized   (BjbSettings  *self,
+                                                      gboolean      maximized);
+void             bjb_settings_get_window_geometry    (BjbSettings  *self,
+                                                      GdkRectangle *geometry);
+void             bjb_settings_set_window_geometry    (BjbSettings  *self,
+                                                      GdkRectangle *geometry);
+void             show_bijiben_settings_window        (GtkWidget    *parent_window);
 
 G_END_DECLS
diff --git a/src/bjb-window.c b/src/bjb-window.c
index 92984226..ba8cd34f 100644
--- a/src/bjb-window.c
+++ b/src/bjb-window.c
@@ -67,10 +67,7 @@ struct _BjbWindow
   BijiNoteObj          *note;
 
   /* window geometry */
-  gint                  width;
-  gint                  height;
-  gint                  pos_x;
-  gint                  pos_y;
+  GdkRectangle          window_geometry;
   gboolean              is_maximized;
 
   HdyLeaflet           *main_leaflet;
@@ -230,16 +227,15 @@ static void
 bjb_window_finalize (GObject *object)
 {
   BjbWindow *self = BJB_WINDOW (object);
-  GSettings *settings = G_SETTINGS (self->settings);
   BjbNoteView *note_view;
 
   if (self->note != NULL)
-  {
-    g_settings_set_string (settings, "last-opened-item", biji_note_obj_get_path (self->note));
+    {
+      bjb_settings_set_last_opened_item (self->settings, biji_note_obj_get_path (self->note));
 
-    g_clear_signal_handler (&self->note_deleted, self->note);
-    g_clear_signal_handler (&self->note_trashed, self->note);
-  }
+      g_clear_signal_handler (&self->note_deleted, self->note);
+      g_clear_signal_handler (&self->note_trashed, self->note);
+    }
 
   note_view = g_object_get_data (object, "note-view");
   if (note_view)
@@ -539,21 +535,15 @@ on_action_radio (GSimpleAction *action,
 static void
 bjb_window_save_geometry (BjbWindow *self)
 {
-  GSettings *settings = G_SETTINGS (self->settings);
-
-  g_settings_set_boolean (settings, "window-maximized", self->is_maximized);
-  g_settings_set (settings, "window-size", "(ii)", self->width, self->height);
-  g_settings_set (settings, "window-position", "(ii)", self->pos_x, self->pos_y);
+  bjb_settings_set_window_maximized (self->settings, self->is_maximized);
+  bjb_settings_set_window_geometry (self->settings, &self->window_geometry);
 }
 
 static void
 bjb_window_load_geometry (BjbWindow *self)
 {
-  GSettings *settings = G_SETTINGS (self->settings);
-
-  self->is_maximized = g_settings_get_boolean (settings, "window-maximized");
-  g_settings_get (settings, "window-size", "(ii)", &self->width, &self->height);
-  g_settings_get (settings, "window-position", "(ii)", &self->pos_x, &self->pos_y);
+  self->is_maximized = bjb_settings_get_window_maximized (self->settings);
+  bjb_settings_get_window_geometry (self->settings, &self->window_geometry);
 }
 
 /* Just disconnect to avoid crash, the finalize does the real
@@ -576,8 +566,9 @@ bjb_window_configure_event (GtkWidget         *widget,
   self->is_maximized = gtk_window_is_maximized (GTK_WINDOW (self));
   if (!self->is_maximized)
     {
-      gtk_window_get_size (GTK_WINDOW (self), &self->width, &self->height);
-      gtk_window_get_position (GTK_WINDOW (self), &self->pos_x, &self->pos_y);
+      GdkRectangle *geometry = &self->window_geometry;
+      gtk_window_get_size (GTK_WINDOW (self), &geometry->width, &geometry->height);
+      gtk_window_get_position (GTK_WINDOW (self), &geometry->x, &geometry->y);
     }
 
   return GTK_WIDGET_CLASS (bjb_window_parent_class)->configure_event (widget,
@@ -655,6 +646,7 @@ bjb_window_constructed (GObject *obj)
   BijiManager *manager;
   BjbWindow *self = BJB_WINDOW (obj);
   GtkListBox *list_box;
+  GdkRectangle geometry;
 
   G_OBJECT_CLASS (bjb_window_parent_class)->constructed (obj);
 
@@ -669,12 +661,13 @@ bjb_window_constructed (GObject *obj)
   gtk_window_set_title (GTK_WINDOW (self), _(BIJIBEN_MAIN_WIN_TITLE));
 
   bjb_window_load_geometry (self);
-  gtk_window_set_default_size (GTK_WINDOW (self), self->width, self->height);
+  geometry = self->window_geometry;
+  gtk_window_set_default_size (GTK_WINDOW (self), geometry.width, geometry.height);
 
   if (self->is_maximized)
     gtk_window_maximize (GTK_WINDOW (self));
-  else if (self->pos_x >= 0)
-    gtk_window_move (GTK_WINDOW (self), self->pos_x, self->pos_y);
+  else if (geometry.x >= 0)
+    gtk_window_move (GTK_WINDOW (self), geometry.x, geometry.y);
 
   self->note_list = bjb_list_view_new ();
 
@@ -714,9 +707,9 @@ bjb_window_constructed (GObject *obj)
   /* If a note is requested at creation, show it
    * This is a specific type of window not associated with any view */
   if (self->note != NULL)
-  {
-    bjb_window_set_note (self, self->note);
-  }
+    {
+      bjb_window_set_note (self, self->note);
+    }
 }
 
 


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