Commit Graph
100 Commits
Author SHA1 Message Date
Georges Basile Stavracas Neto 16a67b7f60 views/week-header: Use gdkarrayimpl.c as backing store
Same deal. It's faster.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/757>
2026-05-03 15:30:20 -03:00
Georges Basile Stavracas Neto 2f7dce36e2 core/event-list: Use gdkarrayimpl.c as backing store
GSequence is useful and provides us with a convenient API, however,
it pretty much guarantees cache misses when iterating, lots of pointer
chasing, and scattered memory.

gdkarrayimpl.c works around all of that, at the cost of more expensive
additions and removals. But because we do a lot more lookups compared
to edits, there should still be benefits to it.

Change the backing store to be based on gdkarrayimpl.c.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/757>
2026-05-03 15:29:31 -03:00
Georges Basile Stavracas Neto d207a95656 contrib: Import gdkarrayimpl.c from GDK
We'll use this in the next patch to reimplement GcalEventList.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/757>
2026-05-03 14:56:07 -03:00
Georges Basile Stavracas Neto c9c4f1c046 gui/window: Only add Agenda view to timeline when visible
There's no point in adding the Agenda view to the timeline when it's
invisible, it just causes invisible and unnecessary event widget
recreation.

Add it lazily to the timeline, when the page visibility changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/757>
2026-05-03 14:56:07 -03:00
Georges Basile Stavracas Neto 95bc0a8fb2 views/month: Reduce to 3 pages
Now that the timeline handles augmentation, the Month view doesn't need
to fetch so much data at once. Reduce to 3 pages of month rows.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/757>
2026-05-03 14:56:07 -03:00
Georges Basile Stavracas Neto d47358f294 core/manager: Use an augmented timeline
Augment the range of events by a factor of 2.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/755>
2026-05-03 14:01:22 -03:00
Georges Basile Stavracas Neto b353c9f259 core/timeline: Add support for augmented timelines
Augmented timelines increase the range of dates from its subscribers
by the specified factor. They're useful for the interactive views,
since they prevent fetching new events so often as when views change.

Add the necessary API.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/755>
2026-05-03 14:01:22 -03:00
Georges Basile Stavracas Neto 08f3f94ec1 gui/application: Stop weather service on shutdown
Instead of during context finalization, which is too late.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:54 +00:00
Georges Basile Stavracas Neto cd82c2c52c gui/date-chooser: Properly remove idle source
When disposing of the widget, also remove the associated idle source
that might exist. This prevents a crash.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:54 +00:00
Georges Basile Stavracas Neto c084e28400 views/week: Don't deal with events out of range
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:54 +00:00
Georges Basile Stavracas Neto c71fcf7029 views/month: Add "range" property to rows and use it
Use it as the binding source of the GtkExpression for the boolean
filter used to filter the list of events. This allows automatic
filtering when the "range" property changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:54 +00:00
Georges Basile Stavracas Neto afd9f9b954 core/timeline: Remove message queueing and listeners
"Let go and move on." - The Fool?

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:54 +00:00
Georges Basile Stavracas Neto 136fd16a0a gui/date-chooser: Port to GListModel
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:54 +00:00
Georges Basile Stavracas Neto d065d4b9e8 views/agenda: Port to GListModel
This is a major rework of the Agenda view. It splits the view into
GcalAgendaViewDay, which represent a single day with events; and
GcalAgendaViewDayRow, which is the actual widget with a title label,
and a listbox with event widgets.

The Agenda view itself merely manages a list of GcalAgendaViewDays,
and updates them with the events model, and active dates.

This allows us to get rid of the custom listbox row, and the confusing
checks for event widgets, and all the bugs the came with it. It also
allows for removing the internal GcalRangeTree, and delegate all
event management to list models.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:54 +00:00
Georges Basile Stavracas Neto 5c39162f86 core/search-provider: Port to GListModel
No deal

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:53 +00:00
Georges Basile Stavracas Neto fa03c6f9af views/week-grid: Port to GListModel
And, while at it, rewrite the layout algorithm to operate on blocks of
overlapping events, and segmented columns. Like the month view row,
layouts blocks are invalidated at any point in time, but recalculated
immediately before a relayout happens.

The reason for doing such a massive rewrite while in the middle of the
port to GListModel is because it's easier to handle GListModel data
with this approach, than with the previous approach of storing it all
in a GcalRangeTree.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1153
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:53 +00:00
Georges Basile Stavracas Neto 5fe24582d4 core/range-tree: Add gcal_range_tree_has_entries_at_range
It checks if there's any entry in that range. It's a little faster
than gcal_range_tree_count_entries_at_range() because it stops at
the first entry that matches it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:52 +00:00
Georges Basile Stavracas Neto 807f5608b1 search/model: Port to GListModel
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:52 +00:00
Georges Basile Stavracas Neto 34e28e31fe views/week: Port week header to GListModel
Rework the add/remove functions to make them internal. The remove
function can now operate on GcalEvent* instead of gchar* uuid,
since it's not bound to GcalTimelineSubscriber anymore.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:52 +00:00
Georges Basile Stavracas Neto c635db3495 views/week: Port to GPtrArray
GLists are an artifact of times immemorial and we should
avoid using them as much as possible. In this commit, for
example, there were a couple of accidentally quadratic
pieces of code.

Port (mostly of) the week view header to GPtrArray.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:51 +00:00
Georges Basile Stavracas Neto 039b75755e views/month: Port to GListModel
Neutralize the add/remove/update vfuncs (we can't remove them yet).
Pass the event model to the individual week rows, and let them
filter their events using a GtkFilterListModel.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:51 +00:00
Georges Basile Stavracas Neto df8033b3ba core/timeline: Cosmetics
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:51 +00:00
Georges Basile Stavracas Neto 71c5d0b70d core/timeline: Add plumbing for models
Add a GtkFlattenListModel that flattens out all events from the
calendar monitors. Keep a GtkFilterListModel, and a GtkSortListModel,
for each subscriber. Manually update the filter when the range of
the subscriber changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:50 +00:00
Georges Basile Stavracas Neto 5f5e438955 core/timeline-subscriber: Add set_model() vfunc
This is the entry point that will allow views to use models instead
of the manual add/remove/update_events vfuncs.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:50 +00:00
Georges Basile Stavracas Neto a303759913 core/timeline: Store calendar monitors in a GListModel
This will allow flattening and merging them.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:50 +00:00
Georges Basile Stavracas Neto cc6736a16f core/calendar-monitor: Implement GListModel
This uses GcalEventList to as the backing store of events, and proxies
the "items-changed" signal.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:49 +00:00
Georges Basile Stavracas Neto 9eea2ee985 core/calendar-monitor: Use NULL-terminated arrays
This will help with next commits

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:49 +00:00
Georges Basile Stavracas Neto 6da43e9353 Introduce GcalEventList
This is a GListModel implementation that is specific to
GcalEvents. Events are stored in a GSequence in order of
date.

Add a couple of tests exercising additions and removals.

WIP: add more tests
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:49 +00:00
Georges Basile Stavracas Neto 4796330de0 core/log: Ignore GWeather messages
Mostly noise, and lots of XML outputs.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:49 +00:00
Georges Basile Stavracas Neto 020611cd12 Post-branching version bump 2026-03-17 20:03:32 -03:00
Georges Basile Stavracas Neto 70388c9541 Post-release version bump 2026-03-14 12:25:49 -03:00
Georges Basile Stavracas Neto ff4d7f7d59 50.0 2026-03-14 12:24:48 -03:00
Georges Basile Stavracas Neto 1281598aa7 contributing: Link to CoC and add no-LLM statement
This is copied ad verbatum from libadwaita, which itself was
introduced based on [1].

[1]
https://discourse.gnome.org/t/loupe-no-longer-allows-generative-ai-contributions/27327
2026-03-13 19:24:42 -03:00
Georges Basile Stavracas Neto 0c1636b7aa gui/multi-choice: Use g_clear_pointer more
Just a cosmetic improvement.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/721>
2026-03-10 20:45:35 -03:00
Georges Basile Stavracas Neto 9712280aea core/manager: Cosmetics 2026-03-03 20:12:45 -03:00
Georges Basile Stavracas Neto b4292c2026 core/manager: Increment before potentially decrementing
Otherwise we can go backwards first. Not going to break anything,
but this is a more robust logic.
2026-03-03 20:11:07 -03:00
Georges Basile Stavracas Neto e1438b3c8e core/manager: Use g_autoptr more
In the clients list.
2026-03-03 20:09:51 -03:00
Georges Basile Stavracas Neto c2189f1860 NEWS: Fix typo 2026-03-01 17:08:06 -03:00
Georges Basile Stavracas Neto 65e0642ad6 Post-release version bump 2026-03-01 16:56:07 -03:00
Georges Basile Stavracas Neto 6f37e4e486 50.rc 2026-03-01 16:55:19 -03:00
Georges Basile Stavracas Neto 5b1d57f823 Post-release version bump 2026-02-09 18:30:08 -03:00
Georges Basile Stavracas Neto ae9d7a3762 50.beta 2026-02-09 18:29:10 -03:00
Georges Basile Stavracas Neto 0285dbe04f event-editor/organizer-row: Fix use before NULL check
Fallout from my changes to the previous commit.
2026-01-21 17:04:49 -03:00
Georges Basile Stavracas Neto ce26a9b8e1 Post-release version bump 2026-01-05 20:03:20 -03:00
Georges Basile Stavracas Neto fcc8845669 50.alpha 2026-01-05 20:02:30 -03:00
Georges Basile Stavracas Neto 484ce89b0f flatpak: Add test args
Much like with finish-args, this makes the permissions
available to the sandbox when using the flatpak-builder
test-runner.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/667>
2025-12-06 00:55:43 +02:00
Georges Basile Stavracas Neto 0d765c4ff6 flatpak: Don't run in debug mode
Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1234
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/667>
2025-12-06 00:55:43 +02:00
Georges Basile Stavracas Neto 4c4fc5a965 core/range-tree: Properly free nodes
It was missing the GDateTime *max field.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/664>
2025-11-19 18:01:11 -03:00
Georges Basile Stavracas Neto 13dc2ff3be tests/daylight-saving: Fix string leaks
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/664>
2025-11-19 17:52:53 -03:00
Georges Basile Stavracas Neto 36d3837e0b core/range-tree: Clear range from deleted nodes
Otherwise we leak the range.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/664>
2025-11-19 17:43:04 -03:00
Georges Basile Stavracas Neto 2d8d50591e tests/utils: Declare ICalTimes with g_autoptr
The corresponding ICalComponent functions are transfer full.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/664>
2025-11-19 17:27:31 -03:00
Georges Basile Stavracas Neto 3225ffc88e tests/utils: Unref ICalComponent properly
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/664>
2025-11-19 17:19:05 -03:00
Georges Basile Stavracas Neto b064a23dbc tests/event: Fix string leak
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/664>
2025-11-19 17:14:37 -03:00
Georges Basile Stavracas Neto 50217bba42 core/event: Cosmetics
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/663>
2025-11-19 09:48:25 -03:00
Georges Basile Stavracas Neto a884076dc5 core/event: Remove g_autoptr declaration
Turns out g_date_time_get_timezone() is transfer-none, so assigning it
to a g_autoptr variable is invalid.

Fixes 42f891ff42

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/663>
2025-11-19 09:47:29 -03:00
Georges Basile Stavracas Neto 6bb52f53e5 core/event: Improve setup function
Use g_autoptr, shuffle some code around, and fix a memory leak.
2025-11-18 14:58:08 -03:00
Georges Basile Stavracas Neto 67ca9ed20c utils: Watch calendars for read-only change
This should make the list model update itself whenever a calendar
changes between read-only and read-write.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/660>
2025-11-18 12:09:01 -03:00
Georges Basile Stavracas Neto 18f7c0f87d build: Depend on GTK4 4.20
We'll use the new watch items API in GtkFilterListModel.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/660>
2025-11-18 12:08:32 -03:00
Georges Basile Stavracas Neto 564ce76349 views/month: Don't manually set can-focus property
Now that we're meddling with child visibility, hidden rows shouldn't
be focusable. At least that's what Hari discovered :)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/659>
2025-11-08 22:02:49 -03:00
Georges Basile Stavracas Neto 084a495f5c views/month: Hide invisible rows
Change the child-visible property of rows when allocating. It's safe
to do in allocation because it doesn't affect layout, just rendering.

Related:
https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/402

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/659>
2025-11-08 21:18:55 -03:00
Georges Basile Stavracas Neto ceee69599d flatpak: Add gweather-locations 2025-09-14 10:29:19 -03:00
Georges Basile Stavracas Neto 4256723c2a Post-branching version bump 2025-09-14 10:22:43 -03:00
Georges Basile Stavracas Neto 727d05edff 49.0 2025-09-14 10:20:21 -03:00
Georges Basile Stavracas Neto c25bdc5713 Post-release version bump 2025-08-30 12:34:30 -03:00
Georges Basile Stavracas Neto 8c6c417347 49.rc 2025-08-30 12:33:48 -03:00
Georges Basile Stavracas Neto 7282943d21 views/month: Remove useless function
The update_header_labels() was rendered useless after commit 1de447f7.

This was discovered by static-scan. Thanks for Arak for finding the
root cause.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1418
2025-07-11 13:33:13 -03:00
Georges Basile Stavracas Neto 257570b5aa Post-release version bump 2025-07-05 17:43:42 -03:00
Georges Basile Stavracas Neto 8db5c1cada 49.alpha 2025-07-05 17:41:18 -03:00
Georges Basile Stavracas Neto d16cc2bc68 utils: Remove get_source_parent_name_color
One less weird function lurking around.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/610>
2025-07-02 18:04:26 +00:00
Georges Basile Stavracas Neto 281191b5b3 gui/calendar-list: Add headers
This makes it easier to see which calendar belongs to which group.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1196
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/610>
2025-07-02 18:04:26 +00:00
Georges Basile Stavracas Neto e9ec77f15b core/calendar: Add "parent-source" property
Tracks the parent ESource of this calendar. Will be useful for future
patches.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/610>
2025-07-02 18:04:26 +00:00
Georges Basile Stavracas Neto 4e7bc70450 gui/window: Cosmetics 2025-06-30 12:48:47 -03:00
Georges Basile Stavracas Neto 766369dd48 build: Remove unused variables 2025-05-21 01:38:07 -03:00
Georges Basile Stavracas Neto 6a9d5a75fa core/calendar-monitor: Remove property descriptions
They're unnecessary.
2025-05-21 01:38:00 -03:00
Georges Basile Stavracas Neto 06ef0539e4 views/week: Properly math out selection positions
Commit 69ac7468e2 introduced a regression since it calculates the
height of the selection widget based on the Y position of end+1 cell,
which is the first cell of the next column in the case of the last
cell.

Fix that by mathing out properly.

Fixes: 69ac7468e2
Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1397
2025-05-04 17:16:18 -03:00
Georges Basile Stavracas Neto 5504872eb6 views/week: Better scope some variables
Move them to inner scopes, and make them signed integers.
2025-05-04 17:15:04 -03:00
Georges Basile Stavracas Neto c42d987335 gui/window: Track focus widget when showing event preview
Store a weak pointer to whatever widget triggered the preview, and
restore when the popover is closed. This should fix the focused list
box row issue.
2025-04-30 21:43:52 -03:00
Georges Basile Stavracas Neto 37878416f3 ci: Add commit rules 2025-04-04 21:52:33 -03:00
Georges Basile Stavracas Neto 4b331d65d9 ci: Install more packages 2025-04-04 21:24:26 -03:00
Georges Basile Stavracas Neto 4fc7ad2f89 ci: Set executable bit of clang-format-diff 2025-04-04 21:22:31 -03:00
Georges Basile Stavracas Neto 2d755da859 ci: Use Fedora image for style checker 2025-04-04 21:16:59 -03:00
Georges Basile Stavracas Neto 4356c64ac8 ci: Set executable flag in run-style-check-diff.sh 2025-04-04 21:01:13 -03:00
Georges Basile Stavracas Neto 340081d431 views/week: Remove shared size group 2025-04-04 21:00:30 -03:00
Georges Basile Stavracas Neto 5ac19000ea views/week: Use a separator instead of custom CSS 2025-04-04 21:00:30 -03:00
Georges Basile Stavracas Neto f336b142f4 views/week: Reimplement arrow changes with CSS 2025-04-04 21:00:30 -03:00
Georges Basile Stavracas Neto 9048fe939f views/week: Move expand header button to week view 2025-04-04 21:00:30 -03:00
Georges Basile Stavracas Neto c0dfe588ae views/week: Add 'can-expand' property 2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto f653dcd9e6 views/week: Add 'expanded' property 2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto a07d80cccf views/week: Extract headers into GcalWeekView
Instead of handling them in GcalWeekHeader
2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto 65f793b59e views/week: Use widget for DnD 2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto f4ef9a29c3 views/week: Use anonymous struct for DnD 2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto cbfada052d views/week: Use widget to draw selection
Same as week grid.
2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto e94600668c weeks/view: Add anonymous struct for selection
Same as the grid view.
2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto ea23581cf5 views/week: Use g_autoptr more
And remove an unused variable.
2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto 82fa42ec9e views/week: Replace chain up by manual snapshotting
Should make it easier to spot mistakes in the future.
2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto fb52dae400 views/week: Turn GcalWeekHeader into a GtkWidget
No functional changes so far.
2025-04-04 21:00:29 -03:00
Georges Basile Stavracas Neto 7c8285bdab views/week: Add intermediary GtkBox 2025-04-04 21:00:28 -03:00
Georges Basile Stavracas Neto 68a3cedbc5 Remove attic
The old month view code has no reason to linger around anymore.
2025-04-04 21:00:28 -03:00
Georges Basile Stavracas Neto adc05dbcbc Post-branching version bump 2025-03-19 19:45:40 -03:00
Georges Basile Stavracas Neto e4739c2955 48.1 2025-03-19 19:43:31 -03:00