From f24f8543ae1407f23b71796b2a10318ba0e587d8 Mon Sep 17 00:00:00 2001 From: Gerhard Roethlin Date: Wed, 19 Sep 2012 13:16:12 +0200 Subject: [PATCH] float->int error in OS X Mouse Event Handling NSEvent for mouse events contain the mouse position in floating point numbers. This value is truncated/floored for mouse clicks. Qt instead rounds that value, so mouse move events can get positions that are slightly off sometimes. --- src/gui/kernel/qt_cocoa_helpers_mac.mm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index 99004bb..77812c8 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -1057,7 +1057,9 @@ QWidget *qt_mac_getTargetForMouseEvent( { Q_UNUSED(event); NSPoint nsglobalpoint = event ? [[event window] convertBaseToScreen:[event locationInWindow]] : [NSEvent mouseLocation]; - returnGlobalPoint = flipPoint(nsglobalpoint).toPoint(); + QPointF globalPointF = flipPoint(nsglobalpoint); + // Always truncate to convert to integer, same as Cocoa does for clicks + returnGlobalPoint = QPoint(globalPointF.x(), globalPointF.y()); QWidget *mouseGrabber = QWidget::mouseGrabber(); bool buttonDownNotBlockedByModal = qt_button_down && !QApplicationPrivate::isBlockedByModal(qt_button_down); QWidget *popup = QApplication::activePopupWidget(); @@ -1634,7 +1636,7 @@ void qt_mac_menu_collapseSeparators(void */*NSMenu **/ theMenu, bool collapse) if (collapse) { bool previousIsSeparator = true; // setting to true kills all the separators placed at the top. NSMenuItem *previousItem = nil; - + NSArray *itemArray = [menu itemArray]; for (unsigned int i = 0; i < [itemArray count]; ++i) { NSMenuItem *item = reinterpret_cast([itemArray objectAtIndex:i]); -- 1.7.12.363.g53284de