|
1 | 1 | #include <gdk/gdk.h> |
2 | 2 | #include <glib-2.0/glib.h> |
| 3 | +#include <glib/gi18n-lib.h> |
3 | 4 | #include <glib/gstdio.h> |
4 | 5 | #include <gtk/gtk.h> |
5 | 6 | #include <stdio.h> |
@@ -312,6 +313,37 @@ void save_clicked_handler(GtkWidget *widget, struct swappy_state *state) { |
312 | 313 | save_state_to_file_or_folder(state, NULL); |
313 | 314 | } |
314 | 315 |
|
| 316 | +void save_as_clicked_handler(GtkWidget *widget, struct swappy_state *state) { |
| 317 | + gchar *filename_suggestion; |
| 318 | + GtkWidget *dialog; |
| 319 | + GtkFileChooser *chooser; |
| 320 | + GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE; |
| 321 | + gint res; |
| 322 | + |
| 323 | + commit_state(state); |
| 324 | + filename_suggestion = format_filename(state->config->save_filename_format); |
| 325 | + |
| 326 | + dialog = gtk_file_chooser_dialog_new(NULL, state->ui->window, action, |
| 327 | + _("_Cancel"), GTK_RESPONSE_CANCEL, |
| 328 | + _("_Save"), GTK_RESPONSE_ACCEPT, NULL); |
| 329 | + chooser = GTK_FILE_CHOOSER(dialog); |
| 330 | + gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE); |
| 331 | + gtk_file_chooser_set_current_folder(chooser, state->config->save_dir); |
| 332 | + gtk_file_chooser_set_current_name(chooser, filename_suggestion); |
| 333 | + g_free(filename_suggestion); |
| 334 | + |
| 335 | + res = gtk_dialog_run(GTK_DIALOG(dialog)); |
| 336 | + if (res == GTK_RESPONSE_ACCEPT) { |
| 337 | + gchar *filename; |
| 338 | + |
| 339 | + filename = gtk_file_chooser_get_filename(chooser); |
| 340 | + save_state_to_file_or_folder(state, filename); |
| 341 | + g_free(filename); |
| 342 | + } |
| 343 | + |
| 344 | + gtk_widget_destroy(dialog); |
| 345 | +} |
| 346 | + |
315 | 347 | void clear_clicked_handler(GtkWidget *widget, struct swappy_state *state) { |
316 | 348 | action_clear(state); |
317 | 349 | } |
@@ -353,6 +385,9 @@ void window_keypress_handler(GtkWidget *widget, GdkEventKey *event, |
353 | 385 | case GDK_KEY_s: |
354 | 386 | save_state_to_file_or_folder(state, NULL); |
355 | 387 | break; |
| 388 | + case GDK_KEY_S: |
| 389 | + save_as_clicked_handler(NULL, state); |
| 390 | + break; |
356 | 391 | case GDK_KEY_b: |
357 | 392 | action_toggle_painting_panel(state, NULL); |
358 | 393 | break; |
|
0 commit comments