Federico Mena Quintero
0dfd19ebd1
Remove obsolete comment
...
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550 >
2025-08-27 20:00:00 -03:00
Federico Mena Quintero
20d593295f
For all-day, keep real dates in GcalScheduleValues, and human-readable dates in WidgetState
...
This reorders the trick to "subtract one day from date_end" and "add
it back when applying the data to the event". It also has a test for roundtripping.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550 >
2025-08-27 20:00:00 -03:00
Federico Mena Quintero
f2d039487e
Fix leak
...
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550 >
2025-08-27 20:00:00 -03:00
Federico Mena Quintero
6c0da161a6
gcal_schedule_section_apply_to_event(): Get the data from GcalScheduleValues, not the widgets
...
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550 >
2025-08-27 20:00:00 -03:00
Federico Mena Quintero
6f19c32a80
Move the logic from on_end_date_time_changed_cb() to gcal_schedule_values_set_end_date_time()
...
And add a test.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550 >
2025-08-27 19:59:59 -03:00
Federico Mena Quintero
1ace5806d3
Move the logic from on_start_date_time_changed_cb() to gcal_schedule_values_set_start_date_time()
...
If the new start_date is later than the end_date, we make the end_date
the same as the new start_date, but with the original end_date's
timezone.
And add a test.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550 >
2025-08-27 19:59:59 -03:00
Federico Mena Quintero
cf43f6e475
Add a correctness check to the helper function
...
I was writing a new test, and messed up the times vs. timezones of my
start/end times. So, let's check them so it is easier to write new tests.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550 >
2025-08-27 19:59:59 -03:00
Federico Mena Quintero
6029b5f061
Extract function to create a GcalScheduleValues with certain date-time for tests
...
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550 >
2025-08-27 19:59:59 -03:00
Federico Mena Quintero
a7282564fd
Move the logic for setting the date_end from on_end_date_changed_cb() to gcal_schedule_values_set_end_date()
...
Analogous to the last commit; also add a test.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550 >
2025-08-27 19:59:59 -03:00
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
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
f031a608d7
event-editor: Init time-format correctly
2024-12-16 23:24:36 +01: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
Hari Rana
21bfed06e9
schedule-section: Show date when selecting the same day next week
2023-08-02 12:38:53 +00:00
Titouan Real
cf1d70e6c7
Add condition to reset
2023-05-31 12:25:36 +00:00
Cyber Phantom
e2e7305971
gcal-schedule-section: Port "Repeat" to AdwComboRow
...
GtkComboBox is going to be deprecated in GTK 4.10.
This commit updates the "Repeat" rows in new schedule window to use AdwComboRow.
2023-04-22 10:14:22 +00:00
Felipe Kinoshita
2805b414f8
general: Use gtk_widget_set_visible
...
A lot of places were using gtk_widget_show/gtk_widget_hide, but those
methods are deprecated since Gtk 4.10.
Let's use gtk_widget_set_visible instead.
2023-03-03 19:14:09 -03:00
Milan Crha
21e5396bf5
event-editor: Fix possible use-after-free of recurrence until date
...
The GcalDateSelector returns an internal instance, while the 'until' date/time
is meant to be an own instance, which is freed by the GcalRecurrence instance
in its free function. That means the 'until' date/time is supposed to be reffed
when being assigned into the GcalRecurrence structure.
Closes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/892
2022-10-31 12:25:11 +00:00
Georges Basile Stavracas Neto
102346534a
event-editor/dialog: Improve detection of MOD_ALL exclusion cases
2022-10-17 23:37:13 -03:00
Georges Basile Stavracas Neto
23dedc0fc8
event-editor/schedule: Trivial autoptr cleanup
2022-10-17 23:37:13 -03:00
Georges Basile Stavracas Neto
82d8ec31ca
event-editor/sections: Add vfunc to check for changes
...
This will be useful for next commits where we will need to check
if the schedule section actually changed something.
2022-10-17 23:37:13 -03:00
Björn Daase
ad7ff65a4d
event-editor/schedule-section: Fix localization mix
...
The gcal_util_translate_time_string function is a plain copy of
gnome-shells shell_util_translate_time_string solving the same problem.
Fixes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/581
2022-02-12 17:43:49 +01:00
Björn Daase
02343e6b37
event-editor/schedule-section: Simply switch-case statement
2022-02-12 17:37:11 +01:00
Georges Basile Stavracas Neto
0751c2e93c
event-editor/schedule-section: Show times in local timezone
...
Preserve the original timezone when editing, but always display
the start and end times in local timezone.
2021-12-07 13:32:16 -03:00
Georges Basile Stavracas Neto
46aee00f65
event-editor-dialog: More schedule to GcalScheduleSection
2020-10-31 13:30:56 -03:00