From b329a61d561198cd405721372580d05476c2240a Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Mon, 3 May 2010 14:37:30 +0200 Subject: [PATCH] [shell] Port override_restrictions gconf key to GSettings --- configure.ac | 7 +++- data/Makefile.am | 56 ++++++++-------------------- data/evince.schemas.in | 15 -------- data/org.gnome.Evince.gschema.xml.in | 9 +++++ shell/ev-window.c | 45 +++++++++++++++------- shell/main.c | 5 +++ 6 files changed, 65 insertions(+), 72 deletions(-) delete mode 100644 data/evince.schemas.in create mode 100644 data/org.gnome.Evince.gschema.xml.in diff --git a/configure.ac b/configure.ac index 8f183579..3621326e 100644 --- a/configure.ac +++ b/configure.ac @@ -85,6 +85,8 @@ m4_pattern_allow([AM_V_GEN])dnl Make autoconf not complain about the rule below EV_INTLTOOL_EVINCE_BACKEND_RULE='%.evince-backend: %.evince-backend.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(AM_V_GEN) LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' AC_SUBST([EV_INTLTOOL_EVINCE_BACKEND_RULE]) +GLIB_GSETTINGS + # Check which platform to use AC_MSG_CHECKING([for which platform to build]) @@ -122,8 +124,9 @@ AM_CONDITIONAL([PLATFORM_WIN32],[test "$with_platform" = "win32"]) dnl Specify required versions of dependencies DBUS_GLIB_REQUIRED=0.70 GTK_REQUIRED=2.20.0 -GLIB_REQUIRED=2.18.0 +GLIB_REQUIRED=2.25.3 KEYRING_REQUIRED=2.22.0 +GCONF_REQUIRED=2.31.2 AC_SUBST([GLIB_REQUIRED]) AC_SUBST([GTK_REQUIRED]) @@ -312,7 +315,7 @@ AC_MSG_RESULT([$with_gconf]) AM_CONDITIONAL([WITH_GCONF],[test "$with_gconf" = "yes"]) if test "$with_gconf" = "yes"; then - PKG_CHECK_MODULES([GCONF],[gconf-2.0]) + PKG_CHECK_MODULES([GCONF],[gconf-2.0 >= $GCONF_REQUIRED]) AC_DEFINE([WITH_GCONF],[1],[Define if GConf support is enabled]) AM_GCONF_SOURCE_2 diff --git a/data/Makefile.am b/data/Makefile.am index 79660251..feb52301 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,8 +1,7 @@ SUBDIRS = icons NULL= -install-data-local: install-schemas update-icon-cache -uninstall-local: uninstall-schemas +install-data-local: update-icon-cache # # man file @@ -49,45 +48,20 @@ $(service_DATA): $(service_in_files) Makefile endif # -# GConf schema +# GSettings schema # -if WITH_GCONF -@INTLTOOL_SCHEMAS_RULE@ - -schema_in_files = evince.schemas.in -schemadir = $(GCONF_SCHEMA_FILE_DIR) -schema_DATA = $(schema_in_files:.schemas.in=.schemas) - -install-schemas: $(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 \ - $(top_builddir)/data/$$p; \ - done \ - fi -endif - -uninstall-schemas: $(schema_DATA) -if GCONF_SCHEMAS_INSTALL - if test -z "$(DESTDIR)" ; then \ - for p in $^ ; do \ - GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \ - $(GCONFTOOL) \ - --makefile-uninstall-rule \ - $(top_builddir)/data/$$p; \ - done \ - fi -endif - -else - -install-schemas: -uninstall-schemas: - +# gsettingsschemadir and gschema_compile are defined by the GLIB_GSETTINGS +# macro in configure.ac +gsettingsschema_in_files = org.gnome.Evince.gschema.xml.in +gsettingsschema_DATA = $(gsettingsschema_in_files:.xml.in=.xml) +@INTLTOOL_XML_NOMERGE_RULE@ +# This rule will check your schemas for validity before installation +# Uncomment when porting is done +# GSETTINGS_CHECK_RULE +if GSETTINGS_SCHEMAS_INSTALL +install-data-hook: + $(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) --allow-any-name $(DESTDIR)$(gsettingsschemadir) --targetdir=$(DESTDIR)$(gsettingsschemadir) endif # @@ -116,7 +90,7 @@ update-icon-cache: EXTRA_DIST = \ $(ui_DATA) \ $(DESKTOP_IN_FILES) \ - $(schema_in_files) \ + $(gsettingsschema_in_files) \ org.gnome.evince.Daemon.service.in \ $(man_MANS) \ evince.ico \ @@ -128,7 +102,7 @@ EXTRA_DIST = \ DISTCLEANFILES = \ $(DESKTOP_FILES) \ - $(schema_DATA) \ + $(gsettingsschema_DATA) \ $(service_DATA) -include $(top_srcdir)/git.mk diff --git a/data/evince.schemas.in b/data/evince.schemas.in deleted file mode 100644 index cbad4224..00000000 --- a/data/evince.schemas.in +++ /dev/null @@ -1,15 +0,0 @@ - - - - /schemas/apps/evince/override_restrictions - /apps/evince/override_restrictions - evince - bool - true - - Override document restrictions - Override document restrictions, like restriction to copy or to print. - - - - diff --git a/data/org.gnome.Evince.gschema.xml.in b/data/org.gnome.Evince.gschema.xml.in new file mode 100644 index 00000000..dfccd850 --- /dev/null +++ b/data/org.gnome.Evince.gschema.xml.in @@ -0,0 +1,9 @@ + + + + true + Override document restrictions + Override document restrictions, like restriction to copy or to print. + + + diff --git a/shell/ev-window.c b/shell/ev-window.c index dab2c5ad..8c5d95fd 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -140,6 +140,9 @@ struct _EvWindowPrivate { GtkWidget *sidebar_attachments; GtkWidget *sidebar_layers; + /* Settings */ + GSettings *settings; + /* Menubar accels */ guint menubar_accel_keyval; GdkModifierType menubar_accel_modifier; @@ -224,6 +227,9 @@ struct _EvWindowPrivate { #define GCONF_LOCKDOWN_PRINT "/desktop/gnome/lockdown/disable_printing" #define GCONF_LOCKDOWN_PRINT_SETUP "/desktop/gnome/lockdown/disable_print_setup" +#define GS_SCHEMA_NAME "org.gnome.Evince" +#define GS_OVERRIDE_RESTRICTIONS "override_restrictions" + #define SIDEBAR_DEFAULT_SIZE 132 #define LINKS_SIDEBAR_ID "links" #define THUMBNAILS_SIDEBAR_ID "thumbnails" @@ -377,12 +383,12 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window) can_find = TRUE; } -#ifdef WITH_GCONF - if (has_document) - override_restrictions = gconf_client_get_bool (ev_window->priv->gconf_client, - GCONF_OVERRIDE_RESTRICTIONS, - NULL); -#endif + if (has_document && ev_window->priv->settings) { + override_restrictions = + g_settings_get_boolean (ev_window->priv->settings, + GS_OVERRIDE_RESTRICTIONS); + } + if (!override_restrictions && info && info->fields_mask & EV_DOCUMENT_INFO_PERMISSIONS) { ok_to_print = (info->permissions & EV_DOCUMENT_PERMISSIONS_OK_TO_PRINT); ok_to_copy = (info->permissions & EV_DOCUMENT_PERMISSIONS_OK_TO_COPY); @@ -1190,6 +1196,14 @@ ev_window_refresh_window_thumbnail (EvWindow *ev_window) ev_job_scheduler_push_job (ev_window->priv->thumbnail_job, EV_JOB_PRIORITY_NONE); } +static void +override_restrictions_changed (GSettings *settings, + gchar *key, + EvWindow *ev_window) +{ + ev_window_setup_action_sensitivity (ev_window); +} + #ifdef WITH_GCONF static void lockdown_changed (GConfClient *client, @@ -1216,6 +1230,12 @@ ev_window_setup_document (EvWindow *ev_window) ev_window_title_set_document (ev_window->priv->title, document); ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri); + ev_window->priv->settings = g_settings_new (GS_SCHEMA_NAME); + g_signal_connect (ev_window->priv->settings, + "changed::"GS_OVERRIDE_RESTRICTIONS, + G_CALLBACK (override_restrictions_changed), + ev_window); + #ifdef WITH_GCONF if (!ev_window->priv->gconf_client) ev_window->priv->gconf_client = gconf_client_get_default (); @@ -1223,18 +1243,10 @@ ev_window_setup_document (EvWindow *ev_window) GCONF_LOCKDOWN_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); - gconf_client_add_dir (ev_window->priv->gconf_client, - GCONF_OVERRIDE_RESTRICTIONS, - GCONF_CLIENT_PRELOAD_NONE, - NULL); gconf_client_notify_add (ev_window->priv->gconf_client, GCONF_LOCKDOWN_DIR, (GConfClientNotifyFunc)lockdown_changed, ev_window, NULL, NULL); - gconf_client_notify_add (ev_window->priv->gconf_client, - GCONF_OVERRIDE_RESTRICTIONS, - (GConfClientNotifyFunc)lockdown_changed, - ev_window, NULL, NULL); #endif /* WITH_GCONF */ ev_window_setup_action_sensitivity (ev_window); @@ -4840,6 +4852,11 @@ ev_window_dispose (GObject *object) priv->recent_manager = NULL; } + if (priv->settings) { + g_object_unref (priv->settings); + priv->settings = NULL; + } + priv->recent_ui_id = 0; if (priv->model) { diff --git a/shell/main.c b/shell/main.c index dfe6a200..d7d6e158 100644 --- a/shell/main.c +++ b/shell/main.c @@ -216,6 +216,11 @@ main (int argc, char *argv[]) GOptionContext *context; GError *error = NULL; +#ifdef WITH_GCONF + /* Remove when porting is done */ + g_setenv ("GSETTINGS_BACKEND", "gconf", FALSE); +#endif + #ifdef G_OS_WIN32 if (fileno (stdout) != -1 && -- 2.43.5