[nautilus-actions] Define 'Ask user' new import mode



commit d93ad5cba5822048606d9ba2cdcc31eaed38b035
Author: pierre <pierre vfedora10 virtuals pwi>
Date:   Thu Oct 15 14:58:19 2009 +0200

    Define 'Ask user' new import mode

 ChangeLog                                |   27 ++
 data/nautilus-actions.schemas.in         |   17 ++-
 po/POTFILES.in                           |    1 +
 src/common/na-iprefs.c                   |   17 +-
 src/common/na-iprefs.h                   |    3 +-
 src/nact/Makefile.am                     |    2 +
 src/nact/nact-assistant-import-ask.c     |  405 ++++++++++++++++++++++++++++++
 src/nact/nact-assistant-import-ask.h     |   81 ++++++
 src/nact/nact-assistant-import.c         |   42 +++-
 src/nact/nact-main-window.c              |   69 +++---
 src/nact/nact-main-window.h              |    2 +-
 src/nact/nact-preferences-editor.c       |   22 +-
 src/nact/nautilus-actions-config-tool.ui |  227 ++++++++++++++++-
 13 files changed, 838 insertions(+), 77 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index bc7abd9..1b57afb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+2009-10-15 Pierre Wieser <pwieser trychlos org>
+
+	New 'Ask user' import mode.
+
+	* data/nautilus-actions.schemas.in:
+	Define new 'import-ask-user' preference schema.
+	Add 'Ask user' new value for 'import-mode' preference.
+
+	* po/POTFILES.in:
+	* src/nact/Makefile.am:
+	Add 'src/nact/nact-assistant-import-ask.c' new file.
+
+	* src/common/na-iprefs.c:
+	* src/common/na-iprefs.h:
+	* src/nact/nact-assistant-import.c:
+	* src/nact/nact-preferences-editor.c:
+	Define IPREFS_IMPORT_ASK new import mode.
+
+	* src/nact/nact-main-window.c
+	(nact_main_window_action_exists): Renamed as
+	nact_main_window_get_item.
+
+	* src/nact/nautilus-actions-config-tool.ui:
+	* src/nact/nact-assistant-import-ask.c:
+	* src/nact/nact-assistant-import-ask.h:
+	New AssistantImportAsk dialog box.
+
 2009-10-14 Pierre Wieser <pwieser trychlos org>
 
 	* configure.ac:
diff --git a/data/nautilus-actions.schemas.in b/data/nautilus-actions.schemas.in
index 5eb5ba4..b72fe04 100644
--- a/data/nautilus-actions.schemas.in
+++ b/data/nautilus-actions.schemas.in
@@ -275,7 +275,7 @@ All schemes used by Nautilus can be used here.</long>
     </schema>
 
     <schema>
-      <key>/schemas/apps/nautilus-actions/preferences/import-assistant</key>
+      <key>/schemas/apps/nautilus-actions/preferences/import-ask-user</key>
       <owner>nautilus-actions</owner>
       <type>list</type>
       <list_type>int</list_type>
@@ -287,6 +287,18 @@ All schemes used by Nautilus can be used here.</long>
     </schema>
 
     <schema>
+      <key>/schemas/apps/nautilus-actions/preferences/import-assistant</key>
+      <owner>nautilus-actions</owner>
+      <type>list</type>
+      <list_type>int</list_type>
+      <locale name="C">
+        <short>Position and size of the interaction dialog at import time</short>
+        <long>Position and size of the interaction dialog at import time ; default is set by the window manager</long>
+      </locale>
+      <default>[]</default>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/nautilus-actions/preferences/import-folder-uri</key>
       <owner>nautilus-actions</owner>
       <type>string</type>
@@ -306,7 +318,8 @@ All schemes used by Nautilus can be used here.</long>
         <long>Last import mode choosen in the Import assistant. Possible values are :
 - "NoImport": do not import an action whose UUID already exists,
 - "Renumber": allocate a new UUID if the imported UUID already exists,
-- "Override": override the existing action with the imported one.</long>
+- "Override": override the existing action with the imported one,
+- "Ask": ask the user each time.</long>
       </locale>
       <default>/tmp</default>
     </schema>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ccf8346..1f3e416 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -9,6 +9,7 @@ src/nact/nact-application.c
 src/nact/nact-assistant-export.c
 src/nact/nact-assistant-export.ui
 src/nact/nact-assistant-import.c
+src/nact/nact-assistant-import-ask.c
 src/nact/nact.desktop.in
 src/nact/nact-iactions-list.c
 src/nact/nact-iaction-tab.c
diff --git a/src/common/na-iprefs.c b/src/common/na-iprefs.c
index e585af3..b7b3e6e 100644
--- a/src/common/na-iprefs.c
+++ b/src/common/na-iprefs.c
@@ -40,8 +40,9 @@
 
 static GConfEnumStringPair import_mode_table[] = {
 	{ IPREFS_IMPORT_NO_IMPORT,			"NoImport" },
-	{ IPREFS_IMPORT_RENUMBER ,			"Renumber" },
-	{ IPREFS_IMPORT_OVERRIDE ,			"Override" },
+	{ IPREFS_IMPORT_RENUMBER,			"Renumber" },
+	{ IPREFS_IMPORT_OVERRIDE,			"Override" },
+	{ IPREFS_IMPORT_ASK,				"Ask" },
 	{ 0, NULL }
 };
 
@@ -68,11 +69,13 @@ na_iprefs_migrate_key( NAIPrefs *instance, const gchar *old_key, const gchar *ne
 	g_debug( "%s: instance=%p, old_key=%s, new_key=%s", thisfn, ( void * ) instance, old_key, new_key );
 	g_return_if_fail( NA_IS_IPREFS( instance ));
 
-	value = get_value( na_iprefs_get_gconf_client( instance ), NA_GCONF_PREFS_PATH, old_key );
-
-	if( value ){
-		set_value( na_iprefs_get_gconf_client( instance ), NA_GCONF_PREFS_PATH, new_key, value );
-		gconf_value_free( value );
+	value = get_value( na_iprefs_get_gconf_client( instance ), NA_GCONF_PREFS_PATH, new_key );
+	if( !value ){
+		value = get_value( na_iprefs_get_gconf_client( instance ), NA_GCONF_PREFS_PATH, old_key );
+		if( value ){
+			set_value( na_iprefs_get_gconf_client( instance ), NA_GCONF_PREFS_PATH, new_key, value );
+			gconf_value_free( value );
+		}
 	}
 
 	/* do not remove entries which may be always used by another,
diff --git a/src/common/na-iprefs.h b/src/common/na-iprefs.h
index 72e53f1..4ae7031 100644
--- a/src/common/na-iprefs.h
+++ b/src/common/na-iprefs.h
@@ -54,7 +54,8 @@ G_BEGIN_DECLS
 enum {
 	IPREFS_IMPORT_NO_IMPORT = 1,
 	IPREFS_IMPORT_RENUMBER,
-	IPREFS_IMPORT_OVERRIDE
+	IPREFS_IMPORT_OVERRIDE,
+	IPREFS_IMPORT_ASK
 };
 
 #define IPREFS_RELABEL_MENUS				"iprefs-relabel-menus"
diff --git a/src/nact/Makefile.am b/src/nact/Makefile.am
index 841a1c6..e5194a8 100644
--- a/src/nact/Makefile.am
+++ b/src/nact/Makefile.am
@@ -66,6 +66,8 @@ nautilus_actions_config_tool_SOURCES = \
 	nact-assistant-export.h								\
 	nact-assistant-import.c								\
 	nact-assistant-import.h								\
+	nact-assistant-import-ask.c							\
+	nact-assistant-import-ask.h							\
 	nact-clipboard.c									\
 	nact-clipboard.h									\
 	nact-iactions-list.c								\
diff --git a/src/nact/nact-assistant-import-ask.c b/src/nact/nact-assistant-import-ask.c
new file mode 100644
index 0000000..1023293
--- /dev/null
+++ b/src/nact/nact-assistant-import-ask.c
@@ -0,0 +1,405 @@
+/*
+ * Nautilus Actions
+ * A Nautilus extension which offers configurable context menu actions.
+ *
+ * Copyright (C) 2005 The GNOME Foundation
+ * Copyright (C) 2006, 2007, 2008 Frederic Ruaudel and others (see AUTHORS)
+ * Copyright (C) 2009 Pierre Wieser and others (see AUTHORS)
+ *
+ * This Program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this Library; see the file COPYING.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place,
+ * Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ *   Frederic Ruaudel <grumz grumz net>
+ *   Rodrigo Moya <rodrigo gnome-db org>
+ *   Pierre Wieser <pwieser trychlos org>
+ *   ... and many others (see AUTHORS)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib/gi18n.h>
+
+#include <common/na-iprefs.h>
+#include <common/na-object-api.h>
+
+#include "nact-application.h"
+#include "nact-assistant-import-ask.h"
+
+/* private class data
+ */
+struct NactAssistantImportAskClassPrivate {
+	void *empty;						/* so that gcc -pedantic is happy */
+};
+
+/* private instance data
+ */
+struct NactAssistantImportAskPrivate {
+	gboolean        dispose_has_run;
+	NactMainWindow *parent;
+	const gchar    *uri;
+	NAObjectAction *action;
+	NAObjectItem   *exist;
+	gint            mode;
+};
+
+static BaseDialogClass *st_parent_class = NULL;
+
+static GType register_type( void );
+static void  class_init( NactAssistantImportAskClass *klass );
+static void  instance_init( GTypeInstance *instance, gpointer klass );
+static void  instance_dispose( GObject *dialog );
+static void  instance_finalize( GObject *dialog );
+
+static NactAssistantImportAsk *assistant_import_ask_new( NactApplication *application );
+
+static gchar   *base_get_iprefs_window_id( BaseWindow *window );
+static gchar   *base_get_dialog_name( BaseWindow *window );
+static void     on_base_initial_load_dialog( NactAssistantImportAsk *editor, gpointer user_data );
+static void     on_base_runtime_init_dialog( NactAssistantImportAsk *editor, gpointer user_data );
+static void     on_base_all_widgets_showed( NactAssistantImportAsk *editor, gpointer user_data );
+static void     on_cancel_clicked( GtkButton *button, NactAssistantImportAsk *editor );
+static void     on_ok_clicked( GtkButton *button, NactAssistantImportAsk *editor );
+static void     get_mode( NactAssistantImportAsk *editor );
+static gboolean base_dialog_response( GtkDialog *dialog, gint code, BaseWindow *window );
+
+GType
+nact_assistant_import_ask_get_type( void )
+{
+	static GType dialog_type = 0;
+
+	if( !dialog_type ){
+		dialog_type = register_type();
+	}
+
+	return( dialog_type );
+}
+
+static GType
+register_type( void )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_register_type";
+	GType type;
+
+	static GTypeInfo info = {
+		sizeof( NactAssistantImportAskClass ),
+		( GBaseInitFunc ) NULL,
+		( GBaseFinalizeFunc ) NULL,
+		( GClassInitFunc ) class_init,
+		NULL,
+		NULL,
+		sizeof( NactAssistantImportAsk ),
+		0,
+		( GInstanceInitFunc ) instance_init
+	};
+
+	g_debug( "%s", thisfn );
+
+	type = g_type_register_static( BASE_DIALOG_TYPE, "NactAssistantImportAsk", &info, 0 );
+
+	return( type );
+}
+
+static void
+class_init( NactAssistantImportAskClass *klass )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_class_init";
+	GObjectClass *object_class;
+	BaseWindowClass *base_class;
+
+	g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
+
+	st_parent_class = g_type_class_peek_parent( klass );
+
+	object_class = G_OBJECT_CLASS( klass );
+	object_class->dispose = instance_dispose;
+	object_class->finalize = instance_finalize;
+
+	klass->private = g_new0( NactAssistantImportAskClassPrivate, 1 );
+
+	base_class = BASE_WINDOW_CLASS( klass );
+	base_class->dialog_response = base_dialog_response;
+	base_class->get_toplevel_name = base_get_dialog_name;
+	base_class->get_iprefs_window_id = base_get_iprefs_window_id;
+}
+
+static void
+instance_init( GTypeInstance *instance, gpointer klass )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_instance_init";
+	NactAssistantImportAsk *self;
+
+	g_debug( "%s: instance=%p, klass=%p", thisfn, ( void * ) instance, ( void * ) klass );
+	g_return_if_fail( NACT_IS_ASSISTANT_IMPORT_ASK( instance ));
+	self = NACT_ASSISTANT_IMPORT_ASK( instance );
+
+	self->private = g_new0( NactAssistantImportAskPrivate, 1 );
+
+	base_window_signal_connect(
+			BASE_WINDOW( instance ),
+			G_OBJECT( instance ),
+			BASE_WINDOW_SIGNAL_INITIAL_LOAD,
+			G_CALLBACK( on_base_initial_load_dialog ));
+
+	base_window_signal_connect(
+			BASE_WINDOW( instance ),
+			G_OBJECT( instance ),
+			BASE_WINDOW_SIGNAL_RUNTIME_INIT,
+			G_CALLBACK( on_base_runtime_init_dialog ));
+
+	base_window_signal_connect(
+			BASE_WINDOW( instance ),
+			G_OBJECT( instance ),
+			BASE_WINDOW_SIGNAL_ALL_WIDGETS_SHOWED,
+			G_CALLBACK( on_base_all_widgets_showed));
+
+	self->private->dispose_has_run = FALSE;
+}
+
+static void
+instance_dispose( GObject *dialog )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_instance_dispose";
+	NactAssistantImportAsk *self;
+
+	g_debug( "%s: dialog=%p", thisfn, ( void * ) dialog );
+	g_return_if_fail( NACT_IS_ASSISTANT_IMPORT_ASK( dialog ));
+	self = NACT_ASSISTANT_IMPORT_ASK( dialog );
+
+	if( !self->private->dispose_has_run ){
+
+		self->private->dispose_has_run = TRUE;
+
+		/* chain up to the parent class */
+		if( G_OBJECT_CLASS( st_parent_class )->dispose ){
+			G_OBJECT_CLASS( st_parent_class )->dispose( dialog );
+		}
+	}
+}
+
+static void
+instance_finalize( GObject *dialog )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_instance_finalize";
+	NactAssistantImportAsk *self;
+
+	g_debug( "%s: dialog=%p", thisfn, ( void * ) dialog );
+	g_return_if_fail( NACT_IS_ASSISTANT_IMPORT_ASK( dialog ));
+	self = NACT_ASSISTANT_IMPORT_ASK( dialog );
+
+	g_free( self->private );
+
+	/* chain call to parent class */
+	if( G_OBJECT_CLASS( st_parent_class )->finalize ){
+		G_OBJECT_CLASS( st_parent_class )->finalize( dialog );
+	}
+}
+
+/*
+ * Returns a newly allocated NactAssistantImportAsk object.
+ */
+static NactAssistantImportAsk *
+assistant_import_ask_new( NactApplication *application )
+{
+	return( g_object_new( NACT_ASSISTANT_IMPORT_ASK_TYPE, BASE_WINDOW_PROP_APPLICATION, application, NULL ));
+}
+
+/**
+ * nact_assistant_import_ask_run:
+ * @parent: the BaseWindow parent of this dialog
+ * (usually the NactMainWindow).
+ *
+ * Initializes and runs the dialog.
+ *
+ * Returns: the mode choosen by the user ; it defaults to NO_IMPORT.
+ */
+gint
+nact_assistant_import_ask_user( NactMainWindow *parent, const gchar *uri, NAObjectAction *action, NAObjectItem *exist )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_run";
+	NactApplication *application;
+	NactAssistantImportAsk *editor;
+	gint mode;
+
+	g_debug( "%s: parent=%p", thisfn, ( void * ) parent );
+	g_return_val_if_fail( BASE_IS_WINDOW( parent ), IPREFS_IMPORT_NO_IMPORT );
+
+	application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( parent )));
+	g_assert( NACT_IS_APPLICATION( application ));
+
+	editor = assistant_import_ask_new( application );
+	editor->private->parent = parent;
+	editor->private->uri = uri;
+	editor->private->action = action;
+	editor->private->exist = exist;
+	editor->private->mode = IPREFS_IMPORT_NO_IMPORT;
+
+	base_window_run( BASE_WINDOW( editor ));
+	mode = editor->private->mode;
+	g_object_unref( editor );
+
+	return( mode );
+}
+
+static gchar *
+base_get_iprefs_window_id( BaseWindow *window )
+{
+	return( g_strdup( "import-ask-user" ));
+}
+
+static gchar *
+base_get_dialog_name( BaseWindow *window )
+{
+	return( g_strdup( "AssistantImportAsk" ));
+}
+
+static void
+on_base_initial_load_dialog( NactAssistantImportAsk *editor, gpointer user_data )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_on_initial_load_dialog";
+	/*GtkWindow *toplevel;
+	GtkWindow *parent_toplevel;*/
+
+	g_debug( "%s: editor=%p, user_data=%p", thisfn, ( void * ) editor, ( void * ) user_data );
+	g_return_if_fail( NACT_IS_ASSISTANT_IMPORT_ASK( editor ));
+}
+
+static void
+on_base_runtime_init_dialog( NactAssistantImportAsk *editor, gpointer user_data )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_on_runtime_init_dialog";
+	gchar *action_label, *exist_label;
+	gchar *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_ASSISTANT_IMPORT_ASK( editor ));
+
+	action_label = na_object_get_label( editor->private->action );
+	exist_label = na_object_get_label( editor->private->exist );
+
+	/* i18n: The action <action_label> imported from <file> has the same id than <existing_label> */
+	label = g_strdup_printf(
+			_( "The action \"%s\" imported from \"%s\" has the same identifiant than the already existing \"%s\"." ),
+			action_label, editor->private->uri, exist_label );
+
+	widget = base_window_get_widget( BASE_WINDOW( editor ), "ImportAskLabel" );
+	gtk_label_set_text( GTK_LABEL( widget ), label );
+	g_free( label );
+
+	switch( editor->private->mode ){
+		case IPREFS_IMPORT_RENUMBER:
+			button = base_window_get_widget( BASE_WINDOW( editor ), "AskRenumberButton" );
+			break;
+
+		case IPREFS_IMPORT_OVERRIDE:
+			button = base_window_get_widget( BASE_WINDOW( editor ), "AskOverrideButton" );
+			break;
+
+		case IPREFS_IMPORT_NO_IMPORT:
+		default:
+			button = base_window_get_widget( BASE_WINDOW( editor ), "AskNoImportButton" );
+			break;
+	}
+	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), TRUE );
+
+	base_window_signal_connect_by_name(
+			BASE_WINDOW( editor ),
+			"CancelButton1",
+			"clicked",
+			G_CALLBACK( on_cancel_clicked ));
+
+	base_window_signal_connect_by_name(
+			BASE_WINDOW( editor ),
+			"OKButton1",
+			"clicked",
+			G_CALLBACK( on_ok_clicked ));
+}
+
+static void
+on_base_all_widgets_showed( NactAssistantImportAsk *editor, gpointer user_data )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_on_all_widgets_showed";
+
+	g_debug( "%s: editor=%p, user_data=%p", thisfn, ( void * ) editor, ( void * ) user_data );
+	g_return_if_fail( NACT_IS_ASSISTANT_IMPORT_ASK( editor ));
+}
+
+static void
+on_cancel_clicked( GtkButton *button, NactAssistantImportAsk *editor )
+{
+	GtkWindow *toplevel = base_window_get_toplevel( BASE_WINDOW( editor ));
+
+	gtk_dialog_response( GTK_DIALOG( toplevel ), GTK_RESPONSE_CLOSE );
+}
+
+static void
+on_ok_clicked( GtkButton *button, NactAssistantImportAsk *editor )
+{
+	GtkWindow *toplevel = base_window_get_toplevel( BASE_WINDOW( editor ));
+
+	gtk_dialog_response( GTK_DIALOG( toplevel ), GTK_RESPONSE_OK );
+}
+
+static void
+get_mode( NactAssistantImportAsk *editor )
+{
+	gint import_mode;
+	GtkWidget *button;
+
+	import_mode = IPREFS_IMPORT_NO_IMPORT;
+	button = base_window_get_widget( BASE_WINDOW( editor ), "AskRenumberButton" );
+	if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
+		import_mode = IPREFS_IMPORT_RENUMBER;
+	} else {
+		button = base_window_get_widget( BASE_WINDOW( editor ), "AskOverrideButton" );
+		if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
+			import_mode = IPREFS_IMPORT_OVERRIDE;
+		}
+	}
+
+	editor->private->mode = import_mode;
+}
+
+static gboolean
+base_dialog_response( GtkDialog *dialog, gint code, BaseWindow *window )
+{
+	static const gchar *thisfn = "nact_assistant_import_ask_on_dialog_response";
+	NactAssistantImportAsk *editor;
+
+	g_debug( "%s: dialog=%p, code=%d, window=%p", thisfn, ( void * ) dialog, code, ( void * ) window );
+	g_assert( NACT_IS_ASSISTANT_IMPORT_ASK( window ));
+	editor = NACT_ASSISTANT_IMPORT_ASK( window );
+
+	switch( code ){
+		case GTK_RESPONSE_NONE:
+		case GTK_RESPONSE_DELETE_EVENT:
+		case GTK_RESPONSE_CLOSE:
+		case GTK_RESPONSE_CANCEL:
+
+			return( TRUE );
+			break;
+
+		case GTK_RESPONSE_OK:
+			get_mode( editor );
+			return( TRUE );
+			break;
+	}
+
+	return( FALSE );
+}
diff --git a/src/nact/nact-assistant-import-ask.h b/src/nact/nact-assistant-import-ask.h
new file mode 100644
index 0000000..70d3152
--- /dev/null
+++ b/src/nact/nact-assistant-import-ask.h
@@ -0,0 +1,81 @@
+/*
+ * Nautilus Actions
+ * A Nautilus extension which offers configurable context menu actions.
+ *
+ * Copyright (C) 2005 The GNOME Foundation
+ * Copyright (C) 2006, 2007, 2008 Frederic Ruaudel and others (see AUTHORS)
+ * Copyright (C) 2009 Pierre Wieser and others (see AUTHORS)
+ *
+ * This Program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this Library; see the file COPYING.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place,
+ * Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ *   Frederic Ruaudel <grumz grumz net>
+ *   Rodrigo Moya <rodrigo gnome-db org>
+ *   Pierre Wieser <pwieser trychlos org>
+ *   ... and many others (see AUTHORS)
+ */
+
+#ifndef __NACT_ASSISTANT_IMPORT_ASK_H__
+#define __NACT_ASSISTANT_IMPORT_ASK_H__
+
+/**
+ * SECTION: nact_assistant_import_ask
+ * @short_description: #NactAssistantImportAsk class definition.
+ * @include: nact/nact-assistant-import-ask.h
+ *
+ * This class is derived from BaseDialog.
+ * It is ran each time an imported action as the same UUID as an
+ * existing one, and the user want to be ask to known what to do
+ * with it.
+ */
+
+#include <runtime/na-object-action-class.h>
+
+#include "base-dialog.h"
+#include "nact-main-window.h"
+
+G_BEGIN_DECLS
+
+#define NACT_ASSISTANT_IMPORT_ASK_TYPE					( nact_assistant_import_ask_get_type())
+#define NACT_ASSISTANT_IMPORT_ASK( object )				( G_TYPE_CHECK_INSTANCE_CAST( object, NACT_ASSISTANT_IMPORT_ASK_TYPE, NactAssistantImportAsk ))
+#define NACT_ASSISTANT_IMPORT_ASK_CLASS( klass )		( G_TYPE_CHECK_CLASS_CAST( klass, NACT_ASSISTANT_IMPORT_ASK_TYPE, NactAssistantImportAskClass ))
+#define NACT_IS_ASSISTANT_IMPORT_ASK( object )			( G_TYPE_CHECK_INSTANCE_TYPE( object, NACT_ASSISTANT_IMPORT_ASK_TYPE ))
+#define NACT_IS_ASSISTANT_IMPORT_ASK_CLASS( klass )		( G_TYPE_CHECK_CLASS_TYPE(( klass ), NACT_ASSISTANT_IMPORT_ASK_TYPE ))
+#define NACT_ASSISTANT_IMPORT_ASK_GET_CLASS( object )	( G_TYPE_INSTANCE_GET_CLASS(( object ), NACT_ASSISTANT_IMPORT_ASK_TYPE, NactAssistantImportAskClass ))
+
+typedef struct NactAssistantImportAskPrivate NactAssistantImportAskPrivate;
+
+typedef struct {
+	BaseDialog                     parent;
+	NactAssistantImportAskPrivate *private;
+}
+	NactAssistantImportAsk;
+
+typedef struct NactAssistantImportAskClassPrivate NactAssistantImportAskClassPrivate;
+
+typedef struct {
+	BaseDialogClass                     parent;
+	NactAssistantImportAskClassPrivate *private;
+}
+	NactAssistantImportAskClass;
+
+GType nact_assistant_import_ask_get_type( void );
+
+gint  nact_assistant_import_ask_user( NactMainWindow *window, const gchar *uri, NAObjectAction *new_action, NAObjectItem *current );
+
+G_END_DECLS
+
+#endif /* __NACT_ASSISTANT_IMPORT_ASK_H__ */
diff --git a/src/nact/nact-assistant-import.c b/src/nact/nact-assistant-import.c
index ce056b5..b9ef08a 100644
--- a/src/nact/nact-assistant-import.c
+++ b/src/nact/nact-assistant-import.c
@@ -476,17 +476,22 @@ set_import_mode( NactAssistantImport *window, gint mode )
 	GtkToggleButton *button;
 
 	switch( mode ){
-		case RENUMBER_MODE:
+		case IPREFS_IMPORT_ASK:
+			button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "AskButton" ));
+			gtk_toggle_button_set_active( button, TRUE );
+			break;
+
+		case IPREFS_IMPORT_RENUMBER:
 			button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "RenumberButton" ));
 			gtk_toggle_button_set_active( button, TRUE );
 			break;
 
-		case OVERRIDE_MODE:
+		case IPREFS_IMPORT_OVERRIDE:
 			button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "OverrideButton" ));
 			gtk_toggle_button_set_active( button, TRUE );
 			break;
 
-		case NO_IMPORT_MODE:
+		case IPREFS_IMPORT_NO_IMPORT:
 		default:
 			button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "NoImportButton" ));
 			gtk_toggle_button_set_active( button, TRUE );
@@ -561,19 +566,23 @@ get_import_mode( NactAssistantImport *window )
 	GtkToggleButton *no_import_button;
 	GtkToggleButton *renumber_button;
 	GtkToggleButton *override_button;
+	GtkToggleButton *ask_button;
 	gint mode;
 
 	no_import_button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "NoImportButton" ));
 	renumber_button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "RenumberButton" ));
 	override_button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "OverrideButton" ));
+	ask_button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "AskButton" ));
 
 	if( gtk_toggle_button_get_active( no_import_button )){
-		mode = NO_IMPORT_MODE;
+		mode = IPREFS_IMPORT_NO_IMPORT;
 	} else if( gtk_toggle_button_get_active( renumber_button )){
-		mode = RENUMBER_MODE;
+		mode = IPREFS_IMPORT_RENUMBER;
+	} else if( gtk_toggle_button_get_active( override_button )){
+		mode = IPREFS_IMPORT_OVERRIDE;
 	} else {
-		g_return_val_if_fail( gtk_toggle_button_get_active( override_button ), 0 );
-		mode = OVERRIDE_MODE;
+		g_return_val_if_fail( gtk_toggle_button_get_active( ask_button ), 0 );
+		mode = IPREFS_IMPORT_ASK;
 	}
 
 	return( mode );
@@ -592,21 +601,26 @@ add_import_mode( NactAssistantImport *window, const gchar *text )
 	result = NULL;
 
 	switch( mode ){
-		case NO_IMPORT_MODE:
+		case IPREFS_IMPORT_NO_IMPORT:
 			label1 = g_strdup( gtk_button_get_label( GTK_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "NoImportButton" ))));
 			label2 = g_strdup( gtk_label_get_text( GTK_LABEL( base_window_get_widget( BASE_WINDOW( window ), "NoImportLabel"))));
 			break;
 
-		case RENUMBER_MODE:
+		case IPREFS_IMPORT_RENUMBER:
 			label1 = g_strdup( gtk_button_get_label( GTK_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "RenumberButton" ))));
 			label2 = g_strdup( gtk_label_get_text( GTK_LABEL( base_window_get_widget( BASE_WINDOW( window ), "RenumberLabel"))));
 			break;
 
-		case OVERRIDE_MODE:
+		case IPREFS_IMPORT_OVERRIDE:
 			label1 = g_strdup( gtk_button_get_label( GTK_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "OverrideButton" ))));
 			label2 = g_strdup( gtk_label_get_text( GTK_LABEL( base_window_get_widget( BASE_WINDOW( window ), "OverrideLabel"))));
 			break;
 
+		case IPREFS_IMPORT_ASK:
+			label1 = g_strdup( gtk_button_get_label( GTK_BUTTON( base_window_get_widget( BASE_WINDOW( window ), "AskButton" ))));
+			label2 = g_strdup( gtk_label_get_text( GTK_LABEL( base_window_get_widget( BASE_WINDOW( window ), "AskLabel"))));
+			break;
+
 		default:
 			break;
 	}
@@ -659,9 +673,11 @@ assistant_apply( BaseAssistant *wnd, GtkAssistant *assistant )
 
 		window->private->results = g_slist_prepend( window->private->results, str );
 
-		items = g_list_prepend( NULL, action );
-		nact_iactions_list_insert_items( NACT_IACTIONS_LIST( mainwnd ), items, NULL );
-		na_object_free_items_list( items );
+		if( action ){
+			items = g_list_prepend( NULL, action );
+			nact_iactions_list_insert_items( NACT_IACTIONS_LIST( mainwnd ), items, NULL );
+			na_object_free_items_list( items );
+		}
 	}
 
 	na_utils_free_string_list( uris );
diff --git a/src/nact/nact-main-window.c b/src/nact/nact-main-window.c
index 5a7313d..99ab361 100644
--- a/src/nact/nact-main-window.c
+++ b/src/nact/nact-main-window.c
@@ -641,43 +641,60 @@ nact_main_window_new( BaseApplication *application )
 }
 
 /**
- * nact_main_window_action_exists:
+ * nact_main_window_get_clipboard:
+ * @window: this #NactMainWindow instance.
+ *
+ * Returns: the #nactClipboard convenience object.
+ */
+NactClipboard *
+nact_main_window_get_clipboard( const NactMainWindow *window )
+{
+	NactClipboard *clipboard = NULL;
+
+	g_return_val_if_fail( NACT_IS_MAIN_WINDOW( window ), NULL );
+
+	if( !window->private->dispose_has_run ){
+		clipboard = window->private->clipboard;
+	}
+
+	return( clipboard );
+}
+
+/**
+ * nact_main_window_get_item:
  * @window: this #NactMainWindow instance.
  * @uuid: the uuid to check for existancy.
  *
- * Returns: %TRUE if the specified action already exists in the system,
- * %FALSE else.
+ * Returns: a pointer to the #NAObjectItem if it exists in the current
+ * tree, or %NULL else.
  *
  * Do not check in NAPivot: actions which are not displayed in the user
  * interface are not considered as existing.
+ *
+ * Also note that the returned object may be an action, but also a menu.
  */
-gboolean
-nact_main_window_action_exists( const NactMainWindow *window, const gchar *uuid )
+NAObjectItem *
+nact_main_window_get_item( const NactMainWindow *window, const gchar *uuid )
 {
-	gboolean exists = FALSE;
+	NAObjectItem *exists;
 	NactApplication *application;
 	NAPivot *pivot;
-	NAObject *action;
 
 	g_return_val_if_fail( NACT_IS_MAIN_WINDOW( window ), FALSE );
 
+	exists = NULL;
+
 	if( !window->private->dispose_has_run ){
 
 		/* leave here this dead code, in case I change of opinion later */
-		if( FALSE ){
+		if( 0 ){
 			application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
 			pivot = nact_application_get_pivot( application );
-			action = na_pivot_get_item( pivot, uuid );
-			if( action ){
-				exists = TRUE;
-			}
+			exists = NA_OBJECT_ITEM( na_pivot_get_item( pivot, uuid ));
 		}
 
 		if( !exists ){
-			action = nact_iactions_list_get_item( NACT_IACTIONS_LIST( window ), uuid );
-			if( action ){
-				exists = TRUE;
-			}
+			exists = NA_OBJECT_ITEM( nact_iactions_list_get_item( NACT_IACTIONS_LIST( window ), uuid ));
 		}
 	}
 
@@ -685,26 +702,6 @@ nact_main_window_action_exists( const NactMainWindow *window, const gchar *uuid
 }
 
 /**
- * nact_main_window_get_clipboard:
- * @window: this #NactMainWindow instance.
- *
- * Returns: the #nactClipboard convenience object.
- */
-NactClipboard *
-nact_main_window_get_clipboard( const NactMainWindow *window )
-{
-	NactClipboard *clipboard = NULL;
-
-	g_return_val_if_fail( NACT_IS_MAIN_WINDOW( window ), NULL );
-
-	if( !window->private->dispose_has_run ){
-		clipboard = window->private->clipboard;
-	}
-
-	return( clipboard );
-}
-
-/**
  * nact_main_window_has_modified_items:
  * @window: this #NactMainWindow instance.
  *
diff --git a/src/nact/nact-main-window.h b/src/nact/nact-main-window.h
index b24b996..687e9e0 100644
--- a/src/nact/nact-main-window.h
+++ b/src/nact/nact-main-window.h
@@ -76,8 +76,8 @@ GType           nact_main_window_get_type( void );
 
 NactMainWindow *nact_main_window_new( BaseApplication *application );
 
-gboolean        nact_main_window_action_exists( const NactMainWindow *window, const gchar *uuid );
 NactClipboard  *nact_main_window_get_clipboard( const NactMainWindow *window );
+NAObjectItem   *nact_main_window_get_item( const NactMainWindow *window, const gchar *uuid );
 gboolean        nact_main_window_has_modified_items( const NactMainWindow *window );
 void            nact_main_window_move_to_deleted( NactMainWindow *window, GList *items );
 void            nact_main_window_reload( NactMainWindow *window );
diff --git a/src/nact/nact-preferences-editor.c b/src/nact/nact-preferences-editor.c
index 0ae4c81..5a0dc9e 100644
--- a/src/nact/nact-preferences-editor.c
+++ b/src/nact/nact-preferences-editor.c
@@ -324,8 +324,8 @@ on_base_runtime_init_dialog( NactPreferencesEditor *editor, gpointer user_data )
 	 */
 	import_mode = na_iprefs_get_import_mode( NA_IPREFS( pivot ));
 	switch( import_mode ){
-		case IPREFS_IMPORT_NO_IMPORT:
-			button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsNoImportButton" );
+		case IPREFS_IMPORT_ASK:
+			button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsAskButton" );
 			break;
 
 		case IPREFS_IMPORT_RENUMBER:
@@ -333,9 +333,13 @@ on_base_runtime_init_dialog( NactPreferencesEditor *editor, gpointer user_data )
 			break;
 
 		case IPREFS_IMPORT_OVERRIDE:
-		default:
 			button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsOverrideButton" );
 			break;
+
+		case IPREFS_IMPORT_NO_IMPORT:
+		default:
+			button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsNoImportButton" );
+			break;
 	}
 	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), TRUE );
 
@@ -433,17 +437,17 @@ save_preferences( NactPreferencesEditor *editor )
 	/* third tab: tools preferences
 	 */
 	import_mode = IPREFS_IMPORT_NO_IMPORT;
-	button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsNoImportButton" );
+	button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsRenumberButton" );
 	if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
-		import_mode = IPREFS_IMPORT_NO_IMPORT;
+		import_mode = IPREFS_IMPORT_RENUMBER;
 	} else {
-		button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsRenumberButton" );
+		button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsOverrideButton" );
 		if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
-			import_mode = IPREFS_IMPORT_RENUMBER;
+			import_mode = IPREFS_IMPORT_OVERRIDE;
 		} else {
-			button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsOverrideButton" );
+			button = base_window_get_widget( BASE_WINDOW( editor ), "PrefsAskButton" );
 			if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ))){
-				import_mode = IPREFS_IMPORT_OVERRIDE;
+				import_mode = IPREFS_IMPORT_ASK;
 			}
 		}
 	}
diff --git a/src/nact/nautilus-actions-config-tool.ui b/src/nact/nautilus-actions-config-tool.ui
index 8f74027..4170d52 100644
--- a/src/nact/nautilus-actions-config-tool.ui
+++ b/src/nact/nautilus-actions-config-tool.ui
@@ -1017,9 +1017,9 @@ Defining several profiles lets you have several commands, each applying with a d
           <object class="GtkFileChooserWidget" id="ImportFileChooser">
             <property name="visible">True</property>
             <property name="preview_widget_active">False</property>
-            <property name="local_only">False</property>
-            <property name="use_preview_label">False</property>
             <property name="select_multiple">True</property>
+            <property name="use_preview_label">False</property>
+            <property name="local_only">False</property>
           </object>
           <packing>
             <property name="position">0</property>
@@ -1165,7 +1165,7 @@ The existing action will not be modified.</property>
                             <property name="xalign">0</property>
                             <property name="xpad">16</property>
                             <property name="label" translatable="yes">The action found in the selected file will silently override the current action which has the same identifiant.
-Be warned: you will not be prompted another time. This mode may be dangerous.</property>
+Be warned: this mode may be dangerous. You will not be prompted another time.</property>
                             <property name="wrap">True</property>
                           </object>
                           <packing>
@@ -1183,6 +1183,49 @@ Be warned: you will not be prompted another time. This mode may be dangerous.</p
                     <property name="position">2</property>
                   </packing>
                 </child>
+                <child>
+                  <object class="GtkVBox" id="vbox36">
+                    <property name="visible">True</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkRadioButton" id="AskButton">
+                        <property name="label" translatable="yes">Ask me</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="draw_indicator">True</property>
+                        <property name="group">NoImportButton</property>
+                      </object>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkHBox" id="hbox8">
+                        <property name="visible">True</property>
+                        <child>
+                          <object class="GtkLabel" id="AskLabel">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="xpad">16</property>
+                            <property name="label" translatable="yes">You will be asked each time an imported UUID already exists.</property>
+                            <property name="wrap">True</property>
+                          </object>
+                          <packing>
+                            <property name="padding">4</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
               </object>
               <packing>
                 <property name="position">1</property>
@@ -1947,7 +1990,7 @@ If there is no root submenu, a 'Nautilus Actions' one is created.</property>
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">False</property>
                                     <property name="tooltip_text" translatable="yes">The imported action will silently override the current action which has the same identifiant.
-Be warned: you will not be prompted another time. This mode may be dangerous.	</property>
+Be warned: this mode may be dangerous. You will not be prompted another time.</property>
                                     <property name="use_underline">True</property>
                                     <property name="draw_indicator">True</property>
                                     <property name="group">PrefsNoImportButton</property>
@@ -1956,6 +1999,20 @@ Be warned: you will not be prompted another time. This mode may be dangerous.	</
                                     <property name="position">2</property>
                                   </packing>
                                 </child>
+                                <child>
+                                  <object class="GtkRadioButton" id="PrefsAskButton">
+                                    <property name="label" translatable="yes">_Ask me.</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="draw_indicator">True</property>
+                                    <property name="group">PrefsNoImportButton</property>
+                                  </object>
+                                  <packing>
+                                    <property name="position">3</property>
+                                  </packing>
+                                </child>
                               </object>
                             </child>
                           </object>
@@ -2046,18 +2103,172 @@ Be warned: you will not be prompted another time. This mode may be dangerous.	</
       <action-widget response="0">OKButton</action-widget>
     </action-widgets>
   </object>
+  <object class="GtkDialog" id="AssistantImportAsk">
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Already existing action</property>
+    <property name="modal">True</property>
+    <property name="type_hint">normal</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox2">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox37">
+            <property name="visible">True</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkVBox" id="vbox39">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkLabel" id="ImportAskLabel">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="xpad">6</property>
+                    <property name="wrap">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label47">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="xpad">6</property>
+                    <property name="label" translatable="yes">What should I do with this ?</property>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="vbox38">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkRadioButton" id="AskNoImportButton">
+                    <property name="label" translatable="yes">Do _not import the action</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="tooltip_text" translatable="yes">Existing action will remain unchanged.</property>
+                    <property name="use_underline">True</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="AskRenumberButton">
+                    <property name="label" translatable="yes">Import the action, _renumbering it</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="tooltip_text" translatable="yes">Existing action will remain unchanged.</property>
+                    <property name="use_underline">True</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">AskNoImportButton</property>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="AskOverrideButton">
+                    <property name="label" translatable="yes">_Override the existing action</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="tooltip_text" translatable="yes">The imported action will override the existing one.
+Be warned: this mode may be dangerous. You will not be prompted another time.</property>
+                    <property name="use_underline">True</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">AskNoImportButton</property>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area2">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="CancelButton1">
+                <property name="label" translatable="yes">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="OKButton1">
+                <property name="label" translatable="yes">gtk-ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">CancelButton1</action-widget>
+      <action-widget response="0">OKButton1</action-widget>
+    </action-widgets>
+  </object>
   <object class="GtkSizeGroup" id="CommandLabelSizeGroup">
     <widgets>
-      <widget name="CommandExamplePreLabel"/>
-      <widget name="CommandParametersLabel"/>
-      <widget name="CommandPathLabel"/>
       <widget name="ProfileLabelLabel"/>
+      <widget name="CommandPathLabel"/>
+      <widget name="CommandParametersLabel"/>
+      <widget name="CommandExamplePreLabel"/>
     </widgets>
   </object>
   <object class="GtkSizeGroup" id="CommandButtonSizeGroup">
     <widgets>
-      <widget name="CommandLegendButton"/>
       <widget name="CommandPathButton"/>
+      <widget name="CommandLegendButton"/>
     </widgets>
   </object>
 </interface>



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