diff options
author | Richard Moe Gustavsen <richard.gustavsen@nokia.com> | 2009-05-06 09:11:32 (GMT) |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@nokia.com> | 2009-05-06 09:24:30 (GMT) |
commit | 6ba793ea76e72332786ee90022ee169fca311446 (patch) | |
tree | ecaef6afb0abb3b6b17c532121498a171cf7fefb | |
parent | 384869482e2481685dd409208f583a1acc77bcc8 (diff) | |
download | Qt-6ba793ea76e72332786ee90022ee169fca311446.zip Qt-6ba793ea76e72332786ee90022ee169fca311446.tar.gz Qt-6ba793ea76e72332786ee90022ee169fca311446.tar.bz2 |
QComboBox: Click-drag-release does not work for combo boxes using Cocoa
The problem is that the mouse event was redirected to the active
pop-up, while it should have been redirected to the widget under
the mouse under the active popup. This patch does the correct
redirection
Task-number: 252259
Reviewed-by: Trenton Schulz
-rw-r--r-- | src/gui/kernel/qt_cocoa_helpers_mac.mm | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index f000292..9165836 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -826,13 +826,28 @@ bool qt_mac_handleMouseEvent(void * /* NSView * */view, void * /* NSEvent * */ev QWidget *qwidget = [theView qt_qwidget]; QWidget *widgetToGetMouse = qwidget; QWidget *popup = qAppInstance()->activePopupWidget(); - if (popup && popup != qwidget->window()) - widgetToGetMouse = popup; NSView *tmpView = theView; - if (widgetToGetMouse != qwidget) { - tmpView = qt_mac_nativeview_for(widgetToGetMouse); + + if (popup && popup != qwidget->window()) { + widgetToGetMouse = popup; + tmpView = qt_mac_nativeview_for(popup); windowPoint = [[tmpView window] convertScreenToBase:globalPoint]; + + QPoint qWindowPoint(windowPoint.x, windowPoint.y); + if (widgetToGetMouse->rect().contains(qWindowPoint)) { + // Keeping the mouse pressed on a combobox button will make + // the popup pop in front of the mouse. But all mouse events + // will be sendt to the button. Since we want mouse events + // to be sendt to widgets inside the popup, we search for the + // widget in front of the mouse: + tmpView = [tmpView hitTest:windowPoint]; + if (!tmpView) + return false; + widgetToGetMouse = + [static_cast<QT_MANGLE_NAMESPACE(QCocoaView) *>(tmpView) qt_qwidget]; + } } + NSPoint localPoint = [tmpView convertPoint:windowPoint fromView:nil]; QPoint qlocalPoint(localPoint.x, localPoint.y); |