Commit 7a750bff7084d8c0b00cffb217f1d0ca3b0d7aaa
1 parent
057233e1
Exists in
master
and in
1 other branch
Fixing "save" action.
Showing
2 changed files
with
85 additions
and
5 deletions
Show diff stats
src/dialogs/save/convenience.c
... | ... | @@ -36,19 +36,70 @@ |
36 | 36 | |
37 | 37 | LIB3270_EXPORT int v3270_save(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename, GError **error) |
38 | 38 | { |
39 | - if(*error) | |
39 | + g_autofree gchar * message = NULL; | |
40 | + | |
41 | + if(filename) | |
42 | + { | |
43 | + message = g_strdup_printf("Can't save contents to file \"%s\"",filename); | |
44 | + } | |
45 | + else | |
40 | 46 | { |
41 | - return -1; | |
47 | + message = g_strdup("Can't save contents to file"); | |
42 | 48 | } |
43 | 49 | |
44 | 50 | if(!v3270_is_connected(widget)) |
45 | 51 | { |
46 | - *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),ENOTCONN,"%s",strerror(ENOTCONN)); | |
47 | - return -1; | |
52 | + if(error) | |
53 | + { | |
54 | + *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),ENOTCONN,"%s",strerror(ENOTCONN)); | |
55 | + } | |
56 | + else | |
57 | + { | |
58 | + GtkWidget *popup = gtk_message_dialog_new_with_markup( | |
59 | + GTK_WINDOW(gtk_widget_get_toplevel(widget)), | |
60 | + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | |
61 | + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, | |
62 | + message | |
63 | + ); | |
64 | + | |
65 | + gtk_window_set_title(GTK_WINDOW(popup),_("Operation has failed")); | |
66 | + | |
67 | + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(ENOTCONN)); | |
68 | + | |
69 | + gtk_dialog_run(GTK_DIALOG(popup)); | |
70 | + gtk_widget_destroy(popup); | |
71 | + } | |
72 | + return errno = ENOTCONN; | |
48 | 73 | } |
49 | 74 | |
50 | 75 | lib3270_trace_event(v3270_get_session(widget),"save action activated (type=%d)",(int) mode); |
51 | - return lib3270_save(v3270_get_session(widget),mode,filename); | |
76 | + int rc = lib3270_save(v3270_get_session(widget),mode,filename); | |
77 | + | |
78 | + if(!rc) | |
79 | + return 0; | |
80 | + | |
81 | + if(error) | |
82 | + { | |
83 | + *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),rc,"%s",strerror(rc)); | |
84 | + } | |
85 | + else | |
86 | + { | |
87 | + GtkWidget *popup = gtk_message_dialog_new_with_markup( | |
88 | + GTK_WINDOW(gtk_widget_get_toplevel(widget)), | |
89 | + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | |
90 | + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, | |
91 | + message | |
92 | + ); | |
93 | + | |
94 | + gtk_window_set_title(GTK_WINDOW(popup),_("Operation has failed")); | |
95 | + | |
96 | + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(ENOTCONN)); | |
97 | + | |
98 | + gtk_dialog_run(GTK_DIALOG(popup)); | |
99 | + gtk_widget_destroy(popup); | |
100 | + } | |
101 | + | |
102 | + return errno = rc; | |
52 | 103 | } |
53 | 104 | |
54 | 105 | int v3270_save_all(GtkWidget *widget, const gchar *filename, GError **error) | ... | ... |
src/dialogs/save/save.c
... | ... | @@ -100,6 +100,32 @@ |
100 | 100 | gtk_dialog_response(dialog,GTK_RESPONSE_APPLY); |
101 | 101 | } |
102 | 102 | |
103 | + /* | |
104 | + static GtkFileChooserConfirmation confirm_overwrite(GtkFileChooser *chooser, GObject *action) | |
105 | + { | |
106 | + const gchar * attr = g_object_get_data(action,"overwrite"); | |
107 | + GtkFileChooserConfirmation ret = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; | |
108 | + GtkWidget * dialog; | |
109 | + | |
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?")); | |
117 | + | |
118 | + | |
119 | + if(gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) | |
120 | + ret = GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN; | |
121 | + | |
122 | + gtk_widget_destroy(dialog); | |
123 | + | |
124 | + return ret; | |
125 | + | |
126 | + } | |
127 | + */ | |
128 | + | |
103 | 129 | #ifdef WIN32 |
104 | 130 | static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) { |
105 | 131 | #else |
... | ... | @@ -120,6 +146,9 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon |
120 | 146 | NULL |
121 | 147 | ); |
122 | 148 | |
149 | + // g_signal_connect(GTK_FILE_CHOOSER(dialog), "confirm-overwrite", G_CALLBACK(confirm_overwrite), G_OBJECT(action)); | |
150 | + | |
151 | + | |
123 | 152 | if(filename) |
124 | 153 | gtk_entry_set_text(GTK_ENTRY(dialog->filename),filename); |
125 | 154 | ... | ... |