Commit f24b2b22e1828692156a730a9e162765059bea9c
1 parent
6e737ce0
Exists in
master
and in
1 other branch
Adjustments on 'load' dialog.
Showing
3 changed files
with
58 additions
and
50 deletions
Show diff stats
src/dialogs/load.c
| ... | ... | @@ -35,6 +35,7 @@ |
| 35 | 35 | #include <clipboard.h> |
| 36 | 36 | #include <limits.h> |
| 37 | 37 | #include <v3270/dialogs.h> |
| 38 | + #include <v3270/tools.h> | |
| 38 | 39 | |
| 39 | 40 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ |
| 40 | 41 | |
| ... | ... | @@ -73,16 +74,7 @@ |
| 73 | 74 | |
| 74 | 75 | } |
| 75 | 76 | |
| 76 | - static void cancel_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog) | |
| 77 | - { | |
| 78 | - gtk_dialog_response(dialog,GTK_RESPONSE_CANCEL); | |
| 79 | - } | |
| 80 | - | |
| 81 | - static void apply_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog) | |
| 82 | - { | |
| 83 | - gtk_dialog_response(dialog,GTK_RESPONSE_APPLY); | |
| 84 | - } | |
| 85 | - | |
| 77 | +/* | |
| 86 | 78 | #ifdef WIN32 |
| 87 | 79 | static void icon_press(GtkEntry G_GNUC_UNUSED(*entry), G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, V3270LoadDialog *widget) |
| 88 | 80 | { |
| ... | ... | @@ -128,9 +120,38 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
| 128 | 120 | |
| 129 | 121 | } |
| 130 | 122 | #endif // _WIN32 |
| 123 | +*/ | |
| 131 | 124 | |
| 132 | - static void V3270LoadDialog_init(V3270LoadDialog *dialog) | |
| 133 | - { | |
| 125 | + static void filename_changed(GtkEntry *entry, V3270LoadDialog *dialog) { | |
| 126 | + | |
| 127 | + const gchar * text = gtk_entry_get_text(entry); | |
| 128 | + GtkWidget * button = gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_APPLY); | |
| 129 | + | |
| 130 | + if(!(text && *text)) { | |
| 131 | + gtk_widget_set_sensitive(button,FALSE); | |
| 132 | + return; | |
| 133 | + } | |
| 134 | + | |
| 135 | + if(g_str_has_suffix(text,G_DIR_SEPARATOR_S)) { | |
| 136 | + gtk_widget_set_sensitive(button,FALSE); | |
| 137 | + return; | |
| 138 | + } | |
| 139 | + | |
| 140 | + g_autofree gchar * dirname = g_path_get_dirname(text); | |
| 141 | + | |
| 142 | + if(!g_file_test(dirname,G_FILE_TEST_IS_DIR)) { | |
| 143 | + gtk_widget_set_sensitive(button,FALSE); | |
| 144 | + return; | |
| 145 | + } | |
| 146 | + | |
| 147 | + | |
| 148 | + // g_autofree gchar * basename = g_path_get_basename(text); | |
| 149 | + | |
| 150 | + | |
| 151 | + gtk_widget_set_sensitive(button,TRUE); | |
| 152 | + } | |
| 153 | + | |
| 154 | + static void V3270LoadDialog_init(V3270LoadDialog *dialog) { | |
| 134 | 155 | // 0--------1---------------------2-------3--------------------4 |
| 135 | 156 | // 0 - Filename xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx. x |
| 136 | 157 | // 1 - Charset xxxxxxxxx.xxxxxxxxx. Format: xxxxxxxxx.xxxxxxxxx. |
| ... | ... | @@ -141,7 +162,6 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
| 141 | 162 | // Setup visual elements |
| 142 | 163 | // https://developer.gnome.org/hig/stable/visual-layout.html.en |
| 143 | 164 | GtkWidget *widget; |
| 144 | - GtkWidget *button; | |
| 145 | 165 | |
| 146 | 166 | GtkBox * box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); |
| 147 | 167 | gtk_window_set_resizable(GTK_WINDOW(dialog),FALSE); |
| ... | ... | @@ -166,10 +186,23 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
| 166 | 186 | gtk_grid_attach(grid,widget,0,0,1,1); |
| 167 | 187 | gtk_label_set_mnemonic_widget(GTK_LABEL(widget),dialog->filename); |
| 168 | 188 | |
| 189 | + /* | |
| 169 | 190 | gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,"document-open"); |
| 170 | 191 | gtk_entry_set_icon_activatable(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,TRUE); |
| 171 | 192 | gtk_entry_set_icon_tooltip_text(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,_("Select file")); |
| 172 | 193 | g_signal_connect(G_OBJECT(dialog->filename),"icon-press",G_CALLBACK(icon_press),dialog); |
| 194 | + */ | |
| 195 | + | |
| 196 | + g_signal_connect(dialog->filename,"changed",G_CALLBACK(filename_changed),dialog); | |
| 197 | + | |
| 198 | + gtk_entry_bind_to_filechooser( | |
| 199 | + dialog->filename, | |
| 200 | + GTK_FILE_CHOOSER_ACTION_OPEN, | |
| 201 | + _( "Select file" ), | |
| 202 | + NULL, | |
| 203 | + "*.txt", | |
| 204 | + _("Text files") | |
| 205 | + ); | |
| 173 | 206 | |
| 174 | 207 | gtk_entry_set_width_chars(GTK_ENTRY(dialog->filename),60); |
| 175 | 208 | gtk_entry_set_max_length(GTK_ENTRY(dialog->filename),PATH_MAX); |
| ... | ... | @@ -191,41 +224,20 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
| 191 | 224 | |
| 192 | 225 | // Buttons |
| 193 | 226 | // https://developer.gnome.org/icon-naming-spec/ |
| 194 | -#ifdef _WIN32 | |
| 195 | - widget = NULL; | |
| 196 | -#elif GTK_CHECK_VERSION(3,14,0) | |
| 197 | - widget = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); | |
| 198 | -#else | |
| 199 | - widget = NULL; | |
| 200 | -#endif // GTK(3,14,0) | |
| 227 | + gtk_dialog_add_buttons( | |
| 228 | + GTK_DIALOG (dialog), | |
| 229 | + _("_Cancel"), GTK_RESPONSE_CANCEL, | |
| 230 | + _("_Load"), GTK_RESPONSE_APPLY, | |
| 231 | + NULL | |
| 232 | + ); | |
| 201 | 233 | |
| 202 | - if(widget) | |
| 203 | - { | |
| 204 | - // Have header bar | |
| 205 | - button = gtk_button_new_with_mnemonic(_("_Cancel")); | |
| 206 | - gtk_widget_set_tooltip_markup(button,_("Click to cancel operation")); | |
| 207 | - gtk_header_bar_pack_start(GTK_HEADER_BAR(widget),button); | |
| 208 | - g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(cancel_operation),dialog); | |
| 209 | - | |
| 210 | - button = gtk_button_new_with_mnemonic(_("_Load")); | |
| 211 | - gtk_widget_set_tooltip_markup(button,_("Click to load file")); | |
| 212 | - gtk_header_bar_pack_end(GTK_HEADER_BAR(widget),button); | |
| 213 | - g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(apply_operation),dialog); | |
| 234 | + if(!v3270_dialog_get_use_header()) { | |
| 235 | + GtkWidget * content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); | |
| 236 | + gtk_box_set_spacing(GTK_BOX(content_area),6); | |
| 214 | 237 | } |
| 215 | - else | |
| 216 | - { | |
| 217 | - gtk_box_set_spacing( | |
| 218 | - GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), | |
| 219 | - 18 | |
| 220 | - ); | |
| 221 | 238 | |
| 222 | - gtk_dialog_add_buttons( | |
| 223 | - GTK_DIALOG (dialog), | |
| 224 | - _("_Cancel"), GTK_RESPONSE_CANCEL, | |
| 225 | - _("_Load"), GTK_RESPONSE_APPLY, | |
| 226 | - NULL | |
| 227 | - ); | |
| 228 | - } | |
| 239 | + gtk_widget_set_sensitive(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_APPLY),FALSE); | |
| 240 | + | |
| 229 | 241 | |
| 230 | 242 | } |
| 231 | 243 | ... | ... |
src/dialogs/save/save.c
| ... | ... | @@ -345,7 +345,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
| 345 | 345 | |
| 346 | 346 | if(!v3270_dialog_get_use_header()) { |
| 347 | 347 | GtkWidget * content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); |
| 348 | - gtk_box_set_spacing(GTK_BOX(content_area),3); | |
| 348 | + gtk_box_set_spacing(GTK_BOX(content_area),6); | |
| 349 | 349 | } |
| 350 | 350 | |
| 351 | 351 | gtk_widget_set_sensitive(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_APPLY),FALSE); | ... | ... |
src/dialogs/tools.c