[gnome-todo] window: provide some feedback on errors
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] window: provide some feedback on errors
- Date: Thu, 27 Aug 2015 14:01:02 +0000 (UTC)
commit f57c49b8b51a6f0de7133a53dec738624084ebad
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Aug 27 11:00:06 2015 -0300
window: provide some feedback on errors
src/gtd-manager.c | 68 +++++++++++++++++++++++++++++++++++++++++++++
src/gtd-window.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 147 insertions(+), 0 deletions(-)
---
diff --git a/src/gtd-manager.c b/src/gtd-manager.c
index 375b449..df28f43 100644
--- a/src/gtd-manager.c
+++ b/src/gtd-manager.c
@@ -85,6 +85,7 @@ enum
LIST_ADDED,
LIST_CHANGED,
LIST_REMOVED,
+ SHOW_ERROR_MESSAGE,
STORAGE_ADDED,
STORAGE_CHANGED,
STORAGE_REMOVED,
@@ -135,6 +136,18 @@ is_today (GDateTime *dt)
}
static void
+emit_show_error_message (GtdManager *manager,
+ const gchar *primary_text,
+ const gchar *secondary_text)
+{
+ g_signal_emit (manager,
+ signals[SHOW_ERROR_MESSAGE],
+ 0,
+ primary_text,
+ secondary_text);
+}
+
+static void
gtd_manager__setup_url (GtdManager *manager,
GtdStorageGoa *storage)
{
@@ -373,6 +386,10 @@ gtd_manager__goa_client_finish_cb (GObject *client,
_("Error loading GNOME Online Accounts"),
error->message);
+ emit_show_error_message (GTD_MANAGER (user_data),
+ _("Error loading GNOME Online Accounts"),
+ error->message);
+
g_clear_error (&error);
}
@@ -401,6 +418,10 @@ gtd_manager__commit_source_finished (GObject *registry,
_("Error saving task list"),
error->message);
+ emit_show_error_message (GTD_MANAGER (user_data),
+ _("Error saving task list"),
+ error->message);
+
g_error_free (error);
return;
}
@@ -420,6 +441,10 @@ task_list_removal_finished (GtdManager *manager,
_("Error removing task list"),
(*error)->message);
+ emit_show_error_message (manager,
+ _("Error removing task list"),
+ (*error)->message);
+
g_clear_error (error);
}
}
@@ -444,6 +469,10 @@ gtd_manager__remote_create_source_finished (GObject *source,
_("Error creating task list"),
error->message);
+ emit_show_error_message (GTD_MANAGER (user_data),
+ _("Error creating task list"),
+ error->message);
+
g_clear_error (&error);
}
}
@@ -505,6 +534,10 @@ gtd_manager__create_task_finished (GObject *client,
_("Error creating task"),
error->message);
+ emit_show_error_message (GTD_MANAGER (user_data),
+ _("Error creating task"),
+ error->message);
+
g_error_free (error);
g_free (data);
return;
@@ -568,6 +601,10 @@ gtd_manager__remove_task_finished (GObject *client,
_("Error removing task"),
error->message);
+ emit_show_error_message (GTD_MANAGER (user_data),
+ _("Error removing task"),
+ error->message);
+
g_error_free (error);
return;
}
@@ -620,6 +657,10 @@ gtd_manager__update_task_finished (GObject *client,
_("Error updating task"),
error->message);
+ emit_show_error_message (GTD_MANAGER (user_data),
+ _("Error updating task"),
+ error->message);
+
g_error_free (error);
return;
}
@@ -788,6 +829,10 @@ gtd_manager__fill_task_list (GObject *client,
_("Error fetching tasks from list"),
error->message);
+ emit_show_error_message (GTD_MANAGER (user_data),
+ _("Error fetching tasks from list"),
+ error->message);
+
g_error_free (error);
return;
}
@@ -862,6 +907,10 @@ gtd_manager__on_client_connected (GObject *source_object,
e_source_get_uid (source),
error->message);
+ emit_show_error_message (GTD_MANAGER (user_data),
+ _("Failed to connect to task list source"),
+ error->message);
+
g_error_free (error);
return;
}
@@ -1191,6 +1240,25 @@ gtd_manager_class_init (GtdManagerClass *klass)
GTD_TYPE_TASK_LIST);
/**
+ * GtdManager::show-error-message:
+ *
+ * Notifies about errors, and sends the error message for widgets
+ * to display.
+ *
+ */
+ signals[SHOW_ERROR_MESSAGE] = g_signal_new ("show-error-message",
+ GTD_TYPE_MANAGER,
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ G_TYPE_NONE,
+ 2,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+
+ /**
* GtdManager::storage-added:
*
* The ::storage-added signal is emmited after a #GtdStorage
diff --git a/src/gtd-window.c b/src/gtd-window.c
index f82dcb0..74b63dc 100644
--- a/src/gtd-window.c
+++ b/src/gtd-window.c
@@ -102,6 +102,54 @@ enum {
LAST_PROP
};
+/* GtdManager's error notifications */
+typedef struct
+{
+ GtdWindow *window;
+ gchar *primary_text;
+ gchar *secondary_text;
+} ErrorData;
+
+static void
+error_data_free (ErrorData *error_data)
+{
+ g_free (error_data->primary_text);
+ g_free (error_data->secondary_text);
+ g_free (error_data);
+}
+
+static void
+error_message_notification_primary_action (GtdNotification *notification,
+ gpointer user_data)
+{
+ error_data_free (user_data);
+}
+
+static void
+error_message_notification_secondary_action (GtdNotification *notification,
+ gpointer user_data)
+{
+ GtkWidget *message_dialog;
+ ErrorData *data;
+
+ data = user_data;
+ message_dialog = gtk_message_dialog_new (GTK_WINDOW (data->window),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_CLOSE,
+ "%s",
+ data->primary_text);
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message_dialog),
+ "%s",
+ data->secondary_text);
+
+ gtk_dialog_run (GTK_DIALOG (message_dialog));
+ gtk_widget_destroy (message_dialog);
+
+ error_data_free (data);
+}
+
static void
gtd_window__load_geometry (GtdWindow *window)
{
@@ -737,6 +785,33 @@ gtd_window__list_removed (GtdManager *manager,
g_list_free (children);
}
+static void
+gtd_window__show_error_message (GtdManager *manager,
+ const gchar *primary_text,
+ const gchar *secondary_text,
+ GtdWindow *window)
+{
+ GtdNotification *notification;
+ ErrorData *error_data;
+
+ error_data = g_new0 (ErrorData, 1);
+ notification = gtd_notification_new (primary_text, 0);
+
+ error_data->window = window;
+ error_data->primary_text = g_strdup (primary_text);
+ error_data->secondary_text = g_strdup (secondary_text);
+
+ gtd_notification_set_primary_action (notification,
+ error_message_notification_primary_action,
+ error_data);
+ gtd_notification_set_secondary_action (notification,
+ _("Details"),
+ error_message_notification_secondary_action,
+ error_data);
+
+ gtd_window_notify (window, notification);
+}
+
static gboolean
gtd_window_configure_event (GtkWidget *widget,
GdkEventConfigure *event)
@@ -890,6 +965,10 @@ gtd_window_set_property (GObject *object,
"list-removed",
G_CALLBACK (gtd_window__list_removed),
self);
+ g_signal_connect (self->priv->manager,
+ "show-error-message",
+ G_CALLBACK (gtd_window__show_error_message),
+ self);
/* Add already loaded lists */
lists = gtd_manager_get_task_lists (self->priv->manager);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]