summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-05-05 18:50:16 +0000
committerMatthias Clasen <mclasen@redhat.com>2023-05-05 18:50:16 +0000
commit5f91bb81ed059f5898886e1b71cd9e8e1006e113 (patch)
treec4c76c2b46b9abff63eccfe717b4b42c30779c39
parent68a2ca7e8529fbaca4f49c996b4cb61e5a3824f8 (diff)
parent1fba59f1d1bbbfe24e4ef211d565d71dabd1a0c5 (diff)
downloadgtk+-5f91bb81ed059f5898886e1b71cd9e8e1006e113.tar.gz
Merge branch 'matthiasc/for-main' into 'main'
node-editor: Be a bit better about saving See merge request GNOME/gtk!5923
-rw-r--r--demos/node-editor/node-editor-window.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/demos/node-editor/node-editor-window.c b/demos/node-editor/node-editor-window.c
index 5678b6869d..86b5297347 100644
--- a/demos/node-editor/node-editor-window.c
+++ b/demos/node-editor/node-editor-window.c
@@ -64,6 +64,7 @@ struct _NodeEditorWindow
GListStore *renderers;
GskRenderNode *node;
+ GFile *file;
GFileMonitor *file_monitor;
GArray *errors;
@@ -544,12 +545,14 @@ node_editor_window_load (NodeEditorWindow *self,
{
GError *error = NULL;
+ g_clear_object (&self->file);
g_clear_object (&self->file_monitor);
if (!load_file_contents (self, file))
return FALSE;
- self->file_monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, &error);
+ self->file = g_object_ref (file);
+ self->file_monitor = g_file_monitor_file (self->file, G_FILE_MONITOR_NONE, NULL, &error);
if (error)
{
@@ -586,13 +589,21 @@ static void
show_open_filechooser (NodeEditorWindow *self)
{
GtkFileDialog *dialog;
- GFile *cwd;
dialog = gtk_file_dialog_new ();
gtk_file_dialog_set_title (dialog, "Open node file");
- cwd = g_file_new_for_path (".");
- gtk_file_dialog_set_initial_folder (dialog, cwd);
- g_object_unref (cwd);
+ if (self->file)
+ {
+ gtk_file_dialog_set_initial_file (dialog, self->file);
+ }
+ else
+ {
+ GFile *cwd;
+ cwd = g_file_new_for_path (".");
+ gtk_file_dialog_set_initial_folder (dialog, cwd);
+ g_object_unref (cwd);
+ }
+
gtk_file_dialog_open (dialog, GTK_WINDOW (self),
NULL, open_response_cb, self);
g_object_unref (dialog);
@@ -650,14 +661,21 @@ save_cb (GtkWidget *button,
NodeEditorWindow *self)
{
GtkFileDialog *dialog;
- GFile *cwd;
dialog = gtk_file_dialog_new ();
gtk_file_dialog_set_title (dialog, "Save node");
- cwd = g_file_new_for_path (".");
- gtk_file_dialog_set_initial_folder (dialog, cwd);
- gtk_file_dialog_set_initial_name (dialog, "demo.node");
- g_object_unref (cwd);
+ if (self->file)
+ {
+ gtk_file_dialog_set_initial_file (dialog, self->file);
+ }
+ else
+ {
+ GFile *cwd = g_file_new_for_path (".");
+ gtk_file_dialog_set_initial_folder (dialog, cwd);
+ gtk_file_dialog_set_initial_name (dialog, "demo.node");
+ g_object_unref (cwd);
+ }
+
gtk_file_dialog_save (dialog,
GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (button))),
NULL,
@@ -1091,6 +1109,8 @@ node_editor_window_finalize (GObject *object)
g_clear_pointer (&self->node, gsk_render_node_unref);
g_clear_object (&self->renderers);
+ g_clear_object (&self->file_monitor);
+ g_clear_object (&self->file);
G_OBJECT_CLASS (node_editor_window_parent_class)->finalize (object);
}