diff options
Diffstat (limited to 'alf/alfnotebook.cpp')
| -rw-r--r-- | alf/alfnotebook.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/alf/alfnotebook.cpp b/alf/alfnotebook.cpp index b54829a..314ee85 100644 --- a/alf/alfnotebook.cpp +++ b/alf/alfnotebook.cpp @@ -18,6 +18,7 @@ typedef struct { ALFColor tabPaneBgColor; DWORD flags; int dpi; + int prevSelectedIndex; } ALFNotebookPriv; typedef struct { @@ -32,6 +33,7 @@ ALF_Notebook_CreatePriv(void) ALFNotebookPriv *priv = ALF_New(ALFNotebookPriv, 1); priv->tabPaneBgColor = ALF_COLOR_SYS(COLOR_BTNFACE); + priv->prevSelectedIndex = -1; return priv; } @@ -78,18 +80,28 @@ ALF_Notebook_InternalSelectedIndex(HWND notebook, HWND tabControl) static void -ALF_Notebook_InternalHandleTabChange(HWND hwndNotebook, HWND hwndTabCtrl) +ALF_Notebook_InternalHandleTabChange(HWND hwndNotebook, ALFNotebookPriv *priv) { - int selectedIndex = ALF_Notebook_InternalSelectedIndex(hwndNotebook, hwndTabCtrl); - int n = ALF_Notebook_InternalTabCount(hwndNotebook, hwndTabCtrl); + int selectedIndex = ALF_Notebook_InternalSelectedIndex(hwndNotebook, priv->hwndTabCtrl); + int n = ALF_Notebook_InternalTabCount(hwndNotebook, priv->hwndTabCtrl); for (int i = 0; i < n; ++i) { if (i == selectedIndex) { - SetWindowPos(ALF_Notebook_InternalTabPanel(hwndNotebook, hwndTabCtrl, i), HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW); + SetWindowPos(ALF_Notebook_InternalTabPanel(hwndNotebook, priv->hwndTabCtrl, i), HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW); } else { - ShowWindow(ALF_Notebook_InternalTabPanel(hwndNotebook, hwndTabCtrl, i), SW_HIDE); + ShowWindow(ALF_Notebook_InternalTabPanel(hwndNotebook, priv->hwndTabCtrl, i), SW_HIDE); } } + + if (selectedIndex != priv->prevSelectedIndex) { + HWND currentFocus = GetFocus(); + if (currentFocus != priv->hwndTabCtrl && IsChild(hwndNotebook, currentFocus)) { + HWND focusControl = GetNextDlgTabItem(hwndNotebook, priv->hwndTabCtrl, FALSE); + ALF_SetFocus(focusControl); + } + } + + priv->prevSelectedIndex = selectedIndex; } static void @@ -257,7 +269,7 @@ ALF_Notebook_InternalAddTab(HWND notebook, ALFNotebookPriv *priv, const TCHAR *t p.panel = hwndPanel; TabCtrl_InsertItem(priv->hwndTabCtrl, ALF_Notebook_InternalTabCount(notebook, priv->hwndTabCtrl), &p); - ALF_Notebook_InternalHandleTabChange(notebook, priv->hwndTabCtrl); + ALF_Notebook_InternalHandleTabChange(notebook, priv); ALF_InvalidateLayout(notebook); @@ -380,7 +392,7 @@ ALF__NotebookWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if (uMsg == WM_NOTIFY) { NMHDR *pnmh = (NMHDR*)lParam; if (pnmh->hwndFrom == priv->hwndTabCtrl && pnmh->code == TCN_SELCHANGE) { - ALF_Notebook_InternalHandleTabChange(hwnd, priv->hwndTabCtrl); + ALF_Notebook_InternalHandleTabChange(hwnd, priv); return TRUE; } |
