Release 940510

May 9, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)

	* [controls/scroll.c]
	Make thumbtrack button disappear if scroll box ratio < 3:1.
	Make arrow buttons rectangular if scroll box ratio < 2:1.
	Add code for SBS_TOPALIGN, SBS_BOTTOMALIGN, 
				SBS_LEFTALIGN & SBS_RIGHTALIGN.
	Bug fix in NC_CreateScrollBars(), no more bigbutt in calendar.exe... :-)

	* [loader/library.c] [loader/task.c] [misc/exec.c]
	Continue playing around trying to get a second task running.

	* [windows/mdi.c]
	Change OBM_CLOSE for OBM_OLD_CLOSE, a smaller dot button when maximized.

	* [everywhere]
	Adding previous works of the Apr 25, 94.

Tue May 10 18:09:14 1994 Erik Bos (erik@trashcan.hacktic.nl)

	* [if1632/mmsystem.spec] [misc/mmsystem.c] [include/mmsystem.h]
	Added Martin's mmsystem.dll stubs.

	* [misc/sound.c]
	Added remaining stubs for sound.dll.

	* [if1632/shell.spec] [misc/shell.c]
	Fixed prototypes (I found them in BC 4) and added ShellAbout()
	and AboutDlgProc().
diff --git a/controls/menu.c b/controls/menu.c
index 00cc095..9ef90f41 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -408,8 +408,6 @@
 	LPPOPUPMENU lppop2;
 	if (lppop == NULL) return;
 	lpitem = MenuFindItem(lppop, x, y, &wRet);
-	printf("MenuButtonDown hWnd=%04X x=%d y=%d // wRet=%d lpitem=%08X !\n", 
-											hWnd, x, y, wRet, lpitem);
 #ifdef DEBUG_MENU
 	printf("MenuButtonDown hWnd=%04X x=%d y=%d // wRet=%d lpitem=%08X !\n", 
 											hWnd, x, y, wRet, lpitem);
@@ -449,6 +447,10 @@
 					0, lppop->ownerWnd, (LPRECT)NULL);
 				}
 			GlobalUnlock(hSubMenu);
+			return TRUE;
+			}
+		if (lppop->BarFlag && !MenuHasFocus) {
+			MenuFocusLoop(hWnd, lppop);
 			}
 		return TRUE;
 		}
@@ -506,7 +508,8 @@
 	LPMENUITEM	lpitem, lpitem2;
 	LPPOPUPMENU lppop2;
 	WORD	wRet;
-	if ((wParam & MK_LBUTTON) != 0) {
+/*	if ((wParam & MK_LBUTTON) != 0) { */
+	if (GetKeyState(VK_LBUTTON)	!= 0) {
 		lpitem = MenuFindItem(lppop, x, y, &wRet);
 #ifdef DEBUG_MENU
 		printf("MenuMouseMove // x=%d y=%d // wRet=%d lpitem=%08X !\n", 
@@ -1319,12 +1322,13 @@
 		GlobalUnlock(hMenu);
 		return FALSE;
 		}
+	lpitem2->hItem = hNewItem;
 	lpitem2->item_flags = wFlags;
 	lpitem2->item_id = wItemID;
 	if (!(wFlags & (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | 
 		MF_MENUBREAK | MF_SEPARATOR))) {
-/*		lpitem2->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); */
-		lpitem2->item_text = GlobalLock(GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1));
+		lpitem2->hText = GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1);
+		lpitem2->item_text = GlobalLock(lpitem2->hText);
 		if (lpitem2->item_text != NULL)
 			strcpy(lpitem2->item_text, lpNewItem);
 		else {
@@ -1347,8 +1351,6 @@
 		if (lpitem2->next != NULL) lpitem2->next->prev = lpitem2;
 		lpitem->next = lpitem2;
 		}
-	lpitem2->child = NULL;
-	lpitem2->parent = NULL;
 	menu->nItems++;
 	GlobalUnlock(hMenu);
 	return TRUE;
@@ -1386,6 +1388,7 @@
 		return FALSE;
 		}
 	lpitem2 = (LPMENUITEM)GlobalLock(hNewItem);
+	lpitem2->hItem = hNewItem;
 	if (lpitem2 == NULL) {
 		GlobalFree(hNewItem);
 		GlobalUnlock(hMenu);
@@ -1395,8 +1398,8 @@
 	lpitem2->item_id = wItemID;
 	if (!(wFlags & (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | 
 		MF_MENUBREAK | MF_SEPARATOR))) {
-/*        lpitem2->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); */
-		lpitem2->item_text = GlobalLock(GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1));
+		lpitem2->hText = GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1);
+		lpitem2->item_text = GlobalLock(lpitem2->hText);
 		if (lpitem2->item_text != NULL)
 			strcpy(lpitem2->item_text, lpNewItem);
 		else {
@@ -1414,8 +1417,6 @@
 		lpitem->next = lpitem2;
 	lpitem2->prev = lpitem;
 	lpitem2->next = NULL;
-	lpitem2->child = NULL;
-	lpitem2->parent = NULL;
 	lpitem2->hCheckBit = (HBITMAP)NULL;
 	lpitem2->hUnCheckBit = (HBITMAP)NULL;
 	menu->nItems++;
@@ -1447,9 +1448,10 @@
 			if (!(lpitem->item_flags & 
 				(MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | 
 				MF_MENUBREAK | MF_SEPARATOR))) {
-				GlobalFree((HANDLE)lpitem->item_text);
+				GlobalUnlock(lpitem->hText);
+				GlobalFree(lpitem->hText);
 				}
-			GlobalFree(lpitem);
+			GlobalFree(lpitem->hItem);
 			GlobalUnlock(hMenu);
 			return TRUE;
 			}
@@ -1485,11 +1487,12 @@
 		if (!(lpitem->item_flags & 
 			(MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | 
 			MF_MENUBREAK | MF_SEPARATOR))) {
-			GlobalFree((HANDLE)lpitem->item_text);
+			GlobalUnlock(lpitem->hText);
+			GlobalFree(lpitem->hText);
 			}
 		if (lpitem->prev) lpitem->prev->next = lpitem->next;
 		if (lpitem->next) lpitem->next->prev = lpitem->prev;
-		GlobalFree(lpitem);
+		GlobalFree(lpitem->hItem);
 		GlobalUnlock(hMenu);
 		return TRUE;
 		}
@@ -1522,9 +1525,10 @@
 			if (!(lpitem->item_flags & 
 				(MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | 
 				MF_MENUBREAK | MF_SEPARATOR))) {
-				GlobalFree((HANDLE)lpitem->item_text);
-/*				lpitem->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); */
-				lpitem->item_text = GlobalLock(GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1));
+				GlobalUnlock(lpitem->hText);
+				GlobalFree(lpitem->hText);
+				lpitem->hText = GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1);
+				lpitem->item_text = GlobalLock(lpitem->hText);
 				printf("ModifyMenu %08X %08X '%s') !\n",
 					lpitem->item_text, lpNewItem, lpNewItem);
 				if (lpitem->item_text != NULL)
@@ -1689,13 +1693,26 @@
 				HideAllSubPopupMenu(lpmenu);
 				break;
 				}
+			ScreenToClient(hWnd, &msg.pt);
+			msg.pt.y += lpmenu->rect.bottom;
 			switch(msg.message) {
+				case WM_LBUTTONDOWN:
+				case WM_NCLBUTTONDOWN:
+				    SetCapture(hWnd);
+				    MenuButtonDown(hWnd, lpmenu, msg.pt.x, msg.pt.y);
+				    break;
+				case WM_LBUTTONUP:
+				case WM_NCLBUTTONUP:
+				    MenuButtonUp(hWnd, lpmenu, msg.pt.x, msg.pt.y);
+				    ReleaseCapture();
+				    break;
+				case WM_MOUSEMOVE:
+				case WM_NCMOUSEMOVE:
+				    MenuMouseMove(hWnd, lpmenu, msg.wParam, msg.pt.x, msg.pt.y);
+				    break;
 				case WM_KEYDOWN:
 				case WM_KEYUP:
 				case WM_CHAR:
-				case WM_LBUTTONDOWN:
-				case WM_LBUTTONUP:
-				case WM_MOUSEMOVE:
 					PopupMenuWndProc(hWnd, msg.message, msg.wParam, msg.lParam);
 				default:
 					DispatchMessage(&msg);
@@ -1967,12 +1984,15 @@
 		return FALSE;
 		}
 	lpmenu->ownerWnd = hWnd;
+	printf("SetMenu(%04X, %04X) // %04X\n", hWnd, hMenu, lpmenu->ownerWnd);
 	ResetHiliteFlags(lpmenu);
+	if (GetCapture() == hWnd) ReleaseCapture();
 	GlobalUnlock(hMenu);
 	return TRUE;
 }
 
 
+
 /**********************************************************************
  *			GetSubMenu		[USER.159]
  */