[nautilus-actions] Activate up/down button in I/O providers edition
- From: Pierre Wieser <pwieser src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nautilus-actions] Activate up/down button in I/O providers edition
- Date: Sat, 30 Jan 2010 17:39:45 +0000 (UTC)
commit 2b3e41433006ca482fcae0bc488a1b0bb4f5588c
Author: Pierre Wieser <pwieser trychlos org>
Date: Wed Jan 27 20:50:48 2010 +0100
Activate up/down button in I/O providers edition
ChangeLog | 8 ++
TODO | 3 +
nautilus-actions/nact/nact-preferences.ui | 2 +-
nautilus-actions/nact/nact-providers-list.c | 158 +++++++++++++++++----------
4 files changed, 110 insertions(+), 61 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 4b4a934..2546e62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-01-27 Pierre Wieser <pwieser trychlos org>
+
+ * nautilus-actions/nact/nact-preferences.ui:
+ Fix the name of the Down button.
+
+ * nautilus-actions/nact/nact-providers-list.c:
+ Activate up/down buttons.
+
2009-01-26 Pierre Wieser <pwieser trychlos org>
* nautilus-actions/io-provider-gconf/nagp-read.c
diff --git a/TODO b/TODO
index 7accdc5..f30cdc6 100644
--- a/TODO
+++ b/TODO
@@ -130,3 +130,6 @@
rather be considered as GConf actions are read-only. Preferences stay editable.
Does the level-zero is a preference (so editable) or a sort of action (ro) !?
see the comment in schema.in
+
+- set the order of i/o providers (when setting up the list)
+- review the searches for writable providers and how this property is set and requested
diff --git a/nautilus-actions/nact/nact-preferences.ui b/nautilus-actions/nact/nact-preferences.ui
index f7fb5d2..09fc201 100644
--- a/nautilus-actions/nact/nact-preferences.ui
+++ b/nautilus-actions/nact/nact-preferences.ui
@@ -809,7 +809,7 @@ You can add a new scheme by clicking on the '+' button.</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
- <object class="GtkButton" id="ProviderButtonDow">
+ <object class="GtkButton" id="ProviderButtonDown">
<property name="label" translatable="yes">_Down</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
diff --git a/nautilus-actions/nact/nact-providers-list.c b/nautilus-actions/nact/nact-providers-list.c
index f3ca89d..dba32af 100644
--- a/nautilus-actions/nact/nact-providers-list.c
+++ b/nautilus-actions/nact/nact-providers-list.c
@@ -49,10 +49,10 @@
/* column ordering
*/
enum {
- PROVIDERS_READABLE_COLUMN = 0,
- PROVIDERS_WRITABLE_COLUMN,
- PROVIDERS_LIBELLE_COLUMN,
- PROVIDERS_N_COLUMN
+ PROVIDER_READABLE_COLUMN = 0,
+ PROVIDER_WRITABLE_COLUMN,
+ PROVIDER_LIBELLE_COLUMN,
+ PROVIDER_N_COLUMN
};
#define PROVIDERS_LIST_TREEVIEW "nact-providers-list-treeview"
@@ -63,9 +63,6 @@ static void init_view_setup_defaults( GtkTreeView *treeview, BaseWindow *w
static void init_view_connect_signals( GtkTreeView *treeview, BaseWindow *window );
static void init_view_select_first_row( GtkTreeView *treeview );
-/*static gboolean iter_for_reset( GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data );*/
-/*static void iter_for_setup( gchar *scheme, GtkTreeModel *model );
-static gboolean iter_for_get( GtkTreeModel* scheme_model, GtkTreePath *path, GtkTreeIter* iter, GSList **schemes_list );*/
static GList *get_list_providers( GtkTreeView *treeview );
static gboolean get_list_providers_iter( GtkTreeModel *model, GtkTreePath *path, GtkTreeIter* iter, GList **list );
@@ -77,9 +74,6 @@ static void on_down_clicked( GtkButton *button, BaseWindow *window );
static GtkButton *get_up_button( BaseWindow *window );
static GtkButton *get_down_button( BaseWindow *window );
-/*static GSList *get_gconf_subdirs( GConfClient *gconf, const gchar *path );
-static void free_gconf_subdirs( GSList *subdirs );
-static void free_gslist( GSList *list );*/
/**
* nact_providers_list_create_providers_list:
@@ -101,7 +95,7 @@ nact_providers_list_create_model( GtkTreeView *treeview )
g_debug( "%s: treeview=%p", thisfn, ( void * ) treeview );
g_return_if_fail( GTK_IS_TREE_VIEW( treeview ));
- model = gtk_list_store_new( PROVIDERS_N_COLUMN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING );
+ model = gtk_list_store_new( PROVIDER_N_COLUMN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING );
gtk_tree_view_set_model( treeview, GTK_TREE_MODEL( model ));
g_object_unref( model );
@@ -109,7 +103,7 @@ nact_providers_list_create_model( GtkTreeView *treeview )
column = gtk_tree_view_column_new_with_attributes(
_( "To be read" ),
toggled_cell,
- "active", PROVIDERS_READABLE_COLUMN,
+ "active", PROVIDER_READABLE_COLUMN,
NULL );
gtk_tree_view_append_column( treeview, column );
@@ -117,7 +111,7 @@ nact_providers_list_create_model( GtkTreeView *treeview )
column = gtk_tree_view_column_new_with_attributes(
_( "Writable" ),
toggled_cell,
- "active", PROVIDERS_WRITABLE_COLUMN,
+ "active", PROVIDER_WRITABLE_COLUMN,
NULL );
gtk_tree_view_append_column( treeview, column );
@@ -125,7 +119,7 @@ nact_providers_list_create_model( GtkTreeView *treeview )
column = gtk_tree_view_column_new_with_attributes(
_( "I/O Provider" ),
text_cell,
- "text", PROVIDERS_LIBELLE_COLUMN,
+ "text", PROVIDER_LIBELLE_COLUMN,
NULL );
gtk_tree_view_append_column( treeview, column );
@@ -181,9 +175,9 @@ init_view_setup_defaults( GtkTreeView *treeview, BaseWindow *window )
gtk_list_store_append( model, &row );
libelle = na_io_provider_get_name( NA_IO_PROVIDER( iter->data ));
gtk_list_store_set( model, &row,
- PROVIDERS_READABLE_COLUMN, na_io_provider_is_to_be_read( NA_IO_PROVIDER( iter->data )),
- PROVIDERS_WRITABLE_COLUMN, na_io_provider_is_writable( NA_IO_PROVIDER( iter->data )),
- PROVIDERS_LIBELLE_COLUMN, libelle,
+ PROVIDER_READABLE_COLUMN, na_io_provider_is_to_be_read( NA_IO_PROVIDER( iter->data )),
+ PROVIDER_WRITABLE_COLUMN, na_io_provider_is_writable( NA_IO_PROVIDER( iter->data )),
+ PROVIDER_LIBELLE_COLUMN, libelle,
-1 );
g_free( libelle );
}
@@ -196,7 +190,7 @@ init_view_connect_signals( GtkTreeView *treeview, BaseWindow *window )
GList *renderers;
GtkButton *up_button, *down_button;
- column = gtk_tree_view_get_column( treeview, PROVIDERS_READABLE_COLUMN );
+ column = gtk_tree_view_get_column( treeview, PROVIDER_READABLE_COLUMN );
renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
base_window_signal_connect(
window,
@@ -204,7 +198,7 @@ init_view_connect_signals( GtkTreeView *treeview, BaseWindow *window )
"toggled",
G_CALLBACK( on_readable_toggled ));
- column = gtk_tree_view_get_column( treeview, PROVIDERS_WRITABLE_COLUMN );
+ column = gtk_tree_view_get_column( treeview, PROVIDER_WRITABLE_COLUMN );
renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
base_window_signal_connect(
window,
@@ -240,25 +234,31 @@ init_view_select_first_row( GtkTreeView *treeview )
GtkTreePath *path;
path = gtk_tree_path_new_first();
- selection = gtk_tree_view_get_selection( treeview );
- gtk_tree_selection_select_path( selection, path );
- gtk_tree_path_free( path );
+ if( path ){
+ selection = gtk_tree_view_get_selection( treeview );
+ gtk_tree_selection_select_path( selection, path );
+ gtk_tree_path_free( path );
+ }
}
/**
* nact_providers_list_save:
* @window: the #BaseWindow which embeds this treeview.
*
- * Save the I/O provider status as a GConf preference.
+ * Save the I/O provider status as a GConf preference,
+ * and update the I/O providers list maintained by #NAIOProvider class.
*/
void
nact_providers_list_save( BaseWindow *window )
{
+ static const gchar *thisfn = "nact_providers_list_save";
GtkTreeView *treeview;
GList *providers;
NactApplication *application;
NAPivot *pivot;
+ g_debug( "%s: window=%p", thisfn, ( void * ) window );
+
treeview = GTK_TREE_VIEW( g_object_get_data( G_OBJECT( window ), PROVIDERS_LIST_TREEVIEW ));
providers = get_list_providers( treeview );
application = NACT_APPLICATION( base_window_get_application( window ));
@@ -301,6 +301,8 @@ get_list_providers_iter( GtkTreeModel *model, GtkTreePath *path, GtkTreeIter* it
/**
* nact_providers_list_dispose:
* @treeview: the #GtkTreeView.
+ *
+ * Release the content of the page when we are closing the Preferences dialog.
*/
void
nact_providers_list_dispose( BaseWindow *window )
@@ -323,53 +325,116 @@ nact_providers_list_dispose( BaseWindow *window )
static void
on_selection_changed( GtkTreeSelection *selection, BaseWindow *window )
{
- /*static const gchar *thisfn = "nact_providers_list_on_selection_changed";*/
- GtkTreeView *treeview;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkButton *button;
+ GtkTreePath *path;
+ gboolean may_up, may_down;
- /*g_debug( "%s: selection=%p, window=%p", thisfn, ( void * ) selection, ( void * ) window );*/
+ may_up = FALSE;
+ may_down = FALSE;
- /*g_debug( "%s: getting data on window=%p", thisfn, ( void * ) window );*/
- treeview = GTK_TREE_VIEW( g_object_get_data( G_OBJECT( window ), PROVIDERS_LIST_TREEVIEW ));
+ if( gtk_tree_selection_get_selected( selection, &model, &iter )){
+ path = gtk_tree_model_get_path( model, &iter );
+ may_up = gtk_tree_path_prev( path );
+ gtk_tree_path_free( path );
- /*button = get_remove_button( window );
- gtk_widget_set_sensitive( GTK_WIDGET( button ), editable && gtk_tree_selection_count_selected_rows( selection ) > 0);
- */
+ may_down = gtk_tree_model_iter_next( model, &iter );
+ }
+
+ button = get_up_button( window );
+ gtk_widget_set_sensitive( GTK_WIDGET( button ), may_up );
+
+ button = get_down_button( window );
+ gtk_widget_set_sensitive( GTK_WIDGET( button ), may_down );
}
static void
-on_readable_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *window )
+on_readable_toggled( GtkCellRendererToggle *renderer, gchar *path_string, BaseWindow *window )
{
GtkTreeView *treeview;
GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean state;
if( !st_on_selection_change ){
treeview = GTK_TREE_VIEW( g_object_get_data( G_OBJECT( window ), PROVIDERS_LIST_TREEVIEW ));
model = gtk_tree_view_get_model( treeview );
+ if( gtk_tree_model_get_iter_from_string( model, &iter, path_string )){
+ gtk_tree_model_get( model, &iter, PROVIDER_READABLE_COLUMN, &state, -1 );
+ gtk_list_store_set( GTK_LIST_STORE( model ), &iter, PROVIDER_READABLE_COLUMN, !state, -1 );
+ }
}
}
static void
-on_writable_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *window )
+on_writable_toggled( GtkCellRendererToggle *renderer, gchar *path_string, BaseWindow *window )
{
GtkTreeView *treeview;
GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean state;
if( !st_on_selection_change ){
treeview = GTK_TREE_VIEW( g_object_get_data( G_OBJECT( window ), PROVIDERS_LIST_TREEVIEW ));
model = gtk_tree_view_get_model( treeview );
+ if( gtk_tree_model_get_iter_from_string( model, &iter, path_string )){
+ gtk_tree_model_get( model, &iter, PROVIDER_WRITABLE_COLUMN, &state, -1 );
+ gtk_list_store_set( GTK_LIST_STORE( model ), &iter, PROVIDER_WRITABLE_COLUMN, !state, -1 );
+ }
}
}
static void
on_up_clicked( GtkButton *button, BaseWindow *window )
{
+ GtkTreeView *treeview;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter_selected;
+ GtkTreePath *path_prev;
+ GtkTreeIter iter_prev;
+
+ treeview = GTK_TREE_VIEW( g_object_get_data( G_OBJECT( window ), PROVIDERS_LIST_TREEVIEW ));
+ selection = gtk_tree_view_get_selection( treeview );
+ if( gtk_tree_selection_get_selected( selection, &model, &iter_selected )){
+ path_prev = gtk_tree_model_get_path( model, &iter_selected );
+ if( gtk_tree_path_prev( path_prev )){
+ if( gtk_tree_model_get_iter( model, &iter_prev, path_prev )){
+ gtk_list_store_move_before( GTK_LIST_STORE( model ), &iter_selected, &iter_prev );
+ gtk_tree_selection_unselect_all( selection );
+ gtk_tree_selection_select_path( selection, path_prev );
+ }
+ }
+ gtk_tree_path_free( path_prev );
+ }
}
static void
on_down_clicked( GtkButton *button, BaseWindow *window )
{
+ GtkTreeView *treeview;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter_selected;
+ GtkTreeIter *iter_next;
+ GtkTreePath *path_next;
+
+ treeview = GTK_TREE_VIEW( g_object_get_data( G_OBJECT( window ), PROVIDERS_LIST_TREEVIEW ));
+ selection = gtk_tree_view_get_selection( treeview );
+ if( gtk_tree_selection_get_selected( selection, &model, &iter_selected )){
+ iter_next = gtk_tree_iter_copy( &iter_selected );
+ if( gtk_tree_model_iter_next( model, iter_next )){
+ path_next = gtk_tree_model_get_path( model, iter_next );
+ gtk_list_store_move_after( GTK_LIST_STORE( model ), &iter_selected, iter_next );
+ gtk_tree_selection_unselect_all( selection );
+ gtk_tree_selection_select_path( selection, path_next );
+ gtk_tree_path_free( path_next );
+ }
+ gtk_tree_iter_free( iter_next );
+ }
}
static GtkButton *
@@ -391,30 +456,3 @@ get_down_button( BaseWindow *window )
return( button );
}
-
-#if 0
-/*
- * free_subdirs:
- * @subdirs: a list of subdirs as returned by get_subdirs().
- *
- * Release the list of subdirs.
- */
-static void
-free_gconf_subdirs( GSList *subdirs )
-{
- free_gslist( subdirs );
-}
-
-/*
- * free_gslist:
- * @list: the GSList to be freed.
- *
- * Frees a GSList of strings.
- */
-static void
-free_gslist( GSList *list )
-{
- g_slist_foreach( list, ( GFunc ) g_free, NULL );
- g_slist_free( list );
-}
-#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]