[nautilus-actions] Implement autosave feature



commit 434eab8a5e7ed5138fe83e51c41b2c4922fc21c0
Author: Pierre Wieser <pwieser trychlos org>
Date:   Sat Aug 7 18:40:20 2010 +0200

    Implement autosave feature

 ChangeLog                          |   24 +++++++++
 src/core/na-ipivot-consumer.c      |   98 ++++++++++++++++++++++--------------
 src/core/na-ipivot-consumer.h      |   32 ++++++++---
 src/core/na-iprefs.c               |   28 ++++++++++
 src/core/na-iprefs.h               |    4 ++
 src/core/na-pivot.c                |   28 ++++++++++
 src/nact/nact-iprefs.c             |   29 -----------
 src/nact/nact-iprefs.h             |    3 -
 src/nact/nact-main-menubar-file.c  |   56 ++++++++++++++++++++-
 src/nact/nact-main-menubar-file.h  |    4 +-
 src/nact/nact-main-window.c        |   80 +++++++++++++++++++++--------
 src/nact/nact-preferences-editor.c |    2 +-
 12 files changed, 285 insertions(+), 103 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 231082e..41a9d98 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,29 @@
 2010-08-07 Pierre Wieser <pwieser trychlos org>
 
+	Implement auto-save feature.
+
+	* src/core/na-ipivot-consumer.c:
+	* src/core/na-ipivot-consumer.h (on_autosave_changed): New interface.
+
+	* src/core/na-iprefs.c:
+	* src/core/na-iprefs.h (na_iprefs_read_uint): New function.
+
+	* src/nact/nact-iprefs.c:
+	* src/nact/nact-iprefs.h (nact_iprefs_read_uint): Removed function.
+
+	* src/core/na-pivot.c (on_preferences_change):
+	Trigger NAIPivotConsumer interface when autosave is changed.
+
+	* src/nact/nact-main-menubar-file.c:
+	* src/nact/nact-main-menubar-file.h
+	(nact_main_menubar_file_set_autosave): New function.
+
+	* src/nact/nact-main-window.c (ipivot_consumer_on_autosave_changed):
+	Implement the new on_autosave_changed() NAIPivotConsumer interface.
+
+	* src/nact/nact-preferences-editor.c (on_base_runtime_init_dialog):
+	Replace nact_iprefs_read_uint() with na_iprefs_read_uint().
+
 	Setup auto-save in preferences.
 
 	* data/nautilus-actions-prefs.schemas.in:
diff --git a/src/core/na-ipivot-consumer.c b/src/core/na-ipivot-consumer.c
index d16b518..63d9c16 100644
--- a/src/core/na-ipivot-consumer.c
+++ b/src/core/na-ipivot-consumer.c
@@ -160,53 +160,23 @@ na_ipivot_consumer_delay_notify( NAIPivotConsumer *instance )
 }
 
 /**
- * na_ipivot_consumer_notify_of_items_changed:
+ * na_ipivot_consumer_notify_of_autosave_changed:
  * @instance: the #NAIPivotConsumer instance to be notified of the end
  * of the modifications.
+ * @enabled: whether auto-save feature is now enabled.
+ * @period: new auto-save period in minutes.
  *
- * Notifies the consumers that the actions have been modified on one of
- * the underlying storage subsystems.
- */
-void na_ipivot_consumer_notify_of_items_changed( NAIPivotConsumer *instance )
-{
-	static const gchar *thisfn = "na_ipivot_consumer_notify_of_items_changed";
-
-	g_return_if_fail( NA_IS_IPIVOT_CONSUMER( instance ));
-
-	if( st_initialized && !st_finalized ){
-
-		g_debug( "%s: instance=%p", thisfn, ( void * ) instance );
-
-		if( is_notify_allowed( instance )){
-
-			if( NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_items_changed ){
-				NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_items_changed( instance, NULL );
-			}
-		}
-	}
-}
-
-/**
- * na_ipivot_consumer_notify_of_mandatory_prefs_changed:
- * @instance: the #NAIPivotConsumer instance to be notified of the modifications.
- *
- * Notifies the consumers that a mandatory 'locked' preference has been changed.
+ * Notifies the consumers that the ato-save preferences have been changed.
  */
-void na_ipivot_consumer_notify_of_mandatory_prefs_changed( NAIPivotConsumer *instance )
+void
+na_ipivot_consumer_notify_of_autosave_changed( NAIPivotConsumer *instance, gboolean enabled, guint period )
 {
-	static const gchar *thisfn = "na_ipivot_consumer_notify_of_mandatory_prefs_changed";
-
 	g_return_if_fail( NA_IS_IPIVOT_CONSUMER( instance ));
 
 	if( st_initialized && !st_finalized ){
 
-		g_debug( "%s: instance=%p", thisfn, ( void * ) instance );
-
-		if( is_notify_allowed( instance )){
-
-			if( NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_mandatory_prefs_changed ){
-				NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_mandatory_prefs_changed( instance );
-			}
+		if( NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_autosave_changed ){
+			NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_autosave_changed( instance, enabled, period );
 		}
 	}
 }
@@ -284,6 +254,58 @@ na_ipivot_consumer_notify_of_display_order_changed( NAIPivotConsumer *instance,
 	}
 }
 
+/**
+ * na_ipivot_consumer_notify_of_items_changed:
+ * @instance: the #NAIPivotConsumer instance to be notified of the end
+ * of the modifications.
+ *
+ * Notifies the consumers that the actions have been modified on one of
+ * the underlying storage subsystems.
+ */
+void na_ipivot_consumer_notify_of_items_changed( NAIPivotConsumer *instance )
+{
+	static const gchar *thisfn = "na_ipivot_consumer_notify_of_items_changed";
+
+	g_return_if_fail( NA_IS_IPIVOT_CONSUMER( instance ));
+
+	if( st_initialized && !st_finalized ){
+
+		g_debug( "%s: instance=%p", thisfn, ( void * ) instance );
+
+		if( is_notify_allowed( instance )){
+
+			if( NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_items_changed ){
+				NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_items_changed( instance, NULL );
+			}
+		}
+	}
+}
+
+/**
+ * na_ipivot_consumer_notify_of_mandatory_prefs_changed:
+ * @instance: the #NAIPivotConsumer instance to be notified of the modifications.
+ *
+ * Notifies the consumers that a mandatory 'locked' preference has been changed.
+ */
+void na_ipivot_consumer_notify_of_mandatory_prefs_changed( NAIPivotConsumer *instance )
+{
+	static const gchar *thisfn = "na_ipivot_consumer_notify_of_mandatory_prefs_changed";
+
+	g_return_if_fail( NA_IS_IPIVOT_CONSUMER( instance ));
+
+	if( st_initialized && !st_finalized ){
+
+		g_debug( "%s: instance=%p", thisfn, ( void * ) instance );
+
+		if( is_notify_allowed( instance )){
+
+			if( NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_mandatory_prefs_changed ){
+				NA_IPIVOT_CONSUMER_GET_INTERFACE( instance )->on_mandatory_prefs_changed( instance );
+			}
+		}
+	}
+}
+
 static gboolean
 is_notify_allowed( const NAIPivotConsumer *instance )
 {
diff --git a/src/core/na-ipivot-consumer.h b/src/core/na-ipivot-consumer.h
index be5216e..b4af8a2 100644
--- a/src/core/na-ipivot-consumer.h
+++ b/src/core/na-ipivot-consumer.h
@@ -59,17 +59,17 @@ typedef struct {
 	NAIPivotConsumerInterfacePrivate *private;
 
 	/**
-	 * on_items_changed:
+	 * on_autosave_changed:
 	 * @instance: the #NAIPivotConsumer instance which implements this
 	 * interface.
-	 * user_data: user data set when emitting the message. Currently,
-	 * not used.
+	 * @enabled: whether auto-save feature is now enabled.
+	 * @period: new auto-save period in minutes.
 	 *
-	 * This function is triggered once when #NAPivot detects the end of
-	 * a bunch of modifications. At this time, the embedded list of
-	 * #NAAction has been updated to be up to date.
+	 * This function is triggered once when #NAPivot detects that the
+	 * auto-save preferences have been changed. Parameters are the new
+	 * parameters of the configuration.
 	 */
-	void ( *on_items_changed )           ( NAIPivotConsumer *instance, gpointer user_data );
+	void ( *on_autosave_changed )        ( NAIPivotConsumer *instance, gboolean enabled, guint period );
 
 	/**
 	 * on_create_root_menu_changed:
@@ -105,6 +105,19 @@ typedef struct {
 	void ( *on_display_order_changed )   ( NAIPivotConsumer *instance, gint order_mode );
 
 	/**
+	 * on_items_changed:
+	 * @instance: the #NAIPivotConsumer instance which implements this
+	 * interface.
+	 * user_data: user data set when emitting the message. Currently,
+	 * not used.
+	 *
+	 * This function is triggered once when #NAPivot detects the end of
+	 * a bunch of modifications. At this time, the embedded list of
+	 * #NAAction has been updated to be up to date.
+	 */
+	void ( *on_items_changed )           ( NAIPivotConsumer *instance, gpointer user_data );
+
+	/**
 	 * on_mandatory_prefs_changed:
 	 * @instance: the #NAIPivotConsumer instance which implements this interface.
 	 *
@@ -118,11 +131,12 @@ GType na_ipivot_consumer_get_type( void );
 
 void  na_ipivot_consumer_delay_notify( NAIPivotConsumer *instance );
 
-void  na_ipivot_consumer_notify_of_items_changed           ( NAIPivotConsumer *instance );
-void  na_ipivot_consumer_notify_of_mandatory_prefs_changed ( NAIPivotConsumer *instance );
+void  na_ipivot_consumer_notify_of_autosave_changed        ( NAIPivotConsumer *instance, gboolean enabled, guint period );
 void  na_ipivot_consumer_notify_of_create_root_menu_changed( NAIPivotConsumer *instance, gboolean enabled );
 void  na_ipivot_consumer_notify_of_display_about_changed   ( NAIPivotConsumer *instance, gboolean enabled );
 void  na_ipivot_consumer_notify_of_display_order_changed   ( NAIPivotConsumer *instance, gint order_mode );
+void  na_ipivot_consumer_notify_of_items_changed           ( NAIPivotConsumer *instance );
+void  na_ipivot_consumer_notify_of_mandatory_prefs_changed ( NAIPivotConsumer *instance );
 
 G_END_DECLS
 
diff --git a/src/core/na-iprefs.c b/src/core/na-iprefs.c
index 7a5cd68..ebe9bf6 100644
--- a/src/core/na-iprefs.c
+++ b/src/core/na-iprefs.c
@@ -394,6 +394,34 @@ na_iprefs_read_string_list( const NAIPrefs *instance, const gchar *name, const g
 	return( list );
 }
 
+/**
+ * na_iprefs_read_uint:
+ * @instance: this #NAIPrefs interface instance.
+ * @name: the preference entry.
+ * @default_value: the value to be returned if the key is not found.
+ *
+ * Returns: the uint value associated with the given key.
+ */
+guint
+na_iprefs_read_uint( const NAIPrefs *instance, const gchar *name, guint default_value )
+{
+	guint value;
+	gchar *path;
+
+	g_return_val_if_fail( NA_IS_IPREFS( instance ), 0 );
+
+	value = 0;
+
+	if( st_initialized && !st_finalized ){
+
+		path = gconf_concat_dir_and_key( IPREFS_GCONF_PREFS_PATH, name );
+		value = na_gconf_utils_read_int( na_iprefs_get_gconf_client( instance ), path, TRUE, default_value );
+		g_free( path );
+	}
+
+	return( value );
+}
+
 /*
  * na_iprefs_write_string:
  * @instance: this #NAIPrefs interface instance.
diff --git a/src/core/na-iprefs.h b/src/core/na-iprefs.h
index bfc3c0e..4732ca2 100644
--- a/src/core/na-iprefs.h
+++ b/src/core/na-iprefs.h
@@ -106,6 +106,9 @@ typedef struct {
 #define IPREFS_IMPORT_KEEP_CHOICE			"import-keep-choice"
 #define IPREFS_IMPORT_ASK_LAST_MODE			"import-ask-user-last-mode"
 
+#define IPREFS_AUTOSAVE_ON					"auto-save-on"
+#define IPREFS_AUTOSAVE_PERIOD				"auto-save-period"
+
 /* alphabetical order values
  */
 enum {
@@ -127,6 +130,7 @@ GConfClient *na_iprefs_get_gconf_client ( const NAIPrefs *instance );
 gboolean     na_iprefs_read_bool        ( const NAIPrefs *instance, const gchar *key, gboolean default_value );
 gchar       *na_iprefs_read_string      ( const NAIPrefs *instance, const gchar *key, const gchar *default_value );
 GSList      *na_iprefs_read_string_list ( const NAIPrefs *instance, const gchar *key, const gchar *default_value );
+guint        na_iprefs_read_uint        ( const NAIPrefs *instance, const gchar *key, guint defaut_value );
 
 void         na_iprefs_write_string_list( const NAIPrefs *instance, const gchar *key, GSList *value );
 
diff --git a/src/core/na-pivot.c b/src/core/na-pivot.c
index a531461..16f5f7b 100644
--- a/src/core/na-pivot.c
+++ b/src/core/na-pivot.c
@@ -121,6 +121,7 @@ static void          on_preferences_change( GConfClient *client, guint cnxn_id,
 static void          display_order_changed( NAPivot *pivot );
 static void          create_root_menu_changed( NAPivot *pivot );
 static void          display_about_changed( NAPivot *pivot );
+static void          autosave_changed( NAPivot *pivot );
 
 GType
 na_pivot_get_type( void )
@@ -985,6 +986,10 @@ on_preferences_change( GConfClient *client, guint cnxn_id, GConfEntry *entry, NA
 		display_order_changed( pivot );
 	}
 
+	if( !g_ascii_strcasecmp( key_entry, IPREFS_AUTOSAVE_ON ) || !g_ascii_strcasecmp( key_entry, IPREFS_AUTOSAVE_PERIOD )){
+		autosave_changed( pivot );
+	}
+
 	g_free( key_entry );
 }
 
@@ -1049,3 +1054,26 @@ display_about_changed( NAPivot *pivot )
 		}
 	}
 }
+
+static void
+autosave_changed( NAPivot *pivot )
+{
+	static const gchar *thisfn = "na_pivot_autosave_changed";
+	GList *ic;
+	gboolean autosave_on;
+	guint autosave_period;
+
+	g_return_if_fail( NA_IS_PIVOT( pivot ));
+
+	if( !pivot->private->dispose_has_run ){
+
+		g_debug( "%s: pivot=%p", thisfn, ( void * ) pivot );
+
+		autosave_on = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_AUTOSAVE_ON, FALSE );
+		autosave_period = na_iprefs_read_uint( NA_IPREFS( pivot ), IPREFS_AUTOSAVE_PERIOD, 5 );
+
+		for( ic = pivot->private->consumers ; ic ; ic = ic->next ){
+			na_ipivot_consumer_notify_of_autosave_changed( NA_IPIVOT_CONSUMER( ic->data ), autosave_on, autosave_period );
+		}
+	}
+}
diff --git a/src/nact/nact-iprefs.c b/src/nact/nact-iprefs.c
index a8ef8ce..a67be14 100644
--- a/src/nact/nact-iprefs.c
+++ b/src/nact/nact-iprefs.c
@@ -232,35 +232,6 @@ nact_iprefs_migrate_key( const BaseWindow *window, const gchar *old_key, const g
 }
 
 /**
- * nact_iprefs_read_uint:
- * @window: this #BaseWindow-derived window.
- * @name: the preference entry.
- * @default_value: the value to be returned if the key is not found.
- *
- * Returns: the uint value associated with the given key.
- */
-guint
-nact_iprefs_read_uint( const BaseWindow *window, const gchar *name, guint default_value )
-{
-	guint value;
-	gchar *path;
-
-	g_return_val_if_fail( BASE_IS_WINDOW( window ), 0 );
-	g_return_val_if_fail( NACT_IS_IPREFS( window ), 0 );
-
-	value = 0;
-
-	if( st_initialized && !st_finalized ){
-
-		path = gconf_concat_dir_and_key( IPREFS_GCONF_PREFS_PATH, name );
-		value = na_gconf_utils_read_int( NACT_IPREFS_GET_INTERFACE( window )->private->client, path, TRUE, default_value );
-		g_free( path );
-	}
-
-	return( value );
-}
-
-/**
  * nact_iprefs_write_bool:
  * @window: this #BaseWindow-derived window.
  * @name: the preference entry.
diff --git a/src/nact/nact-iprefs.h b/src/nact/nact-iprefs.h
index fe2b186..e0cdaf4 100644
--- a/src/nact/nact-iprefs.h
+++ b/src/nact/nact-iprefs.h
@@ -65,8 +65,6 @@ typedef struct {
 #define IPREFS_IMPORT_ITEMS_FOLDER_URI			"import-folder-uri"
 #define IPREFS_ASSIST_ESC_QUIT					"assistant-esc-quit"
 #define IPREFS_ASSIST_ESC_CONFIRM				"assistant-esc-confirm"
-#define IPREFS_AUTOSAVE_ON						"auto-save-on"
-#define IPREFS_AUTOSAVE_PERIOD					"auto-save-period"
 
 /* these are special export formats
  */
@@ -82,7 +80,6 @@ void   nact_iprefs_set_export_format( const BaseWindow *window, const gchar *pre
 
 void  nact_iprefs_migrate_key       ( const BaseWindow *window, const gchar *old_key, const gchar *new_key );
 
-guint nact_iprefs_read_uint         ( const BaseWindow *window, const gchar *key, guint defaut_value );
 void  nact_iprefs_write_bool        ( const BaseWindow *window, const gchar *key, gboolean value );
 void  nact_iprefs_write_uint        ( const BaseWindow *window, const gchar *key, guint value );
 void  nact_iprefs_write_string      ( const BaseWindow *window, const gchar *name, const gchar *value );
diff --git a/src/nact/nact-main-menubar-file.c b/src/nact/nact-main-menubar-file.c
index 8a79429..7172419 100644
--- a/src/nact/nact-main-menubar-file.c
+++ b/src/nact/nact-main-menubar-file.c
@@ -38,10 +38,15 @@
 
 #include "nact-application.h"
 #include "nact-iactions-list.h"
+#include "nact-main-statusbar.h"
 #include "nact-main-tab.h"
 #include "nact-main-menubar-file.h"
 
-static void save_item( NactMainWindow *window, NAUpdater *updater, NAObjectItem *item );
+static guint st_event_autosave = 0;
+
+static void     save_item( NactMainWindow *window, NAUpdater *updater, NAObjectItem *item );
+static gboolean autosave_callback( NactMainWindow *window );
+static void     autosave_destroyed( NactMainWindow *window );
 
 /**
  * nact_main_menubar_file_on_update_sensitivities:
@@ -397,3 +402,52 @@ nact_main_menubar_file_on_quit( GtkAction *gtk_action, NactMainWindow *window )
 		g_object_unref( window );
 	}
 }
+
+/**
+ * nact_main_menubar_file_set_autosave:
+ * @window: the #NactMainWindow main window.
+ * @enabled: whether the autosave feature is enabled.
+ * @period: autosave periodicity in minutes.
+ *
+ * Setup or disabled the autosave feature.
+ */
+void
+nact_main_menubar_file_set_autosave( NactMainWindow *window, gboolean enabled, guint period )
+{
+	static const gchar *thisfn = "nact_main_menubar_file_set_autosave";
+
+	if( st_event_autosave ){
+		if( !g_source_remove( st_event_autosave )){
+			g_warning( "%s: unable to remove autosave event source", thisfn );
+		}
+		st_event_autosave = 0;
+	}
+
+	if( enabled ){
+		st_event_autosave = g_timeout_add_seconds_full(
+				G_PRIORITY_DEFAULT,
+				period * 60,
+				( GSourceFunc ) autosave_callback,
+				window,
+				( GDestroyNotify ) autosave_destroyed );
+	}
+}
+
+static gboolean
+autosave_callback( NactMainWindow *window )
+{
+	const gchar *context = "autosave-context";
+	g_debug( "nact_main_menubar_file_autosave_callback" );
+
+	nact_main_statusbar_display_status( window, context, _( "Automatically saving pending modifications..." ));
+	nact_main_menubar_file_save_items( window );
+	nact_main_statusbar_hide_status( window, context );
+
+	return( TRUE );
+}
+
+static void
+autosave_destroyed( NactMainWindow *window )
+{
+	g_debug( "nact_main_menubar_file_autosave_destroyed" );
+}
diff --git a/src/nact/nact-main-menubar-file.h b/src/nact/nact-main-menubar-file.h
index 59fad37..7a63d0b 100644
--- a/src/nact/nact-main-menubar-file.h
+++ b/src/nact/nact-main-menubar-file.h
@@ -51,7 +51,9 @@ void nact_main_menubar_file_on_new_profile( GtkAction *action, NactMainWindow *w
 void nact_main_menubar_file_on_save       ( GtkAction *action, NactMainWindow *window );
 void nact_main_menubar_file_on_quit       ( GtkAction *action, NactMainWindow *window );
 
-void nact_main_menubar_file_save_items( NactMainWindow *window );
+void nact_main_menubar_file_save_items  ( NactMainWindow *window );
+
+void nact_main_menubar_file_set_autosave( NactMainWindow *window, gboolean enabled, guint period );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-main-window.c b/src/nact/nact-main-window.c
index 7062458..46c7937 100644
--- a/src/nact/nact-main-window.c
+++ b/src/nact/nact-main-window.c
@@ -59,6 +59,7 @@
 #include "nact-iproperties-tab.h"
 #include "nact-main-tab.h"
 #include "nact-main-menubar.h"
+#include "nact-main-menubar-file.h"
 #include "nact-main-statusbar.h"
 #include "nact-marshal.h"
 #include "nact-main-window.h"
@@ -182,6 +183,8 @@ static void     on_tab_updatable_item_updated( NactMainWindow *window, gpointer
 
 static gboolean confirm_for_giveup_from_menu( NactMainWindow *window );
 static gboolean confirm_for_giveup_from_pivot( NactMainWindow *window );
+static void     install_autosave( NactMainWindow *window );
+static void     ipivot_consumer_on_autosave_changed( NAIPivotConsumer *instance, gboolean enabled, guint period );
 static void     ipivot_consumer_on_items_changed( NAIPivotConsumer *instance, gpointer user_data );
 static void     ipivot_consumer_on_display_order_changed( NAIPivotConsumer *instance, gint order_mode );
 static void     ipivot_consumer_on_mandatory_prefs_changed( NAIPivotConsumer *instance );
@@ -605,10 +608,11 @@ ipivot_consumer_iface_init( NAIPivotConsumerInterface *iface )
 
 	g_debug( "%s: iface=%p", thisfn, ( void * ) iface );
 
-	iface->on_items_changed = ipivot_consumer_on_items_changed;
+	iface->on_autosave_changed = ipivot_consumer_on_autosave_changed;
 	iface->on_create_root_menu_changed = NULL;
 	iface->on_display_about_changed = NULL;
 	iface->on_display_order_changed = ipivot_consumer_on_display_order_changed;
+	iface->on_items_changed = ipivot_consumer_on_items_changed;
 	iface->on_mandatory_prefs_changed = ipivot_consumer_on_mandatory_prefs_changed;
 }
 
@@ -1201,6 +1205,8 @@ on_base_all_widgets_showed( NactMainWindow *window, gpointer user_data )
 
 		nact_iactions_list_all_widgets_showed( NACT_IACTIONS_LIST( window ));
 		nact_sort_buttons_all_widgets_showed( window );
+
+		install_autosave( window );
 	}
 }
 
@@ -1468,6 +1474,22 @@ confirm_for_giveup_from_pivot( NactMainWindow *window )
 	return( reload_ok );
 }
 
+static void
+install_autosave( NactMainWindow *window )
+{
+	gboolean autosave_on;
+	guint autosave_period;
+	NactApplication *application;
+	NAUpdater *updater;
+
+	application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
+	updater = nact_application_get_updater( application );
+	autosave_on = na_iprefs_read_bool( NA_IPREFS( updater ), IPREFS_AUTOSAVE_ON, FALSE );
+	autosave_period = na_iprefs_read_uint( NA_IPREFS( updater ), IPREFS_AUTOSAVE_PERIOD, 5 );
+
+	nact_main_menubar_file_set_autosave( window, autosave_on, autosave_period );
+}
+
 /*
  * called by NAPivot because this window implements the IIOConsumer
  * interface, i.e. it wish to be advertised when the list of actions
@@ -1498,30 +1520,20 @@ ipivot_consumer_on_items_changed( NAIPivotConsumer *instance, gpointer user_data
 	}
 }
 
+/*
+ * called by NAPivot via NAIPivotConsumer whenever the
+ * autosave preferences have been modified.
+ */
 static void
-reload( NactMainWindow *window )
+ipivot_consumer_on_autosave_changed( NAIPivotConsumer *instance, gboolean enabled, guint period )
 {
-	static const gchar *thisfn = "nact_main_window_reload";
-	NactApplication *application;
-	NAUpdater *updater;
-
-	g_debug( "%s: window=%p", thisfn, ( void * ) window );
-	g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
-
-	if( !window->private->dispose_has_run ){
-
-		window->private->selected_item = NULL;
-		window->private->selected_profile = NULL;
+	static const gchar *thisfn = "nact_main_window_ipivot_consumer_on_autosave_changed";
 
-		na_object_unref_items( window->private->deleted );
-		window->private->deleted = NULL;
+	g_return_if_fail( NACT_IS_MAIN_WINDOW( instance ));
+	g_debug( "%s: instance=%p, enabled=%s, period=%d",
+			thisfn, ( void * ) instance, enabled ? "True":"False", period );
 
-		application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
-		updater = nact_application_get_updater( application );
-		na_pivot_load_items( NA_PIVOT( updater ));
-		nact_iactions_list_fill( NACT_IACTIONS_LIST( window ), na_pivot_get_items( NA_PIVOT( updater )));
-		nact_iactions_list_bis_select_first_row( NACT_IACTIONS_LIST( window ));
-	}
+	nact_main_menubar_file_set_autosave( NACT_MAIN_WINDOW( instance ), enabled, period );
 }
 
 /*
@@ -1560,6 +1572,32 @@ ipivot_consumer_on_mandatory_prefs_changed( NAIPivotConsumer *instance )
 	nact_sort_buttons_level_zero_writability_change( NACT_MAIN_WINDOW( instance ));
 }
 
+static void
+reload( NactMainWindow *window )
+{
+	static const gchar *thisfn = "nact_main_window_reload";
+	NactApplication *application;
+	NAUpdater *updater;
+
+	g_debug( "%s: window=%p", thisfn, ( void * ) window );
+	g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
+
+	if( !window->private->dispose_has_run ){
+
+		window->private->selected_item = NULL;
+		window->private->selected_profile = NULL;
+
+		na_object_unref_items( window->private->deleted );
+		window->private->deleted = NULL;
+
+		application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
+		updater = nact_application_get_updater( application );
+		na_pivot_load_items( NA_PIVOT( updater ));
+		nact_iactions_list_fill( NACT_IACTIONS_LIST( window ), na_pivot_get_items( NA_PIVOT( updater )));
+		nact_iactions_list_bis_select_first_row( NACT_IACTIONS_LIST( window ));
+	}
+}
+
 static gchar *
 iabout_get_application_name( NAIAbout *instance )
 {
diff --git a/src/nact/nact-preferences-editor.c b/src/nact/nact-preferences-editor.c
index 8046b00..82401bf 100644
--- a/src/nact/nact-preferences-editor.c
+++ b/src/nact/nact-preferences-editor.c
@@ -392,7 +392,7 @@ on_base_runtime_init_dialog( NactPreferencesEditor *editor, gpointer user_data )
 			"toggled",
 			G_CALLBACK( on_auto_save_toggled ));
 
-	auto_save_period = nact_iprefs_read_uint( BASE_WINDOW( editor ), IPREFS_AUTOSAVE_PERIOD, 5 );
+	auto_save_period = na_iprefs_read_uint( NA_IPREFS( updater ), IPREFS_AUTOSAVE_PERIOD, 5 );
 	button = base_window_get_widget( BASE_WINDOW( editor ), "AutoSavePeriodicitySpinButton" );
 	adjustment = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( button ));
 	gtk_adjustment_configure( adjustment, auto_save_period, 1, 999, 1, 10, 0 );



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