[nautilus-actions] Fix wrongly modifiable controls on read-only item
- From: Pierre Wieser <pwieser src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-actions] Fix wrongly modifiable controls on read-only item
- Date: Tue, 10 Aug 2010 19:53:47 +0000 (UTC)
commit 1ae2ea84742d43494acf2f0387b0332cedfbf82c
Author: pierre <pierre vfedora10 virtuals pwi>
Date: Tue Aug 10 14:58:26 2010 +0200
Fix wrongly modifiable controls on read-only item
ChangeLog | 24 ++++++++++
TODO | 6 +--
src/nact/nact-gtk-utils.c | 95 ++++++++++++++++++++++++++++++--------
src/nact/nact-gtk-utils.h | 3 +
src/nact/nact-icommand-tab.c | 6 ++-
src/nact/nact-ienvironment-tab.c | 25 +++++-----
src/nact/nact-iexecution-tab.c | 16 ++++---
src/nact/nact-iproperties-tab.c | 1 +
src/nact/nact-match-list.c | 92 +++++++++++++++++++++++--------------
9 files changed, 190 insertions(+), 78 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 338059c..5b1d39b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,29 @@
2010-08-09 Pierre Wieser <pwieser trychlos org>
+ Controls are not modifiable for a read-only item.
+
+ * src/nact/nact-gtk-utils.c:
+ * src/nact/nact-gtk-utils.h
+ (nact_gtk_utils_set_initial_state, nact_gtk_utils_reset_initial_state):
+ New functions.
+
+ * src/nact/nact-icommand-tab.c (on_tab_updatable_selection_changed):
+ Manage working directory browse button.
+
+ * src/nact/nact-ienvironment-tab.c (on_tab_updatable_selection_changed):
+ Manage try exec and show if running browse buttons.
+ Manage desktop environment radio buttons.
+
+ * src/nact/nact-iexecution-tab.c (on_tab_updatable_selection_changed):
+ Manage execution mode radio buttons.
+
+ * src/nact/nact-iproperties-tab.c (on_tab_updatable_selection_changed):
+ Manage description text view.
+
+ * src/nact/nact-match-list.c
+ (on_key_pressed_event): Only insert/delete rows if item is editable.
+ (on_must_match_toggled, on_must_not_match_toggled): Manage radio buttons.
+
Review notification bufferization.
* src/core/na-ipivot-consumer.c:
diff --git a/TODO b/TODO
index e7a61c1..a40ac34 100644
--- a/TODO
+++ b/TODO
@@ -6,10 +6,6 @@ N-A BUGS
- changing conditions in IConditionsTab should trigger an update of the
example label
-- should not be able to remove a line from a condition filter listbox when item is read-only
-
-- should not be able to toggle execution mode when item is read-only
-
- when error on writing, should let the item modified
TODO
@@ -29,6 +25,8 @@ TODO
after deleting this default value in the UI, we should write basenames=[] in the I/O provider
so that we really have an empty list
+- nact_gtk_utils_set_editable for radio buttons and combobox
+
N-A ENHANCEMENTS
================
- allow users to upload/download actions directly from a web repository
diff --git a/src/nact/nact-gtk-utils.c b/src/nact/nact-gtk-utils.c
index ce63cf9..996dd7f 100644
--- a/src/nact/nact-gtk-utils.c
+++ b/src/nact/nact-gtk-utils.c
@@ -57,10 +57,19 @@ void
nact_gtk_utils_set_editable( GtkObject *widget, gboolean editable )
{
GList *renderers, *irender;
- GtkTextBuffer *buffer;
- GtkTextTag *tag;
- if( GTK_IS_ENTRY( widget )){
+ if( GTK_IS_COMBO_BOX_ENTRY( widget )){
+ /* idem as GtkEntry */
+ gtk_editable_set_editable( GTK_EDITABLE( gtk_bin_get_child( GTK_BIN( widget ))), editable );
+ g_object_set( G_OBJECT( gtk_bin_get_child( GTK_BIN( widget ))), "can-focus", editable, NULL );
+ /* disable the listbox button itself */
+ gtk_combo_box_set_button_sensitivity( GTK_COMBO_BOX( widget ), editable ? GTK_SENSITIVITY_ON : GTK_SENSITIVITY_OFF );
+
+ } else if( GTK_IS_COMBO_BOX( widget )){
+ /* disable the listbox button itself */
+ gtk_combo_box_set_button_sensitivity( GTK_COMBO_BOX( widget ), editable ? GTK_SENSITIVITY_ON : GTK_SENSITIVITY_OFF );
+
+ } else if( GTK_IS_ENTRY( widget )){
gtk_editable_set_editable( GTK_EDITABLE( widget ), editable );
/* removing the frame leads to a disturbing modification of the
* height of the control */
@@ -69,12 +78,8 @@ nact_gtk_utils_set_editable( GtkObject *widget, gboolean editable )
g_object_set( G_OBJECT( widget ), "can-focus", editable, NULL );
} else if( GTK_IS_TEXT_VIEW( widget )){
- buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW( widget ));
- tag = gtk_text_buffer_create_tag( buffer,
- "nact-tag",
- "editable", editable,
- "editable-set", TRUE,
- NULL );
+ g_object_set( G_OBJECT( widget ), "can-focus", editable, NULL );
+ gtk_text_view_set_editable( GTK_TEXT_VIEW( widget ), editable );
} else if( GTK_IS_TOGGLE_BUTTON( widget )){
/* transforms to a quasi standard GtkButton */
@@ -83,16 +88,6 @@ nact_gtk_utils_set_editable( GtkObject *widget, gboolean editable )
* (which is better than nothing) */
g_object_set( G_OBJECT( widget ), "can-focus", editable, NULL );
- } else if( GTK_IS_BUTTON( widget )){
- gtk_widget_set_sensitive( GTK_WIDGET( widget ), editable );
-
- } else if( GTK_IS_COMBO_BOX_ENTRY( widget )){
- /* idem as GtkEntry */
- gtk_editable_set_editable( GTK_EDITABLE( gtk_bin_get_child( GTK_BIN( widget ))), editable );
- g_object_set( G_OBJECT( gtk_bin_get_child( GTK_BIN( widget ))), "can-focus", editable, NULL );
- /* disable the listbox button itself */
- gtk_combo_box_set_button_sensitivity( GTK_COMBO_BOX( widget ), editable ? GTK_SENSITIVITY_ON : GTK_SENSITIVITY_OFF );
-
} else if( GTK_IS_TREE_VIEW_COLUMN( widget )){
renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( GTK_TREE_VIEW_COLUMN( widget )));
for( irender = renderers ; irender ; irender = irender->next ){
@@ -101,6 +96,68 @@ nact_gtk_utils_set_editable( GtkObject *widget, gboolean editable )
}
}
g_list_free( renderers );
+
+ } else if( GTK_IS_BUTTON( widget )){
+ gtk_widget_set_sensitive( GTK_WIDGET( widget ), editable );
+ }
+}
+
+/**
+ * nact_gtk_utils_set_initial_state:
+ * @button: the #GtkToggleButton activated as initial state.
+ * @func: the corresponding on_toggled function.
+ *
+ * Record on each #GtkRadioButton of the same group the characteristics
+ * of those which is activated as the initial state. This is useful to handle
+ * read-only radio-button.
+ *
+ * As a side-effect, this initial button is set as active here.
+ */
+void
+nact_gtk_utils_set_initial_state( GtkToggleButton *button, GCallback func )
+{
+ GSList *group, *ig;
+ GtkRadioButton *other;
+
+ group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( button ));
+ for( ig = group ; ig ; ig = ig->next ){
+ other = GTK_RADIO_BUTTON( ig->data );
+ g_object_set_data( G_OBJECT( other ), "nact-initial-state-button", button );
+ g_object_set_data( G_OBJECT( other ), "nact-initial-state-func", func );
+ }
+
+ gtk_toggle_button_set_active( button, TRUE );
+}
+
+/**
+ * nact_gtk_utils_reset_initials:
+ * @button: the #GtkToggleButton being toggled.
+ * @func: the corresponding on_toggled function.
+ * @data: data associated with the @func callback.
+ * @active: wheter @button is currently being tried to get activated.
+ *
+ * When clicking on a read-only radio button, this function ensures that
+ * the radio button is not modified. This function should be called only
+ * when the control is read-only (not editable).
+ */
+void
+nact_gtk_utils_reset_initial_state( GtkToggleButton *button, GCallback func, void *data, gboolean active )
+{
+ GtkToggleButton *initial_button;
+ GCallback initial_func;
+
+ if( active ){
+ initial_button = GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( button ), "nact-initial-state-button" ));
+ initial_func = G_CALLBACK( g_object_get_data( G_OBJECT( button ), "nact-initial-state-func" ));
+
+ g_signal_handlers_block_by_func(( gpointer ) button, func, data );
+ g_signal_handlers_block_by_func(( gpointer ) initial_button, initial_func, data );
+
+ gtk_toggle_button_set_active( button, FALSE );
+ gtk_toggle_button_set_active( initial_button, TRUE );
+
+ g_signal_handlers_unblock_by_func(( gpointer ) initial_button, initial_func, data );
+ g_signal_handlers_unblock_by_func(( gpointer ) button, func, data );
}
}
diff --git a/src/nact/nact-gtk-utils.h b/src/nact/nact-gtk-utils.h
index 70f9d81..3c5c995 100644
--- a/src/nact/nact-gtk-utils.h
+++ b/src/nact/nact-gtk-utils.h
@@ -45,6 +45,9 @@ G_BEGIN_DECLS
void nact_gtk_utils_set_editable( GtkObject *widget, gboolean editable );
+void nact_gtk_utils_set_initial_state ( GtkToggleButton *button, GCallback func );
+void nact_gtk_utils_reset_initial_state( GtkToggleButton *button, GCallback func, void *data, gboolean active );
+
/* image utilities
*/
GdkPixbuf *nact_gtk_utils_get_pixbuf( const gchar *name, GtkWidget *widget, GtkIconSize size );
diff --git a/src/nact/nact-icommand-tab.c b/src/nact/nact-icommand-tab.c
index 0322dd2..2b0501b 100644
--- a/src/nact/nact-icommand-tab.c
+++ b/src/nact/nact-icommand-tab.c
@@ -362,7 +362,7 @@ on_tab_updatable_selection_changed( NactICommandTab *instance, gint count_select
gboolean enable_tab;
GtkWidget *label_entry, *path_entry, *parameters_entry, *wdir_entry;
gchar *label, *path, *parameters, *wdir;
- GtkButton *path_button;
+ GtkButton *path_button, *wdir_button;
GtkButton *legend_button;
g_return_if_fail( NACT_IS_ICOMMAND_TAB( instance ));
@@ -422,6 +422,10 @@ on_tab_updatable_selection_changed( NactICommandTab *instance, gint count_select
gtk_widget_set_sensitive( wdir_entry, profile != NULL );
nact_gtk_utils_set_editable( GTK_OBJECT( wdir_entry ), editable );
+ wdir_button = GTK_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), "CommandWorkingDirectoryButton" ));
+ gtk_widget_set_sensitive( GTK_WIDGET( wdir_button ), profile != NULL );
+ nact_gtk_utils_set_editable( GTK_OBJECT( wdir_button ), editable );
+
st_on_selection_change = FALSE;
}
}
diff --git a/src/nact/nact-ienvironment-tab.c b/src/nact/nact-ienvironment-tab.c
index 5d25448..85c8ff9 100644
--- a/src/nact/nact-ienvironment-tab.c
+++ b/src/nact/nact-ienvironment-tab.c
@@ -404,6 +404,7 @@ on_tab_updatable_selection_changed( NactIEnvironmentTab *instance, gint count_se
GtkTreePath *path;
GtkTreeSelection *selection;
GtkWidget *always_button, *show_button, *notshow_button;
+ GtkWidget *browse_button;
GSList *desktops;
gchar *text;
@@ -453,18 +454,18 @@ on_tab_updatable_selection_changed( NactIEnvironmentTab *instance, gint count_se
gtk_toggle_button_set_inconsistent( GTK_TOGGLE_BUTTON( always_button ), context == NULL );
if( desktops && g_slist_length( desktops )){
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( show_button ), TRUE );
+ nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( show_button ), G_CALLBACK( on_only_show_toggled ));
gtk_widget_set_sensitive( GTK_WIDGET( listview ), TRUE );
} else {
desktops = context ? na_object_get_not_show_in( context ) : NULL;
if( desktops && g_slist_length( desktops )){
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( notshow_button ), TRUE );
+ nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( notshow_button ), G_CALLBACK( on_do_not_show_toggled ));
gtk_widget_set_sensitive( GTK_WIDGET( listview ), TRUE );
} else {
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( always_button ), context != NULL );
+ nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( always_button ), G_CALLBACK( on_show_always_toggled ));
gtk_widget_set_sensitive( GTK_WIDGET( listview ), FALSE );
desktops = NULL;
}
@@ -481,6 +482,9 @@ on_tab_updatable_selection_changed( NactIEnvironmentTab *instance, gint count_se
g_free( text );
nact_gtk_utils_set_editable( GTK_OBJECT( entry ), editable );
+ browse_button = base_window_get_widget( BASE_WINDOW( instance ), "TryExecButton" );
+ nact_gtk_utils_set_editable( GTK_OBJECT( browse_button ), editable );
+
entry = base_window_get_widget( BASE_WINDOW( instance ), "ShowIfRegisteredEntry" );
text = context ? na_object_get_show_if_registered( context ) : g_strdup( "" );
text = text && strlen( text ) ? text : g_strdup( "" );
@@ -502,6 +506,9 @@ on_tab_updatable_selection_changed( NactIEnvironmentTab *instance, gint count_se
g_free( text );
nact_gtk_utils_set_editable( GTK_OBJECT( entry ), editable );
+ browse_button = base_window_get_widget( BASE_WINDOW( instance ), "ShowIfRunningButton" );
+ nact_gtk_utils_set_editable( GTK_OBJECT( browse_button ), editable );
+
st_on_selection_change = FALSE;
path = gtk_tree_path_new_first();
@@ -587,9 +594,7 @@ on_show_always_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *ins
}
} else {
- g_signal_handlers_block_by_func(( gpointer ) toggle_button, on_show_always_toggled, instance );
- gtk_toggle_button_set_active( toggle_button, !active );
- g_signal_handlers_unblock_by_func(( gpointer ) toggle_button, on_show_always_toggled, instance );
+ nact_gtk_utils_reset_initial_state( toggle_button, G_CALLBACK( on_show_always_toggled ), instance, active );
}
}
}
@@ -627,9 +632,7 @@ on_only_show_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *insta
}
} else {
- g_signal_handlers_block_by_func(( gpointer ) toggle_button, on_only_show_toggled, instance );
- gtk_toggle_button_set_active( toggle_button, !active );
- g_signal_handlers_unblock_by_func(( gpointer ) toggle_button, on_only_show_toggled, instance );
+ nact_gtk_utils_reset_initial_state( toggle_button, G_CALLBACK( on_only_show_toggled ), instance, active );
}
}
}
@@ -667,9 +670,7 @@ on_do_not_show_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *ins
}
} else {
- g_signal_handlers_block_by_func(( gpointer ) toggle_button, on_do_not_show_toggled, instance );
- gtk_toggle_button_set_active( toggle_button, !active );
- g_signal_handlers_unblock_by_func(( gpointer ) toggle_button, on_do_not_show_toggled, instance );
+ nact_gtk_utils_reset_initial_state( toggle_button, G_CALLBACK( on_do_not_show_toggled ), instance, active );
}
}
}
diff --git a/src/nact/nact-iexecution-tab.c b/src/nact/nact-iexecution-tab.c
index 49bd350..bf5fd81 100644
--- a/src/nact/nact-iexecution-tab.c
+++ b/src/nact/nact-iexecution-tab.c
@@ -308,13 +308,17 @@ on_tab_updatable_selection_changed( NactIExecutionTab *instance, gint count_sele
gtk_toggle_button_set_inconsistent( GTK_TOGGLE_BUTTON( normal_toggle ), profile == NULL );
if( !strcmp( mode, "Normal" )){
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( normal_toggle ), TRUE );
+ nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( normal_toggle ), G_CALLBACK( on_normal_mode_toggled ));
+
} else if( !strcmp( mode, "Terminal" )){
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( terminal_toggle ), TRUE );
+ nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( terminal_toggle ), G_CALLBACK( on_terminal_mode_toggled ));
+
} else if( !strcmp( mode, "Embedded" )){
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( embedded_toggle ), TRUE );
+ nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( embedded_toggle ), G_CALLBACK( on_embedded_mode_toggled ));
+
} else if( !strcmp( mode, "DisplayOutput" )){
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( display_toggle ), TRUE );
+ nact_gtk_utils_set_initial_state( GTK_TOGGLE_BUTTON( display_toggle ), G_CALLBACK( on_display_mode_toggled ));
+
} else {
g_warning( "%s: unable to setup execution mode '%s'", thisfn, mode );
}
@@ -398,9 +402,7 @@ execution_mode_toggle( NactIExecutionTab *instance, GtkToggleButton *toggle_butt
}
} else {
- g_signal_handlers_block_by_func(( gpointer ) toggle_button, cb, instance );
- gtk_toggle_button_set_active( toggle_button, !active );
- g_signal_handlers_unblock_by_func(( gpointer ) toggle_button, cb, instance );
+ nact_gtk_utils_reset_initial_state( toggle_button, cb, instance, active );
}
}
}
diff --git a/src/nact/nact-iproperties-tab.c b/src/nact/nact-iproperties-tab.c
index 0a15303..cb440f7 100644
--- a/src/nact/nact-iproperties-tab.c
+++ b/src/nact/nact-iproperties-tab.c
@@ -293,6 +293,7 @@ on_tab_updatable_selection_changed( NactIPropertiesTab *instance, gint count_sel
label = item ? na_object_get_description( item ) : g_strdup( "" );
gtk_text_buffer_set_text( buffer, label, -1 );
g_free( label );
+ nact_gtk_utils_set_editable( GTK_OBJECT( label_widget ), editable );
shortcut_button = base_window_get_widget( BASE_WINDOW( instance ), "SuggestedShortcutButton" );
shortcut = item ? na_object_get_shortcut( item ) : g_strdup( "" );
diff --git a/src/nact/nact-match-list.c b/src/nact/nact-match-list.c
index 20422c6..e8659c4 100644
--- a/src/nact/nact-match-list.c
+++ b/src/nact/nact-match-list.c
@@ -545,13 +545,17 @@ on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, MatchListStr *data
}
if( event->keyval == GDK_Insert || event->keyval == GDK_KP_Insert ){
- insert_new_row( data );
- stop = TRUE;
+ if( data->editable_item ){
+ insert_new_row( data );
+ stop = TRUE;
+ }
}
if( event->keyval == GDK_Delete || event->keyval == GDK_KP_Delete ){
- delete_current_row( data );
- stop = TRUE;
+ if( data->editable_item ){
+ delete_current_row( data );
+ stop = TRUE;
+ }
}
return( stop );
@@ -579,32 +583,41 @@ on_must_match_toggled( GtkCellRendererToggle *cell_renderer, gchar *path_str, Ma
NAIContext *context;
GSList *filters;
gchar *to_remove;
+ gboolean active;
/*gboolean is_active = gtk_cell_renderer_toggle_get_active( cell_renderer );
g_debug( "%s: is_active=%s", thisfn, is_active ? "True":"False" );*/
- if( !gtk_cell_renderer_toggle_get_active( cell_renderer )){
- context = nact_main_tab_get_context( NACT_MAIN_WINDOW( data->window ), NULL );
- g_return_if_fail( NA_IS_ICONTEXT( context ));
+ active = gtk_cell_renderer_toggle_get_active( cell_renderer );
- set_match_status( path_str, TRUE, FALSE, data );
+ if( data->editable_item ){
+ if( !active ){
+ context = nact_main_tab_get_context( NACT_MAIN_WINDOW( data->window ), NULL );
+ g_return_if_fail( NA_IS_ICONTEXT( context ));
- filter = get_filter_from_path( path_str, data );
- filters = ( *data->pget )( context );
+ set_match_status( path_str, TRUE, FALSE, data );
- if( filters ){
- to_remove = g_strdup_printf( "!%s", filter );
- filters = na_core_utils_slist_remove_ascii( filters, to_remove );
- g_free( to_remove );
- }
+ filter = get_filter_from_path( path_str, data );
+ filters = ( *data->pget )( context );
- filters = g_slist_prepend( filters, g_strdup( filter ));
- ( *data->pset )( context, filters );
+ if( filters ){
+ to_remove = g_strdup_printf( "!%s", filter );
+ filters = na_core_utils_slist_remove_ascii( filters, to_remove );
+ g_free( to_remove );
+ }
- na_core_utils_slist_free( filters );
- g_free( filter );
+ filters = g_slist_prepend( filters, g_strdup( filter ));
+ ( *data->pset )( context, filters );
- g_signal_emit_by_name( G_OBJECT( data->window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, FALSE );
+ na_core_utils_slist_free( filters );
+ g_free( filter );
+
+ g_signal_emit_by_name( G_OBJECT( data->window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, FALSE );
+ }
+ } else {
+ g_signal_handlers_block_by_func(( gpointer ) cell_renderer, on_must_match_toggled, data );
+ gtk_cell_renderer_toggle_set_active( cell_renderer, !active );
+ g_signal_handlers_unblock_by_func(( gpointer ) cell_renderer, on_must_match_toggled, data );
}
}
@@ -622,31 +635,40 @@ on_must_not_match_toggled( GtkCellRendererToggle *cell_renderer, gchar *path_str
NAIContext *context;
GSList *filters;
gchar *to_add;
+ gboolean active;
/*gboolean is_active = gtk_cell_renderer_toggle_get_active( cell_renderer );
g_debug( "%s: is_active=%s", thisfn, is_active ? "True":"False" );*/
- if( !gtk_cell_renderer_toggle_get_active( cell_renderer )){
- context = nact_main_tab_get_context( NACT_MAIN_WINDOW( data->window ), NULL );
- g_return_if_fail( NA_IS_ICONTEXT( context ));
+ active = gtk_cell_renderer_toggle_get_active( cell_renderer );
- set_match_status( path_str, FALSE, TRUE, data );
+ if( data->editable_item ){
+ if( !active ){
+ context = nact_main_tab_get_context( NACT_MAIN_WINDOW( data->window ), NULL );
+ g_return_if_fail( NA_IS_ICONTEXT( context ));
- filter = get_filter_from_path( path_str, data );
- filters = ( *data->pget )( context );
+ set_match_status( path_str, FALSE, TRUE, data );
- if( filters ){
- filters = na_core_utils_slist_remove_ascii( filters, filter );
- }
+ filter = get_filter_from_path( path_str, data );
+ filters = ( *data->pget )( context );
- to_add = g_strdup_printf( "!%s", filter );
- filters = g_slist_prepend( filters, to_add );
- ( *data->pset )( context, filters );
+ if( filters ){
+ filters = na_core_utils_slist_remove_ascii( filters, filter );
+ }
- na_core_utils_slist_free( filters );
- g_free( filter );
+ to_add = g_strdup_printf( "!%s", filter );
+ filters = g_slist_prepend( filters, to_add );
+ ( *data->pset )( context, filters );
- g_signal_emit_by_name( G_OBJECT( data->window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, FALSE );
+ na_core_utils_slist_free( filters );
+ g_free( filter );
+
+ g_signal_emit_by_name( G_OBJECT( data->window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, FALSE );
+ }
+ } else {
+ g_signal_handlers_block_by_func(( gpointer ) cell_renderer, on_must_not_match_toggled, data );
+ gtk_cell_renderer_toggle_set_active( cell_renderer, !active );
+ g_signal_handlers_unblock_by_func(( gpointer ) cell_renderer, on_must_not_match_toggled, data );
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]