[nautilus-actions] Update the provider name of new items at save time
- From: Pierre Wieser <pwieser src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nautilus-actions] Update the provider name of new items at save time
- Date: Mon, 21 Dec 2009 20:46:56 +0000 (UTC)
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]