Reviewed by Hyatt.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Dec 2004 02:26:24 +0000 (02:26 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Dec 2004 02:26:24 +0000 (02:26 +0000)
- fixed <rdar://problem/3906974> assertion failure in QWidget::beforeMouseDown clicking on <select multiple>

* kwq/KWQListBox.mm:
        (QListBox::QListBox): Initialize KWQListBoxScrollView with this.
        (-[KWQListBoxScrollView initWithListBox:]): Make this class a KWQWidgetHolder.
        (-[KWQListBoxScrollView widget]): See above.
        (-[KWQTableView mouseDown:]): Pass outerView rather than self to beforeMouseDown and
afterMouseDown, to avoid triggering an assertion failure.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8143 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/kwq/KWQListBox.mm

index c0285ef3aa943b18676e7bb067a9c2a60f33df4c..e1c38ca1362f04c89cc9a1f68b6293e4000a4304 100644 (file)
@@ -1,3 +1,16 @@
+2004-12-06  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Hyatt.
+
+       - fixed <rdar://problem/3906974> assertion failure in QWidget::beforeMouseDown clicking on <select multiple>
+        
+       * kwq/KWQListBox.mm:
+        (QListBox::QListBox): Initialize KWQListBoxScrollView with this.
+        (-[KWQListBoxScrollView initWithListBox:]): Make this class a KWQWidgetHolder.
+        (-[KWQListBoxScrollView widget]): See above.
+        (-[KWQTableView mouseDown:]): Pass outerView rather than self to beforeMouseDown and
+       afterMouseDown, to avoid triggering an assertion failure.
+
 2004-12-06  David Hyatt  <hyatt@apple.com>
 
        Fix for 3615411, the linesAppended optimization was old and broken, and it's easier with the new code fixes
 2004-12-06  David Hyatt  <hyatt@apple.com>
 
        Fix for 3615411, the linesAppended optimization was old and broken, and it's easier with the new code fixes
index 17277deb5be06a45be6967b048a8fe74cc95d51c..e27a7105a045ebd1b2d33170db5d1ed2af87bcf1 100644 (file)
@@ -44,7 +44,10 @@ const float bottomMargin = 1;
 const float leftMargin = 2;
 const float rightMargin = 2;
 
 const float leftMargin = 2;
 const float rightMargin = 2;
 
-@interface KWQListBoxScrollView : WebCoreScrollView
+@interface KWQListBoxScrollView : WebCoreScrollView <KWQWidgetHolder>
+{
+    QListBox *_box;
+}
 @end
 
 @interface KWQTableView : NSTableView <KWQWidgetHolder>
 @end
 
 @interface KWQTableView : NSTableView <KWQWidgetHolder>
@@ -124,7 +127,7 @@ QListBox::QListBox(QWidget *parent)
 {
     KWQ_BLOCK_EXCEPTIONS;
 
 {
     KWQ_BLOCK_EXCEPTIONS;
 
-    NSScrollView *scrollView = [[KWQListBoxScrollView alloc] init];
+    NSScrollView *scrollView = [[KWQListBoxScrollView alloc] initWithListBox:this];
     setView(scrollView);
     [scrollView release];
     
     setView(scrollView);
     [scrollView release];
     
@@ -348,6 +351,20 @@ void QListBox::clearCachedTextRenderers()
 
 @implementation KWQListBoxScrollView
 
 
 @implementation KWQListBoxScrollView
 
+- (id)initWithListBox:(QListBox *)b
+{
+    if (!(self = [super init]))
+        return nil;
+
+    _box = b;
+    return self;
+}
+
+- (QWidget *)widget
+{
+    return _box;
+}
+
 - (void)setFrameSize:(NSSize)size
 {
     [super setFrameSize:size];
 - (void)setFrameSize:(NSSize)size
 {
     [super setFrameSize:size];
@@ -404,9 +421,11 @@ void QListBox::clearCachedTextRenderers()
 - (void)mouseDown:(NSEvent *)event
 {
     processingMouseEvent = YES;
 - (void)mouseDown:(NSEvent *)event
 {
     processingMouseEvent = YES;
-    QWidget::beforeMouseDown(self);
+    NSView *outerView = [_box->getOuterView() retain];
+    QWidget::beforeMouseDown(outerView);
     [super mouseDown:event];
     [super mouseDown:event];
-    QWidget::afterMouseDown(self);
+    QWidget::afterMouseDown(outerView);
+    [outerView release];
     processingMouseEvent = NO;
 
     if (clickedDuringMouseEvent) {
     processingMouseEvent = NO;
 
     if (clickedDuringMouseEvent) {