These aren't actual limits, but rather the minimum limit
as specified in POSIX (e.g. _POSIX_NAME_MAX is the minimum
allowed value for NAME_MAX).
Add missing values as defined in POSIX-2024, at least for
features we support, and change wrong values to be the ones
specified in POSIX.
No behavioral intended change (nothing should be using these directly.)
It's specified in POSIX, and FreeBSD puts it in this file.
Distinguish it from _POSIX_SEM_VALUE_MAX (which is really a
"minimum value this can have" as specified in POSIX.)
We have returned "1" here since this code was originally written
in 2004 (hrev7290). BeOS R5 apparently returns "1000009" for this
value, while the Be Book gives no details about what this value means.
So, return an actually useful value of the Haiku version, and then
in uname() process this to return a string indicating the Haiku
version. This makes "uname" print the actual system version,
not just the hrev.
It appears Linux and other systems give non-integer values in
info->release, so this should be fine.
Fixes#17030.
Allows to register and unregister disk images, as well as backup a
partition to an image or restore an image to a partition.
Change-Id: I4e377b1d521ceb7a91e1a5c0d1bb3d37b24fcd68
Reviewed-on: https://review.haiku-os.org/c/haiku/+/330
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
It isn't working properly; see #19874.
Leave the others enable for testing for now. We can disable them
in the beta6 branch if necessary (if nobody reports that they are
indeed working.)
Tracker creates a drag bitmap containing the selection being dragged.
There is a size limit if the selection is too large to avoid moving a
huge bitmap around.
There were two problems with the way this was done:
- The smaller rectangle was always centered on the cursor, even if that
was near the edge of the selection being dragged. In that situation,
most of the drag bitmap would end up being empty. Instead, move the
rectangle to align it with the edges of the selection if it goes
outside them. This makes sure we always use as much of the drag
rectangle as possible for useful data.
- Moreover, there was a regression on the rendering of the
"fade" at the edge of the rectangle. This is a transparency gradient
that should be at the edge only, to indicate that the drag bitmap has
been truncated, and that more (invisible) things are also being
dragged. In hrev58665, this transparency gradient was changed to cover
the entire width and height of the dragged bitmap, instead of just the
edge. This lead to most of the text being almost invisible in a lot of
cases. Change the code to use a gradient only near edges again.
Fixes#19429.
Change-Id: I395fda191dc61732e4bdc5287a09882cdc2b5f55
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10177
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
* Write overlay will check if a directory being created already
exists. This fixes an issue where creating a directory that already
exists and is empty would remove and recreate it
instead of returning a directory exists error.
* Check if file exists when creating with O_EXCL and VFS did not catch it.
* Add check to Open() to check and fail correctly if we are opening a
non-directory with O_DIRECTORY. Fixes error when trying to copy/move a
file over another (with cp/mv).
* Correctly return file exists when creating a symlink that already
exists.
Fixes#19640
Change-Id: I82f65d06db0f2ba3cd8facbf7114af60d6987a95
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10172
Reviewed-by: waddlesplash <[email protected]>
* input reports are no longer requested, devices send them when available and we only have to wait for interrupt to come. This is written on Microsoft i2c hid reference document. In fact, as some devices may have more than one input report (ie: trackpad and fallback mouse), we were requesting (and receiving) an input report for each of them. Worse than that, our driver was missassigning reports to handlers.
* fix: i2c report type did not match specification
* implemented send feature report
* The driver sets the device to fallback mode (mouse emulation). This is a short/mid term solution, because right now we can't handle multi-touch trackpads properly. On some laptops this feature is there but ignores request.
* The driver fetches a windows 8 blob (if available). It looks like some devices refuses to work if this blob (I think is a certificate) is not fetched.
* Should we reset the device at Open()?
* Some style fixes
* Added some comments and links where things become ugly
* Some refactor is still missing
Change-Id: Ibb73e0d9dfa7184d35ed8f2adf377c277c53ce18
Reviewed-on: https://review.haiku-os.org/c/haiku/+/8942
Reviewed-by: Adrien Destugues <[email protected]>
* Add Model::SniffMimeIfNeeded as a faster alternative to
Model::Mimeset, useful for ensuring that Model::fMimeType is
initialized regardless of whether the filesystem supports MIME.
* Use SniffMimeIfNeeded when the user interacts with a file.
* Change the return value of Model::Mimeset to match the comment in
Model.h, although currently no client functions pay attention to the
return value.
* Fixes#19284.
The SniffMimeIfNeeded calls provide the following behavior:
* AddOneRefSignatures - Populate Open With
* SearchForSignatureEntryList::Relation - Populate Open With
* SearchForSignatureEntryList::RelationDescription - Populate Open
With descriptions (e.g. "Preferred for Text file").
* TTracker::OpenInfoWindows - Set up Get Info window
Change-Id: Icd0aa98781e191d3f804235b0ab8acfdbe47582d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9683
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
Add finger hack to simulate statuses on finger width based
on synaptic hardware and TODO to remove this in the future
when those flags are splited out from finger with values
on all devices and on user space.
Change-Id: Iecba7612ad7041bb948132754c4ea263c9b331ac
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9957
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
Threat trackpoint packets to mouse_movement values instead of
touchpad_movement. This required changes on ioctl handling
effectely making this as kind of hybrid device which reports
back MS_READ events for touchpad and MS_READ_TOUCHPAD for
touchpad related processed packets.
The logic is similar to the ioctl and movement handling
funtions of the Haiku ps/2 alps driver.
Packet descriptions based on FreeBSD 14.3 psm driver.
Constant bit checks based on FreeBSD 14.3 psm driver.
Packet processing code based on OpenBSD 7.8 pms driver with variable
naming adjustments to match FreeBSD and Haiku.
Change-Id: I42b62ccbb410060cceba4f17d299c7daf0c38b66
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9956
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
Packet description information taken from Linux documentation
and formated matching on FreeBSD 14.3 driver entries.
Introduce parity check and other packet validations.
Packet processing code based on OpenBSD 7.8 pms driver with variable
naming adjustments to match FreeBSD and Haiku.
Fix packet size and supporting reg functions.
Change-Id: Iad2d0856a1f9bc7291c7e4f6f8a81c2ddb9f58a4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9955
Reviewed-by: Adrien Destugues <[email protected]>
Packet descriptions based on FreeBSD 14.3 psm driver.
Constant bit checks based on FreeBSD psm.c and Linux drivers.
Packet processing code based on OpenBSD 7.8 pms driver with variable
naming adjustments to match FreeBSD and Haiku.
Complete get_rage for v2 devices based on Linux driver.
Special middle button handling for EF113 devices handled by compile
time options being the default to report middle button instead of
left and right pressed at the same time.
Change-Id: Ic23e9a889987a5f150af57c13f8c3b5244b747f5
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9954
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
Trackpoint related packets are ignored as of now.
Packet description and validations based on FreeBSD 14.3 psm driver.
Packet processing code based on OpenBSD 7.8 pms driver with variable
naming adjustments to match FreeBSD and Haiku.
Excluded v3 faulty devices as described on Linux ETPS/2 driver.
Change-Id: I5493128557b72fe72f0ea72e225854b745da459a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9953
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
v4 - HEAD packet: Handling of finger id 0 only
Process finger id 0 keeping code separated handling preparing for
multifinger support.
Add extra checks with hardware limits.
Keep separated event and cookie position handling.
Improve tracing.
v4 - Improved pressure handling
Do not provide pressure when there are not fingers touching and
set a default pressure valud pressuming it will be taken into
account for tapping on the user space on packets where pressure
information is not provided by hardware.
v4 - Hardcode fingerWitdh to defaut value
Always provide default finger width value which is not a Synaptics
w flag to enable tapping getting rid of previous 0 value which is
the Synaptics flag for 2-fingers on that variable.
This gives the chance to decide from the user space when to issue
tapping or scrolling instead of being hardcoded on the kernel driver.
At the same time it makes MOTION packets that contain information of
2 fingers on the same packet to be taken into account for cursor
movement if applicable for instance when two-finger scroll is disabled.
v4 - Fix tracing text and comment
The value provided is not the number of fingers or fingers map
but a finger id number.
Move comment to the next line as that applies to next if condition
and not to the trace instruction.
v4 - MOTION packet: Fix getting finger 0 info
Sometimes the information on MOTION packet which contains
2 finger positions could come on descending order by id.
For insteance finger 1 on the first location of the packet
and finger 0 coming on the second one.
Get finger 0 values from first or second finger information
location in the packet if available instead of checking for
the first position only. Report to ignore packet otherwise.
Provide extra checks and improve tracing.
The set of changes of this commit fixes suttle cursor jumps
caused by missing finger 0 information when that is provided
on the second location of the MOTION packet instead of coming
from the first location. On that scenario, if a following HEAD
packet containing absulute positioning for finger 0 is comming
the issue was reproduced.
v4 - MOTION limit positions to boundaries
This fixes cursor jumps and cursor disapearing among other
misbehaviours when relative positions for the movement added
up to the expected previous absolute position of the finger
id on touchpad coordinates result on underflow or overflow.
v4 - Manipulate finger bitmap computation based on previous packets with TODO
There is no consensus on BSDs and Linux drivers, nor even clear
documented behaviour for this so this is implemented based on
experimentation.
FreeBSD considers STATUS packet comes first prividing the list of
fingers detected following a sequence of HEAD packets prividing
absolute positioning for fingers that hadn't prevously been tracked
and MOTION packets for relative positions for subsequent movement
packing 2 finger information per packet until interation with the
touch area stops so a final STATUS packet with no fingers detected
and filled out with zeroes for other fields signals the end of
movement. Motion packets with fingers ids not mapped form the HEAD
are discarted as invalid data.
On Linux there is not such restriction so HEAD or STATUS packets
are taking into account regardless fingers on STATUS information
matches with next packet.
So that, the implementation here uses the STATUS information as
informative for the following events. For instance if a status
packet signals that two-fingers are pressed and the next packet
is a HEAD packet, the latter only can provide information for
one finger only, then the number of fingers reported is 2 on the
head packet if the id of the finger overlaps with the ones from
the HEAD packet or 3 fingers in case the id is a new one.
Same logic applies to MOTION packets.
This makes the asumption that a started event can only retain or
increment the number of fingers until a movement action is finished
providing continuity for dragging actions and scrolling actions.
A TODO is added to investigate which should be the right behaviour
for this and check if differnt v4 hardware and firmware match.
v4 - Implement hardware palm detection as compile option disabled by default
Fixed hardware palm detection to be taken into account on a separate field instead of
being a hack messing with the number of fingers reported on STATUS packet and complete
the conditions propagating the palm detected value on HEAD and MOTION packets fixing
some previous non-accurated conditions.
This fixes incorrect reports for taps among others on both cases whether the compile
option is enabled or not.
Apart from that a TODO is added from completeness to encourage looking for software
palm detection instead that will benefit other devices as well.
Palm detection will be more accurate to do by software so is is disabled by default.
Some posible options are:
- Improvements on padblocker input filter.
- Improvements in user mode input_server device.
- General input_server modifications.
- Other inprovements on this driver.
v4 - Initialise event structure so that new or unasigend fields will be zeroed
This prevents potential misbehavious by dealing with incorrect data in case
the event structure is modified in the future with new fields after recompiling
this driver with unchanged code.
At least those field will be zeroed with usually mean that they are at least
initialised.
Change-Id: Iccfdd356ff2834e5dea64481259fd890dd95406b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10013
Reviewed-by: Adrien Destugues <[email protected]>
v4 - Implement buttons
v4 - STATUS. Hardcode position to special (0,0) coordinates
This fixes mouse disapearing on first iteration and fixes scrolling a bit.
Provide tracing for coordinates provided on the cookie as STATUS packet
does not contain them.
Commented is assinged cookie position to (0,0) as this is used to restrict
MOTION positions in a visible way as workaround for its correct
implementation. This will be cleaned up later.
v4 - Add presure handling for HEAD and MOTION packets
Initial change to enable tapping on v4 devices.
v4 - Use fingers bitmap from STATUS on all packets
Provide fingers event with finger bitmap value from last STATUS packet
as neither HEAD nor MOTION packet provide that detailed information.
This change is essential to implement clickfinger behaviour, better
tapping conditions, two-finger scrolling, etc.
Change-Id: I7908bac305431d436f4bf6273a700036f4e483e3
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10012
Reviewed-by: Adrien Destugues <[email protected]>
This fixes many unstabilities and unexpected behaviours, as returning B_ERROR
triggers a device restart and returning B_OK with incomplete or not initialised
data makes movement makers and mouse input server device add-on code to process
that as if it were completely correct.
That would trigger many phantom clicks, cursor jumping, coursor desapearing and other
collection of misbehaviours.
Change-Id: I05c40cb4f17e28a6b93f6e17984d6a1171fdd00a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9937
Reviewed-by: Adrien Destugues <[email protected]>
This includes common legend for all packet versions and packet
descriptions for STATUS, HEAD and MOTION v4 packet types
Change-Id: Ibbb2296f8df7b63ac7beee000b208d7b2744084d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9933
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
- Add references for driver implementation.
References from FreeBSD 14.3, OpenBSD 7.8, Linux 6.17 sources
and Linux 4.16 documentation.
- Add pragma marks for easy navigation
- Add missing define to fetch firware info from hardware
- Reduce size of version field
- Update probe function to be able to enable supported devices
- Update open function to add missing v4 devices
- Fix enable_absolute_mode and use same snooze time as BSDs and Linux drivers
- Fix get_resolution_v4 and set sane defaults instead of failing with error
- Update license for ps2_elantech.{h,cpp}
Change-Id: I76fba3be04d7b940079fc78c3b7fe7d8bf8dfa06
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10011
Reviewed-by: Adrien Destugues <[email protected]>
input touchpad settings header:
- click finger behaviour (enabled by default)
- Emulation of different button clicks depending on the
number of fingers that are pressed at the same time on
any location of the touchable surface of the device.
- Clicking with 1 finger triggers a primary button click,
usually left button click.
- Clicking with 2 fingers triggers a secondary button click,
usually right button click.
- Clicking with 3 fingers triggers a terciary button click,
usually middle button click.
This feature is useful for clickpads that are input devices
lacking a separated set of buttons from the touch area.
input preflet:
- Implement clickfinger
input mouse:
- Handle and provide new settings for clickfinger behaviour
input mouse mm:
- Implement clickfinger in the user space
- Enables button emulation based on the number of fingers pressing
at the same time the touch surface.
Userful feature for clickpads.
Change-Id: Ibaa06df3887793158093cc08f6281fc080e85c3b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9923
Reviewed-by: Adrien Destugues <[email protected]>
input touchpad settings header:
- software button areas (enabled by default)
- Emulation of buttons clicks based on which small area
assinged by each button is pressed. For instance, a
software button area on the bottom of the touchpad
could be divided on 3 subareas one for each button.
This new feature is useful for clickpads that are input devices
lacking a separated set of buttons from the touch area. However,
we may prefer to make the GUI better suppot "single button" devices.
Disabled by default as we don't currently have a way to adjust the
default settings according to the presence of physical buttons,
and having this disabled yields an OK experience on all machines.
Having the soft buttons in addition to physical buttons would just
be too strange.
input preflet:
- Implement software button areas
input mouse:
- Handle and provide new settings for software button areas
input mouse mm:
- Implement software button areas in the user space
- At the moment only a bottom located software button area
simulating 3 different buttons is enabled.
There is a working implementation 2 buttons only but not
enabled in the code base.
TODO for other type of software button areas is there.
Change-Id: I255cb1a7eac0d18064c63a2a0d4b158be7370a17
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9922
Reviewed-by: Adrien Destugues <[email protected]>
input headers:
- Add edge motion constants
input touchpad settings header:
- Edge motion (enabled by default as on tap drag)
- Help moving the cursor and the primary finger transitions
from one place of the touchpad to its edge and then stays
on the edge for some time.
The default matches the current hardcoded behaviour.
input preflet:
- Implement edge motion options
input mouse:
- Handle and provide new setting for edge motion
input mouse mm:
- Enable edge motion on tap drag based on settings instead of being hardcoded
- Some users who didn't have a chance to read the users' documentation could
wrognly believe that this feature is a bug by not understanting why
unexpected cursor movement happen at constant speed on some scenarios
sometimes not even realising that it happens when the finger is approaching
to the edges of the touch area by mistake.
At least, even if this is the current default setting at the moment, this
enables the chance to change it instead of being a obscure hardcoded feature.
input mouse mm:
- Enhance edge motion with extra behaviours
- Support for other edge motion aids apart from "on tap drag only".
Change-Id: Ice50139f9f8001494f7e2a46bb1521a1e525cade
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9921
Reviewed-by: Adrien Destugues <[email protected]>
input touchpad settings header:
- Implement two-fingers natural scrolling (enabled by default)
- Sets scrolling with 2 fingers on the touchpad making
the content to move in the same direction as the finger.
input preflet:
- Implement 2 fingers natural scrolling
input mouse:
- Handle and provide new settings for 2 finger natural scrolling
input mouse mm:
- Implement two-finger natural scrolling feature
- Implement natural scrolling for two-finger scrolling completely
separated from reverse scrolling for egde scrolling only.
Change-Id: Idf673ec34a424b20183ed90761f297340d521526
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9919
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
* For a received neighbor solicitation, the target address would be
our local address, so we need to use the IPv6 source address instead.
Change-Id: I93af830c04354e069c3c43f05e28a3cf3cd5dd9d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10178
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
* Previously, the filtering logic didn't work at all.
* netstat can now also display IPv6 addresses (mainly by using
getnameinfo instead of using IPv4 specific functions).
* Removed dead code.
Change-Id: Iaafe3d57253a64ef12ed79d7968e8fd1dfcb3960
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10180
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
TFilePanel inherits from Tracker's ContainerWindow, which calls Run() in
its constructor.
This results in the constructor of the subclasses being run while the
window message loop is already running and processing messages.
Specifically, views are getting resized and moved both by the
constructor (in RestoreState) and by the resizing code (_ResizeBy
recursively relayouting all children).
This results in the cancel button being left at the wrong place at the
end of the constructor (or shortly thereafter). While that on its own
has no consequences because the layout is fixed when the window is
finally shown, the position of the cancel button just after the
constructor is relied on by applications which add custom widgets to the
window (Wonderbrush, Icon-O-Matic, Pe for example).
Make sure to keep the window locked while setting it up, so the message
loop does not interfere.
Fixes#19499.
Change-Id: I83f8fcfc56434e979b20043d8d652074f2f3cf5d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10176
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
- Check superblock magic. Overwriting the first sectors of partitions
using other filesystems than BFS is likely to cause trouble.
- Check presence of bootcode in the same version, as well as the correct
partition offset.
- Tell the user when the partition was already bootable and nothing was
done, hopefully this will finally stop people from thinking that
makebootable is of any use (it isn't, Installer already does the
work).
Change-Id: I792fb29166773e224266d35a4976ac90662e5cb6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10174
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
Same thing is done in Installer to avoid confusion in case workspace
switching shortcuts are used accidentally.
Fixes#19278
Change-Id: I20af1a235f47f012a120c6a94511bfe94a2cdfbd
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10145
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>