Release 980913

Fri Sep 11 13:14:35 1998  Andreas Mohr <100.30936@germany.net>

	* [files/file.c] [include/file.h]
	Fixed SetFilePointer to allow negative positions as in DOS.

	* [graphics/ddraw.c]
	Added some methods to IDirect3D.

	* [ole/compobj.c] [if1632/compobj.spec]
	Added/implemented CoCreateStandardMalloc16,
	CoGetClassObject, CoCreateInstance,
	LookupETask, SetETask, CoGetState16.

	* [loader/task.c]
	MakeProcInstance: return 0 if func == NULL.

	* [*/*] [tools/winapi-check]
	Added zillions of missing WINAPI's and __cdecl's.
	(oops, several caused by myself)
	Wrote script for automated checking.

	* [if1632/compobj.spec]
	Many stub names.

	* [misc/ddeml.c] [ole/compobj.c]
	Some stubs.

Tue Sep  9 21:36:48 1998  Anders Carlsson <anders.carlsson@linux.nu>

	* [dlls/comctl32/Makefile.in] [dlls/comctl32/commctrl.c]
	  [dlls/comctl32/tab.c] [include/commctrl.h] [include/tab.h]
        Added preliminary tab control support.

Sat Sep  5 16:27:20 1998  Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>

	* [graphics/psdrv/*]
	More changes to the PostScript driver:
	Implemented pens and solid brushes.
	Colour/greyscale for fonts, pens and brushes.
	To get coloured output you need to have *ColorDevice set to true
	in your PPD, otherwise you'll get greyscale.
	Landscape mode now works, as does non-A4 page sizes.
	Encoding of fonts to ANSI is better, Symbol works again.

	* [objects/dc.c] [include/gdi.h] [*/*]
	Moved dc->w.{text,background}Pixel to X11DRV_PDEVICE where they
	belong.

Sat Sep  5 05:12:09 1998  Ove Kaaven <ovek@arcticnet.no>

	* [include/dosexe.h] [include/miscemu.h] [include/msdos.h]
	  [loader/dos/dosvm.c] [loader/dos/module.c] [msdos/dpmi.c]
	  [msdos/int2f.c] [msdos/interrupts.c]
	Fixed portability. Adapted some code to make it easier to
	integrate the DOS subsystem with the DPMI subsystem, made
	the DPMI simulated real-mode interrupts be handled the V86
	way. Added support for .COM files. Made int2f DPMI check
	fail, to avoid pkunzip crashing in attempting to use DPMI.
	Generally moved stuff around a little.
	It is now technically possible to load several DOS programs
	into the same memory space. Not tested, though.

Fri Sep  4 21:40:45 1998  Marcus Meissner <marcus@jet.franken.de>

	* [if1632/kernel.spec]
	Changed 500-53x stubnames accordingly to nt3.51 krnl386.exe.

	* [win32/except.c]
	Fixed one bad program behaviour, (deleting SEH while in 
	first walk). RtlUnwind is broken too I think (it should unwind
	on success, not while walking the exception chain).

	* [ole/ole2nls.c]
	Get*DefaultLCID  returns 0x400|id. expected by one application.

	* [if1632/snoop.c]
	Handle non-standard SP returns more graceful.

	* [windows/class.c]
	hinstances are mostly irrelevant for win32.

	* [memory/string.c] [misc/registry.c]
	lstrcmpi32W: use toupper for characters < 0x100. (speedup hack
	for registry.c)
	Some small speedup hacks for registry.c

Thu Sep  3 20:40:16 1998  Eric Kohl <ekohl@abo.rhein-zeitung.de>

	* [Makefile.in][configure][configure.in][dlls/Makefile.in]
	  [dlls/comctl32/Makefile.in]
	Created dlls/comctl32 and moved the common controls stuff to it.

	* [misc/version.c]
	Removed COMCTL32_DllGetVersion. The fixed function is part
	of the common controls stuff.

	* [dlls/comctl32/*.c][include/commctrl.h]
	Added structure size tests.

	* [dlls/comctl32/toolbar.c]
	Fixed a bug in TOOLBAR_GetMaxWidth().

	* [dlls/comctl32/animate.c][include/animate.h]
	  [dlls/comctl32/comboex.c][include/comboex.h]
	  [dlls/comctl32/hotkey.c][include/hotkey.h]
	  [dlls/comctl32/listview.c][include/listview.h]
	  [dlls/comctl32/commctrl.c][include/commctrl.h]
	New files. Added Animation, ComboBoxEx, Hotkey and
	Listview control dummies.

	* [dlls/comctl32/tooltips.c]
	Fixed a display bug and font selection.

	* [dlls/comctl32/comctl32undoc.c][include/commctrl.h]
	Added missing DPA functions. Fixed bugs and published the
	function prototypes.

	* [documentation/common_controls]
	Updated.

Wed Sep  2 15:43:45 1998  Patrik Stridvall <ps@leissner.se>

	* [AUTHORS] [include/authors.h]
	Added myself as a Wine author.

	* [memory/virtual.c] [objects/dc.c]
	Fixed runtime errors for Solaris.

	* [misc/ddeml.c] [objects/gdiobj.c]
	Minor fixes.

	* [win32/device.c]
	Added stubs for IFSMgr VxDCall and
	a partial implementation of IFSMgr DeviceIo.

	* [relay32/Makefile.in] [relay32/builtin32.c] [relay32/imm32.spec] 
	  [relay32/msnet32.spec] [relay32/oledlg.spec]
	Added new spec files for IMM32.DLL, MSNET32.DLL, OLEDLG.DLL.

	* [misc/Makefile.in] [misc/imm.c] [include/imm.h]
	Added news files for implementation of IMM32.DLL. 
	All functions return 0 as is correct for all Western Languages.

	* [ole/Makefile.in] [ole/oledlg.c] [include/oledlg.h]
	Added new files for implementation of OLEDLG.DLL.
	Added stubs with FIXME:s for all functions.

Wed Sep  2 10:50:00 1998  Juergen Schmied <juergen.schmied@metronet.de>

	* [dlls/shell32/contmenu.c][dlls/shell32/shellole.c]
	  [dlls/shell32/shlfolder.c][dlls/shell32/shlview.c]
	  [documentation/shell32][include/shell.h]
	Clean up, bugfixes.
	
	* [dlls/shell32/enumidlist.c]
	Fileattributes implemented.
	
	* [dlls/shell32/pidl.c]
	Class pidlmgr splited into functions, structures changed, 
	some functions rewritten.

	* [dlls/shell32/shell32_main.c]
	Small changes and bugfixes SHGetFileInfoA, SHGetSpecialFolderLocation.
	
	* [dlls/shell32/shellord.c][relay32/shell32.spec]
	Parameter documented, implemented SHCloneSpecialIDList.
	Stub improved ShellExecuteEx32A.
	New stubs SHFind_InitMenuPopup, FileMenu_InitMenuPopup, 
	FileMenu_Create, FileMenu_TrackPopupMenuEx, SHWinHelp,
	SHRunConrolPanel, DAD_ShowDragImage, FileMenu_Destroy,
	SHGetDataFromIDListA, SHFileOperationA.
	
	* [include/winnls.h][include/ole2nls.c]
	TIME_FORCE24HOURFORMAT, TIME_NOTIMEMARKER implemented
	in OLE_GetFormatA, GetTimeFormat32A.
	
	* [win32/code_page.c]
	WideCharToMultiByte: parameter checking and returning of strlen
	implemented.
	
	* [windows/keyboard.c][windows/defwnd.c]
	Debug messages added.
	
	* [windows/win.c]
	WIN_SetWindowLong GWL_STYLE and GWL_EXSTYLE implemented.

	* [controls/menu.c]
	Missing line added.

	* [include/winerror.h]
	Macros for SUCCEEDED and FAILED added.

Mon Aug 31 00:55:31 1998  Ulrich Weigand <weigand@informatik.uni-erlangen.de>

	* [loader/module.c]
	Bugfix: LoadModule16 should *not* call LoadModule32.

	* [files/dos_fs.c]
	Bugfix: don't crash if given directory doesn't exist.

Sat Aug 29 15:00:49 1998  Turchanov Sergey <turchanov@usa.net>

	* [include/mmsystem.h][multimedia/mmsystem.c][relay32/winmm.spec]
	Almost completed implementation of [snd]PlaySound (except
	flags SND_ALIAS_ID and SND_APPLICATION).

	* [if1632/user.spec][windows/winpos.c]
	Added SetWindowRgn16 stub.

Sat Aug 29 02:53:31 1998  Alexander Lukyanov <lav@long.yar.ru>

	* [files/drive.c]
	GetDriveType32A: return DRIVE_DOESNOTEXIST in case of non
	existent drive.

	* [msdos/int21.c]
	INT21_FindFirstFCB: check drive validity to prevent oops.

	* [win32/file.c]
	CreateFile32A: duplicate STD_{INPUT,OUTPUT}_HANDLE.

	* [files/dos_fs.c]
	Make DOSFS_OpenDir treat "" as "/".
	DOSFS_OpenDevice: duplicate STD_{INPUT,OUTPUT}_HANDLE.

	* [windows/dialog.c]
	GetNextDlgTabItem32: use last/first item instead of first/last
	when hwndCtrl==0. This fixes initial focus.

Sat Aug 29 02:46:32 1998  Adrian Harvey <adrian@select.com.au>

	* [include/process.h] [include/process.c]
	Renamed PROCESS_SELF to CURRENT_PROCESS_PSEUDOHANDLE in line
	with thread constant, and Win32 documentation (which calls it
	a pseudohandle.)  Made GetCurrentProcess actually use this
	constant instead of the value.

	* [include/process.h] [include/thread.h] [scheduler/thread.c]
	  [scheduler/process.c] [scheduler/handle.c]
	Modify HANDLE_GetObjPtr to understand about
	CURRENT_THREAD_PSEUDOHANDLE and CURRENT_PROCESS_PSEUDOHANDLE.
	This allows DuplicateHandle to do the correct thing with these
	handles.  Removed now duplicate functionality from THREAD_GetPtr
	and PROCESS_GetPtr.

	* [loader/ne/segment.c]
	Fixed two places where HFILE32s were being created and passed to
	16-bit code. This should unbreak NE self-loading code.
	Added two casts to remove compile time warnings.

Fri Aug 28 21:04:13 1998  Joseph Pranevich <knight@baltimore.wwaves.com>

	* [msdos/dosmem.c] [msdos/int2f.c]
	Added beginnings of DOS error table.

	* [msdos/int1a.c]
	Stub for subfunction 0xb0.

	* [msdos/int10.c] [loader/dos/dosvm.c]
	INT 10 support completely rewritten and lots of debugging
	added. Now, DOS apps that use INT 10 to write to the screen will
	work. (Beyond Zork does, at least. Somewhat.)

	* [include/miscemu.h] [msdos/dosmem.c] [msdos/int21.c]
	Another shot at getting MS's generic error message facility
	right.

	* [msdos/int21.c]
	Command.Com wanted to set its own PSP address. I let it.

Wed Aug 26 12:26:20 1998  Matthew Toseland <Matthew.Toseland@btinternet.com>

	* [include/file.h] [misc/lzexpand.c]
	Fixed LZCopy16 by fixing HFILE16/HFILE32 convertor macros so don't
	convert lzw handles.

Tue Aug 25 22:22:55 1998  Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>

	* [misc/registry.c]
	In RegEnumvalue, ivalue == 0 is a legal request and should
	return the first entry.

	* [msdos/int21.c]
	Add handling for Int21-48/49 in Win16. Makes blinker demo work.

	* [windows/winproc.c]
	Add Msg32A<->Msg32W translation for LB_ADDSTRING.

Tue Aug 25 21:03:31 1998  Kristian Nielsen  <kristian.nielsen@risoe.dk>

	* [windows/win.c]
	Fix for SetParent(): MS Windows 3.11 does not clear the WS_CHILD
	flag when a child window is reparented to the desktop window.

Mon Aug 24 20:55:22 1998  Berend Reitsma <berend at asset-control dot com>

	* [controls/menu.c]
	Menus created with SetMenuItemInfo and InsertMenuItem should
	work now.

Sun Aug 23 23:23:23 1998  Alex Korobka <korobka@ams.sunysb.edu>

	* [controls/combo.c]
	Added CB_GETITEMHEIGHT.

	* [windows/winpos.c] 
	WM_NCHITTEST, SWP_FRAMECHANGED bugfixes.

Sat Aug 22 21:15:29 1998 Alex Priem <alexp@sci.kun.nl>

	* [files/profile.c] [include/windows.h]
	Added GetPrivateProfileSectionNames[AW],GetPrivateProfileSectionW,
	GetPrivateProfileStructW, GetProfileSectionW,
	WriteProfileSection[AW], WritePrivateProfileStructW. 
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index 90796db..3939b38 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -97,7 +97,8 @@
   sv->lpvtbl=&svvt;
   
   sv->mpidl = ILClone(pidl);
-
+  sv->hMenu=0;
+  
   sv->pSFParent = pFolder;
   if(sv->pSFParent)
     sv->pSFParent->lpvtbl->fnAddRef(sv->pSFParent);
@@ -118,8 +119,8 @@
 
   TRACE(shell,"%p\n",this);
 
-  dwStyle = WS_TABSTOP | WS_VISIBLE |WS_CHILD | WS_BORDER | LVS_REPORT |
-            LVS_SHAREIMAGELISTS | LVS_EDITLABELS ;
+  dwStyle = WS_TABSTOP | WS_VISIBLE | WS_CHILD | WS_BORDER |
+  		 LVS_ICON | LVS_SHAREIMAGELISTS | LVS_EDITLABELS ;
 
   this->hWndList=CreateWindowEx32A( WS_EX_CLIENTEDGE,WC_LISTVIEW32A,NULL,dwStyle,
   								0,0,0,0,
@@ -143,7 +144,7 @@
 int  nColumn4=100;
 
 BOOL32 ShellView_InitList(LPSHELLVIEW this)
-{ LV_COLUMN   lvColumn;
+{ LVCOLUMN32A lvColumn;
   CHAR        szString[50];
 
   TRACE(shell,"%p\n",this);
@@ -152,29 +153,32 @@
   ListView_DeleteAllItems(this->hWndList);		/*empty the list*/
 
   //initialize the columns
-  lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT |  LVCF_SUBITEM;
+  lvColumn.mask = LVCF_FMT | LVCF_WIDTH  |  LVCF_SUBITEM;
+
   lvColumn.fmt = LVCFMT_LEFT;
   lvColumn.pszText = szString;
 
   lvColumn.cx = nColumn1;
   strcpy(szString,"File");
   /*LoadString32A(shell32_hInstance, IDS_COLUMN1, szString, sizeof(szString));*/
-  ListView_InsertColumn(this->hWndList, 0, &lvColumn);
+  ListView_InsertColumn32A(this->hWndList, 0, &lvColumn);
 
   lvColumn.cx = nColumn2;
-  strcpy(szString,"IDS_COLUMN2");
-  ListView_InsertColumn(this->hWndList, 1, &lvColumn);
+  strcpy(szString,"COLUMN2");
+  ListView_InsertColumn32A(this->hWndList, 1, &lvColumn);
 
   lvColumn.cx = nColumn3;
-  strcpy(szString,"IDS_COLUMN3");
-  ListView_InsertColumn(this->hWndList, 2, &lvColumn);
+  strcpy(szString,"COLUMN3");
+  ListView_InsertColumn32A(this->hWndList, 2, &lvColumn);
 
   lvColumn.cx = nColumn4;
-  strcpy(szString,"IDS_COLUMN4");
-  ListView_InsertColumn(this->hWndList, 3, &lvColumn);
+  strcpy(szString,"COLUMN4");
+  ListView_InsertColumn32A(this->hWndList, 3, &lvColumn);
 
-  ListView_SetImageList(this->hWndList, ShellBigIconList, LVSIL_SMALL);
-
+  ListView_SetImageList(this->hWndList, ShellSmallIconList, LVSIL_SMALL);
+  ListView_SetImageList(this->hWndList, ShellBigIconList, LVSIL_NORMAL);
+  ListView_SetBkColor(this->hWndList, 0x00800000 );
+  
   return TRUE;
 }
 /**************************************************************************
@@ -204,11 +208,11 @@
 { LPENUMIDLIST   pEnumIDList;
   LPITEMIDLIST   pidl;
   DWORD          dwFetched;
-  LV_ITEM  lvItem;
+  LVITEM32A      lvItem;
   
   TRACE(shell,"%p\n",this);
   
-  if(S_OK == this->pSFParent->lpvtbl->fnEnumObjects(this->pSFParent,this->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList))
+  if(SUCCEEDED(this->pSFParent->lpvtbl->fnEnumObjects(this->pSFParent,this->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList)))
   { SendMessage32A(this->hWndList, WM_SETREDRAW, FALSE, 0); /*turn the listview's redrawing off*/
 
     while((S_OK == pEnumIDList->lpvtbl->fnNext(pEnumIDList,1, &pidl, &dwFetched)) && dwFetched)
@@ -219,7 +223,7 @@
       lvItem.lParam = (LPARAM)ILClone(pidl);		/*set the item's data*/
       lvItem.pszText = LPSTR_TEXTCALLBACK32A;		/*get text on a callback basis*/
       lvItem.iImage = I_IMAGECALLBACK;				/*get the image on a callback basis*/
-      ListView_InsertItem(this->hWndList, &lvItem);	/*add the item*/    
+      ListView_InsertItem32A(this->hWndList, &lvItem);	/*add the item*/    
    }
 
    /*sort the items*/
@@ -267,9 +271,11 @@
 {   CHAR			szText[MAX_PATH];
 	MENUITEMINFO32A	mii;
 	int				nTools,i;
-	HMENU32 		hSubMenu = CreatePopupMenu32();
+	HMENU32 		hSubMenu;
 
 	TRACE(shell,"(%p) stub\n",this);
+
+    hSubMenu = CreatePopupMenu32();
 	if(hSubMenu)
 	{ /*get the number of items in our global array*/
 	  for(nTools = 0; g_Tools[nTools].idCommand != -1; nTools++){}
@@ -478,7 +484,7 @@
 }
 
 /**************************************************************************
-* CShellView::AddRemoveDockingWindow()
+* ShellView_AddRemoveDockingWindow()
 */   
 BOOL32 ShellView_AddRemoveDockingWindow(LPSHELLVIEW this, BOOL32 bAdd)
 {	TRACE(shell,"(%p)->(badd=0x%08x) stub\n",this,bAdd);
@@ -537,28 +543,6 @@
 }
 
 /**************************************************************************
-* ShellView_OnCommand()
-*/   
-LRESULT ShellView_OnCommand(LPSHELLVIEW this,DWORD dwCmdID, DWORD dwCmd, HWND32 hwndCmd)
-{	TRACE(shell,"(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",this, dwCmdID, dwCmd, hwndCmd);
-	switch(dwCmdID)
-    { case IDM_VIEW_FILES:
-        g_bViewKeys = ! g_bViewKeys;
-        IShellView_Refresh(this);
-        break;
-
-	  case IDM_VIEW_IDW:
-        g_bShowIDW = ! g_bShowIDW;
-        ShellView_AddRemoveDockingWindow(this, g_bShowIDW);
-        break;
-   
-	  case IDM_MYFILEITEM:
-        MessageBeep32(MB_OK);
-        break;
-	}
-	return 0;
-}
-/**************************************************************************
 * ShellView_CanDoIDockingWindow()
 */   
 BOOL32 ShellView_CanDoIDockingWindow(LPSHELLVIEW this)
@@ -590,12 +574,12 @@
 	CheckMenuItem32(hMenu, IDM_VIEW_FILES, MF_BYCOMMAND | (g_bViewKeys ? MF_CHECKED: MF_UNCHECKED));
 
 	if(ShellView_CanDoIDockingWindow(this))
-    { EnableMenuItem32(hMenu, IDM_VIEW_IDW, MF_BYCOMMAND | MF_ENABLED);
-      CheckMenuItem32(hMenu, IDM_VIEW_IDW, MF_BYCOMMAND | (g_bShowIDW ? MF_CHECKED: MF_UNCHECKED));
+	{ EnableMenuItem32(hMenu, IDM_VIEW_IDW, MF_BYCOMMAND | MF_ENABLED);
+	  CheckMenuItem32(hMenu, IDM_VIEW_IDW, MF_BYCOMMAND | (g_bShowIDW ? MF_CHECKED: MF_UNCHECKED));
 	}
 	else
 	{ EnableMenuItem32(hMenu, IDM_VIEW_IDW, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
-      CheckMenuItem32(hMenu, IDM_VIEW_IDW, MF_BYCOMMAND | MF_UNCHECKED);
+	  CheckMenuItem32(hMenu, IDM_VIEW_IDW, MF_BYCOMMAND | MF_UNCHECKED);
 	}
 	return 0;
 }
@@ -604,7 +588,7 @@
 *  ShellView_UpdateShellSettings()
    
 **************************************************************************/
-typedef void (WINAPI *PFNSHGETSETTINGSPROC)(LPSHELLFLAGSTATE lpsfs, DWORD dwMask);
+typedef void (CALLBACK *PFNSHGETSETTINGSPROC)(LPSHELLFLAGSTATE lpsfs, DWORD dwMask);
 
 
 void ShellView_UpdateShellSettings(LPSHELLVIEW this)
@@ -664,202 +648,239 @@
 *   ShellView_DoContextMenu()
 */   
 void ShellView_DoContextMenu(LPSHELLVIEW this, WORD x, WORD y, BOOL32 fDefault)
-{	UINT32			uSelected = ListView_GetSelectedCount(this->hWndList);
+{	UINT32		uCommand, i, uSelected = ListView_GetSelectedCount(this->hWndList);
+	HMENU32 hMenu;
+	BOOL32  fExplore = FALSE;
+	HWND32  hwndTree = 0;
+	INT32          	nMenuIndex;
 	LPITEMIDLIST	*aSelectedItems;
-	UINT32			i;
-	LPCONTEXTMENU	pContextMenu = NULL;
-	LVITEM			lvItem;
-	UINT32  		uCommand;
+	LVITEM32A	lvItem;
 	MENUITEMINFO32A	mii;
-	int            	nMenuIndex;
-    CMINVOKECOMMANDINFO  cmi;
-
+	LPCONTEXTMENU	pContextMenu = NULL;
+	CMINVOKECOMMANDINFO32  cmi;
+	
 	TRACE(shell,"(%p)->(0x%08x 0x%08x 0x%08x) stub\n",this, x, y, fDefault);
 	aSelectedItems = (LPITEMIDLIST*)SHAlloc(uSelected * sizeof(LPITEMIDLIST));
 
 	if(aSelectedItems)
-	{ ZeroMemory(&lvItem, sizeof(lvItem));
+	{ TRACE(shell,"-- aSelectedItems\n");
+	  ZeroMemory(&lvItem, sizeof(lvItem));
 	  lvItem.mask = LVIF_STATE | LVIF_PARAM;
 	  lvItem.stateMask = LVIS_SELECTED;
 	  lvItem.iItem = 0;
 
 	  i = 0;
    
-	  while(ListView_GetItem(this->hWndList, &lvItem) && (i < uSelected))
-      { if(lvItem.state & LVIS_SELECTED)
-        { aSelectedItems[i] = (LPITEMIDLIST)lvItem.lParam;
-          i++;
-        }
-        lvItem.iItem++;
-      }
+	  while(ListView_GetItem32A(this->hWndList, &lvItem) && (i < uSelected))
+	  { if(lvItem.state & LVIS_SELECTED)
+	    { aSelectedItems[i] = (LPITEMIDLIST)lvItem.lParam;
+	      i++;
+	    }
+	    lvItem.iItem++;
+	  }
 
 	  this->pSFParent->lpvtbl->fnGetUIObjectOf(this->pSFParent, this->hWndParent, uSelected,
       				(LPCITEMIDLIST*)aSelectedItems, &IID_IContextMenu, NULL,(LPVOID*)&pContextMenu);
    
 	  if(pContextMenu)
-      { HMENU32 hMenu = CreatePopupMenu32();
+	  { TRACE(shell,"-- pContextMenu\n");
+	    hMenu = CreatePopupMenu32();
 
         /* See if we are in Explore or Open mode. If the browser's tree is present, 
         then we are in Explore mode.*/
         
-	    BOOL32  fExplore = FALSE;
-	    HWND32  hwndTree = 0;
-	    if(S_OK==(this->pShellBrowser->lpvtbl->fnGetControlWindow(this->pShellBrowser,FCW_TREE, &hwndTree)) && hwndTree)
-        { fExplore = TRUE;
-        }
+	    fExplore = FALSE;
+	    hwndTree = 0;
+	    if(SUCCEEDED(this->pShellBrowser->lpvtbl->fnGetControlWindow(this->pShellBrowser,FCW_TREE, &hwndTree)) && hwndTree)
+	    { TRACE(shell,"-- fExplore\n");
+	      fExplore = TRUE;
+	    }
 
-	    if(hMenu && S_OK==(pContextMenu->lpvtbl->fnQueryContextMenu(pContextMenu,
+	    if(hMenu && SUCCEEDED(pContextMenu->lpvtbl->fnQueryContextMenu(pContextMenu,
         					hMenu,0,MENU_OFFSET,MENU_MAX,CMF_NORMAL | 
-							(uSelected != 1 ? 0 : CMF_CANRENAME) | (fExplore ? CMF_EXPLORE : 0))))
-        { if(fDefault)
-            { uCommand = 0;
+							(uSelected != 1 ? 0 : CMF_CANRENAME) |
+                            (fExplore ? CMF_EXPLORE : 0))))
+	    { if(fDefault)
+	      { TRACE(shell,"-- fDefault\n");
+	        uCommand = 0;
             
-              ZeroMemory(&mii, sizeof(mii));
-              mii.cbSize = sizeof(mii);
-              mii.fMask = MIIM_STATE | MIIM_ID;
+	        ZeroMemory(&mii, sizeof(mii));
+	        mii.cbSize = sizeof(mii);
+	        mii.fMask = MIIM_STATE | MIIM_ID;
 
-              nMenuIndex = 0;
+	        nMenuIndex = 0;
 
-              //find the default item in the menu
-              while(GetMenuItemInfo32A(hMenu, nMenuIndex, TRUE, &mii))
-              { if(mii.fState & MFS_DEFAULT)
-                { uCommand = mii.wID;
-                  break;
-                }
-                nMenuIndex++;
-              }
-            }
-            else
-            { uCommand = TrackPopupMenu32( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,this->hWnd,NULL);
-            }
+	        /*find the default item in the menu*/
+	        while(GetMenuItemInfo32A(hMenu, nMenuIndex, TRUE, &mii))
+	        { if(mii.fState & MFS_DEFAULT)
+	          { uCommand = mii.wID;
+	            break;
+	          }
+	          nMenuIndex++;
+	        }
+	      }
+	      else
+	      { TRACE(shell,"-- ! fDefault\n");
+	        uCommand = TrackPopupMenu32( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,this->hWnd,NULL);
+	      }
          
-            if(uCommand > 0)
-            { ZeroMemory(&cmi, sizeof(cmi));
-              cmi.cbSize = sizeof(cmi);
-              cmi.hwnd = this->hWndParent;
-              cmi.lpVerb = (LPCSTR)MAKEINTRESOURCE32A(uCommand - MENU_OFFSET);
-			  pContextMenu->lpvtbl->fnInvokeCommand(pContextMenu, &cmi);
-            }
-            DestroyMenu32(hMenu);
-         }
-         pContextMenu->lpvtbl->fnRelease(pContextMenu);
-      }
-      SHFree(aSelectedItems);
+	      if(uCommand > 0)
+	      { TRACE(shell,"-- ! uCommand\n");
+	        ZeroMemory(&cmi, sizeof(cmi));
+	        cmi.cbSize = sizeof(cmi);
+	        cmi.hwnd = this->hWndParent;
+	        cmi.lpVerb = (LPCSTR)MAKEINTRESOURCE32A(uCommand - MENU_OFFSET);
+			pContextMenu->lpvtbl->fnInvokeCommand(pContextMenu, &cmi);
+	      }
+	      DestroyMenu32(hMenu);
+	    }
+	  pContextMenu->lpvtbl->fnRelease(pContextMenu);
+	  }
+	  SHFree(aSelectedItems);
 	}
 }
 
 /**************************************************************************
+* ShellView_OnCommand()
+*/   
+LRESULT ShellView_OnCommand(LPSHELLVIEW this,DWORD dwCmdID, DWORD dwCmd, HWND32 hwndCmd)
+{	TRACE(shell,"(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",this, dwCmdID, dwCmd, hwndCmd);
+	switch(dwCmdID)
+	{ case IDM_VIEW_FILES:
+	    g_bViewKeys = ! g_bViewKeys;
+	    IShellView_Refresh(this);
+	    break;
+
+	  case IDM_VIEW_IDW:
+	    g_bShowIDW = ! g_bShowIDW;
+	    ShellView_AddRemoveDockingWindow(this, g_bShowIDW);
+	    break;
+   
+	  case IDM_MYFILEITEM:
+	    MessageBeep32(MB_OK);
+	    break;
+
+	  default:
+	    FIXME(shell,"-- unknown command\n");
+	}
+	return 0;
+}
+
+/**************************************************************************
 * ShellView_OnNotify()
 */
    
 LRESULT ShellView_OnNotify(LPSHELLVIEW this, UINT32 CtlID, LPNMHDR lpnmh)
-{ NM_LISTVIEW *lpnmlv = (NM_LISTVIEW*)lpnmh;
-  LV_DISPINFO *lpdi = (LV_DISPINFO *)lpnmh;
-  LPITEMIDLIST pidl;
-  DWORD dwCursor; 
-  STRRET   str;  
-  UINT32  uFlags;
-  IExtractIcon *pei;
+{	NM_LISTVIEW *lpnmlv = (NM_LISTVIEW*)lpnmh;
+	NMLVDISPINFO32A *lpdi = (NMLVDISPINFO32A *)lpnmh;
+	LPITEMIDLIST pidl;
+	DWORD dwCursor; 
+	STRRET   str;  
+	UINT32  uFlags;
+	IExtractIcon *pei;
   
-  TRACE(shell,"%p CtlID=%u lpnmh->code=%x\n",this,CtlID,lpnmh->code);
+	TRACE(shell,"%p CtlID=%u lpnmh->code=%x\n",this,CtlID,lpnmh->code);
   
-  switch(lpnmh->code)
-  { case NM_SETFOCUS:
-	  TRACE(shell,"NM_SETFOCUS %p\n",this);
-      ShellView_OnSetFocus(this);
-      break;
+	switch(lpnmh->code)
+	{   case NM_SETFOCUS:
+	    TRACE(shell,"NM_SETFOCUS %p\n",this);
+	    ShellView_OnSetFocus(this);
+	    break;
 
-    case NM_KILLFOCUS:
-	  TRACE(shell,"NM_KILLFOCUS %p\n",this);
-      ShellView_OnDeactivate(this);
-      break;
+	  case NM_KILLFOCUS:
+	    TRACE(shell,"NM_KILLFOCUS %p\n",this);
+	    ShellView_OnDeactivate(this);
+	    break;
 
-    case HDN_ENDTRACK:
-	  TRACE(shell,"HDN_ENDTRACK %p\n",this);
-      /*nColumn1 = ListView_GetColumnWidth(this->hWndList, 0);
-      nColumn2 = ListView_GetColumnWidth(this->hWndList, 1);*/
-	  return 0;
+	  case HDN_ENDTRACK32A:
+	    TRACE(shell,"HDN_ENDTRACK32A %p\n",this);
+	    /*nColumn1 = ListView_GetColumnWidth(this->hWndList, 0);
+	    nColumn2 = ListView_GetColumnWidth(this->hWndList, 1);*/
+	    return 0;
    
-   case LVN_DELETEITEM:
-	  TRACE(shell,"LVN_DELETEITEM %p\n",this);
-      SHFree((LPITEMIDLIST)lpnmlv->lParam);     /*delete the pidl because we made a copy of it*/
-      break;
+	  case LVN_DELETEITEM:
+	    TRACE(shell,"LVN_DELETEITEM %p\n",this);
+	    SHFree((LPITEMIDLIST)lpnmlv->lParam);     /*delete the pidl because we made a copy of it*/
+	    break;
    
 #ifdef LVN_ITEMACTIVATE
-   case LVN_ITEMACTIVATE:
-
-#else    //LVN_ITEMACTIVATE
-   case NM_DBLCLK:
-   case NM_RETURN:
-#endif   //LVN_ITEMACTIVATE
-	  TRACE(shell,"LVN_ITEMACTIVATE | NM_RETURN %p\n",this);
-      ShellView_DoContextMenu(this, 0, 0, TRUE);
-      return 0;
+	  case LVN_ITEMACTIVATE:
+#else
+	  case NM_DBLCLK:
+	  case NM_RETURN:
+#endif
+	    TRACE(shell,"LVN_ITEMACTIVATE | NM_RETURN %p\n",this);
+	    ShellView_DoContextMenu(this, 0, 0, TRUE);
+	    return 0;
    
-   case LVN_GETDISPINFO:
-      TRACE(shell,"LVN_GETDISPINFO %p\n",this);
-      pidl = (LPITEMIDLIST)lpdi->item.lParam;
+	  case NM_RCLICK:
+	    TRACE(shell,"NM_RCLICK %p\n",this);
+	    dwCursor = GetMessagePos();
+	    ShellView_DoContextMenu(this, LOWORD(dwCursor), HIWORD(dwCursor), FALSE);
+
+	  case LVN_GETDISPINFO32A:
+	    TRACE(shell,"LVN_GETDISPINFO32A %p\n",this);
+	    pidl = (LPITEMIDLIST)lpdi->item.lParam;
 
 
-      if(lpdi->item.iSubItem)	      /*is the sub-item information being requested?*/
-      { if(lpdi->item.mask & LVIF_TEXT)	 /*is the text being requested?*/
-        { if(PidlMgr_IsValue(NULL,pidl))	/*is this a value or a folder?*/
-          {  PidlMgr_GetDataText(NULL,this->mpidl, pidl, lpdi->item.pszText, lpdi->item.cchTextMax);
-             if(!*lpdi->item.pszText)
-               sprintf(lpdi->item.pszText, "file attrib %u", lpdi->item.iSubItem );
-          }
-          else  /*its a folder*/
-          { sprintf(lpdi->item.pszText, "folder attrib %u", lpdi->item.iSubItem );
-          }
-        }
-      }
-      else       /*the item text is being requested*/
-      { if(lpdi->item.mask & LVIF_TEXT)       /*is the text being requested?*/
-        { if(S_OK==this->pSFParent->lpvtbl->fnGetDisplayNameOf(this->pSFParent,pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &str))
-          { if(STRRET_WSTR == str.uType)
-            { WideCharToLocal32(lpdi->item.pszText, str.u.pOleStr, lpdi->item.cchTextMax);
-              SHFree(str.u.pOleStr);
-            }
-            if(STRRET_CSTR == str.uType)
-            { strncpy(lpdi->item.pszText, str.u.cStr, lpdi->item.cchTextMax);
-            }
-          }
-        }
+	    if(lpdi->item.iSubItem)		  /*is the sub-item information being requested?*/
+	    { if(lpdi->item.mask & LVIF_TEXT)	 /*is the text being requested?*/
+	      { if(_ILIsValue(pidl))	/*is this a value or a folder?*/
+	        {  _ILGetDataText(this->mpidl, pidl, lpdi->item.pszText, lpdi->item.cchTextMax);
+	           if(!*lpdi->item.pszText)
+	           sprintf(lpdi->item.pszText, "file attrib %u", lpdi->item.iSubItem );
+	        }
+	        else  /*its a folder*/
+	        { sprintf(lpdi->item.pszText, "folder attrib %u", lpdi->item.iSubItem );
+	        }
+	      }
+	    }
+	    else	   /*the item text is being requested*/
+	    { if(lpdi->item.mask & LVIF_TEXT)	   /*is the text being requested?*/
+	      { if(SUCCEEDED(this->pSFParent->lpvtbl->fnGetDisplayNameOf(this->pSFParent,pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &str)))
+	        { if(STRRET_WSTR == str.uType)
+	          { WideCharToLocal32(lpdi->item.pszText, str.u.pOleStr, lpdi->item.cchTextMax);
+	            SHFree(str.u.pOleStr);
+	          }
+	          if(STRRET_CSTR == str.uType)
+	          { strncpy(lpdi->item.pszText, str.u.cStr, lpdi->item.cchTextMax);
+	          }
+	        }
+	      }
 
-        if(lpdi->item.mask & LVIF_IMAGE) 		/*is the image being requested?*/
-        { if(S_OK == (this->pSFParent->lpvtbl->fnGetUIObjectOf(this->pSFParent,this->hWnd,1,
-        						(LPCITEMIDLIST*)&pidl, (REFIID)&IID_IExtractIcon, NULL, (LPVOID*)&pei)))
-          { //GetIconLoaction will give us the index into our image list
-            pei->lpvtbl->fnGetIconLocation(pei, GIL_FORSHELL, NULL, 0, &lpdi->item.iImage, &uFlags);
-	        pei->lpvtbl->fnRelease(pei);
-          }
-        }
-      }
-      TRACE(shell,"-- text=%s image=%x\n",lpdi->item.pszText, lpdi->item.iImage);
-      return 0;
+	      if(lpdi->item.mask & LVIF_IMAGE) 		/*is the image being requested?*/
+	      { if(SUCCEEDED(this->pSFParent->lpvtbl->fnGetUIObjectOf(this->pSFParent,this->hWnd,1,
+				(LPCITEMIDLIST*)&pidl, (REFIID)&IID_IExtractIcon, NULL, (LPVOID*)&pei)))
+	        { //GetIconLoaction will give us the index into our image list
+	          pei->lpvtbl->fnGetIconLocation(pei, GIL_FORSHELL, NULL, 0, &lpdi->item.iImage, &uFlags);
+	          pei->lpvtbl->fnRelease(pei);
+	        }
+	      }
+	    }
+	    TRACE(shell,"-- text=%s image=%x\n",lpdi->item.pszText, lpdi->item.iImage);
+	    return 0;
 
-    case NM_RCLICK:
-	  TRACE(shell,"NM_RCLICK %p\n",this);
-      dwCursor = GetMessagePos();
-      ShellView_DoContextMenu(this, LOWORD(dwCursor), HIWORD(dwCursor), FALSE);
+	  case NM_CLICK:
+	    TRACE(shell,"NM_CLICK %p\n",this);
+	    break;
 
-    case NM_CLICK:
-	  TRACE(shell,"NM_CLICK %p\n",this);
-      break;
+	  case LVN_ITEMCHANGING:
+	    TRACE(shell,"LVN_ITEMCHANGING %p\n",this);
+	    break;
 
-    case LVN_ITEMCHANGING:
-	  TRACE(shell,"LVN_ITEMCHANGING %p\n",this);
-      break;
+	  case LVN_ITEMCHANGED:
+	    TRACE(shell,"LVN_ITEMCHANGED %p\n",this);
+	    break;
 
-    case NM_CUSTOMDRAW:
-	  TRACE(shell,"NM_CUSTOMDRAW %p\n",this);
-      break;
+	  case NM_CUSTOMDRAW:
+	    TRACE(shell,"NM_CUSTOMDRAW %p\n",this);
+	    break;
 
-	default:
-      WARN (shell,"-- WM_NOTIFY unhandled\n");
-    return 0;
-  }
-  return 0;
+	  default:
+	    WARN (shell,"-- WM_NOTIFY unhandled\n");
+	    return 0;
+	}
+	return 0;
 }
 
 /**************************************************************************
@@ -875,7 +896,8 @@
 LRESULT CALLBACK ShellView_WndProc(HWND32 hWnd, UINT32 uMessage, WPARAM32 wParam, LPARAM lParam)
 { LPSHELLVIEW pThis = (LPSHELLVIEW)GetWindowLong32A(hWnd, GWL_USERDATA);
   LPCREATESTRUCT32A lpcs;
-
+  DWORD dwCursor;
+  
   FIXME(shell,"(hwnd=%x msg=%x wparm=%x lparm=%lx)\n",hWnd, uMessage, wParam, lParam);
     
   switch (uMessage)
@@ -970,6 +992,11 @@
 
    case WM_PARENTNOTIFY:
       TRACE(shell,"WM_PARENTNOTIFY\n");
+      if ( LOWORD(wParam) == WM_RBUTTONDOWN ) /* fixme: should not be handled here*/
+      { dwCursor = GetMessagePos();
+	ShellView_DoContextMenu(pThis, LOWORD(dwCursor), HIWORD(dwCursor), FALSE);
+	return TRUE;
+      }
       break;
 
    case WM_MOUSEACTIVATE:
@@ -1033,7 +1060,7 @@
   return this->ref;
 }
 /**************************************************************************
-*  IShellView::GetWindow
+*  ShellView_GetWindow
 */
 static HRESULT WINAPI IShellView_GetWindow(LPSHELLVIEW this,HWND32 * phWnd)
 { TRACE(shell,"(%p) stub\n",this);
@@ -1045,9 +1072,19 @@
 { FIXME(shell,"(%p) stub\n",this);
   return E_NOTIMPL;
 }
+/**************************************************************************
+* IShellView_TranslateAccelerator
+*
+* FIXME:
+*  use the accel functions
+*/
 static HRESULT WINAPI IShellView_TranslateAccelerator(LPSHELLVIEW this,LPMSG32 lpmsg)
-{ FIXME(shell,"(%p)->(%p) stub\n",this,lpmsg);
-  return E_NOTIMPL;
+{	FIXME(shell,"(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",this,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam);
+/*	switch (lpmsg->message)
+	{ case WM_RBUTTONDOWN:		
+		return SendMessage32A ( lpmsg->hwnd, WM_NOTIFY, );
+	}*/
+	return S_FALSE;
 }
 static HRESULT WINAPI IShellView_EnableModeless(LPSHELLVIEW this,BOOL32 fEnable)
 { FIXME(shell,"(%p) stub\n",this);
@@ -1151,7 +1188,7 @@
 	IShellView_UIActivate(this, SVUIA_DEACTIVATE);
 	if(this->hMenu)
    	{ DestroyMenu32(this->hMenu);
-    }
+	}
 	DestroyWindow32(this->hWnd);
 	this->pShellBrowser->lpvtbl->fnRelease(this->pShellBrowser);
 	return S_OK;