Release 950901

Thu Aug 31 17:19:57 1995  Alexandre Julliard  <julliard@sunsite.unc.edu>

	* [Configure]
	Added compile-time option for IPC.

	* [configure.in]
	Added command-line options for language, IPC and malloc
	debugging.

	* [controls/menu.c]
	WM_MENUSELECT was sometimes sent to the wrong window.

	* [debugger/break.c]
	For the 'next' command, only step over instruction that require
	it. This allows 'next' to do the right thing with jmp and ret
	instructions.

	* [ipc/*.c] [memory/atom.c] [memory/global.c]
	IPC can now be configured out at compile-time.

	* [loader/task.c]
	Bug fix in TASK_Reschedule() that could cause a task to be deleted
	twice.

	* [miscemu/dosmem.c] (New file)
	Partial emulation of the BIOS data segment.

	* [miscemu/instr.c]
	Trap attempts to access selector 0x40 and remap the access to
	segment __0040H.

	* [tools/build.c]
	Fixed bug in CallTo32_LargeStack() that caused problems when
	compiling Wine with the -fomit-frame-pointer option.

	* [windows/message.c]
	Fixed bug in hardware event handling that could cause some events
	to get ignored.

Sat Aug 26 13:12:59 IST 1995 Michael Veksler <mveksler@vnet.ibm.com>

	* [ipc/README] [ipc/dde.tex]
	LaTeX documentation for the ipc and DDE stuff.

Wed Aug 23 22:01:23 GMT 1995 Michael Veksler <mveksler@vnet.ibm.com>

	* [ipc/Imakefile] [ipc/wine_test_stub.c]
	Fixed IPC testing. Now it can be compiled with "make tests"

Wed Aug 23 21:04:14 1995  Fons Botman  <botman@wab-tis.rabobank.nl>

	* [if1632/kernel.spec] [include/windows.h] [misc/main.c]
	Added GetWinDebugInfo/SetWinDebugInfo stub for player.exe

Sun Aug  20 13:49:42 1995  Marcus Meissner  <msmeissn@faui01.informatik.uni-erlangen.de>

	* [miscemu/int21.c]
	Misc fix to int21,ah=40 (write) to match _lwrite().
	AX=0x440A (check if handle is remote) added.

	* [multimedia/mmsystem.c]
	Moved mciSendString to mcistring.c.

	* [multimedia/mcistring.c]
	New file, string interface for MCI (not complete, not thoroughly
	tested).

	* [multimedia/audio.c]
	IOCTL prints errors; one paranoid check disabled.

	* [misc/file.c]
	Misc operator precedence fixes.

	* [if1632/gdi.spec] [objects/bitblt.c]
	Stub for FastWindowFrame (parameters not correct).

Sat Aug 19 01:31:23 1995  Graham Menhennitt <gfm@werple.mira.net.au>

	* [loader/ne_image.c]
	Preliminary support for iterated segments.

Sat Aug 19 00:43:04 1995  Andrew Taylor  (andrew@riscan.com)

	* [windows/mapping.c]
	In function MAPPING_FixIsotropic(), VportExt[XY] is multiplied by
 	the absolute value of (ydim / xdim) or (xdim / ydim).

Thu Aug 15 23:00:16  Gregory Trubetskoy  <grisha@mira.com>

	* [objects/oembitmap.c]
	Added some includes for Windows 95.

	* [include/sysmetrics.h]
	Added some sysmetrics for Windows 95.

	* [include/bitmaps/*95]
	New files: obm_close_95, obm_closed_95, obm_reduce_95, obm_reduced_95
	obm_zoom_95, obm_zoomd_95 - these are some pixmaps for Windows 95.

Thu Aug 10 12:00:00 1995  Jan Willamowius  (jan@janhh.shnet.org)

	* [misc/shell.c] [rc/sysres*.rc]
	The caption of the ShellAbout dialog box is language specific and
 	should be defined in the resources.
diff --git a/controls/menu.c b/controls/menu.c
index 88c4c15..598de3a 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -697,7 +697,7 @@
 /***********************************************************************
  *           MENU_SelectItem
  */
-static void MENU_SelectItem( HMENU hmenu, WORD wIndex )
+static void MENU_SelectItem( HWND hwndOwner, HMENU hmenu, WORD wIndex )
 {
     MENUITEM *items;
     LPPOPUPMENU lppop;
@@ -739,8 +739,9 @@
 	    MENU_DrawMenuItem( lppop->hWnd, hdc, &items[lppop->FocusedItem], lppop->Height,
 			       !(lppop->wFlags & MF_POPUP) );
 	    dprintf_menu(stddeb,"Sending WM_MENUSELECT %04x %04x\n", items[lppop->FocusedItem].item_id,items[lppop->FocusedItem].item_flags);
-	    SendMessage(lppop->hWnd, WM_MENUSELECT, items[lppop->FocusedItem].item_id,
-		       MAKELONG( items[lppop->FocusedItem].item_flags | MF_MOUSESELECT, hmenu));
+	    SendMessage( hwndOwner, WM_MENUSELECT,
+                         items[lppop->FocusedItem].item_id,
+		         MAKELONG( items[lppop->FocusedItem].item_flags | MF_MOUSESELECT, hmenu));
 	}
     }
     ReleaseDC( lppop->hWnd, hdc );
@@ -750,7 +751,7 @@
 /***********************************************************************
  *           MENU_SelectNextItem
  */
-static void MENU_SelectNextItem( HMENU hmenu )
+static void MENU_SelectNextItem( HWND hwndOwner, HMENU hmenu )
 {
     int i;
     MENUITEM *items;
@@ -766,13 +767,13 @@
 	{
 	    if (!(items[i].item_flags & MF_SEPARATOR))
 	    {
-		MENU_SelectItem( hmenu, i );
+		MENU_SelectItem( hwndOwner, hmenu, i );
 		return;
 	    }
 	}
 	if (MENU_HasSysMenu( menu ))
 	{
-	    MENU_SelectItem( hmenu, SYSMENU_SELECTED );
+	    MENU_SelectItem( hwndOwner, hmenu, SYSMENU_SELECTED );
 	    return;
 	}
     }
@@ -780,18 +781,19 @@
     {
 	if (!(items[i].item_flags & MF_SEPARATOR))
 	{
-	    MENU_SelectItem( hmenu, i );
+	    MENU_SelectItem( hwndOwner, hmenu, i );
 	    return;
 	}
     }
-    if (MENU_HasSysMenu( menu )) MENU_SelectItem( hmenu, SYSMENU_SELECTED );
+    if (MENU_HasSysMenu( menu ))
+        MENU_SelectItem( hwndOwner, hmenu, SYSMENU_SELECTED );
 }
 
 
 /***********************************************************************
  *           MENU_SelectPrevItem
  */
-static void MENU_SelectPrevItem( HMENU hmenu )
+static void MENU_SelectPrevItem( HWND hwndOwner, HMENU hmenu )
 {
     int i;
     MENUITEM *items;
@@ -807,13 +809,13 @@
 	{
 	    if (!(items[i].item_flags & MF_SEPARATOR))
 	    {
-		MENU_SelectItem( hmenu, i );
+		MENU_SelectItem( hwndOwner, hmenu, i );
 		return;
 	    }
 	}
 	if (MENU_HasSysMenu( menu ))
 	{
-	    MENU_SelectItem( hmenu, SYSMENU_SELECTED );
+	    MENU_SelectItem( hwndOwner, hmenu, SYSMENU_SELECTED );
 	    return;
 	}
     }
@@ -821,11 +823,12 @@
     {
 	if (!(items[i].item_flags & MF_SEPARATOR))
 	{
-	    MENU_SelectItem( hmenu, i );
+	    MENU_SelectItem( hwndOwner, hmenu, i );
 	    return;
 	}
     }
-    if (MENU_HasSysMenu( menu )) MENU_SelectItem( hmenu, SYSMENU_SELECTED );
+    if (MENU_HasSysMenu( menu ))
+        MENU_SelectItem( hwndOwner, hmenu, SYSMENU_SELECTED );
 }
 
 
@@ -856,7 +859,7 @@
  *
  * Hide the sub-popup menus of this menu.
  */
-static void MENU_HideSubPopups( HMENU hmenu )
+static void MENU_HideSubPopups( HWND hwndOwner, HMENU hmenu )
 {
     MENUITEM *item;
     POPUPMENU *menu, *submenu;
@@ -877,9 +880,9 @@
 	hsubmenu = item->item_id;
     }
     submenu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hsubmenu );
-    MENU_HideSubPopups( hsubmenu );
+    MENU_HideSubPopups( hwndOwner, hsubmenu );
     if (submenu->hWnd) ShowWindow( submenu->hWnd, SW_HIDE );
-    MENU_SelectItem( hsubmenu, NO_SELECTED_ITEM );
+    MENU_SelectItem( hwndOwner, hsubmenu, NO_SELECTED_ITEM );
 }
 
 
@@ -902,7 +905,7 @@
     {
 	MENU_ShowPopup(hwndOwner, wndPtr->hSysMenu, 0, wndPtr->rectClient.left,
 		wndPtr->rectClient.top - menu->Height - 2*SYSMETRICS_CYBORDER);
-	if (selectFirst) MENU_SelectNextItem( wndPtr->hSysMenu );
+	if (selectFirst) MENU_SelectNextItem( hwndOwner, wndPtr->hSysMenu );
 	return wndPtr->hSysMenu;
     }
     item = ((MENUITEM *)USER_HEAP_LIN_ADDR(menu->hItems)) + menu->FocusedItem;
@@ -921,7 +924,7 @@
 		        wndPtr->rectWindow.left + item->rect.left,
 		        wndPtr->rectWindow.top + item->rect.bottom );
     }
-    if (selectFirst) MENU_SelectNextItem( (HMENU)item->item_id );
+    if (selectFirst) MENU_SelectNextItem( hwndOwner, (HMENU)item->item_id );
     return (HMENU)item->item_id;
 }
 
@@ -1027,7 +1030,7 @@
 	    {
 		if (menu->wFlags & MF_POPUP)
 		{
-		    MENU_HideSubPopups( hmenu );
+		    MENU_HideSubPopups( hwndOwner, hmenu );
 		    *hmenuCurrent = hmenu;
 		}
 		else return FALSE;
@@ -1037,8 +1040,8 @@
     }
     else
     {
-	MENU_HideSubPopups( hmenu );
-	MENU_SelectItem( hmenu, id );
+	MENU_HideSubPopups( hwndOwner, hmenu );
+	MENU_SelectItem( hwndOwner, hmenu, id );
 	*hmenuCurrent = MENU_ShowSubPopup( hwndOwner, hmenu, FALSE );
     }
     return TRUE;
@@ -1081,8 +1084,8 @@
 	hsubmenu = item->item_id;
     }
       /* Select first item of sub-popup */
-    MENU_SelectItem( hsubmenu, NO_SELECTED_ITEM );
-    MENU_SelectNextItem( hsubmenu );
+    MENU_SelectItem( hwndOwner, hsubmenu, NO_SELECTED_ITEM );
+    MENU_SelectNextItem( hwndOwner, hsubmenu );
     return TRUE;
 }
 
@@ -1113,12 +1116,12 @@
     }	
     if (id == NO_SELECTED_ITEM)
     {
-	MENU_SelectItem( *hmenuCurrent, NO_SELECTED_ITEM );
+	MENU_SelectItem( hwndOwner, *hmenuCurrent, NO_SELECTED_ITEM );
     }
     else if (menu->FocusedItem != id)
     {
-	MENU_HideSubPopups( hmenu );
-	MENU_SelectItem( hmenu, id );
+	MENU_HideSubPopups( hwndOwner, hmenu );
+	MENU_SelectItem( hwndOwner, hmenu, id );
 	*hmenuCurrent = MENU_ShowSubPopup( hwndOwner, hmenu, FALSE );
     }
     return TRUE;
@@ -1143,12 +1146,12 @@
 	hmenutmp = MENU_GetSubPopup( hmenuprev );
 	if (hmenutmp != *hmenuCurrent) hmenuprev = hmenutmp;
     }
-    MENU_HideSubPopups( hmenuprev );
+    MENU_HideSubPopups( hwndOwner, hmenuprev );
 
     if ((hmenuprev == hmenu) && !(menu->wFlags & MF_POPUP))
     {
 	  /* Select previous item on the menu bar */
-	MENU_SelectPrevItem( hmenu );
+	MENU_SelectPrevItem( hwndOwner, hmenu );
 	if (*hmenuCurrent != hmenu)
 	{
 	      /* A popup menu was displayed -> display the next one */
@@ -1186,8 +1189,8 @@
       /* If on menu-bar, go to next item */
     if (!(menu->wFlags & MF_POPUP))
     {
-	MENU_HideSubPopups( hmenu );
-	MENU_SelectNextItem( hmenu );
+	MENU_HideSubPopups( hwndOwner, hmenu );
+	MENU_SelectNextItem( hwndOwner, hmenu );
 	if (*hmenuCurrent != hmenu)
 	{
 	      /* A popup menu was displayed -> display the next one */
@@ -1203,7 +1206,7 @@
 	    hmenutmp = MENU_GetSubPopup( hmenuprev );
 	    if (hmenutmp != *hmenuCurrent) hmenuprev = hmenutmp;
 	}
-	MENU_HideSubPopups( hmenuprev );
+	MENU_HideSubPopups( hwndOwner, hmenuprev );
 	*hmenuCurrent = hmenuprev;
     }
 }
@@ -1293,17 +1296,17 @@
 		switch(msg->wParam)
 		{
 		case VK_HOME:
-		    MENU_SelectItem( hmenuCurrent, NO_SELECTED_ITEM );
-		    MENU_SelectNextItem( hmenuCurrent );
+		    MENU_SelectItem( hwnd, hmenuCurrent, NO_SELECTED_ITEM );
+		    MENU_SelectNextItem( hwnd, hmenuCurrent );
 		    break;
 
 		case VK_END:
-		    MENU_SelectItem( hmenuCurrent, NO_SELECTED_ITEM );
-		    MENU_SelectPrevItem( hmenuCurrent );
+		    MENU_SelectItem( hwnd, hmenuCurrent, NO_SELECTED_ITEM );
+		    MENU_SelectPrevItem( hwnd, hmenuCurrent );
 		    break;
 
 		case VK_UP:
-		    MENU_SelectPrevItem( hmenuCurrent );
+		    MENU_SelectPrevItem( hwnd, hmenuCurrent );
 		    break;
 
 		case VK_DOWN:
@@ -1311,7 +1314,7 @@
 		    if (!(menu->wFlags & MF_POPUP) && (hmenuCurrent == hmenu))
 			hmenuCurrent = MENU_ShowSubPopup( hwnd, hmenu, TRUE );
 		    else
-			MENU_SelectNextItem( hmenuCurrent );
+			MENU_SelectNextItem( hwnd, hmenuCurrent );
 		    break;
 
 		case VK_LEFT:
@@ -1357,7 +1360,7 @@
 		    else if (pos == (WORD)-1) MessageBeep(0);
 		    else
 		    {
-			MENU_SelectItem( hmenuCurrent, pos );
+			MENU_SelectItem( hwnd, hmenuCurrent, pos );
 			fClosed = !MENU_ExecFocusedItem( hwnd, hmenuCurrent,
 							 &hmenuCurrent );
 			
@@ -1378,9 +1381,10 @@
     }
     USER_HEAP_FREE( hMsg );
     ReleaseCapture();
-    MENU_HideSubPopups( hmenu );
+    MENU_HideSubPopups( hwnd, hmenu );
     if (menu->wFlags & MF_POPUP) ShowWindow( menu->hWnd, SW_HIDE );
-    MENU_SelectItem( hmenu, NO_SELECTED_ITEM );
+    MENU_SelectItem( hwnd, hmenu, NO_SELECTED_ITEM );
+    SendMessage( hwnd, WM_MENUSELECT, 0, MAKELONG( 0xffff, 0 ) );
     fEndMenuCalled = FALSE;
     return TRUE;
 }
@@ -1412,8 +1416,8 @@
     if (!wndPtr->wIDmenu) return;
     SendMessage( hwnd, WM_ENTERMENULOOP, 0, 0 );
       /* Select first selectable item */
-    MENU_SelectItem( wndPtr->wIDmenu, NO_SELECTED_ITEM );
-    MENU_SelectNextItem( (HMENU)wndPtr->wIDmenu );
+    MENU_SelectItem( hwnd, wndPtr->wIDmenu, NO_SELECTED_ITEM );
+    MENU_SelectNextItem( hwnd, (HMENU)wndPtr->wIDmenu );
     MENU_TrackMenu( (HMENU)wndPtr->wIDmenu, TPM_LEFTALIGN | TPM_LEFTBUTTON,
 		    0, 0, hwnd, NULL );
     SendMessage( hwnd, WM_EXITMENULOOP, 0, 0 );
@@ -1595,8 +1599,8 @@
     if (!(lpitem = MENU_FindItem( &hMenu, &wItemID, wHilite ))) return FALSE;
     if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return FALSE;
     if (menu->FocusedItem == wItemID) return TRUE;
-    MENU_HideSubPopups( hMenu );
-    MENU_SelectItem( hMenu, wItemID );
+    MENU_HideSubPopups( hWnd, hMenu );
+    MENU_SelectItem( hWnd, hMenu, wItemID );
     return TRUE;
 }
 
@@ -1957,16 +1961,13 @@
  */
 HMENU GetSystemMenu(HWND hWnd, BOOL bRevert)
 {
-	WND		*wndPtr;
-	wndPtr = WIN_FindWndPtr(hWnd);
-	if (!bRevert) {
-		return wndPtr->hSysMenu;
-		}
-	else {
-		DestroyMenu(wndPtr->hSysMenu);
-		wndPtr->hSysMenu = CopySysMenu();
-		}
-	return wndPtr->hSysMenu;
+    WND *wndPtr = WIN_FindWndPtr( hWnd );
+    if (!wndPtr) return 0;
+
+    if (!bRevert) return wndPtr->hSysMenu;
+    DestroyMenu(wndPtr->hSysMenu);
+    wndPtr->hSysMenu = CopySysMenu();
+    return wndPtr->hSysMenu;
 }
 
 /**********************************************************************