Added code to handle new signal from manager.
Added code to GcalWindow to handle event-created signal from GcalManager. Added marshaler.
This commit is contained in:
@@ -1,2 +1,3 @@
|
|||||||
VOID:POINTER,POINTER,DOUBLE,DOUBLE
|
VOID:POINTER,POINTER,DOUBLE,DOUBLE
|
||||||
|
VOID:POINTER,POINTER
|
||||||
VOID:POINTER,BOOLEAN
|
VOID:POINTER,BOOLEAN
|
||||||
|
|||||||
+135
-56
@@ -59,6 +59,9 @@ struct _GcalWindowPrivate
|
|||||||
|
|
||||||
/* temp to keep the will_delete event uuid */
|
/* temp to keep the will_delete event uuid */
|
||||||
gchar *event_to_delete;
|
gchar *event_to_delete;
|
||||||
|
|
||||||
|
/* temp to keep event_creation */
|
||||||
|
gboolean waiting_for_creation;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -118,6 +121,11 @@ static void gcal_window_events_removed (GcalManager *m
|
|||||||
gpointer events_list,
|
gpointer events_list,
|
||||||
gpointer user_data);
|
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,
|
static void gcal_window_event_activated (GcalEventWidget *event_widget,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
@@ -151,6 +159,9 @@ static void gcal_window_show_hide_actor_cb (ClutterActor *a
|
|||||||
gboolean is_finished,
|
gboolean is_finished,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
static void gcal_window_edit_dialog_responded (GcalWindow *window,
|
||||||
|
gint response);
|
||||||
|
|
||||||
G_DEFINE_TYPE(GcalWindow, gcal_window, GTK_TYPE_APPLICATION_WINDOW)
|
G_DEFINE_TYPE(GcalWindow, gcal_window, GTK_TYPE_APPLICATION_WINDOW)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -185,11 +196,18 @@ gcal_window_class_init(GcalWindowClass *klass)
|
|||||||
g_type_class_add_private((gpointer)klass, sizeof(GcalWindowPrivate));
|
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,
|
self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self,
|
||||||
GCAL_TYPE_WINDOW,
|
GCAL_TYPE_WINDOW,
|
||||||
GcalWindowPrivate);
|
GcalWindowPrivate);
|
||||||
|
priv = self->priv;
|
||||||
|
|
||||||
|
priv->event_to_delete = NULL;
|
||||||
|
priv->waiting_for_creation = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -776,10 +794,10 @@ gcal_window_events_added (GcalManager *manager,
|
|||||||
event_uid);
|
event_uid);
|
||||||
if (gcal_view_contains (
|
if (gcal_view_contains (
|
||||||
GCAL_VIEW (priv->views[priv->active_view]),
|
GCAL_VIEW (priv->views[priv->active_view]),
|
||||||
starting_date)
|
starting_date) &&
|
||||||
&& gcal_view_get_by_uuid (
|
gcal_view_get_by_uuid (
|
||||||
GCAL_VIEW (priv->views[priv->active_view]),
|
GCAL_VIEW (priv->views[priv->active_view]),
|
||||||
(gchar*)l->data) == NULL)
|
(gchar*)l->data) == NULL)
|
||||||
{
|
{
|
||||||
summary = gcal_manager_get_event_summary (manager,
|
summary = gcal_manager_get_event_summary (manager,
|
||||||
source_uid,
|
source_uid,
|
||||||
@@ -824,6 +842,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
|
static void
|
||||||
gcal_window_events_removed (GcalManager *manager,
|
gcal_window_events_removed (GcalManager *manager,
|
||||||
gpointer events_list,
|
gpointer events_list,
|
||||||
@@ -859,10 +906,6 @@ gcal_window_event_activated (GcalEventWidget *event_widget,
|
|||||||
gchar **tokens;
|
gchar **tokens;
|
||||||
gint response;
|
gint response;
|
||||||
|
|
||||||
GtkWidget *noty;
|
|
||||||
GtkWidget *grid;
|
|
||||||
GtkWidget *undo_button;
|
|
||||||
|
|
||||||
g_return_if_fail (GCAL_IS_WINDOW (user_data));
|
g_return_if_fail (GCAL_IS_WINDOW (user_data));
|
||||||
priv = GCAL_WINDOW (user_data)->priv;
|
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));
|
response = gtk_dialog_run (GTK_DIALOG (priv->edit_dialog));
|
||||||
gtk_widget_hide (priv->edit_dialog);
|
gtk_widget_hide (priv->edit_dialog);
|
||||||
|
|
||||||
switch (response)
|
gcal_window_edit_dialog_responded (GCAL_WINDOW (user_data), 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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1060,13 +1061,14 @@ gcal_window_event_overlay_closed (GcalEventOverlay *widget,
|
|||||||
gcal_event_overlay_reset (GCAL_EVENT_OVERLAY (priv->new_event_actor));
|
gcal_event_overlay_reset (GCAL_EVENT_OVERLAY (priv->new_event_actor));
|
||||||
|
|
||||||
clutter_actor_save_easing_state (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_set_opacity (priv->new_event_actor, 0);
|
||||||
clutter_actor_restore_easing_state (priv->new_event_actor);
|
clutter_actor_restore_easing_state (priv->new_event_actor);
|
||||||
|
|
||||||
g_signal_connect (priv->new_event_actor,
|
g_signal_connect (priv->new_event_actor,
|
||||||
"transition-stopped::opacity",
|
"transition-stopped::opacity",
|
||||||
G_CALLBACK (gcal_window_show_hide_actor_cb),
|
G_CALLBACK (gcal_window_show_hide_actor_cb),
|
||||||
NULL);
|
user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1075,8 +1077,17 @@ gcal_window_create_event (GcalEventOverlay *widget,
|
|||||||
gboolean open_details,
|
gboolean open_details,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
GcalWindowPrivate *priv;
|
||||||
GcalManager *manager;
|
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 */
|
/* create the event */
|
||||||
manager = gcal_window_get_manager (GCAL_WINDOW (user_data));
|
manager = gcal_window_get_manager (GCAL_WINDOW (user_data));
|
||||||
gcal_manager_create_event (manager,
|
gcal_manager_create_event (manager,
|
||||||
@@ -1085,9 +1096,6 @@ gcal_window_create_event (GcalEventOverlay *widget,
|
|||||||
new_data->start_date,
|
new_data->start_date,
|
||||||
new_data->end_date);
|
new_data->end_date);
|
||||||
|
|
||||||
if (open_details)
|
|
||||||
g_debug ("Opening details window NOW");
|
|
||||||
|
|
||||||
/* reset and hide */
|
/* reset and hide */
|
||||||
gcal_window_event_overlay_closed (widget, user_data);
|
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) &&
|
if (CLUTTER_ACTOR_IS_VISIBLE (actor) &&
|
||||||
clutter_actor_get_opacity (actor) == 0)
|
clutter_actor_get_opacity (actor) == 0)
|
||||||
clutter_actor_hide (actor);
|
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 */
|
/* Public API */
|
||||||
@@ -1133,6 +1208,10 @@ gcal_window_new_with_view (GcalApplication *app,
|
|||||||
"events-removed",
|
"events-removed",
|
||||||
G_CALLBACK (gcal_window_events_removed),
|
G_CALLBACK (gcal_window_events_removed),
|
||||||
win);
|
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),
|
gcal_toolbar_set_active_view (GCAL_TOOLBAR (win->priv->main_toolbar),
|
||||||
view_type);
|
view_type);
|
||||||
|
|||||||
Reference in New Issue
Block a user