diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-05-05 13:58:34 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-05-05 14:18:40 -0400 |
commit | 1fba59f1d1bbbfe24e4ef211d565d71dabd1a0c5 (patch) | |
tree | c4c76c2b46b9abff63eccfe717b4b42c30779c39 /demos | |
parent | 68a2ca7e8529fbaca4f49c996b4cb61e5a3824f8 (diff) | |
download | gtk+-1fba59f1d1bbbfe24e4ef211d565d71dabd1a0c5.tar.gz |
node-editor: Be a bit better about saving
When we have a file, suggest it for saving.
This has the side benefit of giving us a test case
for gtk_file_dialog_set_initial_file.
Diffstat (limited to 'demos')
-rw-r--r-- | demos/node-editor/node-editor-window.c | 40 |
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); } |