[devhelp/gsettings-migration] Migrate to GSettings
- From: Thomas Bechtold <toabctl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [devhelp/gsettings-migration] Migrate to GSettings
- Date: Sun, 2 Dec 2012 16:52:52 +0000 (UTC)
commit 601e168430d6e0b70ed4baac33cd134b4027957d
Author: Thomas Bechtold <thomasbechtold jpberlin de>
Date: Sun Nov 18 19:59:46 2012 +0100
Migrate to GSettings
https://bugzilla.gnome.org/show_bug.cgi?id=646402
configure.ac | 1 +
data/Makefile.am | 35 +-
data/devhelp.convert | 28 ++
data/devhelp.schemas.in | 191 ---------
data/org.gnome.devhelp.gschema.xml.in | 111 +++++
src/Makefile.am | 13 +-
src/dh-app.c | 1 +
src/dh-assistant.c | 41 ++-
src/dh-book-manager.c | 63 +++-
src/dh-common.c | 43 --
src/dh-main.c | 3 -
src/dh-marshal.list | 1 +
src/dh-preferences.c | 239 ++----------
src/dh-settings.c | 219 ++++++++++
src/dh-settings.h | 77 ++++
src/dh-util.c | 733 +++++----------------------------
src/dh-util.h | 38 +--
src/dh-window.c | 131 +++++-
src/ige-conf-gconf.c | 387 -----------------
src/ige-conf-mac.c | 342 ---------------
src/ige-conf-private.h | 54 ---
src/ige-conf.c | 337 ---------------
src/ige-conf.h | 87 ----
23 files changed, 806 insertions(+), 2369 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 8849c70..3931699 100644
--- a/configure.ac
+++ b/configure.ac
@@ -38,6 +38,7 @@ AM_PROG_CC_C_O
LT_PREREQ([2.2])
LT_INIT([disable-static])
+GLIB_GSETTINGS
PKG_PROG_PKG_CONFIG
AM_GCONF_SOURCE_2
diff --git a/data/Makefile.am b/data/Makefile.am
index 31d10fc..15516c1 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -8,42 +8,33 @@ assistant_DATA = \
assistant.js \
assistant.css
+ INTLTOOL_SCHEMAS_RULE@
+ INTLTOOL_XML_NOMERGE_RULE@
+
+gsettings_SCHEMAS = org.gnome.devhelp.gschema.xml
+ GSETTINGS_RULES@
+
+gsettingsconvertdir = $(datadir)/GConf/gsettings
+gsettingsconvert_DATA = devhelp.convert
+
@INTLTOOL_DESKTOP_RULE@
desktopdir = $(datadir)/applications
desktop_in_files = devhelp.desktop.in
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
-schemasdir = $(GCONF_SCHEMA_FILE_DIR)
-schemas_in_files = devhelp.schemas.in
-schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
- INTLTOOL_SCHEMAS_RULE@
-
-defaultsdir = $(datadir)/devhelp
-defaults_DATA = devhelp.defaults
-devhelp.defaults: devhelp.schemas.in
- cp $(top_srcdir)/data/devhelp.schemas.in $(top_builddir)/data/devhelp.defaults
-
EXTRA_DIST = \
libdevhelp-3.0.pc.in \
$(desktop_in_files) \
- $(schemas_in_files) \
- $(schemas_DATA) \
+ org.gnome.devhelp.gschema.xml.in \
+ devhelp.convert \
$(assistant_DATA)
-install-data-local: $(schema_DATA)
-if GCONF_SCHEMAS_INSTALL
- if test -z "$(DESTDIR)" ; then \
- for p in $^ ; do \
- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $$p >&1 > /dev/null; \
- done \
- fi
-endif
-
CLEANFILES = \
$(DESKTOP_FILES) \
+ $(gsettings_SCHEMAS) \
$(defaults_DATA)
DISTCLEANFILES = \
$(desktop_DATA) \
- $(schemas_DATA)
+ $(gsettings_SCHEMAS)
diff --git a/data/devhelp.convert b/data/devhelp.convert
new file mode 100644
index 0000000..ee20a90
--- /dev/null
+++ b/data/devhelp.convert
@@ -0,0 +1,28 @@
+[org.gnome.devhelp.state.main.window]
+maximized=/apps/devhelp/state/main/window/maximized
+width=/apps/devhelp/state/main/window/width
+height=/apps/devhelp/state/main/window/height
+x-position=/apps/devhelp/state/main/window/x_position
+y-position=/apps/devhelp/state/main/window/y_position
+
+[org.gnome.devhelp.state.assistant.window]
+maximized=/apps/devhelp/state/assistant/window/maximized
+width=/apps/devhelp/state/assistant/window/width
+height=/apps/devhelp/state/assistant/window/height
+x-position=/apps/devhelp/state/assistant/window/x_position
+y-position=/apps/devhelp/state/assistant/window/y_position
+
+[org.gnome.devhelp.state.main.paned]
+position=/apps/devhelp/state/main/paned/position
+
+[org.gnome.devhelp.state.search_notebook]
+selected-tab=/apps/devhelp/state/main/search_notebook/selected_tab
+
+[org.gnome.devhelp.state.main.contents]
+books-disabled=/apps/devhelp/state/main/contents/books_disabled
+group-books-by-language=/apps/devhelp/state/main/contents/group_books_by_language
+
+[org.gnome.devhelp.fonts]
+use-system-fonts=/apps/devhelp/ui/use_system_fonts
+variable-fonts=/apps/devhelp/ui/variable_font
+fixed-font=/apps/devhelp/ui/fixed_font
diff --git a/data/org.gnome.devhelp.gschema.xml.in b/data/org.gnome.devhelp.gschema.xml.in
new file mode 100644
index 0000000..bcf1ccf
--- /dev/null
+++ b/data/org.gnome.devhelp.gschema.xml.in
@@ -0,0 +1,111 @@
+<schemalist gettext-domain="devhelp">
+ <schema id="org.gnome.devhelp" path="/org/gnome/devhelp/">
+ <child name="state" schema="org.gnome.devhelp.state"/>
+ <child name="ui" schema="org.gnome.devhelp.fonts"/>
+ </schema>
+ <schema id="org.gnome.devhelp.state" path="/org/gnome/devhelp/state/">
+ <child name="main" schema="org.gnome.devhelp.state.main"/>
+ <child name="assistant" schema="org.gnome.devhelp.state.assistant"/>
+ </schema>
+ <schema id="org.gnome.devhelp.state.main" path="/org/gnome/devhelp/state/main/">
+ <child name="window" schema="org.gnome.devhelp.state.main.window"/>
+ <child name="paned" schema="org.gnome.devhelp.state.main.paned"/>
+ <child name="search-notebook" schema="org.gnome.devhelp.state.main.search-notebook"/>
+ <child name="contents" schema="org.gnome.devhelp.state.main.contents"/>
+ </schema>
+ <schema id="org.gnome.devhelp.state.main.window" path="/org/gnome/devhelp/state/main/window/">
+ <key name="maximized" type="b">
+ <default>false</default>
+ <_summary>Main window maximized state</_summary>
+ <_description>Whether the main window should start maximized.</_description>
+ </key>
+ <key name="width" type="i">
+ <default>700</default>
+ <_summary>Width of the main window</_summary>
+ <_description>The width of the main window.</_description>
+ </key>
+ <key name="height" type="i">
+ <default>500</default>
+ <_summary>Height of main window</_summary>
+ <_description>The height of the main window.</_description>
+ </key>
+ <key name="x-position" type="i">
+ <default>100</default>
+ <_summary>X position of main window</_summary>
+ <_description>The X position of the main window.</_description>
+ </key>
+ <key name="y-position" type="i">
+ <default>100</default>
+ <_summary>Y position of main window</_summary>
+ <_description>The Y position of the main window.</_description>
+ </key>
+ </schema>
+ <schema id="org.gnome.devhelp.state.main.paned" path="/org/gnome/devhelp/state/main/paned/">
+ <key name="position" type="i">
+ <default>250</default>
+ <_summary>Width of the index and search pane</_summary>
+ <_description>The width of the index and search pane.</_description>
+ </key>
+ </schema>
+ <schema id="org.gnome.devhelp.state.main.search-notebook" path="/org/gnome/devhelp/state/main/search-notebook/">
+ <key name="selected-tab" type="s">
+ <default>'content'</default>
+ <_summary>Selected tab: "content" or "search"</_summary>
+ <_description>Which of the tabs is selected: "content" or "search".</_description>
+ </key>
+ </schema>
+ <schema id="org.gnome.devhelp.state.main.contents" path="/org/gnome/devhelp/state/main/contents/">
+ <key name="books-disabled" type="as">
+ <default>[]</default>
+ <_summary>Books disabled</_summary>
+ <_description>List of books disabled by the user.</_description>
+ </key>
+ <key name="group-books-by-language" type="b">
+ <default>false</default>
+ <_summary>Group by language</_summary>
+ <_description>Whether books should be grouped by language in the UI</_description>
+ </key>
+ </schema>
+ <schema id="org.gnome.devhelp.state.assistant" path="/org/gnome/devhelp/state/assistant/">
+ <child name="window" schema="org.gnome.devhelp.state.assistant.window"/>
+ </schema>
+ <schema id="org.gnome.devhelp.state.assistant.window" path="/org/gnome/devhelp/state/assistant/window/">
+ <key name="width" type="i">
+ <default>350</default>
+ <_summary>Width of the assistant window</_summary>
+ <_description>The width of the assistant window.</_description>
+ </key>
+ <key name="height" type="i">
+ <default>400</default>
+ <_summary>Height of assistant window</_summary>
+ <_description>The height of the assistant window.</_description>
+ </key>
+ <key name="x-position" type="i">
+ <default>0</default>
+ <_summary>X position of assistant window</_summary>
+ <_description>The X position of the assistant window.</_description>
+ </key>
+ <key name="y-position" type="i">
+ <default>0</default>
+ <_summary>Y position of assistant window</_summary>
+ <_description>The Y position of the assistant window.</_description>
+ </key>
+ </schema>
+ <schema id="org.gnome.devhelp.fonts" path="/org/gnome/devhelp/fonts/">
+ <key name="use-system-fonts" type="b">
+ <default>true</default>
+ <_summary>Use system fonts</_summary>
+ <_description>Use the system default fonts.</_description>
+ </key>
+ <key name="variable-font" type="s">
+ <default>'Sans 12'</default>
+ <_summary>Font for text</_summary>
+ <_description>Font for text with variable width.</_description>
+ </key>
+ <key name="fixed-font" type="s">
+ <default>'Monospace 12'</default>
+ <_summary>Font for fixed width text</_summary>
+ <_description>Font for text with fixed width, such as code examples.</_description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/src/Makefile.am b/src/Makefile.am
index 419c31c..0776177 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -68,7 +68,6 @@ devhelpincludedir = $(includedir)/devhelp-3.0/devhelp
devhelpinclude_HEADERS = $(INST_H_FILES)
libdevhelp_3_la_SOURCES = \
- dh-common.c \
dh-marshal.c \
dh-marshal.h \
dh-enum-types.c \
@@ -91,12 +90,10 @@ libdevhelp_3_la_SOURCES = \
dh-parser.h \
dh-preferences.h \
dh-util.h \
+ dh-settings.c \
+ dh-settings.h \
eggfindbar.c \
- eggfindbar.h \
- ige-conf.c \
- ige-conf.h \
- ige-conf-private.h \
- $(conf_platform_sources)
+ eggfindbar.h
libdevhelp_3_la_CPPFLAGS = \
$(AM_CPPFLAGS) \
@@ -123,9 +120,5 @@ dh-enum-types.c: dh-enum-types.c.template $(INST_H_FILES) $(GLIB_MKENUMS)
$(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template dh-enum-types.c.template $(INST_H_FILES)) > $@
if HAVE_PLATFORM_OSX
-conf_platform_sources = ige-conf-mac.c
libdevhelp_3_la_CPPFLAGS += -xobjective-c
endif
-if HAVE_PLATFORM_X11
-conf_platform_sources = ige-conf-gconf.c
-endif
diff --git a/src/dh-app.c b/src/dh-app.c
index 3b2d0d2..819d754 100644
--- a/src/dh-app.c
+++ b/src/dh-app.c
@@ -156,6 +156,7 @@ about_cb (GSimpleAction *action,
"Johan Dahlin <johan gnome org>",
"Ross Burton <ross burtonini com>",
"Aleksander Morgado <aleksander lanedo com>",
+ "Thomas Bechtold <toabctl gnome org>",
NULL
};
const gchar **documenters = NULL;
diff --git a/src/dh-assistant.c b/src/dh-assistant.c
index c262b1a..2a7ed96 100644
--- a/src/dh-assistant.c
+++ b/src/dh-assistant.c
@@ -27,10 +27,12 @@
#include "dh-util.h"
#include "dh-assistant-view.h"
#include "dh-assistant.h"
+#include "dh-settings.h"
typedef struct {
GtkWidget *main_box;
GtkWidget *view;
+ DhSettings *settings;
} DhAssistantPriv;
static void dh_assistant_class_init (DhAssistantClass *klass);
@@ -54,10 +56,38 @@ assistant_key_press_event_cb (GtkWidget *widget,
return FALSE;
}
+static gboolean
+window_configure_event_cb (GtkWidget *window,
+ GdkEventConfigure *event,
+ gpointer user_data)
+{
+ DhAssistant *assistant;
+ DhAssistantPriv *priv;
+
+ assistant = DH_ASSISTANT (user_data);
+ priv = GET_PRIVATE (assistant);
+ dh_util_window_settings_save (
+ GTK_WINDOW (assistant),
+ dh_settings_peek_assistant_settings (priv->settings), FALSE);
+ return FALSE;
+}
+
+static void
+dispose (GObject *object)
+{
+ DhAssistant *assistant = DH_ASSISTANT (object);
+ DhAssistantPriv *priv = GET_PRIVATE (assistant);
+ g_clear_object (&priv->settings);
+
+ G_OBJECT_CLASS (dh_assistant_parent_class)->dispose (object);
+}
+
static void
dh_assistant_class_init (DhAssistantClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (DhAssistantPriv));
+ object_class->dispose = dispose;
}
static void
@@ -67,7 +97,7 @@ dh_assistant_init (DhAssistant *assistant)
#ifndef HAVE_WEBKIT2
GtkWidget *scrolled_window;
#endif
-
+ priv->settings = dh_settings_get ();
priv->main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_widget_show (priv->main_box);
gtk_container_add (GTK_CONTAINER (assistant), priv->main_box);
@@ -98,8 +128,13 @@ dh_assistant_init (DhAssistant *assistant)
scrolled_window, TRUE, TRUE, 0);
#endif
- dh_util_state_manage_window (GTK_WINDOW (assistant),
- "assistant/window");
+ dh_util_window_settings_restore (
+ GTK_WINDOW (assistant),
+ dh_settings_peek_assistant_settings (priv->settings), FALSE);
+
+ g_signal_connect (GTK_WINDOW (assistant), "configure-event",
+ G_CALLBACK (window_configure_event_cb),
+ assistant);
}
GtkWidget *
diff --git a/src/dh-book-manager.c b/src/dh-book-manager.c
index aa1d605..af6ed72 100644
--- a/src/dh-book-manager.c
+++ b/src/dh-book-manager.c
@@ -4,6 +4,7 @@
* Copyright (C) 2002 Mikael Hallendal <micke imendio com>
* Copyright (C) 2004-2008 Imendio AB
* Copyright (C) 2010 Lanedo GmbH
+ * Copyright (C) 2012 Thomas Bechtold <toabctl gnome org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -25,11 +26,11 @@
#include <string.h>
#include "dh-link.h"
-#include "dh-util.h"
#include "dh-book.h"
#include "dh-language.h"
#include "dh-book-manager.h"
#include "dh-marshal.h"
+#include "dh-settings.h"
#define NEW_POSSIBLE_BOOK_TIMEOUT_SECS 5
@@ -49,6 +50,7 @@ typedef struct {
gboolean group_by_language;
/* List of programming languages with at least one book enabled */
GList *languages;
+ DhSettings *settings;
} DhBookManagerPriv;
enum {
@@ -77,6 +79,8 @@ G_DEFINE_TYPE (DhBookManager, dh_book_manager, G_TYPE_OBJECT);
static void dh_book_manager_init (DhBookManager *book_manager);
static void dh_book_manager_class_init (DhBookManagerClass *klass);
+static void book_manager_load_books_disabled (DhBookManager *book_manager);
+
static void book_manager_add_from_filepath (DhBookManager *book_manager,
const gchar *book_path);
static void book_manager_add_from_dir (DhBookManager *book_manager,
@@ -131,6 +135,8 @@ book_manager_finalize (GObject *object)
}
g_slist_free (priv->books_disabled);
+ g_clear_object (&priv->settings);
+
G_OBJECT_CLASS (dh_book_manager_parent_class)->finalize (object);
}
@@ -227,8 +233,13 @@ dh_book_manager_init (DhBookManager *book_manager)
priv->books = NULL;
priv->monitors = NULL;
priv->languages = NULL;
+ priv->books_disabled = NULL;
+ priv->settings = dh_settings_get ();
- priv->books_disabled = dh_util_state_load_books_disabled ();
+ book_manager_load_books_disabled (book_manager);
+ g_settings_bind (dh_settings_peek_contents_settings (priv->settings),
+ "group-books-by-language", book_manager,
+ "group-by-language", G_SETTINGS_BIND_DEFAULT);
}
static void
@@ -271,6 +282,43 @@ book_manager_get_property (GObject *object,
}
}
+static void
+book_manager_load_books_disabled (DhBookManager *book_manager)
+{
+ DhBookManagerPriv *priv = GET_PRIVATE (book_manager);
+
+ gchar **books_disabled_strv = g_settings_get_strv (
+ dh_settings_peek_contents_settings (priv->settings),
+ "books-disabled");
+ while (*books_disabled_strv != NULL) {
+ priv->books_disabled = g_slist_append (priv->books_disabled, *books_disabled_strv);
+ books_disabled_strv++;
+ }
+}
+
+static void
+book_manager_store_books_disabled (DhBookManager *book_manager)
+{
+ DhBookManagerPriv *priv = GET_PRIVATE (book_manager);
+ GVariantBuilder *builder;
+ GVariant *variant;
+ int i;
+
+ builder = g_variant_builder_new (G_VARIANT_TYPE_STRING_ARRAY);
+ for (i = 0; i < g_slist_length (priv->books_disabled); i++)
+ {
+ gchar *book = (gchar*) g_slist_nth_data (priv->books_disabled, i);
+ g_variant_builder_add (builder, "s", book);
+ }
+
+ variant = g_variant_builder_end (builder);
+
+ g_settings_set_value (
+ dh_settings_peek_contents_settings (priv->settings),
+ "books-disabled",
+ variant);
+}
+
static gboolean
book_manager_is_book_disabled_in_conf (DhBookManager *book_manager,
DhBook *book)
@@ -646,7 +694,7 @@ book_manager_book_enabled_cb (DhBook *book,
* disabled books list! */
g_assert (li != NULL);
priv->books_disabled = g_slist_delete_link (priv->books_disabled, li);
- dh_util_state_store_books_disabled (priv->books_disabled);
+ book_manager_store_books_disabled (book_manager);
/* Increment language count */
book_manager_inc_language (book_manager,
@@ -673,7 +721,7 @@ book_manager_book_disabled_cb (DhBook *book,
g_assert (li == NULL);
priv->books_disabled = g_slist_append (priv->books_disabled,
g_strdup (dh_book_get_name (book)));
- dh_util_state_store_books_disabled (priv->books_disabled);
+ book_manager_store_books_disabled (book_manager);
/* Decrement language count */
book_manager_dec_language (book_manager,
@@ -785,9 +833,6 @@ dh_book_manager_set_group_by_language (DhBookManager *book_manager,
priv = GET_PRIVATE (book_manager);
- /* Store in conf */
- dh_util_state_store_group_books_by_language (group_by_language);
-
priv->group_by_language = group_by_language;
g_object_notify (G_OBJECT (book_manager), "group-by-language");
}
@@ -860,8 +905,6 @@ dh_book_manager_get_languages (DhBookManager *book_manager)
DhBookManager *
dh_book_manager_new (void)
{
- return g_object_new (DH_TYPE_BOOK_MANAGER,
- "group-by-language", dh_util_state_load_group_books_by_language (),
- NULL);
+ return g_object_new (DH_TYPE_BOOK_MANAGER, NULL);
}
diff --git a/src/dh-main.c b/src/dh-main.c
index 0d771a0..fd739bd 100644
--- a/src/dh-main.c
+++ b/src/dh-main.c
@@ -145,9 +145,6 @@ main (int argc, char **argv)
return EXIT_SUCCESS;
}
- /* Initialize Devhelp support */
- dh_init ();
-
/* Create new DhApp */
application = dh_app_new ();
g_signal_connect (application, "activate", G_CALLBACK (activate_cb), NULL);
diff --git a/src/dh-marshal.list b/src/dh-marshal.list
index 13f9cab..98b4030 100644
--- a/src/dh-marshal.list
+++ b/src/dh-marshal.list
@@ -5,3 +5,4 @@ VOID:STRING
VOID:VOID
BOOLEAN:STRING
VOID:STRING,FLAGS
+VOID:STRING,STRING
diff --git a/src/dh-preferences.c b/src/dh-preferences.c
index 4d6581e..3fdfcfb 100644
--- a/src/dh-preferences.c
+++ b/src/dh-preferences.c
@@ -2,6 +2,7 @@
/*
* Copyright (C) 2004-2008 Imendio AB
* Copyright (C) 2010 Lanedo GmbH
+ * Copyright (C) 2012 Thomas Bechtold <toabctl gnome org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -24,12 +25,13 @@
#include <string.h>
#include "dh-util.h"
#include "dh-preferences.h"
-#include "ige-conf.h"
#include "dh-app.h"
+#include "dh-settings.h"
typedef struct {
GtkWidget *dialog;
DhBookManager *book_manager;
+ DhSettings *settings;
/* Fonts tab */
GtkWidget *system_fonts_button;
@@ -47,27 +49,6 @@ typedef struct {
GtkWidget *bookshelf_group_by_language_button;
} DhPreferences;
-/* Fonts-tab related */
-static void preferences_fonts_font_set_cb (GtkFontButton *button,
- gpointer user_data);
-static void preferences_fonts_system_fonts_toggled_cb (GtkToggleButton *button,
- gpointer user_data);
-#if 0
-static void preferences_fonts_var_font_notify_cb (IgeConf *client,
- const gchar *path,
- gpointer user_data);
-static void preferences_fonts_fixed_font_notify_cb (IgeConf *client,
- const gchar *path,
- gpointer user_data);
-static void preferences_fonts_use_system_font_notify_cb (IgeConf *client,
- const gchar *path,
- gpointer user_data);
-static void preferences_connect_conf_listeners (void);
-#endif
-static void preferences_fonts_get_font_names (gboolean use_system_fonts,
- gchar **variable,
- gchar **fixed);
-
/* Bookshelf-tab related */
static void preferences_bookshelf_tree_selection_toggled_cb (GtkCellRendererToggle *cell_renderer,
gchar *path,
@@ -96,16 +77,6 @@ static void preferences_bookshelf_find_book (DhBook
static void preferences_bookshelf_group_by_language_cb (GObject *object,
GParamSpec *pspec,
gpointer user_data);
-static void preferences_bookshelf_group_by_language_toggled_cb (GtkToggleButton *button,
- gpointer user_data);
-
-#define DH_CONF_PATH "/apps/devhelp"
-#define DH_CONF_USE_SYSTEM_FONTS DH_CONF_PATH "/ui/use_system_fonts"
-#define DH_CONF_VARIABLE_FONT DH_CONF_PATH "/ui/variable_font"
-#define DH_CONF_FIXED_FONT DH_CONF_PATH "/ui/fixed_font"
-#define DH_CONF_SYSTEM_VARIABLE_FONT "/desktop/gnome/interface/font_name"
-#define DH_CONF_SYSTEM_FIXED_FONT "/desktop/gnome/interface/monospace_font_name"
-#define DH_CONF_GROUP_BY_LANGUAGE DH_CONF_PATH "/ui/use_system_fonts"
/* Book list store columns... */
#define LTCOLUMN_ENABLED 0
@@ -132,6 +103,7 @@ preferences_init (void)
}
prefs = g_new0 (DhPreferences, 1);
+ prefs->settings = dh_settings_get ();
prefs->book_manager = g_object_ref (dh_app_peek_book_manager (DH_APP (app)));
g_signal_connect (prefs->book_manager,
"book-created",
@@ -154,7 +126,8 @@ preferences_shutdown (void)
return;
}
- g_object_unref (prefs->book_manager);
+ g_clear_object (&prefs->settings);
+ g_clear_object (&prefs->book_manager);
gtk_list_store_clear (prefs->bookshelf_store);
gtk_widget_destroy (GTK_WIDGET (prefs->dialog));
@@ -163,25 +136,6 @@ preferences_shutdown (void)
}
static void
-preferences_fonts_font_set_cb (GtkFontButton *button,
- gpointer user_data)
-{
- DhPreferences *prefs = user_data;
- const gchar *font_name;
- const gchar *key;
-
- font_name = gtk_font_button_get_font_name (button);
-
- if (GTK_WIDGET (button) == prefs->variable_font_button) {
- key = DH_CONF_VARIABLE_FONT;
- } else {
- key = DH_CONF_FIXED_FONT;
- }
-
- ige_conf_set_string (ige_conf_get (), key, font_name);
-}
-
-static void
preferences_fonts_system_fonts_toggled_cb (GtkToggleButton *button,
gpointer user_data)
{
@@ -190,131 +144,9 @@ preferences_fonts_system_fonts_toggled_cb (GtkToggleButton *button,
active = gtk_toggle_button_get_active (button);
- ige_conf_set_bool (ige_conf_get (),
- DH_CONF_USE_SYSTEM_FONTS,
- active);
-
gtk_widget_set_sensitive (prefs->fonts_table, !active);
}
-#if 0
-static void
-preferences_fonts_var_font_notify_cb (IgeConf *client,
- const gchar *path,
- gpointer user_data)
-{
- DhPreferences *prefs = user_data;
- gboolean use_system_fonts;
- gchar *font_name;
-
- ige_conf_get_bool (ige_conf_get (),
- DH_CONF_USE_SYSTEM_FONTS,
- &use_system_fonts);
-
- if (prefs->variable_font_button) {
- ige_conf_get_string (ige_conf_get (), path, &font_name);
- gtk_font_button_set_font_name (GTK_FONT_BUTTON (prefs->variable_font_button),
- font_name);
- g_free (font_name);
- }
-}
-
-static void
-preferences_fonts_fixed_font_notify_cb (IgeConf *client,
- const gchar *path,
- gpointer user_data)
-{
- DhPreferences *prefs = user_data;
- gboolean use_system_fonts;
- gchar *font_name;
-
- ige_conf_get_bool (ige_conf_get (),
- DH_CONF_USE_SYSTEM_FONTS,
- &use_system_fonts);
-
- if (prefs->fixed_font_button) {
- ige_conf_get_string (ige_conf_get (), path, &font_name);
- gtk_font_button_set_font_name (GTK_FONT_BUTTON (prefs->fixed_font_button),
- font_name);
- g_free (font_name);
- }
-}
-
-static void
-preferences_fonts_use_system_font_notify_cb (IgeConf *client,
- const gchar *path,
- gpointer user_data)
-{
- DhPreferences *prefs = user_data;
- gboolean use_system_fonts;
-
- ige_conf_get_bool (ige_conf_get (), path, &use_system_fonts);
-
- if (prefs->system_fonts_button) {
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->system_fonts_button),
- use_system_fonts);
- }
-
- if (prefs->fonts_table) {
- gtk_widget_set_sensitive (prefs->fonts_table, !use_system_fonts);
- }
-}
-
-/* FIXME: This is not hooked up yet (to update the dialog if the values are
- * changed outside of devhelp).
- */
-static void
-preferences_connect_conf_listeners (void)
-{
- IgeConf *conf;
-
- conf = ige_conf_get ();
-
- prefs->use_system_fonts_id =
- ige_conf_notify_add (conf,
- DH_CONF_USE_SYSTEM_FONTS,
- preferences_use_system_font_notify_cb,
- prefs);
- prefs->system_var_id =
- ige_conf_notify_add (conf,
- DH_CONF_SYSTEM_VARIABLE_FONT,
- preferences_var_font_notify_cb,
- prefs);
- prefs->system_fixed_id =
- ige_conf_notify_add (conf,
- DH_CONF_SYSTEM_FIXED_FONT,
- preferences_fixed_font_notify_cb,
- prefs);
- prefs->var_id =
- ige_conf_notify_add (conf,
- DH_CONF_VARIABLE_FONT,
- preferences_var_font_notify_cb,
- prefs);
- prefs->fixed_id =
- ige_conf_notify_add (conf,
- DH_CONF_FIXED_FONT,
- preferences_fixed_font_notify_cb,
- prefs);
-}
-#endif
-
-static void
-preferences_fonts_get_font_names (gboolean use_system_fonts,
- gchar **variable,
- gchar **fixed)
-{
- gchar *name;
- gdouble size;
-
- dh_util_font_get_variable (&name, &size, use_system_fonts);
- *variable = g_strdup_printf ("%s %u", name, (guint)size);
- g_free (name);
-
- dh_util_font_get_fixed (&name, &size, use_system_fonts);
- *fixed = g_strdup_printf ("%s %u", name, (guint)size);
- g_free (name);
-}
-
static void
preferences_bookshelf_set_language_inconsistent (const gchar *language)
{
@@ -800,28 +632,12 @@ preferences_bookshelf_clean_store (void)
gtk_list_store_clear (prefs->bookshelf_store);
}
-static void
-preferences_bookshelf_group_by_language_toggled_cb (GtkToggleButton *button,
- gpointer user_data)
-{
- DhPreferences *prefs = user_data;
- gboolean active;
-
- active = gtk_toggle_button_get_active (button);
-
- if (dh_book_manager_get_group_by_language (prefs->book_manager) != active) {
- dh_book_manager_set_group_by_language (prefs->book_manager,
- active);
- }
-}
-
void
dh_preferences_show_dialog (void)
{
gchar *path;
GtkBuilder *builder;
gboolean use_system_fonts;
- gchar *var_font_name, *fixed_font_name;
preferences_init ();
@@ -847,36 +663,33 @@ dh_preferences_show_dialog (void)
NULL);
g_free (path);
+ /* setup GSettings bindings */
+ GSettings *settings_fonts = dh_settings_peek_fonts_settings (prefs->settings);
+ GSettings *settings_contents = dh_settings_peek_contents_settings (prefs->settings);
+ g_settings_bind (settings_fonts, "use-system-fonts",
+ G_OBJECT (prefs->system_fonts_button),
+ "active", G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (settings_fonts, "fixed-font",
+ G_OBJECT (prefs->fixed_font_button),
+ "font-name", G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (settings_fonts, "variable-font",
+ G_OBJECT (prefs->variable_font_button),
+ "font-name", G_SETTINGS_BIND_DEFAULT);
+
+ g_settings_bind (settings_contents,
+ "group-books-by-language", G_OBJECT (prefs->bookshelf_group_by_language_button),
+ "active", G_SETTINGS_BIND_DEFAULT);
+
dh_util_builder_connect (
builder,
prefs,
- "variable_font_button", "font_set", preferences_fonts_font_set_cb,
- "fixed_font_button", "font_set", preferences_fonts_font_set_cb,
"system_fonts_button", "toggled", preferences_fonts_system_fonts_toggled_cb,
"bookshelf_enabled_toggle", "toggled", preferences_bookshelf_tree_selection_toggled_cb,
- "bookshelf_group_by_language_button", "toggled", preferences_bookshelf_group_by_language_toggled_cb,
NULL);
- ige_conf_get_bool (ige_conf_get (),
- DH_CONF_USE_SYSTEM_FONTS,
- &use_system_fonts);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->system_fonts_button),
- use_system_fonts);
- gtk_widget_set_sensitive (prefs->fonts_table, !use_system_fonts);
-
- preferences_fonts_get_font_names (FALSE, &var_font_name, &fixed_font_name);
-
- if (var_font_name) {
- gtk_font_button_set_font_name (GTK_FONT_BUTTON (prefs->variable_font_button),
- var_font_name);
- g_free (var_font_name);
- }
-
- if (fixed_font_name) {
- gtk_font_button_set_font_name (GTK_FONT_BUTTON (prefs->fixed_font_button),
- fixed_font_name);
- g_free (fixed_font_name);
- }
+ /* set initial sensitive */
+ use_system_fonts = g_settings_get_boolean (settings_fonts, "use-system-fonts");
+ gtk_widget_set_sensitive (prefs->fonts_table, !use_system_fonts);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->bookshelf_group_by_language_button),
dh_book_manager_get_group_by_language (prefs->book_manager));
diff --git a/src/dh-settings.c b/src/dh-settings.c
new file mode 100644
index 0000000..e570b95
--- /dev/null
+++ b/src/dh-settings.c
@@ -0,0 +1,219 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2012 Thomas Bechtold <toabctl gnome org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+
+#include "dh-settings.h"
+#include "dh-marshal.h"
+
+G_DEFINE_TYPE (DhSettings, dh_settings, G_TYPE_OBJECT);
+
+#define DH_SETTINGS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), DH_TYPE_SETTINGS, DhSettingsPrivate))
+
+/* schema-ids for settings we need */
+#define SETTINGS_SCHEMA_ID_DESKTOP_INTERFACE "org.gnome.desktop.interface"
+#define SETTINGS_SCHEMA_ID_FONTS "org.gnome.devhelp.fonts"
+#define SETTINGS_SCHEMA_ID_WINDOW "org.gnome.devhelp.state.main.window"
+#define SETTINGS_SCHEMA_ID_CONTENTS "org.gnome.devhelp.state.main.contents"
+#define SETTINGS_SCHEMA_ID_PANED "org.gnome.devhelp.state.main.paned"
+#define SETTINGS_SCHEMA_ID_SEARCH_NOTEBOOK "org.gnome.devhelp.state.main.search-notebook"
+#define SETTINGS_SCHEMA_ID_ASSISTANT "org.gnome.devhelp.state.assistant.window"
+
+/* singleton object - all consumers of DhSettings get the same object (refcounted) */
+static DhSettings *singleton = NULL;
+
+/* Prototypes */
+static void fonts_changed_cb (GSettings *settings, gchar *key, gpointer user_data);
+
+
+struct _DhSettingsPrivate {
+ GSettings *settings_desktop_interface;
+ GSettings *settings_fonts;
+ GSettings *settings_window;
+ GSettings *settings_contents;
+ GSettings *settings_paned;
+ GSettings *settings_search_notebook;
+ GSettings *settings_assistant;
+};
+
+enum {
+ FONTS_CHANGED,
+ LAST_SIGNAL
+};
+
+static gint signals[LAST_SIGNAL] = { 0 };
+
+
+static void
+dh_settings_init (DhSettings *self)
+{
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, DH_TYPE_SETTINGS, DhSettingsPrivate);
+
+ self->priv->settings_desktop_interface = g_settings_new (SETTINGS_SCHEMA_ID_DESKTOP_INTERFACE);
+ self->priv->settings_fonts = g_settings_new (SETTINGS_SCHEMA_ID_FONTS);
+ self->priv->settings_window = g_settings_new (SETTINGS_SCHEMA_ID_WINDOW);
+ self->priv->settings_contents = g_settings_new (SETTINGS_SCHEMA_ID_CONTENTS);
+ self->priv->settings_paned = g_settings_new (SETTINGS_SCHEMA_ID_PANED);
+ self->priv->settings_search_notebook = g_settings_new (SETTINGS_SCHEMA_ID_SEARCH_NOTEBOOK);
+ self->priv->settings_assistant = g_settings_new (SETTINGS_SCHEMA_ID_ASSISTANT);
+
+ /* setup GSettings notifications */
+ g_signal_connect (self->priv->settings_fonts,
+ "changed",
+ G_CALLBACK (fonts_changed_cb), self);
+}
+
+
+static void
+dispose (GObject *object)
+{
+ DhSettings *self = DH_SETTINGS (object);
+ g_clear_object (&self->priv->settings_desktop_interface);
+ g_clear_object (&self->priv->settings_fonts);
+ g_clear_object (&self->priv->settings_window);
+ g_clear_object (&self->priv->settings_contents);
+ g_clear_object (&self->priv->settings_paned);
+ g_clear_object (&self->priv->settings_search_notebook);
+ g_clear_object (&self->priv->settings_assistant);
+
+ G_OBJECT_CLASS (dh_settings_parent_class)->dispose (object);
+}
+
+
+static void
+finalize (GObject *object)
+{
+ singleton = NULL;
+
+ /* Chain up to the parent class */
+ G_OBJECT_CLASS (dh_settings_parent_class)->finalize(object);
+}
+
+
+static void
+dh_settings_class_init (DhSettingsClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (DhSettingsPrivate));
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ signals[FONTS_CHANGED] =
+ g_signal_new ("fonts-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (DhSettingsClass, fonts_changed),
+ NULL, NULL,
+ _dh_marshal_VOID__STRING_STRING,
+ G_TYPE_NONE,
+ 2,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+}
+
+static void
+fonts_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
+{
+ DhSettings *self = DH_SETTINGS (user_data);
+ gchar *fixed_font = NULL;
+ gchar *variable_font = NULL;
+ dh_settings_get_selected_fonts (self, &fixed_font, &variable_font);
+ //emit signal - font changed
+ g_signal_emit (self, signals[FONTS_CHANGED], 0, fixed_font, variable_font);
+ g_free (fixed_font);
+ g_free (variable_font);
+}
+
+/*******************************************************************************
+ * Public Methods
+ ******************************************************************************/
+DhSettings *
+dh_settings_get (void)
+{
+ if (!singleton) {
+ singleton = DH_SETTINGS (g_object_new (DH_TYPE_SETTINGS, NULL));
+ } else {
+ g_object_ref (singleton);
+ }
+ g_assert (singleton);
+ return singleton;
+}
+
+void
+dh_settings_get_selected_fonts (DhSettings *self, gchar **font_name_fixed, gchar **font_name_variable)
+{
+ g_return_if_fail (font_name_fixed != NULL && *font_name_fixed == NULL);
+ g_return_if_fail (font_name_variable != NULL && *font_name_variable == NULL);
+
+ gboolean use_system_font = g_settings_get_boolean (
+ self->priv->settings_fonts, "use-system-fonts");
+ if (use_system_font) {
+ *font_name_fixed = g_settings_get_string (
+ self->priv->settings_desktop_interface,
+ "monospace-font-name");
+ *font_name_variable = g_settings_get_string (
+ self->priv->settings_desktop_interface,
+ "font-name");
+ } else {
+ *font_name_fixed = g_settings_get_string (
+ self->priv->settings_fonts, "fixed-font");
+ *font_name_variable = g_settings_get_string (
+ self->priv->settings_fonts, "variable-font");
+ }
+}
+
+GSettings *
+dh_settings_peek_fonts_settings (DhSettings *self)
+{
+ return self->priv->settings_fonts;
+}
+
+GSettings *
+dh_settings_peek_window_settings (DhSettings *self)
+{
+ return self->priv->settings_window;
+}
+
+GSettings *
+dh_settings_peek_contents_settings (DhSettings *self)
+{
+ return self->priv->settings_contents;
+}
+
+GSettings *
+dh_settings_peek_paned_settings (DhSettings *self)
+{
+ return self->priv->settings_paned;
+}
+
+GSettings *
+dh_settings_peek_search_notebook_settings (DhSettings *self)
+{
+ return self->priv->settings_search_notebook;
+}
+
+GSettings *
+dh_settings_peek_assistant_settings (DhSettings *self)
+{
+ return self->priv->settings_assistant;
+}
+
diff --git a/src/dh-settings.h b/src/dh-settings.h
new file mode 100644
index 0000000..0e5f37c
--- /dev/null
+++ b/src/dh-settings.h
@@ -0,0 +1,77 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2012 Thomas Bechtold <toabctl gnome org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __DH_SETTINGS_H__
+#define __DH_SETTINGS_H__
+
+#include <gio/gio.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define DH_TYPE_SETTINGS (dh_settings_get_type ())
+#define DH_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DH_TYPE_SETTINGS, DhSettings))
+#define DH_IS_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DH_TYPE_SETTINGS))
+#define DH_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DH_TYPE_SETTINGS, DhSettingsClass))
+#define DH_IS_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DH_TYPE_SETTINGS))
+#define DH_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DH_TYPE_SETTINGS, DhSettingsClass))
+
+
+typedef struct _DhSettings DhSettings;
+typedef struct _DhSettingsClass DhSettingsClass;
+typedef struct _DhSettingsPrivate DhSettingsPrivate;
+
+
+struct _DhSettings{
+ GObject parent;
+ /*<private>*/
+ DhSettingsPrivate *priv;
+};
+
+struct _DhSettingsClass{
+ GObjectClass parent;
+ /* Signals */
+ void (*fonts_changed) (DhSettings *settings,
+ const gchar *font_name_fixed,
+ const gchar *font_name_variable);
+} ;
+
+GType dh_settings_get_type (void) G_GNUC_CONST;;
+
+DhSettings * dh_settings_get (void);
+
+void dh_settings_get_selected_fonts (DhSettings *self, gchar **font_name_fixed, gchar **font_name_variable);
+
+GSettings * dh_settings_peek_fonts_settings (DhSettings *self);
+
+GSettings * dh_settings_peek_window_settings (DhSettings *self);
+
+GSettings * dh_settings_peek_contents_settings (DhSettings *self);
+
+GSettings * dh_settings_peek_paned_settings (DhSettings *self);
+
+GSettings * dh_settings_peek_search_notebook_settings (DhSettings *self);
+
+GSettings * dh_settings_peek_assistant_settings (DhSettings *self);
+
+
+G_END_DECLS
+
+#endif /* __DH_SETTINGS_H__ */
diff --git a/src/dh-util.c b/src/dh-util.c
index 08151a3..12a9670 100644
--- a/src/dh-util.c
+++ b/src/dh-util.c
@@ -27,10 +27,8 @@
#ifdef GDK_WINDOWING_QUARTZ
#include <gtkosxapplication.h>
#endif
-#include "ige-conf.h"
#include "dh-util.h"
-static GList *views;
static GtkBuilder *
get_builder_file (const gchar *filename,
@@ -188,627 +186,6 @@ dh_util_build_data_filename (const gchar *first_part,
return ret;
}
-typedef struct {
- gchar *name;
- guint timeout_id;
-} DhUtilStateItem;
-
-static void
-util_state_item_free (DhUtilStateItem *item)
-{
- g_free (item->name);
- if (item->timeout_id) {
- g_source_remove (item->timeout_id);
- }
- g_slice_free (DhUtilStateItem, item);
-}
-
-static void
-util_state_setup_widget (GtkWidget *widget,
- const gchar *name)
-{
- DhUtilStateItem *item;
-
- item = g_slice_new0 (DhUtilStateItem);
- item->name = g_strdup (name);
-
- g_object_set_data_full (G_OBJECT (widget),
- "dh-util-state",
- item,
- (GDestroyNotify) util_state_item_free);
-}
-
-static gchar *
-util_state_get_key (const gchar *name,
- const gchar *key)
-{
- return g_strdup_printf ("/apps/devhelp/state/%s/%s", name, key);
-}
-
-static void
-util_state_schedule_save (GtkWidget *widget,
- GSourceFunc func)
-
-{
- DhUtilStateItem *item;
-
- item = g_object_get_data (G_OBJECT (widget), "dh-util-state");
- if (item->timeout_id) {
- g_source_remove (item->timeout_id);
- }
-
- item->timeout_id = g_timeout_add (500,
- func,
- widget);
-}
-
-static void
-util_state_save_window (GtkWindow *window,
- const gchar *name)
-{
- gchar *key;
- GdkWindowState state;
- gboolean maximized;
- gint width, height;
- gint x, y;
-
- state = gdk_window_get_state (gtk_widget_get_window (GTK_WIDGET (window)));
- if (state & GDK_WINDOW_STATE_MAXIMIZED) {
- maximized = TRUE;
- } else {
- maximized = FALSE;
- }
-
- key = util_state_get_key (name, "maximized");
- ige_conf_set_bool (ige_conf_get (), key, maximized);
- g_free (key);
-
- /* If maximized don't save the size and position. */
- if (maximized) {
- return;
- }
-
- gtk_window_get_size (GTK_WINDOW (window), &width, &height);
-
- key = util_state_get_key (name, "width");
- ige_conf_set_int (ige_conf_get (), key, width);
- g_free (key);
-
- key = util_state_get_key (name, "height");
- ige_conf_set_int (ige_conf_get (), key, height);
- g_free (key);
-
- gtk_window_get_position (GTK_WINDOW (window), &x, &y);
-
- key = util_state_get_key (name, "x_position");
- ige_conf_set_int (ige_conf_get (), key, x);
- g_free (key);
-
- key = util_state_get_key (name, "y_position");
- ige_conf_set_int (ige_conf_get (), key, y);
- g_free (key);
-}
-
-static void
-util_state_restore_window (GtkWindow *window,
- const gchar *name)
-{
- gchar *key;
- gboolean maximized;
- gint width, height;
- gint x, y;
- GdkScreen *screen;
- gint max_width, max_height;
-
- key = util_state_get_key (name, "width");
- ige_conf_get_int (ige_conf_get (), key, &width);
- g_free (key);
-
- key = util_state_get_key (name, "height");
- ige_conf_get_int (ige_conf_get (), key, &height);
- g_free (key);
-
- key = util_state_get_key (name, "x_position");
- ige_conf_get_int (ige_conf_get (), key, &x);
- g_free (key);
-
- key = util_state_get_key (name, "y_position");
- ige_conf_get_int (ige_conf_get (), key, &y);
- g_free (key);
-
- if (width > 1 && height > 1) {
- screen = gtk_widget_get_screen (GTK_WIDGET (window));
- max_width = gdk_screen_get_width (screen);
- max_height = gdk_screen_get_height (screen);
-
- width = CLAMP (width, 0, max_width);
- height = CLAMP (height, 0, max_height);
-
- x = CLAMP (x, 0, max_width - width);
- y = CLAMP (y, 0, max_height - height);
-
- gtk_window_set_default_size (window, width, height);
- }
-
- gtk_window_move (window, x, y);
-
- key = util_state_get_key (name, "maximized");
- ige_conf_get_bool (ige_conf_get (), key, &maximized);
- g_free (key);
-
- if (maximized) {
- gtk_window_maximize (window);
- }
-}
-
-static gboolean
-util_state_window_timeout_cb (gpointer window)
-{
- DhUtilStateItem *item;
-
- item = g_object_get_data (window, "dh-util-state");
- if (item) {
- item->timeout_id = 0;
- util_state_save_window (window, item->name);
- }
-
- return FALSE;
-}
-
-static gboolean
-util_state_window_configure_event_cb (GtkWidget *window,
- GdkEventConfigure *event,
- gpointer user_data)
-{
- util_state_schedule_save (window, util_state_window_timeout_cb);
- return FALSE;
-}
-
-static gboolean
-util_state_paned_timeout_cb (gpointer paned)
-{
- DhUtilStateItem *item;
-
- item = g_object_get_data (paned, "dh-util-state");
- if (item) {
- gchar *key;
-
- item->timeout_id = 0;
-
- key = util_state_get_key (item->name, "position");
- ige_conf_set_int (ige_conf_get (),
- key,
- gtk_paned_get_position (paned));
- g_free (key);
- }
-
- return FALSE;
-}
-
-static gboolean
-util_state_paned_changed_cb (GtkWidget *paned,
- gpointer user_data)
-{
- util_state_schedule_save (paned, util_state_paned_timeout_cb);
- return FALSE;
-}
-
-void
-dh_util_state_manage_window (GtkWindow *window,
- const gchar *name)
-{
- util_state_setup_widget (GTK_WIDGET (window), name);
-
- g_signal_connect (window, "configure-event",
- G_CALLBACK (util_state_window_configure_event_cb),
- NULL);
-
- util_state_restore_window (window, name);
-}
-
-void
-dh_util_state_manage_paned (GtkPaned *paned,
- const gchar *name)
-{
- gchar *key;
- gint position;
-
- util_state_setup_widget (GTK_WIDGET (paned), name);
-
- key = util_state_get_key (name, "position");
- if (ige_conf_get_int (ige_conf_get (), key, &position)) {
- gtk_paned_set_position (paned, position);
- }
- g_free (key);
-
- g_signal_connect (paned, "notify::position",
- G_CALLBACK (util_state_paned_changed_cb),
- NULL);
-}
-
-GSList *
-dh_util_state_load_books_disabled (void)
-{
- gchar *key;
- GSList *books_disabled = NULL;
-
- key = util_state_get_key ("main/contents", "books_disabled");
- ige_conf_get_string_list (ige_conf_get (), key, &books_disabled);
- g_free (key);
-
- return books_disabled;
-}
-
-void
-dh_util_state_store_books_disabled (GSList *books_disabled)
-{
- gchar *key;
-
- key = util_state_get_key ("main/contents", "books_disabled");
- ige_conf_set_string_list (ige_conf_get (), key, books_disabled);
- g_free (key);
-}
-
-gboolean
-dh_util_state_load_group_books_by_language (void)
-{
- gchar *key;
- gboolean group_books_by_language = FALSE;
-
- key = util_state_get_key ("main/contents", "group_books_by_language");
- ige_conf_get_bool (ige_conf_get (), key, &group_books_by_language);
- g_free (key);
-
- return group_books_by_language;
-}
-
-void
-dh_util_state_store_group_books_by_language (gboolean group_books_by_language)
-{
- gchar *key;
-
- key = util_state_get_key ("main/contents", "group_books_by_language");
- ige_conf_set_bool (ige_conf_get (), key, group_books_by_language);
- g_free (key);
-}
-
-static gboolean
-util_state_notebook_timeout_cb (gpointer notebook)
-{
- DhUtilStateItem *item;
-
- item = g_object_get_data (notebook, "dh-util-state");
- if (item) {
- GtkWidget *page;
- const gchar *page_name;
-
- item->timeout_id = 0;
-
- page = gtk_notebook_get_nth_page (
- notebook,
- gtk_notebook_get_current_page (notebook));
- page_name = dh_util_state_get_notebook_page_name (page);
- if (page_name) {
- gchar *key;
-
- key = util_state_get_key (item->name, "selected_tab");
- ige_conf_set_string (ige_conf_get (), key, page_name);
- g_free (key);
- }
- }
-
- return FALSE;
-}
-
-static void
-util_state_notebook_switch_page_cb (GtkWidget *notebook,
- gpointer page,
- guint page_num,
- gpointer user_data)
-{
- util_state_schedule_save (notebook, util_state_notebook_timeout_cb);
-}
-
-void
-dh_util_state_set_notebook_page_name (GtkWidget *page,
- const gchar *page_name)
-{
- g_object_set_data_full (G_OBJECT (page),
- "dh-util-state-tab-name",
- g_strdup (page_name),
- g_free);
-}
-
-const gchar *
-dh_util_state_get_notebook_page_name (GtkWidget *page)
-{
- return g_object_get_data (G_OBJECT (page),
- "dh-util-state-tab-name");
-}
-
-void
-dh_util_state_manage_notebook (GtkNotebook *notebook,
- const gchar *name,
- const gchar *default_tab)
-{
- gchar *key;
- gchar *tab;
- gint i;
-
- util_state_setup_widget (GTK_WIDGET (notebook), name);
-
- key = util_state_get_key (name, "selected_tab");
- if (!ige_conf_get_string (ige_conf_get (), key, &tab)) {
- tab = g_strdup (default_tab);
- }
- g_free (key);
-
- for (i = 0; i < gtk_notebook_get_n_pages (notebook); i++) {
- GtkWidget *page;
- const gchar *page_name;
-
- page = gtk_notebook_get_nth_page (notebook, i);
- page_name = dh_util_state_get_notebook_page_name (page);
- if (page_name && strcmp (page_name, tab) == 0) {
- gtk_notebook_set_current_page (notebook, i);
- gtk_widget_grab_focus (page);
- break;
- }
- }
-
- g_free (tab);
-
- g_signal_connect (notebook, "switch-page",
- G_CALLBACK (util_state_notebook_switch_page_cb),
- NULL);
-}
-
-static gboolean
-split_font_string (const gchar *name_and_size,
- gchar **name,
- gdouble *size)
-{
- PangoFontDescription *desc;
- PangoFontMask mask;
- gboolean retval = FALSE;
-
- desc = pango_font_description_from_string (name_and_size);
- if (!desc) {
- return FALSE;
- }
-
- mask = (PANGO_FONT_MASK_FAMILY | PANGO_FONT_MASK_SIZE);
- if ((pango_font_description_get_set_fields (desc) & mask) == mask) {
- *size = PANGO_PIXELS (pango_font_description_get_size (desc));
- *name = g_strdup (pango_font_description_get_family (desc));
- retval = TRUE;
- }
-
- pango_font_description_free (desc);
-
- return retval;
-}
-
-#define DH_CONF_PATH "/apps/devhelp"
-#define DH_CONF_USE_SYSTEM_FONTS DH_CONF_PATH "/ui/use_system_fonts"
-#define DH_CONF_VARIABLE_FONT DH_CONF_PATH "/ui/variable_font"
-#define DH_CONF_FIXED_FONT DH_CONF_PATH "/ui/fixed_font"
-#define DH_CONF_SYSTEM_VARIABLE_FONT "/desktop/gnome/interface/font_name"
-#define DH_CONF_SYSTEM_FIXED_FONT "/desktop/gnome/interface/monospace_font_name"
-
-void
-dh_util_font_get_variable (gchar **name,
- gdouble *size,
- gboolean use_system_fonts)
-{
- IgeConf *conf;
- gchar *name_and_size;
- GSettings *settings;
-
- conf = ige_conf_get ();
-
- if (use_system_fonts) {
-#ifdef GDK_WINDOWING_QUARTZ
- name_and_size = g_strdup ("Lucida Grande 14");
-#else
- settings = g_settings_new ("org.gnome.desktop.interface");
- name_and_size = g_settings_get_string (settings, "font-name");
- g_object_unref (settings);
-#endif
- } else {
- ige_conf_get_string (conf,
- DH_CONF_VARIABLE_FONT,
- &name_and_size);
- }
-
- if (!split_font_string (name_and_size, name, size)) {
- *name = g_strdup ("sans");
- *size = 12;
- }
-
- g_free (name_and_size);
-}
-
-void
-dh_util_font_get_fixed (gchar **name,
- gdouble *size,
- gboolean use_system_fonts)
-{
- IgeConf *conf;
- gchar *name_and_size;
- GSettings *settings;
-
- conf = ige_conf_get ();
-
- if (use_system_fonts) {
-#ifdef GDK_WINDOWING_QUARTZ
- name_and_size = g_strdup ("Monaco 14");
-#else
- settings = g_settings_new ("org.gnome.desktop.interface");
- name_and_size = g_settings_get_string (settings, "monospace-font-name");
- g_object_unref (settings);
-#endif
- } else {
- ige_conf_get_string (conf,
- DH_CONF_FIXED_FONT,
- &name_and_size);
- }
-
- if (!split_font_string (name_and_size, name, size)) {
- *name = g_strdup ("monospace");
- *size = 12;
- }
-
- g_free (name_and_size);
-}
-
-static void
-view_destroy_cb (GtkWidget *view,
- gpointer user_data)
-{
- views = g_list_remove (views, view);
-}
-
-#ifdef HAVE_WEBKIT2
-static gdouble
-get_screen_dpi (GdkScreen *screen)
-{
- gdouble dpi;
- gdouble dp, di;
-
- dpi = gdk_screen_get_resolution (screen);
- if (dpi != -1)
- return dpi;
-
- dp = hypot (gdk_screen_get_width (screen), gdk_screen_get_height (screen));
- di = hypot (gdk_screen_get_width_mm (screen), gdk_screen_get_height_mm (screen)) / 25.4;
-
- return dp / di;
-}
-#endif
-
-static guint
-dh_util_convert_font_size_to_pixels (GtkWidget *widget,
- gdouble font_size)
-{
-#ifdef HAVE_WEBKIT2
- /* WebKit2 uses font sizes in pixels */
- GdkScreen *screen;
- gdouble dpi;
-
- screen = gtk_widget_has_screen (widget) ?
- gtk_widget_get_screen (widget) : gdk_screen_get_default ();
- dpi = screen ? get_screen_dpi (screen) : 96;
-
- return font_size / 72.0 * dpi;
-#else
- return font_size;
-#endif
-}
-
-static void
-view_setup_fonts (WebKitWebView *view)
-{
-#ifdef HAVE_WEBKIT2
- WebKitSettings *settings;
-#else
- WebKitWebSettings *settings;
-#endif
- IgeConf *conf;
- gboolean use_system_fonts;
- gchar *variable_name;
- gdouble variable_size;
- guint variable_size_px;
- gchar *fixed_name;
- gdouble fixed_size;
- guint fixed_size_px;
-
- conf = ige_conf_get ();
-
- settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (view));
-
- ige_conf_get_bool (conf,
- DH_CONF_USE_SYSTEM_FONTS,
- &use_system_fonts);
-
- dh_util_font_get_variable (&variable_name, &variable_size,
- use_system_fonts);
- dh_util_font_get_fixed (&fixed_name, &fixed_size,
- use_system_fonts);
-
- variable_size_px = dh_util_convert_font_size_to_pixels (GTK_WIDGET (view), fixed_size);
- fixed_size_px = dh_util_convert_font_size_to_pixels (GTK_WIDGET (view), variable_size);
-
- g_object_set (settings,
-#ifdef HAVE_WEBKIT2
- "zoom-text-only", TRUE,
-#endif
- "monospace-font-family", fixed_name,
- "default-monospace-font-size", fixed_size_px,
- "sans-serif-font-family", variable_name,
- "serif-font-family", variable_name,
- "default-font-size", variable_size_px,
- NULL);
-
- g_free (variable_name);
- g_free (fixed_name);
-}
-
-static void
-font_notify_cb (IgeConf *conf,
- const gchar *path,
- gpointer user_data)
-{
- GList *l;
-
- for (l = views; l; l = l->next) {
- view_setup_fonts (l->data);
- }
-}
-
-void
-dh_util_font_add_web_view (WebKitWebView *view)
-{
- static gboolean setup;
-
- if (!setup) {
- IgeConf *conf;
-
- conf = ige_conf_get ();
-
- ige_conf_notify_add (conf,
- DH_CONF_USE_SYSTEM_FONTS,
- font_notify_cb,
- NULL);
- ige_conf_notify_add (conf,
- DH_CONF_SYSTEM_VARIABLE_FONT,
- font_notify_cb,
- NULL);
- ige_conf_notify_add (conf,
- DH_CONF_SYSTEM_FIXED_FONT,
- font_notify_cb,
- NULL);
- ige_conf_notify_add (conf,
- DH_CONF_VARIABLE_FONT,
- font_notify_cb,
- NULL);
- ige_conf_notify_add (conf,
- DH_CONF_FIXED_FONT,
- font_notify_cb,
- NULL);
-
- setup = TRUE;
- }
-
- views = g_list_prepend (views, view);
-
- g_signal_connect (view, "destroy",
- G_CALLBACK (view_destroy_cb),
- NULL);
-
- view_setup_fonts (view);
-}
-
gint
dh_util_cmp_book (DhLink *a, DhLink *b)
{
@@ -892,3 +269,113 @@ dh_util_create_data_uri_for_filename (const gchar *filename,
return uri;
}
+
+/* set the given fonts on the given view */
+void
+dh_util_view_set_font (WebKitWebView *view, const gchar *font_name_fixed, const gchar *font_name_variable)
+{
+ /* get the font size */
+ PangoFontDescription *font_desc_fixed = pango_font_description_from_string (font_name_fixed);
+ PangoFontDescription *font_desc_variable = pango_font_description_from_string (font_name_variable);
+ gint font_size_fixed = PANGO_PIXELS (pango_font_description_get_size (font_desc_fixed));
+ gint font_size_variable = PANGO_PIXELS (pango_font_description_get_size (font_desc_variable));
+ pango_font_description_free (font_desc_fixed);
+ pango_font_description_free (font_desc_variable);
+
+ /* get the settings from the view */
+ #ifdef HAVE_WEBKIT2
+ WebKitSettings *settings;
+#else
+ WebKitWebSettings *settings;
+#endif
+ settings = webkit_web_view_get_settings (view);
+ /* set the fonts */
+ g_object_set (settings,
+#ifdef HAVE_WEBKIT2
+ "zoom-text-only", TRUE,
+#endif
+ "monospace-font-family", font_name_fixed,
+ "default-monospace-font-size", font_size_fixed,
+ "serif-font-family", font_name_variable,
+ "default-font-size", font_size_variable,
+ NULL);
+ g_debug ("Set font-fixed to '%s' (%i) and font-variable to '%s' (%i).",
+ font_name_fixed, font_size_fixed, font_name_variable, font_size_variable);
+}
+
+void
+dh_util_window_settings_save (GtkWindow *window, GSettings *settings, gboolean has_maximize)
+{
+ GdkWindowState state;
+ gboolean maximized;
+ gint width, height;
+ gint x, y;
+
+
+ if (has_maximize) {
+ state = gdk_window_get_state (gtk_widget_get_window (GTK_WIDGET (window)));
+ if (state & GDK_WINDOW_STATE_MAXIMIZED) {
+ maximized = TRUE;
+ } else {
+ maximized = FALSE;
+ }
+
+ g_settings_set_boolean (settings, "maximized", maximized);
+
+ /* If maximized don't save the size and position. */
+ if (maximized) {
+ return;
+ }
+ }
+
+ /* store the dimensions */
+ gtk_window_get_size (GTK_WINDOW (window), &width, &height);
+ g_settings_set_int (settings, "width", width);
+ g_settings_set_int (settings, "height", height);
+
+ /* store the position */
+ gtk_window_get_position (GTK_WINDOW (window), &x, &y);
+ g_settings_set_int (settings, "x-position", x);
+ g_settings_set_int (settings, "y-position", y);
+}
+
+void
+dh_util_window_settings_restore (GtkWindow *window,
+ GSettings *settings,
+ gboolean has_maximize)
+{
+ gboolean maximized;
+ gint width, height;
+ gint x, y;
+ GdkScreen *screen;
+ gint max_width, max_height;
+
+ width = g_settings_get_int (settings, "width");
+ height = g_settings_get_int (settings, "height");
+ x = g_settings_get_int (settings, "x-position");
+ y = g_settings_get_int (settings, "y-position");
+
+ if (width > 1 && height > 1) {
+ screen = gtk_widget_get_screen (GTK_WIDGET (window));
+ max_width = gdk_screen_get_width (screen);
+ max_height = gdk_screen_get_height (screen);
+
+ width = CLAMP (width, 0, max_width);
+ height = CLAMP (height, 0, max_height);
+
+ x = CLAMP (x, 0, max_width - width);
+ y = CLAMP (y, 0, max_height - height);
+
+ gtk_window_set_default_size (window, width, height);
+ }
+
+ gtk_window_move (window, x, y);
+
+ if (has_maximize) {
+ maximized = g_settings_get_boolean (settings, "maximized");
+
+ if (maximized) {
+ gtk_window_maximize (window);
+ }
+ }
+}
diff --git a/src/dh-util.h b/src/dh-util.h
index 0ac9778..1727e4d 100644
--- a/src/dh-util.h
+++ b/src/dh-util.h
@@ -23,6 +23,7 @@
#define __DH_UTIL_H__
#include <gtk/gtk.h>
+#include <gio/gio.h>
#ifdef HAVE_WEBKIT2
#include <webkit2/webkit2.h>
#else
@@ -43,31 +44,6 @@ void dh_util_builder_connect (GtkBuilder *gui,
...);
gchar * dh_util_build_data_filename (const gchar *first_part,
...);
-void dh_util_state_manage_window (GtkWindow *window,
- const gchar *name);
-void dh_util_state_manage_paned (GtkPaned *paned,
- const gchar *name);
-void dh_util_state_manage_notebook (GtkNotebook *notebook,
- const gchar *name,
- const gchar *default_tab);
-void dh_util_state_set_notebook_page_name (GtkWidget *page,
- const gchar *page_name);
-const gchar *dh_util_state_get_notebook_page_name (GtkWidget *page);
-
-GSList * dh_util_state_load_books_disabled (void);
-void dh_util_state_store_books_disabled (GSList *books_disabled);
-
-gboolean dh_util_state_load_group_books_by_language (void);
-void dh_util_state_store_group_books_by_language (gboolean group_books_by_language);
-
-void dh_util_font_get_variable (gchar **name,
- gdouble *size,
- gboolean use_system_font);
-void dh_util_font_get_fixed (gchar **name,
- gdouble *size,
- gboolean use_system_font);
-void dh_util_font_add_web_view (WebKitWebView *view);
-
gint dh_util_cmp_book (DhLink *a,
DhLink *b);
@@ -75,6 +51,18 @@ void dh_util_ascii_strtitle (gchar *str);
gchar *dh_util_create_data_uri_for_filename (const gchar *filename,
const gchar *mime_type);
+void dh_util_view_set_font (WebKitWebView *view,
+ const gchar *font_name_fixed,
+ const gchar *font_name_variable);
+
+void dh_util_window_settings_save (GtkWindow *window,
+ GSettings *settings,
+ gboolean has_maximize);
+
+void dh_util_window_settings_restore (GtkWindow *window,
+ GSettings *settings,
+ gboolean has_maximize);
+
G_END_DECLS
#endif /* __DH_UTIL_H__ */
diff --git a/src/dh-window.c b/src/dh-window.c
index cbd1a08..e45fc3e 100644
--- a/src/dh-window.c
+++ b/src/dh-window.c
@@ -2,6 +2,7 @@
/*
* Copyright (C) 2001-2008 Imendio AB
* Copyright (C) 2012 Aleksander Morgado <aleksander gnu org>
+ * Copyright (C) 2012 Thomas Bechtold <toabctl gnome org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -50,6 +51,7 @@
#include "dh-util.h"
#include "dh-marshal.h"
#include "dh-enum-types.h"
+#include "dh-settings.h"
#include "eggfindbar.h"
#define FULLSCREEN_ANIMATION_SPEED 4
@@ -75,6 +77,7 @@ struct _DhWindowPriv {
DhLink *selected_search_link;
guint find_source_id;
+ DhSettings *settings;
};
enum {
@@ -191,7 +194,7 @@ print_cb (GSimpleAction *action,
WebKitPrintOperation *print_operation;
print_operation = webkit_print_operation_new (web_view);
- webkit_print_operation_run_dialog (print_operation, GTK_WIDGET (window));
+ webkit_print_operation_run_dialog (print_operation, GTK_WINDOW (window));
g_object_unref (print_operation);
#else
webkit_web_view_execute_script (web_view, "print();");
@@ -811,6 +814,40 @@ window_fullscreen_controls_show (DhWindow *window)
}
static void
+settings_fonts_changed_cb (DhSettings *settings,
+ const gchar *font_name_fixed,
+ const gchar *font_name_variable,
+ gpointer user_data)
+{
+ DhWindow *window = DH_WINDOW (user_data);
+ DhWindowPriv *priv = window->priv;
+ gint i;
+ WebKitWebView *view;
+ /* change font for all pages */
+ for (i = 0; i < gtk_notebook_get_n_pages (GTK_NOTEBOOK(priv->notebook)); i++) {
+ GtkWidget *page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), i);
+ view = WEBKIT_WEB_VIEW (g_object_get_data (G_OBJECT (page), "web_view"));
+ dh_util_view_set_font (view, font_name_fixed, font_name_variable);
+ }
+}
+
+static gboolean
+window_configure_event_cb (GtkWidget *window,
+ GdkEventConfigure *event,
+ gpointer user_data)
+{
+ DhWindow *dhwindow;
+ DhWindowPriv *priv;
+
+ dhwindow = DH_WINDOW (user_data);
+ priv = GET_PRIVATE (dhwindow);
+ dh_util_window_settings_save (
+ GTK_WINDOW (window),
+ dh_settings_peek_window_settings (priv->settings), TRUE);
+ return FALSE;
+}
+
+static void
dh_window_init (DhWindow *window)
{
DhWindowPriv *priv;
@@ -825,6 +862,13 @@ dh_window_init (DhWindow *window)
priv->selected_search_link = NULL;
+ /* handle settings */
+ priv->settings = dh_settings_get ();
+ g_signal_connect (priv->settings,
+ "fonts-changed",
+ G_CALLBACK (settings_fonts_changed_cb),
+ window);
+
/* Setup builder */
priv->builder = gtk_builder_new ();
path = dh_util_build_data_filename ("devhelp", "ui", "devhelp.builder", NULL);
@@ -863,9 +907,21 @@ dh_window_init (DhWindow *window)
}
static void
+dispose (GObject *object)
+{
+ DhWindow *self = DH_WINDOW (object);
+ g_clear_object (&self->priv->settings);
+
+ /* Chain up to the parent class */
+ G_OBJECT_CLASS (dh_window_parent_class)->dispose (object);
+}
+
+static void
dh_window_class_init (DhWindowClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (DhWindowPriv));
+ object_class->dispose = dispose;
signals[OPEN_LINK] =
g_signal_new ("open-link",
@@ -922,6 +978,11 @@ window_control_after_switch_page_cb (GtkWidget *notebook,
g_signal_handlers_unblock_by_func (priv->book_tree,
window_tree_link_selected_cb,
window);
+ /* save the current selected tab */
+ const gchar *label = gtk_notebook_get_tab_label_text (GTK_NOTEBOOK (notebook), page);
+ g_settings_set_string (
+ dh_settings_peek_search_notebook_settings (priv->settings),
+ "selected-tab", label);
}
static void
@@ -976,6 +1037,8 @@ window_populate (DhWindow *window)
GtkWidget *book_tree_sw;
DhBookManager *book_manager;
GtkWidget *toolbar;
+ gchar *selected_tab;
+ guint i;
priv = window->priv;
@@ -1016,16 +1079,6 @@ window_populate (DhWindow *window)
gtk_paned_add1 (GTK_PANED (priv->hpaned), priv->control_notebook);
- g_signal_connect (priv->control_notebook,
- "switch-page",
- G_CALLBACK (window_control_switch_page_cb),
- window);
-
- g_signal_connect_after (priv->control_notebook,
- "switch-page",
- G_CALLBACK (window_control_after_switch_page_cb),
- window);
-
book_tree_sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (book_tree_sw),
@@ -1040,7 +1093,6 @@ window_populate (DhWindow *window)
priv->book_tree = dh_book_tree_new (book_manager);
gtk_container_add (GTK_CONTAINER (book_tree_sw),
priv->book_tree);
- dh_util_state_set_notebook_page_name (book_tree_sw, "content");
gtk_notebook_append_page (GTK_NOTEBOOK (priv->control_notebook),
book_tree_sw,
gtk_label_new (_("Contents")));
@@ -1050,7 +1102,6 @@ window_populate (DhWindow *window)
window);
priv->search = dh_search_new (book_manager);
- dh_util_state_set_notebook_page_name (priv->search, "search");
gtk_notebook_append_page (GTK_NOTEBOOK (priv->control_notebook),
priv->search,
gtk_label_new (_("Search")));
@@ -1062,6 +1113,36 @@ window_populate (DhWindow *window)
priv->vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_paned_add2 (GTK_PANED (priv->hpaned), priv->vbox);
+ g_signal_connect (priv->control_notebook,
+ "switch-page",
+ G_CALLBACK (window_control_switch_page_cb),
+ window);
+
+ g_signal_connect_after (priv->control_notebook,
+ "switch-page",
+ G_CALLBACK (window_control_after_switch_page_cb),
+ window);
+
+ /* restore selected control notebook page */
+ selected_tab = g_settings_get_string (
+ dh_settings_peek_search_notebook_settings (priv->settings),
+ "selected-tab");
+ for (i = 0; i < gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->control_notebook)); i++) {
+ GtkWidget *page;
+ const gchar *page_name;
+
+ page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->control_notebook), i);
+ page_name = gtk_notebook_get_tab_label_text (GTK_NOTEBOOK (priv->control_notebook), page);
+
+ if (page_name && strcmp (page_name, selected_tab) == 0) {
+ gtk_widget_set_visible (GTK_WIDGET (page), TRUE);
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->control_notebook), i);
+ gtk_widget_grab_focus (page);
+ break;
+ }
+ }
+ g_free (selected_tab);
+
/* HTML tabs notebook. */
priv->notebook = gtk_notebook_new ();
gtk_container_set_border_width (GTK_CONTAINER (priv->notebook), 0);
@@ -1581,6 +1662,8 @@ window_open_new_tab (DhWindow *window,
GtkWidget *label;
gint num;
GtkWidget *info_bar;
+ gchar *font_fixed = NULL;
+ gchar *font_variable = NULL;
#ifndef HAVE_WEBKIT2
GtkWidget *scrolled_window;
#endif
@@ -1590,7 +1673,11 @@ window_open_new_tab (DhWindow *window,
/* Prepare the web view */
view = webkit_web_view_new ();
gtk_widget_show (view);
- dh_util_font_add_web_view (WEBKIT_WEB_VIEW (view));
+ /* get the current fonts and set them on the new view */
+ dh_settings_get_selected_fonts (priv->settings, &font_fixed, &font_variable);
+ dh_util_view_set_font (WEBKIT_WEB_VIEW (view), font_fixed, font_variable);
+ g_free (font_fixed);
+ g_free (font_variable);
/* Prepare the info bar */
info_bar = gtk_info_bar_new ();
@@ -1920,11 +2007,17 @@ dh_window_new (DhApp *application)
gtk_window_set_icon_name (GTK_WINDOW (window), "devhelp");
- dh_util_state_manage_window (GTK_WINDOW (window), "main/window");
- dh_util_state_manage_paned (GTK_PANED (priv->hpaned), "main/paned");
- dh_util_state_manage_notebook (GTK_NOTEBOOK (priv->control_notebook),
- "main/search_notebook",
- "content");
+ g_signal_connect (window, "configure-event",
+ G_CALLBACK (window_configure_event_cb),
+ window);
+
+ dh_util_window_settings_restore (
+ GTK_WINDOW (window),
+ dh_settings_peek_window_settings (priv->settings), TRUE);
+
+ g_settings_bind (dh_settings_peek_paned_settings (priv->settings),
+ "position", G_OBJECT (priv->hpaned),
+ "position", G_SETTINGS_BIND_DEFAULT);
return GTK_WIDGET (window);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]