view/agenda-view-day: Use a map model to create GcalAgendaViewItems for each event of the day
Required some small changes to `gcal-agenda-day-row.c` to keep the application working - `create_day_row_func` was tweaked to query the given item for the event, instead of assuming the event is the item itself. This will be removed (alongside the rest of GcalAgendaDayRow) in a later commit Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/809>
This commit is contained in:
@@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gcal-agenda-view-day-row.h"
|
#include "gcal-agenda-view-day-row.h"
|
||||||
|
#include "gcal-agenda-view-item.h"
|
||||||
#include "gcal-date-time-utils.h"
|
#include "gcal-date-time-utils.h"
|
||||||
#include "gcal-debug.h"
|
#include "gcal-debug.h"
|
||||||
#include "gcal-enums.h"
|
#include "gcal-enums.h"
|
||||||
@@ -129,10 +130,10 @@ create_day_row_func (gpointer item,
|
|||||||
|
|
||||||
self = (GcalAgendaViewDayRow *) user_data;
|
self = (GcalAgendaViewDayRow *) user_data;
|
||||||
|
|
||||||
g_assert (GCAL_IS_EVENT (item));
|
g_assert (GCAL_IS_AGENDA_VIEW_ITEM (item));
|
||||||
g_assert (GCAL_IS_AGENDA_VIEW_DAY_ROW (self));
|
g_assert (GCAL_IS_AGENDA_VIEW_DAY_ROW (self));
|
||||||
|
|
||||||
event = item;
|
event = gcal_agenda_view_item_get_event (GCAL_AGENDA_VIEW_ITEM (item));
|
||||||
|
|
||||||
/* Create and add the new event widget */
|
/* Create and add the new event widget */
|
||||||
if (gcal_event_get_all_day (event) || gcal_event_is_multiday (event))
|
if (gcal_event_get_all_day (event) || gcal_event_is_multiday (event))
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#define G_LOG_DOMAIN "GcalAgendaViewDay"
|
#define G_LOG_DOMAIN "GcalAgendaViewDay"
|
||||||
|
|
||||||
#include "gcal-agenda-view-day.h"
|
#include "gcal-agenda-view-day.h"
|
||||||
|
#include "gcal-agenda-view-item.h"
|
||||||
|
|
||||||
#include "gcal-date-time-utils.h"
|
#include "gcal-date-time-utils.h"
|
||||||
#include "gcal-range.h"
|
#include "gcal-range.h"
|
||||||
@@ -34,6 +35,7 @@ struct _GcalAgendaViewDay
|
|||||||
GcalRange *range;
|
GcalRange *range;
|
||||||
|
|
||||||
GtkFilterListModel *filtered_events;
|
GtkFilterListModel *filtered_events;
|
||||||
|
GtkMapListModel *map_model;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void g_list_model_interface_init (GListModelInterface *iface);
|
static void g_list_model_interface_init (GListModelInterface *iface);
|
||||||
@@ -67,6 +69,21 @@ on_filtered_events_items_changed_cb (GListModel *model,
|
|||||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_N_ITEMS]);
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_N_ITEMS]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gpointer
|
||||||
|
map_events_to_items_func (GcalEvent *event,
|
||||||
|
GcalAgendaViewDay *self)
|
||||||
|
{
|
||||||
|
g_autoptr (GcalAgendaViewItem) item = NULL;
|
||||||
|
|
||||||
|
item = g_object_new (GCAL_TYPE_AGENDA_VIEW_ITEM,
|
||||||
|
"event", event,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_object_unref (event);
|
||||||
|
|
||||||
|
return g_steal_pointer (&item);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GListModel interface
|
* GListModel interface
|
||||||
@@ -75,7 +92,7 @@ on_filtered_events_items_changed_cb (GListModel *model,
|
|||||||
static GType
|
static GType
|
||||||
gcal_agenda_view_day_get_item_type (GListModel *model G_GNUC_UNUSED)
|
gcal_agenda_view_day_get_item_type (GListModel *model G_GNUC_UNUSED)
|
||||||
{
|
{
|
||||||
return GCAL_TYPE_EVENT;
|
return GCAL_TYPE_AGENDA_VIEW_ITEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
static unsigned int
|
||||||
@@ -85,7 +102,7 @@ gcal_agenda_view_day_get_n_items (GListModel *model)
|
|||||||
|
|
||||||
g_assert (GCAL_IS_AGENDA_VIEW_DAY (self));
|
g_assert (GCAL_IS_AGENDA_VIEW_DAY (self));
|
||||||
|
|
||||||
return g_list_model_get_n_items (G_LIST_MODEL (self->filtered_events));
|
return g_list_model_get_n_items (G_LIST_MODEL (self->map_model));
|
||||||
}
|
}
|
||||||
|
|
||||||
static gpointer
|
static gpointer
|
||||||
@@ -96,7 +113,7 @@ gcal_agenda_view_day_get_item (GListModel *model,
|
|||||||
|
|
||||||
g_assert (GCAL_IS_AGENDA_VIEW_DAY (self));
|
g_assert (GCAL_IS_AGENDA_VIEW_DAY (self));
|
||||||
|
|
||||||
return g_list_model_get_item (G_LIST_MODEL (self->filtered_events), position);
|
return g_list_model_get_item (G_LIST_MODEL (self->map_model), position);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -120,6 +137,8 @@ gcal_agenda_view_day_dispose (GObject *object)
|
|||||||
g_clear_pointer (&self->range, gcal_range_unref);
|
g_clear_pointer (&self->range, gcal_range_unref);
|
||||||
gcal_clear_date_time (&self->date);
|
gcal_clear_date_time (&self->date);
|
||||||
|
|
||||||
|
g_clear_object (&self->map_model);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gcal_agenda_view_day_parent_class)->dispose (object);
|
G_OBJECT_CLASS (gcal_agenda_view_day_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,9 +235,15 @@ filter_events_func (gpointer item,
|
|||||||
static void
|
static void
|
||||||
gcal_agenda_view_day_init (GcalAgendaViewDay *self)
|
gcal_agenda_view_day_init (GcalAgendaViewDay *self)
|
||||||
{
|
{
|
||||||
|
|
||||||
self->filtered_events = gtk_filter_list_model_new (NULL,
|
self->filtered_events = gtk_filter_list_model_new (NULL,
|
||||||
GTK_FILTER (gtk_custom_filter_new (filter_events_func, self, NULL)));
|
GTK_FILTER (gtk_custom_filter_new (filter_events_func, self, NULL)));
|
||||||
g_signal_connect (self->filtered_events, "items-changed", G_CALLBACK (on_filtered_events_items_changed_cb), self);
|
|
||||||
|
self->map_model = gtk_map_list_model_new (G_LIST_MODEL (self->filtered_events),
|
||||||
|
(GtkMapListModelMapFunc) map_events_to_items_func,
|
||||||
|
self, NULL);
|
||||||
|
|
||||||
|
g_signal_connect (self->map_model, "items-changed", G_CALLBACK (on_filtered_events_items_changed_cb), self);
|
||||||
}
|
}
|
||||||
|
|
||||||
GcalAgendaViewDay *
|
GcalAgendaViewDay *
|
||||||
|
|||||||
Reference in New Issue
Block a user