[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

mjs mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:29:40 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit ceea48e0957b2ceb0fc8c4ae2cd19597a0e1f2a6
Author: mjs <mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Mar 14 07:17:22 2003 +0000

    WebCore:
    
            Reviewed by Trey.
    
    	- fixed 3188209 - REGRESSION: onmouseup handlers not running for most form elements
    
            * khtml/rendering/render_form.cpp:
            (RenderLineEdit::RenderLineEdit): Connect to clicked signal.
            (RenderFileButton::RenderFileButton): Likewise.
            (RenderFileButton::slotClicked): Send clicked through DOM.
            (RenderTextArea::RenderTextArea): Connect to clicked signal.
            * khtml/rendering/render_replaced.cpp:
            (RenderWidget::sendConsumedMouseUp): New method to send a
    	mouseUp event for this DOM element. Meant for up events consumed
    	by AppKit mouseDown: methods that use modal event loops.
            * khtml/rendering/render_replaced.h:
            * kwq/KWQButton.h:
            * kwq/KWQButton.mm:
            (-[KWQButton initWithQButton:]): Moved here from former adaptor class.
            (-[KWQButton action:]): Make sure to send up before click.
            (-[KWQButton mouseDown:]): Record that we are processing a mouse
    	event. If no click happened, send the missing up event.
            (QButton::QButton): Use NSButton subclass instead of separate adaptor.
            (QButton::~QButton): Likewise.
            * kwq/KWQFileButton.h:
            * kwq/KWQFileButton.mm:
            (KWQFileButton::KWQFileButton): Initialize clicked signal.
            (KWQFileButton::clicked): Emit clicked signal.
            (-[KWQFileButtonAdapter initWithKWQFileButton:]): Observe Clicked notification too.
            (-[KWQFileButtonAdapter clicked]): Send mouse up and click through DOM.
            * kwq/KWQLineEdit.h:
            * kwq/KWQLineEdit.mm:
            (QLineEdit::QLineEdit): Initialize clicked signal.
            (QLineEdit::clicked): Emit clicked signal.
            * kwq/KWQListBox.mm:
            (QListBox::QListBox): No longer use separate object as delegate and data source.
            (QListBox::~QListBox): No more need to retrieve and release delegate.
            (-[KWQTableView initWithListBox:items:]):
            (-[KWQTableView mouseDown:]): Record that we are processing a mouse
    	event; if no click happens while processing, send the mouse up event
    	through the DOM.
            (-[KWQTableView tableViewSelectionDidChange:]): If sending clicked
    	and processing a mouse event, send up first.
            * kwq/KWQTextArea.mm:
            (-[KWQTextAreaTextView mouseDown:]): Send up and click through DOM
    	after calling super.
            * kwq/KWQTextEdit.h:
            * kwq/KWQTextEdit.mm:
            (QTextEdit::QTextEdit): Initialize clicked signal.
            (QTextEdit::clicked): Emit clicked signal.
            * kwq/KWQTextField.mm:
            (-[KWQTextField setPasswordMode:]): initWithQLineEdit: instead of initWithQWidget:
            (-[KWQTextField fieldEditorDidMouseDown:]): Send up and click through DOM.
            (-[KWQSecureTextField initWithQLineEdit:]): Store QLineEdit*, not just QWidget*.
            (-[KWQSecureTextField fieldEditorDidMouseDown:]): Send up and click through DOM.
            * kwq/KWQWidget.h:
            * kwq/KWQWidget.mm:
    	(QWidget::sendConsumedMouseUp): Common method for widgets to send
    	a mouseUp that has been consumed by mouseDown processing through
    	the DOM.
            * kwq/WebCoreBridge.h:
            * kwq/WebCoreFirstResponderChanges.h:
            * kwq/WebCoreViewFactory.m:
            * WebCore.exp: Export new string constant.
            * WebCore-combined.exp: Regenerated.
    
    WebKit:
    
            Reviewed by Trey.
    
    	- fixed 3188209 - REGRESSION: onmouseup handlers not running for most form elements
    
            * WebCoreSupport.subproj/WebFileButton.m:
            (-[WebFileButton chooseButtonPressed:]): Send appropriate NSNotification.
            * WebView.subproj/WebHTMLViewPrivate.m:
            (-[WebNSTextView mouseDown:]): Call fieldEditorDidMouseDown: on
    	delegate, if implemented, after calling super.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@3830 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index b6651a7..ab01741 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,69 @@
+2003-03-13  Maciej Stachowiak  <mjs at apple.com>
+
+        Reviewed by Trey.
+
+	- fixed 3188209 - REGRESSION: onmouseup handlers not running for most form elements
+
+        * khtml/rendering/render_form.cpp:
+        (RenderLineEdit::RenderLineEdit): Connect to clicked signal.
+        (RenderFileButton::RenderFileButton): Likewise.
+        (RenderFileButton::slotClicked): Send clicked through DOM.
+        (RenderTextArea::RenderTextArea): Connect to clicked signal.
+        * khtml/rendering/render_replaced.cpp:
+        (RenderWidget::sendConsumedMouseUp): New method to send a
+	mouseUp event for this DOM element. Meant for up events consumed
+	by AppKit mouseDown: methods that use modal event loops.
+        * khtml/rendering/render_replaced.h:
+        * kwq/KWQButton.h:
+        * kwq/KWQButton.mm:
+        (-[KWQButton initWithQButton:]): Moved here from former adaptor class.
+        (-[KWQButton action:]): Make sure to send up before click.
+        (-[KWQButton mouseDown:]): Record that we are processing a mouse
+	event. If no click happened, send the missing up event.
+        (QButton::QButton): Use NSButton subclass instead of separate adaptor.
+        (QButton::~QButton): Likewise.
+        * kwq/KWQFileButton.h:
+        * kwq/KWQFileButton.mm:
+        (KWQFileButton::KWQFileButton): Initialize clicked signal.
+        (KWQFileButton::clicked): Emit clicked signal.
+        (-[KWQFileButtonAdapter initWithKWQFileButton:]): Observe Clicked notification too.
+        (-[KWQFileButtonAdapter clicked]): Send mouse up and click through DOM.
+        * kwq/KWQLineEdit.h:
+        * kwq/KWQLineEdit.mm:
+        (QLineEdit::QLineEdit): Initialize clicked signal.
+        (QLineEdit::clicked): Emit clicked signal.
+        * kwq/KWQListBox.mm:
+        (QListBox::QListBox): No longer use separate object as delegate and data source.
+        (QListBox::~QListBox): No more need to retrieve and release delegate.
+        (-[KWQTableView initWithListBox:items:]): 
+        (-[KWQTableView mouseDown:]): Record that we are processing a mouse
+	event; if no click happens while processing, send the mouse up event
+	through the DOM.
+        (-[KWQTableView tableViewSelectionDidChange:]): If sending clicked
+	and processing a mouse event, send up first.
+        * kwq/KWQTextArea.mm:
+        (-[KWQTextAreaTextView mouseDown:]): Send up and click through DOM
+	after calling super.
+        * kwq/KWQTextEdit.h:
+        * kwq/KWQTextEdit.mm:
+        (QTextEdit::QTextEdit): Initialize clicked signal.
+        (QTextEdit::clicked): Emit clicked signal.
+        * kwq/KWQTextField.mm:
+        (-[KWQTextField setPasswordMode:]): initWithQLineEdit: instead of initWithQWidget:
+        (-[KWQTextField fieldEditorDidMouseDown:]): Send up and click through DOM.
+        (-[KWQSecureTextField initWithQLineEdit:]): Store QLineEdit*, not just QWidget*.
+        (-[KWQSecureTextField fieldEditorDidMouseDown:]): Send up and click through DOM.
+        * kwq/KWQWidget.h:
+        * kwq/KWQWidget.mm:
+	(QWidget::sendConsumedMouseUp): Common method for widgets to send
+	a mouseUp that has been consumed by mouseDown processing through
+	the DOM.
+        * kwq/WebCoreBridge.h:
+        * kwq/WebCoreFirstResponderChanges.h:
+        * kwq/WebCoreViewFactory.m:
+        * WebCore.exp: Export new string constant.
+        * WebCore-combined.exp: Regenerated.
+
 2003-03-13  Richard Williamson   <rjw at apple.com>
 
         First stage of the WebController -> WebView, WebView -> WebFrameView.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index b6651a7..ab01741 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,69 @@
+2003-03-13  Maciej Stachowiak  <mjs at apple.com>
+
+        Reviewed by Trey.
+
+	- fixed 3188209 - REGRESSION: onmouseup handlers not running for most form elements
+
+        * khtml/rendering/render_form.cpp:
+        (RenderLineEdit::RenderLineEdit): Connect to clicked signal.
+        (RenderFileButton::RenderFileButton): Likewise.
+        (RenderFileButton::slotClicked): Send clicked through DOM.
+        (RenderTextArea::RenderTextArea): Connect to clicked signal.
+        * khtml/rendering/render_replaced.cpp:
+        (RenderWidget::sendConsumedMouseUp): New method to send a
+	mouseUp event for this DOM element. Meant for up events consumed
+	by AppKit mouseDown: methods that use modal event loops.
+        * khtml/rendering/render_replaced.h:
+        * kwq/KWQButton.h:
+        * kwq/KWQButton.mm:
+        (-[KWQButton initWithQButton:]): Moved here from former adaptor class.
+        (-[KWQButton action:]): Make sure to send up before click.
+        (-[KWQButton mouseDown:]): Record that we are processing a mouse
+	event. If no click happened, send the missing up event.
+        (QButton::QButton): Use NSButton subclass instead of separate adaptor.
+        (QButton::~QButton): Likewise.
+        * kwq/KWQFileButton.h:
+        * kwq/KWQFileButton.mm:
+        (KWQFileButton::KWQFileButton): Initialize clicked signal.
+        (KWQFileButton::clicked): Emit clicked signal.
+        (-[KWQFileButtonAdapter initWithKWQFileButton:]): Observe Clicked notification too.
+        (-[KWQFileButtonAdapter clicked]): Send mouse up and click through DOM.
+        * kwq/KWQLineEdit.h:
+        * kwq/KWQLineEdit.mm:
+        (QLineEdit::QLineEdit): Initialize clicked signal.
+        (QLineEdit::clicked): Emit clicked signal.
+        * kwq/KWQListBox.mm:
+        (QListBox::QListBox): No longer use separate object as delegate and data source.
+        (QListBox::~QListBox): No more need to retrieve and release delegate.
+        (-[KWQTableView initWithListBox:items:]): 
+        (-[KWQTableView mouseDown:]): Record that we are processing a mouse
+	event; if no click happens while processing, send the mouse up event
+	through the DOM.
+        (-[KWQTableView tableViewSelectionDidChange:]): If sending clicked
+	and processing a mouse event, send up first.
+        * kwq/KWQTextArea.mm:
+        (-[KWQTextAreaTextView mouseDown:]): Send up and click through DOM
+	after calling super.
+        * kwq/KWQTextEdit.h:
+        * kwq/KWQTextEdit.mm:
+        (QTextEdit::QTextEdit): Initialize clicked signal.
+        (QTextEdit::clicked): Emit clicked signal.
+        * kwq/KWQTextField.mm:
+        (-[KWQTextField setPasswordMode:]): initWithQLineEdit: instead of initWithQWidget:
+        (-[KWQTextField fieldEditorDidMouseDown:]): Send up and click through DOM.
+        (-[KWQSecureTextField initWithQLineEdit:]): Store QLineEdit*, not just QWidget*.
+        (-[KWQSecureTextField fieldEditorDidMouseDown:]): Send up and click through DOM.
+        * kwq/KWQWidget.h:
+        * kwq/KWQWidget.mm:
+	(QWidget::sendConsumedMouseUp): Common method for widgets to send
+	a mouseUp that has been consumed by mouseDown processing through
+	the DOM.
+        * kwq/WebCoreBridge.h:
+        * kwq/WebCoreFirstResponderChanges.h:
+        * kwq/WebCoreViewFactory.m:
+        * WebCore.exp: Export new string constant.
+        * WebCore-combined.exp: Regenerated.
+
 2003-03-13  Richard Williamson   <rjw at apple.com>
 
         First stage of the WebController -> WebView, WebView -> WebFrameView.
diff --git a/WebCore/WebCore-combined.exp b/WebCore/WebCore-combined.exp
index 3eaa334..2986d1c 100644
--- a/WebCore/WebCore-combined.exp
+++ b/WebCore/WebCore-combined.exp
@@ -10,6 +10,7 @@
 .objc_class_name_WebCoreTextRendererFactory
 .objc_class_name_WebCoreViewFactory
 _WebCoreFileButtonFilenameChanged
+_WebCoreFileButtonClicked
 _WebCoreUnicodeCategoryFunction
 _WebCoreUnicodeCombiningClassFunction
 _WebCoreUnicodeDecompositionTagFunction
diff --git a/WebCore/WebCore.exp b/WebCore/WebCore.exp
index d0db494..ee6851c 100644
--- a/WebCore/WebCore.exp
+++ b/WebCore/WebCore.exp
@@ -10,6 +10,7 @@
 .objc_class_name_WebCoreTextRendererFactory
 .objc_class_name_WebCoreViewFactory
 _WebCoreFileButtonFilenameChanged
+_WebCoreFileButtonClicked
 _WebCoreUnicodeCategoryFunction
 _WebCoreUnicodeCombiningClassFunction
 _WebCoreUnicodeDecompositionTagFunction
diff --git a/WebCore/khtml/rendering/render_form.cpp b/WebCore/khtml/rendering/render_form.cpp
index 4b209d1..251baef 100644
--- a/WebCore/khtml/rendering/render_form.cpp
+++ b/WebCore/khtml/rendering/render_form.cpp
@@ -440,6 +440,7 @@ RenderLineEdit::RenderLineEdit(HTMLInputElementImpl *element)
     LineEditWidget *edit = new LineEditWidget(view()->viewport());
     connect(edit,SIGNAL(returnPressed()), this, SLOT(slotReturnPressed()));
     connect(edit,SIGNAL(textChanged(const QString &)),this,SLOT(slotTextChanged(const QString &)));
+    connect(edit,SIGNAL(clicked()),this,SLOT(slotClicked()));
 
     if(element->inputType() == HTMLInputElementImpl::PASSWORD)
         edit->setEchoMode( QLineEdit::Password );
@@ -558,6 +559,7 @@ RenderFileButton::RenderFileButton(HTMLInputElementImpl *element)
 #if APPLE_CHANGES
     KWQFileButton *w = new KWQFileButton(view()->part());
     connect(w, SIGNAL(textChanged(const QString &)),this,SLOT(slotTextChanged(const QString &)));
+    connect(w, SIGNAL(clicked()), this, SLOT(slotClicked()));
     setQWidget(w);
 #else
     QHBox *w = new QHBox(view()->viewport());
@@ -616,7 +618,9 @@ void RenderFileButton::handleFocusOut()
 
 void RenderFileButton::slotClicked()
 {
-#if !APPLE_CHANGES
+#if APPLE_CHANGES
+    RenderFormElement::slotClicked();
+#else
     QString file_name = KFileDialog::getOpenFileName(QString::null, QString::null, 0, i18n("Browse..."));
     if (!file_name.isNull()) {
         element()->m_value = DOMString(file_name);
@@ -1128,6 +1132,7 @@ RenderTextArea::RenderTextArea(HTMLTextAreaElementImpl *element)
     setQWidget(edit);
 
     connect(edit,SIGNAL(textChanged()),this,SLOT(slotTextChanged()));
+    connect(edit,SIGNAL(clicked()),this,SLOT(slotClicked()));
 }
 
 RenderTextArea::~RenderTextArea()
diff --git a/WebCore/khtml/rendering/render_replaced.cpp b/WebCore/khtml/rendering/render_replaced.cpp
index d2c689c..3fb5b3a 100644
--- a/WebCore/khtml/rendering/render_replaced.cpp
+++ b/WebCore/khtml/rendering/render_replaced.cpp
@@ -209,6 +209,17 @@ void RenderWidget::layout( )
     setLayouted();
 }
 
+#if APPLE_CHANGES
+void RenderWidget::sendConsumedMouseUp(const QPoint &mousePos, int button, int state)
+{
+    RenderArena *arena = ref();
+    QMouseEvent e( QEvent::MouseButtonRelease, mousePos, button, state);
+
+    element()->dispatchMouseEvent(&e, EventImpl::MOUSEUP_EVENT, 0);
+    deref(arena);
+}
+#endif
+
 void RenderWidget::slotWidgetDestructed()
 {
     m_widget = 0;
diff --git a/WebCore/khtml/rendering/render_replaced.h b/WebCore/khtml/rendering/render_replaced.h
index 5c05c58..6187b65 100644
--- a/WebCore/khtml/rendering/render_replaced.h
+++ b/WebCore/khtml/rendering/render_replaced.h
@@ -83,6 +83,10 @@ public:
     RenderArena *ref() { _ref++; return renderArena(); }
     void deref(RenderArena *arena);
 
+#if APPLE_CHANGES 
+    void sendConsumedMouseUp(const QPoint &mousePos, int button, int state);
+#endif
+
 public slots:
     void slotWidgetDestructed();
 
diff --git a/WebCore/kwq/KWQButton.h b/WebCore/kwq/KWQButton.h
index fecb345..a665375 100644
--- a/WebCore/kwq/KWQButton.h
+++ b/WebCore/kwq/KWQButton.h
@@ -30,12 +30,6 @@
 #include "KWQString.h"
 #include "KWQSignal.h"
 
-#ifdef __OBJC__
- at class KWQButtonAdapter;
-#else
-class KWQButtonAdapter;
-#endif
-
 class QButton : public QWidget {
 public:
     QButton();
@@ -45,10 +39,9 @@ public:
     QString text() const;
     
     virtual void clicked();
-    
 private:
+    
     KWQSignal m_clicked;
-    KWQButtonAdapter *m_adapter;
 };
 
 #endif
diff --git a/WebCore/kwq/KWQButton.mm b/WebCore/kwq/KWQButton.mm
index b550cbb..eab61a6 100644
--- a/WebCore/kwq/KWQButton.mm
+++ b/WebCore/kwq/KWQButton.mm
@@ -27,23 +27,60 @@
 
 #import "KWQCheckBox.h"
 
- at interface KWQButtonAdapter : NSObject
+#import "render_form.h"
+
+ at interface KWQButton : NSButton
 {
     QButton *button;
+    BOOL processingMouseEvent;
+    BOOL clickedDuringMouseEvent;
 }
 
 - initWithQButton:(QButton *)b;
 - (void)action:(id)sender;
+ at end
+
+ at implementation KWQButton
+
+
+- initWithQButton:(QButton *)b
+{
+    button = b;
+    return [super init];
+}
+
+- (void)action:(id)sender
+{
+    if (processingMouseEvent) {
+	clickedDuringMouseEvent = true;
+	button->sendConsumedMouseUp();
+    } 
+
+    button->clicked();
+}
+
+-(void)mouseDown:(NSEvent *)event
+{
+    processingMouseEvent = true;
+    [super mouseDown:event];
+    processingMouseEvent = false;
+
+    if (clickedDuringMouseEvent) {
+	clickedDuringMouseEvent = false;
+    } else {
+	button->sendConsumedMouseUp();
+    }
+}
+
 
 @end
 
 QButton::QButton()
     : m_clicked(this, SIGNAL(clicked()))
-    , m_adapter([[KWQButtonAdapter alloc] initWithQButton:this])
 {
-    NSButton *button = [[NSButton alloc] init];
+    KWQButton *button = [[KWQButton alloc] initWithQButton:this];
     
-    [button setTarget:m_adapter];
+    [button setTarget:button];
     [button setAction:@selector(action:)];
 
     [button setTitle:@""];
@@ -59,7 +96,6 @@ QButton::~QButton()
 {
     NSButton *button = (NSButton *)getView();
     [button setTarget:nil];
-    [m_adapter release];
 }
 
 void QButton::setText(const QString &s)
@@ -79,17 +115,4 @@ void QButton::clicked()
     m_clicked.call();
 }
 
- at implementation KWQButtonAdapter
-
-- initWithQButton:(QButton *)b
-{
-    button = b;
-    return [super init];
-}
-
-- (void)action:(id)sender
-{
-    button->clicked();
-}
 
- at end
diff --git a/WebCore/kwq/KWQFileButton.h b/WebCore/kwq/KWQFileButton.h
index a742d5f..bbe0552 100644
--- a/WebCore/kwq/KWQFileButton.h
+++ b/WebCore/kwq/KWQFileButton.h
@@ -48,8 +48,10 @@ public:
     int baselinePosition() const;
     
     void filenameChanged();
+    void clicked();
 
 private:
+    KWQSignal _clicked;
     KWQSignal _textChanged;
     KWQFileButtonAdapter *_adapter;
 };
diff --git a/WebCore/kwq/KWQFileButton.mm b/WebCore/kwq/KWQFileButton.mm
index 2fe333e..06427b2 100644
--- a/WebCore/kwq/KWQFileButton.mm
+++ b/WebCore/kwq/KWQFileButton.mm
@@ -29,6 +29,10 @@
 #import "KWQKHTMLPart.h"
 #import "WebCoreBridge.h"
 
+NSString *WebCoreFileButtonFilenameChanged = @"WebCoreFileButtonFilenameChanged";
+NSString *WebCoreFileButtonClicked = @"WebCoreFileButtonClicked";
+
+
 @interface KWQFileButtonAdapter : NSObject
 {
     KWQFileButton *button;
@@ -40,6 +44,7 @@
 
 KWQFileButton::KWQFileButton(KHTMLPart *part)
     : QWidget([KWQ(part)->bridge() fileButton])
+    , _clicked(this, SIGNAL(clicked()))
     , _textChanged(this, SIGNAL(textChanged(const QString &)))
     , _adapter([[KWQFileButtonAdapter alloc] initWithKWQFileButton:this])
 {
@@ -83,6 +88,12 @@ void KWQFileButton::filenameChanged()
     _textChanged.call(QString::fromNSString([(NSView <WebCoreFileButton> *)getView() filename]));
 }
 
+void KWQFileButton::clicked()
+{
+    _clicked.call();
+}
+
+
 @implementation KWQFileButtonAdapter
 
 - initWithKWQFileButton:(KWQFileButton *)b
@@ -91,6 +102,8 @@ void KWQFileButton::filenameChanged()
     button = b;
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(filenameChanged:)
         name:WebCoreFileButtonFilenameChanged object:b->getView()];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(clicked:)
+        name:WebCoreFileButtonClicked object:b->getView()];
     return self;
 }
 
@@ -105,4 +118,10 @@ void KWQFileButton::filenameChanged()
     button->filenameChanged();
 }
 
+-(void)clicked:(NSNotification *)notification
+{
+    button->sendConsumedMouseUp();
+    button->clicked();
+}
+
 @end
diff --git a/WebCore/kwq/KWQLineEdit.h b/WebCore/kwq/KWQLineEdit.h
index 81a6a77..aee84ac 100644
--- a/WebCore/kwq/KWQLineEdit.h
+++ b/WebCore/kwq/KWQLineEdit.h
@@ -60,9 +60,11 @@ public:
     void returnPressed() { m_returnPressed.call(); }
     void textChanged() { m_textChanged.call(text()); }
 
+    void clicked();
 private:
     KWQSignal m_returnPressed;
     KWQSignal m_textChanged;
+    KWQSignal m_clicked;
 };
 
 #endif
diff --git a/WebCore/kwq/KWQLineEdit.mm b/WebCore/kwq/KWQLineEdit.mm
index 363c4f2..deea636 100644
--- a/WebCore/kwq/KWQLineEdit.mm
+++ b/WebCore/kwq/KWQLineEdit.mm
@@ -35,6 +35,7 @@
 QLineEdit::QLineEdit()
     : m_returnPressed(this, SIGNAL(returnPressed()))
     , m_textChanged(this, SIGNAL(textChanged(const QString &)))
+    , m_clicked(this, SIGNAL(clicked()))
 {
     NSView *view = [[KWQTextField alloc] initWithQLineEdit:this];
     setView(view);
@@ -154,3 +155,8 @@ int QLineEdit::baselinePosition() const
     return (int)ceil([[textField cell] drawingRectForBounds:bounds].origin.y - bounds.origin.y
         + [font defaultLineHeightForFont] + [font descender]);
 }
+
+void QLineEdit::clicked()
+{
+    m_clicked.call();
+}
diff --git a/WebCore/kwq/KWQListBox.mm b/WebCore/kwq/KWQListBox.mm
index f345339..c33a8cd 100644
--- a/WebCore/kwq/KWQListBox.mm
+++ b/WebCore/kwq/KWQListBox.mm
@@ -35,10 +35,12 @@
 }
 @end
 
- at interface KWQListBoxTableViewDelegate : NSObject
+ at interface KWQTableView : NSTableView
 {
     QListBox *_box;
     NSArray *_items;
+    BOOL processingMouseEvent;
+    BOOL clickedDuringMouseEvent;
 }
 - initWithListBox:(QListBox *)b items:(NSArray *)items;
 @end
@@ -59,25 +61,7 @@ QListBox::QListBox(QWidget *parent)
     [scrollView setHasVerticalScroller:YES];
     [[scrollView verticalScroller] setControlSize:NSSmallControlSize];
     
-    NSTableView *tableView = [[NSTableView alloc] init];
-    KWQListBoxTableViewDelegate *delegate = [[KWQListBoxTableViewDelegate alloc] initWithListBox:this items:_items];
-
-    NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:nil];
-
-    [column setEditable:NO];
-    [[column dataCell] setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
-
-    [tableView addTableColumn:column];
-
-    [column release];
-    
-    [tableView setAllowsMultipleSelection:NO];
-    [tableView setHeaderView:nil];
-    [tableView setIntercellSpacing:NSMakeSize(0, 0)];
-    [tableView setRowHeight:ceil([[column dataCell] cellSize].height)];
-    
-    [tableView setDataSource:delegate];
-    [tableView setDelegate:delegate];
+    KWQTableView *tableView = [[KWQTableView alloc] initWithListBox:this items:_items];
 
     [scrollView setDocumentView:tableView];
     [scrollView setVerticalLineScroll:[tableView rowHeight]];
@@ -92,10 +76,8 @@ QListBox::QListBox(QWidget *parent)
 QListBox::~QListBox()
 {
     NSTableView *tableView = [(NSScrollView *)getView() documentView];
-    KWQListBoxTableViewDelegate *delegate = [tableView delegate];
     [tableView setDelegate:nil];
     [tableView setDataSource:nil];
-    [delegate release];
     [_items release];
 }
 
@@ -247,16 +229,48 @@ QSize QListBox::sizeForNumberOfLines(int lines) const
 
 @end
 
- at implementation KWQListBoxTableViewDelegate
+ at implementation KWQTableView
 
 - initWithListBox:(QListBox *)b items:(NSArray *)i
 {
     [super init];
     _box = b;
     _items = i;
+
+    NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:nil];
+
+    [column setEditable:NO];
+    [[column dataCell] setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
+
+    [self addTableColumn:column];
+
+    [column release];
+    
+    [self setAllowsMultipleSelection:NO];
+    [self setHeaderView:nil];
+    [self setIntercellSpacing:NSMakeSize(0, 0)];
+    [self setRowHeight:ceil([[column dataCell] cellSize].height)];
+    
+    [self setDataSource:self];
+    [self setDelegate:self];
+
     return self;
 }
 
+-(void)mouseDown:(NSEvent *)event
+{
+    processingMouseEvent = TRUE;
+    [super mouseDown:event];
+    processingMouseEvent = FALSE;
+
+    if (clickedDuringMouseEvent) {
+	clickedDuringMouseEvent = false;
+    } else {
+	_box->sendConsumedMouseUp();
+    }
+}
+
+
 - (int)numberOfRowsInTableView:(NSTableView *)tableView
 {
     return [_items count];
@@ -271,6 +285,10 @@ QSize QListBox::sizeForNumberOfLines(int lines) const
 {
     _box->selectionChanged();
     if (!_box->changingSelection()) {
+	if (processingMouseEvent) {
+	    clickedDuringMouseEvent = true;
+	    _box->sendConsumedMouseUp();
+	}
         _box->clicked();
     }
 }
diff --git a/WebCore/kwq/KWQTextArea.mm b/WebCore/kwq/KWQTextArea.mm
index 6691918..8c199dd 100644
--- a/WebCore/kwq/KWQTextArea.mm
+++ b/WebCore/kwq/KWQTextArea.mm
@@ -562,6 +562,13 @@ static NSRange RangeOfParagraph(NSString *text, int paragraph)
     return widget;
 }
 
+- (void)mouseDown:(NSEvent *)event
+{
+    [super mouseDown:event];
+    widget->sendConsumedMouseUp();
+    widget->clicked();
+}
+
 @end
 
 @implementation NSView (KWQTextArea)
diff --git a/WebCore/kwq/KWQTextEdit.h b/WebCore/kwq/KWQTextEdit.h
index e683e60..42ad464 100644
--- a/WebCore/kwq/KWQTextEdit.h
+++ b/WebCore/kwq/KWQTextEdit.h
@@ -72,7 +72,9 @@ class QTextEdit : public QScrollView
 
     void setFont(const QFont &);
 
+    void clicked();
   private:
+    KWQSignal m_clicked;
     KWQSignal m_textChanged;
 };
 
diff --git a/WebCore/kwq/KWQTextEdit.mm b/WebCore/kwq/KWQTextEdit.mm
index c2ee8c1..60578ad 100644
--- a/WebCore/kwq/KWQTextEdit.mm
+++ b/WebCore/kwq/KWQTextEdit.mm
@@ -28,7 +28,8 @@
 #import "KWQTextArea.h"
 
 QTextEdit::QTextEdit(QWidget *parent)
-    : m_textChanged(this, SIGNAL(textChanged()))
+    : m_clicked(this, SIGNAL(clicked()))
+    , m_textChanged(this, SIGNAL(textChanged()))
 {
     KWQTextArea *textView = [[KWQTextArea alloc] initWithQTextEdit:this];
     setView(textView);
@@ -150,3 +151,8 @@ QWidget::FocusPolicy QTextEdit::focusPolicy() const
 {
     return TabFocus;
 }
+
+void QTextEdit::clicked()
+{
+    m_clicked.call();
+}
diff --git a/WebCore/kwq/KWQTextField.mm b/WebCore/kwq/KWQTextField.mm
index 5709872..2651483 100644
--- a/WebCore/kwq/KWQTextField.mm
+++ b/WebCore/kwq/KWQTextField.mm
@@ -50,12 +50,12 @@
 
 @interface KWQSecureTextField : NSSecureTextField <KWQWidgetHolder>
 {
-    QWidget *widget;
+    QLineEdit *widget;
     BOOL inSetFrameSize;
     BOOL inNextValidKeyView;
 }
 
-- initWithQWidget:(QWidget *)widget;
+- initWithQLineEdit:(QLineEdit *)widget;
 
 @end
 
@@ -128,7 +128,7 @@
         [secureField removeFromSuperview];
     } else {
         if (secureField == nil) {
-            secureField = [[KWQSecureTextField alloc] initWithQWidget:widget];
+            secureField = [[KWQSecureTextField alloc] initWithQLineEdit:widget];
             [secureField setFormatter:formatter];
             [secureField setFont:[self font]];
             [self setUpTextField:secureField];
@@ -339,6 +339,12 @@
     return widget;
 }
 
+- (void)fieldEditorDidMouseDown:(NSEvent *)event
+{
+    widget->sendConsumedMouseUp();
+    widget->clicked();
+}
+
 @end
 
 @implementation KWQTextFieldFormatter
@@ -390,7 +396,7 @@
 
 @implementation KWQSecureTextField
 
-- initWithQWidget:(QWidget *)w
+- initWithQLineEdit:(QLineEdit *)w
 {
     widget = w;
     return [super init];
@@ -473,4 +479,10 @@
     return widget;
 }
 
+- (void)fieldEditorDidMouseDown:(NSEvent *)event
+{
+    widget->sendConsumedMouseUp();
+    widget->clicked();
+}
+
 @end
diff --git a/WebCore/kwq/KWQWidget.h b/WebCore/kwq/KWQWidget.h
index d82e22c..1b32540 100644
--- a/WebCore/kwq/KWQWidget.h
+++ b/WebCore/kwq/KWQWidget.h
@@ -153,6 +153,8 @@ public:
     void disableFlushDrawing();
     void setDrawingAlpha(float alpha);
 
+    void sendConsumedMouseUp();
+
 private:
     QWidgetPrivate *data;
 };
diff --git a/WebCore/kwq/KWQWidget.mm b/WebCore/kwq/KWQWidget.mm
index 4753f85..c59c7fa 100644
--- a/WebCore/kwq/KWQWidget.mm
+++ b/WebCore/kwq/KWQWidget.mm
@@ -432,3 +432,15 @@ void QWidget::paint(QPainter *p, const QRect &r)
     NSView *view = getOuterView();
     [view displayRectIgnoringOpacity:[view convertRect:r fromView:[view superview]]];
 }
+
+
+
+void QWidget::sendConsumedMouseUp()
+{
+    khtml::RenderWidget *widget = const_cast<khtml::RenderWidget *>
+	(static_cast<const khtml::RenderWidget *>(eventFilterObject()));
+
+    widget->sendConsumedMouseUp(QPoint([[NSApp currentEvent] locationInWindow]),
+			      // FIXME: should send real state and button
+			      0, 0);
+}
diff --git a/WebCore/kwq/WebCoreBridge.h b/WebCore/kwq/WebCoreBridge.h
index c088c89..706ff00 100644
--- a/WebCore/kwq/WebCoreBridge.h
+++ b/WebCore/kwq/WebCoreBridge.h
@@ -329,3 +329,4 @@ enum FrameBorderStyle {
 @end
 
 extern NSString *WebCoreFileButtonFilenameChanged;
+extern NSString *WebCoreFileButtonClicked;
diff --git a/WebCore/kwq/WebCoreFirstResponderChanges.h b/WebCore/kwq/WebCoreFirstResponderChanges.h
index 0e30430..aa9a035 100644
--- a/WebCore/kwq/WebCoreFirstResponderChanges.h
+++ b/WebCore/kwq/WebCoreFirstResponderChanges.h
@@ -26,9 +26,11 @@
 #import <Foundation/Foundation.h>
 
 // The WebCore client must arrange to call these methods when a text
-// field's field editor becomes or resigns first responder.
+// field's field editor becomes or resigns first responder, and before
+// and after it process a mouseDown: event.
 
- at interface NSObject (WebCoreFirstResponderChanges)
+ at interface NSObject (WebCoreFieldDelegate)
 - (void)fieldEditorWillBecomeFirstResponder;
 - (void)fieldEditorWillResignFirstResponder;
+- (void)fieldEditorDidMouseDown:(NSEvent *)event;
 @end
diff --git a/WebCore/kwq/WebCoreViewFactory.m b/WebCore/kwq/WebCoreViewFactory.m
index e6a3c8a..1be3e94 100644
--- a/WebCore/kwq/WebCoreViewFactory.m
+++ b/WebCore/kwq/WebCoreViewFactory.m
@@ -26,8 +26,6 @@
 #import "WebCoreViewFactory.h"
 #import "KWQAssertions.h"
 
-NSString *WebCoreFileButtonFilenameChanged = @"WebCoreFileButtonFilenameChanged";
-
 @implementation WebCoreViewFactory
 
 static WebCoreViewFactory *sharedFactory;
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index bb2fa56..7b62f9b 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,15 @@
+2003-03-13  Maciej Stachowiak  <mjs at apple.com>
+
+        Reviewed by Trey.
+
+	- fixed 3188209 - REGRESSION: onmouseup handlers not running for most form elements
+
+        * WebCoreSupport.subproj/WebFileButton.m:
+        (-[WebFileButton chooseButtonPressed:]): Send appropriate NSNotification. 
+        * WebView.subproj/WebHTMLViewPrivate.m:
+        (-[WebNSTextView mouseDown:]): Call fieldEditorDidMouseDown: on
+	delegate, if implemented, after calling super.
+
 2003-03-13  Richard Williamson   <rjw at apple.com>
 
         First stage of the WebController -> WebView, WebView -> WebFrameView.
diff --git a/WebKit/WebCoreSupport.subproj/WebFileButton.m b/WebKit/WebCoreSupport.subproj/WebFileButton.m
index a46b57b..e013511 100644
--- a/WebKit/WebCoreSupport.subproj/WebFileButton.m
+++ b/WebKit/WebCoreSupport.subproj/WebFileButton.m
@@ -219,6 +219,7 @@
 
 - (void)chooseButtonPressed:(id)sender
 {
+    [[NSNotificationCenter defaultCenter] postNotificationName:WebCoreFileButtonClicked object:self];
     [self beginSheet];
 }
 
diff --git a/WebKit/WebView.subproj/WebHTMLViewPrivate.m b/WebKit/WebView.subproj/WebHTMLViewPrivate.m
index 0ccc07f..80cc24d 100644
--- a/WebKit/WebView.subproj/WebHTMLViewPrivate.m
+++ b/WebKit/WebView.subproj/WebHTMLViewPrivate.m
@@ -687,6 +687,16 @@ static BOOL inNSTextViewDrawRect;
     return become;
 }
 
+-(void)mouseDown:(NSEvent *)event
+{
+    NSView *possibleContainingField = [self delegate];
+
+    [super mouseDown:event];
+    if ([possibleContainingField respondsToSelector:@selector(fieldEditorDidMouseDown:)]) {
+	[possibleContainingField fieldEditorDidMouseDown:event];
+    }
+}
+
 @end
 
 @implementation WebNSView

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list