Mercurial > emacs
changeset 91031:524f82fbf3ef
(get_next_msg): Consolidate WM_PAINT messages.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Fri, 14 Sep 2007 23:28:37 +0000 |
parents | 8be09e8e2c97 |
children | a7bcd4b15f84 |
files | src/w32xfns.c |
diffstat | 1 files changed, 41 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/w32xfns.c Thu Sep 13 13:37:26 2007 +0000 +++ b/src/w32xfns.c Fri Sep 14 23:28:37 2007 +0000 @@ -192,6 +192,47 @@ } nQueue--; + /* Consolidate WM_PAINT messages to optimise redrawing. */ + if (lpmsg->msg.message == WM_PAINT && nQueue) + { + int_msg * lpCur = lpHead; + int_msg * lpPrev = NULL; + int_msg * lpNext = NULL; + + while (lpCur && nQueue) + { + lpNext = lpCur->lpNext; + if (lpCur->w32msg.msg.message == WM_PAINT) + { + /* Remove this message from the queue. */ + if (lpPrev) + lpPrev->lpNext = lpNext; + else + lpHead = lpNext; + + if (lpCur == lpTail) + lpTail = lpPrev; + + /* Adjust clip rectangle to cover both. */ + if (!UnionRect (&(lpmsg->rect), &(lpmsg->rect), + &(lpCur->w32msg.rect))) + { + SetRectEmpty(&(lpmsg->rect)); + } + + myfree (lpCur); + + nQueue--; + + lpCur = lpNext; + } + else + { + lpPrev = lpCur; + lpCur = lpNext; + } + } + } bRet = TRUE; }