diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index f184174f3..0586d2940 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -3013,7 +3013,9 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa case WM_LBUTTONDBLCLK: { - ::SendMessage(hwnd, WM_COMMAND, IDM_FILE_NEW, 0); + DocTabView* curTabView = (currentView() == MAIN_VIEW) ? &_mainDocTab : &_subDocTab; + ::SendMessage(curTabView->getHSelf(), WM_LBUTTONDBLCLK, wParam, lParam); + return TRUE; } diff --git a/PowerEditor/src/WinControls/SplitterContainer/SplitterContainer.cpp b/PowerEditor/src/WinControls/SplitterContainer/SplitterContainer.cpp index acbba96c1..b88acc484 100644 --- a/PowerEditor/src/WinControls/SplitterContainer/SplitterContainer.cpp +++ b/PowerEditor/src/WinControls/SplitterContainer/SplitterContainer.cpp @@ -316,7 +316,7 @@ LRESULT SplitterContainer::runProc(UINT message, WPARAM wParam, LPARAM lParam) : (pt.y < 0 ? _pWin0 : _pWin1); ::SendMessage(parent, NPPM_INTERNAL_SWITCHVIEWFROMHWND, 0, reinterpret_cast(targetWindow->getHSelf())); - ::SendMessage(parent, WM_COMMAND, IDM_FILE_NEW, 0); + ::SendMessage(parent, WM_LBUTTONDBLCLK, wParam, lParam); return TRUE; } diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.cpp b/PowerEditor/src/WinControls/TabBar/TabBar.cpp index 1c2a97fbf..037b53356 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.cpp +++ b/PowerEditor/src/WinControls/TabBar/TabBar.cpp @@ -1175,14 +1175,35 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara case WM_LBUTTONDBLCLK: { - bool isDbClk2Close = NppParameters::getInstance().getNppGUI()._tabStatus & TAB_DBCLK2CLOSE; - if (isDbClk2Close) + NppParameters& nppParam = NppParameters::getInstance(); + NppGUI& nppGUI = nppParam.getNppGUI(); + + bool isVertical = nppGUI._tabStatus & TAB_VERTICAL; + bool isDbClk2Close = nppGUI._tabStatus & TAB_DBCLK2CLOSE; + + int xPos = LOWORD(lParam); + int yPos = HIWORD(lParam); + int currentTabOn = getTabIndexAt(xPos, yPos); + + if (currentTabOn != -1) { - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - int currentTabOn = getTabIndexAt(xPos, yPos); - notify(TCN_TABDELETE, currentTabOn); + if (isDbClk2Close) + notify(TCN_TABDELETE, currentTabOn); } + else + { + POINT pt{}; + GetCursorPos(&pt); + + RECT rcLastTab{}; + TabCtrl_GetItemRect(_hSelf, static_cast(TabCtrl_GetItemCount(_hSelf)) - 1, &rcLastTab); + ClientRectToScreenRect(_hSelf, &rcLastTab); + + bool isDbClickOnTabStrip = isVertical ? (pt.x < rcLastTab.right) : (pt.y < rcLastTab.bottom); + if (isDbClickOnTabStrip) + ::SendMessage(_hParent, WM_COMMAND, IDM_FILE_NEW, 0); + } + return TRUE; }