1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-20 14:55:08 +00:00
Commit graph

6339 commits

Author SHA1 Message Date
Andreas Kling
d196fbce5b LibGUI: Repaint buttons immediately on mouse up/down events
This ensures that rapidly clicking a button doesn't look like it's
"swallowing" some of the mouse events.

This already worked okay due to a hack in Window, but this will allow us
to get rid of that hack.
2021-10-23 17:54:59 +02:00
Andreas Kling
24651f854c LibGUI: Add Widget::repaint() to force an immediate repaint
In most situations, Widget::update() is preferable, since that allows us
to coalesce repaints and avoid redundant work, reducing system load.

However, there are some cases where you really want a paint to happen
right away, to make sure that the user has a chance to see a short-lived
visual state.
2021-10-23 17:53:11 +02:00
Andreas Kling
da86f4e384 LibGUI: Use move semantics in GUI::MultiPaintEvent 2021-10-23 17:38:38 +02:00
Andreas Kling
877ddaa016 LibWeb: Fix off-by-one in initial containing block overflow calculation
We're using the outermost right and bottom child edges to determine the
width and height of the ICB. However, since these edges are *within* the
respective child's rectangle, we have to add 1 when turning them into
width and height values.

This fixes an issue where scrolling a document would shrink its viewport
rect by 1 pixel (on both axes) on every scroll step.
2021-10-23 16:10:44 +02:00
Andreas Kling
79f2e8ae2a LibGUI: Make exclusive button group act as a single focusable unit
Before this change, using the Tab key would cycle through all the
individual buttons in an exclusive group (e.g radio buttons.)
This felt wrong, since a group of exclusive buttons is really a single
logical input with a limited number of possible choices.

This patch makes such groups behave as a single focusable unit instead,
by dynamically updating the focus policies so that only the currently
checked button is focusable.

We also allow keyboard navigation within the button group via the arrow
keys. This had to be specialized in GUI::AbstractButton, since the
default behavior of arrow keys is to traverse the focus chain.
2021-10-23 16:10:44 +02:00
Andreas Kling
0d8373287c LibGUI: Add GUI::KeyEvent::is_arrow_key() 2021-10-23 16:10:44 +02:00
Andreas Kling
d91732f959 LibGUI: Mark GUI::RadioButton as "checkable"
Any AbstractButton that uses the "checked" state should mark itself
"checkable", this was a weird oversight.
2021-10-23 16:10:44 +02:00
Jean-Baptiste Boric
1b3090bf3c LibCore: Add ignored options to ArgsParser 2021-10-23 15:06:33 +02:00
Jean-Baptiste Boric
68c457b601 LibC: Add definition for FOPEN_MAX 2021-10-23 15:06:33 +02:00
Sam Atkins
f645ed199e LibWeb: Make CSS ParsingContext's Document* be const
The only reason it wasn't const before (and why we had a const_cast
hack) was to support ImageStyleValue's constructor taking it, which no
longer applies. `hack_count--;` :^)
2021-10-23 11:42:24 +02:00
Sam Atkins
0f393771b7 LibWeb: Move image resource request out of ImageStyleValue constructor
This always felt awkward to me, and required a few other hacks to make
it work. Now, the request is only started when `load_bitmap()` is
called, which we do inside `NodeWithStyle::apply_style()`.
2021-10-23 11:42:24 +02:00
Linus Groh
dd2655c1fb LibJS: Update Annex B String.prototype extension spec section numbers 2021-10-23 11:38:13 +02:00
Linus Groh
d655a0a42e LibJS: Add "at" to Array.prototype[@@unscopables] 2021-10-23 11:38:13 +02:00
Linus Groh
534fd41fa3 LibJS: Use ECMA-262 spec URLs for .at() (relative indexing, now stage 4) 2021-10-23 11:38:13 +02:00
Linus Groh
5ff7d7945d LibJS: Use ECMA-262 spec URL for Object.hasOwn() (now stage 4) 2021-10-23 11:38:13 +02:00
Linus Groh
60ee542612 LibJS: Mark GetEpochFromISOParts as infallible
This is an editorial change in the Temporal spec.

See: 66ea81b
2021-10-23 01:05:50 +01:00
Idan Horowitz
0f5cfe975f LibJS: Convert ArrayPrototype functions to ThrowCompletionsOr 2021-10-23 02:49:41 +03:00
Idan Horowitz
36446c0bd5 LibJS: Convert the FlattenIntoArray AO to ThrowCompletionOr 2021-10-23 02:49:41 +03:00
Idan Horowitz
953265805e LibJS: Convert array_merge_sort to ThrowCompletionOr 2021-10-23 02:49:41 +03:00
Idan Horowitz
ad318ec123 LibJS: Convert the ArraySpeciesCreate AO to ThrowCompletionOr 2021-10-23 02:49:41 +03:00
Idan Horowitz
36aef8ee95 LibJS: Convert ArrayConstructor functions to ThrowCompletionOr 2021-10-23 02:49:41 +03:00
Idan Horowitz
e26d9f419b LibJS: Remove vm.construct and it's usages 2021-10-23 02:49:41 +03:00
Linus Groh
66770de264 LibJS: Convert Intl.NumberFormat functions to ThrowCompletionOr 2021-10-22 23:20:18 +01:00
Linus Groh
351f0b70bd LibJS: Convert Intl.Locale functions to ThrowCompletionOr 2021-10-22 23:20:18 +01:00
Linus Groh
9fb1d7e18b LibJS: Convert Intl.ListFormat functions to ThrowCompletionOr 2021-10-22 23:20:18 +01:00
Linus Groh
15eadcf023 LibJS: Convert Intl.DisplayNames functions to ThrowCompletionOr 2021-10-22 23:20:18 +01:00
Linus Groh
68df9e4dfb LibJS: Convert Intl.getCanonicalLocales() function to ThrowCompletionOr 2021-10-22 23:20:18 +01:00
Tim Schumacher
79bcfa967b LibC: Fix up mblen 2021-10-22 13:28:56 -07:00
Tim Schumacher
8df6955838 LibC: Fix up mbtowc
One more proper implementation and one less FIXME.
2021-10-22 13:28:56 -07:00
Ben Wiederhake
1bc4a0d822 LibGfx: Restrict cleared area to GIF framebuffer
Found by OSS Fuzz, long-standing issue
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=34824

The discovered testcase attempts to clear the framebuffer of size
1056x32 from the previous image, which has size 16416x32.
2021-10-22 20:37:27 +01:00
Idan Horowitz
db5df26841 LibJS: Convert Array AOs to ThrowCompletionOr 2021-10-22 15:07:04 +03:00
Idan Horowitz
3426285738 LibJS: Convert Locale AOs to ThrowCompletionOr 2021-10-22 15:07:04 +03:00
Tim Schumacher
89afd4d063 LibC: Implement mbsnrtowcs 2021-10-21 23:57:32 -07:00
Tim Schumacher
552ae77f0d LibC: Implement wcsnrtombs 2021-10-21 23:57:32 -07:00
Tim Schumacher
e618602433 LibC: Implement mbrlen 2021-10-21 23:47:20 -07:00
Andrew Kaster
644928314a Libraries: Add LibDeviceTree for manipulating OpenFirmware Device Trees
Starting with header validation and a dump() method that can be used to
debug future parsing work.
2021-10-21 19:20:03 -07:00
Linus Groh
9143d37907 LibJS: Convert Temporal.ZonedDateTime functions to ThrowCompletionOr 2021-10-21 22:31:31 +01:00
Linus Groh
7085458a23 LibJS: Convert Temporal.TimeZone functions to ThrowCompletionOr 2021-10-21 22:31:31 +01:00
Linus Groh
15f52c5f8e LibJS: Convert Temporal.PlainYearMonth functions to ThrowCompletionOr 2021-10-21 22:31:31 +01:00
Linus Groh
e4e04528af LibJS: Convert Temporal.PlainTime functions to ThrowCompletionOr 2021-10-21 22:31:31 +01:00
Linus Groh
c8e359c25e LibJS: Convert Temporal.PlainMonthDay functions to ThrowCompletionOr 2021-10-21 22:31:31 +01:00
Linus Groh
c043b818ad LibJS: Convert Temporal.PlainDateTime functions to ThrowCompletionOr 2021-10-21 22:31:31 +01:00
Linus Groh
2093128b24 LibJS: Convert Temporal.PlainDate functions to ThrowCompletionOr 2021-10-21 22:31:31 +01:00
Linus Groh
df67f4978e LibJS: Convert Temporal.Now functions to ThrowCompletionOr 2021-10-21 22:31:09 +01:00
Linus Groh
149231d47d LibJS: Convert Temporal.Instant functions to ThrowCompletionOr 2021-10-21 22:31:09 +01:00
Linus Groh
5e9e3f9dc8 LibJS: Convert Temporal.Duration functions to ThrowCompletionOr 2021-10-21 22:31:09 +01:00
Linus Groh
2d2ba4eec6 LibJS: Convert Temporal.Calendar functions to ThrowCompletionOr 2021-10-21 22:31:09 +01:00
Andreas Kling
649cb67f28 LibGUI: Don't paint TextEditor selection in non-focused widgets
Showing the selection in non-focused text editors was not really useful,
since refocusing the widget would clear or change the selection
immediately anyway.

Note that TextEditors in inactive windows can still be the focused
widget within that window, and will still be painted with an "inactive"
looking selection.
2021-10-21 23:23:25 +02:00
Andreas Kling
c1576aca11 LibGUI: Use the new GUI::Tray widget in GUI::FilePicker
This removes all the extra entries from the keyboard focus chain and
makes FilePicker actually pleasant to navigate with the keyboard.
2021-10-21 23:23:24 +02:00
Andreas Kling
ae2579d8b5 LibGUI: Add a GUI::Tray widget for the FilePicker common locations
The FilePicker has implemented its common locations tray as a composite
widget built from a GUI::Frame with a bunch of GUI::Button inside it.
The problem with that is that it creates a long and annoying chain of
keyboard-focusable widgets.

This patch adds GUI::Tray, which is a dedicated single widget that
implements the same UI element, but without child widgets.
2021-10-21 23:23:24 +02:00