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));