Commit 11b02b6b55f91e802a81d38c4e8d29dd56a64ec9

Authored by Perry Werneck
1 parent 3d803db4
Exists in master and in 1 other branch develop

Host select widget is now a V3270Settings object.

src/dialogs/commondialog.c
... ... @@ -28,6 +28,7 @@
28 28 */
29 29  
30 30 #include "private.h"
  31 + #include <v3270/dialogs.h>
31 32  
32 33 /*--[ Implement ]------------------------------------------------------------------------------------*/
33 34  
... ... @@ -84,12 +85,25 @@ LIB3270_EXPORT GtkWidget * v3270_dialog_new(GtkWidget *widget, const gchar *titl
84 85 gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
85 86 }
86 87  
  88 + gtk_box_set_spacing(
  89 + GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
  90 + 18
  91 + );
  92 +
  93 + v3270_dialog_setup(dialog,title,apply);
  94 +
  95 + return dialog;
  96 +}
  97 +
  98 +LIB3270_EXPORT void v3270_dialog_setup(GtkWidget *dialog, const gchar *title, const gchar *apply)
  99 +{
  100 +
87 101 #if GTK_CHECK_VERSION(3,12,0)
88 102  
89   - if(use_header)
90   - {
91   - GtkWidget * header = gtk_dialog_get_header_bar(GTK_DIALOG(dialog));
  103 + GtkWidget * header = gtk_dialog_get_header_bar(GTK_DIALOG(dialog));
92 104  
  105 + if(header)
  106 + {
93 107 gtk_header_bar_set_title(GTK_HEADER_BAR(header),title);
94 108 gtk_header_bar_pack_start(GTK_HEADER_BAR(header),v3270_dialog_button_new(dialog,_("_Cancel"),G_CALLBACK(v3270_dialog_cancel)));
95 109 gtk_header_bar_pack_end(GTK_HEADER_BAR(header),v3270_dialog_button_new(dialog,apply,G_CALLBACK(v3270_dialog_apply)));
... ... @@ -98,11 +112,6 @@ LIB3270_EXPORT GtkWidget * v3270_dialog_new(GtkWidget *widget, const gchar *titl
98 112 {
99 113 gtk_window_set_title(GTK_WINDOW(dialog), title);
100 114  
101   - gtk_box_set_spacing(
102   - GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
103   - 18
104   - );
105   -
106 115 gtk_dialog_add_buttons(
107 116 GTK_DIALOG (dialog),
108 117 _("_Cancel"), GTK_RESPONSE_CANCEL,
... ... @@ -129,7 +138,6 @@ LIB3270_EXPORT GtkWidget * v3270_dialog_new(GtkWidget *widget, const gchar *titl
129 138  
130 139 #endif // GTK 3.12
131 140  
132   - return dialog;
133 141 }
134 142  
135 143 #if GTK_CHECK_VERSION(3,12,0)
... ...
src/dialogs/hostselect.c
... ... @@ -30,6 +30,7 @@
30 30 #include "private.h"
31 31 #include <hostselect.h>
32 32 #include <v3270/dialogs.h>
  33 + #include <v3270/settings.h>
33 34 #include <lib3270/log.h>
34 35  
35 36 /*--[ Widget definition ]----------------------------------------------------------------------------*/
... ... @@ -57,9 +58,7 @@
57 58  
58 59 struct _V3270HostSelectWidget
59 60 {
60   - GtkGrid parent;
61   -
62   - LIB3270_HOST_TYPE type; /**< @brief Connect option */
  61 + V3270Settings parent;
63 62  
64 63 struct
65 64 {
... ... @@ -69,180 +68,86 @@
69 68  
70 69 } input;
71 70  
72   - unsigned short colors; /**< @brief Number of colors */
73   - H3270 * hSession; /**< @brief lib3270's session handle */
74   -
75 71 };
76 72  
77 73 struct _V3270HostSelectWidgetClass
78 74 {
79   - GtkGridClass parent_class;
  75 + V3270SettingsClass parent_class;
80 76 };
81 77  
82 78  
83   - G_DEFINE_TYPE(V3270HostSelectWidget, V3270HostSelectWidget, GTK_TYPE_GRID);
  79 + G_DEFINE_TYPE(V3270HostSelectWidget, V3270HostSelectWidget, GTK_TYPE_V3270_SETTINGS);
84 80  
85 81 /*--[ Implement ]------------------------------------------------------------------------------------*/
86 82  
87   -static void V3270HostSelectWidget_class_init(G_GNUC_UNUSED V3270HostSelectWidgetClass *klass)
88   -{
89   -}
90   -
91   -static void systype_changed(GtkComboBox *widget, V3270HostSelectWidget *dialog)
  83 +static void apply(GtkWidget *w, GtkWidget *terminal)
92 84 {
93   - GValue value = { 0, };
94   - GtkTreeIter iter;
95   -
96   - if(!gtk_combo_box_get_active_iter(widget,&iter))
97   - return;
  85 + debug("V3270HostSelectWidget::%s",__FUNCTION__);
98 86  
99   - gtk_tree_model_get_value(gtk_combo_box_get_model(widget),&iter,1,&value);
100   -
101   - dialog->type = g_value_get_int(&value);
102   -
103   -}
104   -
105   -static void colortable_changed(GtkComboBox *widget, V3270HostSelectWidget *dialog)
106   -{
107   - GValue value = { 0, };
108   - GtkTreeIter iter;
109   -
110   - if(!gtk_combo_box_get_active_iter(widget,&iter))
111   - return;
112   -
113   - gtk_tree_model_get_value(gtk_combo_box_get_model(widget),&iter,1,&value);
114   -
115   - dialog->colors = g_value_get_int(&value);
116   -
117   -}
118   -
119   -static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
120   -{
121   - int f;
122   -
123   - // https://developer.gnome.org/hig/stable/visual-layout.html.en
124   - gtk_grid_set_row_spacing(GTK_GRID(widget),6);
125   - gtk_grid_set_column_spacing(GTK_GRID(widget),12);
  87 + V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w);
  88 + H3270 *hSession = v3270_get_session(terminal);
126 89  
127   - // Entry fields
128   - GtkWidget * label[ENTRY_COUNT] =
  90 + // Apply URL
129 91 {
130   - gtk_label_new_with_mnemonic( _( "_Host" ) ),
131   - gtk_label_new_with_mnemonic( _( "_Service" ) )
132   - };
  92 + g_autofree gchar * url =
  93 + g_strconcat(
  94 + (gtk_toggle_button_get_active(widget->input.ssl) ? "tn3270s://" : "tn3270://"),
  95 + gtk_entry_get_text(widget->input.entry[ENTRY_HOSTNAME]),
  96 + ":",
  97 + gtk_entry_get_text(widget->input.entry[ENTRY_SRVCNAME]),
  98 + NULL
  99 + );
  100 +
  101 + debug("URL=[%s]",url);
  102 + lib3270_set_url(hSession,url);
133 103  
134   - for(f=0;f<ENTRY_COUNT;f++)
135   - {
136   - widget->input.entry[f] = GTK_ENTRY(gtk_entry_new());
137   - gtk_widget_set_halign(label[f],GTK_ALIGN_END);
138   - gtk_label_set_mnemonic_widget(GTK_LABEL(label[f]),GTK_WIDGET(widget->input.entry[f]));
139 104 }
140 105  
141   - gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),_("Address or name of the host to connect.") );
142   - gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.entry[ENTRY_SRVCNAME]),_("Port or service name (empty for \"telnet\").") );
143   -
144   - gtk_entry_set_max_length(widget->input.entry[ENTRY_HOSTNAME],0xFF);
145   - gtk_entry_set_width_chars(widget->input.entry[ENTRY_HOSTNAME],50);
146   -
147   - gtk_entry_set_max_length(widget->input.entry[ENTRY_SRVCNAME],6);
148   - gtk_entry_set_width_chars(widget->input.entry[ENTRY_SRVCNAME],7);
149   -
150   - gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet");
151   -
152   - gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),TRUE);
153   -
154   - gtk_grid_attach(GTK_GRID(widget),label[0],0,0,1,1);
155   - gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),1,0,5,1);
156   -
157   - gtk_grid_attach(GTK_GRID(widget),label[1],0,1,1,1);
158   - gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.entry[ENTRY_SRVCNAME]),1,1,1,1);
159   -
160   - // gtk_widget_set_hexpand(GTK_WIDGET(widget->input.ssl),TRUE);
161   -
162   - // SSL checkbox
  106 + // Apply Host type
163 107 {
164   - widget->input.ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." )));
165   - gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.ssl),_( "Check for SSL secure connection." ));
166   -
167   - gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.ssl),3,1,1,1);
168   - }
  108 + GtkTreeIter iter;
169 109  
170   - // Host type
171   - {
172   - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT);
173   - GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
  110 + if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget->input.combo[0]), &iter))
  111 + {
  112 + GValue value = { 0, };
  113 + gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget->input.combo[0])),&iter,1,&value);
174 114  
175   - widget->input.combo[0] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model));
  115 + lib3270_set_host_type(hSession,g_value_get_int(&value));
176 116  
177   - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, TRUE);
178   - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, "text", 0, NULL);
  117 + g_value_unset(&value);
179 118  
180   - const LIB3270_HOST_TYPE_ENTRY *entry = lib3270_get_option_list();
181   - for(f=0;entry[f].name != NULL;f++)
182   - {
183   - GtkTreeIter iter;
184   - gtk_list_store_append((GtkListStore *) model,&iter);
185   - gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(entry[f].description), 1, entry[f].type, -1);
186 119 }
187 120  
188   - g_signal_connect(G_OBJECT(widget->input.combo[0]),"changed",G_CALLBACK(systype_changed),widget);
189   -
190 121 }
191 122  
192   - // Color table
  123 + // Apply color type
193 124 {
194   - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT);
195   - GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
196   -
197   - widget->input.combo[1] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model));
  125 + GtkTreeIter iter;
198 126  
199   - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, TRUE);
200   - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, "text", 0, NULL);
201   -
202   - for(f=0;f< (int) G_N_ELEMENTS(colortable);f++)
  127 + if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget->input.combo[1]), &iter))
203 128 {
204   - GtkTreeIter iter;
205   - gtk_list_store_append((GtkListStore *) model,&iter);
206   - gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(colortable[f].description), 1, colortable[f].colors, -1);
207   - }
208   -
209   - g_signal_connect(G_OBJECT(widget->input.combo[1]),"changed",G_CALLBACK(colortable_changed),widget);
210   -
211   - }
212   -
213   - // Host options
214   - for(f=0;f< (int) G_N_ELEMENTS(comboLabel);f++)
215   - {
216   - GtkWidget *label = gtk_label_new_with_mnemonic(gettext(comboLabel[f]));
217   - gtk_widget_set_halign(label,GTK_ALIGN_END);
218   - gtk_grid_attach(GTK_GRID(widget),label,0,f+2,1,1);
219   - gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.combo[f]),1,f+2,2,1);
220   - }
  129 + GValue value = { 0, };
221 130  
222   - gtk_widget_show_all(GTK_WIDGET(widget));
  131 + gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget->input.combo[1])),&iter,1,&value);
223 132  
224   -}
  133 + lib3270_set_color_type(hSession,g_value_get_int(&value));
225 134  
226   -LIB3270_EXPORT GtkWidget * v3270_host_select_new(GtkWidget *widget)
227   -{
228   - g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
  135 + g_value_unset(&value);
229 136  
230   - GtkWidget * selector = GTK_WIDGET(g_object_new(GTK_TYPE_V3270HostSelectWidget, NULL));
  137 + }
231 138  
232   - v3270_host_select_set_session(selector,widget);
  139 + }
233 140  
234   - return selector;
235 141 }
236 142  
237   -LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *session)
  143 +static void load(GtkWidget *w, GtkWidget *terminal)
238 144 {
239   - g_return_if_fail(GTK_IS_V3270(session));
240   - g_return_if_fail(GTK_IS_V3270HostSelectWidget(w));
  145 + debug("V3270HostSelectWidget::%s",__FUNCTION__);
241 146  
  147 + H3270 *hSession = v3270_get_session(terminal);
242 148 V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w);
243   - widget->hSession = v3270_get_session(session);
244 149  
245   - const gchar * u = lib3270_get_url(widget->hSession);
  150 + const gchar * u = lib3270_get_url(hSession);
246 151  
247 152 if(u)
248 153 {
... ... @@ -250,6 +155,8 @@ LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *sessi
250 155 g_autofree gchar * url = g_strdup(u);
251 156 debug("URL=[%s]",url);
252 157  
  158 + gtk_toggle_button_set_active(widget->input.ssl,g_str_has_prefix(u,"tn3270s"));
  159 +
253 160 gchar *hostname = strstr(url,"://");
254 161 if(!hostname)
255 162 {
... ... @@ -277,9 +184,7 @@ LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *sessi
277 184  
278 185 }
279 186  
280   - LIB3270_HOST_TYPE type = lib3270_get_host_type(widget->hSession);
281   -
282   - gtk_toggle_button_set_active(widget->input.ssl,lib3270_get_secure_host(widget->hSession) != 0);
  187 + LIB3270_HOST_TYPE type = lib3270_get_host_type(hSession);
283 188  
284 189 // Set host type
285 190 {
... ... @@ -308,7 +213,7 @@ LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *sessi
308 213 {
309 214 GtkTreeModel * model = gtk_combo_box_get_model(widget->input.combo[1]);
310 215 GtkTreeIter iter;
311   - int colors = (int) lib3270_get_color_type(widget->hSession);
  216 + int colors = (int) lib3270_get_color_type(hSession);
312 217  
313 218 if(gtk_tree_model_get_iter_first(model,&iter))
314 219 {
... ... @@ -328,9 +233,115 @@ LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *sessi
328 233 }
329 234 }
330 235  
331   - // Just in case
332   - widget->type = type;
  236 +}
  237 +
333 238  
  239 +static void V3270HostSelectWidget_class_init(G_GNUC_UNUSED V3270HostSelectWidgetClass *klass)
  240 +{
  241 + GTK_V3270_SETTINGS_CLASS(klass)->apply = apply;
  242 + GTK_V3270_SETTINGS_CLASS(klass)->load = load;
  243 +}
  244 +
  245 +static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
  246 +{
  247 + int f;
  248 +
  249 + // Entry fields
  250 + GtkWidget * label[ENTRY_COUNT] =
  251 + {
  252 + gtk_label_new_with_mnemonic( _( "_Host" ) ),
  253 + gtk_label_new_with_mnemonic( _( "_Service" ) )
  254 + };
  255 +
  256 + for(f=0;f<ENTRY_COUNT;f++)
  257 + {
  258 + widget->input.entry[f] = GTK_ENTRY(gtk_entry_new());
  259 + gtk_widget_set_halign(label[f],GTK_ALIGN_END);
  260 + gtk_label_set_mnemonic_widget(GTK_LABEL(label[f]),GTK_WIDGET(widget->input.entry[f]));
  261 + }
  262 +
  263 + gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),_("Address or name of the host to connect.") );
  264 + gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.entry[ENTRY_SRVCNAME]),_("Port or service name (empty for \"telnet\").") );
  265 +
  266 + gtk_entry_set_max_length(widget->input.entry[ENTRY_HOSTNAME],0xFF);
  267 + gtk_entry_set_width_chars(widget->input.entry[ENTRY_HOSTNAME],50);
  268 +
  269 + gtk_entry_set_max_length(widget->input.entry[ENTRY_SRVCNAME],6);
  270 + gtk_entry_set_width_chars(widget->input.entry[ENTRY_SRVCNAME],7);
  271 +
  272 + gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet");
  273 +
  274 + gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),TRUE);
  275 +
  276 + gtk_grid_attach(GTK_GRID(widget),label[0],0,0,1,1);
  277 + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),1,0,5,1);
  278 +
  279 + gtk_grid_attach(GTK_GRID(widget),label[1],0,1,1,1);
  280 + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.entry[ENTRY_SRVCNAME]),1,1,1,1);
  281 +
  282 + // SSL checkbox
  283 + {
  284 + widget->input.ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." )));
  285 + gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.ssl),_( "Check for SSL secure connection." ));
  286 +
  287 + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.ssl),3,1,1,1);
  288 + }
  289 +
  290 + // Host type
  291 + {
  292 + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT);
  293 + GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
  294 +
  295 + widget->input.combo[0] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model));
  296 +
  297 + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, TRUE);
  298 + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, "text", 0, NULL);
  299 +
  300 + const LIB3270_HOST_TYPE_ENTRY *entry = lib3270_get_option_list();
  301 + for(f=0;entry[f].name != NULL;f++)
  302 + {
  303 + GtkTreeIter iter;
  304 + gtk_list_store_append((GtkListStore *) model,&iter);
  305 + gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(entry[f].description), 1, entry[f].type, -1);
  306 + }
  307 +
  308 + }
  309 +
  310 + // Color table
  311 + {
  312 + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT);
  313 + GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
  314 +
  315 + widget->input.combo[1] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model));
  316 +
  317 + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, TRUE);
  318 + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, "text", 0, NULL);
  319 +
  320 + for(f=0;f< (int) G_N_ELEMENTS(colortable);f++)
  321 + {
  322 + GtkTreeIter iter;
  323 + gtk_list_store_append((GtkListStore *) model,&iter);
  324 + gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(colortable[f].description), 1, colortable[f].colors, -1);
  325 + }
  326 +
  327 + }
  328 +
  329 + // Host options
  330 + for(f=0;f< (int) G_N_ELEMENTS(comboLabel);f++)
  331 + {
  332 + GtkWidget *label = gtk_label_new_with_mnemonic(gettext(comboLabel[f]));
  333 + gtk_widget_set_halign(label,GTK_ALIGN_END);
  334 + gtk_grid_attach(GTK_GRID(widget),label,0,f+2,1,1);
  335 + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.combo[f]),1,f+2,2,1);
  336 + }
  337 +
  338 + gtk_widget_show_all(GTK_WIDGET(widget));
  339 +
  340 +}
  341 +
  342 +LIB3270_EXPORT GtkWidget * v3270_host_select_new()
  343 +{
  344 + return GTK_WIDGET(g_object_new(GTK_TYPE_V3270HostSelectWidget, NULL));
334 345 }
335 346  
336 347 LIB3270_EXPORT void v3270_select_host(GtkWidget *widget)
... ... @@ -343,64 +354,36 @@ LIB3270_EXPORT void v3270_select_host(GtkWidget *widget)
343 354 return;
344 355 }
345 356  
346   - GtkWidget * dialog = v3270_host_select_new(widget);
347   - GtkWidget * win = v3270_dialog_new(widget, _("Setup host"), _("C_onnect"));
  357 + debug("V3270HostSelectWidget::%s",__FUNCTION__);
  358 +
  359 + GtkWidget * dialog = v3270_settings_dialog_new(widget, v3270_host_select_new());
348 360  
349   - gtk_window_set_default_size(GTK_WINDOW(win), 700, 150);
  361 + v3270_dialog_setup(dialog,_("Setup host"),_("C_onnect"));
350 362  
351   - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(win))),dialog,FALSE,FALSE,2);
  363 + gtk_window_set_default_size(GTK_WINDOW(dialog), 700, 150);
352 364 gtk_widget_show_all(dialog);
353 365  
354 366 gboolean again = TRUE;
355 367 while(again)
356 368 {
357   - gtk_widget_set_sensitive(win,TRUE);
  369 + gtk_widget_set_sensitive(dialog,TRUE);
  370 + gtk_widget_set_visible(dialog,TRUE);
358 371  
359   - gtk_widget_set_visible(win,TRUE);
360   -
361   - switch(gtk_dialog_run(GTK_DIALOG(win)))
  372 + switch(gtk_dialog_run(GTK_DIALOG(dialog)))
362 373 {
363 374 case GTK_RESPONSE_APPLY:
364   - gtk_widget_set_visible(win,FALSE);
365   - gtk_widget_set_sensitive(win,FALSE);
366   - again = v3270_host_select_apply(dialog) != 0;
  375 + debug("V3270HostSelectWidget::%s=%s",__FUNCTION__,"GTK_RESPONSE_APPLY");
  376 + again = lib3270_reconnect(v3270_get_session(widget),0);
367 377 break;
368 378  
369 379 case GTK_RESPONSE_CANCEL:
370 380 again = FALSE;
  381 + debug("V3270HostSelectWidget::%s=%s",__FUNCTION__,"GTK_RESPONSE_CANCEL");
371 382 break;
372 383 }
373 384 }
374 385  
375   - gtk_widget_destroy(win);
376   -
377   -}
378   -
379   -int v3270_host_select_apply(GtkWidget *w)
380   -{
381   - g_return_val_if_fail(GTK_IS_V3270HostSelectWidget(w),EINVAL);
382   -
383   - V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w);
384   -
385   - g_autofree gchar * url =
386   - g_strconcat(
387   - (gtk_toggle_button_get_active(widget->input.ssl) ? "tn3270s://" : "tn3270://"),
388   - gtk_entry_get_text(widget->input.entry[ENTRY_HOSTNAME]),
389   - ":",
390   - gtk_entry_get_text(widget->input.entry[ENTRY_SRVCNAME]),
391   - NULL
392   - );
393   -
394   - debug("URL=[%s]",url);
395   - lib3270_set_url(widget->hSession,url);
396   -
397   - /*
398   - lib3270_set_hostname(widget->hSession,gtk_entry_get_text(widget->input.entry[ENTRY_HOSTNAME]));
399   - lib3270_set_srvcname(widget->hSession,gtk_entry_get_text(widget->input.entry[ENTRY_SRVCNAME]));
400   - */
401   -
402   - lib3270_set_host_type(widget->hSession,widget->type);
403   - return lib3270_reconnect(widget->hSession,0);
  386 + debug("%s end",__FUNCTION__);
  387 + gtk_widget_destroy(dialog);
404 388  
405 389 }
406   -
... ...
src/dialogs/settings.c
... ... @@ -37,23 +37,34 @@
37 37  
38 38 static void apply(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget G_GNUC_UNUSED(*terminal))
39 39 {
40   -
  40 + debug("V3270Settings::%s",__FUNCTION__);
41 41 }
42 42  
43   -static void revert(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget G_GNUC_UNUSED(*terminal))
  43 +static void cancel(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget G_GNUC_UNUSED(*terminal))
44 44 {
  45 + debug("V3270Settings::%s",__FUNCTION__);
  46 +}
45 47  
  48 +static void load(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget G_GNUC_UNUSED(*terminal))
  49 +{
  50 + debug("V3270Settings::%s",__FUNCTION__);
46 51 }
47 52  
48 53 static void V3270Settings_class_init(V3270SettingsClass *klass)
49 54 {
50 55 klass->apply = apply;
51   - klass->revert = revert;
  56 + klass->cancel = cancel;
  57 + klass->load = load;
52 58 }
53 59  
54 60 static void V3270Settings_init(V3270Settings *widget)
55 61 {
56 62 widget->terminal = NULL;
  63 +
  64 + // https://developer.gnome.org/hig/stable/visual-layout.html.en
  65 + gtk_grid_set_row_spacing(GTK_GRID(widget),6);
  66 + gtk_grid_set_column_spacing(GTK_GRID(widget),12);
  67 +
57 68 }
58 69  
59 70 LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWidget *terminal)
... ... @@ -71,13 +82,13 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid
71 82 GTK_V3270_SETTINGS_GET_CLASS(widget)->apply(widget,GTK_V3270_SETTINGS(widget)->terminal);
72 83 }
73 84  
74   - LIB3270_EXPORT void v3270_settings_revert(GtkWidget *widget)
  85 + LIB3270_EXPORT void v3270_settings_cancel(GtkWidget *widget)
75 86 {
76 87 g_return_if_fail(GTK_IS_V3270_SETTINGS(widget));
77   - GTK_V3270_SETTINGS_GET_CLASS(widget)->revert(widget,GTK_V3270_SETTINGS(widget)->terminal);
  88 + GTK_V3270_SETTINGS_GET_CLASS(widget)->cancel(widget,GTK_V3270_SETTINGS(widget)->terminal);
78 89 }
79 90  
80   - void on_response(GtkDialog G_GNUC_UNUSED(*dialog), gint response_id, GtkWidget *settings)
  91 + LIB3270_EXPORT void v3270_settings_on_dialog_response(GtkDialog G_GNUC_UNUSED(*dialog), gint response_id, GtkWidget *settings)
81 92 {
82 93 switch(response_id)
83 94 {
... ... @@ -86,14 +97,13 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid
86 97 break;
87 98  
88 99 case GTK_RESPONSE_CANCEL:
89   - v3270_settings_revert(settings);
  100 + v3270_settings_cancel(settings);
90 101 break;
91 102  
92 103 }
93   -
94 104 }
95 105  
96   - LIB3270_EXPORT GtkWidget * v3270_settings_dialog_nwidgetew(GtkWidget *terminal, GtkWidget *settings)
  106 + LIB3270_EXPORT GtkWidget * v3270_settings_dialog_new(GtkWidget *terminal, GtkWidget *settings)
97 107 {
98 108 #if GTK_CHECK_VERSION(3,12,0)
99 109  
... ... @@ -113,10 +123,18 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid
113 123  
114 124 #endif // GTK 3.12
115 125  
116   - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),settings,FALSE,FALSE,2);
  126 + GtkWidget * content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
  127 +
  128 + // https://developer.gnome.org/hig/stable/visual-layout.html.en
  129 + gtk_box_set_spacing(
  130 + GTK_BOX(content_area),
  131 + 18
  132 + );
  133 +
  134 + gtk_box_pack_start(GTK_BOX(content_area),settings,FALSE,FALSE,2);
117 135 v3270_settings_set_terminal_widget(settings,terminal);
118 136  
119   - g_signal_connect(G_OBJECT(dialog),"response",G_CALLBACK(on_response),settings);
  137 + g_signal_connect(G_OBJECT(dialog),"response",G_CALLBACK(v3270_settings_on_dialog_response),settings);
120 138  
121 139 gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE);
122 140  
... ... @@ -127,6 +145,5 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid
127 145 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
128 146 gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
129 147  
130   -
131 148 return dialog;
132 149 }
... ...
src/include/v3270/dialogs.h
... ... @@ -35,9 +35,10 @@
35 35  
36 36 G_BEGIN_DECLS
37 37  
38   - LIB3270_EXPORT GtkWidget * v3270_host_select_new(GtkWidget *widget);
  38 + LIB3270_EXPORT GtkWidget * v3270_host_select_new();
39 39 LIB3270_EXPORT GtkWidget * v3270_dialog_new(GtkWidget *widget, const gchar *title, const gchar *apply);
40 40 LIB3270_EXPORT void v3270_error_popup(GtkWidget *widget, const gchar *title, const gchar *summary, const gchar *body);
  41 + LIB3270_EXPORT void v3270_dialog_setup(GtkWidget *dialog, const gchar *title, const gchar *apply);
41 42  
42 43 LIB3270_EXPORT GtkWidget * v3270_save_dialog_new(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename);
43 44 LIB3270_EXPORT void v3270_save_dialog_run(GtkWidget *widget);
... ...
src/include/v3270/settings.h
... ... @@ -37,7 +37,7 @@
37 37  
38 38 /*--[ Progress widget ]------------------------------------------------------------------------------*/
39 39  
40   - #define GTK_TYPE_V3270_SETTINGS (V3270Settings_get_type ())
  40 + #define GTK_TYPE_V3270_SETTINGS (V3270Settings_get_type())
41 41 #define GTK_V3270_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_SETTINGS, V3270Settings))
42 42 #define GTK_V3270_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270_SETTINGS, V3270SettingsClass))
43 43 #define GTK_IS_V3270_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270_SETTINGS))
... ... @@ -52,17 +52,21 @@
52 52 typedef struct _V3270SettingsClass {
53 53 GtkGridClass parent_class;
54 54  
55   - void (*load)(GtkWidget *widget, GtkWidget *terminal);
56   - void (*apply)(GtkWidget *widget, GtkWidget *terminal);
57   - void (*revert)(GtkWidget *widget, GtkWidget *terminal);
  55 + void (*load)(GtkWidget *widget, GtkWidget *terminal); ///< @brief Method to load the properties from terminal widget
  56 + void (*apply)(GtkWidget *widget, GtkWidget *terminal); ///< @brief Method for GTK_RESPONSE_APPLY
  57 + void (*cancel)(GtkWidget *widget, GtkWidget *terminal); ///< @brief Method for GTK_RESPONSE_CANCEL
58 58  
59 59 } V3270SettingsClass;
60 60  
61 61 /*--[ Prototypes ]-----------------------------------------------------------------------------------*/
62 62  
63 63 LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWidget *terminal);
  64 + LIB3270_EXPORT GType V3270Settings_get_type(void);
64 65 LIB3270_EXPORT void v3270_settings_apply(GtkWidget *widget);
65   - LIB3270_EXPORT void v3270_settings_revert(GtkWidget *widget);
  66 + LIB3270_EXPORT void v3270_settings_cancel(GtkWidget *widget);
  67 +
  68 + /// @brief Callback for GtkDialog's "response" signal.
  69 + LIB3270_EXPORT void v3270_settings_on_dialog_response(GtkDialog *dialog, gint response_id, GtkWidget *settings);
66 70  
67 71 LIB3270_EXPORT GtkWidget * v3270_settings_dialog_new(GtkWidget *terminal, GtkWidget *settings);
68 72 // LIB3270_EXPORT gint v3270_settings_dialog_run(GtkWidget *widget, GtkWidget *terminal);
... ...