[recipes] Improve error handling for ingredients
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [recipes] Improve error handling for ingredients
- Date: Sun, 14 May 2017 16:20:31 +0000 (UTC)
commit 093e7ec72c64a3becd071da7fbee4ee02519bff5
Author: Matthias Clasen <mclasen redhat com>
Date: Sun May 14 12:19:28 2017 -0400
Improve error handling for ingredients
Parse the amount field when it is entered, and
mark errors early.
https://bugzilla.gnome.org/show_bug.cgi?id=782622
src/gr-ingredients-viewer-row.c | 56 +++++++++++++++++++++++++++++++++-----
src/gr-ingredients-viewer-row.ui | 1 +
2 files changed, 50 insertions(+), 7 deletions(-)
---
diff --git a/src/gr-ingredients-viewer-row.c b/src/gr-ingredients-viewer-row.c
index bba986b..2cadb85 100644
--- a/src/gr-ingredients-viewer-row.c
+++ b/src/gr-ingredients-viewer-row.c
@@ -27,6 +27,7 @@
#include "gr-ingredients-viewer.h"
#include "gr-ingredient.h"
#include "gr-unit.h"
+#include "gr-number.h"
#include "gr-recipe-store.h"
@@ -213,7 +214,7 @@ gr_ingredients_viewer_row_set_editable (GrIngredientsViewerRow *row,
}
static void save_row (GrIngredientsViewerRow *row);
-static void save_unit (GrIngredientsViewerRow *row);
+static gboolean save_unit (GrIngredientsViewerRow *row);
static void save_ingredient (GrIngredientsViewerRow *row);
static void
@@ -279,9 +280,10 @@ edit_ingredient (GrIngredientsViewerRow *row)
viewer = GR_INGREDIENTS_VIEWER (gtk_widget_get_ancestor (GTK_WIDGET (row),
GR_TYPE_INGREDIENTS_VIEWER));
- save_unit (row);
- if (row->editable) {
+ if (row->editable)
set_active_row (viewer, GTK_WIDGET (row));
+
+ if (save_unit (row)) {
gtk_entry_set_text (GTK_ENTRY (row->ingredient_entry), row->ingredient);
gtk_stack_set_visible_child_name (GTK_STACK (row->ingredient_stack), "ingredient_entry");
gtk_widget_grab_focus (row->ingredient_entry);
@@ -325,7 +327,7 @@ edit_unit_or_focus_out (GrIngredientsViewerRow *row)
save_row (row);
}
-static void
+static gboolean
parse_unit (const char *text,
char **amount,
char **unit)
@@ -339,22 +341,61 @@ parse_unit (const char *text,
g_clear_pointer (amount, g_free);
g_clear_pointer (unit, g_free);
- *amount = strv[0];
- if (g_strv_length (strv) > 1)
+ if (g_strv_length (strv) > 1) {
+ GrNumber number;
+ g_autoptr(GError) error = NULL;
+ char *tmp = strv[0];
+
+ g_print ("parsing %s as number\n", tmp);
+ if (!gr_number_parse (&number, &tmp, &error)) {
+ g_print ("failed to parse number: %s\n", error->message);
+ return FALSE;
+ }
+
+ *amount = strv[0];
*unit = strv[1];
+ }
+ else {
+ *amount = strv[0];
+ }
+
+ return TRUE;
}
static void
+unit_text_changed (GrIngredientsViewerRow *row)
+{
+ gtk_style_context_remove_class (gtk_widget_get_style_context (row->unit_entry), "error");
+}
+
+static gboolean
+move_focus_back (gpointer data)
+{
+ GrIngredientsViewerRow *row = data;
+
+ gtk_widget_grab_focus (row->unit_entry);
+
+ return G_SOURCE_REMOVE;
+}
+
+static gboolean
save_unit (GrIngredientsViewerRow *row)
{
GtkWidget *visible;
visible = gtk_stack_get_visible_child (GTK_STACK (row->unit_stack));
if (visible == row->unit_entry) {
- parse_unit (gtk_entry_get_text (GTK_ENTRY (row->unit_entry)), &row->amount, &row->unit);
+ if (!parse_unit (gtk_entry_get_text (GTK_ENTRY (row->unit_entry)), &row->amount,
&row->unit)) {
+ gtk_style_context_add_class (gtk_widget_get_style_context (row->unit_entry),
"error");
+ g_idle_add (move_focus_back, row);
+ return FALSE;
+ }
+
update_unit (row);
gtk_stack_set_visible_child (GTK_STACK (row->unit_stack), row->unit_event_box);
}
+
+ return TRUE;
}
static void
@@ -500,6 +541,7 @@ gr_ingredients_viewer_row_class_init (GrIngredientsViewerRowClass *klass)
gtk_widget_class_bind_template_callback (widget_class, save_row);
gtk_widget_class_bind_template_callback (widget_class, entry_key_press);
gtk_widget_class_bind_template_callback (widget_class, drag_key_press);
+ gtk_widget_class_bind_template_callback (widget_class, unit_text_changed);
}
static GtkTargetEntry entries[] = {
diff --git a/src/gr-ingredients-viewer-row.ui b/src/gr-ingredients-viewer-row.ui
index 613f3db..72d1e84 100644
--- a/src/gr-ingredients-viewer-row.ui
+++ b/src/gr-ingredients-viewer-row.ui
@@ -55,6 +55,7 @@
<property name="margin-bottom">4</property>
<signal name="activate" handler="save_row" swapped="yes"/>
<signal name="key-press-event" handler="entry_key_press" swapped="yes"/>
+ <signal name="notify::text" handler="unit_text_changed" swapped="yes"/>
</object>
<packing>
<property name="name">unit_entry</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]