diff options
Diffstat (limited to 'alf/alf.cpp')
| -rw-r--r-- | alf/alf.cpp | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/alf/alf.cpp b/alf/alf.cpp index 932bd3b..9120399 100644 --- a/alf/alf.cpp +++ b/alf/alf.cpp @@ -111,8 +111,30 @@ ALF_ApplyFocus(HWND hwnd, ALFWindowPriv *priv, BOOL restoringFocus) if (!restoringFocus && SendMessage(priv->hwndFocus, WM_GETDLGCODE, 0, 0) & DLGC_HASSETSEL) SendMessage(priv->hwndFocus, EM_SETSEL, 0, -1); - if (GetForegroundWindow() == hwnd) - SetFocus(priv->hwndFocus); + if (GetForegroundWindow() == hwnd) { + HWND oldFocus = SetFocus(priv->hwndFocus); + + // FIXME! restore default button state + if (oldFocus && SendMessage(oldFocus, WM_GETDLGCODE, 0, 0) & DLGC_DEFPUSHBUTTON) { + SendMessage(oldFocus, BM_SETSTYLE, BS_PUSHBUTTON, TRUE); + } + + if (priv->defid != (WORD)-1) { + HWND hwndOld = ALF_WidgetHwndById(hwnd, priv->defid); + if (hwndOld && SendMessage(hwndOld, WM_GETDLGCODE, 0, 0) & DLGC_DEFPUSHBUTTON) { + SendMessage(hwndOld, BM_SETSTYLE, BS_PUSHBUTTON, TRUE); + } + } + + if (priv->hwndFocus && SendMessage(priv->hwndFocus, WM_GETDLGCODE, 0, 0) & DLGC_UNDEFPUSHBUTTON) { + SendMessage(priv->hwndFocus, BM_SETSTYLE, BS_DEFPUSHBUTTON, TRUE); + } else { + HWND hwndDef = ALF_WidgetHwndById(hwnd, priv->defid); + if (hwndDef && SendMessage(hwndDef, WM_GETDLGCODE, 0, 0) & DLGC_UNDEFPUSHBUTTON) { + SendMessage(hwndDef, BM_SETSTYLE, BS_DEFPUSHBUTTON, TRUE); + } + } + } } else { priv->hwndFocus = GetNextDlgTabItem(hwnd, NULL, FALSE); if (priv->hwndFocus) @@ -201,6 +223,19 @@ ALF_DefWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) ALF_ApplyFocus(hwnd, priv, TRUE); } else { priv->hwndFocus = GetFocus(); + + // FIXME! remove default button state + // there has to be a better way to do this + if (priv->defid != (WORD)-1) { + HWND hwndDefBtn = ALF_WidgetHwndById(hwnd, priv->defid); + if (hwndDefBtn && SendMessage(hwndDefBtn, WM_GETDLGCODE, 0, 0) & DLGC_DEFPUSHBUTTON) { + SendMessage(hwndDefBtn, BM_SETSTYLE, BS_PUSHBUTTON, TRUE); + } + } + + if (priv->hwndFocus && SendMessage(priv->hwndFocus, WM_GETDLGCODE, 0, 0) & DLGC_DEFPUSHBUTTON) { + SendMessage(priv->hwndFocus, BM_SETSTYLE, BS_PUSHBUTTON, TRUE); + } } } return 0; |
