Commit Graph
175 Commits
Author SHA1 Message Date
Federico Mena Quintero 11dcab5ddf Set the state of the schedule_type_toggle_group in update_widgets()
And now the redundancy in gcal_schedule_section_set_event() is gone.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:17 -03:00
Federico Mena Quintero 253b1d4f17 Start transitioning gcal_schedule_section_set_event() to use update_widgets()
For now this is redundant, as update_widgets() only sets the
visibility of the time selectors, while the call to
adw_toggle_group_set_active_name() effectively does the same.

But that redundancy will go away in the next step.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:17 -03:00
Federico Mena Quintero 640488883b Introduce a WidgetState structure and compute it from GcalScheduleValues
You may think, yet more indirection!  But behold:

1. We take events from the widgets ("schedule type (all-day) changed") and turn
   them into actions (gcal_schedule_values_set_all_day()).

2. Those actions (e.g. that function) decide how to change the GcalScheduleValues.

3. We compute the desired state of the wigets, based on the new
   values.

4. We set the state of the widgets based on that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:17 -03:00
Federico Mena Quintero 2c476f6d02 New function to set the all_day flag on GcalScheduleValues
You may think that this is too much indirection.  But wait!  This is
the start of enabling tests.  Hang in there.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:17 -03:00
Federico Mena Quintero a4d891aadd New function to copy a GcalScheduleValues
These structs are immutable.  Any changes will be made on a copy.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:17 -03:00
Federico Mena Quintero 939b60d6b4 gcal_schedule_section_apply(): extract an _apply_to_event() helper function
With this, there's no direct mutation of the self->event anywhere; the
_apply() function just uses self->event as a target for mutation
because that's what the surrounding architecture expects.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:16 -03:00
Federico Mena Quintero 70173639e4 gcal-schedule-section.c: Use the stored values instead of pulling them from the event every time
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:16 -03:00
Federico Mena Quintero f51186c298 gcal_schedule_section_apply(): use the stored values as a reference
Also, update the values from the updated event at the end.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:16 -03:00
Federico Mena Quintero 68126bcfac gcal_schedule_section_set_event(): set the widgets from the extracted values, not from the event
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:16 -03:00
Federico Mena Quintero d44e6847c7 GcalScheduleSection: store the values when an event is set
We don't use them yet; just hooking things up for now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:16 -03:00
Federico Mena Quintero f75785a34c GcalScheduleValues: new struct to hold values from a GcalEvent for the schedule widges
We'll move GcalScheduleSection to operate without a backing GcalEvent,
so we can add tests.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:16 -03:00
Hari Rana d477ac2d72 event-editor/multi-choice: Focus widget if increment/decrement buttons are pressed
This also re-sets the state flags of the buttons, because otherwise
the increment/decrement buttons lose their hovered state after
the widget gains focus.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/616>
2025-07-27 07:20:15 -04:00
Hari Rana 576c82b060 event-editor/multi-choice: Add focus ring around the entire widget
The current behavior of the widget makes it so keyboard focus
outlines the toggle button rather than the entire widget. In some
cases, the outline touches the edges of the label, which makes it
look cramped.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/616>
2025-07-19 17:55:11 -04:00
Jean-François Fortin Tam 3e4ef6f9c7 event-editor: Hide Cancel & Delete when read-only
Read-only events show a "Done" button instead of the "Save" button.
The "Done" button does the same thing as "Cancel",
so the "Cancel" button is then redundant.

Likewise, it is impossible to delete events from read-only calendars,
as stated by the banner message in that dialog. In that case,
there's no reason to show a big "Delete" button that you can't click on.

Fixes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1168
2025-07-11 23:27:08 -04:00
Hari Rana 7be43df099 event-editor/multi-choice: Always set focus-visible flag when focused
This is to ensure that the focus ring never disappears until
the toggle button is unfocused.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:51:24 -04:00
Hari Rana b4853da249 event-editor/multi-choice: Add keyboard interaction
A significant portion of the behavior was guided by the
"Date Picker Spin Button Example" page in the
ARIA Authoring Practices Guide (APG):
https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/examples/datepicker-spinbuttons/

Related: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1036
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:51:21 -04:00
Hari Rana 5628a5f311 event-editor/multi-choice: Make up/down buttons unfocusable
Spin buttons' increment/decrement buttons are standardly not made
to be accessible/focusable.

This copies the behavior from the GtkSpinButton widget.

Related: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1036
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:51:19 -04:00
Hari Rana 2a7a4e3b30 event-editor/multi-choice: Implement GtkAccessibleRange
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:51:17 -04:00
Hari Rana 70b9fde162 event-editor/multi-choice: Implement GtkAccessible
This is needed to have the toggle button communicate with the
screen reader to use the parent widget to retrieve accessible
information, rather than the toggle button itself.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:51:15 -04:00
Hari Rana 196f86b4f4 event-editor/multi-choice: Use g_assert in public methods
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:51:11 -04:00
Hari Rana d1a8e072b2 event-editor/multi-choice: Add file name to header
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:51:09 -04:00
Hari Rana 5ca18c7a34 event-editor/multi-choice: Document public methods
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:51:07 -04:00
Hari Rana a6015bd357 event-editor/multi-choice: Properly space out code
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:50:58 -04:00
Hari Rana 640308652b event-editor/multi-choice: Comment code sections
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/603>
2025-06-29 08:50:41 -04:00
Hari Rana f40ed5b90c reminders-section: Modernize popover
This makes the alarms popover look much closer to the AdwComboRow widget.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/399>
2025-06-29 01:03:00 +00:00
Jamie Gravendeel a509de8b1e gui: Port to Blueprint
This was mostly done with `blueprint-compiler port`.

Since Blueprint doesn't know about custom templates, I had to manually change some values from strings to literals.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/567>
2025-06-08 14:31:01 +02:00
Hari Rana a09c02591e event-editor/notes: Add height-request
The larger physical size of the text view helps convey that it's
a text box, and not a regular button or list box row.

Related: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1081
2025-04-21 13:32:49 -04:00
Hari Rana 445000b3cc event-editor/notes: Add 'focused' CSS class when focused
This mimics what GtkEntryRow does, and allows for an always visible
focus ring when the notes text view has focus.

Related: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1081
2025-04-21 13:32:49 -04:00
Hari Rana 140dd3b145 event-editor/notes: Make it an AdwPreferencesRow 2025-04-21 13:32:45 -04:00
Titouan Real 303cba1622 gui: Move DateChooser to common
DateChooser is used both by the event editor and the main window.
Moving it to common for a better file organization.
2025-04-09 15:35:20 +00:00
Titouan Real 9f0274c5e6 event-editor: Make all-day/time-slot toggles the same width 2025-03-12 12:59:34 +00:00
Aleksandr Melman ea73614ebd Edit gcal-date-time-chooser.ui 2025-03-06 00:13:45 +00:00
Titouan Real 42f891ff42 gui/event-editor: Add time zone selection
Creates a chooser managing a GDateTime. The chooser allows the user
to change the date, the time and the timezone independently.

This replaces the precedent GcalTimeChooserRow widget, because it is
easier to manage the different interactions with the user in a single
widget.

Co-authored-by: Georges Basile Stavracas Neto
<georges.stavracas@gmail.com>
2025-01-31 19:37:26 -03:00
Titouan Real c24b665125 event-editor: Mark tooltip as translatable 2025-01-13 13:32:55 +00:00
Titouan Real f031a608d7 event-editor: Init time-format correctly 2024-12-16 23:24:36 +01:00
Titouan Real 5ed9f469b0 time-selector: Port GtkDropdown to AdwToggleGroup 2024-12-16 17:42:26 -03:00
Titouan Real ca32033c60 event-editor: Use new rows for date and time
Make the event editor use GcalTimeChooserRows and GcalDateChooserRows to
prompt the user.
2024-12-16 17:41:39 -03:00
Titouan Real a37b0551ea event-editor: Create GcalDateChooserRow
Create a new GcalDateChooserRow widget from AdwEntryRow that parses the
entry into a date, or lets the user pick a date from a popover.
2024-12-16 16:12:54 -03:00
Titouan Real 569233f948 event-editor: Create GcalTimeChooserRow
Create a new GcalTimeChooserRow widget from AdwEntryRow that parses the
entry into a time, or lets the user pick a time from a popover.

[feaneron] Improved code style, reworked regex management.
2024-12-16 15:54:32 -03:00
Titouan Real f7d6a3dc9b Event Editor: cleanup 2024-11-29 11:26:35 +01:00
Georges Basile Stavracas Neto f227055122 event-editor/dialog: Use action in the Save / Done button 2024-11-28 09:11:52 -03:00
Georges Basile Stavracas Neto 363dd585df event-editor/dialog: Switch to GSimpleActionGroup 2024-11-28 09:11:51 -03:00
Titouan Real 69de2e6c3f EventEditor: Add shortcuts 2024-11-19 18:57:08 +01:00
Georges Basile Stavracas Neto 5283bfe546 event-editor/dialog: Compose calendars model
Currently we only show writable calendars in the calendar row, but
for read-only events, the read-only calendar must be selected. But
that's impossible because it's not in the model.

Change the model to a flattened list as follows:

+ FlattenListModel -----------+
|                             |
| + writable calendars -----+ |
| |                         | |
| | - Calendar 1            | |
| | - Calendar 2            | |
| | - Calendar 3            | |
| | [...]                   | |
| |                         | |
| +-------------------------+ |
| + read-only calendars ----+ |
| |                         | |
| | - Calendar 1            | |
| | [...]                   | |
| |                         | |
| +-------------------------+ |
+-----------------------------+

The read-only calendars list only ever has 1 item: the calendar
of the current event, and only if the event is in a read-only
calendar.
2024-11-08 17:38:10 -03:00
Georges Basile Stavracas Neto 1354467dc1 event-editor/dialog: Bind sensitive to writable property
So that the row is insensitive for read-only calendars.
2024-11-08 17:37:28 -03:00
Titouan Real aca797d192 Remove GcalCalendarRow 2024-11-08 19:09:56 +01:00
Titouan Real 923cb668da Make GcalEventEditor use GcalCalendarComboRow 2024-11-08 19:09:56 +01:00
Automeris naranja 061c027520 event-editor-dialog: Use an AdwBanner when a calendar is read-only
Using a tooltip to inform when the calendar is read-only won't
work in touch devices.

This change also improves a11y, as Orca now reads this message,
something that wasn't happening before.
2024-10-22 11:29:53 +00:00
Hari Rana 26d34930b6 event-editor: Only list writable calendars 2024-08-23 13:46:00 -03:00
Diego Iván 0af5ffc334 event-editor-dialog: Use GcalCalendarRow to display calendars
Use the widget to display calendars and distinguish whether
they are visible or not. Currently, it does not distinguish
read-only calendars, but once !494 is merged, it should not
be a problem.
2024-08-11 23:35:42 +00:00