Age | Commit message (Collapse) | Author |
|
Any GAction that has an icon assigned will now show up with that icon
when added to a menu as well.
I made the menu items 2px taller to accomodate the icons. I think this
turned out quite nice as well :^)
|
|
Paint a little checkbox frame for checkable items to make it obvious
that they are indeed checkable. This looks quite nice :^)
We also now shift all menu items to the right if we have any checkable
items in the menu.
|
|
It felt weird to have both the app menu *and* a "File" menu.
|
|
This reverts commit 11896d0e26555b8090540b04b627d43365aaec2e.
This caused a race where other processes using the same InodeVMObject
could end up accessing the newly-mapped physical page before we've
actually filled it with bytes from disk.
It would be nice to avoid these copies without breaking anything.
|
|
We were doing this for the initial kernel-spawned userspace process(es)
to work around instability in the page fault handler. Now that the page
fault handler is more robust, we can stop worrying about this.
Specifically, the page fault handler was previous not able to handle
getting a page fault in anything but the currently executing task's
page directory.
|
|
The L was a leftover from when these were called linear addresses.
|
|
And adapt all the code that uses it.
|
|
It's been replaced with Thread::Thread.
|
|
|
|
|
|
|
|
|
|
This library is meant to provide C++-style wrappers over lower
level APIs such as syscalls and pthread_* functions, as well as
utilities for easily running pieces of logic on different
threads.
|
|
This allows you to press Ctrl+F and immediately start typing a new
search string, instead of having to remove the old one first. :^)
|
|
Previously even if you assigned a GAction to a GButton, you still had
to activate() the action manually by hooking the GButton::on_click
callback.
|
|
|
|
Using the new GTextEditor::add_custom_context_menu_action() mechanism.
Fixes #478.
|
|
This allows embedders to add their own custom GAction set to a text
editor's context menu.
|
|
We were checking the columns of the whole selection instead of the
the specfic line were modifying. Because of this, the selection
remained if the selection's column on another line was less than
the cursor.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Add Line::visual_line_containing(int column) to easily convert a column
number into a visual line index.
|
|
|
|
|
|
Maybe we should build a specific version of ncurses instead but this at
least makes it work again for now.
|
|
|
|
|
|
To expand a bit on how the line-wrapping works, each physical line of
text is broken up into multiple visual lines. This is recomputed when
the document changes, or when the widget is resized.
Each GTextEditor::Line keeps track of the visual breaking points, and
also their visual rect in content coordinates. This allows us to do
painting and hit testing reasonably efficiently for now.
This code needs some cleanup, but it's finally in a working state, so
here it goes. :^)
|
|
This makes the cursor actually get painted on the right visual line
when in line-wrapping mode.
|
|
|
|
This is not finished, but since the feature is controlled by a runtime
flag, the broken implementation should not affect users of this widget
too much (in theory :^).)
|
|
|
|
Moving some rect computations to separate functions to make it easier
to reuse them.
|
|
By using find() with a custom finder, we can avoid creating a temporary
key value that's only used for the hash lookup.
|
|
This grabs the hash from the underlying StringImpl if there is one,
otherwise it's computed on the fly.
|
|
This will allow clients to search the map without having to instantiate
a key value.
|
|
Comparing a String to a StringView would instantiate a temporary
String just for the comparison. Let's not do that. :^)
|
|
|
|
We use consumable annotations to catch bugs where you get the .value()
of an Optional before verifying that it's okay.
The bug here was that only has_value() would set the consumed state,
even though operator bool() does the same job.
|
|
|
|
|
|
- TmpFSInode::write_bytes() needs to allow non-zero offsets
- TmpFSInode::read_bytes() wasn't respecting the offset
GCC puts the temporary files generated during compilation in /tmp,
so this exposed some bugs in TmpFS.
|
|
|
|
KBuffer is just meant to be a dumb wrapper around KBufferImpl.
With this change, we actually start to see KBuffers with different size
and capacity, which allows some reallocation-avoiding optimizations.
|
|
|