[gtk/wip/baedert/for-master: 21/23] node-editor: Monitor file and reload on changes
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/baedert/for-master: 21/23] node-editor: Monitor file and reload on changes
- Date: Wed, 13 May 2020 06:09:01 +0000 (UTC)
commit 949eb8d17afb981d275ba6011a6fd44231bc580d
Author: Timm Bäder <mail baedert org>
Date: Tue May 12 20:09:22 2020 +0200
node-editor: Monitor file and reload on changes
demos/node-editor/node-editor-window.c | 56 ++++++++++++++++++++++++++++------
1 file changed, 47 insertions(+), 9 deletions(-)
---
diff --git a/demos/node-editor/node-editor-window.c b/demos/node-editor/node-editor-window.c
index 9859a9551b..ebd49c79e0 100644
--- a/demos/node-editor/node-editor-window.c
+++ b/demos/node-editor/node-editor-window.c
@@ -62,6 +62,8 @@ struct _NodeEditorWindow
GListStore *renderers;
GdkPaintable *paintable;
+ GFileMonitor *file_monitor;
+
GArray *errors;
};
@@ -331,11 +333,10 @@ text_view_query_tooltip_cb (GtkWidget *widget,
}
}
-gboolean
-node_editor_window_load (NodeEditorWindow *self,
- GFile *file)
+static gboolean
+load_file_contents (NodeEditorWindow *self,
+ GFile *file)
{
- GtkTextIter end;
GBytes *bytes;
bytes = g_file_load_bytes (file, NULL, NULL, NULL);
@@ -348,17 +349,54 @@ node_editor_window_load (NodeEditorWindow *self,
return FALSE;
}
- gtk_text_buffer_get_end_iter (self->text_buffer, &end);
- gtk_text_buffer_insert (self->text_buffer,
- &end,
- g_bytes_get_data (bytes, NULL),
- g_bytes_get_size (bytes));
+ gtk_text_buffer_set_text (self->text_buffer,
+ g_bytes_get_data (bytes, NULL),
+ g_bytes_get_size (bytes));
g_bytes_unref (bytes);
return TRUE;
}
+static void
+file_changed_cb (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
+{
+ NodeEditorWindow *self = user_data;
+
+ if (event_type == G_FILE_MONITOR_EVENT_CHANGED)
+ load_file_contents (self, file);
+}
+
+gboolean
+node_editor_window_load (NodeEditorWindow *self,
+ GFile *file)
+{
+ GError *error = NULL;
+
+ if (!load_file_contents (self, file))
+ return FALSE;
+
+ g_clear_object (&self->file_monitor);
+ self->file_monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, &error);
+
+
+ if (error)
+ {
+ g_warning ("couldn't monitor file: %s", error->message);
+ g_error_free (error);
+ }
+ else
+ {
+ g_signal_connect (self->file_monitor, "changed", G_CALLBACK (file_changed_cb), self);
+ }
+
+ return TRUE;
+}
+
static void
open_response_cb (GtkWidget *dialog,
gint response,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]