From 464aca712fec2d1d0db5200721e5acc0529e6a0b Mon Sep 17 00:00:00 2001 From: stippi Date: Sat, 1 May 2010 18:07:40 +0000 Subject: [PATCH] Fix a bug with closing tabs by pressing the tertiary mouse button. fMouseDown would be true, but the fLastMouseEventTab would have been reset when removing the tab. Rather than fixing this problem, behave the same as Firefox and close the tab on mouse up (when the mouse is still over the tab, which allows the user a way back out). Avoids the above problem as a side effect. git-svn-id: http://svn.haiku-os.org/webpositive/webkit/trunk@469 94f232f2-1747-11df-bad5-a5bfde151594 --- .../webpositive/tabview/TabContainerView.cpp | 2 +- src/apps/webpositive/tabview/TabManager.cpp | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/apps/webpositive/tabview/TabContainerView.cpp b/src/apps/webpositive/tabview/TabContainerView.cpp index a4c26ddb2d..6f502b2850 100644 --- a/src/apps/webpositive/tabview/TabContainerView.cpp +++ b/src/apps/webpositive/tabview/TabContainerView.cpp @@ -440,7 +440,7 @@ TabContainerView::_MouseMoved(BPoint where, uint32 _transit, return; } - if (fLastMouseEventTab && fLastMouseEventTab == tab) + if (fLastMouseEventTab != NULL && fLastMouseEventTab == tab) fLastMouseEventTab->MouseMoved(where, B_INSIDE_VIEW, dragMessage); else { if (fLastMouseEventTab) diff --git a/src/apps/webpositive/tabview/TabManager.cpp b/src/apps/webpositive/tabview/TabManager.cpp index 814496e582..bdde273b04 100644 --- a/src/apps/webpositive/tabview/TabManager.cpp +++ b/src/apps/webpositive/tabview/TabManager.cpp @@ -366,6 +366,7 @@ private: TabManagerController* fController; bool fOverCloseRect; bool fClicked; + bool fCloseOnMouseUp; }; @@ -375,7 +376,8 @@ WebTabView::WebTabView(TabManagerController* controller) fIcon(NULL), fController(controller), fOverCloseRect(false), - fClicked(false) + fClicked(false), + fCloseOnMouseUp(false) { } @@ -449,7 +451,7 @@ void WebTabView::MouseDown(BPoint where, uint32 buttons) { if (buttons & B_TERTIARY_MOUSE_BUTTON) { - fController->CloseTab(ContainerView()->IndexOf(this)); + fCloseOnMouseUp = true; return; } @@ -467,12 +469,20 @@ WebTabView::MouseDown(BPoint where, uint32 buttons) void WebTabView::MouseUp(BPoint where) { - if (!fClicked) { + if (!fClicked && !fCloseOnMouseUp) { TabView::MouseUp(where); return; } + if (fCloseOnMouseUp && Frame().Contains(where)) { + fCloseOnMouseUp = false; + fController->CloseTab(ContainerView()->IndexOf(this)); + // Probably this object is toast now, better return here. + return; + } + fClicked = false; + fCloseOnMouseUp = false; if (_CloseRectFrame(Frame()).Contains(where)) fController->CloseTab(ContainerView()->IndexOf(this));