summaryrefslogtreecommitdiffstats
path: root/src/windows
diff options
context:
space:
mode:
authorJeffrey Altman <jaltman@secure-endpoints.com>2007-08-24 14:37:07 +0000
committerJeffrey Altman <jaltman@secure-endpoints.com>2007-08-24 14:37:07 +0000
commit1217c6a7ebf00df220fdf6c45e0ffc23968a41fe (patch)
treee81585f4da43beda6b863f4efb5468e0c4d1c854 /src/windows
parent9dcf2b634b3472ce5b23e28e3f0c7cac13c256fd (diff)
downloadkrb5-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.c24
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;