Bläddra i källkod

Updated to newest version of Win32.Display.Mod

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7350 8c9fc860-2736-0410-a75d-ab315db34111
negelef 8 år sedan
förälder
incheckning
b3f06c5f93
1 ändrade filer med 15 tillägg och 16 borttagningar
  1. 15 16
      source/Coop.Win32.Display.Mod

+ 15 - 16
source/Coop.Win32.Display.Mod

@@ -84,7 +84,7 @@ TYPE
 		dbch_devicetype: LONGINT ;
 		dbch_reserved: LONGINT;
 	END;
-	DEV_BROADCAST_HDRP  = POINTER TO DEV_BROADCAST_HDR;
+	DEV_BROADCAST_HDRP  = POINTER  TO DEV_BROADCAST_HDR;
 
 	DEV_BROADCAST_VOLUME = RECORD   (DEV_BROADCAST_HDR)
 		dbcv_unitmask: SET;
@@ -135,9 +135,7 @@ TYPE
 	DisplayProc* = PROCEDURE ( disp: Window );
 	PaintProc* = PROCEDURE ( disp: Window;  x, y, w, h: LONGINT );
 
-	CreateStruct = POINTER TO CreateStructDesc;
-
-	CreateStructDesc = RECORD
+	CreateStruct = POINTER TO RECORD
 		win: Window;
 		finished: BOOLEAN;
 		className: ARRAY 32 OF CHAR;
@@ -306,7 +304,7 @@ VAR
 
 (* Common base handler for all variants of windows provided by this module. *)
 	PROCEDURE DummyHandler( win: Window;  uMsg: LONGINT;  wParam: User32.WParam;  lParam: User32.LParam ): User32.LResult;
-	VAR res: User32.LResult; proc: User32.WndProc; hhWnd {UNTRACED}: ANY;  ret: Kernel32.BOOL;
+	VAR res: User32.LResult; proc: User32.WndProc; hhWnd: ADDRESS;  ret: Kernel32.BOOL;
 	BEGIN
 		IF (uMsg = User32.WMDestroy) & ~(external IN win.state) THEN
 			EXCL( win.state, update );  DEC( nWindows );
@@ -337,7 +335,10 @@ VAR
 
 	PROCEDURE HandleFocus( win: Window;  uMsg: LONGINT;  wParam: User32.WParam );
 	BEGIN
-		IF uMsg = User32.WMKillFocus THEN
+		IF (uMsg = User32.WMSetFocus) & (hook # win) THEN
+			Kernel32.Sleep( 0 );   (* ????????????????????? *)
+		ELSIF uMsg = User32.WMKillFocus THEN
+
 			IF wParam # Kernel32.NULL THEN
 				IF wParam = win.hWnd THEN RETURN END;
 			END;
@@ -360,10 +361,10 @@ VAR
 
 	PROCEDURE {WINAPI} DummyProc( hwnd: User32.HWND;  uMsg: LONGINT;  wParam: User32.WParam;
 															  lParam: User32.LParam ): User32.LResult;
-	VAR win {UNTRACED}: Window;  create {UNTRACED}: CreateStruct;  ret: Kernel32.BOOL;
+	VAR win: Window;  create: CreateStruct;  ret: Kernel32.BOOL;
 	BEGIN {UNCOOPERATIVE, UNCHECKED}
+		Environment.RestoreActivity;
 		win := SYSTEM.VAL( Window, User32.GetWindowLong( hwnd, GWLWindow ) );
-		IF win # NIL THEN SYSTEM.SetActivity (win.processor) END;
 
 		IF win # NIL THEN RETURN DummyHandler( win, uMsg, wParam, lParam )
 		ELSIF uMsg = User32.WMCreate THEN
@@ -371,9 +372,7 @@ VAR
 			lParam := SYSTEM.VAL( User32.LParam, create.win );
 			ret := User32.PostMessage( hwnd, WMSetup, wParam, lParam )
 		ELSIF uMsg = WMSetup THEN
-			win := SYSTEM.VAL( Window, lParam );
-			SYSTEM.SetActivity (win.processor);
-			ret := User32.SetWindowLong( hwnd, GWLWindow, lParam );
+			win := SYSTEM.VAL( Window, lParam );  ret := User32.SetWindowLong( hwnd, GWLWindow, lParam );
 			create := SYSTEM.VAL( CreateStruct, wParam );
 			IF ~(dummy IN win.state) THEN SetupWin( win ) ELSE Add( win, TRUE ) END;
 			IF ~(external IN win.state) THEN INC( nWindows ) END;
@@ -785,11 +784,9 @@ VAR
 
 	PROCEDURE {WINAPI} WindowProc( hwnd: User32.HWND;  uMsg: LONGINT;  wParam: User32.WParam;
 															    lParam: User32.LParam ): User32.LResult;
-	VAR win {UNTRACED}: Window;  dbh {UNTRACED}: DEV_BROADCAST_HDRP; dbv {UNTRACED} : DEV_BROADCAST_VOLUMEP; i: LONGINT;
+	VAR win {UNTRACED}: Window;  dbh {UNTRACED}: DEV_BROADCAST_HDRP; dbv  {UNTRACED}: DEV_BROADCAST_VOLUMEP; i: LONGINT;
 	BEGIN {UNCOOPERATIVE, UNCHECKED}
-		win := SYSTEM.VAL( Window, User32.GetWindowLong( hwnd, GWLWindow ) );
-		IF win # NIL THEN SYSTEM.SetActivity (win.processor) END;
-
+		Environment.RestoreActivity;
 		IF uMsg = WM_DEVICECHANGE THEN
 			IF wParam = DBT_DEVICEARRIVAL THEN
 				dbh := SYSTEM.VAL(DEV_BROADCAST_HDRP,lParam);
@@ -806,6 +803,7 @@ VAR
 			END;
 		END;
 
+		win := SYSTEM.VAL( Window, User32.GetWindowLong( hwnd, GWLWindow ) );
 		IF win # NIL THEN RETURN WindowHandler( win, uMsg, wParam, lParam )
 		ELSE RETURN DummyProc( hwnd, uMsg, wParam, lParam )
 		END
@@ -971,8 +969,9 @@ VAR
 
 	PROCEDURE {WINAPI} ControlWindowProc( hwnd: User32.HWND;  uMsg: LONGINT;  wParam: User32.WParam;
 																		    lParam: User32.LParam ): User32.LResult;
-	VAR win {UNTRACED}: Window;  ret: Kernel32.BOOL;
+	VAR win: Window;  ret: Kernel32.BOOL;
 	BEGIN {UNCOOPERATIVE, UNCHECKED}
+		Environment.RestoreActivity;
 		win := SYSTEM.VAL( Window, User32.GetWindowLong( hwnd, GWLWindow ) );
 		IF win # NIL THEN RETURN WindowHandler( win, uMsg, wParam, lParam )
 		ELSIF uMsg = User32.WMCreate THEN