[recipes/todoist-3: 10/10] In-App Notification for after shopping list had been exported to Todoist



commit 0e1e3a1b1b8a8848546798c7242d560490760c97
Author: Ekta Nandwani <mailnandwaniekta gmail com>
Date:   Fri Aug 25 02:32:19 2017 +0530

    In-App Notification for after shopping list had been exported to Todoist

 src/gr-shopping-list-exporter.c |    2 +
 src/gr-window.c                 |   38 +++++++++++++++++++++++++++++
 src/gr-window.h                 |    1 +
 src/gr-window.ui                |   50 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 91 insertions(+), 0 deletions(-)
---
diff --git a/src/gr-shopping-list-exporter.c b/src/gr-shopping-list-exporter.c
index 1d9198c..a223692 100644
--- a/src/gr-shopping-list-exporter.c
+++ b/src/gr-shopping-list-exporter.c
@@ -33,6 +33,7 @@
 #include "gr-shopping-page.h"
 #include "gr-shopping-list-formatter.h"
 #include "gr-mail.h"
+#include "gr-window.h"
 
 #define TODOIST_URL "https://todoist.com/API/v7/sync";
 
@@ -323,6 +324,7 @@ export_shopping_list_callback (RestProxyCall *call,
          g_object_unref (parser);
          if (exporter->dialog)
                close_dialog (exporter);
+         gr_window_confirm_shopping_exported (GR_WINDOW (exporter->window));
 }
 
 static void
diff --git a/src/gr-window.c b/src/gr-window.c
index 584c27b..926f6af 100644
--- a/src/gr-window.c
+++ b/src/gr-window.c
@@ -100,6 +100,9 @@ struct _GrWindow
         GList *shopping_done_list;
         char **removed_ingredients;
 
+        GtkWidget *export_done_revealer;
+        guint export_done_timeout_id;
+
         GObject *file_chooser;
         GrRecipeImporter *importer;
         GrRecipeExporter *exporter;
@@ -602,6 +605,10 @@ gr_window_finalize (GObject *object)
                 g_source_remove (self->shopping_done_timeout_id);
                 self->shopping_done_timeout_id = 0;
         }
+        if (self->export_done_timeout_id) {
+                g_source_remove (self->export_done_timeout_id);
+                self->export_done_timeout_id = 0;
+        }
 
         g_list_free (self->dialogs);
 
@@ -876,6 +883,35 @@ done_shopping (GrWindow *window)
         }
 }
 
+
+static void
+close_export_done (GrWindow *window)
+{
+    if (window->export_done_timeout_id) {
+            g_source_remove (window->export_done_timeout_id);
+            window->export_done_timeout_id = 0;
+    }
+
+    gtk_revealer_set_reveal_child (GTK_REVEALER (window->export_done_revealer), FALSE);
+}
+
+static gboolean
+export_done_timeout (gpointer data)
+{
+        GrWindow *window = data;
+
+        close_export_done (window);
+
+        return G_SOURCE_REMOVE;
+}
+
+void
+gr_window_confirm_shopping_exported (GrWindow *window)
+{
+    gtk_revealer_set_reveal_child (GTK_REVEALER (window->export_done_revealer), TRUE);
+    window->export_done_timeout_id = g_timeout_add_seconds (10, export_done_timeout, window);
+}
+
 static void
 make_save_sensitive (GrEditPage *edit_page,
                      GParamSpec *pspec,
@@ -960,6 +996,7 @@ gr_window_class_init (GrWindowClass *klass)
         gtk_widget_class_bind_template_child (widget_class, GrWindow, remind_label);
         gtk_widget_class_bind_template_child (widget_class, GrWindow, shopping_added_revealer);
         gtk_widget_class_bind_template_child (widget_class, GrWindow, shopping_done_revealer);
+        gtk_widget_class_bind_template_child (widget_class, GrWindow, export_done_revealer);
         gtk_widget_class_bind_template_child (widget_class, GrWindow, sort_by_label);
         gtk_widget_class_bind_template_child (widget_class, GrWindow, sort_by_name_button);
         gtk_widget_class_bind_template_child (widget_class, GrWindow, sort_by_recency_button);
@@ -990,6 +1027,7 @@ gr_window_class_init (GrWindowClass *klass)
         gtk_widget_class_bind_template_callback (widget_class, back_to_shopping);
         gtk_widget_class_bind_template_callback (widget_class, make_save_sensitive);
         gtk_widget_class_bind_template_callback (widget_class, sort_clicked);
+        gtk_widget_class_bind_template_callback (widget_class, close_export_done);
 }
 
 static GtkClipboard *
diff --git a/src/gr-window.h b/src/gr-window.h
index 8120fae..283e71c 100644
--- a/src/gr-window.h
+++ b/src/gr-window.h
@@ -84,5 +84,6 @@ void            gr_window_save_all                   (GrWindow   *window);
 void            gr_window_timer_expired              (GrWindow   *window,
                                                       GrRecipe   *recipe,
                                                       int         step);
+void            gr_window_confirm_shopping_exported  (GrWindow *window);
 
 G_END_DECLS
diff --git a/src/gr-window.ui b/src/gr-window.ui
index 0bac3f7..3c51deb 100644
--- a/src/gr-window.ui
+++ b/src/gr-window.ui
@@ -468,6 +468,56 @@
                 </child>
               </object>
             </child>
+            <child type="overlay">
+              <object class="GtkRevealer" id="export_done_revealer">
+                <property name="visible">1</property>
+                <property name="halign">center</property>
+                <property name="valign">start</property>
+                <child>
+                  <object class="GtkFrame">
+                    <property name="visible">1</property>
+                    <style>
+                      <class name="app-notification"/>
+                    </style>
+                    <child>
+                      <object class="GtkBox">
+                        <property name="visible">1</property>
+                        <property name="spacing">10</property>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="visible">1</property>
+                            <property name="hexpand">1</property>
+                            <property name="halign">center</property>
+                            <property name="label" translatable="yes">Shopping List has been exported to 
Todoist</property>
+                            <style>
+                              <class name="notification-label"/>
+                            </style>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkButton">
+                            <property name="visible">1</property>
+                            <property name="focus-on-click">0</property>
+                            <property name="relief">none</property>
+                            <signal name="clicked" handler="close_export_done" swapped="yes"/>
+                            <style>
+                              <class name="image-button"/>
+                            </style>
+                            <child>
+                              <object class="GtkImage">
+                                <property name="visible">1</property>
+                                <property name="icon-name">window-close-symbolic</property>
+                                <property name="icon-size">1</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
             <child>
               <object class="GtkStack" id="main_stack">
                 <property name="visible">1</property>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]