Commit Graph
190 Commits
Author SHA1 Message Date
Federico Mena Quintero af4ddc1282 Move the logic from on_start_date_changed_cb() to gcal_schedule_values_set_start_date()
This also adds a test for syncing the date_end to the date_start if
the date_start happens to be set after the date_end.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:59 -03:00
Federico Mena Quintero ba3380206d GcalScheduleValues: keep copies of the original dates of the event
That is, we'll keep the original values, plus the working values that
get changed from the widgets.  We'll use the original values to be
able to reconstruct the original event's duration if needed.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:59 -03:00
Federico Mena Quintero 481569543d on_schedule_type_changed_cb(): Don't frob the widgets here
Converting the start/end dates to local time is done to get them to
display as the user expects.  Instead, let's change things so that
they are actually computed and handled correctly.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:59 -03:00
Federico Mena Quintero 9975a96927 Add a test, with the failing part commented out
I want to test that when:

- a one-hour event is loaded
- all-day is turned on

then the start and end date widgets display both the same date.

This fails right now, because we subtract one from the end_date.  I'll
change the way the dates are handled so that this magic only needs to
be done when setting back the GcalEvent.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:59 -03:00
Federico Mena Quintero 18beea3052 Extract function to update the widgets *and* the values
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:59 -03:00
Federico Mena Quintero e0641709bf Move handling of the start/end dates to GcalScheduleValues / WidgetState
This clarifies things:

* GcalScheduleValues contains the real data, based initially on the
  GcalEvent.

* WidgetState's date_time_start / date_time_end may not be the same as
  the real data, since the values get adjusted for display, as in the
  case when handling all_day events.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:58 -03:00
Federico Mena Quintero 8120162f23 Fix leak of two GDateTime
While gcal_date_time_chooser_get_date_time() returns a new reference,
gcal_date_chooser_row_get_date() just returns the pointer to the date
being edited.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:58 -03:00
Federico Mena Quintero f787afbeab Clarify oudated comments
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:58 -03:00
Federico Mena Quintero 1cfb58e3c4 Fix leak of date_time_end
It's replaced by this line:

  date_time_end = all_day ? g_date_time_add_days (date_time_end, -1) : date_time_end;

so we need to be able to free that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:58 -03:00
Federico Mena Quintero ba69d04465 Remove unused variable
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:58 -03:00
Federico Mena Quintero 2ca29785dc Remove superfluous conditional
Now that all cases set the same times to the
{start,end}_date_time_chooser widgets, we don't need that condition anymore.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:58 -03:00
Federico Mena Quintero 1309bf4a82 gcal_schedule_section_set_event(): Don't change the timezones when setting up the widgets
I think this was being done so that:

  - create a new all-day event
  - open it in the event editor
  - switch to time-slot
  - time choosers now say "UTC"

doesn't happen.  I think this can be handled more gracefully.

Evolution does not handle it very gracefully; when turning off
all-day in its event editor, it sets the times to $now.

The iOS calendar app is better.  If you turn all-day off, it picks
$next_hour_based_on_now for the start time, and $next_hour_plus_one
for the end time.  So if you turn off all-day and it is 18:24 right
now, it will set the start_time to 19:00 and the end_time to 20:00 ---
that is, it creates a one-hour event at the next start of the hour
from now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:58 -03:00
Federico Mena Quintero a0a817ee8a Add scaffolding for a new test-internals binary
* There is a gcal_tests_add_internal() function...

* called from tests/test-internals.c...

* ... which doesn't add any tests yet, but we'll have some soon.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:57 -03:00
Federico Mena Quintero cdc602bb1f Start sketching gcal_schedule_values_set_start_date()
But we need a test first!

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:17 -03:00
Federico Mena Quintero 938419c1d4 Handle the time_format as part of GcalScheduleValues and WidgetState
This will let us write tests for changing the time format without a
context object.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
2025-08-27 19:59:17 -03:00
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