[nautilus-actions] Update the provider name of new items at save time



commit 280c8f9deaec717bc019b4b6779e05456d511758
Author: Pierre Wieser <pwieser trychlos org>
Date:   Mon Dec 21 05:59:51 2009 +0100

    Update the provider name of new items at save time

 ChangeLog                                 |   11 +++++
 TODO                                      |    2 -
 nautilus-actions/nact/nact-iaction-tab.c  |   65 ++++++++++++++++++++++-------
 nautilus-actions/nact/nact-main-menubar.c |    9 ++++
 nautilus-actions/nact/nact-main-tab.h     |    1 +
 nautilus-actions/nact/nact-main-window.c  |   21 +++++++++
 6 files changed, 92 insertions(+), 17 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 8010b33..49f3e7f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2009-12-21 Pierre Wieser <pwieser trychlos org>
 
+	* nautilus-actions/nact/nact-iaction-tab.c
+	(on_tab_updatable_provider_changed, display_provider_name):
+	New functions.
+
+	* nautilus-actions/nact/nact-main-menubar.c (save_item):
+	Notice provider change at save time.
+
+	* nautilus-actions/nact/nact-main-tab.h:
+	* nautilus-actions/nact/nact-main-window.c:
+	Define new TAB_UPDATABLE_SIGNAL_PROVIDER_CHANGED signal.
+
 	* nautilus-actions/nact/nact-main-menubar.c (on_update_sensitivities):
 	Add - commented for now - debug message.
 
diff --git a/TODO b/TODO
index f8a3af7..3de0b3c 100644
--- a/TODO
+++ b/TODO
@@ -109,6 +109,4 @@
   > remove in n-a-n
   > remove in action class
 
-- when saving a new item, do not save it in a non-writable provider!
-
 - the locked image is moved to the right (under the grip) at the first item
diff --git a/nautilus-actions/nact/nact-iaction-tab.c b/nautilus-actions/nact/nact-iaction-tab.c
index f3413b2..087975b 100644
--- a/nautilus-actions/nact/nact-iaction-tab.c
+++ b/nautilus-actions/nact/nact-iaction-tab.c
@@ -75,6 +75,7 @@ static void          interface_base_finalize( NactIActionTabInterface *klass );
 
 static void          on_iactions_list_column_edited( NactIActionTab *instance, NAObject *object, gchar *text, gint column );
 static void          on_tab_updatable_selection_changed( NactIActionTab *instance, gint count_selected );
+static void          on_tab_updatable_provider_changed( NactIActionTab *instance, NAObjectItem *item );
 
 static void          on_target_selection_toggled( GtkToggleButton *button, NactIActionTab *instance );
 static void          on_target_background_toggled( GtkToggleButton *button, NactIActionTab *instance );
@@ -107,6 +108,8 @@ static void          on_enabled_toggled( GtkToggleButton *button, NactIActionTab
 
 static void          on_readonly_toggled( GtkToggleButton *button, NactIActionTab *instance );
 
+static void          display_provider_name( NactIActionTab *instance, NAPivot *pivot, NAObjectItem *item );
+
 GType
 nact_iaction_tab_get_type( void )
 {
@@ -216,6 +219,12 @@ nact_iaction_tab_runtime_init_toplevel( NactIActionTab *instance )
 		base_window_signal_connect(
 				BASE_WINDOW( instance ),
 				G_OBJECT( instance ),
+				TAB_UPDATABLE_SIGNAL_PROVIDER_CHANGED,
+				G_CALLBACK( on_tab_updatable_provider_changed ));
+
+		base_window_signal_connect(
+				BASE_WINDOW( instance ),
+				G_OBJECT( instance ),
 				IACTIONS_LIST_SIGNAL_COLUMN_EDITED,
 				G_CALLBACK( on_iactions_list_column_edited ));
 
@@ -385,7 +394,6 @@ on_tab_updatable_selection_changed( NactIActionTab *instance, gint count_selecte
 	GtkToggleButton *readonly_button;
 	gboolean enabled_item;
 	GtkToggleButton *toggle;
-	NAIIOProvider *provider;
 	gboolean readonly;
 	gboolean readonly_item, writable_provider;
 
@@ -508,26 +516,30 @@ on_tab_updatable_selection_changed( NactIActionTab *instance, gint count_selecte
 		g_free( label );
 		gtk_widget_set_sensitive( label_widget, item != NULL );
 
-		label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionItemProvider" );
-		label = NULL;
-		if( item ){
-			provider = na_object_get_provider( item );
-			if( provider ){
-				label = na_io_provider_get_name( pivot, provider );
-			}
-		}
-		if( !label ){
-			label = g_strdup( "" );
-		}
-		gtk_label_set_text( GTK_LABEL( label_widget ), label );
-		g_free( label );
-		gtk_widget_set_sensitive( label_widget, item != NULL );
+		display_provider_name( instance, pivot, item );
 
 		st_on_selection_change = FALSE;
 	}
 }
 
 static void
+on_tab_updatable_provider_changed( NactIActionTab *instance, NAObjectItem *item )
+{
+	static const gchar *thisfn = "nact_iaction_tab_on_tab_updatable_provider_changed";
+	NactApplication *application;
+	NAPivot *pivot;
+
+	g_debug( "%s: instance=%p, item=%p", thisfn, ( void * ) instance, ( void * ) item );
+
+	if( st_initialized && !st_finalized ){
+
+		application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( instance )));
+		pivot = nact_application_get_pivot( application );
+		display_provider_name( instance, pivot, item );
+	}
+}
+
+static void
 on_target_selection_toggled( GtkToggleButton *button, NactIActionTab *instance )
 {
 	static const gchar *thisfn = "nact_iaction_tab_on_target_selection_toggled";
@@ -1080,3 +1092,26 @@ on_readonly_toggled( GtkToggleButton *button, NactIActionTab *instance )
 		g_signal_handlers_unblock_by_func(( gpointer ) button, on_readonly_toggled, instance );
 	}
 }
+
+static void
+display_provider_name( NactIActionTab *instance, NAPivot *pivot, NAObjectItem *item )
+{
+	GtkWidget *label_widget;
+	gchar *label;
+	NAIIOProvider *provider;
+
+	label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionItemProvider" );
+	label = NULL;
+	if( item ){
+		provider = na_object_get_provider( item );
+		if( provider ){
+			label = na_io_provider_get_name( pivot, provider );
+		}
+	}
+	if( !label ){
+		label = g_strdup( "" );
+	}
+	gtk_label_set_text( GTK_LABEL( label_widget ), label );
+	g_free( label );
+	gtk_widget_set_sensitive( label_widget, item != NULL );
+}
diff --git a/nautilus-actions/nact/nact-main-menubar.c b/nautilus-actions/nact/nact-main-menubar.c
index 450a15b..9646182 100644
--- a/nautilus-actions/nact/nact-main-menubar.c
+++ b/nautilus-actions/nact/nact-main-menubar.c
@@ -874,6 +874,8 @@ save_item( NactMainWindow *window, NAPivot *pivot, NAObjectItem *item )
 	GList *subitems, *it;
 	NAObjectItem *parent;
 	gint pos;
+	NAIIOProvider *provider_before;
+	NAIIOProvider *provider_after;
 
 	g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
 	g_return_if_fail( NA_IS_PIVOT( pivot ));
@@ -886,6 +888,8 @@ save_item( NactMainWindow *window, NAPivot *pivot, NAObjectItem *item )
 		}
 	}
 
+	provider_before = na_object_get_provider( item );
+
 	if( na_object_is_modified( item ) &&
 		nact_window_save_item( NACT_WINDOW( window ), item )){
 
@@ -922,6 +926,11 @@ save_item( NactMainWindow *window, NAPivot *pivot, NAObjectItem *item )
 			} else {
 				na_pivot_add_item( pivot, dup_pivot );
 			}
+
+			provider_after = na_object_get_provider( item );
+			if( provider_after != provider_before ){
+				g_signal_emit_by_name( window, TAB_UPDATABLE_SIGNAL_PROVIDER_CHANGED, item );
+			}
 	}
 }
 
diff --git a/nautilus-actions/nact/nact-main-tab.h b/nautilus-actions/nact/nact-main-tab.h
index d3ae9d4..6edf8b7 100644
--- a/nautilus-actions/nact/nact-main-tab.h
+++ b/nautilus-actions/nact/nact-main-tab.h
@@ -54,6 +54,7 @@
 #define TAB_UPDATABLE_SIGNAL_SELECTION_CHANGED			"nact-tab-updatable-selection-changed"
 #define TAB_UPDATABLE_SIGNAL_ITEM_UPDATED				"nact-tab-updatable-item-updated"
 #define TAB_UPDATABLE_SIGNAL_ENABLE_TAB					"nact-tab-updatable-enable-tab"
+#define TAB_UPDATABLE_SIGNAL_PROVIDER_CHANGED			"nact-tab-updatable-provider-changed"
 
 /* notebook tabs
  */
diff --git a/nautilus-actions/nact/nact-main-window.c b/nautilus-actions/nact/nact-main-window.c
index 8f28423..903c17d 100644
--- a/nautilus-actions/nact/nact-main-window.c
+++ b/nautilus-actions/nact/nact-main-window.c
@@ -124,6 +124,7 @@ enum {
 /* signals
  */
 enum {
+	PROVIDER_CHANGED,
 	SELECTION_CHANGED,
 	ITEM_UPDATED,
 	ENABLE_TAB,
@@ -348,6 +349,26 @@ class_init( NactMainWindowClass *klass )
 	base_class->is_willing_to_quit = base_is_willing_to_quit;
 
 	/**
+	 * nact-tab-updatable-provider-changed:
+	 *
+	 * This signal is emitted at save time, when we are noticing that
+	 * the save operation has led to a modification of the I/O provider.
+	 * This signal may be caught by a tab in order to display the
+	 * new provider's name.
+	 */
+	st_signals[ PROVIDER_CHANGED ] = g_signal_new(
+			TAB_UPDATABLE_SIGNAL_PROVIDER_CHANGED,
+			G_TYPE_OBJECT,
+			G_SIGNAL_RUN_LAST,
+			0,					/* no default handler */
+			NULL,
+			NULL,
+			g_cclosure_marshal_VOID__POINTER,
+			G_TYPE_NONE,
+			1,
+			G_TYPE_POINTER );
+
+	/**
 	 * nact-tab-updatable-selection-changed:
 	 *
 	 * This signal is emitted by this main window, in response of a



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