https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f8b90805ff124a951c903535ce30090d7a57798a

commit f8b90805ff124a951c903535ce30090d7a57798a
Author:     Bișoc George <[email protected]>
AuthorDate: Wed May 1 10:33:13 2019 +0200
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Wed May 1 22:22:08 2019 +0200

    [OSK] Hotfix for PR #1536 (#1549)
    
    CORE-15965
---
 base/applications/osk/main.c | 78 +++++++++++++++++++++++++++++---------------
 1 file changed, 52 insertions(+), 26 deletions(-)

diff --git a/base/applications/osk/main.c b/base/applications/osk/main.c
index 6f04d78f97..939326d0da 100644
--- a/base/applications/osk/main.c
+++ b/base/applications/osk/main.c
@@ -181,7 +181,7 @@ int OSK_DlgInitDialog(HWND hDlg)
     GetMonitorInfoW(monitor, &info);
     GetWindowRect(hDlg, &rcWindow);
 
-    /* 
+    /*
         If the coordination values are default then re-initialize using the 
specific formulas
         to move the dialog at the bottom of the screen.
     */
@@ -191,7 +191,7 @@ int OSK_DlgInitDialog(HWND hDlg)
         Globals.PosY = info.rcMonitor.bottom - (rcWindow.bottom - 
rcWindow.top);
     }
 
-    /*  
+    /*
         Calculate the intersection of two rectangle sources (dialog and work 
desktop area).
         If such sources do not intersect, then the dialog is deemed as "off 
screen".
     */
@@ -439,6 +439,7 @@ LRESULT APIENTRY OSK_ThemeHandler(HWND hDlg, NMCUSTOMDRAW 
*pNmDraw)
 {
     HTHEME hTheme;
     HWND hDlgButtonCtrl;
+    LRESULT Ret;
     INT iState = PBS_NORMAL;
 
     /* Retrieve the theme handle for the button controls */
@@ -451,34 +452,59 @@ LRESULT APIENTRY OSK_ThemeHandler(HWND hDlg, NMCUSTOMDRAW 
*pNmDraw)
     */
     if (hTheme)
     {
-        /*
-            The button could be either in normal state or pushed.
-            Retrieve its state and save to a variable.
-        */
-        if (pNmDraw->uItemState & CDIS_DEFAULT)
-        {
-            iState = PBS_DEFAULTED;
-        }
-        else if (pNmDraw->uItemState & CDIS_SELECTED)
-        {
-            iState = PBS_PRESSED;
-        }
-        else if (pNmDraw->uItemState & CDIS_HOT)
+        /* Obtain CDDS drawing stages */
+        switch (pNmDraw->dwDrawStage)
         {
-            iState = PBS_HOT;
-        }
+            case CDDS_PREPAINT:
+            {
+                /*
+                    The button could be either in normal state or pushed.
+                    Retrieve its state and save to a variable.
+                */
+                if (pNmDraw->uItemState & CDIS_DEFAULT)
+                {
+                    iState = PBS_DEFAULTED;
+                }
+                else if (pNmDraw->uItemState & CDIS_SELECTED)
+                {
+                    iState = PBS_PRESSED;
+                }
+                else if (pNmDraw->uItemState & CDIS_HOT)
+                {
+                    iState = PBS_HOT;
+                }
 
-        if (IsThemeBackgroundPartiallyTransparent(hTheme, BP_PUSHBUTTON, 
iState))
-        {
-            /* Draw the application if the theme is transparent */
-            DrawThemeParentBackground(hDlg, pNmDraw->hdc, &pNmDraw->rc);
-        }
+                if (IsThemeBackgroundPartiallyTransparent(hTheme, 
BP_PUSHBUTTON, iState))
+                {
+                    /* Draw the application if the theme is transparent */
+                    DrawThemeParentBackground(hDlgButtonCtrl, pNmDraw->hdc, 
&pNmDraw->rc);
+                }
 
-        /* Draw it */
-        DrawThemeBackground(hTheme, pNmDraw->hdc, BP_PUSHBUTTON, iState, 
&pNmDraw->rc, NULL);
+                /* Draw it */
+                DrawThemeBackground(hTheme, pNmDraw->hdc, BP_PUSHBUTTON, 
iState, &pNmDraw->rc, NULL);
+
+                Ret = CDRF_SKIPDEFAULT;
+                break;
+            }
+
+            case CDDS_PREERASE:
+            {
+                Ret = CDRF_DODEFAULT;
+                break;
+            }
+
+            default:
+                Ret = CDRF_SKIPDEFAULT;
+                break;
+        }
+    }
+    else
+    {
+        /* hTheme is NULL so bail right away */
+        Ret = CDRF_DODEFAULT;
     }
 
-    return CDRF_SKIPDEFAULT;
+    return Ret;
 }
 
 /***********************************************************************
@@ -543,7 +569,7 @@ INT_PTR APIENTRY OSK_DlgProc(HWND hDlg, UINT msg, WPARAM 
wParam, LPARAM lParam)
                 {
                     if (!Globals.bIsEnhancedKeyboard)
                     {
-                        /* 
+                        /*
                             The user attempted to switch to enhanced keyboard 
dialog type.
                             Set the member value as TRUE, destroy the dialog 
and save the data configuration into the registry.
                         */

Reply via email to