BPoint in a mouse moved message is. Turns out it's different (!) according
to the type of message and this is even documented in the BeBook. I don't
really know if we want to copy this, but since there are apps out there that
depend on this, I am implementing it so that it's compatible with BeOS: In
the B_MOUSE_UP/DOWN case, it's the coordinate space of the target view, in
B_MOUSE_MOVED messages, it's that of the window. That explains a few things...
Clicking into Pe's function popup window should now select the right icon.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28742 a95241bf-73f2-0310-859d-f6bbb57e9c96
different sorting order. Therefor store that message in the original data
info instead the types message retrieved from the node. This fixes the
FileType window from requesting a save operation on quit even if nothing
changed (probably with certain app infos only where the sorting happened to
be different. Was the case with Firefox for example). Fixes #XXXX (Trac is
broken again... sigh)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28720 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Support dragging the clock hour and minute hands to set the time.
* Improved keyboard support for the time and date controls.
Thanks a lot!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28713 a95241bf-73f2-0310-859d-f6bbb57e9c96
the listview use all the available additional size. But works far better
than before.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28708 a95241bf-73f2-0310-859d-f6bbb57e9c96
now resize with the tab view. There is probably a more elegant way overriding
DoLayout(), but this should do for the time being.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28706 a95241bf-73f2-0310-859d-f6bbb57e9c96
* The BTabView can now be used with layout management. In this setup, children
views are managed by a BCardLayout and are hidden/shown instead of removed/
added when (de)activated.
Thanks a lot!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28701 a95241bf-73f2-0310-859d-f6bbb57e9c96
worked because (status_t)B_OK == (off_t)0.
* The translator_id version of Translate() does a (probably unnecessary?)
Identify(), but then forgets to seek the source BPositionIO back to 0
before calling translator's Translate(). This was the reason for none of
the WonderBrush Translation Kit export formats to work.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28676 a95241bf-73f2-0310-859d-f6bbb57e9c96
broke everything. If the added item has no chance to calculate it's height,
_RecalcItemTops() won't work of course. Whatever this was supposed to fix,
there has to be a correct way.
* Override BView::SetFont() to update all the items. I remember wanting to
implement this, that's why I refactored a _FontChanged() method, but I
obviousy never did...
* Moved the AttachedToWindow() and FrameMoved() implementations to a more
logical position in the file.
* Implement B_PAGE_UP/DOWN key presses. Don't know if that's what the BeOS
implementation did, will check later.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28671 a95241bf-73f2-0310-859d-f6bbb57e9c96
values. The implementation needs to sum up fractional movement, not
truncate to zero. Before this change, the mouse would be pretty much unusable
at lower speeds/acceleration. Now it is guaranteed to move.
* No need to memset() before ioctl(), the driver does that anyways.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28669 a95241bf-73f2-0310-859d-f6bbb57e9c96
DataTranslations list view. This should fix it. MessageReceived() was not
forwarding to the immediate inherited class.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28665 a95241bf-73f2-0310-859d-f6bbb57e9c96
code duplication and will make maintaining it much easier.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28647 a95241bf-73f2-0310-859d-f6bbb57e9c96
* I feel the Synaptics driver is now good enough to give it more exposure
and turned it on again. If it gives you trouble for some reason, you can
turn it off again in ps2_dev.c, line 105.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28643 a95241bf-73f2-0310-859d-f6bbb57e9c96
won't be called, the control thread will remove the device anyways.
* Turned off the debug output I left on accidentally in KeyboardInputDevice.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28642 a95241bf-73f2-0310-859d-f6bbb57e9c96
in Send(), which uses SaveAsDraft(). This fixes#1020. Thanks to kaoutsis and
ksmith for their investigation!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28641 a95241bf-73f2-0310-859d-f6bbb57e9c96
Make sure the comments are C style in headers that are included by POSIX
headers.
Thanks! Should fix#2870.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28598 a95241bf-73f2-0310-859d-f6bbb57e9c96
sure that you can have an old style mouse without scroll wheel and one with attached at the
same time. For example, when I hot-plug my PS/2 mouse with wheel, the IBM trackpoint will
otherwise already use up the "PS/2 Mouse 1" name.
Unfortunately, hot-plugging the PS/2 mouse on my T60 docking station still does not work
quite right. The PS/2 driver detects everything correctly, the node monitoring works and I end
up with the correct device threads in the input_server. (The notebook is automatically removing
the touchpad and trackpoint devices in this event, which cannot be turned off in the BIOS.)
However, the mouse does not move. In the syslog, I see one message
"ps2: strange mouse data, x/y overflow, trying resync" after the the output from the add-on
manager in the input_server that it has added the new device. When I restart the input_server,
it works fine, even though the same devices are detected and polling threads are running.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28591 a95241bf-73f2-0310-859d-f6bbb57e9c96
functions private and moved them accordingly in the file.
* I forgot to initialize the BObjectList to own the items in
TouchpadInputDevice.
* Changed the methods that read and apply settings in all three addons to be
executed from the control threads only, which fixes race conditions.
* The success of opening a device is no longer checked in the Start() method
of the *Devices. Instead, the control thread checks the device before it
enters the polling loop and cleans up if there was an error. This fixes
non-running devices in the input_server because the PS/2 driver publishes
devices which is has not checked yet for other reasons. It is important,
however, to open() the devices in the Start() hook and not the control
thread, otherwise there are unwanted race conditions in case node monitoring
events are received more than once for the same device. That's the case
for some reason on one of my computers for the AT 0 keyboard.
TODO:
* Combine the Touchpad and Mouse device addon into one, it's almost the
same code except the Touchpad knows more settings and one more control
message.
* Refactor a common base class for Keyboard and Mouse device addon.
* Fix the mouse speed/acceleration. If the speed is lowered from the default
in the preflet, the mouse becomes almost unusable. To fix this, the same
trick should be used as I used in the touchpad kernel driver, which is to
sum up previous mouse moved fractional offsets.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28590 a95241bf-73f2-0310-859d-f6bbb57e9c96
source and it works fine.)
* Updated WonderBrush package. The new version is compiled on Haiku and
improves the installation of the document mimetype (finally a more reliable
sniffer rule, thanks to Francois for helping me with this). The About window
is fixed to no longer use a hardcoded font file path. This version only runs
on Haiku, but it is fully unlocked! Next version with new features won't be.
Also comes with a new vector icon for the native document type.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28570 a95241bf-73f2-0310-859d-f6bbb57e9c96
class/namespace. Renamed the B_GRADIENT_* types to TYPE_* as the context
is already given.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28564 a95241bf-73f2-0310-859d-f6bbb57e9c96
* fStyleMap could be deleted more than once in certain situations.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28563 a95241bf-73f2-0310-859d-f6bbb57e9c96
redownloading the package.
* Added link "vlc" to "VLC media player" in /boot/common/bin to make it
easier on people launching VLC from the command line.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28558 a95241bf-73f2-0310-859d-f6bbb57e9c96
license was nowhere mentioned. I added an explaination to the copyrights section
and also mentioned that clicking a license name will open the respective
license for reading.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28557 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Added docs and screenshots for preference panels:
Appearance, Backgrounds, DataTranslations, E-mail,
Filetypes, Fonts, Keyboard, Keymap, Menu, Mouse,
Network, Screen, Screensaver, Sounds, Time, VirtualMemory
Adapted some contents for E-mail preferences from
src/documentation/haiku_user_guide/HaikuUserGuide.txt
As I haven't succeeded to get email running in vmware, I'd appreciate if someone
can proof read what's written in E-mail preferences.
* Added preferences to the user guide contents.
* Various formatting details and inter-documents-links
Wow! Thanks a lot!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28555 a95241bf-73f2-0310-859d-f6bbb57e9c96
slightly strange redrawing, including scrolling the offscreen view
that it uses in "flicker free" mode (which is the default). Invalidation
does not work in offscreen windows, since the client thread is not running
and certainly won't redraw anything. But that will leave a non-drawable
region on the app_server side of things. Simply don't invalidate in
this case. From what I have seen, redrawing in NetPositive seems to
work fine now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28538 a95241bf-73f2-0310-859d-f6bbb57e9c96
for most messages, use debug_printf(), cleanup line breaks
* check return code of last link method in a lot more places
* changed some printf() and fprintf() into debug_printf()
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28537 a95241bf-73f2-0310-859d-f6bbb57e9c96
in AutoMounter::InitialMountVisitor::Visit(), otherwise restoring
mount options, like read-only mounting, would never work. This
kind of mixes the options of the mount settings, since it partially
remembers the settings even if the option is not "only previously
mounted disks", but it should not hurt anyways. As a side effect,
this should also fix the mount notification sent to Tracker, as
the path should only have been correct for the "mount previous disks"
setting.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28533 a95241bf-73f2-0310-859d-f6bbb57e9c96
gWidthBuffer.
* Tracker PoseView now uses BPrivate::gWidthBuffer instead of it's own
instance.
* TextView.h and PoseView.h are now a little cleaner.
* InterfaceDefs.cpp now deletes gWidthBuffer in _fini_interface_kit_().
* Added binary compatibility support for NetPositive in WidthBuffer.h and .cpp.
Obviously it kind of defeats the purpose of having WidthBuffer neatly tucked
away in the BPrivate namespace, but Haiku should run NetPositive, I guess.
Fixes#2879.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28532 a95241bf-73f2-0310-859d-f6bbb57e9c96
icon in the MediaPlayer Info window. I changed it a bit, so that the
icon retrieval only happens at the file change notification (quite
important, since the info window receives playback position notifications).
I also changed it to take the icon from the file first, if there is one.
Thanks!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28520 a95241bf-73f2-0310-859d-f6bbb57e9c96
license) and rebased the ExpressionParser from double on the MAPM data type.
Currently, the binary operators are not supported anymore, but the imprecise
calculations were getting on my nerves. I think a lot more neat functions
could now be supported, but I have not looked into it further. I also didn't
dare look closer at the C code of the library, but it seems to be well
tested. It's portable by all means, I guess even if the target platform has
8.3 char file names to hold the code... Luckily, the library inclused a C++
wrapper class for the data type (MAPM) which makes it fairly comfortable to
use and hides the ugly C stuff and messy memory management.
The result seems to be quite nice so far. Previously, I couldn't even calculate
my finances without eventually getting some rounding errors.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28506 a95241bf-73f2-0310-859d-f6bbb57e9c96
wrong check to see if the view was currently visible. This fixes the problem
that tool tips would popup for windows that are located on other workspaces.
* Removed commented out code that is no longer needed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28498 a95241bf-73f2-0310-859d-f6bbb57e9c96
* The function is not supposed to return hidden views.
* After iterating over the child views, the "view" variable was clobbered,
so it didn't work to return the current view if none of it's child views
were hit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28494 a95241bf-73f2-0310-859d-f6bbb57e9c96
window this fixes the tool tip size/layout in apps that use BubbleHelper
(Beam, WonderBrush, ...). Thanks to Rene and Stefano for sending me a test
application.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28489 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Firefox -> 2.0.0.17, includes new HVIF icon
* VLC -> renamed VLC to "VLC media player" which is what the official name is
* Pe -> updated to most recent version (called it RC2) which includes a few
fixes and new HVIF icons for most of it's supported document types. Renamed
the application folder to "Pe" and removed the "Drag lpe here to install"
link. Renamed the application itself to "Pe".
Hope these changes are alright with everyone.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28485 a95241bf-73f2-0310-859d-f6bbb57e9c96
SetMouseEventMask() from within it's mouse hooks. Among other things,
scroll bars won't stop scrolling in FFM mode now if you accidentally
leave the window with the mouse, something which is very likely.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28481 a95241bf-73f2-0310-859d-f6bbb57e9c96
both double buffering and single buffering, Invalidate() needs to be
virtual and ViewHWInterface needs to decide where to invalidate it's host
window.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28480 a95241bf-73f2-0310-859d-f6bbb57e9c96
tool tips in WonderBrush. The reason was that the text rect is getting
smaller and smaller each time the tool tip is shown (even though there
is only one word), and the line break moves one char towards the beginning
each time. After four times, the busy loop would kick in reliably. I cannot
really say that I understand the code, though. But that's the spot anyways.
Stefano, could you have a look?
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28471 a95241bf-73f2-0310-859d-f6bbb57e9c96
relative mouse movements. Removed the "history" and replaced it with a method
to accumulate the deltas. Very small deltas are somewhat suppressed, but still
accumulate. Overall, this improves the touchpad sensitivity for small movements
without introducing unwanted jitter. This also keeps the direction of slightly
"non-straight" movements better. I also changed the scale somewhat so that
the acceleration does not feel too little anymore.
These are the remaining problems I have:
* Tap-clicks are sometimes not recognized
* releasing the finger from the pad (which is pressure sensitive) sometimes
still injects unwanted mouse movement, which may be possible to be supressed
when looking at the pressure change and recognizing the release.
* scrolling has changed a bit due to my changes and feels a bit too sensitive
now
Please check it out if you like (ps2_dev.c:105) and tell me what you think.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28468 a95241bf-73f2-0310-859d-f6bbb57e9c96
worked, because the root scanning directory was declared without "/dev/".
This makes restarting the input_server work with the touchpad driver.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28464 a95241bf-73f2-0310-859d-f6bbb57e9c96
solution and replaced it by dumping output to the syslog. (Also
disabled debug output by default.)
* Fixed wrong header guard.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28463 a95241bf-73f2-0310-859d-f6bbb57e9c96
* ps2_dev.c - accidentally turned Synaptics support back on with my last commit. Sorry.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28460 a95241bf-73f2-0310-859d-f6bbb57e9c96
standard versus extended PS/2 mice by simplifying the naming
of the devices but forgetting to adapt this part of the code.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28458 a95241bf-73f2-0310-859d-f6bbb57e9c96
in UpdateSettings() to avoid a crash when there is no TouchPad at all.
Changes by myself: Adapted coding style and added a comment to ConnectToTouchPad()
on why the loop is not exited as soon as the device is found.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28457 a95241bf-73f2-0310-859d-f6bbb57e9c96
I am also not happy with the acceleration yet and as reported
by others, there are problems with real mice as well (now wheel
support anymore). With the plain PS/2 driver, I can slide my
finger slowly over the touchpad and the cursor would react/follow
precisely the movement. In Synaptics mode however, there are
unexpected pauses in the movement of the cursor. In any case, the
patch is finally in and I or anyone else can continue to work
on it.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28443 a95241bf-73f2-0310-859d-f6bbb57e9c96
patch wrongly. This should hopefully fix it. Only my coding style cleanup
history should be "lost" this way.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28426 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Hopefully fixed most of the coding style violations
* ps2_trackpoint.h had the wrong header guard
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28425 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Applied the changes that were done to MouseInputDevice:
- use BObjectList,
- take adventage of BPathMonitor node monitor message fieds
- remove the device in the polling thread upon ioctl() error
* Added TODOs about refactoring the code together with MouseInputDevice.
Untested, but the code is so similar, I am pretty confident it still works.
(famous last words... will test soon anyways)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28421 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Added myself to Mouse and Keyboard add-ons for my recent work on them.
* Small cleanup in KeyboardInputDevice.h-
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28420 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Implemented Synaptics touchpad support in the PS2 bus_manager by
refactoring/splitting the structure some and adding touchpad device
handling.
* Implemented Touchpad input_server device add-on
* Created Touchpad preflet for configuring advances Synaptics touchpad
options like scroll region (both horizontal and vertical) as well
as other neat stuff
Thanks a lot, Clemens!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28416 a95241bf-73f2-0310-859d-f6bbb57e9c96
problem in TextSearch. After the change, the scrollbar and child view layout
would be messed up there. The reason is that TextSearch calls
scrollview->ResizeToPreferred() prior to adding it to the window. In this
situation, the child views (scrollbars, target view) do not follow the parent
view. Before r28258, ResizeToPreferred() would not change the size of the
view (calling it in TextSearch is stupid anyways, since it is layouted later
in the code). I have thought about how to best fix this. I know 100% that there
is code out there that will mess with scrollbar layout. So it wouldn't be a
good option to refactor the layout out of BScrollView::DoLayout() and calling
that method from AttachedToWindow(), although that seems like the cleanest
option. Instead, I opted to simply reject resizing in ResizeToPreferred()
when the scroll view is not yet attached to a window. What do others think?
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28409 a95241bf-73f2-0310-859d-f6bbb57e9c96
acquire_sem_etc(), but treat it as an error instead. This allows
to kill device polling threads in the input_server and prevents
a busy loop in the kernel then. Before the input_server was shutting
down devices upon quit (happens only when restarting it), this
busy loop could also be observed, since then polling threads would
be quit on exit of the team.
* Supply B_INFINITE_TIMEOUT for the MouseDevice instead of 0. Does not
change anything, but was probably not intended.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28407 a95241bf-73f2-0310-859d-f6bbb57e9c96
layouted incorrectly:
* Only remove the insets if there are any when no tabview is needed.
* Use Bounds() when creating the scrollbars, not Frame() (this probably
worked correctly only when the DynamicScrollView was the only child in a
window...)
* Simplify layouting the scrollbars and target view, always do so, since it
isn't clear if the host window uses the old style view follow modes, the
target view had no follow mode anyways, so we need to layout it for sure.
* Correct the "edged in" effect of the TitleView drawing.
This fixes the bad drawing artifacts in the Media preflet when scrollbars
are needed to embed a larger parameter web view.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28394 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Slightly improved the wording on the Welcome page
* Corrected some wrong HTML tags here and there
* Improvements on the Bug Reports page
* Added paragraph on file panels on the general GUI page
* Added Filesytem Layout page
* Added Boot Loader page (kernel boot options)
* Added Keyboard Shortcuts page (also moved the paragraph about default command
key there)
* Prepared index pages for Applications, Preferences, Demos and Desktop Applets
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28389 a95241bf-73f2-0310-859d-f6bbb57e9c96
* The first problem was introduced by myself, when I added deleting the
transfer semaphore in HIDDevice::Close(). Obviously, I should (re)create it
in Open() then, or it won't work another time. (Open() is now the only place
where it's created.)
* The second problem was when transfers have already been scheduled the
last time the device was open, but never triggered yet. We need to reset the
fTransferUnprocessed flag, or we won't schedule another transfer but
wait on the transfer semaphore anyways in Control(). I also added
canceling the usb transfers with the stack in Close().
* The remaining problems were specific to the KeyboardDevice, the repeat
key stuff needs to be reset in Open(). I also added unsetting the repeat
key when the key release is detected, but this should have already worked,
because the semaphore timeout was reset to B_INFINITE_TIMEOUT.
One can now "/system/servers/input_server -q" and everything will be back
in working order. There may be some remaining problems in the Wacom driver
which I have not yet looked at.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28368 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Made KeyboardInputDevice more similar to MouseInputDevice, the object to
track individual keyboards has become the class KeyboardDevice. Moved
much functionality that used to be in KeyboardInputDevice into
KeyboardDevice.
Functionally, it should still be the same, but there are two important
changes:
- Each KeyboardDevice now has it's own Keymap. At first, it is not
visible by the user, since all KeyboardDevices still adopt the keymap
if the user reconfigures it. But it will make it easier to assign
individual keymaps to each attached keyboard (and perhaps associate them
with a vendor/product or some other means). The more immediate side effect
is that there is no longer a confusion about the keyboard locks. If
you press NumLock on your external keyboard, it will no longer enable
NumLock on your notebooks internal keyboard.
- KeyboardDevice now has a Stop() method, which it will call in it's
destructor. This will make sure that the control thread is cleanly
exited and does not end up invoking methods on a deleted object.
* Rewrote the tracing implementation in MouseInputDevice.cpp. At least it
helped track me down the following problem:
* Both KeyboardDevice and MouseDevice now set fActive to "false" *before*
closing the device. Since the control threads run at high priority, chances
are high that rescheduling happens as soon as the device unblocks in
ioctl() and returns an error. In that case, the control threads would
check fActive and it would still be "true" and the whole idea of bailing
out because we're already in Stop() would not work, causing a double free
in the end.
All of this is nice and more correct, but input_server is still crashing
when restarting it via "input_server -q"... :-(
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28352 a95241bf-73f2-0310-859d-f6bbb57e9c96
device returned B_OK.
* In the InputServer destructor, don't check the fAddOnManager pointer,
but check the success of calling Lock() on it instead, which should
be much safer.
* In StartStopDevices(), really start or stop all published devices for
the given BInputServerDevice, not only the first one found. Simplify
the check whether anything needs to be done.
* Change a bit the return codes of StartStopDevices(). Especially the
version that's supposed to start or stop all devices will still try
to do it for the rest of them.
* Removed no longer needed _FindInputDeviceListItem().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28351 a95241bf-73f2-0310-859d-f6bbb57e9c96
on it are unblocked and get an error.
* Make fOpen volatile to prevent unwanted caching effects when checking it from
different threads. (?)
* Check IsOpen() in the KeyboardDevice class in more acquire_sem_etc() return
cases, analogous to the MouseDevice class.
I am still getting a problem when relaunching input_server with the input_server
add-on thread that ioctl()s on a USB keyboard fd, which should have never fired
because it's a fake device from a KVM. After the first input_server instance is
gone, this thread keeps on busy looping in acquire_sem_etc()->switch_sem() from
within the ioctl() of the KeyboardDevice usb_hid driver. Still on it.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28350 a95241bf-73f2-0310-859d-f6bbb57e9c96
at 0. A single AddPath()+RemovePath() would therefore leave a not
anymore needed path_entry(), while a AddPath()+AddPath()+RemovePath()
would remove/delete the path_entry while it was actually still used.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28349 a95241bf-73f2-0310-859d-f6bbb57e9c96
resulted in the keyboard not working (at least on my Lenovo/IBM T60).
The device control thread could become aware of a dead device
at the time another thread (for example the add-on manager thread)
is already waiting for it. Then it tried to remove the device and
got stuck on locks that the other thread already holds (InputDeviceItem
list lock). Now the control threads check the "active" flag before
trying to remove the devices themselves, which, when set, is a sure
sign that the devices are already being removed and they don't need
to take care of it.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28342 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Various fixes and corrections
* Preparation for new sections
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28332 a95241bf-73f2-0310-859d-f6bbb57e9c96
* When the device watcher/control thread encounteres an error when
read()ing or ioctl()ing the device, don't just quit the thread and
leave a stale device add-on hanging there, but instead trigger
_RemoveDevice() to exit this cleanly. This also takes care of calling
_RemoveDevice() only from one thread. However, it adds a race condition
should a mouse or keyboard be unplugged and plugged at the same time.
I need to think about how to fix that cleanly, although the situation
may be theoretical only... This fix seems to fix another problem with
hot-plugging USB mice, before this change, the first mouse entry in
/dev/input/mouse/usb/ was never gone and I got two entries after unplugging
and replugging.
* When using BObjectList configured to own the entries - don't delete the
entries! Also don't call RemoveItem() before still using the item. Took
me all day to find this one, because the code looked so... correct. :-}
* In _AddDevice() call _RemoveDevice() just for the sake of it. It is really
important that no device with the same name is published twice. The PS/2
driver behaves strange in that it publishes device more than once, if
I understand correctly, until it decides that there is no device.
* Only StartMonitoringDevice() /after/ having performed the initial device
scan! Or else we may get ourselves confused. I don't know if this was
an actual problem, but the code was like that before and it seems saner
to me. Seeing there is no locking in the device add-on itself, we may
already enter the code from the node monitor thread.
This should fix#2894.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28321 a95241bf-73f2-0310-859d-f6bbb57e9c96
device path, but instead pointing to memory owned by some device addon
instance.
* Added TODO in the AddOnManager init code about a possible race condition
which I have not varified yet.
* Check the return code of BList::RemoveItem() before deleting the item...
pure defensive programming.
* For the time being, print a warning into the syslog when a device name is
registered twice.
* When failing to Unflatten() an event, don't continue in the code after
deleting it.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28319 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Use new(nothrow) to allocate the MethodReplicant.
* fSignature needs to be free()d, not deleted.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28318 a95241bf-73f2-0310-859d-f6bbb57e9c96
weird.
* Set fHandler to NULL in _UnregisterAddOns(), just in case it is called
twice (which it probably never is... but be defensive).
* If a B_NODE_MONITOR message does not contain all the necessary fields,
drop into the debugger when compiling in DEBUG mode.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28317 a95241bf-73f2-0310-859d-f6bbb57e9c96
devices that were removed. Should use the BPathMonitor anyways...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28315 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Fixed unloading the add-on image twice in error case of failing to
add the add-on info to the list.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28307 a95241bf-73f2-0310-859d-f6bbb57e9c96