UnicodeBlockView::SelectBlockForCharacter and CharacterView::_FrameFor
use the same linear search to find which block a character is in, so I
refactored both to use a shared BlockForCharacter function in UnicodeBlocks.cpp
that is a binary search. CharacterView::_BlockAt also had a TODO comment to
use a binary search, so I rewrote it as a binary search. It's not the same
search as the aforementioned BlockForCharacter function. These two changes
ought to improve the overall performance of CharacterMap.
Signed-off-by: Augustin Cavalier <waddlesplash@gmail.com>
The application was previously making a number of different
requests to the application server in order to pull-down
meta-data (ratings, localization etc...) for packages. This
will now happen in one request per repo. The data is
also cached locally and freshness of the data is checked
back with the server before new data is pulled down.
The reason for the erratic behavior was that the tcp implementation
silently drops window update messages after noting the update but without
triggering any data send event. Before the new TCP patches were applied,
the implementation relied on a retransmission timeout to trigger a send event
after a window update. One of the new patches dealing with the ideal timer
changed the semantic of the restransmit function call and caused the behavior
witnessed.
But a retransmission timeout is not the correct solution to window update. In
fact a retransmission is not a desired effect of window update. So in the patch
attached, I have changed the behavior of the implementation to immediately
acknowledge the window update (along with data from SendQueue) and thus solving
the problem of complete halt in data transmission.
The patch also has the changes re-implemented that were reverted back but had
nothing to do with the issue at hand. For the time being, I have also removed
the "ideal timer" part from the patch (although it wasn't creating any
conflict). I initially decided to implement the ideal timer using the same
timer used for retransmission to avoid adding an additional timer. But as I
have seen, it can be problematic. So I will be re-implementing the ideal timer
and thus it was not included in this patch.
Signed-off-by: Augustin Cavalier <waddlesplash@gmail.com>
Fixes#13704.
* Wakeup periodically search thread, cancelling should be
more responsive now...
* Show Lines setting is now saved too
* Fix a bug, current file is display again while searching.
* Always pass line number, if any, to invoked app.
Works with StyledEdit as with Pe.
Partially fix#13289.
Another change will add "open with" context menu and remove "Open with Pe".
Revert "docs: promote SoftwareUpdater as easy tool to update Haiku."
This reverts commit 6487273924.
This reverts commit 8aab3a0d5e.
--
The Userguide and Welcome Guide are written and managed in the Userguide
Translator, not in the tree.
The welcome page was still saying the only way to update Haiku
is per command line. Not as much welcoming as one could expect
since SoftwareUpdater is now available.
Add SoftwareUpdater to the list of Haiku's applications in User Guide.
* Previously, each file was starting a shell to run grep
command on it. Very suboptimal performance, big overhead.
* Now a thread write each file path to xargs input,
while another start xargs, let it distribute files on
grep processes (one per cpu) and collect results asap.
* This bring results way faster than previously.
* Rename Escape Text setting into Regular Expression, as
name was more after shell workaround than after function.
* While it doesn't use a native text searching, by
reusing both grep and xargs power, it answer the main
issue with #9529.
...in horizontal mode.
fTime->Frame().left was not in the correct position because the
window isn't yet done resizing. Instead calculate left from the
right edge of the drag region instead.
* if index == 0 return right away, no calculation required.
* rename rect to rowRect then copy it into replicantRect.
- This makes it clearer to me what's going on.
* don't have to check if index > 0 in horizontal mode anymore since
we are checking it upfront.
* introduce replicantWidth variable for understanding
* reduce indent
Was calculating the height in multi-row mode twice. Instead, use
the saved height, if that isn't set calculate height as before,
if no replicants, use minimum height (16px) and don't calculate.
Frame was a bit wider than it needed to be to fit, battery is same
size as before.
Moved the lightning right 1px and down 1px to fit better
expands to show battery percentage more compactly as well.
...in vertical mode. This is a simplication that is possible because
I am confident that the drag region is the right size at this point
so we don't have to lookup the window width or app width setting.
This led to further code simplications to vertical frame sizing.
Use MenuBar frame for right dimension always because it is set even
if fTrayLocation were to be set to 0.
Added a new message constant to Deskbar kRealignReplicants which
is called to realign replicant icons. Add routing so that if you knock on
Deskbar's front door (Application) it will get routed to the right view, in
this case the repliant tray that knows how to realign replicants.
Send a message with this newly created constant in PowerStatus when
the width changes because you turned the label on or off. This makes
it so that when you show or hide the battery percentage it will not overrun
the clock.
Realign Replicants is a common case.
Fixes the rest of #8641
This fixes some subtle layout issues. The replicant icon
positions and clock position has been made more consistent
in both vertical mode, and horizontal mode.
There is a fixed amount of space between the last replicant
and the clock before it wraps to next row. This now works
at different font sizes.
Use matching 3px of space between the clock and the dragger
on one side and and between the replicant and the dragger
on the other side.
Reparent ResizeControl from ReplicantTray onto DragRegion and
readjust everything.
... fixing oversight in hrev51512.
Erase the file and write all settings to disk each time.
When Workspaces is running in a window WorkspacesSettings
is destroyed first, then WorkspacesView is destroyed.
WorkspacesSettings saves all settings except for 'switch on
wheel', then WorkspacesView reads the settings in from
disk, tacks the switch on wheel setting on, then writes
the settings back to disk.
If WorkspacesView is a (Deskbar) replicant instead the
WorkspacesSettings steps are skipped. WorkspacesView reads
in the settings from disk, tacks 'switch on wheel' on, erases the
file, then saves all settings back to disk. Use ReplaceBool to
ensure that the 'switch on wheel' settings is added just once.
Create the file if it doesn't exist in either case.
Don't check Unflatten status because will fail on empty file.
SaveSettings on the view before opening Deskbar replicant
so that 'switch on wheel' gets loaded.
Renaming of the temporary repo file failed when used with a relative
target path. The path was appended twice in such a case. Also when
used with a specified base directory, the relative temporary repo file
wasn't reachable from the changed working directory.
To fix both cases, create the BEntry pointing at the temporary repo
file before changing the directory and rename it using only the target
leaf name.
BListView's property_info list lacked termination, resulting in
garbage output at the and of 'hey getsuites'.
Use { 0 } everywhere for sake of consistency.
Thanks to waddlesplash for spotting the bug an providing the easy fix.
The application had previously no means to control the verbosity of
logging. This excessive logging meant that it was bit hard to
understand what is going on. Now it is possible to define the level
of logging that is output; especially as the application pulls-down
data from the remote server system.
* Make string-splitting UTF8-aware
* If the window size is too small for the full string, mid-truncate it
* Ensure the string is long enough if the window size is large.
* Rework flushing strategy slightly.
Fixes#13750, as well as taos' unrelated issue he reported there.
(last commit with same title only included new files - added those now)
Previously the desktop application would make a number of JSON-RPC calls
over HTTP to get the repositories. Now it will make a single call to get
the repositories and cache the result. This uses standard HTTP cache
signalling techniques and allows the server-side the ability to cache
the generated data as well. Note that the model classes and parse-
related classes are generated and may not be code-style compliant. They
are generated from JSON schema files in the server-side project.
Information about this as well as the python files used to generate the
C++ classes and headers are included in the server-side project.
... and re-enable it. Off by default. The view controls just this
one setting while the window controls the rest. However they both
share a common settings file on disk. This means that a change in
one view's wheel setting will affect all others when relaunched,
but won't affect already running instances, this is intentional.
WorkspacesSettings::_Open() method has been moved to a static
function OpenSettingsFile() and is used both by WorkspacesSettings
and WorkspacesView classes.
The switch on wheel setting was disabled for view-only (replicant)
Workspaces instances in hrev50796, this seeks to restore it.
That commit says:
"A cleaner solution would be to read the settings once if there is
no WorkspacesWindow, and use the setting from there instead."
Instead of that, we read the setting from the file on disk and
write it to disk too bypassing the window entirely.
Used local pointer style.
Some style fixes mixed in.