Commit Graph
256 Commits
Author SHA1 Message Date
Zoey Ahmed fbfacb6972 gui/blueprint: Drop unneeded casts to built-ins
Blueprint can now "infer" the type a closure returns, as long as it is
not the property of a custom GType, so some of the casts (e.g. `as
<string>`) will not be necessary anymore

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/733>
2026-03-24 16:43:10 +00:00
Hari Rana 9b4c166a18 event-editor/event-editor-dialog: Replace "context" property with context getter method
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:01 +00:00
Hari Rana f44a1ee942 event-editor/event-editor-section: Remove "context" property
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:00 +00:00
Hari Rana 669906c601 event-editor/summary-section: Remove "context" property
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:00 +00:00
Hari Rana b979ea05b5 event-editor/schedule-section: Replace "context" property with context getter method
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:00 +00:00
Hari Rana 7bcb78b6ae event-editor/reminders-section: Remove "context" property
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:00 +00:00
Hari Rana aafbd71ced event-editor/notes-section: Remove "context" property
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:00 +00:00
Hari Rana a51b65f5f7 event-editor/attendees-section: Remove "context" property
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:00 +00:00
Zoey Ahmed 2300ed29cd notes: Add placeholder text if notes section empty
Move the textview box into an overlay, with a label as the overlay
child,
that appears only when the textview is empty, and remove the "Notes"
title for the preference group with the notes row in the event dialog.

This better indicates the notes is an input field to the user, compared
to the design before.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1081
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/714>
2026-03-23 18:25:12 +00:00
Hari Rana 39cee3cbc3 event-editor/multi-choice: Check if destructor exists before clearing
Without this check, the app supposedly crashes when we close it.

GtkListBox frees itself the same way.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/723>
2026-03-12 01:12:29 +00: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
Guillaume Bernard 5a663ee671 multi-choice: Fix i18n of navigation button tooltips
The previous approach built tooltip strings by formatting a translated
category name (e.g. "Month") into a generic "Previous %1$s" template.
This is a classic gettext concatenation anti-pattern: languages with
grammatical gender (French, Spanish, German, …) need the adjective to
agree with the noun, and word order can differ from English, so
translators of the format string have no way to produce a correct
result.

Replace the format strings and their helper callbacks with two explicit
GObject properties on GcalMultiChoice: prev-button-tooltip-text and
next-button-tooltip-text. The buttons in the template now bind to
these properties directly. Each widget instance in gcal-date-chooser.blp
sets its own fully self-contained translatable string ("Previous month",
"Next month", "Previous year", "Next year"), giving translators all the
context they need to handle gender and word order correctly.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1547
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/721>
2026-03-10 20:43:02 -03:00
Hari Rana 50e048c7e0 utils: Turn number of weekdays into a macro
While "7" may be obvious in the context of calendaring that
it represents the number of week days, it often gives me the
impression of it being a magic number when I'm hyperfocused on certain
parts of the codebase for several consecutive hours. Turning the
number into a macro helps me scan functions much more easily.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/674>
2026-03-08 21:53:40 -04:00
Hari Rana 033e719833 event-editor/alarm-row: Remove volume_button member
`volume_button` no longer exists.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/708>
2026-02-27 21:37:42 -05:00
Fabian HügelandMaximiliano Sandoval 8af5298e50 event-editor/multi-choice: Add prev/next value callbacks
These callbacks will be used in the next commit to jump to the
first day of the month.

Related: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1103
Co-authored-by: Maximiliano Sandoval <msandova@gnome.org>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/369>
2026-02-21 20:22:25 -05:00
mindonwarp b90b99f1bd core: Use GListModel for attendees instead of GSList
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/686>
2026-01-29 23:26:42 +00:00
Zoey Ahmed 272f7fd34f multi-choice: Bind category to tooltip + a11y label
This adds a tooltip to the multi choice buttons, with the text
"Previous/Next (category)". This fixes the warnings in the date
chooser popover.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/681>
2026-01-29 02:21:43 +00:00
Zoey Ahmed 42595e4a65 multi-choice: Add prop for category name
This will be binded to both the accessibility label for each multi choice,
as opposed to defining it in GcalDateChooser popover.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/681>
2026-01-29 02:21:43 +00:00
mindonwarp d4a540b5f2 event-editor: Improve l10n for GcalOrganizerRow subtitle summary
Use formatted gettext and provide value placeholders for number of
attendees in the subtitle summary text.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/687>
2026-01-29 01:25:49 +00: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
mindonwarp f8a9ea1973 event-editor: Add a custom widget for the event organizer row
Move the AdwActionRow for the event organizer into its own widget. In
preparation for further widget customization.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/671>
2026-01-21 19:37:55 +00:00
mindonwarp 79a37917c7 event-editor: Reuse attendees list model in subviews
Store a list model of attendees inside the event editor dialog and use
this model when displaying the details page. The attendees section (like
other sections) gets injected with the event and gets another copy of
the attendees from the event. Both the section and the details page can
now avoid resetting themselves when the underlying data (event) doesn't
change. Note: the details page uses a ListBox for the sake of the UI
style, which can underperform with a lot of attendees (building the
visual tree can be laggy).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/671>
2026-01-21 19:37:55 +00:00
mindonwarp e7d10964e8 event-editor: Extract attendee summary row into a separate widget
Make the summary row reusable and filterable based on the attendee type.
This gives us the possibility to have separate summaries for
people/groups and resources/rooms.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/671>
2026-01-21 19:37:55 +00:00
mindonwarp bf31a02a80 event-editor: Add "show-attendees-detail-page" action
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/671>
2026-01-21 19:37:54 +00:00
mindonwarp f37cd9e7ad event-editor: Add filter by attendee type for details page
Pre-filter attendees based on type before filtering by response.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/671>
2026-01-21 19:37:54 +00:00
mindonwarp 4fb5c1ebb3 event-editor: Pass only attendees to the details page instead of event
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/671>
2026-01-21 19:37:53 +00:00
mindonwarp 0149b7a042 core/editor: Replace g_return_* with g_assert
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/671>
2026-01-21 19:37:53 +00:00
mindonwarp ba3ca061ce event-editor: Add attendees section and details page
UX/UI designed by Philipp Sauberzweig (@PhilippSauberz).

The event editor dialog is now a NavigationView and the participants
details open in a separate page. Group attendees/participants in
AdwPreferencesGroups and bind groups'
ListBox widgets to backing filter models. These are just "views" into a
single GListStore containing all the event attendees.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/671>
2026-01-21 19:37:52 +00:00
Jean-François Fortin Tam ab76cd59be Create only DISPLAY alarms in reminders, not AUDIO
Creating "AUDIO" VALARM notification actions causes endless problems:
users may only hear a sound notification (with no visuals), if at all,
and most other apps don't honor nor support editing audio-only alarms.
Other systems typically play a sound automatically on "DISPLAY" alarms.

https://datatracker.ietf.org/doc/html/rfc5545#section-3.6.6 says:

> Multiple mutually independent "VALARM" calendar components
> can be specified for a single "VEVENT" or "VTODO" calendar component.

However, each component states:

> 'action' and 'trigger' are both REQUIRED,
> but MUST NOT occur more than once.

To keep the UI simple, we should pick one or the other; "DISPLAY" it is.
Remove "AUDIO" alarm code and add a warning to never add it again.

Fixes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1280
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/680>
2026-01-16 01:18:28 +00:00
Trystan Mata d8e22b5646 event-editor: Fix template update when updating all events
Change how the template end date is determined by mainly relying on the
new template start date:
- If all day, end date is start date plus 1 day (midnight enforced)
- If time-based, end date is start date plus the time span of the event
  properties

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/635>
2025-10-21 14:17:33 +00:00
Trystan Mata e11a3be44c schedule-section: Skip updating recurrence limit if no repeat
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/634>
2025-10-21 14:12:21 +00:00
Trystan Mata 20274b0b94 editor-dialog: Fix time-slot timezones
Uses the local timezone if the event was originally all-day.

Also set the end time to 1:00 if start and end date are the same.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/641>
2025-10-21 14:08:04 +00:00
Jean-François Fortin Tam 3e31bd1641 Revert "event-editor/notes: Add height-request"
The widget already auto-adjusts its height depending on text contents.
Let it use as much or as little height it needs.
This avoids extra scrolling in some cases.

This reverts commit a09c02591e.

Fixes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1455
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/636>
2025-10-17 17:04:00 +00:00
Jean-François Fortin Tam 28e8e07219 gcal-event-editor: Add mnemonic for "Delete Event"
This lets keyboard-centric power users delete events in 1 second.
It can be useful in rare situations when you need to delete many events.

Fixes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1313
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/628>
2025-10-10 13:27:46 +00:00
Trystan Mata 15a78b4063 gui/event-editor: Fix GcalDateChooserRow date selected changed callback
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/632>
2025-08-30 16:38:44 +02:00
Jean-François Fortin Tam d86d0f7e1e event-editor: Focus the whole title entry on start
This avoids the text cursor being positioned at the start of the entry.

Fixes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1452
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/631>
2025-08-30 00:24:15 -04:00
Federico Mena Quintero 309a91ddcb Move GcalEventSchedule to new files gcal-event-schedule.[ch]
I am not sure that these should be in src/core, since the
gcal_event_schedule_set_*() functions do have a bunch of GUI policy.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:18:52 -03:00
Federico Mena Quintero 8a653ec99d Rename GcalScheduleSectionValues -> GcalEventSchedule
And correspondingly, gcal_schedule_section_values_*() -> gcal_event_schedule_*()

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:18:52 -03:00
Federico Mena Quintero e9a626ed40 Handle the recurrence until-date with an action, not via the widgets
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:18:52 -03:00
Federico Mena Quintero 8c0281aef5 Copy the recurrence, don't just ref it
GcalRecurrence is shared/mutable.  So, if we have

  curr.recur = ref(event.recur)
  orig.recur = ref(curr.recur)

then recurrence_changed() will return false, since both orig.recur and
curr.recur will point to the same object.  We need fresh copies.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:18:52 -03:00
Federico Mena Quintero 7bb6549cb6 Handle the recurrence count with an action, not via the widgets
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:18:52 -03:00
Federico Mena Quintero d65e1ff216 Add tests for the visibility of the widgets to control recurence limits
Since changing the limit type changes the visibility of the "count" or
"until" widgets, we need to test that logic.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:18 -03:00
Federico Mena Quintero ca5bf2269f Add test for setting the recurrence limit to UNTIL
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:18 -03:00
Federico Mena Quintero 98afcf3195 Remove superfluous "inline"
This is not a hot code path and the keyword just adds noise.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:18 -03:00
Federico Mena Quintero dfe38af9ac Set the recurrence limit type via an action
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:18 -03:00
Federico Mena Quintero 52a7021241 Set the recurrence frequency via an action function, not by poking the widgets directly
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:18 -03:00
Federico Mena Quintero 74e784fb92 Use get_recurence_limit_type() in all places
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:18 -03:00
Federico Mena Quintero 05fed3d9c6 Use get_recurrence_frequency() in all places
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:17 -03:00
Federico Mena Quintero ffd66ff084 Add helper function to get GcalRecurrenceLimitType from the widgets
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:17 -03:00
Federico Mena Quintero 13babc7a2e Don't use magic numbers in on_repeat_duration_changed_cb()
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:17 -03:00