[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