summaryrefslogtreecommitdiff
path: root/alf
diff options
context:
space:
mode:
authorJonas Kümmerlin <jonas@kuemmerlin.eu>2019-06-30 20:22:21 +0200
committerJonas Kümmerlin <jonas@kuemmerlin.eu>2019-06-30 20:22:21 +0200
commitb952009c11c4eee270fc52cfa022cfb0a4800e8c (patch)
tree75b7e1f07d4c42800f36837a9026161609488de4 /alf
parentfe078af239f3b73651c32bb1cdb158dcab39ad5c (diff)
remove and restore button default state on window inactive
Diffstat (limited to 'alf')
-rw-r--r--alf/alf.cpp39
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;