@@ -282,6 +282,37 @@ void save_clicked_handler(GtkWidget *widget, struct swappy_state *state) {
282282 save_state_to_file_or_folder (state , NULL );
283283}
284284
285+ void save_as_clicked_handler (GtkWidget * widget , struct swappy_state * state ) {
286+ gchar * filename_suggestion ;
287+ GtkWidget * dialog ;
288+ GtkFileChooser * chooser ;
289+ GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE ;
290+ gint res ;
291+
292+ commit_state (state );
293+ filename_suggestion = format_filename (state -> config -> save_filename_format );
294+
295+ dialog = gtk_file_chooser_dialog_new (NULL , state -> ui -> window , action ,
296+ ("_Cancel" ), GTK_RESPONSE_CANCEL ,
297+ ("_Save" ), GTK_RESPONSE_ACCEPT , NULL );
298+ chooser = GTK_FILE_CHOOSER (dialog );
299+ gtk_file_chooser_set_do_overwrite_confirmation (chooser , TRUE);
300+ gtk_file_chooser_set_current_folder (chooser , state -> config -> save_dir );
301+ gtk_file_chooser_set_current_name (chooser , filename_suggestion );
302+
303+ res = gtk_dialog_run (GTK_DIALOG (dialog ));
304+ if (res == GTK_RESPONSE_ACCEPT ) {
305+ gchar * filename ;
306+
307+ filename = gtk_file_chooser_get_filename (chooser );
308+ save_state_to_file_or_folder (state , filename );
309+ g_free (filename );
310+ }
311+
312+ g_free (filename_suggestion );
313+ gtk_widget_destroy (dialog );
314+ }
315+
285316void clear_clicked_handler (GtkWidget * widget , struct swappy_state * state ) {
286317 action_clear (state );
287318}
@@ -323,6 +354,9 @@ void window_keypress_handler(GtkWidget *widget, GdkEventKey *event,
323354 case GDK_KEY_s :
324355 save_state_to_file_or_folder (state , NULL );
325356 break ;
357+ case GDK_KEY_S :
358+ save_as_clicked_handler (NULL , state );
359+ break ;
326360 case GDK_KEY_b :
327361 action_toggle_painting_panel (state , NULL );
328362 break ;
0 commit comments