[gtk/wip/otte/for-main: 4/6] node-editor: Display errors
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/for-main: 4/6] node-editor: Display errors
- Date: Tue, 30 Nov 2021 13:12:59 +0000 (UTC)
commit 8d1956921deadc2736d2d3434351f01815f7ec83
Author: Benjamin Otte <otte redhat com>
Date: Mon Nov 29 23:58:28 2021 +0100
node-editor: Display errors
When opening a file or pasting DND fails, display the error as the
actual node.
demos/node-editor/node-editor-window.c | 41 ++++++++++++++++++++++++++++++----
1 file changed, 37 insertions(+), 4 deletions(-)
---
diff --git a/demos/node-editor/node-editor-window.c b/demos/node-editor/node-editor-window.c
index 995d2969f6..84baae7809 100644
--- a/demos/node-editor/node-editor-window.c
+++ b/demos/node-editor/node-editor-window.c
@@ -336,12 +336,39 @@ text_view_query_tooltip_cb (GtkWidget *widget,
}
}
+static gboolean
+load_bytes (NodeEditorWindow *self,
+ GBytes *bytes);
+
+static void
+load_error (NodeEditorWindow *self,
+ const char *error_message)
+{
+ PangoLayout *layout;
+ GtkSnapshot *snapshot;
+ GskRenderNode *node;
+ GBytes *bytes;
+
+ layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), error_message);
+ pango_layout_set_width (layout, 300 * PANGO_SCALE);
+ snapshot = gtk_snapshot_new ();
+ gtk_snapshot_append_layout (snapshot, layout, &(GdkRGBA) { 0.7, 0.13, 0.13, 1.0 });
+ node = gtk_snapshot_free_to_node (snapshot);
+ bytes = gsk_render_node_serialize (node);
+
+ load_bytes (self, bytes);
+
+ gsk_render_node_unref (node);
+ g_object_unref (layout);
+}
+
static gboolean
load_bytes (NodeEditorWindow *self,
GBytes *bytes)
{
if (!g_utf8_validate (g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), NULL))
{
+ load_error (self, "Invalid UTF-8");
g_bytes_unref (bytes);
return FALSE;
}
@@ -359,11 +386,16 @@ static gboolean
load_file_contents (NodeEditorWindow *self,
GFile *file)
{
+ GError *error = NULL;
GBytes *bytes;
- bytes = g_file_load_bytes (file, NULL, NULL, NULL);
+ bytes = g_file_load_bytes (file, NULL, NULL, &error);
if (bytes == NULL)
- return FALSE;
+ {
+ load_error (self, error->message);
+ g_clear_error (&error);
+ return FALSE;
+ }
return load_bytes (self, bytes);
}
@@ -473,17 +505,18 @@ node_editor_window_load (NodeEditorWindow *self,
{
GError *error = NULL;
+ g_clear_object (&self->file_monitor);
+
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);
+ g_clear_object (&self->file_monitor);
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]