From b2223d65951c3ad706d76d35e15df8cf2e17535f Mon Sep 17 00:00:00 2001
From: Přemysl Janouch
Date: Fri, 10 Jun 2011 18:18:58 +0200
Subject: Integrate GSettings, remember View settings.
The org.logdiag ID has been chosen as I haven't found any specific rules
and com.github.logdiag seems not to be future-proof. This domain remains
available so far, anyway.
The schemas are compiled only when installed directly to CMAKE_INSTALL_PREFIX
to the root filesystem. When invoking `make install` with DESTDIR, only
the XML files are copied over as the schemas would have to be recompiled
later anyway.
---
CMakeLists.txt | 36 +++++++++++++++++++++++++++++++++++-
NEWS | 1 +
Win32Depends.cmake | 4 ++--
config.h.in | 1 +
share/org.logdiag.gschema.xml | 17 +++++++++++++++++
src/ld-window-main.c | 15 +++++++++++++++
src/logdiag.c | 9 +++++++++
7 files changed, 80 insertions(+), 3 deletions(-)
create mode 100644 share/org.logdiag.gschema.xml
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 151e000..2c8a144 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -256,7 +256,40 @@ if (GTK_DOC_FOUND)
HTML ${project_DOC_DIR}/html)
endif (GTK_DOC_FOUND)
+# GSettings
+find_program (GLIB_COMPILE_SCHEMAS_EXECUTABLE glib-compile-schemas)
+if (NOT GLIB_COMPILE_SCHEMAS_EXECUTABLE)
+ message (FATAL_ERROR "glib-compile-schemas not found")
+endif (NOT GLIB_COMPILE_SCHEMAS_EXECUTABLE)
+
+set (GSETTINGS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/share")
+set (GSETTINGS_SCHEMAS "${GSETTINGS_DIR}/org.logdiag.gschema.xml")
+
+add_custom_target (logdiag_gschema_check
+ COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE} --dry-run "${GSETTINGS_DIR}"
+ DEPENDS "${GSETTINGS_SCHEMAS}"
+ COMMENT "Checking GSettings schema files" VERBATIM)
+
+if (OPTION_NOINSTALL)
+ set (GSETTINGS_COMPILED_SCHEMA "${CMAKE_CURRENT_BINARY_DIR}/gschemas.compiled")
+
+ add_custom_command (OUTPUT "${GSETTINGS_COMPILED_SCHEMA}"
+ COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE}
+ "--targetdir=${CMAKE_CURRENT_BINARY_DIR}" "${GSETTINGS_DIR}"
+ DEPENDS "${GSETTINGS_SCHEMAS}"
+ COMMENT "Compiling GSettings schema files" VERBATIM)
+ add_custom_target (logdiag_gschema ALL DEPENDS "${GSETTINGS_COMPILED_SCHEMA}")
+endif (OPTION_NOINSTALL)
+
# Installation
+install (FILES ${GSETTINGS_SCHEMAS}
+ DESTINATION share/glib-2.0/schemas)
+install (CODE " # DESTDIR is not in use on Windows
+ if (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")
+ execute_process (COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE}
+ \"\${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas\")
+ endif (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")")
+
install (DIRECTORY share/gui share/library
DESTINATION share/${CMAKE_PROJECT_NAME})
@@ -266,7 +299,8 @@ if (WIN32)
${WIN32_DEPENDS_PATH}/bin/
DESTINATION .
FILES_MATCHING PATTERN "*.dll"
- PATTERN "libgettext*" EXCLUDE)
+ PATTERN "libgettext*" EXCLUDE
+ PATTERN "libintl*" EXCLUDE)
install (DIRECTORY
${WIN32_DEPENDS_PATH}/etc/
DESTINATION etc)
diff --git a/NEWS b/NEWS
index 58f9ef2..45ed6f7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,6 @@
Version TBD
- Added scrolling using the middle mouse button.
+ - View menu settings are remembered.
- Fixed command line parsing on Windows,
it's not limited to the system ANSI codepage anymore.
- Fixed checking for the shift key when selecting.
diff --git a/Win32Depends.cmake b/Win32Depends.cmake
index c128950..c2baea3 100644
--- a/Win32Depends.cmake
+++ b/Win32Depends.cmake
@@ -67,8 +67,8 @@ set (pkg_mingw_lua_md5
set (pkg_opensuse_root "http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_11.4/noarch/")
set (pkg_opensuse_listing "${working_dir}/opensuse-listing")
set (pkg_opensuse_names
- "mingw32-libjson-glib"
- "mingw32-json-glib-devel")
+ "mingw32-libjson-glib" "mingw32-json-glib-devel"
+ "mingw32-glib2-tools" "mingw32-libintl")
set (pkg_opensuse_strip "usr/i686-w64-mingw32/sys-root/mingw")
# Stage 1: retrieve openSUSE package links
diff --git a/config.h.in b/config.h.in
index 0cc98c6..665ddec 100644
--- a/config.h.in
+++ b/config.h.in
@@ -15,6 +15,7 @@
#if ${OPTION_NOINSTALL}
/* For developers. */
#define PROJECT_SHARE_DIR "${CMAKE_SOURCE_DIR}/share/"
+ #define PROJECT_GSETTINGS_DIR "${CMAKE_BINARY_DIR}"
#elif defined (_WIN32)
#define PROJECT_SHARE_DIR "share/${PROJECT_NAME}/"
#else
diff --git a/share/org.logdiag.gschema.xml b/share/org.logdiag.gschema.xml
new file mode 100644
index 0000000..515e0b8
--- /dev/null
+++ b/share/org.logdiag.gschema.xml
@@ -0,0 +1,17 @@
+
+
+
+ true
+ Whether to show the main toolbar
+
+
+ true
+ Whether to show the library toolbar
+
+
+ true
+ Whether to show the grid
+
+
+
+
diff --git a/src/ld-window-main.c b/src/ld-window-main.c
index 3602edb..22278ab 100644
--- a/src/ld-window-main.c
+++ b/src/ld-window-main.c
@@ -18,6 +18,7 @@
struct _LdWindowMainPrivate
{
+ GSettings *settings;
GtkUIManager *ui_manager;
GtkActionGroup *action_group;
@@ -353,6 +354,19 @@ ld_window_main_init (LdWindowMain *self)
/* Realize the window. */
gtk_widget_show_all (GTK_WIDGET (self));
+
+ /* Set up GSettings. */
+ priv->settings = g_settings_new ("org." PROJECT_NAME);
+
+ g_settings_bind (priv->settings, "show-main-toolbar",
+ gtk_action_group_get_action (priv->action_group,
+ "MainToolbar"), "active", G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (priv->settings, "show-library-toolbar",
+ gtk_action_group_get_action (priv->action_group,
+ "LibraryToolbar"), "active", G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (priv->settings, "show-grid",
+ gtk_action_group_get_action (priv->action_group,
+ "ShowGrid"), "active", G_SETTINGS_BIND_DEFAULT);
}
static void
@@ -369,6 +383,7 @@ ld_window_main_finalize (GObject *gobject)
g_object_unref (self->priv->diagram);
g_object_unref (self->priv->ui_manager);
g_object_unref (self->priv->action_group);
+ g_object_unref (self->priv->settings);
if (self->priv->filename)
g_free (self->priv->filename);
diff --git a/src/logdiag.c b/src/logdiag.c
index 1175ec6..904514e 100644
--- a/src/logdiag.c
+++ b/src/logdiag.c
@@ -131,6 +131,15 @@ main (int argc, char *argv[])
}
#endif
+#ifdef PROJECT_GSETTINGS_DIR
+ /* This is enabled when the build is set up for developing, so the
+ * application can find it's schema. It might also find use when
+ * installing the application into a location that's missing from
+ * g_get_system_data_dirs(), for example /usr/local or ~/.local.
+ */
+ g_setenv ("GSETTINGS_SCHEMA_DIR", PROJECT_GSETTINGS_DIR, 0);
+#endif /* PROJECT_GSETTINGS_DIR */
+
gtk_window_set_default_icon_name (PROJECT_NAME);
/* TODO: Be able to open multiple files. */
--
cgit v1.2.3-70-g09d2