[gnome-calendar] Added code to handle new signal from manager.



commit a570538cb63f7b4e7ae9e268eba3879b67bfc161
Author: Erick PÃrez Castellanos <erick red gmail com>
Date:   Thu Aug 23 15:01:06 2012 -0400

    Added code to handle new signal from manager.
    
    Added code to GcalWindow to handle event-created signal from GcalManager.
    Added marshaler.

 src/gcal-marshalers.list |    1 +
 src/gcal-window.c        |  191 ++++++++++++++++++++++++++++++++--------------
 2 files changed, 136 insertions(+), 56 deletions(-)
---
diff --git a/src/gcal-marshalers.list b/src/gcal-marshalers.list
index 808c953..05264bd 100644
--- a/src/gcal-marshalers.list
+++ b/src/gcal-marshalers.list
@@ -1,2 +1,3 @@
 VOID:POINTER,POINTER,DOUBLE,DOUBLE
+VOID:POINTER,POINTER
 VOID:POINTER,BOOLEAN
diff --git a/src/gcal-window.c b/src/gcal-window.c
index cd61b6a..384fc7e 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -59,6 +59,9 @@ struct _GcalWindowPrivate
 
   /* temp to keep the will_delete event uuid */
   gchar               *event_to_delete;
+
+  /* temp to keep event_creation */
+  gboolean             waiting_for_creation;
 };
 
 enum
@@ -118,6 +121,11 @@ static void           gcal_window_events_removed         (GcalManager         *m
                                                           gpointer             events_list,
                                                           gpointer             user_data);
 
+static void           gcal_window_event_created          (GcalManager         *manager,
+                                                          const gchar         *source_uid,
+                                                          const gchar         *event_uid,
+                                                          gpointer             user_data);
+
 static void           gcal_window_event_activated        (GcalEventWidget     *event_widget,
                                                           gpointer             user_data);
 
@@ -151,6 +159,9 @@ static void           gcal_window_show_hide_actor_cb     (ClutterActor        *a
                                                           gboolean             is_finished,
                                                           gpointer             user_data);
 
+static void           gcal_window_edit_dialog_responded  (GcalWindow          *window,
+                                                          gint                 response);
+
 G_DEFINE_TYPE(GcalWindow, gcal_window, GTK_TYPE_APPLICATION_WINDOW)
 
 static void
@@ -185,11 +196,18 @@ gcal_window_class_init(GcalWindowClass *klass)
   g_type_class_add_private((gpointer)klass, sizeof(GcalWindowPrivate));
 }
 
-static void gcal_window_init(GcalWindow *self)
+static void
+gcal_window_init(GcalWindow *self)
 {
+  GcalWindowPrivate *priv;
+
   self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self,
                                            GCAL_TYPE_WINDOW,
                                            GcalWindowPrivate);
+  priv = self->priv;
+
+  priv->event_to_delete = NULL;
+  priv->waiting_for_creation = FALSE;
 }
 
 static void
@@ -776,10 +794,10 @@ gcal_window_events_added (GcalManager *manager,
                                                          event_uid);
       if (gcal_view_contains (
             GCAL_VIEW (priv->views[priv->active_view]),
-            starting_date)
-          && gcal_view_get_by_uuid (
-              GCAL_VIEW (priv->views[priv->active_view]),
-              (gchar*)l->data) == NULL)
+            starting_date) &&
+          gcal_view_get_by_uuid (
+            GCAL_VIEW (priv->views[priv->active_view]),
+            (gchar*)l->data) == NULL)
         {
           summary = gcal_manager_get_event_summary (manager,
                                                     source_uid,
@@ -825,6 +843,35 @@ gcal_window_events_added (GcalManager *manager,
 }
 
 static void
+gcal_window_event_created (GcalManager *manager,
+                           const gchar *source_uid,
+                           const gchar *event_uid,
+                           gpointer     user_data)
+{
+  GcalWindowPrivate *priv;
+  gint response;
+
+  priv = GCAL_WINDOW (user_data)->priv;
+
+  if (! priv->waiting_for_creation)
+    return;
+
+  priv->waiting_for_creation = FALSE;
+
+  if (priv->edit_dialog == NULL)
+    gcal_window_init_edit_dialog (GCAL_WINDOW (user_data));
+
+  gcal_edit_dialog_set_event (GCAL_EDIT_DIALOG (priv->edit_dialog),
+                              source_uid,
+                              event_uid);
+
+  response = gtk_dialog_run (GTK_DIALOG (priv->edit_dialog));
+  gtk_widget_hide (priv->edit_dialog);
+
+  gcal_window_edit_dialog_responded (GCAL_WINDOW (user_data), response);
+}
+
+static void
 gcal_window_events_removed (GcalManager *manager,
                             gpointer     events_list,
                             gpointer     user_data)
@@ -859,10 +906,6 @@ gcal_window_event_activated (GcalEventWidget *event_widget,
   gchar **tokens;
   gint response;
 
-  GtkWidget *noty;
-  GtkWidget *grid;
-  GtkWidget *undo_button;
-
   g_return_if_fail (GCAL_IS_WINDOW (user_data));
   priv = GCAL_WINDOW (user_data)->priv;
 
@@ -878,49 +921,7 @@ gcal_window_event_activated (GcalEventWidget *event_widget,
   response = gtk_dialog_run (GTK_DIALOG (priv->edit_dialog));
   gtk_widget_hide (priv->edit_dialog);
 
-  switch (response)
-    {
-      case GTK_RESPONSE_CANCEL:
-        /* do nothing, nor edit, nor nothing */
-        break;
-      case GTK_RESPONSE_ACCEPT:
-        /* save changes if editable */
-        break;
-      case GCAL_RESPONSE_DELETE_EVENT:
-        /* delete the event */
-        noty = gtk_notification_new ();
-        grid = gtk_grid_new ();
-        gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
-        gtk_container_add (GTK_CONTAINER (grid),
-                           gtk_label_new (_("Event deleted")));
-
-        undo_button = gtk_button_new_from_stock (GTK_STOCK_UNDO);
-        gtk_container_add (GTK_CONTAINER (grid), undo_button);
-
-        gtk_container_add (GTK_CONTAINER (noty), grid);
-        gtk_widget_show_all (noty);
-        gcal_window_show_notification (GCAL_WINDOW (user_data), noty);
-
-        g_signal_connect (noty,
-                          "dismissed",
-                          G_CALLBACK (gcal_window_remove_event),
-                          user_data);
-        g_signal_connect (undo_button,
-                          "clicked",
-                          G_CALLBACK (gcal_window_undo_remove_event),
-                          user_data);
-
-        priv->event_to_delete =
-          g_strdup (gcal_event_widget_peek_uuid (event_widget));
-
-        /* hide widget of the event */
-        gtk_widget_hide (GTK_WIDGET (event_widget));
-        break;
-
-      default:
-        /* do nothing */
-        break;
-    }
+  gcal_window_edit_dialog_responded (GCAL_WINDOW (user_data), response);
 }
 
 static void
@@ -1060,13 +1061,14 @@ gcal_window_event_overlay_closed (GcalEventOverlay *widget,
   gcal_event_overlay_reset (GCAL_EVENT_OVERLAY (priv->new_event_actor));
 
   clutter_actor_save_easing_state (priv->new_event_actor);
+  clutter_actor_set_easing_duration (priv->new_event_actor, 100);
   clutter_actor_set_opacity (priv->new_event_actor, 0);
   clutter_actor_restore_easing_state (priv->new_event_actor);
 
   g_signal_connect (priv->new_event_actor,
                     "transition-stopped::opacity",
                     G_CALLBACK (gcal_window_show_hide_actor_cb),
-                    NULL);
+                    user_data);
 }
 
 static void
@@ -1075,8 +1077,17 @@ gcal_window_create_event (GcalEventOverlay    *widget,
                           gboolean             open_details,
                           gpointer             user_data)
 {
+  GcalWindowPrivate *priv;
   GcalManager *manager;
 
+  priv = GCAL_WINDOW (user_data)->priv;
+
+  if (open_details)
+    {
+      priv->waiting_for_creation = TRUE;
+      clutter_actor_hide (priv->new_event_actor);
+    }
+
   /* create the event */
   manager = gcal_window_get_manager (GCAL_WINDOW (user_data));
   gcal_manager_create_event (manager,
@@ -1085,9 +1096,6 @@ gcal_window_create_event (GcalEventOverlay    *widget,
                              new_data->start_date,
                              new_data->end_date);
 
-  if (open_details)
-    g_debug ("Opening details window NOW");
-
   /* reset and hide */
   gcal_window_event_overlay_closed (widget, user_data);
 }
@@ -1101,6 +1109,73 @@ gcal_window_show_hide_actor_cb (ClutterActor *actor,
   if (CLUTTER_ACTOR_IS_VISIBLE (actor) &&
       clutter_actor_get_opacity (actor) == 0)
     clutter_actor_hide (actor);
+
+  /* disconnect so we don't get multiple notifications */
+  g_signal_handlers_disconnect_by_func (actor,
+                                        gcal_window_show_hide_actor_cb,
+                                        NULL);
+}
+
+static void
+gcal_window_edit_dialog_responded (GcalWindow *window,
+                                  gint        response)
+{
+  GcalWindowPrivate *priv;
+
+  GtkWidget *event_widget;
+  GtkWidget *noty;
+  GtkWidget *grid;
+  GtkWidget *undo_button;
+
+  priv = window->priv;
+
+  switch (response)
+    {
+      case GTK_RESPONSE_CANCEL:
+        /* do nothing, nor edit, nor nothing */
+        break;
+      case GTK_RESPONSE_ACCEPT:
+        /* save changes if editable */
+        break;
+      case GCAL_RESPONSE_DELETE_EVENT:
+        /* delete the event */
+        noty = gtk_notification_new ();
+        grid = gtk_grid_new ();
+        gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
+        gtk_container_add (GTK_CONTAINER (grid),
+                           gtk_label_new (_("Event deleted")));
+
+        undo_button = gtk_button_new_from_stock (GTK_STOCK_UNDO);
+        gtk_container_add (GTK_CONTAINER (grid), undo_button);
+
+        gtk_container_add (GTK_CONTAINER (noty), grid);
+        gtk_widget_show_all (noty);
+        gcal_window_show_notification (window, noty);
+
+        g_signal_connect (noty,
+                          "dismissed",
+                          G_CALLBACK (gcal_window_remove_event),
+                          window);
+        g_signal_connect (undo_button,
+                          "clicked",
+                          G_CALLBACK (gcal_window_undo_remove_event),
+                          window);
+
+        priv->event_to_delete =
+          gcal_edit_dialog_get_event_uuid (GCAL_EDIT_DIALOG (priv->edit_dialog));
+
+        event_widget =
+          gcal_view_get_by_uuid (GCAL_VIEW (priv->views[priv->active_view]),
+                                 priv->event_to_delete);
+
+        /* hide widget of the event */
+        gtk_widget_hide (GTK_WIDGET (event_widget));
+        break;
+
+      default:
+        /* do nothing */
+        break;
+    }
 }
 
 /* Public API */
@@ -1133,6 +1208,10 @@ gcal_window_new_with_view (GcalApplication *app,
                     "events-removed",
                     G_CALLBACK (gcal_window_events_removed),
                     win);
+  g_signal_connect (manager,
+                    "event-created",
+                    G_CALLBACK (gcal_window_event_created),
+                    win);
 
   gcal_toolbar_set_active_view (GCAL_TOOLBAR (win->priv->main_toolbar),
                                 view_type);



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