[nautilus-actions] Manage locked and mandatory preferences
- From: Pierre Wieser <pwieser src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-actions] Manage locked and mandatory preferences
- Date: Wed, 19 Jan 2011 21:57:14 +0000 (UTC)
commit 3381255179f8bce958a9827b5ae573401b1298bf
Author: Pierre Wieser <pwieser trychlos org>
Date: Wed Jan 19 00:21:34 2011 +0100
Manage locked and mandatory preferences
ChangeLog | 31 ++
src/core/na-export-format.c | 5 +-
src/core/na-importer-ask.c | 4 +-
src/core/na-importer.c | 4 +-
src/core/na-io-provider.c | 51 ++-
src/core/na-iprefs.c | 18 +-
src/core/na-iprefs.h | 6 +-
src/core/na-settings.c | 103 +++---
src/nact/nact-assistant-export.c | 38 ++-
src/nact/nact-assistant-import.c | 2 +-
src/nact/nact-clipboard.c | 22 +-
src/nact/nact-export-ask.c | 118 ++++--
src/nact/nact-export-ask.h | 2 +-
src/nact/nact-export-format.c | 171 +++++--
src/nact/nact-export-format.h | 13 +-
src/nact/nact-gtk-utils.c | 166 ++++++--
src/nact/nact-gtk-utils.h | 15 +-
src/nact/nact-ienvironment-tab.c | 26 +-
src/nact/nact-iexecution-tab.c | 25 +-
src/nact/nact-main-window.c | 2 +-
src/nact/nact-preferences-editor.c | 876 +++++++++++++++++++++++++-----------
src/nact/nact-preferences.ui | 23 +-
src/nact/nact-tree-model-dnd.c | 2 +-
src/nact/nact-tree-model.c | 2 +-
24 files changed, 1223 insertions(+), 502 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 40042ff..e065cdd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,37 @@
* NEWS: Update before release.
+2011-01-18 Pierre Wieser <pwieser trychlos org>
+
+ * src/core/na-export-format.c (na_export_format_get_description):
+ * src/core/na-importer-ask.c (na_importer_ask_user):
+ * src/core/na-importer.c (import_from_uri):
+ * src/core/na-io-provider.c (na_io_provider_get_name):
+ * src/core/na-iprefs.c:
+ * src/core/na-iprefs.h (na_iprefs_get_import_mode,
+ na_iprefs_get_order_mode, na_iprefs_get_export_format):
+ * src/core/na-settings.c:
+ * src/nact/nact-assistant-export.c (on_initial_load_dialog):
+ * nact/nact-assistant-import.c (runtime_init_duplicates):
+ * src/nact/nact-clipboard.c (export_row_object):
+ * src/nact/nact-export-ask.c:
+ * nact/nact-export-format.c:
+ * src/nact/nact-export-format.h(nact_export_format_init_display):
+ * src/nact/nact-gtk-utils.c:
+ * src/nact/nact-gtk-utils.h (nact_gtk_utils_radio_set_initial_state,
+ nact_gtk_utils_radio_reset_initial_state,
+ nact_gtk_utils_toggle_set_initial_state,
+ nact_gtk_utils_toggle_reset_initial_state):
+ * src/nact/nact-ienvironment-tab.c
+ (on_tab_updatable_selection_changed):
+ * src/nact/nact-iexecution-tab.c (on_tab_updatable_selection_changed):
+ * src/nact/nact-main-window.c (on_base_runtime_init_toplevel):
+ * src/nact/nact-preferences-editor.c:
+ * src/nact/nact-preferences.ui:
+ * src/nact/nact-tree-model-dnd.c (drop_uri_list):
+ * src/nact/nact-tree-model.c (tree_model_new):
+ Manage locked and mandatory preferences.
+
* src/core/na-boxed.c (na_boxed_new_from_string_with_sep):
Do not eat last character.
diff --git a/src/core/na-export-format.c b/src/core/na-export-format.c
index c3b59dc..bec2ffe 100644
--- a/src/core/na-export-format.c
+++ b/src/core/na-export-format.c
@@ -292,7 +292,10 @@ na_export_format_get_description( const NAExportFormat *format )
* na_export_format_get_exporter:
* @format: this #NAExportFormat object.
*
- * Returns: a pointer to the #NAIExporter which providers this format.
+ * Returns: a pointer to the #NAIExporter which provides this format.
+ *
+ * The pointer is owned by NAEportFormat class, and should not be released
+ * by the caller.
*/
NAIExporter *
na_export_format_get_exporter( const NAExportFormat *format )
diff --git a/src/core/na-importer-ask.c b/src/core/na-importer-ask.c
index 8220820..e62d067 100644
--- a/src/core/na-importer-ask.c
+++ b/src/core/na-importer-ask.c
@@ -251,7 +251,7 @@ na_importer_ask_user( const NAObjectItem *importing, const NAObjectItem *existin
dialog->private->importing = ( NAObjectItem * ) importing;
dialog->private->existing = ( NAObjectItem * ) existing;
dialog->private->parms = parms;
- dialog->private->mode = na_iprefs_get_import_mode( parms->pivot, NA_IPREFS_IMPORT_ASK_USER_LAST_MODE );
+ dialog->private->mode = na_iprefs_get_import_mode( parms->pivot, NA_IPREFS_IMPORT_ASK_USER_LAST_MODE, NULL );
init_dialog( dialog );
/* toplevel is modal, not dialog
@@ -391,7 +391,7 @@ get_selected_mode( NAImporterAsk *editor )
button = na_gtk_utils_search_for_child_widget( GTK_CONTAINER( editor->private->toplevel ), "AskKeepChoiceButton" );
keep = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- na_settings_set_boolean( na_pivot_get_settings( editor->private->parms->pivot ), NA_IPREFS_IMPORT_MODE_KEEP_LAST_CHOICE, keep );
+ na_settings_set_boolean( na_pivot_get_settings( editor->private->parms->pivot ), NA_IPREFS_IMPORT_ASK_USER_KEEP_LAST_CHOICE, keep );
}
/*
diff --git a/src/core/na-importer.c b/src/core/na-importer.c
index 44240a4..f5a58c0 100644
--- a/src/core/na-importer.c
+++ b/src/core/na-importer.c
@@ -151,7 +151,7 @@ import_from_uri( const NAPivot *pivot, GList *modules, NAImporterParms *parms, c
ask_parms.parent = parms->parent;
ask_parms.uri = ( gchar * ) uri;
ask_parms.count = g_list_length( parms->results );
- ask_parms.keep_choice = na_settings_get_boolean( na_pivot_get_settings( pivot ), NA_IPREFS_IMPORT_MODE_KEEP_LAST_CHOICE, NULL, NULL );
+ ask_parms.keep_choice = na_settings_get_boolean( na_pivot_get_settings( pivot ), NA_IPREFS_IMPORT_ASK_USER_KEEP_LAST_CHOICE, NULL, NULL );
ask_parms.pivot = pivot;
memset( &provider_parms, '\0', sizeof( NAIImporterImportFromUriParms ));
@@ -229,7 +229,7 @@ ask_user_for_mode( const NAObjectItem *importing, const NAObjectItem *existing,
mode = na_importer_ask_user( importing, existing, parms );
} else {
- mode = na_iprefs_get_import_mode( parms->pivot, NA_IPREFS_IMPORT_ASK_USER_LAST_MODE );
+ mode = na_iprefs_get_import_mode( parms->pivot, NA_IPREFS_IMPORT_ASK_USER_LAST_MODE, NULL );
}
return( mode );
diff --git a/src/core/na-io-provider.c b/src/core/na-io-provider.c
index 13edbca..a7389c0 100644
--- a/src/core/na-io-provider.c
+++ b/src/core/na-io-provider.c
@@ -86,6 +86,7 @@ static GList *io_providers_list_add_from_plugins( const NAPivot *pivot, G
static GList *io_providers_list_add_from_prefs( const NAPivot *pivot, GList *objects_list );
static GList *io_providers_list_add_from_write_order( const NAPivot *pivot, GList *objects_list );
static GList *io_providers_list_append_object( const NAPivot *pivot, GList *list, NAIIOProvider *module, const gchar *id );
+static void io_providers_list_set_module( const NAPivot *pivot, NAIOProvider *provider_object, NAIIOProvider *provider_module );
static gboolean is_really_writable( const NAIOProvider *provider, const NAPivot *pivot );
static GList *load_items_filter_unwanted_items( const NAPivot *pivot, GList *merged, guint loadable_set );
static GList *load_items_filter_unwanted_items_rec( GList *merged, guint loadable_set );
@@ -451,14 +452,15 @@ na_io_provider_get_name( const NAIOProvider *provider )
g_return_val_if_fail( NA_IS_IO_PROVIDER( provider ), name );
if( !provider->private->dispose_has_run ){
-
- if( NA_IIO_PROVIDER_GET_INTERFACE( provider->private->provider )->get_name ){
- g_free( name );
- name = NULL;
- name = NA_IIO_PROVIDER_GET_INTERFACE( provider->private->provider )->get_name( provider->private->provider );
- if( !name ){
- g_warning( "%s: NAIIOProvider %s get_name() interface returns NULL", thisfn, provider->private->id );
- name = g_strdup( "" );
+ if( na_io_provider_is_available( provider ) &&
+ NA_IIO_PROVIDER_GET_INTERFACE( provider->private->provider )->get_name ){
+
+ g_free( name );
+ name = NULL;
+ name = NA_IIO_PROVIDER_GET_INTERFACE( provider->private->provider )->get_name( provider->private->provider );
+ if( !name ){
+ g_warning( "%s: NAIIOProvider %s get_name() interface returns NULL", thisfn, provider->private->id );
+ name = g_strdup( "" );
}
} else {
@@ -703,7 +705,7 @@ na_io_provider_load_items( const NAPivot *pivot, guint loadable_set, GSList **me
/* sort the hierarchy according to preferences
*/
- order_mode = na_iprefs_get_order_mode( pivot );
+ order_mode = na_iprefs_get_order_mode( pivot, NULL );
switch( order_mode ){
case IPREFS_ORDER_ALPHA_ASCENDING:
hierarchy = load_items_hierarchy_sort( pivot, hierarchy, ( GCompareFunc ) na_object_id_sort_alpha_asc );
@@ -757,20 +759,21 @@ dump_providers_list( GList *providers )
/*
* allocate a new NAIOProvider object for the specified module and id
+ *
+ * id is mandatory here
+ * module may be NULL
*/
static NAIOProvider *
io_provider_new( const NAPivot *pivot, NAIIOProvider *module, const gchar *id )
{
NAIOProvider *object;
+ g_return_val_if_fail( id && strlen( id ), NULL );
+
object = g_object_new( NA_IO_PROVIDER_TYPE, IO_PROVIDER_PROP_ID, id, NULL );
if( module ){
- object->private->provider = g_object_ref( module );
- object->private->item_changed_handler =
- g_signal_connect(
- module, IO_PROVIDER_SIGNAL_ITEM_CHANGED,
- ( GCallback ) na_pivot_on_item_changed_handler, ( gpointer ) pivot );
+ io_providers_list_set_module( pivot, object, module );
}
return( object );
@@ -834,12 +837,13 @@ io_providers_list_add_from_prefs( const NAPivot *pivot, GList *objects_list )
GSList *io_providers, *it;
merged = objects_list;
-
io_providers = na_iprefs_get_io_providers( pivot );
+
for( it = io_providers ; it ; it = it->next ){
id = ( const gchar * ) it->data;
merged = io_providers_list_append_object( pivot, merged, NULL, id );
}
+
na_core_utils_slist_free( io_providers );
return( merged );
@@ -847,7 +851,7 @@ io_providers_list_add_from_prefs( const NAPivot *pivot, GList *objects_list )
/*
* adding from write-order means we only create NAIOProvider objects
- * without having any ref to the underlying NAIIOProvider if it exists
+ * without having any pointer to the underlying NAIIOProvider (if it exists)
*/
static GList *
io_providers_list_add_from_write_order( const NAPivot *pivot, GList *objects_list )
@@ -865,6 +869,7 @@ io_providers_list_add_from_write_order( const NAPivot *pivot, GList *objects_lis
id = ( const gchar * ) it->data;
merged = io_providers_list_append_object( pivot, merged, NULL, id );
}
+
na_core_utils_slist_free( io_providers );
return( merged );
@@ -887,13 +892,23 @@ io_providers_list_append_object( const NAPivot *pivot, GList *list, NAIIOProvide
object = io_provider_new( pivot, module, id );
merged = g_list_append( merged, object );
- } else if( !object->private->provider && module ){
- object->private->provider = module;
+ } else if( module && !object->private->provider ){
+ io_providers_list_set_module( pivot, object, module );
}
return( merged );
}
+static void
+io_providers_list_set_module( const NAPivot *pivot, NAIOProvider *provider_object, NAIIOProvider *provider_module )
+{
+ provider_object->private->provider = g_object_ref( provider_module );
+ provider_object->private->item_changed_handler =
+ g_signal_connect(
+ provider_module, IO_PROVIDER_SIGNAL_ITEM_CHANGED,
+ ( GCallback ) na_pivot_on_item_changed_handler, ( gpointer ) pivot );
+}
+
/*
* is_really_writable:
* @provider: the #NAIOProvider provider.
diff --git a/src/core/na-iprefs.c b/src/core/na-iprefs.c
index 42e9f25..b1572fb 100644
--- a/src/core/na-iprefs.c
+++ b/src/core/na-iprefs.c
@@ -83,6 +83,8 @@ static guint enum_map_id_from_string( const EnumMap *map, const gchar *st
* na_iprefs_get_import_mode:
* @pivot: the #NAPivot application object.
* @pref: name of the import key to be readen.
+ * @mandatory: if not %NULL, a pointer to a boolean which will receive the
+ * mandatory property.
*
* This preference defines what to do when an imported item has the same
* identifier that an already existing one. Default value is defined in
@@ -91,14 +93,14 @@ static guint enum_map_id_from_string( const EnumMap *map, const gchar *st
* Returns: the import mode currently set.
*/
guint
-na_iprefs_get_import_mode( const NAPivot *pivot, const gchar *pref )
+na_iprefs_get_import_mode( const NAPivot *pivot, const gchar *pref, gboolean *mandatory )
{
gchar *import_mode_str;
guint import_mode;
NASettings *settings;
settings = na_pivot_get_settings( pivot );
- import_mode_str = na_settings_get_string( settings, pref, NULL, NULL );
+ import_mode_str = na_settings_get_string( settings, pref, NULL, mandatory );
import_mode = enum_map_id_from_string( st_import_mode, import_mode_str );
g_free( import_mode_str );
@@ -127,18 +129,20 @@ na_iprefs_set_import_mode( const NAPivot *pivot, const gchar *pref, guint mode )
/*
* na_iprefs_get_order_mode:
* @pivot: the #NAPivot application object.
+ * @mandatory: if not %NULL, a pointer to a boolean which will receive the
+ * mandatory property.
*
* Returns: the order mode currently set.
*/
guint
-na_iprefs_get_order_mode( const NAPivot *pivot )
+na_iprefs_get_order_mode( const NAPivot *pivot, gboolean *mandatory )
{
gchar *order_mode_str;
guint order_mode;
NASettings *settings;
settings = na_pivot_get_settings( pivot );
- order_mode_str = na_settings_get_string( settings, NA_IPREFS_ITEMS_LIST_ORDER_MODE, NULL, NULL );
+ order_mode_str = na_settings_get_string( settings, NA_IPREFS_ITEMS_LIST_ORDER_MODE, NULL, mandatory );
order_mode = enum_map_id_from_string( st_order_mode, order_mode_str );
g_free( order_mode_str );
@@ -168,6 +172,8 @@ na_iprefs_set_order_mode( const NAPivot *pivot, guint mode )
* na_iprefs_get_export_format:
* @pivot: the #NAPivot application object.
* @name: name of the export format key to be readen
+ * @mandatory: if not %NULL, a pointer to a boolean which will receive the
+ * mandatory property.
*
* Used to default to export as a GConfEntry.
* Starting with 3.1.0, defaults to Desktop1 (see. core/na-settings.h)
@@ -175,7 +181,7 @@ na_iprefs_set_order_mode( const NAPivot *pivot, guint mode )
* Returns: the export format currently set as a #GQuark.
*/
GQuark
-na_iprefs_get_export_format( const NAPivot *pivot, const gchar *name )
+na_iprefs_get_export_format( const NAPivot *pivot, const gchar *name, gboolean *mandatory )
{
GQuark export_format;
NASettings *settings;
@@ -184,7 +190,7 @@ na_iprefs_get_export_format( const NAPivot *pivot, const gchar *name )
export_format = g_quark_from_static_string( NA_IPREFS_DEFAULT_EXPORT_FORMAT );
settings = na_pivot_get_settings( pivot );
- format_str = na_settings_get_string( settings, name, NULL, NULL );
+ format_str = na_settings_get_string( settings, name, NULL, mandatory );
if( format_str ){
export_format = g_quark_from_string( format_str );
diff --git a/src/core/na-iprefs.h b/src/core/na-iprefs.h
index 6c1772e..5fee930 100644
--- a/src/core/na-iprefs.h
+++ b/src/core/na-iprefs.h
@@ -52,13 +52,13 @@ enum {
IPREFS_ORDER_MANUAL
};
-guint na_iprefs_get_import_mode ( const NAPivot *pivot, const gchar *pref );
+guint na_iprefs_get_import_mode ( const NAPivot *pivot, const gchar *pref, gboolean *mandatory );
void na_iprefs_set_import_mode ( const NAPivot *pivot, const gchar *pref, guint mode );
-guint na_iprefs_get_order_mode ( const NAPivot *pivot );
+guint na_iprefs_get_order_mode ( const NAPivot *pivot, gboolean *mandatory );
void na_iprefs_set_order_mode ( const NAPivot *pivot, guint mode );
-GQuark na_iprefs_get_export_format ( const NAPivot *pivot, const gchar *pref );
+GQuark na_iprefs_get_export_format ( const NAPivot *pivot, const gchar *pref, gboolean *mandatory );
void na_iprefs_set_export_format ( const NAPivot *pivot, const gchar *pref, GQuark format );
GSList *na_iprefs_get_io_providers ( const NAPivot * );
diff --git a/src/core/na-settings.c b/src/core/na-settings.c
index c5c6f20..cbb5bda 100644
--- a/src/core/na-settings.c
+++ b/src/core/na-settings.c
@@ -111,57 +111,58 @@ typedef struct {
KeyDef;
static const KeyDef st_def_keys[] = {
- { NA_IPREFS_ADMIN_PREFERENCES_LOCKED, GROUP_RUNTIME, NA_BOXED_TYPE_BOOLEAN, "false" },
- { NA_IPREFS_ADMIN_IO_PROVIDERS_LOCKED, GROUP_RUNTIME, NA_BOXED_TYPE_BOOLEAN, "false" },
- { NA_IPREFS_ASSISTANT_ESC_CONFIRM, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
- { NA_IPREFS_ASSISTANT_ESC_QUIT, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
- { NA_IPREFS_CAPABILITY_ADD_CAPABILITY_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_COMMAND_CHOOSER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_COMMAND_CHOOSER_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///bin" },
- { NA_IPREFS_COMMAND_LEGEND_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_WORKING_DIR_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_WORKING_DIR_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///" },
- { NA_IPREFS_SHOW_IF_RUNNING_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_SHOW_IF_RUNNING_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///bin" },
- { NA_IPREFS_TRY_EXEC_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_TRY_EXEC_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///bin" },
- { NA_IPREFS_EXPORT_ASK_USER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_EXPORT_ASK_USER_LAST_FORMAT, GROUP_NACT, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_EXPORT_FORMAT },
- { NA_IPREFS_EXPORT_ASSISTANT_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_EXPORT_ASSISTANT_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///tmp" },
- { NA_IPREFS_EXPORT_PREFERRED_FORMAT, GROUP_NACT, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_EXPORT_FORMAT },
- { NA_IPREFS_FOLDER_CHOOSER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_FOLDER_CHOOSER_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///" },
- { NA_IPREFS_IMPORT_ASK_USER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_IMPORT_ASK_USER_LAST_MODE, GROUP_NACT, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_IMPORT_MODE },
- { NA_IPREFS_IMPORT_ASSISTANT_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_IMPORT_ASSISTANT_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///tmp" },
- { NA_IPREFS_IMPORT_MODE_KEEP_LAST_CHOICE, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
- { NA_IPREFS_IMPORT_PREFERRED_MODE, GROUP_NACT, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_IMPORT_MODE },
- { NA_IPREFS_IO_PROVIDERS_WRITE_ORDER, GROUP_NACT, NA_BOXED_TYPE_STRING_LIST, "" },
- { NA_IPREFS_ICON_CHOOSER_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///" },
- { NA_IPREFS_ICON_CHOOSER_PANED, GROUP_NACT, NA_BOXED_TYPE_UINT, "200" },
- { NA_IPREFS_ICON_CHOOSER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_ITEMS_ADD_ABOUT_ITEM, GROUP_RUNTIME, NA_BOXED_TYPE_BOOLEAN, "true" },
- { NA_IPREFS_ITEMS_CREATE_ROOT_MENU, GROUP_RUNTIME, NA_BOXED_TYPE_BOOLEAN, "true" },
- { NA_IPREFS_ITEMS_LEVEL_ZERO_ORDER, GROUP_RUNTIME, NA_BOXED_TYPE_STRING_LIST, "" },
- { NA_IPREFS_ITEMS_LIST_ORDER_MODE, GROUP_RUNTIME, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_LIST_ORDER_MODE },
- { NA_IPREFS_MAIN_PANED, GROUP_NACT, NA_BOXED_TYPE_UINT, "200" },
- { NA_IPREFS_MAIN_SAVE_AUTO, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
- { NA_IPREFS_MAIN_SAVE_PERIOD, GROUP_NACT, NA_BOXED_TYPE_UINT, "5" },
- { NA_IPREFS_MAIN_TOOLBAR_EDIT_DISPLAY, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
- { NA_IPREFS_MAIN_TOOLBAR_FILE_DISPLAY, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
- { NA_IPREFS_MAIN_TOOLBAR_HELP_DISPLAY, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
- { NA_IPREFS_MAIN_TOOLBAR_TOOLS_DISPLAY, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
- { NA_IPREFS_MAIN_WINDOW_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_PREFERENCES_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_RELABEL_DUPLICATE_ACTION, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
- { NA_IPREFS_RELABEL_DUPLICATE_MENU, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
- { NA_IPREFS_RELABEL_DUPLICATE_PROFILE, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
- { NA_IPREFS_SCHEME_ADD_SCHEME_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
- { NA_IPREFS_SCHEME_DEFAULT_LIST, GROUP_NACT, NA_BOXED_TYPE_STRING_LIST, "" },
- { NA_IPREFS_IO_PROVIDER_READABLE, NA_IPREFS_IO_PROVIDER_GROUP, NA_BOXED_TYPE_BOOLEAN, "true" },
- { NA_IPREFS_IO_PROVIDER_WRITABLE, NA_IPREFS_IO_PROVIDER_GROUP, NA_BOXED_TYPE_BOOLEAN, "true" },
+ { NA_IPREFS_ADMIN_PREFERENCES_LOCKED, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
+ { NA_IPREFS_ADMIN_IO_PROVIDERS_LOCKED, GROUP_RUNTIME, NA_BOXED_TYPE_BOOLEAN, "false" },
+ { NA_IPREFS_ASSISTANT_ESC_CONFIRM, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
+ { NA_IPREFS_ASSISTANT_ESC_QUIT, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
+ { NA_IPREFS_CAPABILITY_ADD_CAPABILITY_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_COMMAND_CHOOSER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_COMMAND_CHOOSER_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///bin" },
+ { NA_IPREFS_COMMAND_LEGEND_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_WORKING_DIR_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_WORKING_DIR_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///" },
+ { NA_IPREFS_SHOW_IF_RUNNING_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_SHOW_IF_RUNNING_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///bin" },
+ { NA_IPREFS_TRY_EXEC_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_TRY_EXEC_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///bin" },
+ { NA_IPREFS_EXPORT_ASK_USER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_EXPORT_ASK_USER_LAST_FORMAT, GROUP_NACT, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_EXPORT_FORMAT },
+ { NA_IPREFS_EXPORT_ASK_USER_KEEP_LAST_CHOICE, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
+ { NA_IPREFS_EXPORT_ASSISTANT_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_EXPORT_ASSISTANT_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///tmp" },
+ { NA_IPREFS_EXPORT_PREFERRED_FORMAT, GROUP_NACT, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_EXPORT_FORMAT },
+ { NA_IPREFS_FOLDER_CHOOSER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_FOLDER_CHOOSER_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///" },
+ { NA_IPREFS_IMPORT_ASK_USER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_IMPORT_ASK_USER_LAST_MODE, GROUP_NACT, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_IMPORT_MODE },
+ { NA_IPREFS_IMPORT_ASSISTANT_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_IMPORT_ASSISTANT_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///tmp" },
+ { NA_IPREFS_IMPORT_ASK_USER_KEEP_LAST_CHOICE, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
+ { NA_IPREFS_IMPORT_PREFERRED_MODE, GROUP_NACT, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_IMPORT_MODE },
+ { NA_IPREFS_IO_PROVIDERS_WRITE_ORDER, GROUP_NACT, NA_BOXED_TYPE_STRING_LIST, "" },
+ { NA_IPREFS_ICON_CHOOSER_URI, GROUP_NACT, NA_BOXED_TYPE_STRING, "file:///" },
+ { NA_IPREFS_ICON_CHOOSER_PANED, GROUP_NACT, NA_BOXED_TYPE_UINT, "200" },
+ { NA_IPREFS_ICON_CHOOSER_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_ITEMS_ADD_ABOUT_ITEM, GROUP_RUNTIME, NA_BOXED_TYPE_BOOLEAN, "true" },
+ { NA_IPREFS_ITEMS_CREATE_ROOT_MENU, GROUP_RUNTIME, NA_BOXED_TYPE_BOOLEAN, "true" },
+ { NA_IPREFS_ITEMS_LEVEL_ZERO_ORDER, GROUP_RUNTIME, NA_BOXED_TYPE_STRING_LIST, "" },
+ { NA_IPREFS_ITEMS_LIST_ORDER_MODE, GROUP_RUNTIME, NA_BOXED_TYPE_STRING, NA_IPREFS_DEFAULT_LIST_ORDER_MODE },
+ { NA_IPREFS_MAIN_PANED, GROUP_NACT, NA_BOXED_TYPE_UINT, "200" },
+ { NA_IPREFS_MAIN_SAVE_AUTO, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
+ { NA_IPREFS_MAIN_SAVE_PERIOD, GROUP_NACT, NA_BOXED_TYPE_UINT, "5" },
+ { NA_IPREFS_MAIN_TOOLBAR_EDIT_DISPLAY, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
+ { NA_IPREFS_MAIN_TOOLBAR_FILE_DISPLAY, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
+ { NA_IPREFS_MAIN_TOOLBAR_HELP_DISPLAY, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "true" },
+ { NA_IPREFS_MAIN_TOOLBAR_TOOLS_DISPLAY, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
+ { NA_IPREFS_MAIN_WINDOW_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_PREFERENCES_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_RELABEL_DUPLICATE_ACTION, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
+ { NA_IPREFS_RELABEL_DUPLICATE_MENU, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
+ { NA_IPREFS_RELABEL_DUPLICATE_PROFILE, GROUP_NACT, NA_BOXED_TYPE_BOOLEAN, "false" },
+ { NA_IPREFS_SCHEME_ADD_SCHEME_WSP, GROUP_NACT, NA_BOXED_TYPE_UINT_LIST, "" },
+ { NA_IPREFS_SCHEME_DEFAULT_LIST, GROUP_NACT, NA_BOXED_TYPE_STRING_LIST, "" },
+ { NA_IPREFS_IO_PROVIDER_READABLE, NA_IPREFS_IO_PROVIDER_GROUP, NA_BOXED_TYPE_BOOLEAN, "true" },
+ { NA_IPREFS_IO_PROVIDER_WRITABLE, NA_IPREFS_IO_PROVIDER_GROUP, NA_BOXED_TYPE_BOOLEAN, "true" },
{ 0 }
};
diff --git a/src/nact/nact-assistant-export.c b/src/nact/nact-assistant-export.c
index dd1658b..d3318ad 100644
--- a/src/nact/nact-assistant-export.c
+++ b/src/nact/nact-assistant-export.c
@@ -81,6 +81,7 @@ struct NactAssistantExportClassPrivate {
*/
struct NactAssistantExportPrivate {
gboolean dispose_has_run;
+ gboolean preferences_locked;
gchar *uri;
GList *results;
};
@@ -350,10 +351,19 @@ on_initial_load_dialog( NactAssistantExport *dialog, gpointer user_data )
NAUpdater *updater;
NASettings *settings;
gboolean esc_quit, esc_confirm;
+ gboolean are_locked, mandatory;
- g_debug( "%s: dialog=%p, user_data=%p", thisfn, ( void * ) dialog, ( void * ) user_data );
g_return_if_fail( NACT_IS_ASSISTANT_EXPORT( dialog ));
+ g_debug( "%s: dialog=%p, user_data=%p", thisfn, ( void * ) dialog, ( void * ) user_data );
+
+ application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( dialog )));
+ updater = nact_application_get_updater( application );
+ settings = na_pivot_get_settings( NA_PIVOT( updater ));
+
+ are_locked = na_settings_get_boolean( settings, NA_IPREFS_ADMIN_PREFERENCES_LOCKED, NULL, &mandatory );
+ dialog->private->preferences_locked = are_locked && mandatory;
+
assistant = GTK_ASSISTANT( base_window_get_toplevel( BASE_WINDOW( dialog )));
assist_initial_load_intro( dialog, assistant );
@@ -363,10 +373,6 @@ on_initial_load_dialog( NactAssistantExport *dialog, gpointer user_data )
assist_initial_load_confirm( dialog, assistant );
assist_initial_load_exportdone( dialog, assistant );
- application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( dialog )));
- updater = nact_application_get_updater( application );
- settings = na_pivot_get_settings( NA_PIVOT( updater ));
-
esc_quit = na_settings_get_boolean( settings, NA_IPREFS_ASSISTANT_ESC_QUIT, NULL, NULL );
base_assistant_set_cancel_on_esc( BASE_ASSISTANT( dialog ), esc_quit );
esc_confirm = na_settings_get_boolean( settings, NA_IPREFS_ASSISTANT_ESC_CONFIRM, NULL, NULL );
@@ -599,7 +605,8 @@ assist_initial_load_format( NactAssistantExport *window, GtkAssistant *assistant
application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
updater = nact_application_get_updater( application );
container = base_window_get_widget( BASE_WINDOW( window ), "AssistantExportFormatVBox" );
- nact_export_format_init_display( NA_PIVOT( updater ), container, EXPORT_FORMAT_DISPLAY_ASSISTANT );
+ nact_export_format_init_display( container,
+ NA_PIVOT( updater ), EXPORT_FORMAT_DISPLAY_ASSISTANT, !window->private->preferences_locked );
}
static void
@@ -610,13 +617,14 @@ assist_runtime_init_format( NactAssistantExport *window, GtkAssistant *assistant
GQuark format;
NactApplication *application;
NAUpdater *updater;
+ gboolean mandatory;
application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
updater = nact_application_get_updater( application );
- format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT );
+ format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT, &mandatory );
container = base_window_get_widget( BASE_WINDOW( window ), "AssistantExportFormatVBox" );
- nact_export_format_select( container, format );
+ nact_export_format_select( container, !mandatory, format );
content = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_FORMAT_SELECTION );
gtk_assistant_set_page_complete( assistant, content, TRUE );
@@ -749,16 +757,20 @@ assistant_apply( BaseAssistant *wnd, GtkAssistant *assistant )
ExportStruct *str;
NactApplication *application;
NAUpdater *updater;
+ gboolean first;
+
+ g_return_if_fail( NACT_IS_ASSISTANT_EXPORT( wnd ));
g_debug( "%s: window=%p, assistant=%p", thisfn, ( void * ) wnd, ( void * ) assistant );
- g_assert( NACT_IS_ASSISTANT_EXPORT( wnd ));
+
window = NACT_ASSISTANT_EXPORT( wnd );
application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
updater = nact_application_get_updater( application );
actions = nact_iactions_list_bis_get_selected_items( NACT_IACTIONS_LIST( window ));
+ first = TRUE;
- g_assert( window->private->uri && strlen( window->private->uri ));
+ g_return_if_fail( window->private->uri && strlen( window->private->uri ));
for( ia = actions ; ia ; ia = ia->next ){
str = g_new0( ExportStruct, 1 );
@@ -766,10 +778,10 @@ assistant_apply( BaseAssistant *wnd, GtkAssistant *assistant )
str->item = NA_OBJECT_ITEM( na_object_get_origin( NA_IDUPLICABLE( ia->data )));
- str->format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT );
+ str->format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT, NULL );
if( str->format == IPREFS_EXPORT_FORMAT_ASK ){
- str->format = nact_export_ask_user( BASE_WINDOW( wnd ), str->item );
+ str->format = nact_export_ask_user( BASE_WINDOW( wnd ), str->item, first );
if( str->format == IPREFS_EXPORT_NO_EXPORT ){
str->msg = g_slist_append( NULL, g_strdup( _( "Export canceled due to user action." )));
@@ -779,6 +791,8 @@ assistant_apply( BaseAssistant *wnd, GtkAssistant *assistant )
if( str->format != IPREFS_EXPORT_NO_EXPORT ){
str->fname = na_exporter_to_file( NA_PIVOT( updater ), str->item, window->private->uri, str->format, &str->msg );
}
+
+ first = FALSE;
}
na_object_unref_selected_items( actions );
diff --git a/src/nact/nact-assistant-import.c b/src/nact/nact-assistant-import.c
index e922b57..697350a 100644
--- a/src/nact/nact-assistant-import.c
+++ b/src/nact/nact-assistant-import.c
@@ -484,7 +484,7 @@ runtime_init_duplicates( NactAssistantImport *window, GtkAssistant *assistant )
application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
updater = nact_application_get_updater( application );
- mode = na_iprefs_get_import_mode( NA_PIVOT( updater ), NA_IPREFS_IMPORT_PREFERRED_MODE );
+ mode = na_iprefs_get_import_mode( NA_PIVOT( updater ), NA_IPREFS_IMPORT_PREFERRED_MODE, NULL );
set_import_mode( window, mode );
page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_DUPLICATES );
diff --git a/src/nact/nact-clipboard.c b/src/nact/nact-clipboard.c
index 0eb2972..613fe9d 100644
--- a/src/nact/nact-clipboard.c
+++ b/src/nact/nact-clipboard.c
@@ -115,7 +115,7 @@ static void get_from_dnd_clipboard_callback( GtkClipboard *clipboard, GtkSelec
static void clear_dnd_clipboard_callback( GtkClipboard *clipboard, NactClipboardDndData *data );
static gchar *export_rows( NactClipboard *clipboard, GList *rows, const gchar *dest_folder );
static gchar *export_objects( NactClipboard *clipboard, GList *objects );
-static gchar *export_row_object( NactClipboard *clipboard, NAObject *object, const gchar *dest_folder, GList **exported );
+static gchar *export_row_object( NactClipboard *clipboard, NAObject *object, const gchar *dest_folder, GList **exported, gboolean first );
static void get_from_primary_clipboard_callback( GtkClipboard *gtk_clipboard, GtkSelectionData *selection_data, guint info, NactClipboard *clipboard );
static void clear_primary_clipboard( NactClipboard *clipboard );
@@ -512,7 +512,9 @@ export_rows( NactClipboard *clipboard, GList *rows, const gchar *dest_folder )
GtkTreeIter iter;
NAObject *object;
gchar *buffer;
+ gboolean first;
+ first = TRUE;
buffer = NULL;
exported = NULL;
data = g_string_new( "" );
@@ -524,13 +526,14 @@ export_rows( NactClipboard *clipboard, GList *rows, const gchar *dest_folder )
gtk_tree_model_get_iter( model, &iter, path );
gtk_tree_path_free( path );
gtk_tree_model_get( model, &iter, IACTIONS_LIST_NAOBJECT_COLUMN, &object, -1 );
- buffer = export_row_object( clipboard, object, dest_folder, &exported );
+ buffer = export_row_object( clipboard, object, dest_folder, &exported, first );
if( buffer && strlen( buffer )){
data = g_string_append( data, buffer );
g_free( buffer );
}
g_object_unref( object );
}
+ first = FALSE;
}
g_list_free( exported );
@@ -545,19 +548,22 @@ export_objects( NactClipboard *clipboard, GList *objects )
GList *exported;
GList *iobj;
NAObject *object;
+ gboolean first;
+ first = TRUE;
buffer = NULL;
exported = NULL;
data = g_string_new( "" );
for( iobj = objects ; iobj ; iobj = iobj->next ){
object = NA_OBJECT( iobj->data );
- buffer = export_row_object( clipboard, object, NULL, &exported );
+ buffer = export_row_object( clipboard, object, NULL, &exported, first );
if( buffer && strlen( buffer )){
data = g_string_append( data, buffer );
g_free( buffer );
}
g_object_unref( object );
+ first = FALSE;
}
g_list_free( exported );
@@ -569,7 +575,7 @@ export_objects( NactClipboard *clipboard, GList *objects )
* else export to a new file in the target directory
*/
static gchar *
-export_row_object( NactClipboard *clipboard, NAObject *object, const gchar *dest_folder, GList **exported )
+export_row_object( NactClipboard *clipboard, NAObject *object, const gchar *dest_folder, GList **exported, gboolean first )
{
GList *subitems, *isub;
NactApplication *application;
@@ -588,11 +594,12 @@ export_row_object( NactClipboard *clipboard, NAObject *object, const gchar *dest
subitems = na_object_get_items( object );
for( isub = subitems ; isub ; isub = isub->next ){
- buffer = export_row_object( clipboard, isub->data, dest_folder, exported );
+ buffer = export_row_object( clipboard, isub->data, dest_folder, exported, first );
if( buffer && strlen( buffer )){
data = g_string_append( data, buffer );
g_free( buffer );
}
+ first = FALSE;
}
}
@@ -609,14 +616,13 @@ export_row_object( NactClipboard *clipboard, NAObject *object, const gchar *dest
if( index == -1 ){
*exported = g_list_prepend( *exported, ( gpointer ) action );
- format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT );
+ format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT, NULL );
if( format == IPREFS_EXPORT_FORMAT_ASK ){
- format = nact_export_ask_user( clipboard->private->window, NA_OBJECT_ITEM( action ));
+ format = nact_export_ask_user( clipboard->private->window, NA_OBJECT_ITEM( action ), first );
}
if( format != IPREFS_EXPORT_NO_EXPORT ){
-
if( dest_folder ){
fname = na_exporter_to_file( NA_PIVOT( updater ), NA_OBJECT_ITEM( action), dest_folder, format, &msgs );
g_free( fname );
diff --git a/src/nact/nact-export-ask.c b/src/nact/nact-export-ask.c
index bb27c37..2824d04 100644
--- a/src/nact/nact-export-ask.c
+++ b/src/nact/nact-export-ask.c
@@ -42,6 +42,7 @@
#include "nact-application.h"
#include "nact-export-format.h"
#include "nact-export-ask.h"
+#include "nact-gtk-utils.h"
/* private class data
*/
@@ -54,8 +55,12 @@ struct NactExportAskClassPrivate {
struct NactExportAskPrivate {
gboolean dispose_has_run;
BaseWindow *parent;
+ gboolean preferences_locked;
NAObjectItem *item;
GQuark format;
+ gboolean format_mandatory;
+ gboolean keep_last_choice;
+ gboolean keep_last_choice_mandatory;
};
static BaseDialogClass *st_parent_class = NULL;
@@ -74,6 +79,7 @@ static gchar *base_get_ui_filename( const BaseWindow *dialog );
static void on_base_initial_load_dialog( NactExportAsk *editor, gpointer user_data );
static void on_base_runtime_init_dialog( NactExportAsk *editor, gpointer user_data );
static void on_base_all_widgets_showed( NactExportAsk *editor, gpointer user_data );
+static void keep_choice_on_toggled( GtkToggleButton *button, NactExportAsk *editor );
static void on_cancel_clicked( GtkButton *button, NactExportAsk *editor );
static void on_ok_clicked( GtkButton *button, NactExportAsk *editor );
static GQuark get_export_format( NactExportAsk *editor );
@@ -146,9 +152,11 @@ instance_init( GTypeInstance *instance, gpointer klass )
static const gchar *thisfn = "nact_export_ask_instance_init";
NactExportAsk *self;
+ g_return_if_fail( NACT_IS_EXPORT_ASK( instance ));
+
g_debug( "%s: instance=%p (%s), klass=%p",
thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ), ( void * ) klass );
- g_return_if_fail( NACT_IS_EXPORT_ASK( instance ));
+
self = NACT_EXPORT_ASK( instance );
self->private = g_new0( NactExportAskPrivate, 1 );
@@ -180,12 +188,14 @@ instance_dispose( GObject *dialog )
static const gchar *thisfn = "nact_export_ask_instance_dispose";
NactExportAsk *self;
- g_debug( "%s: dialog=%p (%s)", thisfn, ( void * ) dialog, G_OBJECT_TYPE_NAME( dialog ));
g_return_if_fail( NACT_IS_EXPORT_ASK( dialog ));
+
self = NACT_EXPORT_ASK( dialog );
if( !self->private->dispose_has_run ){
+ g_debug( "%s: dialog=%p (%s)", thisfn, ( void * ) dialog, G_OBJECT_TYPE_NAME( dialog ));
+
self->private->dispose_has_run = TRUE;
/* chain up to the parent class */
@@ -201,8 +211,10 @@ instance_finalize( GObject *dialog )
static const gchar *thisfn = "nact_export_ask_instance_finalize";
NactExportAsk *self;
- g_debug( "%s: dialog=%p", thisfn, ( void * ) dialog );
g_return_if_fail( NACT_IS_EXPORT_ASK( dialog ));
+
+ g_debug( "%s: dialog=%p (%s)", thisfn, ( void * ) dialog, G_OBJECT_TYPE_NAME( dialog ));
+
self = NACT_EXPORT_ASK( dialog );
g_free( self->private );
@@ -225,6 +237,10 @@ export_ask_new( BaseWindow *parent )
/**
* nact_export_ask_run:
* @parent: the NactAssistant parent of this dialog.
+ * @item: the NAObjectItem to be exported.
+ * @first: whether this is the first call of a serie.
+ * On a first call, the user is really asked for his choice.
+ * The next times, the 'keep-last-choice' flag will be considered.
*
* Initializes and runs the dialog.
*
@@ -234,43 +250,59 @@ export_ask_new( BaseWindow *parent )
*
* Returns: the mode choosen by the user as a #GQuark which identifies
* the export mode.
- * The function defaults to returning IPREFS_EXPORT_NO_EXPORT.
+ * The function defaults to returning NA_IPREFS_DEFAULT_EXPORT_FORMAT.
*
* When the user selects 'Keep same choice without asking me', this choice
* becomes his new preferred export format.
*/
GQuark
-nact_export_ask_user( BaseWindow *parent, NAObjectItem *item )
+nact_export_ask_user( BaseWindow *parent, NAObjectItem *item, gboolean first )
{
static const gchar *thisfn = "nact_export_ask_run";
NactExportAsk *editor;
NactApplication *application;
NAUpdater *updater;
+ NASettings *settings;
+ gboolean are_locked, mandatory;
+ gboolean keep, keep_mandatory;
- GQuark format = ( GQuark ) IPREFS_EXPORT_NO_EXPORT;
+ GQuark format = g_quark_from_static_string( NA_IPREFS_DEFAULT_EXPORT_FORMAT );
g_return_val_if_fail( BASE_IS_WINDOW( parent ), format );
- g_debug( "%s: parent=%p", thisfn, ( void * ) parent );
+ g_debug( "%s: parent=%p, item=%p (%s), first=%s",
+ thisfn, ( void * ) parent, ( void * ) item, G_OBJECT_TYPE_NAME( item ), first ? "True":"False" );
application = NACT_APPLICATION( base_window_get_application( parent ));
updater = nact_application_get_updater( application );
+ settings = na_pivot_get_settings( NA_PIVOT( updater ));
+
+ format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_ASK_USER_LAST_FORMAT, &mandatory );
+ keep = na_settings_get_boolean( settings, NA_IPREFS_EXPORT_ASK_USER_KEEP_LAST_CHOICE, NULL, &keep_mandatory );
+
+ if( first || !keep ){
- editor = export_ask_new( parent );
+ editor = export_ask_new( parent );
- editor->private->parent = parent;
- editor->private->item = item;
- editor->private->format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_ASK_USER_LAST_FORMAT );
+ editor->private->format = format;
+ editor->private->format_mandatory = mandatory;
+ editor->private->keep_last_choice = keep;
+ editor->private->keep_last_choice_mandatory = keep_mandatory;
- if( base_window_run( BASE_WINDOW( editor ))){
+ editor->private->parent = parent;
+ editor->private->item = item;
- if( editor->private->format ){
- format = editor->private->format;
- na_iprefs_set_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_ASK_USER_LAST_FORMAT, format );
+ are_locked = na_settings_get_boolean( settings, NA_IPREFS_ADMIN_PREFERENCES_LOCKED, NULL, &mandatory );
+ editor->private->preferences_locked = are_locked && mandatory;
+
+ if( base_window_run( BASE_WINDOW( editor ))){
+ if( editor->private->format ){
+ format = editor->private->format;
+ }
}
- }
- g_object_unref( editor );
+ g_object_unref( editor );
+ }
return( format );
}
@@ -307,7 +339,7 @@ on_base_initial_load_dialog( NactExportAsk *editor, gpointer user_data )
application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( editor )));
updater = nact_application_get_updater( application );
container = base_window_get_widget( BASE_WINDOW( editor ), "ExportFormatAskVBox" );
- nact_export_format_init_display( NA_PIVOT( updater ), container, EXPORT_FORMAT_DISPLAY_ASK );
+ nact_export_format_init_display( container, NA_PIVOT( updater ), EXPORT_FORMAT_DISPLAY_ASK, !editor->private->preferences_locked );
}
static void
@@ -317,7 +349,6 @@ on_base_runtime_init_dialog( NactExportAsk *editor, gpointer user_data )
GtkWidget *container;
gchar *item_label, *label;
GtkWidget *widget;
- GtkWidget *button;
g_debug( "%s: editor=%p, user_data=%p", thisfn, ( void * ) editor, ( void * ) user_data );
g_return_if_fail( NACT_IS_EXPORT_ASK( editor ));
@@ -337,11 +368,13 @@ on_base_runtime_init_dialog( NactExportAsk *editor, gpointer user_data )
g_free( label );
g_free( item_label );
- button = base_window_get_widget( BASE_WINDOW( editor ), "AskKeepChoiceButton" );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), FALSE );
-
container = base_window_get_widget( BASE_WINDOW( editor ), "ExportFormatAskVBox" );
- nact_export_format_select( container, editor->private->format );
+ nact_export_format_select( container, !editor->private->format_mandatory, editor->private->format );
+
+ nact_gtk_utils_toggle_set_initial_state( BASE_WINDOW( editor ),
+ "AskKeepChoiceButton", G_CALLBACK( keep_choice_on_toggled ),
+ editor->private->keep_last_choice,
+ !editor->private->keep_last_choice_mandatory, !editor->private->preferences_locked );
base_window_signal_connect_by_name(
BASE_WINDOW( editor ),
@@ -366,6 +399,21 @@ on_base_all_widgets_showed( NactExportAsk *editor, gpointer user_data )
}
static void
+keep_choice_on_toggled( GtkToggleButton *button, NactExportAsk *editor )
+{
+ gboolean editable;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( editable ){
+ editor->private->keep_last_choice = gtk_toggle_button_get_active( button );
+
+ } else {
+ nact_gtk_utils_toggle_reset_initial_state( button );
+ }
+}
+
+static void
on_cancel_clicked( GtkButton *button, NactExportAsk *editor )
{
GtkWindow *toplevel = base_window_get_toplevel( BASE_WINDOW( editor ));
@@ -379,16 +427,27 @@ on_ok_clicked( GtkButton *button, NactExportAsk *editor )
gtk_dialog_response( GTK_DIALOG( toplevel ), GTK_RESPONSE_OK );
}
+/*
+ * we have come here because preferred_export_format was 'Ask'
+ * in all cases, the chosen format is kept in 'ask_user_last_chosen_format'
+ * and so this will be the default format which will be proposed the next
+ * time we come here
+ * if the 'remember_my_choice' is cheecked, then we do not even ask the user
+ * but returns as soon as we enter
+ *
+ * not overrinding the preferred export format (i.e. letting it to 'Ask')
+ * let the user go back in ask dialog box the next time he will have some
+ * files to export
+ */
static GQuark
get_export_format( NactExportAsk *editor )
{
GtkWidget *container;
NAExportFormat *format;
GQuark format_quark;
- GtkWidget *button;
- gboolean keep;
NactApplication *application;
NAUpdater *updater;
+ NASettings *settings;
container = base_window_get_widget( BASE_WINDOW( editor ), "ExportFormatAskVBox" );
format = nact_export_format_get_selected( container );
@@ -396,13 +455,14 @@ get_export_format( NactExportAsk *editor )
application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( editor )));
updater = nact_application_get_updater( application );
+ settings = na_pivot_get_settings( NA_PIVOT( updater ));
- button = base_window_get_widget( BASE_WINDOW( editor ), "AskKeepChoiceButton" );
- keep = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- if( keep ){
- na_iprefs_set_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT, format_quark );
+ if( !editor->private->keep_last_choice_mandatory ){
+ na_settings_set_boolean( settings, NA_IPREFS_EXPORT_ASK_USER_KEEP_LAST_CHOICE, editor->private->keep_last_choice );
}
+ na_iprefs_set_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_ASK_USER_LAST_FORMAT, format_quark );
+
return( format_quark );
}
diff --git a/src/nact/nact-export-ask.h b/src/nact/nact-export-ask.h
index 5e6f80d..defe161 100644
--- a/src/nact/nact-export-ask.h
+++ b/src/nact/nact-export-ask.h
@@ -72,7 +72,7 @@ typedef struct {
GType nact_export_ask_get_type( void );
-GQuark nact_export_ask_user( BaseWindow *window, NAObjectItem *item );
+GQuark nact_export_ask_user( BaseWindow *window, NAObjectItem *item, gboolean first );
G_END_DECLS
diff --git a/src/nact/nact-export-format.c b/src/nact/nact-export-format.c
index 19b8d64..8887494 100644
--- a/src/nact/nact-export-format.c
+++ b/src/nact/nact-export-format.c
@@ -38,53 +38,65 @@
#include <core/na-export-format.h>
#include "nact-export-format.h"
+#include "nact-gtk-utils.h"
-#define EXPORT_FORMAT_PROP_OBJECT "nact-export-format-prop-object"
-#define EXPORT_FORMAT_PROP_BUTTON "nact-export-format-prop-button"
+typedef struct {
+ GtkWidget *container_vbox;
+ GtkRadioButton *button;
+ NAExportFormat *format;
+ gulong handler; /* 'toggled' signal handler id */
+}
+ VBoxData;
+
+#define EXPORT_FORMAT_PROP_CONTAINER_FORMAT "nact-export-format-prop-container-format"
+#define EXPORT_FORMAT_PROP_CONTAINER_EDITABLE "nact-export-format-prop-container-editable"
+#define EXPORT_FORMAT_PROP_CONTAINER_SENSITIVE "nact-export-format-prop-container-sensitive"
+#define EXPORT_FORMAT_PROP_VBOX_DATA "nact-export-format-prop-vbox-data"
#define ASKME_LABEL N_( "_Ask me" )
#define ASKME_DESCRIPTION N_( "You will be asked for the format to choose each time an item is about to be exported." )
static const NAIExporterFormat st_ask_str = { "Ask", ASKME_LABEL, ASKME_DESCRIPTION };
-static void draw_in_vbox( const NAExportFormat *format, GtkWidget *vbox, guint mode, gint id );
-static void format_weak_notify( NAExportFormat *format, GObject *vbox );
+static void draw_in_vbox( GtkWidget *container_vbox, const NAExportFormat *format, guint mode, gint id );
+static void format_weak_notify( VBoxData *vbox_data, GObject *vbox );
static void select_default_iter( GtkWidget *widget, void *quark_ptr );
+static void export_format_on_toggled( GtkToggleButton *toggle_button, VBoxData *vbox_data );
static void get_selected_iter( GtkWidget *widget, NAExportFormat **format );
/**
* nact_export_format_init_display:
+ * @container_vbox: the #GtkVBox container in which the display must be drawn.
* @pivot: the #NAPivot instance.
- * @vbox: the #GtkVBox in which the display must be drawn.
* @mode: the type of the display.
+ * @sensitive: whether the whole radio button group is sensitive.
*
* Displays the available export formats in the VBox.
- * Should only be called once per dialog box instance.
+ *
+ * Should only be called once per dialog box instance (e.g. on initial load
+ * of the GtkWindow).
*/
void
-nact_export_format_init_display( const NAPivot *pivot, GtkWidget *vbox, guint mode )
+nact_export_format_init_display( GtkWidget *container_vbox, const NAPivot *pivot, guint mode, gboolean sensitive )
{
static const gchar *thisfn = "nact_export_format_init_display";
GList *formats, *ifmt;
NAExportFormat *format;
+ g_debug( "%s: container_vbox=%p, pivot=%p, mode=%u, sensitive=%s",
+ thisfn, ( void * ) container_vbox, ( void * ) pivot, mode,
+ sensitive ? "True":"False" );
+
formats = na_exporter_get_formats( pivot );
for( ifmt = formats ; ifmt ; ifmt = ifmt->next ){
- draw_in_vbox( NA_EXPORT_FORMAT( ifmt->data ), vbox, mode, -1 );
+ draw_in_vbox( container_vbox, NA_EXPORT_FORMAT( ifmt->data ), mode, -1 );
}
na_exporter_free_formats( formats );
switch( mode ){
- case EXPORT_FORMAT_DISPLAY_PREFERENCES:
- case EXPORT_FORMAT_DISPLAY_ASSISTANT:
- format = na_export_format_new( &st_ask_str, NULL );
- draw_in_vbox( format, vbox, mode, IPREFS_EXPORT_FORMAT_ASK );
- g_object_unref( format );
- break;
-
/* this is the mode to be used when we are about to export an item
* and the user preference is 'Ask me'; obviously, we don't propose
* here to ask him another time :)
@@ -92,20 +104,30 @@ nact_export_format_init_display( const NAPivot *pivot, GtkWidget *vbox, guint mo
case EXPORT_FORMAT_DISPLAY_ASK:
break;
+ case EXPORT_FORMAT_DISPLAY_PREFERENCES:
+ case EXPORT_FORMAT_DISPLAY_ASSISTANT:
+ format = na_export_format_new( &st_ask_str, NULL );
+ draw_in_vbox( container_vbox, format, mode, IPREFS_EXPORT_FORMAT_ASK );
+ g_object_unref( format );
+ break;
+
default:
g_warning( "%s: mode=%d: unknown mode", thisfn, mode );
}
+
+ g_object_set_data( G_OBJECT( container_vbox ), EXPORT_FORMAT_PROP_CONTAINER_FORMAT, GUINT_TO_POINTER( 0 ));
+ g_object_set_data( G_OBJECT( container_vbox ), EXPORT_FORMAT_PROP_CONTAINER_SENSITIVE, GUINT_TO_POINTER( sensitive ));
}
/*
- * container
- * +- vbox
- * | +- radio button
- * | +- hbox
- * | | +- description
+ * container_box
+ * +- vbox new
+ * | +- radio button new
+ * | +- hbox new
+ * | | +- description new
*/
static void
-draw_in_vbox( const NAExportFormat *format, GtkWidget *container, guint mode, gint id )
+draw_in_vbox( GtkWidget *container_vbox, const NAExportFormat *format, guint mode, gint id )
{
static GtkRadioButton *first_button = NULL;
GtkVBox *vbox;
@@ -115,9 +137,10 @@ draw_in_vbox( const NAExportFormat *format, GtkWidget *container, guint mode, gi
guint size, spacing;
gchar *markup, *label;
GtkLabel *desc_label;
+ VBoxData *vbox_data;
vbox = GTK_VBOX( gtk_vbox_new( FALSE, 0 ));
- gtk_box_pack_start( GTK_BOX( container ), GTK_WIDGET( vbox ), FALSE, TRUE, 0 );
+ gtk_box_pack_start( GTK_BOX( container_vbox ), GTK_WIDGET( vbox ), FALSE, TRUE, 0 );
description = na_export_format_get_description( format );
g_object_set( G_OBJECT( vbox ), "tooltip-text", description, NULL );
g_object_set( G_OBJECT( vbox ), "spacing", 6, NULL );
@@ -149,7 +172,7 @@ draw_in_vbox( const NAExportFormat *format, GtkWidget *container, guint mode, gi
label = na_export_format_get_label( format );
markup = g_markup_printf_escaped( "<b>%s</b>", label );
gtk_label_set_markup( radio_label, markup );
- gtk_container_add( GTK_CONTAINER( button ), GTK_WIDGET( radio_label ));
+ gtk_container_vbox_add( GTK_CONTAINER( button ), GTK_WIDGET( radio_label ));
break;*/
}
@@ -171,9 +194,13 @@ draw_in_vbox( const NAExportFormat *format, GtkWidget *container, guint mode, gi
break;
}
- g_object_set_data( G_OBJECT( vbox ), EXPORT_FORMAT_PROP_BUTTON, button );
- g_object_set_data( G_OBJECT( vbox ), EXPORT_FORMAT_PROP_OBJECT, g_object_ref(( gpointer ) format ));
- g_object_weak_ref( G_OBJECT( vbox ), ( GWeakNotify ) format_weak_notify, ( gpointer ) format );
+ vbox_data = g_new0( VBoxData, 1 );
+ vbox_data->container_vbox = container_vbox;
+ vbox_data->button = button;
+ vbox_data->format = g_object_ref(( gpointer ) format );
+
+ g_object_set_data( G_OBJECT( vbox ), EXPORT_FORMAT_PROP_VBOX_DATA, vbox_data );
+ g_object_weak_ref( G_OBJECT( vbox ), ( GWeakNotify ) format_weak_notify, ( gpointer ) vbox_data );
g_free( markup );
g_free( label );
@@ -181,51 +208,97 @@ draw_in_vbox( const NAExportFormat *format, GtkWidget *container, guint mode, gi
}
static void
-format_weak_notify( NAExportFormat *format, GObject *vbox )
+format_weak_notify( VBoxData *vbox_data, GObject *vbox )
{
static const gchar *thisfn = "nact_export_format_weak_notify";
- g_debug( "%s: format=%p (%s), vbox=%p",
- thisfn, ( void * ) format, G_OBJECT_TYPE_NAME( format ), ( void * ) vbox );
+ g_debug( "%s: vbox_data=%p, vbox=%p", thisfn, ( void * ) vbox_data, ( void * ) vbox );
+
+ g_signal_handler_disconnect( vbox_data->button, vbox_data->handler );
- g_object_unref( format );
+ g_object_unref( vbox_data->format );
+
+ g_free( vbox_data );
}
/**
* nact_export_format_select:
- * @container: the #GtkVBox in which the display has been drawn.
+ * @container_vbox: the #GtkVBox in which the display has been drawn.
+ * @editable: whether the whole radio button group is activatable.
* @format: the #GQuark which must be used as a default value.
*
* Select the default value.
+ *
+ * This is to be ran from runtime initialization dialog.
+ *
+ * Data for each format has been set on the new embedding vbox, previously
+ * created in nact_export_format_init_display(). We are iterating on these
+ * vbox to setup the initially active radio button.
*/
void
-nact_export_format_select( const GtkWidget *container, GQuark format )
+nact_export_format_select( const GtkWidget *container_vbox, gboolean editable, GQuark format )
{
- void *quark_ptr;
+ g_object_set_data( G_OBJECT( container_vbox ), EXPORT_FORMAT_PROP_CONTAINER_EDITABLE, GUINT_TO_POINTER( editable ));
+ g_object_set_data( G_OBJECT( container_vbox ), EXPORT_FORMAT_PROP_CONTAINER_FORMAT, GUINT_TO_POINTER( format ));
- quark_ptr = GUINT_TO_POINTER( format );
- gtk_container_foreach( GTK_CONTAINER( container ), ( GtkCallback ) select_default_iter, quark_ptr );
+ gtk_container_foreach( GTK_CONTAINER( container_vbox ), ( GtkCallback ) select_default_iter, GUINT_TO_POINTER( format ));
}
static void
-select_default_iter( GtkWidget *widget, void *quark_ptr )
+select_default_iter( GtkWidget *vbox, void *quark_ptr )
{
- NAExportFormat *format;
+ VBoxData *vbox_data;
GQuark format_quark;
GtkRadioButton *button;
+ gboolean editable, sensitive;
+
+ vbox_data = ( VBoxData * )
+ g_object_get_data( G_OBJECT( vbox ), EXPORT_FORMAT_PROP_VBOX_DATA );
+ editable = ( gboolean ) GPOINTER_TO_UINT(
+ g_object_get_data( G_OBJECT( vbox_data->container_vbox ), EXPORT_FORMAT_PROP_CONTAINER_EDITABLE ));
+
+ sensitive = ( gboolean ) GPOINTER_TO_UINT(
+ g_object_get_data( G_OBJECT( vbox_data->container_vbox ), EXPORT_FORMAT_PROP_CONTAINER_SENSITIVE ));
+
+ vbox_data->handler = g_signal_connect( G_OBJECT( vbox_data->button ), "toggled", G_CALLBACK( export_format_on_toggled ), vbox_data );
+
+ button = NULL;
format_quark = ( GQuark ) GPOINTER_TO_UINT( quark_ptr );
- format = NA_EXPORT_FORMAT( g_object_get_data( G_OBJECT( widget ), EXPORT_FORMAT_PROP_OBJECT ));
- if( na_export_format_get_quark( format ) == format_quark ){
- button = GTK_RADIO_BUTTON( g_object_get_data( G_OBJECT( widget ), EXPORT_FORMAT_PROP_BUTTON ));
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), TRUE );
+ if( na_export_format_get_quark( vbox_data->format ) == format_quark ){
+ button = vbox_data->button;
+ }
+
+ if( button ){
+ nact_gtk_utils_radio_set_initial_state( button,
+ G_CALLBACK( export_format_on_toggled ), vbox_data, editable, sensitive );
+ }
+}
+
+static void
+export_format_on_toggled( GtkToggleButton *toggle_button, VBoxData *vbox_data )
+{
+ gboolean editable, active;
+ GQuark format;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT(
+ g_object_get_data( G_OBJECT( vbox_data->container_vbox ), EXPORT_FORMAT_PROP_CONTAINER_EDITABLE ));
+
+ if( editable ){
+ active = gtk_toggle_button_get_active( toggle_button );
+ if( active ){
+ format = na_export_format_get_quark( vbox_data->format );
+ g_object_set_data( G_OBJECT( vbox_data->container_vbox ), EXPORT_FORMAT_PROP_CONTAINER_FORMAT, GUINT_TO_POINTER( format ));
+ }
+ } else {
+ nact_gtk_utils_radio_reset_initial_state( GTK_RADIO_BUTTON( toggle_button ), NULL );
}
}
/**
* nact_export_format_get_selected:
- * @container: the #GtkVBox in which the display has been drawn.
+ * @container_vbox: the #GtkVBox in which the display has been drawn.
*
* Returns: the currently selected value, as a #NAExportFormat object.
*
@@ -233,26 +306,26 @@ select_default_iter( GtkWidget *widget, void *quark_ptr )
* should not be released by the caller.
*/
NAExportFormat *
-nact_export_format_get_selected( const GtkWidget *container )
+nact_export_format_get_selected( const GtkWidget *container_vbox )
{
NAExportFormat *format;
format = NULL;
- gtk_container_foreach( GTK_CONTAINER( container ), ( GtkCallback ) get_selected_iter, &format );
+ gtk_container_foreach( GTK_CONTAINER( container_vbox ), ( GtkCallback ) get_selected_iter, &format );
g_debug( "nact_export_format_get_selected: format=%p", ( void * ) format );
return( format );
}
static void
-get_selected_iter( GtkWidget *widget, NAExportFormat **format )
+get_selected_iter( GtkWidget *vbox, NAExportFormat **format )
{
- GtkRadioButton *button;
+ VBoxData *vbox_data;
if( !( *format )){
- button = GTK_RADIO_BUTTON( g_object_get_data( G_OBJECT( widget ), EXPORT_FORMAT_PROP_BUTTON ));
- if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
- *format = NA_EXPORT_FORMAT( g_object_get_data( G_OBJECT( widget ), EXPORT_FORMAT_PROP_OBJECT ));
+ vbox_data = ( VBoxData * ) g_object_get_data( G_OBJECT( vbox ), EXPORT_FORMAT_PROP_VBOX_DATA );
+ if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( vbox_data->button ))){
+ *format = vbox_data->format;
}
}
}
diff --git a/src/nact/nact-export-format.h b/src/nact/nact-export-format.h
index 521360a..cc31127 100644
--- a/src/nact/nact-export-format.h
+++ b/src/nact/nact-export-format.h
@@ -67,9 +67,16 @@ enum {
EXPORT_FORMAT_DISPLAY_PREFERENCES,
};
-void nact_export_format_init_display( const NAPivot *pivot, GtkWidget *container, guint mode );
-void nact_export_format_select( const GtkWidget *container, GQuark format );
-NAExportFormat *nact_export_format_get_selected( const GtkWidget *container );
+void nact_export_format_init_display(
+ GtkWidget *container_vbox,
+ const NAPivot *pivot, guint mode, gboolean sensitive );
+
+void nact_export_format_select (
+ const GtkWidget *container_vbox,
+ gboolean editable, GQuark format );
+
+NAExportFormat *nact_export_format_get_selected(
+ const GtkWidget *container_vbox );
G_END_DECLS
diff --git a/src/nact/nact-gtk-utils.c b/src/nact/nact-gtk-utils.c
index a9b4b4e..94b027a 100644
--- a/src/nact/nact-gtk-utils.c
+++ b/src/nact/nact-gtk-utils.c
@@ -42,6 +42,10 @@
#include "nact-gtk-utils.h"
#include "nact-application.h"
+#define NACT_PROP_TOGGLE_BUTTON "nact-prop-toggle-button"
+#define NACT_PROP_TOGGLE_HANDLER "nact-prop-toggle-handler"
+#define NACT_PROP_TOGGLE_USER_DATA "nact-prop-toggle-user-data"
+
#define DEFAULT_WIDTH 22
#define DEFAULT_HEIGHT 22
@@ -114,61 +118,165 @@ nact_gtk_utils_set_editable( GObject *widget, gboolean editable )
}
/**
- * nact_gtk_utils_set_initial_state:
- * @button: the #GtkToggleButton activated as initial state.
- * @func: the corresponding on_toggled function.
+ * nact_gtk_utils_radio_set_initial_state:
+ * @button: the #GtkRadioButton button which is initially active.
+ * @handler: the corresponding "toggled" handler.
+ * @user_data: the user data associated to the handler.
+ * @editable: whether this radio button group is editable.
+ * @sensitive: whether this radio button group is sensitive.
+ *
+ * This function should be called for the button which is initially active
+ * inside of a radio button group when the radio group may happen to not be
+ * editable.
+ * This function should be called only once for the radio button group.
*
- * Record on each #GtkRadioButton of the same group the characteristics
- * of those which is activated as the initial state. This is useful to handle
- * read-only radio-button.
+ * It does the following operations:
+ * - set the button as active
+ * - set other buttons of the radio button group as inactive
+ * - set all buttons of radio button group as @editable
*
- * As a side-effect, this initial button is set as active here.
+ * The initially active @button, along with its @handler, are recorded
+ * as properties of the radio button group (actually as properties of each
+ * radio button of the group), so that they can later be used to reset the
+ * initial state.
*/
void
-nact_gtk_utils_set_initial_state( GtkToggleButton *button, GCallback func )
+nact_gtk_utils_radio_set_initial_state( GtkRadioButton *button,
+ GCallback handler, void *user_data, gboolean editable, gboolean sensitive )
{
GSList *group, *ig;
GtkRadioButton *other;
- group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( button ));
+ group = gtk_radio_button_get_group( button );
+
for( ig = group ; ig ; ig = ig->next ){
other = GTK_RADIO_BUTTON( ig->data );
- g_object_set_data( G_OBJECT( other ), "nact-initial-state-button", button );
- g_object_set_data( G_OBJECT( other ), "nact-initial-state-func", func );
+ g_object_set_data( G_OBJECT( other ), NACT_PROP_TOGGLE_BUTTON, button );
+ g_object_set_data( G_OBJECT( other ), NACT_PROP_TOGGLE_HANDLER, handler );
+ g_object_set_data( G_OBJECT( other ), NACT_PROP_TOGGLE_USER_DATA, user_data );
+ g_object_set_data( G_OBJECT( other ), NACT_PROP_TOGGLE_EDITABLE, GUINT_TO_POINTER( editable ));
+ nact_gtk_utils_set_editable( G_OBJECT( other ), editable );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( other ), FALSE );
+ gtk_widget_set_sensitive( GTK_WIDGET( other ), sensitive );
}
- gtk_toggle_button_set_active( button, TRUE );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), TRUE );
}
/**
- * nact_gtk_utils_reset_initials:
- * @button: the #GtkToggleButton being toggled.
- * @func: the corresponding on_toggled function.
- * @data: data associated with the @func callback.
- * @active: wheter @button is currently being tried to get activated.
+ * nact_gtk_utils_radio_reset_initial_state:
+ * @button: the #GtkRadioButton being toggled.
+ * @handler: the corresponding "toggled" handler.
+ * @data: data associated with the @handler callback.
*
* When clicking on a read-only radio button, this function ensures that
- * the radio button is not modified. This function should be called only
- * when the control is read-only (not editable).
+ * the radio button is not modified. It may be called whether the radio
+ * button group is editable or not (does nothing if group is actually
+ * editable).
*/
void
-nact_gtk_utils_reset_initial_state( GtkToggleButton *button, GCallback func, void *data, gboolean active )
+nact_gtk_utils_radio_reset_initial_state( GtkRadioButton *button, GCallback handler )
{
GtkToggleButton *initial_button;
- GCallback initial_func;
+ GCallback initial_handler;
+ gboolean active;
+ gboolean editable;
+ gpointer user_data;
+
+ active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
- if( active ){
- initial_button = GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( button ), "nact-initial-state-button" ));
- initial_func = G_CALLBACK( g_object_get_data( G_OBJECT( button ), "nact-initial-state-func" ));
+ if( active && !editable ){
+ initial_button = GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_BUTTON ));
+ initial_handler = G_CALLBACK( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_HANDLER ));
+ user_data = g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_USER_DATA );
- g_signal_handlers_block_by_func(( gpointer ) button, func, data );
- g_signal_handlers_block_by_func(( gpointer ) initial_button, initial_func, data );
+ if( handler ){
+ g_signal_handlers_block_by_func(( gpointer ) button, handler, user_data );
+ }
+ g_signal_handlers_block_by_func(( gpointer ) initial_button, initial_handler, user_data );
- gtk_toggle_button_set_active( button, FALSE );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), FALSE );
gtk_toggle_button_set_active( initial_button, TRUE );
- g_signal_handlers_unblock_by_func(( gpointer ) initial_button, initial_func, data );
- g_signal_handlers_unblock_by_func(( gpointer ) button, func, data );
+ g_signal_handlers_unblock_by_func(( gpointer ) initial_button, initial_handler, user_data );
+ if( handler ){
+ g_signal_handlers_unblock_by_func(( gpointer ) button, handler, user_data );
+ }
+ }
+}
+
+/**
+ * nact_gtk_utils_toggle_set_initial_state:
+ * @button: the #GtkToggleButton button.
+ * @handler: the corresponding "toggled" handler.
+ * @window: the toplevel #BaseWindow which embeds the button;
+ * it will be passed as user_data when connecting the signal.
+ * @active: whether the check button is initially active (checked).
+ * @editable: whether this radio button group is editable.
+ * @sensitive: whether this radio button group is sensitive.
+ *
+ * This function should be called for a check button which may happen to be
+ * read-only..
+ *
+ * It does the following operations:
+ * - connect the 'toggled' handler to the button
+ * - set the button as active or inactive depending of @active
+ * - set the button as editable or not depending of @editable
+ * - set the button as sensitive or not depending of @sensitive
+ * - explictely triggers the 'toggled' handler
+ */
+void
+nact_gtk_utils_toggle_set_initial_state( BaseWindow *window,
+ const gchar *button_name, GCallback handler,
+ gboolean active, gboolean editable, gboolean sensitive )
+{
+ typedef void ( *toggle_handler )( GtkToggleButton *, BaseWindow * );
+ GtkToggleButton *button;
+
+ button = GTK_TOGGLE_BUTTON( base_window_get_widget( window, button_name ));
+
+ if( button ){
+ base_window_signal_connect( window, G_OBJECT( button ), "toggled", handler );
+
+ g_object_set_data( G_OBJECT( button ), NACT_PROP_TOGGLE_HANDLER, handler );
+ g_object_set_data( G_OBJECT( button ), NACT_PROP_TOGGLE_USER_DATA, window );
+ g_object_set_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE, GUINT_TO_POINTER( editable ));
+
+ nact_gtk_utils_set_editable( G_OBJECT( button ), editable );
+ gtk_widget_set_sensitive( GTK_WIDGET( button ), sensitive );
+ gtk_toggle_button_set_active( button, active );
+
+ ( *( toggle_handler ) handler )( button, window );
+ }
+}
+
+/**
+ * nact_gtk_utils_toggle_reset_initial_state:
+ * @button: the #GtkToggleButton check button.
+ *
+ * When clicking on a read-only check button, this function ensures that
+ * the check button is not modified. It may be called whether the button
+ * is editable or not (does nothing if button is actually editable).
+ */
+void
+nact_gtk_utils_toggle_reset_initial_state( GtkToggleButton *button )
+{
+ gboolean editable;
+ GCallback handler;
+ gpointer user_data;
+ gboolean active;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( !editable ){
+ active = gtk_toggle_button_get_active( button );
+ handler = G_CALLBACK( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_HANDLER ));
+ user_data = g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_USER_DATA );
+
+ g_signal_handlers_block_by_func(( gpointer ) button, handler, user_data );
+ gtk_toggle_button_set_active( button, !active );
+ g_signal_handlers_unblock_by_func(( gpointer ) button, handler, user_data );
}
}
diff --git a/src/nact/nact-gtk-utils.h b/src/nact/nact-gtk-utils.h
index 4ed749d..29f95c4 100644
--- a/src/nact/nact-gtk-utils.h
+++ b/src/nact/nact-gtk-utils.h
@@ -43,10 +43,21 @@
G_BEGIN_DECLS
+#define NACT_PROP_TOGGLE_EDITABLE "nact-prop-toggle-editable"
+
void nact_gtk_utils_set_editable( GObject *widget, gboolean editable );
-void nact_gtk_utils_set_initial_state ( GtkToggleButton *button, GCallback func );
-void nact_gtk_utils_reset_initial_state( GtkToggleButton *button, GCallback func, void *data, gboolean active );
+void nact_gtk_utils_radio_set_initial_state ( GtkRadioButton *button,
+ GCallback toggled_handler, void *user_data,
+ gboolean editable, gboolean sensitive );
+
+void nact_gtk_utils_radio_reset_initial_state( GtkRadioButton *button, GCallback toggled_handler );
+
+void nact_gtk_utils_toggle_set_initial_state ( BaseWindow *window,
+ const gchar *button_name, GCallback toggled_handler,
+ gboolean active, gboolean editable, gboolean sensitive );
+
+void nact_gtk_utils_toggle_reset_initial_state( GtkToggleButton *button );
/* image utilities
*/
diff --git a/src/nact/nact-ienvironment-tab.c b/src/nact/nact-ienvironment-tab.c
index e77416a..23f5ed6 100644
--- a/src/nact/nact-ienvironment-tab.c
+++ b/src/nact/nact-ienvironment-tab.c
@@ -444,31 +444,32 @@ on_tab_updatable_selection_changed( NactIEnvironmentTab *instance, gint count_se
raz_desktop_listview( instance );
always_button = base_window_get_widget( BASE_WINDOW( instance ), "ShowAlwaysButton" );
- nact_gtk_utils_set_editable( G_OBJECT( always_button ), editable );
-
show_button = base_window_get_widget( BASE_WINDOW( instance ), "OnlyShowButton" );
- nact_gtk_utils_set_editable( G_OBJECT( show_button ), editable );
-
notshow_button = base_window_get_widget( BASE_WINDOW( instance ), "DoNotShowButton" );
- nact_gtk_utils_set_editable( G_OBJECT( notshow_button ), editable );
desktops = context ? na_object_get_only_show_in( context ) : NULL;
listview = GTK_TREE_VIEW( base_window_get_widget( BASE_WINDOW( instance ), "EnvironmentsDesktopTreeView" ));
gtk_toggle_button_set_inconsistent( GTK_TOGGLE_BUTTON( always_button ), context == NULL );
if( desktops && g_slist_length( desktops )){
- nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( show_button ), G_CALLBACK( on_only_show_toggled ));
+ nact_gtk_utils_radio_set_initial_state(
+ GTK_RADIO_BUTTON( show_button ),
+ G_CALLBACK( on_only_show_toggled ), instance, editable, ( context == NULL ));
gtk_widget_set_sensitive( GTK_WIDGET( listview ), TRUE );
} else {
desktops = context ? na_object_get_not_show_in( context ) : NULL;
if( desktops && g_slist_length( desktops )){
- nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( notshow_button ), G_CALLBACK( on_do_not_show_toggled ));
+ nact_gtk_utils_radio_set_initial_state(
+ GTK_RADIO_BUTTON( notshow_button ),
+ G_CALLBACK( on_do_not_show_toggled ), instance, editable, ( context == NULL ));
gtk_widget_set_sensitive( GTK_WIDGET( listview ), TRUE );
} else {
- nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( always_button ), G_CALLBACK( on_show_always_toggled ));
+ nact_gtk_utils_radio_set_initial_state(
+ GTK_RADIO_BUTTON( always_button ),
+ G_CALLBACK( on_show_always_toggled ), instance, editable, ( context == NULL ));
gtk_widget_set_sensitive( GTK_WIDGET( listview ), FALSE );
desktops = NULL;
}
@@ -597,7 +598,8 @@ on_show_always_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *ins
}
} else {
- nact_gtk_utils_reset_initial_state( toggle_button, G_CALLBACK( on_show_always_toggled ), instance, active );
+ nact_gtk_utils_radio_reset_initial_state(
+ GTK_RADIO_BUTTON( toggle_button ), G_CALLBACK( on_show_always_toggled ));
}
}
}
@@ -635,7 +637,8 @@ on_only_show_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *insta
}
} else {
- nact_gtk_utils_reset_initial_state( toggle_button, G_CALLBACK( on_only_show_toggled ), instance, active );
+ nact_gtk_utils_radio_reset_initial_state(
+ GTK_RADIO_BUTTON( toggle_button ), G_CALLBACK( on_only_show_toggled ));
}
}
}
@@ -673,7 +676,8 @@ on_do_not_show_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *ins
}
} else {
- nact_gtk_utils_reset_initial_state( toggle_button, G_CALLBACK( on_do_not_show_toggled ), instance, active );
+ nact_gtk_utils_radio_reset_initial_state(
+ GTK_RADIO_BUTTON( toggle_button ), G_CALLBACK( on_do_not_show_toggled ));
}
}
}
diff --git a/src/nact/nact-iexecution-tab.c b/src/nact/nact-iexecution-tab.c
index e282cb0..880df96 100644
--- a/src/nact/nact-iexecution-tab.c
+++ b/src/nact/nact-iexecution-tab.c
@@ -293,31 +293,32 @@ on_tab_updatable_selection_changed( NactIExecutionTab *instance, gint count_sele
st_on_selection_change = TRUE;
normal_toggle = base_window_get_widget( BASE_WINDOW( instance ), "ExecutionModeNormal" );
- nact_gtk_utils_set_editable( G_OBJECT( normal_toggle ), editable );
-
terminal_toggle = base_window_get_widget( BASE_WINDOW( instance ), "ExecutionModeTerminal" );
- nact_gtk_utils_set_editable( G_OBJECT( terminal_toggle ), editable );
-
embedded_toggle = base_window_get_widget( BASE_WINDOW( instance ), "ExecutionModeEmbedded" );
- nact_gtk_utils_set_editable( G_OBJECT( embedded_toggle ), editable );
-
display_toggle = base_window_get_widget( BASE_WINDOW( instance ), "ExecutionModeDisplayOutput" );
- nact_gtk_utils_set_editable( G_OBJECT( display_toggle ), editable );
mode = profile ? na_object_get_execution_mode( profile ) : g_strdup( "Normal" );
gtk_toggle_button_set_inconsistent( GTK_TOGGLE_BUTTON( normal_toggle ), profile == NULL );
if( !strcmp( mode, "Normal" )){
- nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( normal_toggle ), G_CALLBACK( on_normal_mode_toggled ));
+ nact_gtk_utils_radio_set_initial_state(
+ GTK_RADIO_BUTTON( normal_toggle ),
+ G_CALLBACK( on_normal_mode_toggled ), instance, editable, ( profile == NULL ));
} else if( !strcmp( mode, "Terminal" )){
- nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( terminal_toggle ), G_CALLBACK( on_terminal_mode_toggled ));
+ nact_gtk_utils_radio_set_initial_state(
+ GTK_RADIO_BUTTON( terminal_toggle ),
+ G_CALLBACK( on_terminal_mode_toggled ), instance, editable, ( profile == NULL ));
} else if( !strcmp( mode, "Embedded" )){
- nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( embedded_toggle ), G_CALLBACK( on_embedded_mode_toggled ));
+ nact_gtk_utils_radio_set_initial_state(
+ GTK_RADIO_BUTTON( embedded_toggle ),
+ G_CALLBACK( on_embedded_mode_toggled ), instance, editable, ( profile == NULL ));
} else if( !strcmp( mode, "DisplayOutput" )){
- nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( display_toggle ), G_CALLBACK( on_display_mode_toggled ));
+ nact_gtk_utils_radio_set_initial_state(
+ GTK_RADIO_BUTTON( display_toggle ),
+ G_CALLBACK( on_display_mode_toggled ), instance, editable, ( profile == NULL ));
} else {
g_warning( "%s: unable to setup execution mode '%s'", thisfn, mode );
@@ -402,7 +403,7 @@ execution_mode_toggle( NactIExecutionTab *instance, GtkToggleButton *toggle_butt
}
} else {
- nact_gtk_utils_reset_initial_state( toggle_button, cb, instance, active );
+ nact_gtk_utils_radio_reset_initial_state( GTK_RADIO_BUTTON( toggle_button ), cb );
}
}
}
diff --git a/src/nact/nact-main-window.c b/src/nact/nact-main-window.c
index 876df5c..81f4fcc 100644
--- a/src/nact/nact-main-window.c
+++ b/src/nact/nact-main-window.c
@@ -1208,7 +1208,7 @@ on_base_runtime_init_toplevel( NactMainWindow *window, gpointer user_data )
nact_main_menubar_runtime_init( window );
- order_mode = na_iprefs_get_order_mode( NA_PIVOT( updater ));
+ order_mode = na_iprefs_get_order_mode( NA_PIVOT( updater ), NULL );
ipivot_consumer_on_display_order_changed( NA_IPIVOT_CONSUMER( window ), order_mode );
/* fill the IActionsList at last so that all signals are connected
diff --git a/src/nact/nact-preferences-editor.c b/src/nact/nact-preferences-editor.c
index d56aad9..226dfe1 100644
--- a/src/nact/nact-preferences-editor.c
+++ b/src/nact/nact-preferences-editor.c
@@ -38,6 +38,7 @@
#include "nact-application.h"
#include "nact-export-format.h"
+#include "nact-gtk-utils.h"
#include "nact-schemes-list.h"
#include "nact-providers-list.h"
#include "nact-preferences-editor.h"
@@ -51,7 +52,42 @@ struct NactPreferencesEditorClassPrivate {
/* private instance data
*/
struct NactPreferencesEditorPrivate {
- gboolean dispose_has_run;
+ gboolean dispose_has_run;
+ gboolean preferences_locked;
+
+ /* first tab: runtime preferences */
+ guint order_mode;
+ gboolean order_mode_mandatory;
+ gboolean root_menu;
+ gboolean root_menu_mandatory;
+ gboolean about_item;
+ gboolean about_item_mandatory;
+
+ /* second tab: ui preferences */
+ gboolean relabel_menu;
+ gboolean relabel_menu_mandatory;
+ gboolean relabel_action;
+ gboolean relabel_action_mandatory;
+ gboolean relabel_profile;
+ gboolean relabel_profile_mandatory;
+ gboolean esc_quit;
+ gboolean esc_quit_mandatory;
+ gboolean esc_confirm;
+ gboolean esc_confirm_mandatory;
+ gboolean auto_save;
+ gboolean auto_save_mandatory;
+ guint auto_save_period;
+ gboolean auto_save_period_mandatory;
+
+ /* third tab: import mode */
+ guint import_mode;
+ gboolean import_mode_mandatory;
+
+ /* fourth tab: export format */
+ gboolean export_format_mandatory;
+
+ /* fifth tab: default list of available schemes */
+ /* sixth tab: i/o providers */
};
static GObjectClass *st_parent_class = NULL;
@@ -71,13 +107,36 @@ static gchar *base_get_ui_filename( const BaseWindow *dialog );
static void on_base_initial_load_dialog( NactPreferencesEditor *editor, gpointer user_data );
static void on_base_runtime_init_dialog( NactPreferencesEditor *editor, gpointer user_data );
static void on_base_all_widgets_showed( NactPreferencesEditor *editor, gpointer user_data );
-static void on_esc_quit_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
-static void esc_quit_activated( NactPreferencesEditor *editor, gboolean esc_quit_active );
-static void on_auto_save_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
-static void auto_save_activated( NactPreferencesEditor *editor, gboolean auto_save_active );
+static void order_mode_setup( NactPreferencesEditor *editor, NAPivot *pivot );
+static void order_mode_on_alpha_asc_toggled( GtkToggleButton *togglebutton, NactPreferencesEditor *editor );
+static void order_mode_on_alpha_desc_toggled( GtkToggleButton *togglebutton, NactPreferencesEditor *editor );
+static void order_mode_on_manual_toggled( GtkToggleButton *togglebutton, NactPreferencesEditor *editor );
+static void order_mode_on_toggled( NactPreferencesEditor *editor, GtkToggleButton *togglebutton, GCallback cb, guint order_mode );
+static void root_menu_setup( NactPreferencesEditor *editor, NASettings *settings );
+static void root_menu_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
+static void about_item_setup( NactPreferencesEditor *editor, NASettings *settings );
+static void about_item_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
+static void relabel_menu_setup( NactPreferencesEditor *editor, NASettings *settings );
+static void relabel_menu_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
+static void relabel_action_setup( NactPreferencesEditor *editor, NASettings *settings );
+static void relabel_action_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
+static void relabel_profile_setup( NactPreferencesEditor *editor, NASettings *settings );
+static void relabel_profile_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
+static void esc_quit_setup( NactPreferencesEditor *editor, NASettings *settings );
+static void esc_quit_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
+static void esc_confirm_setup( NactPreferencesEditor *editor, NASettings *settings );
+static void esc_confirm_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
+static void auto_save_setup( NactPreferencesEditor *editor, NASettings *settings );
+static void auto_save_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor );
+static void auto_save_period_on_change_value( GtkSpinButton *spinbutton, NactPreferencesEditor *editor );
+static void import_mode_setup( NactPreferencesEditor *editor, NAPivot *pivot );
+static void import_mode_on_ask_toggled( GtkToggleButton *togglebutton, NactPreferencesEditor *editor );
+static void import_mode_on_override_toggled( GtkToggleButton *togglebutton, NactPreferencesEditor *editor );
+static void import_mode_on_renumber_toggled( GtkToggleButton *togglebutton, NactPreferencesEditor *editor );
+static void import_mode_on_noimport_toggled( GtkToggleButton *togglebutton, NactPreferencesEditor *editor );
+static void import_mode_on_toggled( NactPreferencesEditor *editor, GtkToggleButton *togglebutton, GCallback cb, guint import_mode );
static void on_cancel_clicked( GtkButton *button, NactPreferencesEditor *editor );
static void on_ok_clicked( GtkButton *button, NactPreferencesEditor *editor );
-static void enable_order_mode_buttons( NactPreferencesEditor *editor );
static void save_preferences( NactPreferencesEditor *editor );
static gboolean base_dialog_response( GtkDialog *dialog, gint code, BaseWindow *window );
@@ -227,7 +286,24 @@ instance_finalize( GObject *dialog )
static NactPreferencesEditor *
preferences_editor_new( BaseWindow *parent )
{
- return( g_object_new( NACT_PREFERENCES_EDITOR_TYPE, BASE_WINDOW_PROP_PARENT, parent, NULL ));
+ NactPreferencesEditor *editor;
+ NactApplication *application;
+ NAUpdater *updater;
+ NASettings *settings;
+ gboolean are_locked, mandatory;
+
+ editor = NACT_PREFERENCES_EDITOR( g_object_new( NACT_PREFERENCES_EDITOR_TYPE, BASE_WINDOW_PROP_PARENT, parent, NULL ));
+
+ application = NACT_APPLICATION( base_window_get_application( parent ));
+ updater = nact_application_get_updater( application );
+ settings = na_pivot_get_settings( NA_PIVOT( updater ));
+
+ are_locked = na_settings_get_boolean( settings, NA_IPREFS_ADMIN_PREFERENCES_LOCKED, NULL, &mandatory );
+ editor->private->preferences_locked = are_locked && mandatory;
+ g_debug( "nact_preferences_editor_new: are_locked=%s, mandatory=%s",
+ are_locked ? "True":"False", mandatory ? "True":"False" );
+
+ return( editor );
}
/**
@@ -278,13 +354,17 @@ on_base_initial_load_dialog( NactPreferencesEditor *editor, gpointer user_data )
GtkWidget *container;
GtkTreeView *listview;
- g_debug( "%s: editor=%p, user_data=%p", thisfn, ( void * ) editor, ( void * ) user_data );
g_return_if_fail( NACT_IS_PREFERENCES_EDITOR( editor ));
+ g_debug( "%s: editor=%p, user_data=%p", thisfn, ( void * ) editor, ( void * ) user_data );
+
application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( editor )));
updater = nact_application_get_updater( application );
+
container = base_window_get_widget( BASE_WINDOW( editor ), "PreferencesExportFormatVBox" );
- nact_export_format_init_display( NA_PIVOT( updater ), container, EXPORT_FORMAT_DISPLAY_PREFERENCES );
+ nact_export_format_init_display(
+ container, NA_PIVOT( updater ),
+ EXPORT_FORMAT_DISPLAY_PREFERENCES, !editor->private->preferences_locked );
listview = GTK_TREE_VIEW( base_window_get_widget( BASE_WINDOW( editor ), "SchemesTreeView" ));
nact_schemes_list_create_model( listview, SCHEMES_LIST_FOR_PREFERENCES );
@@ -299,20 +379,11 @@ on_base_runtime_init_dialog( NactPreferencesEditor *editor, gpointer user_data )
static const gchar *thisfn = "nact_preferences_editor_on_runtime_init_dialog";
NactApplication *application;
NAUpdater *updater;
- gint order_mode;
- gboolean add_about_item;
- gboolean create_root_menu;
- gboolean relabel;
- guint import_mode;
- GQuark export_format;
+ NASettings *settings;
GtkWidget *container;
- GtkWidget *button;
- gboolean esc_quit, esc_confirm;
+ GQuark export_format;
GtkTreeView *listview;
- gboolean auto_save_on;
- guint auto_save_period;
- GtkAdjustment *adjustment;
- NASettings *settings;
+ GtkWidget *ok_button;
g_debug( "%s: editor=%p, user_data=%p", thisfn, ( void * ) editor, ( void * ) user_data );
@@ -322,106 +393,28 @@ on_base_runtime_init_dialog( NactPreferencesEditor *editor, gpointer user_data )
/* first tab: runtime preferences
*/
- order_mode = na_iprefs_get_order_mode( NA_PIVOT( updater ));
- switch( order_mode ){
- case IPREFS_ORDER_ALPHA_ASCENDING:
- button = base_window_get_widget( BASE_WINDOW( editor ), "OrderAlphaAscButton" );
- break;
-
- case IPREFS_ORDER_ALPHA_DESCENDING:
- button = base_window_get_widget( BASE_WINDOW( editor ), "OrderAlphaDescButton" );
- break;
-
- case IPREFS_ORDER_MANUAL:
- default:
- button = base_window_get_widget( BASE_WINDOW( editor ), "OrderManualButton" );
- break;
- }
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), TRUE );
- enable_order_mode_buttons( editor );
-
- create_root_menu = na_settings_get_boolean( settings, NA_IPREFS_ITEMS_CREATE_ROOT_MENU, NULL, NULL );
- button = base_window_get_widget( BASE_WINDOW( editor ), "CreateRootMenuButton" );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), create_root_menu );
-
- add_about_item = na_settings_get_boolean( settings, NA_IPREFS_ITEMS_ADD_ABOUT_ITEM, NULL, NULL );
- button = base_window_get_widget( BASE_WINDOW( editor ), "AddAboutButton" );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), add_about_item );
+ order_mode_setup( editor, NA_PIVOT( updater ));
+ root_menu_setup( editor, settings );
+ about_item_setup( editor, settings );
/* second tab: ui preferences
*/
- relabel = na_settings_get_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_MENU, NULL, NULL );
- button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelMenuButton" );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), relabel );
-
- relabel = na_settings_get_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_ACTION, NULL, NULL );
- button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelActionButton" );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), relabel );
-
- relabel = na_settings_get_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_PROFILE, NULL, NULL );
- button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelProfileButton" );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), relabel );
-
- button = base_window_get_widget( BASE_WINDOW( editor ), "EscCloseButton" );
-
- base_window_signal_connect(
- BASE_WINDOW( editor ),
- G_OBJECT( button ),
- "toggled",
- G_CALLBACK( on_esc_quit_toggled ));
-
- esc_quit = na_settings_get_boolean( settings, NA_IPREFS_ASSISTANT_ESC_QUIT, NULL, NULL );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), esc_quit );
- esc_quit_activated( editor, esc_quit );
-
- esc_confirm = na_settings_get_boolean( settings, NA_IPREFS_ASSISTANT_ESC_CONFIRM, NULL, NULL );
- button = base_window_get_widget( BASE_WINDOW( editor ), "EscConfirmButton" );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), esc_confirm );
-
- auto_save_on = na_settings_get_boolean( settings, NA_IPREFS_MAIN_SAVE_AUTO, NULL, NULL );
- button = base_window_get_widget( BASE_WINDOW( editor ), "AutoSaveCheckButton" );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), auto_save_on );
- auto_save_activated( editor, auto_save_on );
-
- base_window_signal_connect(
- BASE_WINDOW( editor ),
- G_OBJECT( button ),
- "toggled",
- G_CALLBACK( on_auto_save_toggled ));
-
- auto_save_period = na_settings_get_uint( settings, NA_IPREFS_MAIN_SAVE_PERIOD, NULL, NULL );
- 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 );
-
- /* third tab: import tool
+ relabel_menu_setup( editor, settings );
+ relabel_action_setup( editor, settings );
+ relabel_profile_setup( editor, settings );
+ esc_quit_setup( editor, settings );
+ esc_confirm_setup( editor, settings );
+ auto_save_setup( editor, settings );
+
+ /* third tab: import mode
*/
- import_mode = na_iprefs_get_import_mode( NA_PIVOT( updater ), NA_IPREFS_IMPORT_PREFERRED_MODE );
- switch( import_mode ){
- case IMPORTER_MODE_ASK:
- button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsAskButton" );
- break;
-
- case IMPORTER_MODE_RENUMBER:
- button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsRenumberButton" );
- break;
-
- case IMPORTER_MODE_OVERRIDE:
- button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsOverrideButton" );
- break;
-
- case IMPORTER_MODE_NO_IMPORT:
- default:
- button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsNoImportButton" );
- break;
- }
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), TRUE );
+ import_mode_setup( editor, NA_PIVOT( updater ));
- /* fourth tab: export tool
+ /* fourth tab: export format
*/
- export_format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT );
+ export_format = na_iprefs_get_export_format( NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT, &editor->private->export_format_mandatory );
container = base_window_get_widget( BASE_WINDOW( editor ), "PreferencesExportFormatVBox" );
- nact_export_format_select( container, export_format );
+ nact_export_format_select( container, !editor->private->export_format_mandatory, export_format );
/* fifth tab: default schemes
*/
@@ -441,11 +434,13 @@ on_base_runtime_init_dialog( NactPreferencesEditor *editor, gpointer user_data )
"clicked",
G_CALLBACK( on_cancel_clicked ));
- base_window_signal_connect_by_name(
+ ok_button = base_window_get_widget( BASE_WINDOW( editor ), "OKButton" );
+ base_window_signal_connect(
BASE_WINDOW( editor ),
- "OKButton",
+ G_OBJECT( ok_button ),
"clicked",
G_CALLBACK( on_ok_clicked ));
+ nact_gtk_utils_set_editable( G_OBJECT( ok_button ), !editor->private->preferences_locked );
}
static void
@@ -461,203 +456,560 @@ on_base_all_widgets_showed( NactPreferencesEditor *editor, gpointer user_data )
nact_schemes_list_show_all( BASE_WINDOW( editor ));
}
+/*
+ * 'order mode' is editable if preferences in general are not locked,
+ * and this one is not mandatory.
+ *
+ * This is not related in any way to the level zero order writability status
+ *
+ * The radio button group is insensitive if preferences are locked.
+ * If preferences in general are not locked, but this one is mandatory,
+ * then the radio group is sensitive, but not editable.
+ */
static void
-on_esc_quit_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
+order_mode_setup( NactPreferencesEditor *editor, NAPivot *pivot )
{
- gboolean is_active;
+ gboolean editable;
+ GtkWidget *alpha_asc_button, *alpha_desc_button, *manual_button;
+ GtkWidget *active_button;
+ GCallback active_handler;
+
+ editor->private->order_mode = na_iprefs_get_order_mode( pivot, &editor->private->order_mode_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->order_mode_mandatory;
+
+ alpha_asc_button = base_window_get_widget( BASE_WINDOW( editor ), "OrderAlphaAscButton" );
+ base_window_signal_connect( BASE_WINDOW( editor ), G_OBJECT( alpha_asc_button ), "toggled", G_CALLBACK( order_mode_on_alpha_asc_toggled ));
+
+ alpha_desc_button = base_window_get_widget( BASE_WINDOW( editor ), "OrderAlphaDescButton" );
+ base_window_signal_connect( BASE_WINDOW( editor ), G_OBJECT( alpha_desc_button ), "toggled", G_CALLBACK( order_mode_on_alpha_desc_toggled ));
+
+ manual_button = base_window_get_widget( BASE_WINDOW( editor ), "OrderManualButton" );
+ base_window_signal_connect( BASE_WINDOW( editor ), G_OBJECT( manual_button ), "toggled", G_CALLBACK( order_mode_on_manual_toggled ));
+
+ switch( editor->private->order_mode ){
+ case IPREFS_ORDER_ALPHA_ASCENDING:
+ active_button = alpha_asc_button;
+ active_handler = G_CALLBACK( order_mode_on_alpha_asc_toggled );
+ break;
+ case IPREFS_ORDER_ALPHA_DESCENDING:
+ active_button = alpha_desc_button;
+ active_handler = G_CALLBACK( order_mode_on_alpha_desc_toggled );
+ break;
+ case IPREFS_ORDER_MANUAL:
+ default:
+ active_button = manual_button;
+ active_handler = G_CALLBACK( order_mode_on_manual_toggled );
+ break;
+ }
- is_active = gtk_toggle_button_get_active( button );
- esc_quit_activated( editor, is_active );
+ nact_gtk_utils_radio_set_initial_state(
+ GTK_RADIO_BUTTON( active_button ),
+ active_handler, editor, editable, !editor->private->preferences_locked );
}
static void
-esc_quit_activated( NactPreferencesEditor *editor, gboolean esc_quit_active )
+order_mode_on_alpha_asc_toggled( GtkToggleButton *toggle_button, NactPreferencesEditor *editor )
{
- GtkWidget *toggle;
+ order_mode_on_toggled( editor, toggle_button, G_CALLBACK( order_mode_on_alpha_asc_toggled ), IPREFS_ORDER_ALPHA_ASCENDING );
+}
- toggle = base_window_get_widget( BASE_WINDOW( editor ), "EscConfirmButton" );
- gtk_widget_set_sensitive( toggle, esc_quit_active );
+static void
+order_mode_on_alpha_desc_toggled( GtkToggleButton *toggle_button, NactPreferencesEditor *editor )
+{
+ order_mode_on_toggled( editor, toggle_button, G_CALLBACK( order_mode_on_alpha_desc_toggled ), IPREFS_ORDER_ALPHA_DESCENDING );
}
static void
-on_auto_save_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
+order_mode_on_manual_toggled( GtkToggleButton *toggle_button, NactPreferencesEditor *editor )
{
- gboolean is_active;
+ order_mode_on_toggled( editor, toggle_button, G_CALLBACK( order_mode_on_manual_toggled ), IPREFS_ORDER_MANUAL );
+}
- is_active = gtk_toggle_button_get_active( button );
- auto_save_activated( editor, is_active );
+static void
+order_mode_on_toggled( NactPreferencesEditor *editor, GtkToggleButton *toggle_button, GCallback cb, guint order_mode )
+{
+ gboolean editable;
+ gboolean active;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( toggle_button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( editable ){
+ active = gtk_toggle_button_get_active( toggle_button );
+ if( active ){
+ editor->private->order_mode = order_mode;
+ }
+ } else {
+ nact_gtk_utils_radio_reset_initial_state( GTK_RADIO_BUTTON( toggle_button ), cb );
+ }
}
+/*
+ * create a root menu
+ */
static void
-auto_save_activated( NactPreferencesEditor *editor, gboolean auto_save_activated )
+root_menu_setup( NactPreferencesEditor *editor, NASettings *settings )
{
- GtkWidget *widget;
+ gboolean editable;
- widget = base_window_get_widget( BASE_WINDOW( editor ), "AutoSavePeriodicitySpinButton" );
- gtk_widget_set_sensitive( widget, auto_save_activated );
+ editor->private->root_menu = na_settings_get_boolean( settings, NA_IPREFS_ITEMS_CREATE_ROOT_MENU, NULL, &editor->private->root_menu_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->root_menu_mandatory;
- widget = base_window_get_widget( BASE_WINDOW( editor ), "AutoSaveLabel1" );
- gtk_widget_set_sensitive( widget, auto_save_activated );
+ nact_gtk_utils_toggle_set_initial_state( BASE_WINDOW( editor ),
+ "CreateRootMenuButton", G_CALLBACK( root_menu_on_toggled ),
+ editor->private->root_menu, editable, !editor->private->preferences_locked );
+}
- widget = base_window_get_widget( BASE_WINDOW( editor ), "AutoSaveLabel2" );
- gtk_widget_set_sensitive( widget, auto_save_activated );
+static void
+root_menu_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
+{
+ gboolean editable;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( editable ){
+ editor->private->root_menu = gtk_toggle_button_get_active( button );
+
+ } else {
+ nact_gtk_utils_toggle_reset_initial_state( button );
+ }
}
+/*
+ * add an about item
+ */
static void
-on_cancel_clicked( GtkButton *button, NactPreferencesEditor *editor )
+about_item_setup( NactPreferencesEditor *editor, NASettings *settings )
{
- GtkNotebook *notebook = GTK_NOTEBOOK( base_window_get_widget( BASE_WINDOW( editor ), "PreferencesNotebook" ));
- st_last_tab = gtk_notebook_get_current_page( notebook );
+ gboolean editable;
- GtkWindow *toplevel = base_window_get_toplevel( BASE_WINDOW( editor ));
- gtk_dialog_response( GTK_DIALOG( toplevel ), GTK_RESPONSE_CLOSE );
+ editor->private->about_item = na_settings_get_boolean( settings, NA_IPREFS_ITEMS_ADD_ABOUT_ITEM, NULL, &editor->private->about_item_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->about_item_mandatory;
+
+ nact_gtk_utils_toggle_set_initial_state( BASE_WINDOW( editor ),
+ "AddAboutButton", G_CALLBACK( about_item_on_toggled ),
+ editor->private->about_item, editable, !editor->private->preferences_locked );
}
static void
-on_ok_clicked( GtkButton *button, NactPreferencesEditor *editor )
+about_item_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
{
- GtkNotebook *notebook = GTK_NOTEBOOK( base_window_get_widget( BASE_WINDOW( editor ), "PreferencesNotebook" ));
- st_last_tab = gtk_notebook_get_current_page( notebook );
+ gboolean editable;
- GtkWindow *toplevel = base_window_get_toplevel( BASE_WINDOW( editor ));
- gtk_dialog_response( GTK_DIALOG( toplevel ), GTK_RESPONSE_OK );
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( editable ){
+ editor->private->about_item = gtk_toggle_button_get_active( button );
+
+ } else {
+ nact_gtk_utils_toggle_reset_initial_state( button );
+ }
}
+/*
+ * add an about item
+ */
static void
-enable_order_mode_buttons( NactPreferencesEditor *editor )
+relabel_menu_setup( NactPreferencesEditor *editor, NASettings *settings )
{
- NactApplication *application;
- NAUpdater *updater;
- gboolean writable;
- GtkWidget *button;
+ gboolean editable;
- application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( editor )));
- updater = nact_application_get_updater( application );
- writable = na_iprefs_is_level_zero_writable( NA_PIVOT( updater ));
+ editor->private->relabel_menu = na_settings_get_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_MENU, NULL, &editor->private->relabel_menu_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->relabel_menu_mandatory;
- button = base_window_get_widget( BASE_WINDOW( editor ), "OrderAlphaAscButton" );
- gtk_widget_set_sensitive( button, writable );
+ nact_gtk_utils_toggle_set_initial_state( BASE_WINDOW( editor ),
+ "RelabelMenuButton", G_CALLBACK( relabel_menu_on_toggled ),
+ editor->private->relabel_menu, editable, !editor->private->preferences_locked );
+}
+
+static void
+relabel_menu_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
+{
+ gboolean editable;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
- button = base_window_get_widget( BASE_WINDOW( editor ), "OrderAlphaDescButton" );
- gtk_widget_set_sensitive( button, writable );
+ if( editable ){
+ editor->private->relabel_menu = gtk_toggle_button_get_active( button );
- button = base_window_get_widget( BASE_WINDOW( editor ), "OrderManualButton" );
- gtk_widget_set_sensitive( button, writable );
+ } else {
+ nact_gtk_utils_toggle_reset_initial_state( button );
+ }
}
+/*
+ * add an about item
+ */
static void
-save_preferences( NactPreferencesEditor *editor )
+relabel_action_setup( NactPreferencesEditor *editor, NASettings *settings )
{
- NactApplication *application;
- NAUpdater *updater;
- GtkWidget *button;
- gint order_mode;
- gboolean enabled;
- gboolean relabel;
- guint import_mode;
- GtkWidget *container;
- NAExportFormat *export_format;
- gboolean esc_quit, esc_confirm;
- gboolean auto_save_on;
- guint auto_save_period;
- GtkAdjustment *adjustment;
- NASettings *settings;
+ gboolean editable;
- application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( editor )));
- updater = nact_application_get_updater( application );
- settings = na_pivot_get_settings( NA_PIVOT( updater ));
+ editor->private->relabel_action = na_settings_get_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_ACTION, NULL, &editor->private->relabel_action_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->relabel_action_mandatory;
+
+ nact_gtk_utils_toggle_set_initial_state( BASE_WINDOW( editor ),
+ "RelabelActionButton", G_CALLBACK( relabel_action_on_toggled ),
+ editor->private->relabel_action, editable, !editor->private->preferences_locked );
+}
+
+static void
+relabel_action_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
+{
+ gboolean editable;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( editable ){
+ editor->private->relabel_action = gtk_toggle_button_get_active( button );
- /* first tab: runtime preferences
- */
- order_mode = IPREFS_ORDER_ALPHA_ASCENDING;
- button = base_window_get_widget( BASE_WINDOW( editor ), "OrderAlphaAscButton" );
- if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
- order_mode = IPREFS_ORDER_ALPHA_ASCENDING;
} else {
- button = base_window_get_widget( BASE_WINDOW( editor ), "OrderAlphaDescButton" );
- if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
- order_mode = IPREFS_ORDER_ALPHA_DESCENDING;
- } else {
- button = base_window_get_widget( BASE_WINDOW( editor ), "OrderManualButton" );
- if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
- order_mode = IPREFS_ORDER_MANUAL;
- }
- }
+ nact_gtk_utils_toggle_reset_initial_state( button );
}
- na_iprefs_set_order_mode( NA_PIVOT( updater ), order_mode );
+}
- button = base_window_get_widget( BASE_WINDOW( editor ), "CreateRootMenuButton" );
- enabled = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- na_settings_set_boolean( settings, NA_IPREFS_ITEMS_CREATE_ROOT_MENU, enabled );
+/*
+ * add an about item
+ */
+static void
+relabel_profile_setup( NactPreferencesEditor *editor, NASettings *settings )
+{
+ gboolean editable;
- button = base_window_get_widget( BASE_WINDOW( editor ), "AddAboutButton" );
- enabled = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- na_settings_set_boolean( settings, NA_IPREFS_ITEMS_ADD_ABOUT_ITEM, enabled );
+ editor->private->relabel_profile = na_settings_get_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_PROFILE, NULL, &editor->private->relabel_profile_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->relabel_profile_mandatory;
- /* second tab: runtime preferences
- */
- button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelMenuButton" );
- relabel = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- na_settings_set_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_MENU, relabel );
+ nact_gtk_utils_toggle_set_initial_state( BASE_WINDOW( editor ),
+ "RelabelProfileButton", G_CALLBACK( relabel_profile_on_toggled ),
+ editor->private->relabel_profile, editable, !editor->private->preferences_locked );
+}
- button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelActionButton" );
- relabel = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- na_settings_set_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_ACTION, relabel );
+static void
+relabel_profile_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
+{
+ gboolean editable;
- button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelProfileButton" );
- relabel = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- na_settings_set_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_PROFILE, relabel );
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
- button = base_window_get_widget( BASE_WINDOW( editor ), "EscCloseButton" );
- esc_quit = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- na_settings_set_boolean( settings, NA_IPREFS_ASSISTANT_ESC_QUIT, esc_quit );
+ if( editable ){
+ editor->private->relabel_profile = gtk_toggle_button_get_active( button );
- button = base_window_get_widget( BASE_WINDOW( editor ), "EscConfirmButton" );
- esc_confirm = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- na_settings_set_boolean( settings, NA_IPREFS_ASSISTANT_ESC_CONFIRM, esc_confirm );
+ } else {
+ nact_gtk_utils_toggle_reset_initial_state( button );
+ }
+}
+
+/*
+ * whether Esc key quits the assistants
+ */
+static void
+esc_quit_setup( NactPreferencesEditor *editor, NASettings *settings )
+{
+ gboolean editable;
- button = base_window_get_widget( BASE_WINDOW( editor ), "AutoSaveCheckButton" );
- auto_save_on = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
- na_settings_set_boolean( settings, NA_IPREFS_MAIN_SAVE_AUTO, auto_save_on );
+ editor->private->esc_quit = na_settings_get_boolean( settings, NA_IPREFS_ASSISTANT_ESC_QUIT, NULL, &editor->private->esc_quit_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->esc_quit_mandatory;
- button = base_window_get_widget( BASE_WINDOW( editor ), "AutoSavePeriodicitySpinButton" );
- adjustment = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( button ));
- auto_save_period = ( guint ) gtk_adjustment_get_value( adjustment );
- na_settings_set_uint( settings, NA_IPREFS_MAIN_SAVE_PERIOD, auto_save_period );
+ nact_gtk_utils_toggle_set_initial_state( BASE_WINDOW( editor ),
+ "EscCloseButton", G_CALLBACK( esc_quit_on_toggled ),
+ editor->private->esc_quit, editable, !editor->private->preferences_locked );
+}
+
+static void
+esc_quit_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
+{
+ gboolean editable;
+ GtkWidget *confirm_button;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( editable ){
+ editor->private->esc_quit = gtk_toggle_button_get_active( button );
+ confirm_button = base_window_get_widget( BASE_WINDOW( editor ), "EscConfirmButton" );
+ gtk_widget_set_sensitive( confirm_button, editor->private->esc_quit );
+
+ } else {
+ nact_gtk_utils_toggle_reset_initial_state( button );
+ }
+}
+
+/*
+ * whether we should ask for a user confirmation when quitting an assistant
+ * on 'Esc' key
+ */
+static void
+esc_confirm_setup( NactPreferencesEditor *editor, NASettings *settings )
+{
+ gboolean editable;
+
+ editor->private->esc_confirm = na_settings_get_boolean( settings, NA_IPREFS_ASSISTANT_ESC_CONFIRM, NULL, &editor->private->esc_confirm_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->esc_confirm_mandatory;
+
+ nact_gtk_utils_toggle_set_initial_state( BASE_WINDOW( editor ),
+ "EscConfirmButton", G_CALLBACK( esc_confirm_on_toggled ),
+ editor->private->esc_confirm, editable, !editor->private->preferences_locked );
+}
+
+static void
+esc_confirm_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
+{
+ gboolean editable;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( editable ){
+ editor->private->esc_confirm = gtk_toggle_button_get_active( button );
+
+ } else {
+ nact_gtk_utils_toggle_reset_initial_state( button );
+ }
+}
+
+/*
+ * add an about item
+ */
+static void
+auto_save_setup( NactPreferencesEditor *editor, NASettings *settings )
+{
+ gboolean editable;
+ GtkWidget *spin_button;
+ GtkAdjustment *adjustment;
+
+ g_debug( "nact_preferences_editor_auto_save_setup" );
+ editor->private->auto_save = na_settings_get_boolean( settings, NA_IPREFS_MAIN_SAVE_AUTO, NULL, &editor->private->auto_save_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->auto_save_mandatory;
+
+ editor->private->auto_save_period = na_settings_get_uint( settings, NA_IPREFS_MAIN_SAVE_PERIOD, NULL, &editor->private->auto_save_period_mandatory );
+ spin_button = base_window_get_widget( BASE_WINDOW( editor ), "AutoSavePeriodicitySpinButton" );
+ adjustment = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( spin_button ));
+ gtk_adjustment_configure( adjustment, editor->private->auto_save_period, 1, 999, 1, 10, 0 );
+
+ editable = !editor->private->preferences_locked && !editor->private->auto_save_period_mandatory;
+ gtk_editable_set_editable( GTK_EDITABLE( spin_button ), editable );
+ base_window_signal_connect( BASE_WINDOW( editor ),
+ G_OBJECT( spin_button ), "value-changed", G_CALLBACK( auto_save_period_on_change_value ));
+
+ editable = !editor->private->preferences_locked && !editor->private->auto_save_mandatory;
+ nact_gtk_utils_toggle_set_initial_state( BASE_WINDOW( editor ),
+ "AutoSaveCheckButton", G_CALLBACK( auto_save_on_toggled ),
+ editor->private->auto_save, editable, !editor->private->preferences_locked );
+}
+
+static void
+auto_save_on_toggled( GtkToggleButton *button, NactPreferencesEditor *editor )
+{
+ gboolean editable;
+ GtkWidget *widget;
+ gboolean sensitive;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( editable ){
+ editor->private->auto_save = gtk_toggle_button_get_active( button );
- /* third tab: import tool
- */
- import_mode = IMPORTER_MODE_NO_IMPORT;
- button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsRenumberButton" );
- if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
- import_mode = IMPORTER_MODE_RENUMBER;
} else {
- button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsOverrideButton" );
- if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
- import_mode = IMPORTER_MODE_OVERRIDE;
- } else {
- button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsAskButton" );
- if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
- import_mode = IMPORTER_MODE_ASK;
- }
+ nact_gtk_utils_toggle_reset_initial_state( button );
+ }
+
+ sensitive = editor->private->auto_save && !editor->private->preferences_locked;
+
+ widget = base_window_get_widget( BASE_WINDOW( editor ), "AutoSavePeriodicitySpinButton" );
+ gtk_widget_set_sensitive( widget, sensitive );
+
+ widget = base_window_get_widget( BASE_WINDOW( editor ), "AutoSaveLabel1" );
+ gtk_widget_set_sensitive( widget, sensitive );
+
+ widget = base_window_get_widget( BASE_WINDOW( editor ), "AutoSaveLabel2" );
+ gtk_widget_set_sensitive( widget, sensitive );
+}
+
+static void
+auto_save_period_on_change_value( GtkSpinButton *spinbutton, NactPreferencesEditor *editor )
+{
+ g_debug( "nact_preferences_editor_auto_save_period_on_change_value" );
+ editor->private->auto_save_period = gtk_spin_button_get_value_as_int( spinbutton );
+}
+
+/*
+ * preferred import mode
+ */
+static void
+import_mode_setup( NactPreferencesEditor *editor, NAPivot *pivot )
+{
+ gboolean editable;
+ GtkWidget *ask_button, *override_button, *renumber_button, *noimport_button;
+ GtkWidget *active_button;
+ GCallback active_handler;
+
+ editor->private->import_mode = na_iprefs_get_import_mode(
+ pivot, NA_IPREFS_IMPORT_PREFERRED_MODE, &editor->private->import_mode_mandatory );
+ editable = !editor->private->preferences_locked && !editor->private->import_mode_mandatory;
+
+ ask_button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsAskButton" );
+ base_window_signal_connect( BASE_WINDOW( editor ), G_OBJECT( ask_button ), "toggled", G_CALLBACK( import_mode_on_ask_toggled ));
+
+ override_button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsOverrideButton" );
+ base_window_signal_connect( BASE_WINDOW( editor ), G_OBJECT( override_button ), "toggled", G_CALLBACK( import_mode_on_override_toggled ));
+
+ renumber_button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsRenumberButton" );
+ base_window_signal_connect( BASE_WINDOW( editor ), G_OBJECT( renumber_button ), "toggled", G_CALLBACK( import_mode_on_renumber_toggled ));
+
+ noimport_button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsNoImportButton" );
+ base_window_signal_connect( BASE_WINDOW( editor ), G_OBJECT( noimport_button ), "toggled", G_CALLBACK( import_mode_on_noimport_toggled ));
+
+ switch( editor->private->import_mode ){
+ case IMPORTER_MODE_ASK:
+ active_button = ask_button;
+ active_handler = G_CALLBACK( import_mode_on_ask_toggled );
+ break;
+ case IMPORTER_MODE_OVERRIDE:
+ active_button = override_button;
+ active_handler = G_CALLBACK( import_mode_on_override_toggled );
+ break;
+ case IMPORTER_MODE_RENUMBER:
+ active_button = renumber_button;
+ active_handler = G_CALLBACK( import_mode_on_renumber_toggled );
+ break;
+ case IMPORTER_MODE_NO_IMPORT:
+ default:
+ active_button = noimport_button;
+ active_handler = G_CALLBACK( import_mode_on_noimport_toggled );
+ break;
+ }
+
+ nact_gtk_utils_radio_set_initial_state(
+ GTK_RADIO_BUTTON( active_button ),
+ active_handler, editor, editable, !editor->private->preferences_locked );
+}
+
+static void
+import_mode_on_ask_toggled( GtkToggleButton *toggle_button, NactPreferencesEditor *editor )
+{
+ import_mode_on_toggled( editor, toggle_button, G_CALLBACK( import_mode_on_ask_toggled ), IMPORTER_MODE_ASK );
+}
+
+static void
+import_mode_on_override_toggled( GtkToggleButton *toggle_button, NactPreferencesEditor *editor )
+{
+ import_mode_on_toggled( editor, toggle_button, G_CALLBACK( import_mode_on_override_toggled ), IMPORTER_MODE_OVERRIDE );
+}
+
+static void
+import_mode_on_renumber_toggled( GtkToggleButton *toggle_button, NactPreferencesEditor *editor )
+{
+ import_mode_on_toggled( editor, toggle_button, G_CALLBACK( import_mode_on_renumber_toggled ), IMPORTER_MODE_RENUMBER );
+}
+
+static void
+import_mode_on_noimport_toggled( GtkToggleButton *toggle_button, NactPreferencesEditor *editor )
+{
+ import_mode_on_toggled( editor, toggle_button, G_CALLBACK( import_mode_on_noimport_toggled ), IMPORTER_MODE_NO_IMPORT );
+}
+
+static void
+import_mode_on_toggled( NactPreferencesEditor *editor, GtkToggleButton *toggle_button, GCallback cb, guint import_mode )
+{
+ gboolean editable;
+ gboolean active;
+
+ editable = ( gboolean ) GPOINTER_TO_UINT( g_object_get_data( G_OBJECT( toggle_button ), NACT_PROP_TOGGLE_EDITABLE ));
+
+ if( editable ){
+ active = gtk_toggle_button_get_active( toggle_button );
+ if( active ){
+ editor->private->import_mode = import_mode;
}
+ } else {
+ nact_gtk_utils_radio_reset_initial_state( GTK_RADIO_BUTTON( toggle_button ), cb );
}
- na_iprefs_set_import_mode( NA_PIVOT( updater ), NA_IPREFS_IMPORT_PREFERRED_MODE, import_mode );
+}
- /* fourth tab: export tool
- */
- container = base_window_get_widget( BASE_WINDOW( editor ), "PreferencesExportFormatVBox" );
- export_format = nact_export_format_get_selected( container );
- na_iprefs_set_export_format(
- NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT, na_export_format_get_quark( export_format ));
+static void
+on_cancel_clicked( GtkButton *button, NactPreferencesEditor *editor )
+{
+ GtkWindow *toplevel = base_window_get_toplevel( BASE_WINDOW( editor ));
+ gtk_dialog_response( GTK_DIALOG( toplevel ), GTK_RESPONSE_CLOSE );
+}
- /* fifth tab: list of default schemes
- */
- nact_schemes_list_save_defaults( BASE_WINDOW( editor ));
+static void
+on_ok_clicked( GtkButton *button, NactPreferencesEditor *editor )
+{
+ GtkWindow *toplevel = base_window_get_toplevel( BASE_WINDOW( editor ));
+ gtk_dialog_response( GTK_DIALOG( toplevel ), GTK_RESPONSE_OK );
+}
- /* sixth tab: priorities of I/O providers
- */
- nact_providers_list_save( BASE_WINDOW( editor ));
+static void
+save_preferences( NactPreferencesEditor *editor )
+{
+ NactApplication *application;
+ NAUpdater *updater;
+ NASettings *settings;
+ GtkWidget *container;
+ NAExportFormat *export_format;
+
+ if( !editor->private->preferences_locked ){
+ application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( editor )));
+ updater = nact_application_get_updater( application );
+ settings = na_pivot_get_settings( NA_PIVOT( updater ));
+
+ /* first tab: runtime preferences
+ */
+ if( !editor->private->order_mode_mandatory ){
+ na_iprefs_set_order_mode( NA_PIVOT( updater ), editor->private->order_mode );
+ }
+ if( !editor->private->root_menu_mandatory ){
+ na_settings_set_boolean( settings, NA_IPREFS_ITEMS_CREATE_ROOT_MENU, editor->private->root_menu );
+ }
+ if( !editor->private->about_item_mandatory ){
+ na_settings_set_boolean( settings, NA_IPREFS_ITEMS_ADD_ABOUT_ITEM, editor->private->about_item );
+ }
+
+ /* second tab: runtime preferences
+ */
+ if( !editor->private->relabel_menu_mandatory ){
+ na_settings_set_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_MENU, editor->private->relabel_menu );
+ }
+ if( !editor->private->relabel_action_mandatory ){
+ na_settings_set_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_ACTION, editor->private->relabel_action );
+ }
+ if( !editor->private->relabel_profile_mandatory ){
+ na_settings_set_boolean( settings, NA_IPREFS_RELABEL_DUPLICATE_PROFILE, editor->private->relabel_profile );
+ }
+ if( !editor->private->esc_quit_mandatory ){
+ na_settings_set_boolean( settings, NA_IPREFS_ASSISTANT_ESC_QUIT, editor->private->esc_quit );
+ }
+ if( !editor->private->esc_confirm_mandatory ){
+ na_settings_set_boolean( settings, NA_IPREFS_ASSISTANT_ESC_CONFIRM, editor->private->esc_confirm );
+ }
+ if( !editor->private->auto_save_mandatory ){
+ na_settings_set_boolean( settings, NA_IPREFS_MAIN_SAVE_AUTO, editor->private->auto_save );
+ }
+ if( !editor->private->auto_save_period_mandatory ){
+ na_settings_set_uint( settings, NA_IPREFS_MAIN_SAVE_PERIOD, editor->private->auto_save_period );
+ }
+
+ /* third tab: import mode
+ */
+ if( !editor->private->import_mode_mandatory ){
+ na_iprefs_set_import_mode( NA_PIVOT( updater ), NA_IPREFS_IMPORT_PREFERRED_MODE, editor->private->import_mode );
+ }
+
+ /* fourth tab: export format
+ */
+ if( !editor->private->export_format_mandatory ){
+ container = base_window_get_widget( BASE_WINDOW( editor ), "PreferencesExportFormatVBox" );
+ export_format = nact_export_format_get_selected( container );
+ na_iprefs_set_export_format(
+ NA_PIVOT( updater ), NA_IPREFS_EXPORT_PREFERRED_FORMAT, na_export_format_get_quark( export_format ));
+ }
+
+ /* fifth tab: list of default schemes
+ */
+ nact_schemes_list_save_defaults( BASE_WINDOW( editor ));
+
+ /* sixth tab: priorities of I/O providers
+ */
+ nact_providers_list_save( BASE_WINDOW( editor ));
+ }
}
static gboolean
@@ -665,9 +1017,14 @@ base_dialog_response( GtkDialog *dialog, gint code, BaseWindow *window )
{
static const gchar *thisfn = "nact_preferences_editor_on_dialog_response";
NactPreferencesEditor *editor;
+ gboolean stop;
+ GtkNotebook *notebook;
+
+ g_return_val_if_fail( NACT_IS_PREFERENCES_EDITOR( window ), FALSE );
g_debug( "%s: dialog=%p, code=%d, window=%p", thisfn, ( void * ) dialog, code, ( void * ) window );
- g_assert( NACT_IS_PREFERENCES_EDITOR( window ));
+
+ stop = FALSE;
editor = NACT_PREFERENCES_EDITOR( window );
switch( code ){
@@ -676,16 +1033,21 @@ base_dialog_response( GtkDialog *dialog, gint code, BaseWindow *window )
case GTK_RESPONSE_CLOSE:
case GTK_RESPONSE_CANCEL:
- g_object_unref( editor );
- return( TRUE );
+ stop = TRUE;
break;
case GTK_RESPONSE_OK:
save_preferences( editor );
- g_object_unref( editor );
- return( TRUE );
+ stop = TRUE;
break;
}
- return( FALSE );
+ if( stop ){
+ notebook = GTK_NOTEBOOK( base_window_get_widget( window, "PreferencesNotebook" ));
+ st_last_tab = gtk_notebook_get_current_page( notebook );
+ g_object_unref( editor );
+ }
+
+
+ return( stop );
}
diff --git a/src/nact/nact-preferences.ui b/src/nact/nact-preferences.ui
index 90e969d..9ee7821 100644
--- a/src/nact/nact-preferences.ui
+++ b/src/nact/nact-preferences.ui
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
@@ -23,6 +23,7 @@
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox4">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkNotebook" id="PreferencesNotebook">
@@ -31,6 +32,7 @@
<child>
<object class="GtkVBox" id="vbox33">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame3">
<property name="visible">True</property>
@@ -45,6 +47,7 @@
<object class="GtkVBox" id="vbox30">
<property name="visible">True</property>
<property name="border_width">6</property>
+ <property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkRadioButton" id="OrderAlphaAscButton">
@@ -123,6 +126,7 @@
<object class="GtkVBox" id="vbox17">
<property name="visible">True</property>
<property name="border_width">6</property>
+ <property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkCheckButton" id="CreateRootMenuButton">
@@ -187,6 +191,7 @@ Note that this item will be displayed only if a unique menu is defined in the Na
<child>
<object class="GtkVBox" id="vbox34">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame2">
<property name="visible">True</property>
@@ -200,6 +205,7 @@ Note that this item will be displayed only if a unique menu is defined in the Na
<child>
<object class="GtkVBox" id="vbox25">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label45">
<property name="visible">True</property>
@@ -216,6 +222,7 @@ Note that this item will be displayed only if a unique menu is defined in the Na
<object class="GtkVBox" id="vbox27">
<property name="visible">True</property>
<property name="border_width">6</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="RelabelMenuButton">
<property name="label" translatable="yes">Relabel _menus</property>
@@ -295,6 +302,7 @@ Note that this item will be displayed only if a unique menu is defined in the Na
<object class="GtkVBox" id="vbox43">
<property name="visible">True</property>
<property name="border_width">6</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="EscCloseButton">
<property name="label" translatable="yes">Esc key _quits the assistant</property>
@@ -358,6 +366,7 @@ Note that this item will be displayed only if a unique menu is defined in the Na
<object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="border_width">6</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="AutoSaveCheckButton">
<property name="label" translatable="yes">Automatically _saves pending modifications</property>
@@ -391,7 +400,7 @@ Note that this item will be displayed only if a unique menu is defined in the Na
<object class="GtkSpinButton" id="AutoSavePeriodicitySpinButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="invisible_char">â??</property>
+ <property name="invisible_char">●</property>
<property name="width_chars">5</property>
<property name="snap_to_ticks">True</property>
<property name="numeric">True</property>
@@ -456,6 +465,7 @@ Note that this item will be displayed only if a unique menu is defined in the Na
<child>
<object class="GtkVBox" id="vbox35">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame4">
<property name="visible">True</property>
@@ -469,6 +479,7 @@ Note that this item will be displayed only if a unique menu is defined in the Na
<child>
<object class="GtkVBox" id="vbox13">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label8">
<property name="visible">True</property>
@@ -485,6 +496,7 @@ Note that this item will be displayed only if a unique menu is defined in the Na
<object class="GtkVBox" id="vbox32">
<property name="visible">True</property>
<property name="border_width">6</property>
+ <property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkRadioButton" id="PrefsNoImportButton">
@@ -593,6 +605,7 @@ Be warned: this mode may be dangerous. You will not be prompted another time.</p
<child>
<object class="GtkVBox" id="vbox41">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame5">
<property name="visible">True</property>
@@ -606,10 +619,12 @@ Be warned: this mode may be dangerous. You will not be prompted another time.</p
<child>
<object class="GtkVBox" id="vbox15">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkVBox" id="PreferencesExportFormatVBox">
<property name="visible">True</property>
<property name="border_width">6</property>
+ <property name="orientation">vertical</property>
<property name="homogeneous">True</property>
</object>
<packing>
@@ -655,6 +670,7 @@ Be warned: this mode may be dangerous. You will not be prompted another time.</p
<child>
<object class="GtkVBox" id="vbox44">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame13">
<property name="visible">True</property>
@@ -699,6 +715,7 @@ You can add a new scheme by clicking on the '+' button.</property>
<child>
<object class="GtkVBox" id="vbox29">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="AddSchemeButton">
@@ -783,6 +800,7 @@ You can add a new scheme by clicking on the '+' button.</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame7">
<property name="visible">True</property>
@@ -825,6 +843,7 @@ You can add a new scheme by clicking on the '+' button.</property>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="ProviderButtonUp">
diff --git a/src/nact/nact-tree-model-dnd.c b/src/nact/nact-tree-model-dnd.c
index a8a8bc9..8747a5b 100644
--- a/src/nact/nact-tree-model-dnd.c
+++ b/src/nact/nact-tree-model-dnd.c
@@ -894,7 +894,7 @@ drop_uri_list( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData *selec
parms.parent = base_window_get_toplevel( BASE_WINDOW( main_window ));
parms.uris = g_slist_reverse( na_core_utils_slist_from_split( selection_data_data, "\r\n" ));
- parms.mode = na_iprefs_get_import_mode( NA_PIVOT( updater ), NA_IPREFS_IMPORT_PREFERRED_MODE );
+ parms.mode = na_iprefs_get_import_mode( NA_PIVOT( updater ), NA_IPREFS_IMPORT_PREFERRED_MODE, NULL );
parms.check_fn = ( NAIImporterCheckFn ) is_dropped_already_exists;
parms.check_fn_data = main_window;
diff --git a/src/nact/nact-tree-model.c b/src/nact/nact-tree-model.c
index 9e67f49..06e6592 100644
--- a/src/nact/nact-tree-model.c
+++ b/src/nact/nact-tree-model.c
@@ -313,7 +313,7 @@ tree_model_new( BaseWindow *window, GtkTreeView *treeview )
*/
application = NACT_APPLICATION( base_window_get_application( window ));
updater = nact_application_get_updater( application );
- order_mode = na_iprefs_get_order_mode( NA_PIVOT( updater ));
+ order_mode = na_iprefs_get_order_mode( NA_PIVOT( updater ), NULL );
nact_tree_model_display_order_change( model, order_mode );
model->private->window = window;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]