[devhelp] Introspect window GSettings
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [devhelp] Introspect window GSettings
- Date: Fri, 15 Dec 2017 07:01:57 +0000 (UTC)
commit 22da937a6574378cc44eb349647159e82b01291e
Author: Sébastien Wilmet <swilmet gnome org>
Date: Fri Dec 15 07:53:39 2017 +0100
Introspect window GSettings
- To make the utils functions easier to use, by removing the
has_maximize parameters.
- Make the code more robust, avoid a crash if trying to access a
non-existent GSettings key.
src/dh-assistant.c | 7 ++-----
src/dh-util.c | 45 +++++++++++++++++++++++++++++++++++++++------
src/dh-util.h | 6 ++----
src/dh-window.c | 9 +++------
4 files changed, 46 insertions(+), 21 deletions(-)
---
diff --git a/src/dh-assistant.c b/src/dh-assistant.c
index f9a1a2c..d049974 100644
--- a/src/dh-assistant.c
+++ b/src/dh-assistant.c
@@ -64,8 +64,7 @@ dh_assistant_configure_event (GtkWidget *widget,
settings = dh_settings_get_singleton ();
dh_util_window_settings_save (GTK_WINDOW (widget),
- dh_settings_peek_assistant_settings (settings),
- FALSE);
+ dh_settings_peek_assistant_settings (settings));
return GTK_WIDGET_CLASS (dh_assistant_parent_class)->configure_event (widget, event);
}
@@ -97,10 +96,8 @@ dh_assistant_init (DhAssistant *assistant)
assistant);
settings = dh_settings_get_singleton ();
-
dh_util_window_settings_restore (GTK_WINDOW (assistant),
- dh_settings_peek_assistant_settings (settings),
- FALSE);
+ dh_settings_peek_assistant_settings (settings));
}
GtkWidget *
diff --git a/src/dh-util.c b/src/dh-util.c
index 24e217c..8b46c1b 100644
--- a/src/dh-util.c
+++ b/src/dh-util.c
@@ -138,15 +138,41 @@ dh_util_view_set_font (WebKitWebView *view, const gchar *font_name_fixed, const
font_name_fixed, font_size_fixed_px, font_name_variable, font_size_variable_px);
}
+static void
+introspect_window_gsettings (GSettings *window_settings,
+ gboolean *has_required_keys,
+ gboolean *has_maximized_key)
+{
+ GSettingsSchema *schema = NULL;
+
+ g_object_get (window_settings,
+ "settings-schema", &schema,
+ NULL);
+
+ *has_required_keys = (g_settings_schema_has_key (schema, "width") &&
+ g_settings_schema_has_key (schema, "height"));
+
+ *has_maximized_key = g_settings_schema_has_key (schema, "maximized");
+
+ g_settings_schema_unref (schema);
+}
+
void
dh_util_window_settings_save (GtkWindow *window,
- GSettings *settings,
- gboolean has_maximize)
+ GSettings *settings)
{
+ gboolean has_required_keys;
+ gboolean has_maximized_key;
gint width;
gint height;
- if (has_maximize) {
+ g_return_if_fail (GTK_IS_WINDOW (window));
+ g_return_if_fail (G_IS_SETTINGS (settings));
+
+ introspect_window_gsettings (settings, &has_required_keys, &has_maximized_key);
+ g_return_if_fail (has_required_keys);
+
+ if (has_maximized_key) {
GdkWindowState state;
gboolean maximized;
@@ -168,12 +194,19 @@ dh_util_window_settings_save (GtkWindow *window,
void
dh_util_window_settings_restore (GtkWindow *window,
- GSettings *settings,
- gboolean has_maximize)
+ GSettings *settings)
{
+ gboolean has_required_keys;
+ gboolean has_maximized_key;
gint width;
gint height;
+ g_return_if_fail (GTK_IS_WINDOW (window));
+ g_return_if_fail (G_IS_SETTINGS (settings));
+
+ introspect_window_gsettings (settings, &has_required_keys, &has_maximized_key);
+ g_return_if_fail (has_required_keys);
+
width = g_settings_get_int (settings, "width");
height = g_settings_get_int (settings, "height");
@@ -192,7 +225,7 @@ dh_util_window_settings_restore (GtkWindow *window,
gtk_window_set_default_size (window, width, height);
}
- if (has_maximize && g_settings_get_boolean (settings, "maximized"))
+ if (has_maximized_key && g_settings_get_boolean (settings, "maximized"))
gtk_window_maximize (window);
}
diff --git a/src/dh-util.h b/src/dh-util.h
index 7f29956..ef0e75e 100644
--- a/src/dh-util.h
+++ b/src/dh-util.h
@@ -39,12 +39,10 @@ void dh_util_view_set_font (WebKitWebView *view,
const gchar *font_name_variable);
void dh_util_window_settings_save (GtkWindow *window,
- GSettings *settings,
- gboolean has_maximize);
+ GSettings *settings);
void dh_util_window_settings_restore (GtkWindow *window,
- GSettings *settings,
- gboolean has_maximize);
+ GSettings *settings);
void dh_util_queue_concat (GQueue *q1,
GQueue *q2);
diff --git a/src/dh-window.c b/src/dh-window.c
index f28249a..36228e5 100644
--- a/src/dh-window.c
+++ b/src/dh-window.c
@@ -595,8 +595,7 @@ window_settings_save_cb (gpointer user_data)
settings = dh_settings_get_singleton ();
dh_util_window_settings_save (GTK_WINDOW (window),
- dh_settings_peek_window_settings (settings),
- TRUE);
+ dh_settings_peek_window_settings (settings));
return G_SOURCE_REMOVE;
}
@@ -642,8 +641,7 @@ dh_window_delete_event (GtkWidget *widget,
settings = dh_settings_get_singleton ();
dh_util_window_settings_save (GTK_WINDOW (window),
- dh_settings_peek_window_settings (settings),
- TRUE);
+ dh_settings_peek_window_settings (settings));
if (GTK_WIDGET_CLASS (dh_window_parent_class)->delete_event == NULL)
return GDK_EVENT_PROPAGATE;
@@ -1558,8 +1556,7 @@ dh_window_new (DhApp *application)
settings = dh_settings_get_singleton ();
dh_util_window_settings_restore (GTK_WINDOW (window),
- dh_settings_peek_window_settings (settings),
- TRUE);
+ dh_settings_peek_window_settings (settings));
g_settings_bind (dh_settings_peek_paned_settings (settings), "position",
priv->hpaned, "position",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]