+2011-09-22 Ryosuke Niwa <rniwa@webkit.org>
+
+ Revert r95673 since it caused hundreds of tests to fail on Leopard / Snow Leopard.
+
+ * page/mac/EventHandlerMac.mm:
+ (WebCore::EventHandler::passMouseDownEventToWidget):
+ * platform/Widget.h:
+ * platform/mac/WidgetMac.mm:
+ (WebCore::Widget::Widget):
+ (WebCore::Widget::removeFromSuperview):
+ (WebCore::Widget::beforeMouseDown):
+ (WebCore::Widget::afterMouseDown):
+ * rendering/RenderWidget.cpp:
+
2011-09-22 David Hyatt <hyatt@apple.com>
https://bugs.webkit.org/show_bug.cgi?id=68638
ASSERT(!m_sendingEventToSubview);
m_sendingEventToSubview = true;
+ NSView *outerView = widget->getOuterView();
+ widget->beforeMouseDown(outerView, widget.get());
RenderWidget::suspendWidgetHierarchyUpdates();
[view mouseDown:currentNSEvent()];
RenderWidget::resumeWidgetHierarchyUpdates();
+
+ widget->afterMouseDown(outerView, widget.get());
+ m_sendingEventToSubview = false;
if (!wasDeferringLoading)
page->setDefersLoading(false);
{
}
+ bool mustStayInWindow;
+ bool removeFromSuperviewSoon;
NSRect previousVisibleRect;
};
: m_data(new WidgetPrivate)
{
init(view);
+ m_data->mustStayInWindow = false;
+ m_data->removeFromSuperviewSoon = false;
}
Widget::~Widget()
void Widget::removeFromSuperview()
{
- BEGIN_BLOCK_OBJC_EXCEPTIONS;
- safeRemoveFromSuperview(getOuterView());
- END_BLOCK_OBJC_EXCEPTIONS;
+ if (m_data->mustStayInWindow)
+ m_data->removeFromSuperviewSoon = true;
+ else {
+ m_data->removeFromSuperviewSoon = false;
+ BEGIN_BLOCK_OBJC_EXCEPTIONS;
+ safeRemoveFromSuperview(getOuterView());
+ END_BLOCK_OBJC_EXCEPTIONS;
+ }
+}
+
+void Widget::beforeMouseDown(NSView *unusedView, Widget* widget)
+{
+ if (widget) {
+ ASSERT_UNUSED(unusedView, unusedView == widget->getOuterView());
+ ASSERT(!widget->m_data->mustStayInWindow);
+ widget->m_data->mustStayInWindow = true;
+ }
+}
+
+void Widget::afterMouseDown(NSView *view, Widget* widget)
+{
+ if (!widget) {
+ BEGIN_BLOCK_OBJC_EXCEPTIONS;
+ safeRemoveFromSuperview(view);
+ END_BLOCK_OBJC_EXCEPTIONS;
+ } else {
+ ASSERT(widget->m_data->mustStayInWindow);
+ widget->m_data->mustStayInWindow = false;
+ if (widget->m_data->removeFromSuperviewSoon)
+ widget->removeFromSuperview();
+ }
}
// These are here to deal with flipped coords on Mac.