diff options
| author | Jeffrey Altman <jaltman@secure-endpoints.com> | 2007-08-24 14:37:07 +0000 |
|---|---|---|
| committer | Jeffrey Altman <jaltman@secure-endpoints.com> | 2007-08-24 14:37:07 +0000 |
| commit | 1217c6a7ebf00df220fdf6c45e0ffc23968a41fe (patch) | |
| tree | e81585f4da43beda6b863f4efb5468e0c4d1c854 /src/windows | |
| parent | 9dcf2b634b3472ce5b23e28e3f0c7cac13c256fd (diff) | |
| download | krb5-1217c6a7ebf00df220fdf6c45e0ffc23968a41fe.tar.gz krb5-1217c6a7ebf00df220fdf6c45e0ffc23968a41fe.tar.xz krb5-1217c6a7ebf00df220fdf6c45e0ffc23968a41fe.zip | |
NIM: Handle WM_PAINT messages without update regions
It is possible to receive a WM_PAINT message in Windows without there
being an update region. For example, this can be caused by someone
calling RedrawWindow() with the RDW_INTERNALPAINT flag set. In this
case, GetUpdateRect() will indicate that there is no update region and
calling BeginPaint()/EndPaint() results in incorrect behavior.
The credentials window in Network Identity Manager needs to perform
special handling for this case by obtaining a proper device context
and completing the drawing operation.
ticket: new
component: windows
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19859 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows')
| -rw-r--r-- | src/windows/identity/ui/credwnd.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/windows/identity/ui/credwnd.c b/src/windows/identity/ui/credwnd.c index ed9cad735..222d3038a 100644 --- a/src/windows/identity/ui/credwnd.c +++ b/src/windows/identity/ui/credwnd.c @@ -3127,6 +3127,7 @@ cw_wm_paint(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) int selected = 0; int rowheight = 0; BOOL has_dc = FALSE; + BOOL has_updaterect = TRUE; tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); if (tbl == NULL) @@ -3140,15 +3141,16 @@ cw_wm_paint(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) has_dc = TRUE; } - if(!has_dc && !GetUpdateRect(hwnd, &r, FALSE)) { -#ifdef DEBUG - assert(FALSE); -#endif - goto _exit; + if (!has_dc && !GetUpdateRect(hwnd, &r, FALSE)) { + has_updaterect = FALSE; } - if (!has_dc) - hdc = BeginPaint(hwnd, &ps); + if (!has_dc) { + if (has_updaterect) + hdc = BeginPaint(hwnd, &ps); + else + hdc = GetDC(hwnd); + } if(tbl->hf_normal) hf_old = SelectFont(hdc, tbl->hf_normal); @@ -3377,8 +3379,12 @@ cw_wm_paint(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if(tbl->hf_normal) SelectFont(hdc, hf_old); - if (!has_dc) - EndPaint(hwnd,&ps); + if (!has_dc) { + if (has_updaterect) + EndPaint(hwnd,&ps); + else + ReleaseDC(hwnd, hdc); + } _exit: return TRUE; |
