diff options
| author | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2019-06-30 20:22:21 +0200 |
|---|---|---|
| committer | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2019-06-30 20:22:21 +0200 |
| commit | b952009c11c4eee270fc52cfa022cfb0a4800e8c (patch) | |
| tree | 75b7e1f07d4c42800f36837a9026161609488de4 | |
| parent | fe078af239f3b73651c32bb1cdb158dcab39ad5c (diff) | |
remove and restore button default state on window inactive
| -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; |
