Commit Graph
318 Commits
Author SHA1 Message Date
Georges Basile Stavracas Neto c635db3495 views/week: Port to GPtrArray
GLists are an artifact of times immemorial and we should
avoid using them as much as possible. In this commit, for
example, there were a couple of accidentally quadratic
pieces of code.

Port (mostly of) the week view header to GPtrArray.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:51 +00:00
Georges Basile Stavracas Neto 039b75755e views/month: Port to GListModel
Neutralize the add/remove/update vfuncs (we can't remove them yet).
Pass the event model to the individual week rows, and let them
filter their events using a GtkFilterListModel.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:51 +00:00
Jordan Petridis b900a65760 Use standalone Month format when appropriate
Some locales use different strings for the months depending if they are
accompanied by a numberic date or not. When we use the month name as a
standalone, we should use %OB instead to accomodate for these locales.

For more see: https://docs.gtk.org/glib/method.DateTime.format.html

Close #1546

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/705>
2026-04-23 16:28:06 +00:00
Hari Rana 92b74849bf views/month-cell: Add AdwBin as parent to methods retrieving height of widget
This is future-proofing the uncertain decision of removing
GtkWidget's `margin-*` properties in the future, which is what
we're currently using to retrieve the height of certain widgets.

Whenever the intention is to get the entire size of a particular
widget, including properties that contribute to layout such as
margins, the `get_width()`/`get_height()` methods don't include
these properties during calculations. However, getting the size
of the parent widget will include them in its entirety.

As such, the safest path is to use AdwBin as the parent to the
respective widgets, and using it to retrieve the height.

See: <https://gitlab.gnome.org/GNOME/gtk/-/issues/6556#note_2056432>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/739>
2026-04-03 16:37:14 -04:00
Hari Rana 49e0521b67 views/week-view: Adapt to high contrast
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/710>
2026-03-31 21:55:32 -04:00
Zoey Ahmed fbfacb6972 gui/blueprint: Drop unneeded casts to built-ins
Blueprint can now "infer" the type a closure returns, as long as it is
not the property of a custom GType, so some of the casts (e.g. `as
<string>`) will not be necessary anymore

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/733>
2026-03-24 16:43:10 +00:00
Hari Rana 037ffd3700 gui/event-widget: Replace "context" property with context getter method
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:02 +00:00
Hari Rana 15a7a8cbd2 views/view: Remove "context" property
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:00 +00:00
Hari Rana 5616ba2c03 views/agenda-view: Replace "context" property with context getter method
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:00 +00:00
Hari Rana cebd3cd84d views/month-view: Replace "context" property with context getter method
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:30:00 +00:00
Hari Rana d9f02cee20 views/week-view: Replace "context" property with context getter method
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/702>
2026-03-23 19:29:59 +00:00
Hari Rana d0bdc9f2af gui/month-view-row: Add upward variable
`!downward` is disambiguous and could merely be interpreted
as "not downward and not upward either". The `upward` variable
is explicit and describes literally the condition.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/729>
2026-03-21 10:39:16 -04:00
Abdullahi Usman 24621b4d2b agenda-view: Respect local timezone
convert events' time to equivalent local time before sorting.

fixes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1324
2026-03-17 20:09:23 -03:00
Zoey Ahmed f99678aea9 views/month-view: Check if focused widget is month cell
This fixes an issue where pressing Shift + Up/Down while focused on the
overflow button will result in a bail out when asserting the focused
widget has a month cell ancestor:

```
GcalMonthView:ERROR:../src/gui/views/gcal-month-view.c:1002:on_key_controller_key_pressed_cb: assertion failed: (GCAL_IS_MONTH_CELL (month_cell))
Bail out! GcalMonthView:ERROR:../src/gui/views/gcal-month-view.c:1002:on_key_controller_key_pressed_cb: assertion failed: (GCAL_IS_MONTH_CELL (month_cell))
```

When navigating between month cells with a keyboard, focus is set
on respective month cells, so checking whether the ancestor
is a month cell or not is not only unnecessary, it also causes
bugs like the assertion above.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/720>
2026-03-11 08:55:09 -04:00
Hari Rana 50e048c7e0 utils: Turn number of weekdays into a macro
While "7" may be obvious in the context of calendaring that
it represents the number of week days, it often gives me the
impression of it being a magic number when I'm hyperfocused on certain
parts of the codebase for several consecutive hours. Turning the
number into a macro helps me scan functions much more easily.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/674>
2026-03-08 21:53:40 -04:00
Hari Rana 2638766d10 views/month-view: Focus adjacent cell when tabbing forward from the last event widget
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 21:11:16 -03:00
Hari Rana e607a6bd2e views/month-view: Clear marks when tabbing from a cell
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 21:11:16 -03:00
Hari Rana 4e54c18d06 views/month-view: Set focus to cell upon click release
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 21:11:16 -03:00
Hari Rana 3102766c51 views/month-view: Allow selecting cells
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 21:11:16 -03:00
Hari Rana 6c6dd46a89 views/month-view: Scroll view when out of bounds
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:18 -05:00
Hari Rana c74fe74b97 views/month-view: Wrap cells
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:18 -05:00
Hari Rana d8e44108ea views/month-view: Display quick add popover when activating cell
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:18 -05:00
Hari Rana 3088b2260a views/month-view-row: Add "activate-cell" signal
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:18 -05:00
Hari Rana cd0138393f views/month-cell: Add activate signal
This will be needed for keyboard navigation.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:17 -05:00
Hari Rana 471f81eb31 views/month-view-row: Implement focusing cells horizontally
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:17 -05:00
Hari Rana e6e201d9aa views/month-view-row: Implement focusing cells vertically
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:17 -05:00
Hari Rana 48e6607d43 views/month-view: Focus adjacent cell when pressing Ctrl+Tab
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:17 -05:00
Hari Rana 405f826252 views/month-view-row: Add method for focusing adjacent cells
This method allows to focus the month cells behind the event widgets.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:17 -05:00
Hari Rana e88f77802b views/month-cell: Override focus() virtual function
Without this patch, focus immediately goes to the "Previous Month"
button at startup, for some unknown reason.
So, as a workaround, skip focus if the root cannot retrieve the
current focused widget.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:17 -05:00
Hari Rana 80adbd0d23 views/month-cell: Inherit GtkWidget
AdwBreakpointBin, the parent, cannot set focus to itself. Instead
of focusing GtkOverlay, a child widget, we should instead inherit
GtkWidget to allow focusing that instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:17 -05:00
Hari Rana b592f15b26 views/month-view: Add and update accessible elements
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/564>
2026-03-03 18:35:17 -05:00
Hari Rana caed41abdd views/month-cell: Set accessibility properties for overflow button
This uses the "toggle-button" role instead of GtkToggleButton widget,
as GtkToggleButton remains toggled after closing the month popover.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:46 +00:00
Hari Rana 55aa6b8cc5 views/month-view: Focus last focused widget after closing month popover
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:46 +00:00
Hari Rana 8877d93059 views/month-popover: Add "closed" signal
This will be needed for setting focus to the last focused widget
after closing the popover.

Alternatively, we could have used the "unmap" signal, but this causes
a significant delay before setting focus to the last focused widget,
as it needs to complete the animation before it emits the
"unmap" signal.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:46 +00:00
Hari Rana f3a6c93245 views/month-popover: Cycle focus through widgets
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:46 +00:00
Hari Rana 5c4a2b1ab0 views/month-popover: Only focus rows
This follows the same approach as
https://gitlab.gnome.org/GNOME/gnome-calendar/-/commit/0aaf13626c0bb7e8ade2d79e8b50132b3a583c9f?merge_request_iid=559

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:45 +00:00
Hari Rana a1c8a9575e views/month-popover: Make close button unfocusable
Close buttons throughout the app are unfocusable, so it's best
to keep that behavior consistent.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:45 +00:00
Hari Rana 295f154c76 views/month-view-row: Allow navigating through overflow buttons
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:45 +00:00
Hari Rana 9e8c9ae6e8 style: Add border radius to overflow button
This also adds the `.overflow` style class.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:45 +00:00
Hari Rana d79a3260f0 views/month-cell: Add margins to overflow button
`margin-end` and `margin-bottom` have a 2px margin since the
`box-shadow` CSS property, which is used to mimic a border,
is offset by 1px.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:44 +00:00
Hari Rana 5ed93e73d4 views/month-cell: Add method for retrieving overflow button
This is needed for keyboard navigation, specifically for grabbing
focus and checking focus.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:44 +00:00
Hari Rana 24dd9be132 views/month-view: Allow skipping event widgets with Ctrl
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598>
2026-03-01 19:35:44 +00:00
Hari Rana bdfb4b609e views/week-view-common: Port from GtkStyleContext to GtkSnapshot
GtkStyleContext methods are deprecated.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/707>
2026-02-28 13:57:52 +00:00
Hari Rana bb2fa2a63b views/month-view-row: Find nearest vertical widget when tabbing
This was overlooked from the original commit:
https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598/diffs?commit_id=2ae3dd771cb9b2cc0d08a1cabb0b2f5359719d0b#c04c121e2c8eebcfb09fbcbeecff310223fe987f_708_767

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/706>
2026-02-24 19:46:47 -05:00
Hari Rana aecb17a59b views/month-view-row: Only find first/last event widget if tabbing through another widget
This was overlooked from the original commit:
https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/598/diffs?commit_id=4ad8aeac65648f8d0873f8392cd8ab9109de5198#c04c121e2c8eebcfb09fbcbeecff310223fe987f_471_600

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/706>
2026-02-24 19:46:35 -05:00
Hari Rana e1c139782f views/month-view-row: Implement keyboard navigation for event widgets vertically 2026-02-24 21:22:26 -03:00
Hari Rana 4901709e63 views/month-view-row: Implement keyboard navigation for event widgets horizontally
Ideally, we should be comparing if the Y coordinate of both the
candidate and focused widgets are identical, but given font
sizing issues with special characters such as emojis
(see https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1519),
it is safer to check if these widgets intersect vertically, as
otherwise a single pixel offset may cause keyboard focus to
completely skip event widgets.
2026-02-24 21:11:40 -03:00
Hari Rana 4ae0997c3f views/month-view-row: Focus first and last event widgets
This also creates the FocusEventData struct, which stores
relevant information to compare and contrast event widgets.
2026-02-24 20:44:51 -03:00
Hari Rana 08e8318889 views/month-view: Allow navigating with Tab
This also notifies if keyboard navigation fails.
2026-02-24 20:05:15 -03:00
Fabian HügelandMaximiliano Sandoval da90b94bbd views/month: Jump to first day of month with PgUp/PgDown
With this we always jump to the first day of the next/previous month
when pressing the PgDown/PgUp key in the month view.

Partially fixes the regression described in
https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1103

Co-authored-by: Maximiliano Sandoval <msandova@gnome.org>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/369>
2026-02-21 20:22:15 -05:00