Commit 23fee901448771377dc0cd9afee3a6672ce5c62c
1 parent
9d432ec2
Exists in
master
and in
1 other branch
Auto selecting format from file extension.
Showing
1 changed file
with
47 additions
and
0 deletions
Show diff stats
src/dialogs/save/save.c
@@ -137,6 +137,51 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | @@ -137,6 +137,51 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | ||
137 | } | 137 | } |
138 | #endif // _WIN32 | 138 | #endif // _WIN32 |
139 | 139 | ||
140 | + | ||
141 | + static void filename_changed(GtkEntry *entry, GtkComboBox *formats) | ||
142 | + { | ||
143 | + const gchar * text = gtk_entry_get_text(entry); | ||
144 | + | ||
145 | + if(!(text && *text)) | ||
146 | + return; | ||
147 | + | ||
148 | + const gchar * extension = strrchr(text,'.'); | ||
149 | + if(!extension) | ||
150 | + return; | ||
151 | + | ||
152 | + extension++; | ||
153 | + const gchar * format = gtk_combo_box_get_active_id(formats); | ||
154 | + if(*format == '.') | ||
155 | + format++; | ||
156 | + | ||
157 | + if(g_ascii_strcasecmp(extension,format) == 0) | ||
158 | + return; | ||
159 | + | ||
160 | + gint column = gtk_combo_box_get_id_column(formats); | ||
161 | + GtkTreeModel * model = gtk_combo_box_get_model(formats); | ||
162 | + GtkTreeIter iter; | ||
163 | + | ||
164 | + debug("id_column=%d",column); | ||
165 | + | ||
166 | + if(gtk_tree_model_get_iter_first(model,&iter)) | ||
167 | + { | ||
168 | + do | ||
169 | + { | ||
170 | + g_autofree gchar *id = NULL; | ||
171 | + gtk_tree_model_get(model, &iter, column, &id, -1); | ||
172 | + | ||
173 | + if(g_ascii_strcasecmp(extension,id + (*id == '.' ? 1 : 0)) == 0) | ||
174 | + { | ||
175 | + gtk_combo_box_set_active_iter(formats,&iter); | ||
176 | + break; | ||
177 | + } | ||
178 | + | ||
179 | + } while(gtk_tree_model_iter_next(model,&iter)); | ||
180 | + } | ||
181 | + | ||
182 | + } | ||
183 | + | ||
184 | + | ||
140 | static void V3270SaveDialog_init(V3270SaveDialog *dialog) | 185 | static void V3270SaveDialog_init(V3270SaveDialog *dialog) |
141 | { | 186 | { |
142 | // 0--------1---------------------2-------3--------------------4 | 187 | // 0--------1---------------------2-------3--------------------4 |
@@ -243,6 +288,8 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | @@ -243,6 +288,8 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | ||
243 | 288 | ||
244 | } | 289 | } |
245 | 290 | ||
291 | + g_signal_connect(dialog->filename,"changed",G_CALLBACK(filename_changed),dialog->format); | ||
292 | + | ||
246 | } | 293 | } |
247 | 294 | ||
248 | 295 |