Commit 041f6aab3e85d88a6b2b15959bdcc9094902b727
1 parent
23fee901
Exists in
master
and in
1 other branch
Updating filename extension based on file type.
Showing
1 changed file
with
33 additions
and
0 deletions
Show diff stats
src/dialogs/save/save.c
@@ -181,6 +181,38 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | @@ -181,6 +181,38 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | ||
181 | 181 | ||
182 | } | 182 | } |
183 | 183 | ||
184 | + static void fileformat_changed(GtkComboBox *formats, GtkEntry *entry) | ||
185 | + { | ||
186 | + const gchar * text = gtk_entry_get_text(entry); | ||
187 | + | ||
188 | + if(!(text && *text)) | ||
189 | + return; | ||
190 | + | ||
191 | + gchar * extension = strrchr(text,'.'); | ||
192 | + if(!extension) | ||
193 | + return; | ||
194 | + | ||
195 | + extension++; | ||
196 | + const gchar * format = gtk_combo_box_get_active_id(formats); | ||
197 | + if(*format == '.') | ||
198 | + format++; | ||
199 | + | ||
200 | + if(g_ascii_strcasecmp(extension,format) == 0) | ||
201 | + return; | ||
202 | + | ||
203 | + size_t szFilename = strlen(text) + strlen(format); | ||
204 | + g_autofree gchar * filename = g_malloc0(szFilename + 1); | ||
205 | + | ||
206 | + strncpy(filename,text,szFilename); | ||
207 | + extension = strrchr(filename,'.'); | ||
208 | + if(extension) | ||
209 | + { | ||
210 | + *(++extension) = 0; | ||
211 | + strncat(filename, format + (*format == '.' ? 1 : 0),szFilename); | ||
212 | + gtk_entry_set_text(entry,filename); | ||
213 | + } | ||
214 | + | ||
215 | + } | ||
184 | 216 | ||
185 | static void V3270SaveDialog_init(V3270SaveDialog *dialog) | 217 | static void V3270SaveDialog_init(V3270SaveDialog *dialog) |
186 | { | 218 | { |
@@ -289,6 +321,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | @@ -289,6 +321,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | ||
289 | } | 321 | } |
290 | 322 | ||
291 | g_signal_connect(dialog->filename,"changed",G_CALLBACK(filename_changed),dialog->format); | 323 | g_signal_connect(dialog->filename,"changed",G_CALLBACK(filename_changed),dialog->format); |
324 | + g_signal_connect(dialog->format,"changed",G_CALLBACK(fileformat_changed),dialog->filename); | ||
292 | 325 | ||
293 | } | 326 | } |
294 | 327 |