[nautilus-actions] Cut/copy/paste actions
- From: Pierre Wieser <pwieser src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nautilus-actions] Cut/copy/paste actions
- Date: Sat, 26 Sep 2009 22:47:20 +0000 (UTC)
commit 18219f999fb6b02e5af5732919f60964bbc132d1
Author: Pierre Wieser <pwieser trychlos org>
Date: Fri Sep 18 21:29:09 2009 +0200
Cut/copy/paste actions
ChangeLog | 55 +++++
src/common/na-gconf-utils.c | 36 +++
src/common/na-iduplicable.h | 14 ++
src/common/na-obj-action.c | 10 +-
src/common/na-obj-menu.c | 1 +
src/common/na-obj-profile.c | 1 +
src/common/na-object-api.h | 3 +-
src/common/na-object-class.h | 11 +
src/common/na-object-fn.h | 1 +
src/common/na-object-id.c | 1 +
src/common/na-object-item.c | 12 +-
src/common/na-object.c | 62 ++++++-
src/nact/Makefile.am | 1 +
src/nact/base-assistant.c | 24 ++-
src/nact/nact-assistant-export.ui | 310 +++++++++++++++++++++++++++
src/nact/nact-clipboard.c | 24 ++-
src/nact/nact-iactions-list.c | 208 ++++++++++---------
src/nact/nact-iactions-list.h | 2 +-
src/nact/nact-main-menubar.c | 13 +-
src/nact/nact-main-window.c | 2 +
src/nact/nact-tree-model.c | 153 +++++++++-----
src/nact/nact-tree-model.h | 3 +-
src/nact/nact-window.c | 60 ++++--
src/nact/nact-window.h | 3 +-
src/nact/nautilus-actions-config-tool.ui | 345 ++----------------------------
25 files changed, 833 insertions(+), 522 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 27816c2..63e218f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,58 @@
+2009-09-18 Pierre Wieser <pwieser trychlos org>
+
+ * src/common/na-gconf-utils.c:
+ Add validity checks on public functions.
+ sync_gconf: New function.
+
+ * src/common/na-iduplicable.c:
+ * src/common/na-iduplicable.h:
+ Create new interface API get_childs() to let implementors recurse
+ into childs if any.
+
+ * src/common/na-object.c:
+ * src/common/na-object-class.h(get_childs): New virtual function.
+ Converts the interface API into a class virtual function.
+
+ * src/common/na-obj-action.c:
+ * src/common/na-obj-menu.c:
+ * src/common/na-obj-profile.c:
+ * src/common/na-object-id.c:
+ Do not implement get_childs() NAObject virtual function.
+
+ * src/common/na-object-item.c:
+ Implements get_childs() virtual function.
+ Use na_object_iduplicable_are_equal() instead of obsoleted public
+ na_object_are_equal() API.
+
+ * src/common/na-obj-action.c (is_valid):
+ Adds a check on profile existance.
+
+ * src/common/na-object.c:
+ * src/common/na-object-api.h (na_object_set_origin_rec):
+ * src/common/na-object-fn.h (na_object_iduplicable_set_origin_recurse):
+ New API. Let caller recursively set an origin on objects.
+
+ * src/nact/base-assistant.c:
+ Move GtkBuilder to private data structure to be able to unref it.
+
+ * src/nact/nact-clipboard.c:
+ * src/nact/nact-iactions-list.c:
+ * src/nact/nact-tree-model.c: Fix cut/copy/paste functions.
+ nact_tree_model_update_parent(): removed function.
+
+ * src/nact/nact-main-menubar.c (on_new_profile_activated): Fixed.
+
+ * src/nact/nact-window.c:
+ * src/nact/nact-window.h (nact_window_count_level_zero_items):
+ New function.
+
+ * src/nact/nact-assistant-export.ui: New file (see #579345).
+
+ * src/nact/nautilus-actions-config-tool.ui:
+ Renumber items (see #579345).
+
+ * src/nact/Makefile.am: Updated accordingly.
+
2009-09-17 Pierre Wieser <pwieser trychlos org>
* src/common/na-iio-provider.c
diff --git a/src/common/na-gconf-utils.c b/src/common/na-gconf-utils.c
index 0befb23..e3ac361 100644
--- a/src/common/na-gconf-utils.c
+++ b/src/common/na-gconf-utils.c
@@ -37,6 +37,8 @@
#include "na-utils.h"
#include "na-gconf-utils.h"
+static gboolean sync_gconf( GConfClient *gconf, gchar **message );
+
/*
* load the keys which are the subdirs of the given path
* returns a list of keys as full path
@@ -262,6 +264,8 @@ na_gconf_utils_read_bool( GConfClient *gconf, const gchar *path, gboolean use_sc
GConfValue *value = NULL;
gboolean ret;
+ g_return_val_if_fail( GCONF_IS_CLIENT( gconf ), FALSE );
+
ret = default_value;
if( use_schema ){
@@ -299,6 +303,8 @@ na_gconf_utils_read_string_list( GConfClient *gconf, const gchar *path )
GError *error = NULL;
GSList *list_strings;
+ g_return_val_if_fail( GCONF_IS_CLIENT( gconf ), NULL );
+
list_strings = gconf_client_get_list( gconf, path, GCONF_VALUE_STRING, &error );
if( error ){
@@ -317,6 +323,8 @@ na_gconf_utils_write_bool( GConfClient *gconf, const gchar *path, gboolean value
gboolean ret = TRUE;
GError *error = NULL;
+ g_return_val_if_fail( GCONF_IS_CLIENT( gconf ), FALSE );
+
if( !gconf_client_set_bool( gconf, path, value, &error )){
if( message ){
*message = g_strdup( error->message );
@@ -336,6 +344,8 @@ na_gconf_utils_write_string( GConfClient *gconf, const gchar *path, const gchar
gboolean ret = TRUE;
GError *error = NULL;
+ g_return_val_if_fail( GCONF_IS_CLIENT( gconf ), FALSE );
+
if( !gconf_client_set_string( gconf, path, value, &error )){
if( message ){
*message = g_strdup( error->message );
@@ -355,6 +365,8 @@ na_gconf_utils_write_string_list( GConfClient *gconf, const gchar *path, GSList
gboolean ret = TRUE;
GError *error = NULL;
+ g_return_val_if_fail( GCONF_IS_CLIENT( gconf ), FALSE );
+
if( !gconf_client_set_list( gconf, path, GCONF_VALUE_STRING, value, &error )){
if( message ){
*message = g_strdup( error->message );
@@ -364,5 +376,29 @@ na_gconf_utils_write_string_list( GConfClient *gconf, const gchar *path, GSList
ret = FALSE;
}
+ if( ret ){
+ ret = sync_gconf( gconf, message );
+ }
+
+ return( ret );
+}
+
+static gboolean
+sync_gconf( GConfClient *gconf, gchar **message )
+{
+ static const gchar *thisfn = "na_gconf_utils_sync_gconf";
+ gboolean ret = TRUE;
+ GError *error = NULL;
+
+ gconf_client_suggest_sync( gconf, &error );
+ if( error ){
+ if( message ){
+ *message = g_strdup( error->message );
+ }
+ g_warning( "%s: error=%s", thisfn, error->message );
+ g_error_free( error );
+ ret = FALSE;
+ }
+
return( ret );
}
diff --git a/src/common/na-iduplicable.h b/src/common/na-iduplicable.h
index 76fe5e7..ea638f5 100644
--- a/src/common/na-iduplicable.h
+++ b/src/common/na-iduplicable.h
@@ -44,6 +44,20 @@
* As the reference count of the original object is not incremented
* here, the caller has to garantee itself that the original object
* will stay in life at least as long as the duplicated one.
+ *
+ * Modification status in Nautilus-Actions configuration tool.
+ *
+ * - Objects whose origin is NULL are considered as modified ; this is
+ * in particular the case of new, pasted, imported and dropped
+ * objects.
+ *
+ * - when a new object, whether is is really new or it has been pasted,
+ * imported or dropped, is inserted somewhere in the tree, its
+ * immediate parent is also marked as modified.
+ *
+ * - Check for edition status, which positions modification and validity
+ * status, is not recursive ; it is the responsability of the
+ * implementation to check for edition status of childs of object..
*/
#include <glib-object.h>
diff --git a/src/common/na-obj-action.c b/src/common/na-obj-action.c
index 5f59982..937a626 100644
--- a/src/common/na-obj-action.c
+++ b/src/common/na-obj-action.c
@@ -164,6 +164,7 @@ class_init( NAObjectActionClass *klass )
naobject_class->copy = object_copy;
naobject_class->are_equal = object_are_equal;
naobject_class->is_valid = object_is_valid;
+ naobject_class->get_childs = NULL;
}
static void
@@ -570,7 +571,10 @@ object_are_equal( const NAObject *a, const NAObject *b )
/*
* a valid NAObjectAction requires a not null, not empty label
- * this is checked here as NAObject doesn't have this condition
+ * this is checked here as NAObjectId doesn't have this condition
+ *
+ * and at least one profile
+ * checked here because NAObjectItem doesn't have this condition
*/
gboolean
object_is_valid( const NAObject *action )
@@ -587,5 +591,9 @@ object_is_valid( const NAObject *action )
g_free( label );
}
+ if( is_valid ){
+ is_valid = ( na_object_get_items_count( action ) >= 1 );
+ }
+
return( is_valid );
}
diff --git a/src/common/na-obj-menu.c b/src/common/na-obj-menu.c
index 07df11b..792de58 100644
--- a/src/common/na-obj-menu.c
+++ b/src/common/na-obj-menu.c
@@ -126,6 +126,7 @@ class_init( NAObjectMenuClass *klass )
NA_OBJECT_CLASS( klass )->copy = object_copy;
NA_OBJECT_CLASS( klass )->are_equal = object_are_equal;
NA_OBJECT_CLASS( klass )->is_valid = object_is_valid;
+ NA_OBJECT_CLASS( klass )->get_childs = NULL;
}
static void
diff --git a/src/common/na-obj-profile.c b/src/common/na-obj-profile.c
index 214fd68..14640ae 100644
--- a/src/common/na-obj-profile.c
+++ b/src/common/na-obj-profile.c
@@ -246,6 +246,7 @@ class_init( NAObjectProfileClass *klass )
NA_OBJECT_CLASS( klass )->copy = object_copy;
NA_OBJECT_CLASS( klass )->are_equal = object_are_equal;
NA_OBJECT_CLASS( klass )->is_valid = object_is_valid;
+ NA_OBJECT_CLASS( klass )->get_childs = NULL;
}
static void
diff --git a/src/common/na-object-api.h b/src/common/na-object-api.h
index 9eab881..9a20125 100644
--- a/src/common/na-object-api.h
+++ b/src/common/na-object-api.h
@@ -53,14 +53,13 @@ G_BEGIN_DECLS
/* NAIDuplicable
*/
#define na_object_duplicate( object ) na_object_iduplicable_duplicate( NA_OBJECT( object ))
-
#define na_object_check_edition_status( object ) na_object_iduplicable_check_edition_status( NA_OBJECT( object ))
-#define na_object_are_equal( a, b ) na_object_iduplicable_are_equal( NA_OBJECT( a ), NA_OBJECT( b ))
#define na_object_is_modified( object ) na_object_iduplicable_is_modified( NA_OBJECT( object ))
#define na_object_is_valid( object ) na_object_iduplicable_is_valid( NA_OBJECT( object ))
#define na_object_get_origin( object ) na_object_iduplicable_get_origin( NA_OBJECT( object ))
#define na_object_set_origin( object, origin ) na_object_iduplicable_set_origin( NA_OBJECT( object ), NA_OBJECT( origin ))
+#define na_object_set_origin_rec( object, origin ) na_object_iduplicable_set_origin_recurse( NA_OBJECT( object ), NA_OBJECT( origin ))
/* NAObjectId
*/
diff --git a/src/common/na-object-class.h b/src/common/na-object-class.h
index 78a48ee..e0abe1f 100644
--- a/src/common/na-object-class.h
+++ b/src/common/na-object-class.h
@@ -178,6 +178,17 @@ typedef struct {
*/
gboolean ( *is_valid ) ( const NAObject *object );
+ /**
+ * get_childs:
+ * @object: the #NAObject object whose childs are to be retrieved.
+ *
+ * Returns: a list of childs of @object, or NULL.
+ *
+ * As the returned list will not be freed by the caller, the
+ * implementation should really returns its own list of childs,
+ * if any.
+ */
+ GList * ( *get_childs ) ( const NAObject *object );
}
NAObjectClass;
diff --git a/src/common/na-object-fn.h b/src/common/na-object-fn.h
index b34f390..fd3d580 100644
--- a/src/common/na-object-fn.h
+++ b/src/common/na-object-fn.h
@@ -67,6 +67,7 @@ gboolean na_object_iduplicable_is_valid( const NAObject *object );
NAObject *na_object_iduplicable_get_origin( const NAObject *object );
void na_object_iduplicable_set_origin( NAObject *object, const NAObject *origin );
+void na_object_iduplicable_set_origin_recurse( NAObject *object, const NAObject *origin );
G_END_DECLS
diff --git a/src/common/na-object-id.c b/src/common/na-object-id.c
index 06a677b..5793ffe 100644
--- a/src/common/na-object-id.c
+++ b/src/common/na-object-id.c
@@ -161,6 +161,7 @@ class_init( NAObjectIdClass *klass )
naobject_class->copy = object_copy;
naobject_class->are_equal = object_are_equal;
naobject_class->is_valid = object_is_valid;
+ naobject_class->get_childs = NULL;
klass->new_id = NULL;
}
diff --git a/src/common/na-object-item.c b/src/common/na-object-item.c
index 2a0cd4b..f474150 100644
--- a/src/common/na-object-item.c
+++ b/src/common/na-object-item.c
@@ -98,6 +98,7 @@ static void object_ref( const NAObject *action );
static void object_copy( NAObject *target, const NAObject *source );
static gboolean object_are_equal( const NAObject *a, const NAObject *b );
static gboolean object_is_valid( const NAObject *object );
+static GList *object_get_childs( const NAObject *object );
static gchar *object_id_new_id( const NAObjectId *object );
@@ -192,6 +193,7 @@ class_init( NAObjectItemClass *klass )
naobject_class->copy = object_copy;
naobject_class->are_equal = object_are_equal;
naobject_class->is_valid = object_is_valid;
+ naobject_class->get_childs = object_get_childs;
objectid_class = NA_OBJECT_ID_CLASS( klass );
objectid_class->new_id = object_id_new_id;
@@ -878,7 +880,7 @@ object_are_equal( const NAObject *a, const NAObject *b )
second_obj = NA_OBJECT( na_object_get_item( b, first_id ));
g_free( first_id );
if( second_obj ){
- equal = na_object_are_equal( first_obj, second_obj );
+ equal = na_object_iduplicable_are_equal( first_obj, second_obj );
} else {
equal = FALSE;
}
@@ -892,7 +894,7 @@ object_are_equal( const NAObject *a, const NAObject *b )
first_obj = NA_OBJECT( na_object_get_item( a, second_id ));
g_free( second_id );
if( first_obj ){
- equal = na_object_are_equal( first_obj, second_obj );
+ equal = na_object_iduplicable_are_equal( first_obj, second_obj );
} else {
equal = FALSE;
}
@@ -924,6 +926,12 @@ object_is_valid( const NAObject *object )
return( valid );
}
+static GList *
+object_get_childs( const NAObject *object )
+{
+ return( NA_OBJECT_ITEM( object )->private->items );
+}
+
static gchar *
object_id_new_id( const NAObjectId *item )
{
diff --git a/src/common/na-object.c b/src/common/na-object.c
index 69b159d..7197c42 100644
--- a/src/common/na-object.c
+++ b/src/common/na-object.c
@@ -83,6 +83,9 @@ static gboolean do_is_valid( const NAObject *object );
static void do_copy( NAObject *target, const NAObject *source );
+static GList *v_get_childs( const NAObject *object );
+static GList *most_derived_get_childs( const NAObject *object );
+
GType
na_object_get_type( void )
{
@@ -152,6 +155,7 @@ class_init( NAObjectClass *klass )
klass->copy = do_copy;
klass->are_equal = do_are_equal;
klass->is_valid = do_is_valid;
+ klass->get_childs = NULL;
}
static void
@@ -616,7 +620,8 @@ do_is_valid( const NAObject *object )
* na_object_iduplicable_check_edition_status:
* @object: the #NAObject object to be checked.
*
- * Checks for the edition status of @object.
+ * Recursively checks for the edition status of @object and its childs
+ * (if any).
*
* Internally set some properties which may be requested later. This
* two-steps check-request let us optimize some work in the UI.
@@ -630,10 +635,17 @@ do_is_valid( const NAObject *object )
void
na_object_iduplicable_check_edition_status( const NAObject *object )
{
+ GList *childs, *ic;
+
g_return_if_fail( NA_IS_OBJECT( object ));
g_return_if_fail( !object->private->dispose_has_run );
na_iduplicable_check_edition_status( NA_IDUPLICABLE( object ));
+
+ childs = v_get_childs( object );
+ for( ic = childs ; ic ; ic = ic->next ){
+ na_iduplicable_check_edition_status( NA_IDUPLICABLE( ic->data ));
+ }
}
/**
@@ -711,3 +723,51 @@ na_object_iduplicable_set_origin( NAObject *object, const NAObject *origin )
na_iduplicable_set_origin( NA_IDUPLICABLE( object ), NA_IDUPLICABLE( origin ));
}
+
+/**
+ * na_object_iduplicable_set_origin_recurse:
+ * @object: the #NAObject object whose origin is to be set.
+ * @origin: a #NAObject which will be set as the new origin of @object.
+ *
+ * Sets the new origin of @object, and of all its childs if any.
+ */
+void
+na_object_iduplicable_set_origin_recurse( NAObject *object, const NAObject *origin )
+{
+ GList *childs, *ic;
+
+ na_object_iduplicable_set_origin( object, origin );
+
+ childs = v_get_childs( object );
+
+ for( ic = childs ; ic ; ic = ic->next ){
+ na_object_iduplicable_set_origin_recurse( NA_OBJECT( ic->data ), origin );
+ }
+}
+
+static GList *
+v_get_childs( const NAObject *object ){
+
+ return( most_derived_get_childs( object ));
+}
+
+static GList *
+most_derived_get_childs( const NAObject *object )
+{
+ GList *childs;
+ GList *hierarchy, *ih;
+ gboolean found;
+
+ found = FALSE;
+ childs = NULL;
+ hierarchy = g_list_reverse( na_object_get_hierarchy( object ));
+
+ for( ih = hierarchy ; ih && !found ; ih = ih->next ){
+ if( NA_OBJECT_CLASS( ih->data )->get_childs ){
+ childs = NA_OBJECT_CLASS( ih->data )->get_childs( object );
+ found = TRUE;
+ }
+ }
+
+ return( childs );
+}
diff --git a/src/nact/Makefile.am b/src/nact/Makefile.am
index 4a34da7..3e18f5f 100644
--- a/src/nact/Makefile.am
+++ b/src/nact/Makefile.am
@@ -96,6 +96,7 @@ nautilus_actions_config_tool_LDADD = \
pkgdata_DATA = \
nautilus-actions-config-tool.actions \
+ nact-assistant-export.ui \
nautilus-actions-config-tool.ui \
$(NULL)
diff --git a/src/nact/base-assistant.c b/src/nact/base-assistant.c
index 3ed7663..4417226 100644
--- a/src/nact/base-assistant.c
+++ b/src/nact/base-assistant.c
@@ -48,12 +48,13 @@ struct BaseAssistantClassPrivate {
/* private instance data
*/
struct BaseAssistantPrivate {
- gboolean dispose_has_run;
- gboolean cancel_on_escape;
- gboolean warn_on_escape;
- gboolean warn_on_cancel;
- gboolean apply_has_run;
- gboolean escape_key_pressed;
+ gboolean dispose_has_run;
+ GtkBuilder *builder;
+ gboolean cancel_on_escape;
+ gboolean warn_on_escape;
+ gboolean warn_on_cancel;
+ gboolean apply_has_run;
+ gboolean escape_key_pressed;
};
/* instance properties
@@ -282,6 +283,8 @@ instance_dispose( GObject *window )
self->private->dispose_has_run = TRUE;
+ g_object_unref( self->private->builder );
+
/* chain up to the parent class */
if( G_OBJECT_CLASS( st_parent_class )->dispose ){
G_OBJECT_CLASS( st_parent_class )->dispose( window );
@@ -297,7 +300,7 @@ instance_finalize( GObject *window )
g_debug( "%s: window=%p", thisfn, ( void * ) window );
g_assert( BASE_IS_ASSISTANT( window ));
- self = ( BaseAssistant * ) window;
+ self = BASE_ASSISTANT( window );
g_free( self->private );
@@ -317,22 +320,21 @@ instance_finalize( GObject *window )
static GtkWindow *
base_get_window( BaseWindow *window, const gchar *name )
{
- GtkBuilder *builder;
BaseApplication *appli;
gchar *fname;
GtkWindow *dialog;
- builder = gtk_builder_new();
+ BASE_ASSISTANT( window )->private->builder = gtk_builder_new();
appli = base_window_get_application( window );
fname = base_application_get_ui_filename( appli );
- gtk_builder_add_from_file( builder, fname, NULL );
+ gtk_builder_add_from_file( BASE_ASSISTANT( window )->private->builder, fname, NULL );
g_free( fname );
- dialog = GTK_WINDOW( gtk_builder_get_object( builder, name ));
+ dialog = GTK_WINDOW( gtk_builder_get_object( BASE_ASSISTANT( window )->private->builder, name ));
return( dialog );
}
diff --git a/src/nact/nact-assistant-export.ui b/src/nact/nact-assistant-export.ui
new file mode 100644
index 0000000..92a758f
--- /dev/null
+++ b/src/nact/nact-assistant-export.ui
@@ -0,0 +1,310 @@
+<?xml version="1.0"?>
+<interface>
+ <!-- interface-requires gtk+ 2.12 -->
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkAssistant" id="ExportAssistant">
+ <property name="events">GDK_KEY_PRESS_MASK | GDK_STRUCTURE_MASK</property>
+ <property name="border_width">12</property>
+ <property name="title" translatable="yes">Exporting actions</property>
+ <property name="modal">True</property>
+ <child>
+ <object class="GtkLabel" id="label20">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">This assistant will guide you through the process of exporting actions.</property>
+ </object>
+ <packing>
+ <property name="page_type">intro</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox7">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkVBox" id="vbox16">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="ActionsListLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">4</property>
+ <property name="ypad">4</property>
+ <property name="label" translatable="yes">Actions _list :</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="ActionsList">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="rules_hint">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Please select one or more actions
+to be exported.
+
+You may use Ctrl and Shift keys
+to extend a selection.</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="title">Selection of the exported actions</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkFileChooserWidget" id="ExportFolderChooser">
+ <property name="visible">True</property>
+ <property name="use_preview_label">False</property>
+ <property name="local_only">False</property>
+ <property name="preview_widget_active">False</property>
+ <property name="action">select-folder</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="title">Selection of the target folder</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="border_width">10</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkRadioButton" id="ExportSchemaV1Button">
+ <property name="label" translatable="yes">Export as a GConf schema file with full key descriptions.</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox4">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkRadioButton" id="ExportHide1">
+ <property name="sensitive">False</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <property name="focus_on_click">False</property>
+ <property name="draw_indicator">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">2</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="ExportSchemaV1Label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">This used to be the historical export format.
+The exported file may later be imported via :
+- Import assistant of the Nautilus Actions Configuration Tool,
+- or via the gconftool-2 --import-schema-file command-line tool.</property>
+ </object>
+ <packing>
+ <property name="padding">4</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox3">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkRadioButton" id="ExportSchemaV2Button">
+ <property name="label" translatable="yes">Export as a light GConf schema file.</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">ExportSchemaV1Button</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox5">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkRadioButton" id="ExportHide2">
+ <property name="sensitive">False</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <property name="focus_on_click">False</property>
+ <property name="draw_indicator">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">2</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="ExportSchemaV2Label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">The exported file may later be imported via :
+- Import assistant of the Nautilus Actions Configuration Tool,
+- or via the gconftool-2 --import-schema-file command-line tool.</property>
+ </object>
+ <packing>
+ <property name="padding">4</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox4">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkRadioButton" id="ExportGConfDumpButton">
+ <property name="label" translatable="yes">Export as a GConf dump file.</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">ExportSchemaV1Button</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox6">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkRadioButton" id="ExportHide3">
+ <property name="sensitive">False</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <property name="focus_on_click">False</property>
+ <property name="draw_indicator">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">2</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="ExportGConfDumpLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">This should be the preferred format for newly exported actions.
+The exported file may later be imported via :
+- Import assistant of the Nautilus Actions Configuration Tool,
+- or via the gconftool-2 --load command-line tool.</property>
+ </object>
+ <packing>
+ <property name="padding">4</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="title">Select the export format</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="page_type">confirm</property>
+ <property name="title">Summary</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="page_type">summary</property>
+ <property name="title">Export is done</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/src/nact/nact-clipboard.c b/src/nact/nact-clipboard.c
index cd78ef6..439f527 100644
--- a/src/nact/nact-clipboard.c
+++ b/src/nact/nact-clipboard.c
@@ -45,6 +45,7 @@
#include "nact-clipboard.h"
#define NACT_CLIPBOARD_ATOM gdk_atom_intern( "_NACT_CLIPBOARD", FALSE )
+#define NACT_CLIPBOARD_NACT_ATOM gdk_atom_intern( "ClipboardNautilusActions", FALSE )
#define CLIPBOARD_PROP_PRIMAY_USED "nact-clipboard-primary-used"
@@ -229,23 +230,32 @@ nact_clipboard_get( void )
GtkSelectionData *selection;
NactClipboardData *data;
GList *items, *it;
+ NAObject *obj;
if( nact_clipboard_is_empty()){
return( NULL );
}
clipboard = get_clipboard();
- selection = gtk_clipboard_wait_for_contents( clipboard, GDK_SELECTION_PRIMARY );
- data = ( NactClipboardData * ) selection->data;
items = NULL;
- for( it = data->items ; it ; it = it->next ){
- items = g_list_prepend( items, na_object_duplicate( it->data ));
- }
- renumber_items( data->items );
+ selection = gtk_clipboard_wait_for_contents( clipboard, NACT_CLIPBOARD_NACT_ATOM );
+
+ if( selection ){
+ data = ( NactClipboardData * ) selection->data;
+
+ for( it = data->items ; it ; it = it->next ){
+ obj = na_object_duplicate( it->data );
+ na_object_set_origin_rec( obj, NULL );
+ items = g_list_prepend( items, obj );
+ }
+ items = g_list_reverse( items );
+
+ renumber_items( data->items );
+ }
- return( g_list_reverse( items ));
+ return( items );
}
/**
diff --git a/src/nact/nact-iactions-list.c b/src/nact/nact-iactions-list.c
index 49af0cd..08f9d29 100644
--- a/src/nact/nact-iactions-list.c
+++ b/src/nact/nact-iactions-list.c
@@ -44,6 +44,7 @@
#include "nact-application.h"
#include "nact-main-tab.h"
#include "nact-tree-model.h"
+#include "nact-window.h"
#include "nact-iactions-list.h"
/* private interface data
@@ -99,16 +100,17 @@ static void interface_base_init( NactIActionsListInterface *klass );
static void interface_base_finalize( NactIActionsListInterface *klass );
static void free_items_callback( NactIActionsList *instance, GList *items );
+static void do_insert_items( GtkTreeView *treeview, GtkTreeModel *model, GList *items, GtkTreePath *path, gint level, GList **parents );
+static GList *do_insert_items_add_parent( GList *parents, GtkTreeView *treeview, GtkTreeModel *model, NAObject *parent );
static void display_label( GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, NactIActionsList *instance );
static void extend_selection_to_childs( NactIActionsList *instance, GtkTreeView *treeview, GtkTreeModel *model, GtkTreeIter *parent );
static gboolean filter_selection( GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, NactIActionsList *instance );
static void filter_selection_iter( GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, SelectionIter *str );
static GtkTreeView *get_actions_list_treeview( NactIActionsList *instance );
-static gboolean get_item( NactTreeModel *model, GtkTreePath *path, NAObject *object, GSList **items );
+static gboolean get_item( NactTreeModel *model, GtkTreePath *path, NAObject *object, GList **items );
static gboolean have_dnd_mode( NactIActionsList *instance );
static gboolean have_filter_selection_mode( NactIActionsList *instance );
-static void insert_item( NactIActionsList *instance, NAObject *item );
static gboolean is_modified_item( NactTreeModel *model, GtkTreePath *path, NAObject *object, GList **items );
static gboolean is_removing( NactIActionsList *instance );
static void iter_on_selection( NactIActionsList *instance, FnIterOnSelection fn_iter, gpointer user_data );
@@ -176,7 +178,7 @@ interface_base_init( NactIActionsListInterface *klass )
klass->private = g_new0( NactIActionsListInterfacePrivate, 1 );
/**
- * "nact-iactions-list-selection-changed":
+ * nact-iactions-list-selection-changed:
*
* This signal is emitted each time the selection is changed in
* the treeview.
@@ -198,7 +200,7 @@ interface_base_init( NactIActionsListInterface *klass )
G_TYPE_POINTER );
/**
- * "nact-iactions-list-item-updated":
+ * nact-iactions-list-item-updated:
*
* This signal is emitted to inform all widgets that an item
* has been updated.
@@ -483,55 +485,53 @@ nact_iactions_list_fill( NactIActionsList *instance, GList *items )
}
/**
- * nact_iactions_list_get_items_count:
+ * nact_iactions_list_get_items:
* @window: this #NactIActionsList instance.
*
- * Returns: the current count of items in the list, whether they are
- * currently visible or not.
+ * Returns: the current tree.
+ *
+ * The returned #GList content is owned by the underlying tree model,
+ * and should only be g_list_free() by the caller.
*/
-guint
-nact_iactions_list_get_items_count( NactIActionsList *instance )
+GList *
+nact_iactions_list_get_items( NactIActionsList *instance )
{
+ GList *items = NULL;
GtkTreeView *treeview;
NactTreeModel *model;
- g_return_val_if_fail( NACT_IS_IACTIONS_LIST( instance ), 0 );
+ g_return_val_if_fail( NACT_IS_IACTIONS_LIST( instance ), NULL );
treeview = get_actions_list_treeview( instance );
-
model = NACT_TREE_MODEL( gtk_tree_view_get_model( treeview ));
- g_return_val_if_fail( NACT_IS_TREE_MODEL( model ), 0 );
+ nact_tree_model_iter( model, ( FnIterOnStore ) get_item, &items );
- return( nact_tree_model_get_items_count( model ));
+ return( g_list_reverse( items ));
}
/**
- * nact_iactions_list_get_items:
+ * nact_iactions_list_get_items_count:
* @window: this #NactIActionsList instance.
*
- * Returns: the current tree.
- *
- * The returned #GSList content is owned by the underlying tree model,
- * and should only be g_slist_free() by the caller.
+ * Returns: the current count of items in the list, whether they are
+ * currently visible or not.
*/
-GSList *
-nact_iactions_list_get_items( NactIActionsList *instance )
+guint
+nact_iactions_list_get_items_count( NactIActionsList *instance )
{
- GSList *items = NULL;
GtkTreeView *treeview;
NactTreeModel *model;
- g_return_val_if_fail( NACT_IS_IACTIONS_LIST( instance ), NULL );
+ g_return_val_if_fail( NACT_IS_IACTIONS_LIST( instance ), 0 );
treeview = get_actions_list_treeview( instance );
- model = NACT_TREE_MODEL( gtk_tree_view_get_model( treeview ));
- nact_tree_model_iter( model, ( FnIterOnStore ) get_item, &items );
+ model = NACT_TREE_MODEL( gtk_tree_view_get_model( treeview ));
- /*g_debug( "nact_iactions_list_get_modified_items: count=%d", g_slist_length( items ));*/
+ g_return_val_if_fail( NACT_IS_TREE_MODEL( model ), 0 );
- return( g_slist_reverse( items ));
+ return( nact_tree_model_get_items_count( model ));
}
/**
@@ -565,14 +565,14 @@ nact_iactions_list_get_modified_items( NactIActionsList *instance )
* nact_iactions_list_get_selected_items:
* @window: this #NactIActionsList instance.
*
- * Returns: the currently selected rows.
+ * Returns: the currently selected rows as a list of #NAObjects.
*
* We acquire here a new reference on objects corresponding to actually
* selected rows. It is supposed that their subitems are also concerned,
* but this may be caller-dependant.
*
* The caller may safely call na_object_free_items() on the returned
- * list, or g_slist_free() if it wants keep the references somewhere.
+ * list, or g_list_free() if it wants keep the references somewhere.
*/
GList *
nact_iactions_list_get_selected_items( NactIActionsList *instance )
@@ -615,89 +615,110 @@ nact_iactions_list_get_selected_items( NactIActionsList *instance )
*
* If the @items list contains only profiles, they can only be inserted
* into an action, and the profiles will eventually be renumbered.
- * The insertion position is current, or alpha-sorted, depending on
- *
- * If the list is not sorted, the new item is inserted just before the
- * current position.
*
* If new item is a #NAActionMenu or a #NAAction, it will be inserted
- * before the current action or menu.
- *
- * If new item is a #NAActionProfile, it will be inserted before the
- * current profile, or as a new profile at the beginning of the list
- * of profiles of the current action.
+ * before the current action or inside the current menu.
*/
void
nact_iactions_list_insert_items( NactIActionsList *instance, GList *items )
{
+ static const gchar *thisfn = "nact_iactions_list_insert_items";
GtkTreeView *treeview;
- GtkTreeSelection *selection;
GtkTreeModel *model;
+ GtkTreeSelection *selection;
GList *list_selected;
- GtkTreePath *path = NULL;
- NAObject *item;
- NAObject *obj_selected = NULL;
- GtkTreeIter iter;
+ GtkTreePath *insert_path;
+ GList *parents, *it;
+ gint level;
+ g_debug( "%s: instance=%p, items=%p (%d items)",
+ thisfn, ( void * ) instance, ( void * ) items, g_list_length( items ));
g_return_if_fail( NACT_IS_IACTIONS_LIST( instance ));
- /*g_return_if_fail( NA_IS_OBJECT( item ));*/
-
- item = NA_OBJECT( items->data );
- if( FALSE ){
- insert_item( instance, item );
- }
+ g_return_if_fail( NACT_IS_WINDOW( instance ));
treeview = get_actions_list_treeview( instance );
model = gtk_tree_view_get_model( treeview );
g_return_if_fail( NACT_IS_TREE_MODEL( model ));
+ insert_path = NULL;
selection = gtk_tree_view_get_selection( treeview );
list_selected = gtk_tree_selection_get_selected_rows( selection, NULL );
- gtk_tree_selection_unselect_all( selection );
-
- /* a NAObjectItem (action or menu) is inserted just before the
- * beginning of the selection, at the same level that this beginning
- */
- if( NA_IS_OBJECT_ITEM( item )){
- if( g_list_length( list_selected )){
- path = ( GtkTreePath * ) list_selected->data;
- gtk_tree_model_get_iter( model, &iter, path );
- gtk_tree_model_get( model, &iter, IACTIONS_LIST_NAOBJECT_COLUMN, &obj_selected, -1 );
- }
+ if( g_list_length( list_selected )){
+ insert_path = gtk_tree_path_copy(( GtkTreePath * ) list_selected->data );
}
- /* a NAObjectProfile is inserted just after the action if it has
- * only one profile (it is currently selected)
- * if current selection is a profile, then the insertion occurs
- * just before this profile
- */
- if( NA_IS_OBJECT_PROFILE( item )){
- g_return_if_fail( g_list_length( list_selected ));
- path = ( GtkTreePath * ) list_selected->data;
- gtk_tree_model_get_iter( model, &iter, path );
- gtk_tree_model_get( model, &iter, IACTIONS_LIST_NAOBJECT_COLUMN, &obj_selected, -1 );
+ g_list_foreach( list_selected, ( GFunc ) gtk_tree_path_free, NULL );
+ g_list_free( list_selected );
+
+ parents = NULL;
+ level = 0;
+ do_insert_items( treeview, model, items, insert_path, level, &parents );
+
+ for( it = parents ; it ; it = it->next ){
+ na_object_check_edition_status( it->data );
}
- nact_tree_model_insert_item( NACT_TREE_MODEL( model ), item, path, obj_selected, &iter );
+ gtk_tree_path_free( insert_path );
+ /*gtk_tree_selection_unselect_all( selection );*/
+ /*path = gtk_tree_model_get_path( model, &iter );
+ nact_iactions_list_select_row( instance, path );*/
+ /*gtk_tree_view_set_cursor_on_cell( treeview, path, NULL, NULL, FALSE );*/
+ /*gtk_tree_path_free( path );*/
+ /*gtk_tree_iter_free( iter_first );*/
+ gtk_tree_model_filter_refilter( GTK_TREE_MODEL_FILTER( model ));
+}
- if( NA_IS_OBJECT_PROFILE( item )){
- na_object_dump( na_object_profile_get_action( NA_OBJECT_PROFILE( item )));
- } else {
- g_return_if_fail( NA_IS_OBJECT_ITEM( item ));
- na_object_dump( NA_OBJECT( item ));
+static void
+do_insert_items( GtkTreeView *treeview, GtkTreeModel *model, GList *items, GtkTreePath *path, gint level, GList **parents )
+{
+ static const gchar *thisfn = "nact_iactions_list_do_insert_items";
+ guint nb_profiles, nb_actions, nb_menus;
+ GtkTreeIter iter;
+ GList *it;
+ GList *subitems;
+ GtkTreePath *newpath;
+ NAObject *obj_parent;
+ gchar *newpathstr;
+
+ nact_window_count_level_zero_items( items, &nb_actions, &nb_profiles, &nb_menus );
+
+ g_debug( "%s: level=%d, actions=%d, profiles=%d, menus=%d", thisfn, level, nb_actions, nb_profiles, nb_menus );
+ g_return_if_fail(( nb_profiles && !( nb_actions + nb_menus )) || ( !nb_profiles && ( nb_actions + nb_menus )));
+ /*g_return_if_fail(( nb_profiles && ( NA_IS_OBJECT_ACTION( obj_selected ) || NA_IS_OBJECT_PROFILE( obj_selected ))) || !nb_profiles );*/
+
+ for( it = items ; it ; it = it->next ){
+ nact_tree_model_insert( NACT_TREE_MODEL( model ), NA_OBJECT( it->data ), path, &iter, &obj_parent );
+ newpath = gtk_tree_model_get_path( model, &iter );
+ if( level == 0 ){
+ gtk_tree_view_expand_to_path( treeview, newpath );
+ }
+
+ *parents = do_insert_items_add_parent( *parents, treeview, model, obj_parent );
+
+ newpathstr = gtk_tree_path_to_string( newpath );
+ g_debug( "%s: newpath=%s", thisfn, newpathstr );
+ g_free( newpathstr );
+
+ if( NA_IS_OBJECT_ITEM( it->data )){
+ subitems = na_object_get_items( it->data );
+ do_insert_items( treeview, model, subitems, newpath, level+1, parents );
+ na_object_free_items( subitems );
+ }
+
+ gtk_tree_path_free( newpath );
}
+}
- path = gtk_tree_model_get_path( model, &iter );
- gtk_tree_view_expand_to_path( treeview, path );
- gtk_tree_view_set_cursor_on_cell( treeview, path, NULL, NULL, FALSE );
- gtk_tree_path_free( path );
+static GList *
+do_insert_items_add_parent( GList *parents, GtkTreeView *treeview, GtkTreeModel *model, NAObject *parent )
+{
+ g_return_val_if_fail( parent, NULL );
- if( obj_selected ){
- g_object_unref( obj_selected );
+ if( !g_list_find( parents, parent )){
+ parents = g_list_prepend( parents, parent );
}
- g_list_foreach( list_selected, ( GFunc ) gtk_tree_path_free, NULL );
- g_list_free( list_selected );
+ return( parents );
}
/*
@@ -715,6 +736,7 @@ nact_iactions_list_insert_items( NactIActionsList *instance, GList *items )
* current profile, or as a new profile at the beginning of the list
* of profiles of the current action.
*/
+#if 0
static void
insert_item( NactIActionsList *instance, NAObject *item )
{
@@ -781,6 +803,7 @@ insert_item( NactIActionsList *instance, NAObject *item )
g_list_foreach( list_selected, ( GFunc ) gtk_tree_path_free, NULL );
g_list_free( list_selected );
}
+#endif
/**
* nact_iactions_list_is_filling_list:
@@ -1082,7 +1105,7 @@ extend_selection_to_childs( NactIActionsList *instance, GtkTreeView *treeview, G
* rationale: it is very difficult to copy anything in the clipboard,
* and to hope that this will be easily copyable anywhere after.
* We know how to insert profiles, or how to insert actions or menus,
- * but not how not where to insert e.g. a mix selection.
+ * but not how nor where to insert e.g. a mix selection.
* So the selection allows :
* - only profiles, maybe from different actions
* - or only actions or menus.
@@ -1183,10 +1206,10 @@ get_actions_list_treeview( NactIActionsList *instance )
* builds the tree
*/
static gboolean
-get_item( NactTreeModel *model, GtkTreePath *path, NAObject *object, GSList **items )
+get_item( NactTreeModel *model, GtkTreePath *path, NAObject *object, GList **items )
{
if( gtk_tree_path_get_depth( path ) == 1 ){
- *items = g_slist_prepend( *items, object );
+ *items = g_list_prepend( *items, object );
}
/* don't stop iteration */
@@ -1323,21 +1346,12 @@ on_iactions_list_item_updated( NactIActionsList *instance, GSList *updated_items
}
/*
- * rewind all the parent hierarchy of each modified item to update its status
+ * an item has been updated in one of the tabs
+ * update the treeview to reflects its new edition status
*/
static void
on_iactions_list_item_updated_treeview( NactIActionsList *instance, GSList *updated_items )
{
- GtkTreeView *treeview;
- NactTreeModel *model;
- GSList *it;
-
- treeview = get_actions_list_treeview( instance );
- model = NACT_TREE_MODEL( gtk_tree_view_get_model( treeview ));
-
- for( it = updated_items ; it ; it=it->next ){
- nact_tree_model_update_parent( model, NA_OBJECT( it->data ));
- }
}
/*
diff --git a/src/nact/nact-iactions-list.h b/src/nact/nact-iactions-list.h
index 33c52e0..3cf4ba3 100644
--- a/src/nact/nact-iactions-list.h
+++ b/src/nact/nact-iactions-list.h
@@ -78,8 +78,8 @@ void nact_iactions_list_dispose( NactIActionsList *instance );
void nact_iactions_list_delete_selection( NactIActionsList *instance, GtkTreePath **path );
void nact_iactions_list_fill( NactIActionsList *instance, GList *items );
+GList *nact_iactions_list_get_items( NactIActionsList *instance );
guint nact_iactions_list_get_items_count( NactIActionsList *instance );
-GSList *nact_iactions_list_get_items( NactIActionsList *instance );
GList *nact_iactions_list_get_modified_items( NactIActionsList *instance );
GList *nact_iactions_list_get_selected_items( NactIActionsList *instance );
void nact_iactions_list_insert_items( NactIActionsList *instance, GList *items );
diff --git a/src/nact/nact-main-menubar.c b/src/nact/nact-main-menubar.c
index a42d074..630db6e 100644
--- a/src/nact/nact-main-menubar.c
+++ b/src/nact/nact-main-menubar.c
@@ -319,7 +319,8 @@ on_new_profile_activated( GtkAction *gtk_action, NactMainWindow *window )
profile = na_object_profile_new();
name = na_object_action_get_new_profile_name( action );
- na_object_action_attach_profile( action, profile );
+ /*na_object_action_attach_profile( action, profile );*/
+ na_object_profile_set_action( profile, action );
na_object_set_id( profile, name );
items = g_list_prepend( items, profile );
@@ -336,8 +337,7 @@ on_new_profile_activated( GtkAction *gtk_action, NactMainWindow *window )
static void
on_save_activated( GtkAction *gtk_action, NactMainWindow *window )
{
- GSList *items;
- GSList *it;
+ GList *items, *it;
NactApplication *application;
NAPivot *pivot;
@@ -358,12 +358,15 @@ on_save_activated( GtkAction *gtk_action, NactMainWindow *window )
save_object_item( window, pivot, NA_OBJECT_ITEM( it->data ));
}
- g_slist_free( items );
+ /* doesn't unref object owned by the tree store
+ */
+ g_list_free( items );
/* delete the removed actions
*/
nact_main_window_remove_deleted( window );
+ nact_main_menubar_refresh_actions_sensitivity( window );
na_ipivot_consumer_delay_notify( NA_IPIVOT_CONSUMER( window ));
}
@@ -526,7 +529,7 @@ on_delete_activated( GtkAction *gtk_action, NactMainWindow *window )
/* do not unref selected items as the ref has been moved to main_deleted
*/
- g_list_free( items );
+ /*g_list_free( items );*/
}
static void
diff --git a/src/nact/nact-main-window.c b/src/nact/nact-main-window.c
index a81fe99..601c13e 100644
--- a/src/nact/nact-main-window.c
+++ b/src/nact/nact-main-window.c
@@ -629,6 +629,7 @@ nact_main_window_move_to_deleted( NactMainWindow *window, GList *items )
/**
* nact_main_window_remove_deleted:
+ * @window: this #NactMainWindow instance.
*
* Removes the deleted items from the underlying I/O storage subsystem.
*/
@@ -662,6 +663,7 @@ actually_delete_item( NactMainWindow *window, NAObject *item, NAPivot *pivot )
{
GList *items, *it;
+ g_debug( "actually_delete_item %p", ( void * ) item );
if( nact_window_delete_object_item( NACT_WINDOW( window ), NA_OBJECT_ITEM( item ))){
NAObject *origin = na_object_get_origin( item );
diff --git a/src/nact/nact-tree-model.c b/src/nact/nact-tree-model.c
index 521701e..bef29e9 100644
--- a/src/nact/nact-tree-model.c
+++ b/src/nact/nact-tree-model.c
@@ -156,9 +156,8 @@ static gboolean dump_store( NactTreeModel *model, GtkTreePath *path, NAObj
static void fill_tree_store( GtkTreeStore *model, GtkTreeView *treeview, GList *items, gboolean only_actions, GtkTreeIter *parent );
static void iter_on_store( NactTreeModel *model, GtkTreeModel *store, GtkTreeIter *parent, FnIterOnStore fn, gpointer user_data );
static gboolean iter_on_store_item( NactTreeModel *model, GtkTreeModel *store, GtkTreeIter *iter, FnIterOnStore fn, gpointer user_data );
-static gboolean search_for_object( NactTreeModel *model, GtkTreeModel *store, const NAObject *object, GtkTreeIter *iter );
-static gboolean search_for_objet_iter( NactTreeModel *model, GtkTreePath *path, NAObject *object, ntmSearchStruct *ntm );
-static void update_parent( GtkTreeModel *store, GtkTreeIter *iter );
+/*static gboolean search_for_object( NactTreeModel *model, GtkTreeModel *store, const NAObject *object, GtkTreeIter *iter );
+static gboolean search_for_objet_iter( NactTreeModel *model, GtkTreePath *path, NAObject *object, ntmSearchStruct *ntm );*/
static gboolean imulti_drag_source_row_draggable( EggTreeMultiDragSource *drag_source, GList *path_list );
static gboolean imulti_drag_source_drag_data_get( EggTreeMultiDragSource *drag_source, GdkDragContext *context, GtkSelectionData *selection_data, GList *path_list, guint info );
@@ -627,18 +626,109 @@ nact_tree_model_get_items_count( NactTreeModel *model )
}
/**
- * nact_tree_model_insert_item:
+ * nact_tree_model_insert:
* @model: this #NactTreeModel instance.
- * @object: the #NAObject-derived object to be inserted.
+ * @object: a #NAObject-derived object to be inserted.
* @path: the #GtkTreePath of the beginning of the current selection,
* or NULL.
- * @selected: the first currently selected #NAObject if any, or NULL.
- * In other words, @selected is the item selected at @path.
- * @iter: a #GtkTreeIter which will be set to the new row.
+ * @iter: set to the new row
+ * @obj_parent: set to the parent or the object itself.
*
- * Insert a new row at the given position.
+ * Insert new rows starting at the given position.
*/
void
+nact_tree_model_insert( NactTreeModel *model, const NAObject *object, GtkTreePath *path, GtkTreeIter *iter, NAObject **obj_parent )
+{
+ static const gchar *thisfn = "nact_tree_model_insert";
+ gchar *path_str;
+ GtkTreeModel *store;
+ GtkTreeIter sibling;
+ GtkTreeIter *parent_iter;
+ GtkTreeIter select_iter;
+ GtkTreeIter store_iter;
+ NAObject *selected;
+ /*GtkTreeIter profile_iter;*/
+ /*GList *profiles;*/
+
+ path_str = path ? gtk_tree_path_to_string( path ) : NULL;
+ g_debug( "%s: model=%p, object=%p (%s), path=%p (%s), iter=%p",
+ thisfn, ( void * ) model,
+ ( void * ) object, G_OBJECT_TYPE_NAME( object ),
+ ( void * ) path, path_str,
+ ( void * ) iter );
+ g_free( path_str );
+
+ g_return_if_fail( NACT_IS_TREE_MODEL( model ));
+ g_return_if_fail( NA_IS_OBJECT( object ));
+ g_return_if_fail( iter );
+
+ store = gtk_tree_model_filter_get_model( GTK_TREE_MODEL_FILTER( model ));
+ parent_iter = NULL;
+ *obj_parent = NA_OBJECT( object );
+
+ if( path ){
+ gtk_tree_model_get_iter( GTK_TREE_MODEL( model ), &select_iter, path );
+ gtk_tree_model_get( GTK_TREE_MODEL( model ), &select_iter, IACTIONS_LIST_NAOBJECT_COLUMN, &selected, -1 );
+
+ g_return_if_fail( selected );
+ g_return_if_fail( NA_IS_OBJECT( selected ));
+
+ if( NA_IS_OBJECT_ITEM( object )){
+ if( !NA_IS_OBJECT_ITEM( selected )){
+ gtk_tree_path_up( path );
+ }
+ gtk_tree_model_get_iter( store, &sibling, path );
+ if( NA_IS_OBJECT_MENU( selected )){
+ parent_iter = gtk_tree_iter_copy( &sibling );
+ na_object_insert_item( selected, object );
+ *obj_parent = selected;
+ }
+ }
+
+ if( NA_IS_OBJECT_PROFILE( object )){
+ if( NA_IS_OBJECT_ACTION( selected )){
+ /*g_debug( "nact_tree_model_insert_item: object_is_action_profile, selected_is_action" );*/
+ na_object_action_attach_profile( NA_OBJECT_ACTION( selected ), NA_OBJECT_PROFILE( object ));
+ gtk_tree_model_get_iter( store, &sibling, path );
+ parent_iter = gtk_tree_iter_copy( &sibling );
+ *obj_parent = selected;
+ } else {
+ g_return_if_fail( NA_IS_OBJECT_PROFILE( selected ));
+ *obj_parent = NA_OBJECT( na_object_profile_get_action( NA_OBJECT_PROFILE( object )));
+ gtk_tree_path_down( path );
+ gtk_tree_model_get_iter( store, &sibling, path );
+ }
+ }
+
+ g_object_unref( selected );
+
+ } else {
+ g_return_if_fail( NA_IS_OBJECT_ITEM( object ));
+ }
+
+ gtk_tree_store_insert_before( GTK_TREE_STORE( store ), &store_iter, parent_iter, parent_iter ? NULL : ( path ? &sibling : NULL ));
+ gtk_tree_store_set( GTK_TREE_STORE( store ), &store_iter, IACTIONS_LIST_NAOBJECT_COLUMN, object, -1 );
+ display_item( GTK_TREE_STORE( store ), model->private->treeview, &store_iter, object );
+
+ if( parent_iter ){
+ gtk_tree_iter_free( parent_iter );
+ }
+
+ /*if( NA_IS_OBJECT_ACTION( object )){
+ g_return_if_fail( na_object_get_items_count( object ) == 1 );
+ profiles = na_object_get_items( object );
+ append_item( GTK_TREE_STORE( store ), model->private->treeview, &store_iter, &profile_iter, NA_OBJECT( profiles->data ));
+ na_object_free_items( profiles );
+ }*/
+
+ /*nact_tree_model_update_parent( model, object );
+ gtk_tree_model_filter_refilter( GTK_TREE_MODEL_FILTER( model ));*/
+
+ gtk_tree_model_filter_convert_child_iter_to_iter( GTK_TREE_MODEL_FILTER( model ), iter, &store_iter );
+}
+
+#if 0
+void
nact_tree_model_insert_item( NactTreeModel *model, const NAObject *object, GtkTreePath *path, const NAObject *selected, GtkTreeIter *iter )
{
static const gchar *thisfn = "nact_tree_model_insert_item";
@@ -709,6 +799,7 @@ nact_tree_model_insert_item( NactTreeModel *model, const NAObject *object, GtkTr
gtk_tree_model_filter_refilter( GTK_TREE_MODEL_FILTER( model ));
gtk_tree_model_filter_convert_child_iter_to_iter( GTK_TREE_MODEL_FILTER( model ), iter, &store_iter );
}
+#endif
void
nact_tree_model_iter( NactTreeModel *model, FnIterOnStore fn, gpointer user_data )
@@ -755,28 +846,6 @@ nact_tree_model_remove( NactTreeModel *model, GList *selected )
}
}
-/**
- * Recursively update the parent hierarchy of this #NAObject
- * by setting their modified status to %TRUE.
- */
-void
-nact_tree_model_update_parent( NactTreeModel *model, const NAObject *object )
-{
- GtkTreeModel *store;
- GtkTreeIter iter;
-
- g_return_if_fail( NACT_IS_TREE_MODEL( model ));
- g_return_if_fail( NA_IS_OBJECT( object ));
-
- store = gtk_tree_model_filter_get_model( GTK_TREE_MODEL_FILTER( model ));
-
- if( search_for_object( model, store, object, &iter )){
- update_parent( store, &iter );
- }
-
- gtk_tree_model_filter_refilter( GTK_TREE_MODEL_FILTER( model ));
-}
-
static void
append_item( GtkTreeStore *model, GtkTreeView *treeview, GtkTreeIter *parent, GtkTreeIter *iter, const NAObject *object )
{
@@ -857,7 +926,7 @@ iter_on_store_item( NactTreeModel *model, GtkTreeModel *store, GtkTreeIter *iter
return( stop );
}
-static gboolean
+/*static gboolean
search_for_object( NactTreeModel *model, GtkTreeModel *store, const NAObject *object, GtkTreeIter *result_iter )
{
gboolean found = FALSE;
@@ -888,24 +957,10 @@ search_for_objet_iter( NactTreeModel *model, GtkTreePath *path, NAObject *object
if( gtk_tree_model_get_iter( ntm->store, ntm->iter, path )){
ntm->found = TRUE;
}
- }
+ }*/
/* stop iteration when found */
- return( ntm->found );
-}
-
-static void
-update_parent( GtkTreeModel *store, GtkTreeIter *iter )
-{
- GtkTreeIter parent;
- NAObject *object;
-
- if( gtk_tree_model_iter_parent( store, &parent, iter )){
- gtk_tree_model_get( store, &parent, IACTIONS_LIST_NAOBJECT_COLUMN, &object, -1 );
- /*na_object_set_modified_status( object, TRUE );*/
- g_object_unref( object );
- update_parent( store, &parent );
- }
-}
+ /*return( ntm->found );
+}*/
/*
* all rows are draggable
diff --git a/src/nact/nact-tree-model.h b/src/nact/nact-tree-model.h
index 29a04e8..5afd5dc 100644
--- a/src/nact/nact-tree-model.h
+++ b/src/nact/nact-tree-model.h
@@ -94,10 +94,9 @@ void nact_tree_model_dispose( NactTreeModel *model );
void nact_tree_model_dump( NactTreeModel *model );
void nact_tree_model_fill( NactTreeModel *model, GList *items, gboolean only_actions);
guint nact_tree_model_get_items_count( NactTreeModel *model );
-void nact_tree_model_insert_item( NactTreeModel *model, const NAObject *object, GtkTreePath *path, const NAObject *selected, GtkTreeIter *iter );
+void nact_tree_model_insert( NactTreeModel *model, const NAObject *object, GtkTreePath *path, GtkTreeIter *iter, NAObject **parent );
void nact_tree_model_iter( NactTreeModel *model, FnIterOnStore fn, gpointer user_data );
void nact_tree_model_remove( NactTreeModel *model, GList *selected );
-void nact_tree_model_update_parent( NactTreeModel *model, const NAObject *object );
G_END_DECLS
diff --git a/src/nact/nact-window.c b/src/nact/nact-window.c
index 5405b1a..0698738 100644
--- a/src/nact/nact-window.c
+++ b/src/nact/nact-window.c
@@ -274,35 +274,59 @@ nact_window_delete_object_item( NactWindow *window, NAObjectItem *item )
* @window: this #NactWindow-derived instance.
* @items: full current tree of items in #NactIActionsList treeview.
*
- * Writes as a GConf preference order and content of level zero items
- * if it has been modified.
+ * Writes as a GConf preference order and content of level zero items.
*/
void
-nact_window_write_level_zero( NactWindow *window, GSList *items )
+nact_window_write_level_zero( NactWindow *window, GList *items )
{
- GSList *it;
- gboolean modified;
+ static const gchar *thisfn = "nact_window_write_level_zero";
+ GList *it;
gchar *id;
GSList *content;
NactApplication *application;
NAPivot *pivot;
- modified = FALSE;
- for( it = items ; it && !modified ; it = it->next ){
- modified = na_object_is_modified( it->data );
+ g_debug( "%s: window=%p, items=%p (%d items)", thisfn, ( void * ) window, ( void * ) items, g_list_length( items ));
+ g_return_if_fail( NACT_IS_WINDOW( window ));
+
+ content = NULL;
+ for( it = items ; it ; it = it->next ){
+ id = na_object_get_id( it->data );
+ content = g_slist_prepend( content, id );
}
+ content = g_slist_reverse( content );
+
+ application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
+ pivot = nact_application_get_pivot( application );
+ na_iprefs_set_level_zero_items( NA_IPREFS( pivot ), content );
+
+ na_utils_free_string_list( content );
+}
- if( modified ){
- content = NULL;
- for( it = items ; it && !modified ; it = it->next ){
- id = na_object_get_id( it->data );
- content = g_slist_prepend( content, id );
+/**
+ * nact_window_count_level_zero_items:
+ */
+void
+nact_window_count_level_zero_items( GList *items, guint *actions, guint *profiles, guint *menus )
+{
+ GList *it;
+
+ g_return_if_fail( actions );
+ g_return_if_fail( profiles );
+ g_return_if_fail( menus );
+
+ *actions = 0;
+ *profiles = 0;
+ *menus = 0;
+
+ for( it = items ; it ; it = it->next ){
+ if( NA_IS_OBJECT_ACTION( it->data )){
+ *actions += 1;
+ } else if( NA_IS_OBJECT_PROFILE( it->data )){
+ *profiles += 1;
+ } else if( NA_IS_OBJECT_MENU( it->data )){
+ *menus += 1;
}
- content = g_slist_reverse( content );
- application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
- pivot = nact_application_get_pivot( application );
- na_iprefs_set_level_zero_items( NA_IPREFS( pivot ), content );
- na_utils_free_string_list( content );
}
}
diff --git a/src/nact/nact-window.h b/src/nact/nact-window.h
index 36b50e6..0bd49bb 100644
--- a/src/nact/nact-window.h
+++ b/src/nact/nact-window.h
@@ -86,7 +86,8 @@ NAPivot *nact_window_get_pivot( NactWindow *window );
gboolean nact_window_save_object_item( NactWindow *window, NAObjectItem *item );
gboolean nact_window_delete_object_item( NactWindow *window, NAObjectItem *item );
-void nact_window_write_level_zero( NactWindow *window, GSList *items );
+void nact_window_write_level_zero( NactWindow *window, GList *items );
+void nact_window_count_level_zero_items( GList *items, guint *actions, guint *profiles, guint *menus );
gboolean nact_window_warn_count_modified( NactWindow *window, gint count );
diff --git a/src/nact/nautilus-actions-config-tool.ui b/src/nact/nautilus-actions-config-tool.ui
index 6d4e72d..bea6bb8 100644
--- a/src/nact/nautilus-actions-config-tool.ui
+++ b/src/nact/nautilus-actions-config-tool.ui
@@ -940,7 +940,7 @@ Defining several profiles lets you have several commands, each applying with a d
</packing>
</child>
<child type="tab">
- <object class="GtkLabel" id="label1">
+ <object class="GtkLabel" id="label15">
<property name="visible">True</property>
<property name="tooltip_text" translatable="yes">This advanced tab lets you precisely choose on which schemes the selection will apply.</property>
<property name="label" translatable="yes">A_dvanced conditions</property>
@@ -1000,7 +1000,7 @@ Defining several profiles lets you have several commands, each applying with a d
<property name="title" translatable="yes">Importing actions</property>
<property name="modal">True</property>
<child>
- <object class="GtkLabel" id="label1">
+ <object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="label" translatable="yes">This assistant will guide you through the process of importing actions.</property>
</object>
@@ -1011,338 +1011,33 @@ Defining several profiles lets you have several commands, each applying with a d
<child>
<object class="GtkFileChooserWidget" id="filechooserwidget1">
<property name="visible">True</property>
- <property name="preview_widget_active">False</property>
<property name="use_preview_label">False</property>
<property name="local_only">False</property>
<property name="select_multiple">True</property>
+ <property name="preview_widget_active">False</property>
</object>
</child>
<child>
- <object class="GtkLabel" id="label3">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="page_type">confirm</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label2">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="page_type">summary</property>
- </packing>
- </child>
- </object>
- <object class="GtkAssistant" id="ExportAssistant">
- <property name="events">GDK_KEY_PRESS_MASK | GDK_STRUCTURE_MASK</property>
- <property name="border_width">12</property>
- <property name="title" translatable="yes">Exporting actions</property>
- <property name="modal">True</property>
- <child>
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">This assistant will guide you through the process of exporting actions.</property>
- </object>
- <packing>
- <property name="page_type">intro</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <child>
- <object class="GtkVBox" id="vbox5">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="ActionsListLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">4</property>
- <property name="ypad">4</property>
- <property name="label" translatable="yes">Actions _list :</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="ActionsList">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please select one or more actions
-to be exported.
-
-You may use Ctrl and Shift keys
-to extend a selection.</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="title">Selection of the exported actions</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <child>
- <object class="GtkFileChooserWidget" id="ExportFolderChooser">
- <property name="visible">True</property>
- <property name="preview_widget_active">False</property>
- <property name="use_preview_label">False</property>
- <property name="local_only">False</property>
- <property name="action">select-folder</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="title">Selection of the target folder</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="border_width">10</property>
- <property name="spacing">10</property>
- <child>
- <object class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="ExportSchemaV1Button">
- <property name="label" translatable="yes">Export as a GConf schema file with full key descriptions.</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox4">
- <property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="ExportHide1">
- <property name="sensitive">False</property>
- <property name="can_focus">False</property>
- <property name="receives_default">False</property>
- <property name="focus_on_click">False</property>
- <property name="draw_indicator">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="padding">2</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="ExportSchemaV1Label">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">This used to be the historical export format.
-The exported file may later be imported via :
-- Import assistant of the Nautilus Actions Configuration Tool,
-- or via the gconftool-2 --import-schema-file command-line tool.</property>
- </object>
- <packing>
- <property name="padding">4</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox3">
- <property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="ExportSchemaV2Button">
- <property name="label" translatable="yes">Export as a light GConf schema file.</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="xalign">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">ExportSchemaV1Button</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox5">
- <property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="ExportHide2">
- <property name="sensitive">False</property>
- <property name="can_focus">False</property>
- <property name="receives_default">False</property>
- <property name="focus_on_click">False</property>
- <property name="draw_indicator">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="padding">2</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="ExportSchemaV2Label">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">The exported file may later be imported via :
-- Import assistant of the Nautilus Actions Configuration Tool,
-- or via the gconftool-2 --import-schema-file command-line tool.</property>
- </object>
- <packing>
- <property name="padding">4</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="ExportGConfDumpButton">
- <property name="label" translatable="yes">Export as a GConf dump file.</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="xalign">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">ExportSchemaV1Button</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox6">
- <property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="ExportHide3">
- <property name="sensitive">False</property>
- <property name="can_focus">False</property>
- <property name="receives_default">False</property>
- <property name="focus_on_click">False</property>
- <property name="draw_indicator">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="padding">2</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="ExportGConfDumpLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">This should be the preferred format for newly exported actions.
-The exported file may later be imported via :
-- Import assistant of the Nautilus Actions Configuration Tool,
-- or via the gconftool-2 --load command-line tool.</property>
- </object>
- <packing>
- <property name="padding">4</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="title">Select the export format</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label3">
+ <object class="GtkLabel" id="label17">
<property name="visible">True</property>
- <property name="use_markup">True</property>
</object>
<packing>
<property name="page_type">confirm</property>
- <property name="title">Summary</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="label4">
+ <object class="GtkLabel" id="label18">
<property name="visible">True</property>
- <property name="use_markup">True</property>
</object>
<packing>
<property name="page_type">summary</property>
- <property name="title">Export is done</property>
</packing>
</child>
</object>
<object class="GtkWindow" id="LegendDialog">
<property name="type_hint">dialog</property>
<child>
- <object class="GtkVBox" id="vbox11">
+ <object class="GtkVBox" id="vbox16">
<property name="visible">True</property>
<property name="border_width">12</property>
<property name="spacing">6</property>
@@ -1391,14 +1086,14 @@ The exported file may later be imported via :
</packing>
</child>
<child>
- <object class="GtkTable" id="table1">
+ <object class="GtkTable" id="table5">
<property name="visible">True</property>
<property name="n_rows">11</property>
<property name="n_columns">2</property>
<property name="column_spacing">2</property>
<property name="row_spacing">6</property>
<child>
- <object class="GtkLabel" id="label3">
+ <object class="GtkLabel" id="label20">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
@@ -1410,7 +1105,7 @@ The exported file may later be imported via :
</packing>
</child>
<child>
- <object class="GtkLabel" id="label4">
+ <object class="GtkLabel" id="label21">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
@@ -1438,7 +1133,7 @@ The exported file may later be imported via :
</packing>
</child>
<child>
- <object class="GtkLabel" id="label6">
+ <object class="GtkLabel" id="label22">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
@@ -1452,7 +1147,7 @@ The exported file may later be imported via :
</packing>
</child>
<child>
- <object class="GtkLabel" id="label7">
+ <object class="GtkLabel" id="label23">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
@@ -1466,7 +1161,7 @@ The exported file may later be imported via :
</packing>
</child>
<child>
- <object class="GtkLabel" id="label8">
+ <object class="GtkLabel" id="label33">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
@@ -1494,7 +1189,7 @@ The exported file may later be imported via :
</packing>
</child>
<child>
- <object class="GtkLabel" id="label10">
+ <object class="GtkLabel" id="label35">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
@@ -1522,7 +1217,7 @@ The exported file may later be imported via :
</packing>
</child>
<child>
- <object class="GtkLabel" id="label12">
+ <object class="GtkLabel" id="label36">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
@@ -1563,7 +1258,7 @@ The exported file may later be imported via :
</packing>
</child>
<child>
- <object class="GtkLabel" id="label19">
+ <object class="GtkLabel" id="label37">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
@@ -1743,7 +1438,7 @@ The exported file may later be imported via :
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
- <object class="GtkVBox" id="vbox2">
+ <object class="GtkVBox" id="vbox17">
<property name="visible">True</property>
<property name="border_width">10</property>
<property name="orientation">vertical</property>
@@ -1841,16 +1536,16 @@ The exported file may later be imported via :
</object>
<object class="GtkSizeGroup" id="CommandLabelSizeGroup">
<widgets>
- <widget name="ProfileLabelLabel"/>
- <widget name="CommandPathLabel"/>
- <widget name="CommandParametersLabel"/>
<widget name="CommandExamplePreLabel"/>
+ <widget name="CommandParametersLabel"/>
+ <widget name="CommandPathLabel"/>
+ <widget name="ProfileLabelLabel"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="CommandButtonSizeGroup">
<widgets>
- <widget name="CommandPathButton"/>
<widget name="CommandLegendButton"/>
+ <widget name="CommandPathButton"/>
</widgets>
</object>
</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]