[gnome-text-editor] page: add save-as helper to provide filename



commit 7c1872482d3954b88dfc9a41408d6f21d6262eea
Author: Christian Hergert <chergert redhat com>
Date:   Thu Nov 11 23:18:35 2021 -0800

    page: add save-as helper to provide filename

 src/editor-page-private.h   |  3 ++-
 src/editor-page.c           | 23 +++++++++++++++++++++--
 src/editor-window-actions.c |  2 +-
 3 files changed, 24 insertions(+), 4 deletions(-)
---
diff --git a/src/editor-page-private.h b/src/editor-page-private.h
index 43f6b61..b36d843 100644
--- a/src/editor-page-private.h
+++ b/src/editor-page-private.h
@@ -66,7 +66,8 @@ void          _editor_page_class_actions_init     (EditorPageClass      *klass);
 void          _editor_page_actions_init           (EditorPage           *self);
 EditorWindow *_editor_page_get_window             (EditorPage           *self);
 void          _editor_page_save                   (EditorPage           *self);
-void          _editor_page_save_as                (EditorPage           *self);
+void          _editor_page_save_as                (EditorPage           *self,
+                                                   const char           *filename);
 void          _editor_page_raise                  (EditorPage           *self);
 void          _editor_page_discard_changes_async  (EditorPage           *self,
                                                    gboolean              reload,
diff --git a/src/editor-page.c b/src/editor-page.c
index 70d98b6..5605101 100644
--- a/src/editor-page.c
+++ b/src/editor-page.c
@@ -872,7 +872,7 @@ _editor_page_save (EditorPage *self)
 
   if (editor_document_get_file (self->document) == NULL)
     {
-      _editor_page_save_as (self);
+      _editor_page_save_as (self, NULL);
       return;
     }
 
@@ -912,7 +912,8 @@ editor_page_save_as_cb (EditorPage           *self,
 }
 
 void
-_editor_page_save_as (EditorPage *self)
+_editor_page_save_as (EditorPage *self,
+                      const char *filename)
 {
   GtkFileChooserNative *native;
   EditorWindow *window;
@@ -932,6 +933,24 @@ _editor_page_save_as (EditorPage *self)
   _editor_file_chooser_add_line_endings (GTK_FILE_CHOOSER (native),
                                          _editor_document_get_newline_type (self->document));
 
+  if (filename != NULL)
+    {
+      GFile *file = editor_document_get_file (self->document);
+      g_autoptr(GFile) selected = NULL;
+
+      if (file != NULL && !g_path_is_absolute (filename))
+        {
+          g_autoptr(GFile) parent = g_file_get_parent (file);
+          selected = g_file_get_child (parent, filename);
+        }
+      else
+        {
+          selected = g_file_new_for_path (filename);
+        }
+
+      gtk_file_chooser_set_file (GTK_FILE_CHOOSER (native), selected, NULL);
+    }
+
   g_signal_connect_object (native,
                            "response",
                            G_CALLBACK (editor_page_save_as_cb),
diff --git a/src/editor-window-actions.c b/src/editor-window-actions.c
index cde11c0..2d1b2c0 100644
--- a/src/editor-window-actions.c
+++ b/src/editor-window-actions.c
@@ -153,7 +153,7 @@ editor_window_actions_save_as_cb (GtkWidget  *widget,
   page = editor_window_get_visible_page (self);
 
   if (page != NULL)
-    _editor_page_save_as (page);
+    _editor_page_save_as (page, NULL);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]