Commit Graph
6131 Commits
Author SHA1 Message Date
davidandClaude Opus 5.5 dd1c1cd014 federated: Log why invitations aren't offered
With -vvv, say which check stopped people from being invited to an
event: a read-only calendar, a calendar that isn't on a Core's
Nextcloud, or an event organized by someone else.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 08:59:22 -06:00
davidandClaude Opus 5.5 aac336c817 event-editor/attendees-section: Import Adw in Blueprint
The invite row is an Adw.EntryRow, so the template needs Adw imported
to compile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 08:44:45 -06:00
davidandClaude Opus 5.5 8be61e439a build: Support libical 4
libical 4 changed several APIs used by GNOME Calendar:

 - libical-glib now provides autoptr cleanup for ICalTime, so only
   define it ourselves for older versions.
 - i_cal_recurrence_get/set_by_day() were removed in favor of the
   dynamically sized by-rule arrays; add local helpers on top of
   i_cal_recurrence_get/set_by().
 - i_cal_errno_return() was renamed to i_cal_error_icalerrno().

Also make the create-tzid event test independent of line folding,
which differs between libical versions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 08:44:07 -06:00
david 8d9eb034c7 Invite people to events on Federated Core calendars 2026-10-29 08:18:52 -06:00
John Cardullo eeea79bb9f gui/search-button: Disable popover arrow and guard markup escaping
The search suggestions popover is styled as a menu ("menu" style)
below the search entry. In recent GTK 4, when has-arrow is TRUE (the
default) and the popover has no arrow geometry or valid parent coordinates,
gtk_popover_create_arrow_path() returns NULL, leaving arrow_render_node NULL.
gtk_popover_snapshot() then appends NULL to the snapshot, causing a fatal
critical crash (GSK_IS_RENDER_NODE assertion failed) upon showing search results.

Setting "has-arrow: false" matches the menu popover design and avoids
the crash. Also guard escape_markup_cb() against NULL strings.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/808>
2026-10-27 11:10:58 -07:00
John Cardullo c1eca94482 gui/fading-label: Do not snapshot empty cached text node
When a label has empty text or an empty PangoLayout,
gtk_snapshot_free_to_node() returns NULL. Passing NULL to
gtk_snapshot_append_node() triggers a critical assertion failure
which causes an abort under G_DEBUG=fatal-criticals.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/808>
2026-10-27 11:10:58 -07:00
John Cardullo c7b1c977f7 core/calendar-monitor: Clear shared rw-lock on finalize
In gcal_calendar_monitor_init(), self->shared.lock is initialized with
g_rw_lock_init(). On Linux/glibc, GRWLock allocates memory for the
underlying pthread_rwlock_t (56 bytes).

Because g_rw_lock_clear() was never called in gcal_calendar_monitor_finalize(),
every finalized GcalCalendarMonitor leaked its lock resources, failing the
LeakSanitizer CI build when test_calendar_monitor_expand_recurrences was added.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/808>
2026-10-27 11:10:58 -07:00
John Cardullo 2aaac879d4 tests/search: Add unit tests for expand-recurrences and recurring search hits
Add unit test coverage for the new "expand-recurrences" property on
GcalTimeline and GcalCalendarMonitor, ensuring proper propagation,
default values, and notify signal emission. Also verify that
GcalSearchHitEvent correctly indicates recurrence in hit subtitles.

Reference: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/991
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/808>
2026-10-27 11:10:58 -07:00
John Cardullo cc4e537987 search: Fold recurring events into single results
When searching for events, users are typically interested in finding the
event rather than seeing a repetitive list of every occurrence instance.
By configuring the search timelines with "expand-recurrences" set to FALSE,
recurring events are loaded as their single master component instead of
expanding all individual occurrences.

Additionally:
- Update GcalSearchHitEvent subtitle to display "Recurring" (e.g. "Tomorrow • Recurring"
  or "Recurring") when the event has a recurrence rule.
- Safeguard gcal_event_format_date() when running without a default GApplication.

Fixes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/991
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/808>
2026-10-27 11:10:58 -07:00
John Cardullo 9d29a7a34e core: Add "expand-recurrences" property to GcalCalendarMonitor and GcalTimeline
Add an "expand-recurrences" boolean property (defaulting to TRUE) to both
GcalCalendarMonitor and GcalTimeline. When set to FALSE:
- Recurring master components are kept as single events without expanding
  each recurrence instance.
- Detached recurrence instances are ignored.
- Pruning outside range retains recurring master events so they are not
  prematurely removed.
- Subscriber filtering permits recurring master events within the
  subscriber model.

This allows consumers like search providers to avoid expanding all recurrence
instances when searching, improving performance and avoiding duplicate hits.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/808>
2026-10-27 11:10:58 -07:00
Hari RanaandNiklas Wimmer 4defb0019b common/date-chooser: Focus selected date in grid when tabbing into it
When tabbing into a grid or list of items that are selectable,
we want to focus the selected item when entering it. At the moment,
we only focus the first or last item in the date chooser grid,
rather than the selected item.

Co-authored-by: Niklas Wimmer <niklas@viric.eu>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/869>
2026-10-26 08:25:25 -04:00
Hari RanaandPeter Eisenmann 4f7403fd71 core/search-provider: Simplify the way range_changed is being set
Co-authored-by: Peter Eisenmann <p3732@getgoogleoff.me>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/873>
2026-10-25 19:48:04 +00:00
Hari Rana e49788c952 utils: Remove gcal_set_date_time()
`g_set_date_time()` now exists.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/873>
2026-10-25 19:48:04 +00:00
Hari Rana 84875616ab src: Use g_set_date_time()
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/873>
2026-10-25 19:48:04 +00:00
ARAKHNID b50db7aa9d src: Fix grammar issue
"Setup" is a noun, not a verb. Using "set up" instead when it's being used as a verb is correct.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/884>
2026-10-25 13:45:25 -05:00
Aidan Tuhoro-Bell 53f6fa6bb2 Update Maori translation 2026-10-19 01:21:52 +00:00
ARAKHNID 86c00a5292 gui/window: Remove open online calendars menu item
This menu item was found to be confusing in a small experiment with 3
people. Since online calendars are already accessible when adding
calendars in the calendar management dialog, this menu item can be
removed.

Closes #1642

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/876>
2026-10-16 21:37:06 +00:00
Hari Rana acd87d2626 mailmap: Add file
See: https://git-scm.com/docs/gitmailmap
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/879>
2026-10-16 14:41:14 +00:00
Antonio Marin cae9950f49 Update Romanian translation 2026-10-12 19:22:57 +00:00
Cátia Silva 5c8a6767e7 Update Portuguese translation
(cherry picked from commit 4732b630b969fb46cec9d025d43f5d0d0b592916)
2026-10-12 13:07:52 +00:00
Martin adc7273b34 Update Slovenian translation 2026-10-12 07:34:52 +00:00
Georges Basile Stavracas Neto 9d97c5a9bd views/month: Read number of rows from setting
And react to changes.

Helps:
https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/1064

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/856>
2026-10-11 20:07:17 -04:00
Georges Basile Stavracas Neto 4f9b8e5e4a views/month: Parametrize constants
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/856>
2026-10-11 14:50:14 -04:00
Georges Basile Stavracas Neto 4dac610aa8 gsettings: Add setting for Month view rows
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/856>
2026-10-11 14:50:14 -04:00
Hari Rana d6a4137c80 views/agenda: Remove FIXME
`clear_marks()` doesn't need to be implemented in the agenda view.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/872>
2026-10-06 08:05:17 -04:00
Hari Rana 12caabb67d views/month: Set date when the dates are different
Fixes: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/1500>
Fixes: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/1649>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/871>
2026-10-05 11:38:57 +00:00
mindonwarp c2964baaed views/week-header: Avoid setting date when dates share the same start-of-week
Instead of checking `g_date_time_get_week_of_year()`, which doesn't
care about "first day of week" settings, we use our
`gcal_date_time_get_start_of_week()` utility function. This function
determines the first day of the week the passed date belongs to,
constructs a new `GDateTime` object that represents the first day
of week as 'Y-M-D 00:00:00' in local timezone, all while taking
into account the "first day of week" Desktop setting.

Fixes: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/1212>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/868>
2026-10-04 23:00:35 +00:00
mindonwarp 592a63c782 views/week: Signal range changed on first weekday changed
Adds the missing call to the `GcalTimelineSubscriber::range-changed`
after redrawing the week view grids, fixing rearranged days appearing
empty.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/867>
2026-10-04 22:03:26 +00:00
Zelda Ahmed 5a23ab940f views/agenda-item: Drop event widget property and methods
In the end, we did not need to store the event widget in the item to be
able to activate it, so this code can be dropped completely.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/866>
2026-10-04 16:31:38 +01:00
Zelda Ahmed 65ae1c5ef2 views/agenda: Remove unsued ChildData structure
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/866>
2026-10-04 16:29:22 +01:00
Zelda Ahmed 5996b00108 views/agenda: Remove unused items in structure
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/866>
2026-10-04 16:29:22 +01:00
Hari Rana e27e477e69 gui/calendar-navigation-button: Fix memory leak
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/865>
2026-10-04 14:06:44 +00:00
mindonwarp 6f511b600a appdata: Add release info tag for 52~alpha
Since we now have fatal criticals enabled, we are prone to crashes
caused by our external dependencies emitting criticals. The newest case
is the Adwaita About dialog. The critical happened because `ministream`
couldn't find a release tag for 52.0

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/864>
2026-10-04 12:35:19 +02:00
Hari Rana b1f6e609c6 views/week-grid: Only set parent when child_data->widget has been created
`add_event_to_block()` assumes that the child widget has never been
parented, so it will always set the parent widget when the widget
is already parented, which triggers a critical error in GTK.

This patch addresses this situation by only parenting when the
widget has just been created. Additionally, it asserts that the
parent widget is `self` in the end, so that it crashes if this
is incorrect.

Fixes: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/1643>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/863>
2026-10-03 19:24:19 -04:00
mindonwarp 81fa0f29c4 core: Catch errors when trying to read from settings portal
`g_dbus_proxy_call_sync` will return NULL and set the recoverable
`error` in case of failure.

We didn't catch this previously so reading the variant from the return
value caused a CRITICAL because a user didn't have the `week-start-day`
setting (introduced in 50.alpha) and the returned `GVariant` was NULL.

Now, we check whether en error is set after calling
`g_dbus_proxy_call_sync` and propagate it to the calling method so it
can gracefully handle it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/862>
2026-10-03 13:26:49 +02:00
mindonwarp 0a72c05311 views/agenda: Fix critical in first weekday changed
The `gcal_agenda_view_first_weekday_changed` uses the same
`gtk_list_view_scroll_to` method that expects the scroll position to be
smaller than the number of items in the list model.

When the list model contains no items, the method reports a critical
which crashes the Calendar whith `fatal-criticals` enabled.

This is the same fix that Georges made in the
`gcal_agenda_view_set_date` method. We now check the number of items
before trying to scroll the list view to position zero.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/861>
2026-10-03 12:58:02 +02:00
Martin b09d79a9b1 Update Slovenian translation 2026-10-03 10:47:15 +00:00
Zelda Ahmed d163d1bf82 gui/window: Cast the returned value of g_object_get_data
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/849>
2026-10-02 21:39:10 +00:00
Zelda Ahmed 7b9072fdac gui/calendar-list: Cast the returned value of g_object_get_data
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/849>
2026-10-02 21:39:10 +00:00
Zelda Ahmed e16e33783e common/calendar-row: Cast the returned value of g_object_get_data
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/849>
2026-10-02 21:39:10 +00:00
Zelda Ahmed 43fdb229c5 calendar-management/page: Cast the returned value of g_object_get_data
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/849>
2026-10-02 21:39:10 +00:00
ARAKHNID a635ca51ed gui/views/week-view: Add shortcuts for zooming in/out
It's possible to change the density of the week view, but only through
pinch-zooming or Ctrl+scroll wheel. This means it can't be done with
only the keyboard, and since neither of these methods are documented,
it's not discoverable either.

This adds shortcuts for zooming the view in and out, and documents them
in the shortcuts dialog to make them discoverable.

Helps #1556

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/859>
2026-10-02 21:33:57 +00:00
Niklas Wimmer f6bbd38023 flatpak: Enable fatal-criticals
We discussed this on Matrix multiple times and came to the conclusion
that crashing the application is preferred on Nightly and during
development. We often miss a critical log message during development
because it gets swamped by all the other logs. Now we can no longer
ignore them.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/857>
2026-10-02 21:27:15 +00:00
Georges Basile Stavracas Neto a1c3439535 views/agenda: Only scroll when there are items
`gtk_list_view_scroll_to()` is documented to require that `pos` is
smaller than the number of items in the model. We were not checking
if the model was empty before calling this function, which could
lead to criticals.

Check if the listview model has any items before scrolling it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/860>
2026-10-02 18:19:13 -03:00
Georges Basile Stavracas Neto 6c2bc5be46 core/log: Improve logging
- Stop using GDateTime formatting as that's super slow!
- Log the thread id as wel

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/858>
2026-10-02 13:58:05 +00:00
Georges Basile Stavracas Neto 509165286e gui/application: Change --debug to --verbose
And support multiple calls to it. Each call increase the verbose
level, up to level 4. Level 4 increases all tracing.

You can run Calendar as:

$ gnome-calendar -vvvv

now and that'll enable tracing.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/1234
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/858>
2026-10-02 13:58:05 +00:00
Georges Basile Stavracas Neto a3598c0c11 main: Always initialize logging
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/858>
2026-10-02 13:58:05 +00:00
Georges Basile Stavracas Neto c4c5c81cdf core/log: Enable tracing with G_MESSAGES_DEBUG=all
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/858>
2026-10-02 13:58:04 +00:00
Georges Basile Stavracas Neto b82f6bbcb8 core/log: Support verbosity levels
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/858>
2026-10-02 13:58:04 +00:00
Georges Basile Stavracas Neto d0e8fa85b3 gui/application: Change --version shortname to uppercase V
This will free -v for --verbose

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/858>
2026-10-02 13:58:03 +00:00