Added updated patch, clarified the docs

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13140 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart 2001-12-21 14:30:01 +00:00
parent 466367bedc
commit 2a7449f409
2 changed files with 181 additions and 8 deletions

View File

@ -1,16 +1,45 @@
diff -rbu2 microwin.orig/src/mwin/winevent.c microwin/src/mwin/winevent.c
--- microwin.orig/src/mwin/winevent.c Sun Nov 26 04:57:52 2000
+++ microwin/src/mwin/winevent.c Thu Jul 5 17:08:35 2001
@@ -166,5 +166,5 @@
diff -rbu2 ../microwindows-0.89pre8.orig/src/config ./src/config
--- ../microwindows-0.89pre8.orig/src/config Fri Dec 21 14:07:18 2001
+++ ./src/config Fri Dec 21 14:14:37 2001
@@ -47,7 +47,7 @@
#
####################################################################
-OPTIMIZE = Y
-DEBUG = N
-VERBOSE = N
+OPTIMIZE = N
+DEBUG = Y
+VERBOSE = Y
####################################################################
@@ -191,5 +191,5 @@
#
####################################################################
-ERASEMOVE = Y
+ERASEMOVE = N
UPDATEREGIONS = Y
@@ -216,5 +216,5 @@
# X Window screen, mouse and kbd drivers
-X11 = N
+X11 = Y
ifeq ($(X11), Y)
diff -rbu2 ../microwindows-0.89pre8.orig/src/mwin/winevent.c ./src/mwin/winevent.c
--- ../microwindows-0.89pre8.orig/src/mwin/winevent.c Fri Dec 21 14:07:21 2001
+++ ./src/mwin/winevent.c Fri Dec 21 14:10:59 2001
@@ -167,5 +167,5 @@
/* then possibly send user mouse message*/
- if(hittest == HTCLIENT) {
+ if(hittest == HTCLIENT || hwnd == GetCapture()) {
pt.x = cursorx;
pt.y = cursory;
diff -rbu2 microwin.orig/src/mwin/winuser.c microwin/src/mwin/winuser.c
--- microwin.orig/src/mwin/winuser.c Wed Jul 5 01:36:42 2000
+++ microwin/src/mwin/winuser.c Mon Jul 2 13:11:51 2001
Only in ./src/mwin: winevent.c~
diff -rbu2 ../microwindows-0.89pre8.orig/src/mwin/winuser.c ./src/mwin/winuser.c
--- ../microwindows-0.89pre8.orig/src/mwin/winuser.c Fri Dec 21 14:07:21 2001
+++ ./src/mwin/winuser.c Fri Dec 21 14:10:59 2001
@@ -137,7 +137,11 @@
}

View File

@ -37,10 +37,18 @@ MicroWindows:
DEBUG=Y
VERBOSE=Y
Note: these are already applied by the patch below.
- apply microwindows.patches (from wxWindows:
docs/microwin/microwindows.patches) to fix PeekMessage
and other issues. If the patch doesn't apply automatically,
you may need to apply it by hand
you may need to apply it by hand, and the relevant changed
functions are given at the end of this file for convenience.
Example patch command:
% cd microwindows-0.89pre8.orig
% patch -p0 < ~/wx2/docs/microwin/microwindows.patches
- compile by typing 'make' from within the MicroWindows src directory
@ -114,3 +122,139 @@ No ::GetObject so we can't get LOGFONT from an HFONT
in wxSystemSettings (worked around by passing HFONT to
the wxFont constructor).
Applying patches by hand
========================
The full altered functions are given below in case you have
to apply them by hand.
src/mwin/winevent.c
-------------------
A second test has been added to this line:
if(hittest == HTCLIENT || hwnd == GetCapture()) {
in MwTranslateMouseMessage below. This corrects a mouse message
bug.
/*
* Translate and deliver hardware mouse message to proper window.
*/
void
MwTranslateMouseMessage(HWND hwnd,UINT msg,int hittest)
{
POINT pt;
DWORD tick;
static UINT lastmsg = 0;
static HWND lasthwnd;
static DWORD lasttick;
static int lastx, lasty;
/* determine double click eligibility*/
if(msg == WM_LBUTTONDOWN || msg == WM_RBUTTONDOWN) {
tick = GetTickCount();
if((hwnd->pClass->style & CS_DBLCLKS) &&
msg == lastmsg && hwnd == lasthwnd &&
tick - lasttick < DBLCLICKSPEED &&
abs(cursorx-lastx) < mwSYSMETRICS_CXDOUBLECLK &&
abs(cursory-lasty) < mwSYSMETRICS_CYDOUBLECLK)
msg += (WM_LBUTTONDBLCLK - WM_LBUTTONDOWN);
lastmsg = msg;
lasthwnd = hwnd;
lasttick = tick;
lastx = cursorx;
lasty = cursory;
}
/*
* We always send nc mouse message
* unlike Windows, for HTCLIENT default processing
*/
PostMessage(hwnd, msg + (WM_NCMOUSEMOVE-WM_MOUSEMOVE), hittest,
MAKELONG(cursorx, cursory));
/* then possibly send user mouse message*/
if(hittest == HTCLIENT || hwnd == GetCapture()) {
pt.x = cursorx;
pt.y = cursory;
ScreenToClient(hwnd, &pt);
PostMessage(hwnd, msg, 0, MAKELONG(pt.x, pt.y));
}
}
winuser.c
---------
Part of PeekMessage has been factored out into PeekMessageHelper,
and used in PeekMessage and GetMessage. The three relevant functions
are:
/*
* A helper function for sharing code between PeekMessage and GetMessage
*/
BOOL WINAPI
PeekMessageHelper(LPMSG lpMsg, HWND hwnd, UINT uMsgFilterMin, UINT uMsgFilterMax,
UINT wRemoveMsg, BOOL returnIfEmptyQueue)
{
HWND wp;
PMSG pNxtMsg;
/* check if no messages in queue*/
if(mwMsgHead.head == NULL) {
/* Added by JACS so it doesn't reach MwSelect */
if (returnIfEmptyQueue)
return FALSE;
#if PAINTONCE
/* check all windows for pending paint messages*/
for(wp=listwp; wp; wp=wp->next) {
if(!(wp->style & WS_CHILD)) {
if(chkPaintMsg(wp, lpMsg))
return TRUE;
}
}
for(wp=listwp; wp; wp=wp->next) {
if(wp->style & WS_CHILD) {
if(chkPaintMsg(wp, lpMsg))
return TRUE;
}
}
#endif
MwSelect();
}
if(mwMsgHead.head == NULL)
return FALSE;
pNxtMsg = (PMSG)mwMsgHead.head;
if(wRemoveMsg & PM_REMOVE)
GdListRemove(&mwMsgHead, &pNxtMsg->link);
*lpMsg = *pNxtMsg;
if(wRemoveMsg & PM_REMOVE)
GdItemFree(pNxtMsg);
return TRUE;
}
BOOL WINAPI
PeekMessage(LPMSG lpMsg, HWND hwnd, UINT uMsgFilterMin, UINT uMsgFilterMax,
UINT wRemoveMsg)
{
/* Never wait in MwSelect: pass TRUE */
return PeekMessageHelper(lpMsg, hwnd, uMsgFilterMin, uMsgFilterMax, wRemoveMsg, TRUE);
}
BOOL WINAPI
GetMessage(LPMSG lpMsg,HWND hwnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
{
/*
* currently MwSelect() must poll for VT switch reasons,
* so this code will work
*/
/* Always wait in MwSelect if there are messages: pass FALSE */
while(!PeekMessageHelper(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax,PM_REMOVE, FALSE))
continue;
return lpMsg->message != WM_QUIT;
}