Commit Graph
327 Commits
Author SHA1 Message Date
Hari Rana be244e13c8 event-editor/multi-choice: Add signal for emitting explicit changes
We currently rely on connecting the `notify::value` signal,
which is emitted every time the value is changed explicitly or
implicitly. This can be problematic when, for example, the user
scrolls in the month view, which changes the value of each
GcalDateChooser widget, and each minor difference will re-emit
the signal until it's over. The `GcalMultiChoice::user-changed`
signal will only emit when the user presses the
previous/next buttons.

The next commit will port GcalDateChooser
to `GcalMultiChoice::user-changed`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/837>
2026-09-30 14:57:26 -04:00
Hari Rana 68ac34e8d8 event-editor/multi-choice: Document and rearrange properties and signals
This rearranges and documents the rest of the properties, as well
as providing getter and setter methods for properties that don't
have any.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/754>
2026-09-30 18:34:37 +00:00
Hari Rana 096139721d gui/multi-choice: Rework value properties
This changes the way the current value is being set, as well as
proper getter and setter methods for respective min and max values.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/754>
2026-09-30 18:34:37 +00:00
Hari Rana 12c30b818e event-editor/multi-choice: Add "numeric" style class
See: https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/style-classes.html#numeric
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/754>
2026-09-30 18:34:37 +00:00
Hari Rana 169902ecba event-editor/multi-choice: Use GcalStackLabel
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/754>
2026-09-30 18:34:37 +00:00
Hari Rana c9f273a47a event-editor/multi-choice: Consolidate action activation
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/754>
2026-09-30 18:34:37 +00:00
Hari Rana cc655b6459 event-editor/multi-choice: Wrap values mathematically
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/754>
2026-09-30 18:34:36 +00:00
ARAKHNID ff2689b0f2 gui/event-editor/date-time-chooser: Exit if 12-hour time entry is invalid
If the user has 12h time and sets a properly formatted but invalid time,
Calendar would crash because `date_time` would be `NULL`. This would
specifically happen if the time was set over 23:59 AM or 11:59 PM (ex:
19:00 PM).

By breaking if `date_time` is `NULL`, the crash can be avoided.

Closes #1602

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/848>
2026-09-25 23:55:31 +00:00
Hari Rana 05ec02fadb event-editor/multi-choice: Replace GtkToggleButton with AdwBin
Using GtkToggleButton in this case is not only overkill for our
intended use case, it is also a hinderance, as the states and focus
of the widget are handled by the widget itself, which can lead to
unpredictable and undesired behavior.

Using AdwBin solves this problem by allowing us to set the styles
and states from the parent, provided that the CSS name is changed
to "button". Switching to AdwBin also allows us to not override the
`focus()`, `grab_focus()`, and `get_platform_state()` virtual methods.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/841>
2026-09-25 19:09:12 +00:00
Hari Rana 1748014028 event-editor/multi-choice: Consolidate state flag changes
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/841>
2026-09-25 19:09:12 +00:00
Hari Rana c3d5c777ec event-editor/multi-choice: Port from GtkEventControllerKey to shortcuts
Since we wrap the values all the time now, this also removes
the `gtk_widget_error_bell()` call.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/841>
2026-09-25 19:09:11 +00:00
Hari Rana 34be5e4663 event-editor/multi-choice: Inherit GtkWidget
This is a prerequisite for removing the strong dependence on the
child GtkToggleButton widget, removing the platform state override,
and adding binding actions in later commits.

Inheriting AdwBin was attempted but it didn't work, as AdwBin
presumably messes with focusability and activation, making
it insufficient for this use case.

`hexpand=true` needs to be explicitly set.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/841>
2026-09-25 19:09:10 +00:00
Hari Rana f20c9235ce event-editor/multi-choice: Port to GtkPopoverBin
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/841>
2026-09-25 19:09:10 +00:00
Hari Rana 65896c6ece utils: Prefix macros with GCAL_
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/842>
2026-09-20 12:44:24 +00:00
Hari Rana 117c032d95 utils: Prefix every function with gcal_util_
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/842>
2026-09-20 12:44:24 +00:00
Hari Rana 307f4e78e7 event-editor/multi-choice: Use standard enum members in properties
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/840>
2026-09-19 15:07:03 -04:00
Hari Rana 99463b9a62 event-editor/multi-choice: Set accessible label without connecting signal
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/840>
2026-09-19 11:54:05 -04:00
Hari Rana 2bab7bdc3a event-editor/multi-choice: Remove animate property
We no longer use this property. Removing it will then allow us to
directly set the label without having to use GtkStack, but this
will be done in a later commit.

This also sets all transitions to "none".

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/840>
2026-09-19 11:54:05 -04:00
Hari Rana 3185997f38 event-editor/multi-choice: Remove wrap property
We no longer have a use case which requires us to keep the
`wrap` property to FALSE, so this patch removes that property
while keeping the wrap behavior.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/840>
2026-09-19 11:54:04 -04:00
Hari Rana b8e06d32a1 event-editor/multi-choice: Remove unused overrides
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/840>
2026-09-19 11:54:04 -04:00
Hari Rana 14c20483ae event-editor/multi-choice: Use G_DEFINE_FINAL_TYPE_WITH_CODE()
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/840>
2026-09-19 11:54:01 -04:00
Hari Rana f76eb428a7 event-editor/summary-section: Request for validation when editing summary row
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 10:06:24 -04:00
Hari Rana c0e41b8ca0 event-editor/event-editor-dialog: Add signal for requesting validation
This will be needed to make the Save button sensitive/insensitive.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 10:06:24 -04:00
Hari Rana 026f148dca event-editor/event-editor-dialog: Always grab focus to summary section
Now that the summary section is always focusable, even when the event is
non-writable, we can make it grab focus every time.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 10:06:23 -04:00
Hari Rana b051c30e1b event-editor/event-editor-dialog: Unset sensitiveness of widgets
Only GcalCalendarComboRow, GcalAttendeesSection, and GcalRemindersSection
remain unfocusable on read-only events.

In the case of GcalRemindersSection, we eventually want to allow setting
reminders regardless of the writable state of the event; however, since
dialog is centered around the assumption that a read-only event should
never be edited, which includes reminders, these changes will have to be
done in a separate merge request.

Closes: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/737>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 10:06:23 -04:00
Hari Rana cbf5d8e10b event-editor/schedule-section: Update editability of widgets
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 10:06:23 -04:00
Hari Rana b70763075b event-editor/notes-section: Update editability of text view
Related: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/737>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 10:06:19 -04:00
Hari Rana a83198b954 event-editor/summary-section: Update editability of widgets
Related: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/work_items/737>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 10:06:02 -04:00
Hari Rana f5ce577b36 event-editor/date-time-chooser: Add "editable" property
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 09:48:54 -04:00
Hari Rana 59a5f5f7b5 event-editor/date-chooser-row: Make menu button insensitive when row is uneditable
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 09:48:54 -04:00
Hari Rana 3219b98b1b event-editor/schedule-section: Set visible child name based on schedule type
This fixes a bug introduced by
https://gitlab.gnome.org/GNOME/gnome-calendar/-/commit/8bbaeb754b6b5b81e92173508ef20888d7c421a8
which forgot to update the page depending on the schedule type.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/499>
2026-06-26 09:48:54 -04:00
Hari Rana ec5489b263 event-editor/event-editor-section: Remove GtkWidget overrides
Now that all GcalEventEditorSection subclasses override `event_set()`,
we can safely remove these overrides.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:09 -04:00
Hari Rana 40337612e8 event-editor/event-editor-dialog: Set GcalEventEditorSection:dialog property to all sections
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:09 -04:00
Hari Rana 9b4c5606ac event-editor/summary-section: Subclass GcalEventEditorSection
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:09 -04:00
Hari Rana 11ac931d55 event-editor/schedule-section: Subclass GcalEventEditorSection
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:09 -04:00
Hari Rana f8c4fb786f event-editor/reminders-section: Subclass GcalEventEditorSection
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:09 -04:00
Hari Rana 082e829651 event-editor/notes-section: Subclass GcalEventEditorSection
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:09 -04:00
Hari Rana 61a3b9f869 event-editor/attendees-section: Subclass GcalEventEditorSection
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:08 -04:00
Hari Rana 66e7d9b6d7 event-editor/event-editor-section: Turn it into an abstract class
Currently, GcalEventEditorSection is an interface that doesn't
really do much apart from requiring a property and providing
virtual methods.

This proposed approach turns it into an abstract class, derived
from AdwPreferencesGroup, which gives access to virtual methods
as well as public methods. It comes with the same benefits of
an interface, while sharing a lot of code that were duplicated
in the previous commits.

As a stopgap measure, it overrides several GtkWidget virtual
methods to smoothly transition without causing the commits
to break. These overrides will get removed in a later commit.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:08 -04:00
Hari Rana da9b28cf93 event-editor/attendees-section: Remove GcalEventEditorSection implementation
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:08 -04:00
Hari Rana 5dc7e4d639 event-editor/schedule-section: Remove GcalEventEditorSection implementation
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:08 -04:00
Hari Rana d1c5a085bd event-editor/reminders-section: Remove GcalEventEditorSection implementation
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:08 -04:00
Hari Rana 63191bea9e event-editor/notes-section: Remove GcalEventEditorSection implementation
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:08 -04:00
Hari Rana 09e5bd5859 event-editor/summary-section: Remove GcalEventEditorSection implementation
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:23:07 -04:00
Hari Rana d62c2386b8 event-editor/event-editor-dialog: Compare original event with edited event
This also takes the opportunity to rework the save process.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:22:32 -04:00
Hari Rana 854d991134 event-editor/attendees-section: Allow applying event when mapped
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:14:03 -04:00
Hari Rana a2bcde8ccb event-editor/schedule-section: Write to event directly
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:14:03 -04:00
Hari Rana 842f9939cf event-editor/reminders-section: Write to event directly
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:14:03 -04:00
Hari Rana af8a619eac event-editor/notes-section: Write to event directly
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:14:03 -04:00
Hari Rana 6e4062a9d6 event-editor/summary-section: Write to event directly
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/711>
2026-06-26 08:14:03 -04:00