Commit c6991dd12f82052262599347a69254bd0a5ecc9c

Authored by Perry Werneck
1 parent fcc6a99c

Working on header bar edit dialog.

src/include/pw3270/actions.h
@@ -90,13 +90,22 @@ @@ -90,13 +90,22 @@
90 // 90 //
91 typedef GSList Pw3270ActionList; 91 typedef GSList Pw3270ActionList;
92 92
  93 + typedef enum _pw3270ActionViewFlag {
  94 + PW3270_ACTION_VIEW_FLAG_FIXED = 0, ///< @brief No special options.
  95 + PW3270_ACTION_VIEW_FLAG_ALLOW_ADD = 1, ///< @brief Allow add to target widget.
  96 + PW3270_ACTION_VIEW_ALLOW_REMOVE = 2, ///< @brief Allow remove from source widget.
  97 + PW3270_ACTION_VIEW_ALLOW_MOVE = 3 ///< @brief Allow move from source to target.
  98 + } PW3270ActionViewFlag;
  99 +
  100 +
93 GtkWidget * pw3270_action_view_new(); 101 GtkWidget * pw3270_action_view_new();
94 Pw3270ActionList * pw3270_action_list_new(GtkApplication *application); 102 Pw3270ActionList * pw3270_action_list_new(GtkApplication *application);
95 void pw3270_action_list_free(Pw3270ActionList *action_list); 103 void pw3270_action_list_free(Pw3270ActionList *action_list);
96 void pw3270_action_view_set_actions(GtkWidget *view, Pw3270ActionList *list); 104 void pw3270_action_view_set_actions(GtkWidget *view, Pw3270ActionList *list);
97 void pw3270_action_view_move_selected(GtkWidget *from, GtkWidget *to); 105 void pw3270_action_view_move_selected(GtkWidget *from, GtkWidget *to);
98 - void pw3270_action_view_append(GtkWidget *widget, const gchar *label, GdkPixbuf *pixbuf, const gchar *action_name, gint flags); 106 + void pw3270_action_view_append(GtkWidget *widget, const gchar *label, GdkPixbuf *pixbuf, const gchar *action_name, const PW3270ActionViewFlag flags);
99 gchar * pw3270_action_view_get_action_names(GtkWidget *widget); 107 gchar * pw3270_action_view_get_action_names(GtkWidget *widget);
  108 + GtkWidget * pw3270_action_view_extract_button_new(GtkWidget *widget, const gchar *icon_name);
100 109
101 Pw3270ActionList * pw3270_action_list_move_action(Pw3270ActionList *action_list, const gchar *action_name, GtkWidget *view); 110 Pw3270ActionList * pw3270_action_list_move_action(Pw3270ActionList *action_list, const gchar *action_name, GtkWidget *view);
102 111
src/objects/actions/view.c
@@ -106,7 +106,7 @@ @@ -106,7 +106,7 @@
106 return view; 106 return view;
107 } 107 }
108 108
109 - void pw3270_action_view_append(GtkWidget *widget, const gchar *label, GdkPixbuf *pixbuf, const gchar *action_name, gint flags) { 109 + void pw3270_action_view_append(GtkWidget *widget, const gchar *label, GdkPixbuf *pixbuf, const gchar *action_name, PW3270ActionViewFlag flags) {
110 110
111 GtkListStore * store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(widget))); 111 GtkListStore * store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(widget)));
112 112
@@ -118,7 +118,7 @@ @@ -118,7 +118,7 @@
118 COLUMN_PIXBUF, pixbuf, 118 COLUMN_PIXBUF, pixbuf,
119 COLUMN_LABEL, label, 119 COLUMN_LABEL, label,
120 COLUMN_ACTION_NAME, action_name, 120 COLUMN_ACTION_NAME, action_name,
121 - COLUMN_FLAGS, flags, 121 + COLUMN_FLAGS, (gint) flags,
122 -1 122 -1
123 ); 123 );
124 124
@@ -169,10 +169,10 @@ @@ -169,10 +169,10 @@
169 gtk_list_store_set( 169 gtk_list_store_set(
170 store, 170 store,
171 &iter, 171 &iter,
172 - COLUMN_PIXBUF, element->pixbuf,  
173 - COLUMN_LABEL, (label ? label : g_action_get_name(element->action)), 172 + COLUMN_PIXBUF, element->pixbuf,
  173 + COLUMN_LABEL, (label ? label : g_action_get_name(element->action)),
174 COLUMN_ACTION_NAME, element->name, 174 COLUMN_ACTION_NAME, element->name,
175 - COLUMN_FLAGS, 3, 175 + COLUMN_FLAGS, (gint) PW3270_ACTION_VIEW_ALLOW_MOVE,
176 -1 176 -1
177 ); 177 );
178 178
@@ -338,7 +338,7 @@ @@ -338,7 +338,7 @@
338 gint flags = g_value_get_int(&vFlags); 338 gint flags = g_value_get_int(&vFlags);
339 g_value_unset(&vFlags); 339 g_value_unset(&vFlags);
340 340
341 - if(flags & 1) { 341 + if(flags & PW3270_ACTION_VIEW_FLAG_ALLOW_ADD) {
342 342
343 // Add on target widget. 343 // Add on target widget.
344 GValue pixbuf = G_VALUE_INIT; 344 GValue pixbuf = G_VALUE_INIT;
@@ -369,7 +369,7 @@ @@ -369,7 +369,7 @@
369 369
370 } 370 }
371 371
372 - if(flags & 2) { 372 + if(flags & PW3270_ACTION_VIEW_ALLOW_REMOVE) {
373 373
374 // Remove from source widget. 374 // Remove from source widget.
375 gtk_list_store_remove(GTK_LIST_STORE(fromModel), &iter); 375 gtk_list_store_remove(GTK_LIST_STORE(fromModel), &iter);
@@ -411,3 +411,24 @@ @@ -411,3 +411,24 @@
411 return g_string_free(str,FALSE); 411 return g_string_free(str,FALSE);
412 } 412 }
413 413
  414 + static void selection_changed(GtkTreeSelection *selection, GtkWidget *button) {
  415 + gtk_widget_set_sensitive(button,gtk_tree_selection_count_selected_rows(selection) > 0);
  416 + }
  417 +
  418 + GtkWidget * pw3270_action_view_extract_button_new(GtkWidget *widget, const gchar *icon_name) {
  419 +
  420 + GtkWidget * button = gtk_button_new_from_icon_name(icon_name,GTK_ICON_SIZE_DND);
  421 +
  422 + gtk_widget_set_focus_on_click(button,FALSE);
  423 + gtk_button_set_relief(GTK_BUTTON(button),GTK_RELIEF_NONE);
  424 + gtk_widget_set_sensitive(button,FALSE);
  425 +
  426 + g_signal_connect(
  427 + gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)),
  428 + "changed",
  429 + G_CALLBACK(selection_changed),
  430 + button
  431 + );
  432 +
  433 + return button;
  434 + }
src/objects/window/header-settings.c
@@ -72,10 +72,6 @@ @@ -72,10 +72,6 @@
72 72
73 /*--[ Implement ]------------------------------------------------------------------------------------*/ 73 /*--[ Implement ]------------------------------------------------------------------------------------*/
74 74
75 - static void selection_changed(GtkTreeSelection *selection, GtkWidget *button) {  
76 - gtk_widget_set_sensitive(button,gtk_tree_selection_count_selected_rows(selection) > 0);  
77 - }  
78 -  
79 GtkWidget * pw3270_header_settings_new() { 75 GtkWidget * pw3270_header_settings_new() {
80 76
81 size_t ix; 77 size_t ix;
@@ -149,53 +145,13 @@ @@ -149,53 +145,13 @@
149 145
150 // Create buttons 146 // Create buttons
151 { 147 {
152 - static const gchar * icon_names[] = {  
153 - "go-next",  
154 - "go-previous",  
155 - "go-next",  
156 - "go-previous" 148 + GtkWidget *buttons[] = {
  149 + pw3270_action_view_extract_button_new(page->views[0],"go-next"),
  150 + pw3270_action_view_extract_button_new(page->views[2],"go-previous"),
  151 + pw3270_action_view_extract_button_new(page->views[1],"go-next"),
  152 + pw3270_action_view_extract_button_new(page->views[2],"go-previous")
157 }; 153 };
158 154
159 - GtkWidget *buttons[G_N_ELEMENTS(icon_names)];  
160 -  
161 - for(ix = 0; ix < G_N_ELEMENTS(icon_names); ix++) {  
162 - buttons[ix] = gtk_button_new_from_icon_name(icon_names[ix],GTK_ICON_SIZE_DND);  
163 -  
164 - gtk_widget_set_focus_on_click(buttons[ix],FALSE);  
165 - gtk_button_set_relief(GTK_BUTTON(buttons[ix]),GTK_RELIEF_NONE);  
166 - gtk_widget_set_sensitive(buttons[ix],FALSE);  
167 -  
168 - }  
169 -  
170 - g_signal_connect(  
171 - gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[0])),  
172 - "changed",  
173 - G_CALLBACK(selection_changed),  
174 - buttons[0]  
175 - );  
176 -  
177 - g_signal_connect(  
178 - gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[1])),  
179 - "changed",  
180 - G_CALLBACK(selection_changed),  
181 - buttons[2]  
182 - );  
183 -  
184 - g_signal_connect(  
185 - gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[2])),  
186 - "changed",  
187 - G_CALLBACK(selection_changed),  
188 - buttons[1]  
189 - );  
190 -  
191 - g_signal_connect(  
192 - gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[2])),  
193 - "changed",  
194 - G_CALLBACK(selection_changed),  
195 - buttons[3]  
196 - );  
197 -  
198 -  
199 for(ix = 0; ix < 2; ix++) { 155 for(ix = 0; ix < 2; ix++) {
200 GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); 156 GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL);
201 gtk_widget_set_hexpand(box,FALSE); 157 gtk_widget_set_hexpand(box,FALSE);
@@ -242,7 +198,37 @@ @@ -242,7 +198,37 @@
242 gchar ** actions = g_strsplit(views[view],",",-1); 198 gchar ** actions = g_strsplit(views[view],",",-1);
243 199
244 for(action = 0; actions[action];action++) { 200 for(action = 0; actions[action];action++) {
245 - action_list = pw3270_action_list_move_action(action_list,actions[action],page->views[view]); 201 +
  202 + if(g_str_has_prefix(actions[action],"menu.")) {
  203 +
  204 + GError *error = NULL;
  205 + g_autofree gchar * icon_name = g_strconcat(actions[action]+5,"-symbolic",NULL);
  206 +
  207 + GdkPixbuf * pixbuf = gtk_icon_theme_load_icon(
  208 + gtk_icon_theme_get_default(),
  209 + icon_name,
  210 + GTK_ICON_SIZE_MENU,
  211 + GTK_ICON_LOOKUP_GENERIC_FALLBACK,
  212 + &error
  213 + );
  214 +
  215 + if(error) {
  216 + g_warning(error->message);
  217 + g_error_free(error);
  218 + error = NULL;
  219 + }
  220 +
  221 + pw3270_action_view_append(
  222 + page->views[view], // Widget
  223 + _( "System Menu" ), // label
  224 + pixbuf, // Icon
  225 + actions[action], // Action name
  226 + PW3270_ACTION_VIEW_FLAG_FIXED // Fixed item
  227 + );
  228 +
  229 + } else {
  230 + action_list = pw3270_action_list_move_action(action_list,actions[action],page->views[view]);
  231 + }
246 } 232 }
247 233
248 g_strfreev(actions); 234 g_strfreev(actions);
src/objects/window/terminal.c
@@ -44,11 +44,11 @@ @@ -44,11 +44,11 @@
44 #include <v3270/print.h> 44 #include <v3270/print.h>
45 #include <lib3270/os.h> 45 #include <lib3270/os.h>
46 46
47 - static void destroy(GtkWidget *terminal, gpointer GNUC_UNUSED(dunno)) { 47 + static void destroy(GtkWidget *terminal, gpointer G_GNUC_UNUSED(dunno)) {
48 v3270_key_file_close(terminal); 48 v3270_key_file_close(terminal);
49 } 49 }
50 50
51 - static void toggle_changed(GtkWidget *widget, G_GNUC_UNUSED LIB3270_TOGGLE_ID toggle_id, gboolean toggle_state, const gchar *toggle_name, gpointer GNUC_UNUSED(dunno)) { 51 + static void toggle_changed(GtkWidget *widget, LIB3270_TOGGLE_ID G_GNUC_UNUSED(toggle_id), gboolean toggle_state, const gchar *toggle_name, gpointer G_GNUC_UNUSED(dunno)) {
52 debug("%s(%s)=%s",__FUNCTION__,toggle_name,toggle_state ? "ON" : "OFF"); 52 debug("%s(%s)=%s",__FUNCTION__,toggle_name,toggle_state ? "ON" : "OFF");
53 v3270_key_file_set_boolean(widget,"terminal",toggle_name,toggle_state); 53 v3270_key_file_set_boolean(widget,"terminal",toggle_name,toggle_state);
54 } 54 }