Commit Graph
51 Commits
Author SHA1 Message Date
Hari Rana 5f21144fbb views/month-view-row: Additive inverse in right-to-left languages
"Additive inverse" basically means transforming a positive number
into a negative equivalent, or vice-versa; for example, from 5 to -5.

Instead of inverting conditions in right-to-left languages to
compare the X coordinate, a much simpler approach to this is to
normalize the X coordinate by applying additive inverse in
right-to-left languages.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/744>
2026-07-05 14:56:44 -04:00
Hari Rana cc6edfed79 views/month-cell: Replace overlay with box and empty bin
Since we don't make use of the overlay anymore, it's best to remove
it altogether.

This also changes the behavior of the widgets a bit: It adds an
empty AdwBin widget which expands vertically, allowing us to avoid
aligning the header and overflow button.

The pattern goes from reducible (where we deduct the overflow
height to retrieve the content) to additive (where we add the
overflow height to the content height), which requires us to
adapt GcalMonthViewRow with this new behavior.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/743>
2026-07-04 23:04:29 -04:00
Hari Rana 7ebd9f2744 views/month-view-row: Add property to negate the compensated pixel
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/772>
2026-05-28 06:27:37 -04:00
Georges Basile Stavracas Neto c9c455b6d8 views/month: Only recalculate layout blocks when needed
The tick callback can be fired *after* the GtkWidget.map() vfunc is
called, in which case the recalculate_layout_blocks() will run with
an already recalculated layout, which is invalid.

Only call recalculate_layout_blocks() when the blocks are invalidated.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/768>
2026-05-20 13:45:52 -03:00
Georges Basile Stavracas Neto 298593456a view/month: Drop GtkBoolFilter from rows
They're slower and showed up in the profilings. Use a custom filter
for now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/765>
2026-05-19 19:25:49 -03:00
Georges Basile Stavracas Neto 601acef508 views/month: Use variable for better readability
The second part of the if condition is not obvious, so use a variable
with a proper name to make it easier to understand.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/758>
2026-05-19 22:20:10 +00:00
Georges Basile Stavracas Neto 573e1dc042 views/month: Simplify layout blocks recalculation
We can merge two of the three branches, and thus cleanup a function
that is only used there.

Suggested by Hari.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/758>
2026-05-19 22:20:10 +00:00
Georges Basile Stavracas Neto bbc041eed9 views/month: Recycle event widgets using the pool
Create a new GcalEventWidgetPool shared between all month view rows.
The event widgets are distributed to rows as needed.

When rows are done with the event widget, the give them back to the
pool so that other rows can reuse them.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/758>
2026-05-19 22:20:10 +00:00
Georges Basile Stavracas Neto 4205e08be6 views/month: Reuse event widgets
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/758>
2026-05-19 22:20:10 +00:00
Georges Basile Stavracas Neto c71fcf7029 views/month: Add "range" property to rows and use it
Use it as the binding source of the GtkExpression for the boolean
filter used to filter the list of events. This allows automatic
filtering when the "range" property changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/742>
2026-05-03 16:57:54 +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
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 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 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
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 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 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 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 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 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 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 6d47fc1db8 views/month-view-row: Add offset when allocating event widgets
The SEPARATOR_OFFSET constant is for the box shadow property
defined in month cells' CSS. Since the box-shadow property does
not contribute to layout, so these offsets need to be set manually.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/676>
2025-12-28 17:04:32 +00:00
Hari Rana b0a5ff18d5 views/month-view-row: Compute exact width of event widgets
Currently, month cells are using `round()` to allocate the width,
whereas event widgets are using implicit double → int conversion,
which causes event widgets to be offset by a pixel, and thus
touches month cells' borders.

This new approach guarantees the exact width of the event widgets
by invoking `round()`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/676>
2025-12-28 17:04:32 +00:00
Philipp Sauberzweig a32df2b070 views/month-cell: Remove dimming of out-of-month cells
The infinite scrolling month view obsoletes the out-of-month
dimming, as the view is no longer fixed in a specific month, nor
does it make out-of-month cells insensitive.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1145
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/646>
2025-10-17 18:06:17 -04:00
Georges Basile Stavracas Neto bebfe587e1 views/month: Add missing GCAL_EXIT 2025-03-11 17:52:15 -03:00
Georges Basile Stavracas Neto de342e5606 gui/event-widget: Properly handle read-only events
Handle it internally, as it should be.
2025-03-11 17:52:14 -03:00
Georges Basile Stavracas Neto 03e6e39433 views/month: Rebuild layout blocks at once per frame
Instead of rebuilding them all every time an event is added or removed,
rebuild it once per frame. In case the month view isn't visible, don't
do anything, and wait until it's mapped to actually rebuild the event
blocks.

Related: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1381
Related: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1125
2025-03-11 17:52:14 -03:00
Georges Basile Stavracas Neto 67a6d0a002 views/month: Cosmetics 2025-03-11 15:22:51 -03:00
Markus Göllnitz 87607efa90 views/month: Fix measurement of month view and month rows
The measurement in opposit direction of the one in which
the elements are lined up needs not to add up all the
sizes but just get the maximal size.

This bug leads to too high minimal and natural widths
(and heights) of the month view.

Signed-off-by: Markus Göllnitz <camelcasenick@bewares.it>
2025-01-22 16:45:23 -03:00
Georges Basile Stavracas Neto dd61f8ef6f views/month/row: Adjust for exclusive end date
Subtract a second from the end date so we can properly compare dates.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1098
2023-09-13 14:25:45 -03:00
Georges Basile Stavracas Neto b0813fb605 month-view-row: Clamp last cell to [first cell, 6]
This is not ideal but it's what we've got for now.

Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1083
2023-09-02 10:26:41 -03:00
Georges Basile Stavracas Neto bd989aae66 views/month: Implement event creation flow
Add a click gesture to detect when we have to start monitoring
cursor motion. Also add a motion event controller to react to
cursor motion, and enable and disable the this motion controller
on button press and release, respectively.

Selection is implemented as a pair of GDateTimes stored in the
month view struct. Whenever a selection begins, the start date
is set; the end date is only set when moving the cursor. It is
valid to have a start of the selection, and no end (meaning, a
1 day selection); it is, however, forbidden to have an end but
not a start.

Future improvements can be added later, such as scrolling when
moving the cursor close to the edges of the month view. We're
gonna have to live without that for now though.

Implement the GcalView.clear_marks vfunc now that we have a
selection to operate on.
2023-08-17 21:13:54 -03:00
Georges Basile Stavracas Neto f1f9d83943 views/month: Implement get_children_by_uuid
Closes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1057
2023-08-14 14:57:51 -03:00
Georges Basile Stavracas Neto 15032b6d05 month-view-row: Add 'show-overflow' signal
It just proxies the day cell's signal.
2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto e7846a6b9c views/month-view: Change visuals of out-of-month day cells
This still looks like garbage becase of the rudimentary way we
compute the current date, but it's a start.
2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto 7f7f55826c month-view-row: Implement RTL support
This was remarkably easy.
2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto ddfd3ae498 month-view-row: Slant edges of multiday events
When the start or end of the event block doesn't match the event's
range, add slanted edges.
2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto f9f9ccbb8c month-view-row: Rewrite layout algorithm
Calculate event blocks upfront, in a way that is agnostic to
pixel sizes, and keep them alive as long the event is around.

Calculate which event blocks are visible at layout time, and
only set the child visibility of the event widgets, instead
of truly showing or hiding them. This makes size_allocate not
queue relayouts.

There are many opportunities for optimizations that we can
eventually land, but this seems to work decently so far.

RTL support is still missing.
2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto a04b5da975 month-view-row: Remove unnecessary field 2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto 6382b1f383 month-view-row: Remove redundant check
All events of a row are, technically, in the same row!
2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto cc51e88ed2 month-view-row: React to event visibility 2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto 3506100f5b views/dazzling-month-view: Show event popovers 2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto 3f0b1e57de views/dazzling-month-view: Handle events
Most of the code is copied from GcalMonthView, so it sucks
slightly. But it seems to work reasonably well so far.
2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto f8f2c10a8e views/dazzling-month-view: Propagate context to rows 2023-08-11 15:13:44 -03:00
Georges Basile Stavracas Neto adaf735ada views/month-view-row: Remove unused variables 2023-08-11 15:13:44 -03:00