Opened 15 years ago
Last modified 8 years ago
#5156 assigned bug
Issue with mouse up and mouse down messages
Reported by: | mmadia | Owned by: | nobody |
---|---|---|---|
Priority: | normal | Milestone: | R1 |
Component: | Applications/Workspaces | Version: | R1/Development |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Platform: | All |
Description
hrev34679 gcc2hybrid
To replicate:
- Open Workspaces (either as an application or replicant)
- Move the mouse cursor into Workspaces's area.
- Click and hold the left mouse button down, as the mouse is moved around the individual Workspaces rectangles will gain and lose a 'hover while mouse down highlight'.
- With the mouse button still pressed down, move the mouse outside of Workspaces's area.
- Release the mouse button, the last Workspaces rectangle will still retain that highlight.
- Now reverse the process: Click and hold the mouse button while outside Workspaces, move the mouse into Workspaces, hover over any rectangle, & release the mouse button. Workspaces will gobble this mouse up and switch workspaces.
- Lastly, repeat the last step once more. This time, since there Workspaces will not have a rectangle with 'hover while mouse down highlight', it will not gobble the mouse up nor switch workspaces
Change History (2)
comment:1 by , 12 years ago
comment:2 by , 8 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
Note:
See TracTickets
for help on using tickets.
I've tested and reproduced this, and know why it is caused. It is due to the WorkspacesView inside app_server not tracking the mouse outside its frame like it should. It needs to use the app_server equivalent of the BView::SetMouseEventMask method on MouseDown. Right now there isn't really an easy equivalent, which is why I have not fixed it.
I tried calling AddTemporaryListener on the EventDispatcher but it does not work as I expect. Any mouse moves or a mouse up outside the view are never sent to it. I think this is because the only way mouse messages get to the Window class inside app_server is through the MouseFilter inside the Desktop class. And in that case the mouse related messages in Window try to find the view under the mouse and only sends the messages if a view is there. Which of course never works when the mouse moves outside the Workspaces window.
What is funny is this still happens even when the Autoraise feature is turned on, which causes all mouse moves to go to the Workspaces window. But these never make it to the WorkspacesView inside app_server when the mouse is outside the window frame.
In fact I'm not sure it is possible to fix this with the current app_server design. But I'm no expert on the somewhat convoluted mouse handling, even after several hours of looking at it.