Commit 63f1469f2310f1362b4eb3616c4ed841b676c735
1 parent
7a750bff
Exists in
master
and in
1 other branch
Fixing bugs on the new save dialog.
Showing
1 changed file
with
64 additions
and
38 deletions
Show diff stats
src/dialogs/save/save.c
| ... | ... | @@ -101,19 +101,16 @@ |
| 101 | 101 | } |
| 102 | 102 | |
| 103 | 103 | /* |
| 104 | - static GtkFileChooserConfirmation confirm_overwrite(GtkFileChooser *chooser, GObject *action) | |
| 104 | + static GtkFileChooserConfirmation confirm_overwrite(GtkFileChooser *chooser, V3270SaveDialog G_GNUC_UNUSED(*widget)) | |
| 105 | 105 | { |
| 106 | - const gchar * attr = g_object_get_data(action,"overwrite"); | |
| 107 | - GtkFileChooserConfirmation ret = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; | |
| 108 | - GtkWidget * dialog; | |
| 106 | + GtkFileChooserConfirmation ret = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; | |
| 109 | 107 | |
| 110 | - if(attr && !g_ascii_strcasecmp(attr,"yes")) | |
| 111 | - return ret; | |
| 112 | - | |
| 113 | - dialog = gtk_message_dialog_new_with_markup( GTK_WINDOW(chooser), | |
| 114 | - GTK_DIALOG_DESTROY_WITH_PARENT, | |
| 115 | - GTK_MESSAGE_QUESTION,GTK_BUTTONS_OK_CANCEL, | |
| 116 | - "%s",_("The file already exists. Replace it?")); | |
| 108 | + GtkWidget * dialog = gtk_message_dialog_new_with_markup( | |
| 109 | + GTK_WINDOW(chooser), | |
| 110 | + GTK_DIALOG_DESTROY_WITH_PARENT, | |
| 111 | + GTK_MESSAGE_QUESTION,GTK_BUTTONS_OK_CANCEL, | |
| 112 | + "%s",_("The file already exists. Replace it?") | |
| 113 | + ); | |
| 117 | 114 | |
| 118 | 115 | |
| 119 | 116 | if(gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) |
| ... | ... | @@ -127,37 +124,44 @@ |
| 127 | 124 | */ |
| 128 | 125 | |
| 129 | 126 | #ifdef WIN32 |
| 130 | -static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) { | |
| 127 | +static void select_local_file(GtkButton G_GNUC_UNUSED(*button), V3270SaveDialog *widget) { | |
| 131 | 128 | #else |
| 132 | -static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, V3270SaveDialog *dialog) { | |
| 129 | +static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, V3270SaveDialog *widget) { | |
| 133 | 130 | #endif // WIN32 |
| 134 | 131 | |
| 135 | - gint format = gtk_combo_box_get_active(GTK_COMBO_BOX(dialog->format)); | |
| 136 | - g_autofree gchar * extension = g_strconcat("*",formats[format].extension,NULL); | |
| 132 | + //gint format = gtk_combo_box_get_active(GTK_COMBO_BOX(widget->format)); | |
| 133 | + //g_autofree gchar * extension = g_strconcat("*",formats[format].extension,NULL); | |
| 137 | 134 | |
| 138 | - g_autofree gchar *filename = | |
| 139 | - v3270_select_file( | |
| 140 | - GTK_WIDGET(dialog), | |
| 141 | - _("Select file to save"), | |
| 142 | - _("Select"), | |
| 143 | - GTK_FILE_CHOOSER_ACTION_SAVE, | |
| 144 | - gtk_entry_get_text(GTK_ENTRY(dialog->filename)), | |
| 145 | - gettext(formats[format].name), extension, | |
| 146 | - NULL | |
| 147 | - ); | |
| 135 | + GtkWidget * dialog = | |
| 136 | + gtk_file_chooser_dialog_new( | |
| 137 | + _( "Select destination file"), | |
| 138 | + GTK_WINDOW(widget), | |
| 139 | + GTK_FILE_CHOOSER_ACTION_SAVE, | |
| 140 | + _("Cancel"), GTK_RESPONSE_CANCEL, | |
| 141 | + _("Select"), GTK_RESPONSE_ACCEPT, | |
| 142 | + NULL ); | |
| 148 | 143 | |
| 149 | - // g_signal_connect(GTK_FILE_CHOOSER(dialog), "confirm-overwrite", G_CALLBACK(confirm_overwrite), G_OBJECT(action)); | |
| 150 | 144 | |
| 145 | + const gchar *filename = gtk_entry_get_text(GTK_ENTRY(widget->filename)); | |
| 146 | + | |
| 147 | + if(filename && *filename) | |
| 148 | + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),filename); | |
| 149 | + else | |
| 150 | + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),g_get_user_special_dir(G_USER_DIRECTORY_DOCUMENTS)); | |
| 151 | + | |
| 152 | + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) | |
| 153 | + gtk_entry_set_text(GTK_ENTRY(widget->filename),gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))); | |
| 154 | + | |
| 155 | + gtk_widget_destroy(dialog); | |
| 151 | 156 | |
| 152 | - if(filename) | |
| 153 | - gtk_entry_set_text(GTK_ENTRY(dialog->filename),filename); | |
| 154 | 157 | |
| 155 | 158 | } |
| 156 | 159 | |
| 160 | + | |
| 157 | 161 | static void V3270SaveDialog_init(V3270SaveDialog *dialog) |
| 158 | 162 | { |
| 159 | - // 0--------1---------------------2-------3------------------ | |
| 160 | - // 0 - Filename xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx. | |
| 163 | + // 0--------1---------------------2-------3--------------------4 | |
| 164 | + // 0 - Filename xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx. x | |
| 161 | 165 | // 1 - Charset xxxxxxxxx.xxxxxxxxx. Format: xxxxxxxxx.xxxxxxxxx. |
| 162 | 166 | |
| 163 | 167 | |
| ... | ... | @@ -193,7 +197,7 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon |
| 193 | 197 | #ifdef WIN32 |
| 194 | 198 | widget = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_BUTTON); |
| 195 | 199 | g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(select_local_file),dialog); |
| 196 | - gtk_grid_attach(grid,widget,6,0,1,1); | |
| 200 | + gtk_grid_attach(grid,widget,4,0,1,1); | |
| 197 | 201 | #else |
| 198 | 202 | gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,"document-open"); |
| 199 | 203 | gtk_entry_set_icon_activatable(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,TRUE); |
| ... | ... | @@ -364,16 +368,19 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon |
| 364 | 368 | switch(dialog->mode) |
| 365 | 369 | { |
| 366 | 370 | case LIB3270_CONTENT_ALL: |
| 371 | + debug("%s","LIB3270_CONTENT_ALL"); | |
| 367 | 372 | dynamic = g_new0(GList,1); |
| 368 | 373 | dynamic->data = (gpointer) lib3270_get_selection(v3270_get_session(dialog->terminal),0,1); |
| 369 | 374 | selection = dynamic; |
| 370 | 375 | break; |
| 371 | 376 | |
| 372 | 377 | case LIB3270_CONTENT_COPY: |
| 378 | + debug("%s","LIB3270_CONTENT_COPY"); | |
| 373 | 379 | selection = v3270_get_selection_blocks(dialog->terminal); |
| 374 | 380 | break; |
| 375 | 381 | |
| 376 | 382 | case LIB3270_CONTENT_SELECTED: |
| 383 | + debug("%s","LIB3270_CONTENT_SELECTED"); | |
| 377 | 384 | dynamic = g_new0(GList,1); |
| 378 | 385 | dynamic->data = (gpointer) lib3270_get_selection(v3270_get_session(dialog->terminal),0,0); |
| 379 | 386 | selection = dynamic; |
| ... | ... | @@ -415,14 +422,33 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon |
| 415 | 422 | |
| 416 | 423 | if(text) |
| 417 | 424 | { |
| 418 | - debug("%s",text); | |
| 425 | + const gchar * filename = gtk_entry_get_text(GTK_ENTRY(dialog->filename)); | |
| 426 | + gint response = GTK_RESPONSE_OK; | |
| 419 | 427 | |
| 420 | - g_file_set_contents( | |
| 421 | - gtk_entry_get_text(GTK_ENTRY(dialog->filename)), | |
| 422 | - text, | |
| 423 | - -1, | |
| 424 | - error | |
| 425 | - ); | |
| 428 | + if(g_file_test(filename,G_FILE_TEST_EXISTS)) | |
| 429 | + { | |
| 430 | + GtkWidget * confirmation = | |
| 431 | + gtk_message_dialog_new_with_markup( | |
| 432 | + GTK_WINDOW(widget), | |
| 433 | + GTK_DIALOG_DESTROY_WITH_PARENT, | |
| 434 | + GTK_MESSAGE_QUESTION,GTK_BUTTONS_OK_CANCEL, | |
| 435 | + _("The file \"%s\" already exists. Replace it?"), | |
| 436 | + filename | |
| 437 | + ); | |
| 438 | + | |
| 439 | + response = gtk_dialog_run(GTK_DIALOG(confirmation)); | |
| 440 | + gtk_widget_destroy(confirmation); | |
| 441 | + } | |
| 442 | + | |
| 443 | + if(response == GTK_RESPONSE_OK) | |
| 444 | + { | |
| 445 | + g_file_set_contents( | |
| 446 | + gtk_entry_get_text(GTK_ENTRY(dialog->filename)), | |
| 447 | + text, | |
| 448 | + -1, | |
| 449 | + error | |
| 450 | + ); | |
| 451 | + } | |
| 426 | 452 | |
| 427 | 453 | } |
| 428 | 454 | ... | ... |