diff --git a/src/objects/actions/view.c b/src/objects/actions/view.c index 4d4c0a4..2929a01 100644 --- a/src/objects/actions/view.c +++ b/src/objects/actions/view.c @@ -411,8 +411,31 @@ return g_string_free(str,FALSE); } + static void check_4_sensitive(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gboolean *sensitive) { + + GValue value = { 0, }; + gtk_tree_model_get_value(model,iter,COLUMN_FLAGS,&value); + + if(!(g_value_get_int(&value) & PW3270_ACTION_VIEW_FLAG_ALLOW_ADD)) + *sensitive = FALSE; + + g_value_unset(&value); + + } + static void selection_changed(GtkTreeSelection *selection, GtkWidget *button) { - gtk_widget_set_sensitive(button,gtk_tree_selection_count_selected_rows(selection) > 0); + + if(!gtk_tree_selection_count_selected_rows(selection)) { + gtk_widget_set_sensitive(button,FALSE); + return; + } + + gboolean sensitive = TRUE; + + // Scan selected rows + gtk_tree_selection_selected_foreach(selection,(GtkTreeSelectionForeachFunc) check_4_sensitive,&sensitive); + gtk_widget_set_sensitive(button,sensitive); + } GtkWidget * pw3270_action_view_extract_button_new(GtkWidget *widget, const gchar *icon_name) { diff --git a/src/objects/toolbar/settings.c b/src/objects/toolbar/settings.c index 42de61b..8b4223c 100644 --- a/src/objects/toolbar/settings.c +++ b/src/objects/toolbar/settings.c @@ -146,30 +146,12 @@ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(gtk_tree_view_get_model(GTK_TREE_VIEW(page->views[1]))), GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING); // Create buttons - static const gchar * icon_names[G_N_ELEMENTS(page->buttons)] = { - "go-next", - "go-previous" - }; - GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); gtk_widget_set_hexpand(box,FALSE); gtk_widget_set_vexpand(box,FALSE); - for(ix = 0; ix < G_N_ELEMENTS(icon_names); ix++) { - page->buttons[ix] = gtk_button_new_from_icon_name(icon_names[ix],GTK_ICON_SIZE_DND); - - gtk_widget_set_focus_on_click(page->buttons[ix],FALSE); - gtk_button_set_relief(GTK_BUTTON(page->buttons[ix]),GTK_RELIEF_NONE); - gtk_widget_set_sensitive(page->buttons[ix],FALSE); - - g_signal_connect( - gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[ix])), - "changed", - G_CALLBACK(selection_changed), - page->buttons[ix] - ); - - } + page->buttons[0] = pw3270_action_view_extract_button_new(page->views[0],"go-next"), + page->buttons[1] = pw3270_action_view_extract_button_new(page->views[1],"go-previous"), gtk_box_pack_start(GTK_BOX(box),page->buttons[0],FALSE,FALSE,0); gtk_box_pack_end(GTK_BOX(box),page->buttons[1],FALSE,FALSE,0); diff --git a/src/objects/window/header-settings.c b/src/objects/window/header-settings.c index 0d74f9c..e117f90 100644 --- a/src/objects/window/header-settings.c +++ b/src/objects/window/header-settings.c @@ -72,6 +72,26 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ + static void remove_from_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) { + debug("%s(%p)",__FUNCTION__,settings); + pw3270_action_view_move_selected(settings->views[0],settings->views[2]); + } + + static void add_to_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) { + debug("%s(%p)",__FUNCTION__,settings); + pw3270_action_view_move_selected(settings->views[2],settings->views[0]); + } + + static void remove_from_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) { + debug("%s(%p)",__FUNCTION__,settings); + pw3270_action_view_move_selected(settings->views[1],settings->views[2]); + } + + static void add_to_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) { + debug("%s(%p)",__FUNCTION__,settings); + pw3270_action_view_move_selected(settings->views[2],settings->views[1]); + } + GtkWidget * pw3270_header_settings_new() { size_t ix; @@ -152,6 +172,35 @@ pw3270_action_view_extract_button_new(page->views[2],"go-previous") }; + g_signal_connect( + buttons[0], + "clicked", + G_CALLBACK(remove_from_left), + page + ); + + g_signal_connect( + buttons[1], + "clicked", + G_CALLBACK(add_to_left), + page + ); + + g_signal_connect( + buttons[2], + "clicked", + G_CALLBACK(remove_from_right), + page + ); + + g_signal_connect( + buttons[3], + "clicked", + G_CALLBACK(add_to_right), + page + ); + + for(ix = 0; ix < 2; ix++) { GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); gtk_widget_set_hexpand(box,FALSE); -- libgit2 0.21.2