Opened 5 years ago
Last modified 4 years ago
#15778 new bug
GetMouse with checkMessageQueue is not working properly
Reported by: | X512 | Owned by: | nobody |
---|---|---|---|
Priority: | normal | Milestone: | Unscheduled |
Component: | Kits/Interface Kit | Version: | R1/Development |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Platform: | All |
Description
This hrev53937.
When running NetPositive with https://review.haiku-os.org/c/haiku/+/2284 applied (it have better comatibility with BeOS applications), and opening context menu, it is not possible to close context menu anymore. After adding debug output I found that BView::GetMouse
is returning wrong values when checkMessageQueue
is used. In some cases values are not updated at all. When setting checkMessageQueue
to false
in beginning of BView::GetMouse
, context menu of NetPositive start to work properly.
Change History (4)
comment:1 by , 5 years ago
comment:2 by , 4 years ago
This problem also seems to cause Pe freeze sometimes.
Frame IP Function Name ----------------------------------------------- 00000000 0xf1e9a98fe2 _kern_snooze_etc + 0xa 0x7f27ed7a5cb0 0x20771918c43 PText::MouseDown(BPoint) + 0x4b3 0x7f27ed7a5e40 0x1549dc03c04 BView::MessageReceived(BMessage*) + 0x314 0x7f27ed7a6060 0x2077191ba22 PText::MessageReceived(BMessage*) + 0xfa2 0x7f27ed7a6290 0x1549dc0cc4e BWindow::DispatchMessage(BMessage*, BHandler*) + 0xb3e 0x7f27ed7a62f0 0x207718f7ce6 PDoc::DispatchMessage(BMessage*, BHandler*) + 0x46 0x7f27ed7a6380 0x1549dc0829b BWindow::task_looper() + 0x1bb 0x7f27ed7a63a0 0x1549db4b24b BLooper::_task0_(void*) + 0x1b 0x7f27ed7a63c0 0xf1e9a97fe7 thread_entry + 0x17 00000000 0x7fbbd6694260 commpage_thread_exit + 0
comment:3 by , 4 years ago
This but is also causing Pe freeze sometimes. Pe use polling loops with GetMouse
, for example PText.cpp:2113 and that loops are never exit sometimes because GetMouse
stop updating values and never return all mouse buttons released.
comment:4 by , 4 years ago
This bug start to getting annoying when working on RISC-V port. It require to terminate Pe when it freeze in GetMouse()
loop, causing closing all windows and possible loss of changes.
We have changed the way pointer history works in Haiku, views need to specify B_FULL_POINTER_HISTORY if they want that. In BeOS this was the default and views needed to specify B_NO_POINTER_HISTORY if they did want the OS to merge mouse events together. This is possibly related.