Added method for send ::events-added signal.
Added a hack for send ::events-added signal to newly created views even when the range of dates covered is not changed.
This commit is contained in:
+56
-8
@@ -156,6 +156,8 @@ static void gcal_manager_on_event_removed (GObject *sour
|
|||||||
GAsyncResult *result,
|
GAsyncResult *result,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
static void gcal_manager_send_fake_events_added (GcalManager *manager);
|
||||||
|
|
||||||
G_DEFINE_TYPE(GcalManager, gcal_manager, G_TYPE_OBJECT)
|
G_DEFINE_TYPE(GcalManager, gcal_manager, G_TYPE_OBJECT)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -488,9 +490,6 @@ gcal_manager_load_source (GcalManager *manager,
|
|||||||
* So, there are a bunch of stuff to be done here:
|
* So, there are a bunch of stuff to be done here:
|
||||||
* <itemizedlist>
|
* <itemizedlist>
|
||||||
* <listitem><para>
|
* <listitem><para>
|
||||||
* Retrieving Object list with the new query.
|
|
||||||
* </para></listitem>
|
|
||||||
* <listitem><para>
|
|
||||||
* Releasing the old view, desconnecting the callbacks
|
* Releasing the old view, desconnecting the callbacks
|
||||||
* </para></listitem>
|
* </para></listitem>
|
||||||
* <listitem><para>
|
* <listitem><para>
|
||||||
@@ -615,11 +614,11 @@ gcal_manager_on_view_objects_added (ECalClientView *view,
|
|||||||
g_hash_table_insert (unit->events,
|
g_hash_table_insert (unit->events,
|
||||||
g_strdup (icalcomponent_get_uid (l->data)),
|
g_strdup (icalcomponent_get_uid (l->data)),
|
||||||
component);
|
component);
|
||||||
event_uuid = g_strdup_printf ("%s:%s",
|
|
||||||
source_uid,
|
|
||||||
icalcomponent_get_uid (l->data));
|
|
||||||
events_data = g_slist_append (events_data, event_uuid);
|
|
||||||
}
|
}
|
||||||
|
event_uuid = g_strdup_printf ("%s:%s",
|
||||||
|
source_uid,
|
||||||
|
icalcomponent_get_uid (l->data));
|
||||||
|
events_data = g_slist_append (events_data, event_uuid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -743,6 +742,49 @@ gcal_manager_on_event_removed (GObject *source_object,
|
|||||||
g_free (data);
|
g_free (data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gcal_manager_send_fake_events_added (GcalManager *manager)
|
||||||
|
{
|
||||||
|
GcalManagerPrivate *priv;
|
||||||
|
|
||||||
|
GHashTableIter clients_iter;
|
||||||
|
gpointer clients_key;
|
||||||
|
gpointer clients_value;
|
||||||
|
|
||||||
|
GHashTableIter e_iter;
|
||||||
|
gpointer e_key;
|
||||||
|
gpointer e_value;
|
||||||
|
|
||||||
|
GSList *events_data;
|
||||||
|
const gchar *source_uid;
|
||||||
|
const gchar *event_uid;
|
||||||
|
gchar *event_uuid;
|
||||||
|
|
||||||
|
priv = manager->priv;
|
||||||
|
|
||||||
|
events_data = NULL;
|
||||||
|
g_hash_table_iter_init (&clients_iter, priv->clients);
|
||||||
|
while (g_hash_table_iter_next (&clients_iter, &clients_key, &clients_value))
|
||||||
|
{
|
||||||
|
GcalManagerUnit *unit = (GcalManagerUnit*) clients_value;
|
||||||
|
|
||||||
|
source_uid = e_source_peek_uid (unit->source);
|
||||||
|
g_hash_table_iter_init (&e_iter, unit->events);
|
||||||
|
while (g_hash_table_iter_next (&e_iter, &e_key, &e_value))
|
||||||
|
{
|
||||||
|
ECalComponent *event = (ECalComponent*) e_value;
|
||||||
|
e_cal_component_get_uid (event, &event_uid);
|
||||||
|
|
||||||
|
event_uuid = g_strdup_printf ("%s:%s", source_uid, event_uid);
|
||||||
|
events_data = g_slist_append (events_data, event_uuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_signal_emit (manager, signals[EVENTS_ADDED], 0, events_data);
|
||||||
|
|
||||||
|
g_slist_free_full (events_data, g_free);
|
||||||
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
/**
|
/**
|
||||||
* gcal_manager_new:
|
* gcal_manager_new:
|
||||||
@@ -867,6 +909,8 @@ gcal_manager_get_source_name (GcalManager *manager,
|
|||||||
* an update of the internal list of events for every
|
* an update of the internal list of events for every
|
||||||
* opened calendar; a signal would be emitted
|
* opened calendar; a signal would be emitted
|
||||||
* when the updated it's done.
|
* when the updated it's done.
|
||||||
|
* In case the new range fits inside the old one,
|
||||||
|
* then the method generate a fake ::events-added signal.
|
||||||
*
|
*
|
||||||
* Return value: void
|
* Return value: void
|
||||||
*
|
*
|
||||||
@@ -915,11 +959,15 @@ gcal_manager_set_new_range (GcalManager *manager,
|
|||||||
since_iso8601,
|
since_iso8601,
|
||||||
until_iso8601);
|
until_iso8601);
|
||||||
|
|
||||||
g_debug ("Query %s", priv->query);
|
g_debug ("Reload query %s", priv->query);
|
||||||
|
|
||||||
/* redoing query */
|
/* redoing query */
|
||||||
gcal_manager_reload_events (manager);
|
gcal_manager_reload_events (manager);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gcal_manager_send_fake_events_added (manager);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
|||||||
Reference in New Issue
Block a user