Commit b0c918c602767ad95ee02cf6a4233e3099220c11
1 parent
c6991dd1
Exists in
master
and in
3 other branches
Implementing add/remove from header bar blocks.
Showing
3 changed files
with
75 additions
and
21 deletions
Show diff stats
src/objects/actions/view.c
| @@ -411,8 +411,31 @@ | @@ -411,8 +411,31 @@ | ||
| 411 | return g_string_free(str,FALSE); | 411 | return g_string_free(str,FALSE); |
| 412 | } | 412 | } |
| 413 | 413 | ||
| 414 | + static void check_4_sensitive(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gboolean *sensitive) { | ||
| 415 | + | ||
| 416 | + GValue value = { 0, }; | ||
| 417 | + gtk_tree_model_get_value(model,iter,COLUMN_FLAGS,&value); | ||
| 418 | + | ||
| 419 | + if(!(g_value_get_int(&value) & PW3270_ACTION_VIEW_FLAG_ALLOW_ADD)) | ||
| 420 | + *sensitive = FALSE; | ||
| 421 | + | ||
| 422 | + g_value_unset(&value); | ||
| 423 | + | ||
| 424 | + } | ||
| 425 | + | ||
| 414 | static void selection_changed(GtkTreeSelection *selection, GtkWidget *button) { | 426 | static void selection_changed(GtkTreeSelection *selection, GtkWidget *button) { |
| 415 | - gtk_widget_set_sensitive(button,gtk_tree_selection_count_selected_rows(selection) > 0); | 427 | + |
| 428 | + if(!gtk_tree_selection_count_selected_rows(selection)) { | ||
| 429 | + gtk_widget_set_sensitive(button,FALSE); | ||
| 430 | + return; | ||
| 431 | + } | ||
| 432 | + | ||
| 433 | + gboolean sensitive = TRUE; | ||
| 434 | + | ||
| 435 | + // Scan selected rows | ||
| 436 | + gtk_tree_selection_selected_foreach(selection,(GtkTreeSelectionForeachFunc) check_4_sensitive,&sensitive); | ||
| 437 | + gtk_widget_set_sensitive(button,sensitive); | ||
| 438 | + | ||
| 416 | } | 439 | } |
| 417 | 440 | ||
| 418 | GtkWidget * pw3270_action_view_extract_button_new(GtkWidget *widget, const gchar *icon_name) { | 441 | GtkWidget * pw3270_action_view_extract_button_new(GtkWidget *widget, const gchar *icon_name) { |
src/objects/toolbar/settings.c
| @@ -146,30 +146,12 @@ | @@ -146,30 +146,12 @@ | ||
| 146 | 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); | 146 | 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); |
| 147 | 147 | ||
| 148 | // Create buttons | 148 | // Create buttons |
| 149 | - static const gchar * icon_names[G_N_ELEMENTS(page->buttons)] = { | ||
| 150 | - "go-next", | ||
| 151 | - "go-previous" | ||
| 152 | - }; | ||
| 153 | - | ||
| 154 | GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); | 149 | GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); |
| 155 | gtk_widget_set_hexpand(box,FALSE); | 150 | gtk_widget_set_hexpand(box,FALSE); |
| 156 | gtk_widget_set_vexpand(box,FALSE); | 151 | gtk_widget_set_vexpand(box,FALSE); |
| 157 | 152 | ||
| 158 | - for(ix = 0; ix < G_N_ELEMENTS(icon_names); ix++) { | ||
| 159 | - page->buttons[ix] = gtk_button_new_from_icon_name(icon_names[ix],GTK_ICON_SIZE_DND); | ||
| 160 | - | ||
| 161 | - gtk_widget_set_focus_on_click(page->buttons[ix],FALSE); | ||
| 162 | - gtk_button_set_relief(GTK_BUTTON(page->buttons[ix]),GTK_RELIEF_NONE); | ||
| 163 | - gtk_widget_set_sensitive(page->buttons[ix],FALSE); | ||
| 164 | - | ||
| 165 | - g_signal_connect( | ||
| 166 | - gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[ix])), | ||
| 167 | - "changed", | ||
| 168 | - G_CALLBACK(selection_changed), | ||
| 169 | - page->buttons[ix] | ||
| 170 | - ); | ||
| 171 | - | ||
| 172 | - } | 153 | + page->buttons[0] = pw3270_action_view_extract_button_new(page->views[0],"go-next"), |
| 154 | + page->buttons[1] = pw3270_action_view_extract_button_new(page->views[1],"go-previous"), | ||
| 173 | 155 | ||
| 174 | gtk_box_pack_start(GTK_BOX(box),page->buttons[0],FALSE,FALSE,0); | 156 | gtk_box_pack_start(GTK_BOX(box),page->buttons[0],FALSE,FALSE,0); |
| 175 | gtk_box_pack_end(GTK_BOX(box),page->buttons[1],FALSE,FALSE,0); | 157 | gtk_box_pack_end(GTK_BOX(box),page->buttons[1],FALSE,FALSE,0); |
src/objects/window/header-settings.c
| @@ -72,6 +72,26 @@ | @@ -72,6 +72,26 @@ | ||
| 72 | 72 | ||
| 73 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 73 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 74 | 74 | ||
| 75 | + static void remove_from_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) { | ||
| 76 | + debug("%s(%p)",__FUNCTION__,settings); | ||
| 77 | + pw3270_action_view_move_selected(settings->views[0],settings->views[2]); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + static void add_to_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) { | ||
| 81 | + debug("%s(%p)",__FUNCTION__,settings); | ||
| 82 | + pw3270_action_view_move_selected(settings->views[2],settings->views[0]); | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + static void remove_from_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) { | ||
| 86 | + debug("%s(%p)",__FUNCTION__,settings); | ||
| 87 | + pw3270_action_view_move_selected(settings->views[1],settings->views[2]); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + static void add_to_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) { | ||
| 91 | + debug("%s(%p)",__FUNCTION__,settings); | ||
| 92 | + pw3270_action_view_move_selected(settings->views[2],settings->views[1]); | ||
| 93 | + } | ||
| 94 | + | ||
| 75 | GtkWidget * pw3270_header_settings_new() { | 95 | GtkWidget * pw3270_header_settings_new() { |
| 76 | 96 | ||
| 77 | size_t ix; | 97 | size_t ix; |
| @@ -152,6 +172,35 @@ | @@ -152,6 +172,35 @@ | ||
| 152 | pw3270_action_view_extract_button_new(page->views[2],"go-previous") | 172 | pw3270_action_view_extract_button_new(page->views[2],"go-previous") |
| 153 | }; | 173 | }; |
| 154 | 174 | ||
| 175 | + g_signal_connect( | ||
| 176 | + buttons[0], | ||
| 177 | + "clicked", | ||
| 178 | + G_CALLBACK(remove_from_left), | ||
| 179 | + page | ||
| 180 | + ); | ||
| 181 | + | ||
| 182 | + g_signal_connect( | ||
| 183 | + buttons[1], | ||
| 184 | + "clicked", | ||
| 185 | + G_CALLBACK(add_to_left), | ||
| 186 | + page | ||
| 187 | + ); | ||
| 188 | + | ||
| 189 | + g_signal_connect( | ||
| 190 | + buttons[2], | ||
| 191 | + "clicked", | ||
| 192 | + G_CALLBACK(remove_from_right), | ||
| 193 | + page | ||
| 194 | + ); | ||
| 195 | + | ||
| 196 | + g_signal_connect( | ||
| 197 | + buttons[3], | ||
| 198 | + "clicked", | ||
| 199 | + G_CALLBACK(add_to_right), | ||
| 200 | + page | ||
| 201 | + ); | ||
| 202 | + | ||
| 203 | + | ||
| 155 | for(ix = 0; ix < 2; ix++) { | 204 | for(ix = 0; ix < 2; ix++) { |
| 156 | GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); | 205 | GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); |
| 157 | gtk_widget_set_hexpand(box,FALSE); | 206 | gtk_widget_set_hexpand(box,FALSE); |