Commit Graph
858 Commits
Author SHA1 Message Date
Jean-François Fortin Tam e470ecfc25 quick-add-popover: Use semantic typographic wrapping of time ranges
Atomically maintain time ranges on the same line when possible.
This is done using invisible non-breaking whitespace characters.

When selecting a range of time in the week view's timetable,
this ensures eye-pleasing, natural-looking typography.

Fixes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1503

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/661>
2025-11-19 13:34:54 +00:00
Dimitrios Christidis 938195e6e2 edit-calendar: Remove unnecessary assignment
g_clear_pointer() sets it to NULL.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/662>
2025-11-19 13:04:54 +00:00
FineFindusandKrifa75 2d9afa938f gui/edit-calendar-page: allow exporting calendars
Adds an export option to the edit page, allowing users to export an
entire calendar at once.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/31

Co-authored-by: Krifa75 <yahiaoui.fakhri@gmail.com>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/615>
2025-11-18 15:27:44 +00:00
Hari Rana 81990357fe quick-add-popover: Make rows behave like radio buttons
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/362>
2025-11-18 11:44:30 -03:00
Hari Rana c624c9b53b quick-add-popover: Rework population and update
This emits the `changed` signal, allowing us to filter out a wider
variety of calendars. It also allows us to remove the loops
that needed to re-run every time the user changed the default
calendar or closed the popover.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/362>
2025-11-18 11:44:29 -03:00
Hari Rana b83498cb1f quick-add-popover: Use calendar row widget
The calendar row widget also makes it easy for us to display
hidden calendars.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/362>
2025-11-18 11:42:39 -03:00
Hari Rana 7e63f5f7e2 calendar-row: Add APIs
Since the calendar row widget is becoming an expandable widget,
several APIs were added to the widget:
- `gcal_calendar_row_get_calendar`
- `gcal_calendar_row_add_suffix`
- `gcal_calendar_row_get_first_suffix_child`
- `gcal_calendar_row_add_header_class`
- `gcal_calendar_row_remove_header_class`

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/362>
2025-11-18 11:37:18 -03:00
Hari Rana f8c5751174 calendar-row: Rename calendar-combo-row-item to calendar-row
Currently, the quick add popover implements its own row
widget for each calendar, which duplicates tons of unnecessary
code. This commit streamlines the calendar-combo-row-item row
widget to make it reusable elsewhere.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/362>
2025-11-18 11:37:07 -03:00
Hari Rana 324bde2c72 quick-add-popover: Port to libadwaita widgets and merge stack pages
Both stack pages are merged into one page to avoid additional
cycling through pages.

`GtkListBoxRow`s were replaced by `AdwActionRow`s with
`GtkCheckBox`es as children.

Closes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/90,
https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1003

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/362>
2025-11-18 11:33:23 -03:00
Hari Rana ac6cccee53 quick-add-popover: Port to GListModel
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/362>
2025-11-18 11:31:24 -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
Hari Rana 0c09e41796 gui/quick-add-popover: Specify const for strings using gettext
`gettext` returns a static string.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/656>
2025-10-31 09:40:44 -04:00
Hari Rana c3098bf23a gui/quick-add-popover: Automatically free strings
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/656>
2025-10-31 09:39:05 -04:00
Hari Rana eefea2f7f4 gui/quick-add-popover: Handle memory leaks
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/656>
2025-10-31 09:31:23 -04:00
Philipp Sauberzweig ef4c70fa4c month-cell: Add pill style to first day of the month.
Add a pill style to the label of the first day of the month to make it easy to identify. Adjust the border radius of the existing pill style for the current date to be the same. Apply the font-weight using the new style class.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/647>
2025-10-28 14:06:44 +00:00
Philipp Sauberzweig 6e97c05a14 views: Merge month name and date number into a single label.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/647>
2025-10-28 14:06:44 +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
Philipp Sauberzweig a32df2b070 views/month-cell: Remove dimming of out-of-month cells
The infinite scrolling month view obsoletes the out-of-month
dimming, as the view is no longer fixed in a specific month, nor
does it make out-of-month cells insensitive.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1145
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/646>
2025-10-17 18:06:17 -04:00
Lukáš Tyrychtr 3a544b22fc week-view: Add tooltip to the all day events expander
This adds a tooltip to the all day events expander button,
indicating whether the expander will expand or collapse
upon activation.

Fixes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1449

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/637>
2025-10-17 13:59:26 -04:00
Hari Rana 3a93a4004d views/month-popover: Use adw_lerp() function
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/650>
2025-10-17 17:08:42 +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
Philipp Sauberzweig fc90d259b2 gui/views: Fix event margins in week header
Margins are already applied to the event widget itself through CSS.
This commit removes unnecessary margins and row spacing to bring
it in line with the month view.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/649>
2025-10-17 12:27:03 -04: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
Philipp Sauberzweig 2368a9f29d gui: stop dimming the sidebar headings 2025-10-07 18:36:03 +00:00
Trystan Mata 38e355c3b1 calendar-navigation-button: Fix active-date reference
Increase active-date reference count so the button and the window have
their own reference.

This fix the reference issue while the window is finalizing.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/638>
2025-09-04 15:29:01 +00:00
Trystan Mata 66542a6673 edit-calendar-page: Check calendar before setting name while disposing
The calendar is not initialized when opening and closing the
calendar management dialog.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/638>
2025-09-04 15:29:01 +00:00
Trystan Mata 0b25305aa4 view/month-view: Fix seeking ancestor of NULL
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/638>
2025-09-04 15:29:01 +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
Hari Rana 9213a4fbe4 gui/window: Only set focus when popover is explicitly closed
The window would either set focus to the event widget or a
focusable ancestor, no matter how the event popover was being
closed.

This caused a major accessibility regression where,
whenever the event editor dialog opened from the event
popover, the window set focus to the event widget instead of
the content inside the dialog, which made the dialog incapable
of navigating through until the dialog was focused. This also
prevented mnemonics from being triggered.

This patch addresses that bug by only setting focus whenever
the popover is being closed explicitly; as in, when the user
presses outside the popover to hide it or pressing escape.

Fixes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1398
2025-08-29 21:45:59 -06: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
Federico Mena Quintero 2d28a36072 Add helper function to get the GcalRecurrenceFrequency 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 d1ccbdf4fb Handle the case where the event editor is present but it has no GcalEvent yet
Apparently the calendar's views hold a live event editor without an
event, and only set an event when one is selected for editing.

I think it would simplify things to only create the event editor when
it is actually needed, with an event - it would avoid these checks.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:00 -03:00
Federico Mena Quintero 324e3ef71c Move recurrence fields into GcalScheduleSectionValues, split it into "orig" and "curr" values
This commit does a bit too much, but with these themes:

- Move the recurrence fields into GcalScheduleValues.  This was needed
  for consistency, anyway, and...

- ... the next step was to make ::changed() work, which actually
  required knowing the original and current values of the recurrence as
  well as the dates.

- But then, having a field "orig_foo" for each field "foo" starts
  getting unwieldy.  So, I moved things around:

  - GcalScheduleValues has start/end dates and all_day, and the recurrence.

  - GcalScheduleSectionValues is new; it has the "orig" and "curr"
    values of the previous type.  This simplifies memory management
    since each field can be freed with gcal_schedule_values_free()
    instead of duplicating _free() for each sub-field.

  - GcalScheduleSectionValues also has time_format, as a way to
    decouple that value from GcalContext.  It's not in orig/curr
    because it does not pertain the event; it's just a display-related
    thing.

- Actually fix gcal_schedule_section_changed(),
  gcal_schedule_section_recurrence_changed(), and
  gcal_schedule_section_day_changed().  These become simple since they
  just look at the orig/curr fields, without having to touch widgetry.

- All test pass.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 20:00:00 -03:00