Ignore:
Timestamp:
Sep 5, 2001, 3:54:53 PM (24 years ago)
Author:
bird
Message:

Added $Id:$ keyword.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/shell32/shlview.c

    r5618 r6650  
     1/* $Id: shlview.c,v 1.3 2001-09-05 13:46:59 bird Exp $ */
    12/*
    2  *      ShellView
     3 *  ShellView
    34 *
    4  *      Copyright 1998,1999     <juergen.schmied@debitel.net>
     5 *  Copyright 1998,1999 <juergen.schmied@debitel.net>
    56 *
    67 * This is the view visualizing the data provied by the shellfolder.
    7  * No direct access to data from pidls should be done from here. 
    8  * 
     8 * No direct access to data from pidls should be done from here.
     9 *
    910 * FIXME: The order by part of the background context menu should be
    1011 * buily according to the columns shown.
     
    2021 *
    2122 * FIXME: when the ShellView_WndProc gets a WM_NCDESTROY should we do a
    22  * Release() ??? 
     23 * Release() ???
    2324 */
    2425
     
    4950}LISTVIEW_SORT_INFO, *LPLISTVIEW_SORT_INFO;
    5051
    51 typedef struct 
    52 {       ICOM_VFIELD(IShellView);
    53         DWORD           ref;
    54         ICOM_VTABLE(IOleCommandTarget)* lpvtblOleCommandTarget;
    55         ICOM_VTABLE(IDropTarget)*       lpvtblDropTarget;
    56         ICOM_VTABLE(IDropSource)*       lpvtblDropSource;
    57         ICOM_VTABLE(IViewObject)*       lpvtblViewObject;
    58         IShellFolder*   pSFParent;
    59         IShellFolder2*  pSF2Parent;
    60         IShellBrowser*  pShellBrowser;
    61         ICommDlgBrowser*        pCommDlgBrowser;
    62         HWND            hWnd;           /* SHELLDLL_DefView */
    63         HWND            hWndList;       /* ListView control */
    64         HWND            hWndParent;
    65         FOLDERSETTINGS  FolderSettings;
    66         HMENU           hMenu;
    67         UINT            uState;
    68         UINT            cidl;
    69         LPITEMIDLIST    *apidl;
     52typedef struct
     53{   ICOM_VFIELD(IShellView);
     54    DWORD       ref;
     55    ICOM_VTABLE(IOleCommandTarget)* lpvtblOleCommandTarget;
     56    ICOM_VTABLE(IDropTarget)*   lpvtblDropTarget;
     57    ICOM_VTABLE(IDropSource)*   lpvtblDropSource;
     58    ICOM_VTABLE(IViewObject)*   lpvtblViewObject;
     59    IShellFolder*   pSFParent;
     60    IShellFolder2*  pSF2Parent;
     61    IShellBrowser*  pShellBrowser;
     62    ICommDlgBrowser*    pCommDlgBrowser;
     63    HWND        hWnd;       /* SHELLDLL_DefView */
     64    HWND        hWndList;   /* ListView control */
     65    HWND        hWndParent;
     66    FOLDERSETTINGS  FolderSettings;
     67    HMENU       hMenu;
     68    UINT        uState;
     69    UINT        cidl;
     70    LPITEMIDLIST    *apidl;
    7071        LISTVIEW_SORT_INFO ListViewSortInfo;
    71         HANDLE          hNotify;        /* change notification handle */
    72         HANDLE          hAccel;
     72    HANDLE      hNotify;    /* change notification handle */
     73    HANDLE      hAccel;
    7374} IShellViewImpl;
    7475
     
    7677
    7778static struct ICOM_VTABLE(IOleCommandTarget) ctvt;
    78 #define _IOleCommandTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblOleCommandTarget))) 
    79 #define _ICOM_THIS_From_IOleCommandTarget(class, name) class* This = (class*)(((char*)name)-_IOleCommandTarget_Offset); 
     79#define _IOleCommandTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblOleCommandTarget)))
     80#define _ICOM_THIS_From_IOleCommandTarget(class, name) class* This = (class*)(((char*)name)-_IOleCommandTarget_Offset);
    8081
    8182static struct ICOM_VTABLE(IDropTarget) dtvt;
    82 #define _IDropTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropTarget))) 
    83 #define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset); 
     83#define _IDropTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropTarget)))
     84#define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset);
    8485
    8586static struct ICOM_VTABLE(IDropSource) dsvt;
    86 #define _IDropSource_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropSource))) 
    87 #define _ICOM_THIS_From_IDropSource(class, name) class* This = (class*)(((char*)name)-_IDropSource_Offset); 
     87#define _IDropSource_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropSource)))
     88#define _ICOM_THIS_From_IDropSource(class, name) class* This = (class*)(((char*)name)-_IDropSource_Offset);
    8889
    8990static struct ICOM_VTABLE(IViewObject) vovt;
    90 #define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject))) 
    91 #define _ICOM_THIS_From_IViewObject(class, name) class* This = (class*)(((char*)name)-_IViewObject_Offset); 
     91#define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject)))
     92#define _ICOM_THIS_From_IViewObject(class, name) class* This = (class*)(((char*)name)-_IViewObject_Offset);
    9293
    9394/* ListView Header ID's */
     
    112113#define GET_WM_COMMAND_CMD(wp, lp)              HIWORD(wp)
    113114
    114 extern void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition, 
    115                         UINT wID, UINT fType, LPSTR dwTypeData, UINT fState);
     115extern void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition,
     116            UINT wID, UINT fType, LPSTR dwTypeData, UINT fState);
    116117
    117118/*
     
    127128} MYTOOLINFO, *LPMYTOOLINFO;
    128129
    129 MYTOOLINFO Tools[] = 
     130MYTOOLINFO Tools[] =
    130131{
    131132{ FCIDM_SHVIEW_BIGICON,    0, 0, IDS_VIEW_LARGE,   TBSTATE_ENABLED, TBSTYLE_BUTTON },
     
    143144
    144145/**********************************************************
    145  *      IShellView_Constructor
     146 *  IShellView_Constructor
    146147 */
    147148IShellView * IShellView_Constructor( IShellFolder * pFolder)
    148 {       IShellViewImpl * sv;
    149         sv=(IShellViewImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IShellViewImpl));
    150         sv->ref=1;
    151         ICOM_VTBL(sv)=&svvt;
    152         sv->lpvtblOleCommandTarget=&ctvt;
    153         sv->lpvtblDropTarget=&dtvt;
    154         sv->lpvtblDropSource=&dsvt;
    155         sv->lpvtblViewObject=&vovt;
    156 
    157         sv->pSFParent = pFolder;
    158         if(pFolder) IShellFolder_AddRef(pFolder);
    159         IShellFolder_QueryInterface(sv->pSFParent, &IID_IShellFolder2, (LPVOID*)&sv->pSF2Parent);
    160        
    161         TRACE("(%p)->(%p)\n",sv, pFolder);
    162         shell32_ObjCount++;
    163         return (IShellView *) sv;
     149{   IShellViewImpl * sv;
     150    sv=(IShellViewImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IShellViewImpl));
     151    sv->ref=1;
     152    ICOM_VTBL(sv)=&svvt;
     153    sv->lpvtblOleCommandTarget=&ctvt;
     154    sv->lpvtblDropTarget=&dtvt;
     155    sv->lpvtblDropSource=&dsvt;
     156    sv->lpvtblViewObject=&vovt;
     157
     158    sv->pSFParent = pFolder;
     159    if(pFolder) IShellFolder_AddRef(pFolder);
     160    IShellFolder_QueryInterface(sv->pSFParent, &IID_IShellFolder2, (LPVOID*)&sv->pSF2Parent);
     161
     162    TRACE("(%p)->(%p)\n",sv, pFolder);
     163    shell32_ObjCount++;
     164    return (IShellView *) sv;
    164165}
    165166
     
    169170 */
    170171static BOOL IsInCommDlg(IShellViewImpl * This)
    171 {       return(This->pCommDlgBrowser != NULL);
     172{   return(This->pCommDlgBrowser != NULL);
    172173}
    173174
    174175static HRESULT IncludeObject(IShellViewImpl * This, LPCITEMIDLIST pidl)
    175176{
    176         HRESULT ret = S_OK;
    177        
    178         if ( IsInCommDlg(This) )
    179         {
    180           TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
    181           ret = ICommDlgBrowser_IncludeObject(This->pCommDlgBrowser, (IShellView*)This, pidl);
    182           TRACE("--0x%08lx\n", ret);
    183         }
    184         return ret;
     177    HRESULT ret = S_OK;
     178
     179    if ( IsInCommDlg(This) )
     180    {
     181      TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
     182      ret = ICommDlgBrowser_IncludeObject(This->pCommDlgBrowser, (IShellView*)This, pidl);
     183      TRACE("--0x%08lx\n", ret);
     184    }
     185    return ret;
    185186}
    186187
    187188static HRESULT OnDefaultCommand(IShellViewImpl * This)
    188189{
    189         HRESULT ret = S_FALSE;
    190        
    191         if (IsInCommDlg(This))
    192         {
    193           TRACE("ICommDlgBrowser::OnDefaultCommand\n");
    194           ret = ICommDlgBrowser_OnDefaultCommand(This->pCommDlgBrowser, (IShellView*)This);
    195           TRACE("--\n");
    196         }
    197         return ret;
     190    HRESULT ret = S_FALSE;
     191
     192    if (IsInCommDlg(This))
     193    {
     194      TRACE("ICommDlgBrowser::OnDefaultCommand\n");
     195      ret = ICommDlgBrowser_OnDefaultCommand(This->pCommDlgBrowser, (IShellView*)This);
     196      TRACE("--\n");
     197    }
     198    return ret;
    198199}
    199200
    200201static HRESULT OnStateChange(IShellViewImpl * This, UINT uFlags)
    201202{
    202         HRESULT ret = S_FALSE;
    203 
    204         if (IsInCommDlg(This))
    205         {
    206           TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);
    207           ret = ICommDlgBrowser_OnStateChange(This->pCommDlgBrowser, (IShellView*)This, uFlags);
    208           TRACE("--\n");
    209         }
    210         return ret;
    211 }
    212 /**********************************************************
    213  *      set the toolbar of the filedialog buttons
     203    HRESULT ret = S_FALSE;
     204
     205    if (IsInCommDlg(This))
     206    {
     207      TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);
     208      ret = ICommDlgBrowser_OnStateChange(This->pCommDlgBrowser, (IShellView*)This, uFlags);
     209      TRACE("--\n");
     210    }
     211    return ret;
     212}
     213/**********************************************************
     214 *  set the toolbar of the filedialog buttons
    214215 *
    215  * - activates the buttons from the shellbrowser according to 
     216 * - activates the buttons from the shellbrowser according to
    216217 *   the view state
    217218 */
    218219static void CheckToolbar(IShellViewImpl * This)
    219220{
    220         LRESULT result;
    221 
    222         TRACE("\n");
    223        
    224         if (IsInCommDlg(This))
    225         {
    226           IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,
    227                 FCIDM_TB_SMALLICON, (This->FolderSettings.ViewMode==FVM_LIST)? TRUE : FALSE, &result);
    228           IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,
    229                 FCIDM_TB_REPORTVIEW, (This->FolderSettings.ViewMode==FVM_DETAILS)? TRUE : FALSE, &result);
    230           IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,
    231                 FCIDM_TB_SMALLICON, TRUE, &result);
    232           IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,
    233                 FCIDM_TB_REPORTVIEW, TRUE, &result);
    234         }
     221    LRESULT result;
     222
     223    TRACE("\n");
     224
     225    if (IsInCommDlg(This))
     226    {
     227      IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,
     228        FCIDM_TB_SMALLICON, (This->FolderSettings.ViewMode==FVM_LIST)? TRUE : FALSE, &result);
     229      IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,
     230        FCIDM_TB_REPORTVIEW, (This->FolderSettings.ViewMode==FVM_DETAILS)? TRUE : FALSE, &result);
     231      IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,
     232        FCIDM_TB_SMALLICON, TRUE, &result);
     233      IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,
     234        FCIDM_TB_REPORTVIEW, TRUE, &result);
     235    }
    235236}
    236237
     
    240241 */
    241242/**********************************************************
    242  *      change the style of the listview control
     243 *  change the style of the listview control
    243244 */
    244245static void SetStyle(IShellViewImpl * This, DWORD dwAdd, DWORD dwRemove)
    245246{
    246         DWORD tmpstyle;
    247 
    248         TRACE("(%p)\n", This);
    249 
    250         tmpstyle = GetWindowLongA(This->hWndList, GWL_STYLE);
    251         SetWindowLongA(This->hWndList, GWL_STYLE, dwAdd | (tmpstyle & ~dwRemove));
     247    DWORD tmpstyle;
     248
     249    TRACE("(%p)\n", This);
     250
     251    tmpstyle = GetWindowLongA(This->hWndList, GWL_STYLE);
     252    SetWindowLongA(This->hWndList, GWL_STYLE, dwAdd | (tmpstyle & ~dwRemove));
    252253}
    253254
     
    258259*/
    259260static BOOL ShellView_CreateList (IShellViewImpl * This)
    260 {       DWORD dwStyle;
    261 
    262         TRACE("%p\n",This);
    263 
    264         dwStyle = WS_TABSTOP | WS_VISIBLE | WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
    265                   LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_AUTOARRANGE;
    266 
    267         switch (This->FolderSettings.ViewMode)
    268         {
    269           case FVM_ICON:        dwStyle |= LVS_ICON;            break;
    270           case FVM_DETAILS:     dwStyle |= LVS_REPORT;          break;
    271           case FVM_SMALLICON:   dwStyle |= LVS_SMALLICON;       break;
    272           case FVM_LIST:        dwStyle |= LVS_LIST;            break;
    273           default:              dwStyle |= LVS_LIST;            break;
    274         }
    275 
    276         if (This->FolderSettings.fFlags & FWF_AUTOARRANGE)      dwStyle |= LVS_AUTOARRANGE;
    277         /*if (This->FolderSettings.fFlags && FWF_DESKTOP); used from explorer*/
    278         if (This->FolderSettings.fFlags & FWF_SINGLESEL)        dwStyle |= LVS_SINGLESEL;
    279 
    280         This->hWndList=CreateWindowExA( WS_EX_CLIENTEDGE,
    281                                         WC_LISTVIEWA,
    282                                         NULL,
    283                                         dwStyle,
    284                                         0,0,0,0,
    285                                         This->hWnd,
    286                                         (HMENU)ID_LISTVIEW,
    287                                         shell32_hInstance,
    288                                         NULL);
    289 
    290         if(!This->hWndList)
    291           return FALSE;
     261{   DWORD dwStyle;
     262
     263    TRACE("%p\n",This);
     264
     265    dwStyle = WS_TABSTOP | WS_VISIBLE | WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
     266          LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_AUTOARRANGE;
     267
     268    switch (This->FolderSettings.ViewMode)
     269    {
     270      case FVM_ICON:    dwStyle |= LVS_ICON;        break;
     271      case FVM_DETAILS:     dwStyle |= LVS_REPORT;      break;
     272      case FVM_SMALLICON:   dwStyle |= LVS_SMALLICON;   break;
     273      case FVM_LIST:    dwStyle |= LVS_LIST;        break;
     274      default:      dwStyle |= LVS_LIST;        break;
     275    }
     276
     277    if (This->FolderSettings.fFlags & FWF_AUTOARRANGE)  dwStyle |= LVS_AUTOARRANGE;
     278    /*if (This->FolderSettings.fFlags && FWF_DESKTOP); used from explorer*/
     279    if (This->FolderSettings.fFlags & FWF_SINGLESEL)    dwStyle |= LVS_SINGLESEL;
     280
     281    This->hWndList=CreateWindowExA( WS_EX_CLIENTEDGE,
     282                    WC_LISTVIEWA,
     283                    NULL,
     284                    dwStyle,
     285                    0,0,0,0,
     286                    This->hWnd,
     287                    (HMENU)ID_LISTVIEW,
     288                    shell32_hInstance,
     289                    NULL);
     290
     291    if(!This->hWndList)
     292      return FALSE;
    292293
    293294        This->ListViewSortInfo.bIsAscending = TRUE;
     
    296297
    297298        /*  UpdateShellSettings(); */
    298         return TRUE;
     299    return TRUE;
    299300}
    300301
     
    306307static BOOL ShellView_InitList(IShellViewImpl * This)
    307308{
    308         LVCOLUMNA       lvColumn;
    309         SHELLDETAILS    sd;
    310         int     i;
    311         char    szTemp[50];
    312 
    313         TRACE("%p\n",This);
    314 
    315         ListView_DeleteAllItems(This->hWndList);
    316 
    317         lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
    318         lvColumn.pszText = szTemp;
    319 
    320         if (This->pSF2Parent)
    321         {
    322           for (i=0; 1; i++)
    323           {
    324             if (!SUCCEEDED(IShellFolder2_GetDetailsOf(This->pSF2Parent, NULL, i, &sd)))
    325               break;
    326             lvColumn.fmt = sd.fmt;
    327             lvColumn.cx = sd.cxChar*8; /* chars->pixel */
    328             StrRetToStrNA( szTemp, 50, &sd.str, NULL);
    329             ListView_InsertColumnA(This->hWndList, i, &lvColumn);
    330           }
    331         }
    332         else
    333         {
    334           FIXME("no SF2\n");
    335         }
    336 
    337         ListView_SetImageList(This->hWndList, ShellSmallIconList, LVSIL_SMALL);
    338         ListView_SetImageList(This->hWndList, ShellBigIconList, LVSIL_NORMAL);
    339 
    340         return TRUE;
    341 }
    342 /**********************************************************
    343 * ShellView_CompareItems() 
     309    LVCOLUMNA   lvColumn;
     310    SHELLDETAILS    sd;
     311    int i;
     312    char    szTemp[50];
     313
     314    TRACE("%p\n",This);
     315
     316    ListView_DeleteAllItems(This->hWndList);
     317
     318    lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
     319    lvColumn.pszText = szTemp;
     320
     321    if (This->pSF2Parent)
     322    {
     323      for (i=0; 1; i++)
     324      {
     325        if (!SUCCEEDED(IShellFolder2_GetDetailsOf(This->pSF2Parent, NULL, i, &sd)))
     326          break;
     327        lvColumn.fmt = sd.fmt;
     328        lvColumn.cx = sd.cxChar*8; /* chars->pixel */
     329        StrRetToStrNA( szTemp, 50, &sd.str, NULL);
     330        ListView_InsertColumnA(This->hWndList, i, &lvColumn);
     331      }
     332    }
     333    else
     334    {
     335      FIXME("no SF2\n");
     336    }
     337
     338    ListView_SetImageList(This->hWndList, ShellSmallIconList, LVSIL_SMALL);
     339    ListView_SetImageList(This->hWndList, ShellBigIconList, LVSIL_NORMAL);
     340
     341    return TRUE;
     342}
     343/**********************************************************
     344* ShellView_CompareItems()
    344345*
    345346* NOTES
    346347*  internal, CALLBACK for DSA_Sort
    347 */   
     348*/
    348349static INT CALLBACK ShellView_CompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData)
    349350{
    350         int ret;
    351         TRACE("pidl1=%p pidl2=%p lpsf=%p\n", lParam1, lParam2, (LPVOID) lpData);
    352 
    353         if(!lpData) return 0;
    354 
    355         ret =  (SHORT) SCODE_CODE(IShellFolder_CompareIDs((LPSHELLFOLDER)lpData, 0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2)); 
    356         TRACE("ret=%i\n",ret);
    357         return ret;
     351    int ret;
     352    TRACE("pidl1=%p pidl2=%p lpsf=%p\n", lParam1, lParam2, (LPVOID) lpData);
     353
     354    if(!lpData) return 0;
     355
     356    ret =  (SHORT) SCODE_CODE(IShellFolder_CompareIDs((LPSHELLFOLDER)lpData, 0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2));
     357    TRACE("ret=%i\n",ret);
     358    return ret;
    358359}
    359360
     
    369370 *
    370371 * RETURNS
    371  *     A negative value if the first item should precede the second, 
    372  *     a positive value if the first item should follow the second, 
     372 *     A negative value if the first item should precede the second,
     373 *     a positive value if the first item should follow the second,
    373374 *     or zero if the two items are equivalent
    374375 *
    375376 * NOTES
    376  *      FIXME: function does what ShellView_CompareItems is supposed to do.
    377  *      unify it and figure out how to use the undocumented first parameter
    378  *      of IShellFolder_CompareIDs to do the job this function does and
    379  *      move this code to IShellFolder.
    380  *      make LISTVIEW_SORT_INFO obsolete
    381  *      the way this function works is only usable if we had only
    382  *      filesystemfolders  (25/10/99 jsch)
     377 *  FIXME: function does what ShellView_CompareItems is supposed to do.
     378 *  unify it and figure out how to use the undocumented first parameter
     379 *  of IShellFolder_CompareIDs to do the job this function does and
     380 *  move this code to IShellFolder.
     381 *  make LISTVIEW_SORT_INFO obsolete
     382 *  the way this function works is only usable if we had only
     383 *  filesystemfolders  (25/10/99 jsch)
    383384 */
    384385static INT CALLBACK ShellView_ListViewCompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData)
     
    403404    }
    404405    else
    405     {   
     406    {
    406407        /* Sort by Time: Folders or Files can be sorted */
    407  
     408
    408409        if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TIME)
    409410        {
     
    442443    }
    443444    /*  If the Date, FileSize, FileType, Attrib was the same, sort by FileName */
    444        
     445
    445446    if(nDiff == 0)
    446447    {
     
    461462/**********************************************************
    462463*  LV_FindItemByPidl()
    463 */   
     464*/
    464465static int LV_FindItemByPidl(
    465         IShellViewImpl * This,
    466         LPCITEMIDLIST pidl)
    467 {
    468         LVITEMA lvItem;
    469         ZeroMemory(&lvItem, sizeof(LVITEMA));
    470         lvItem.mask = LVIF_PARAM;
    471         for(lvItem.iItem = 0; ListView_GetItemA(This->hWndList, &lvItem); lvItem.iItem++)
    472         {
    473           LPITEMIDLIST currentpidl = (LPITEMIDLIST) lvItem.lParam;
    474           HRESULT hr = IShellFolder_CompareIDs(This->pSFParent, 0, pidl, currentpidl);
    475           if(SUCCEEDED(hr) && !HRESULT_CODE(hr))
    476           {
    477             return lvItem.iItem;
    478           }
    479         }
    480         return -1;
     466    IShellViewImpl * This,
     467    LPCITEMIDLIST pidl)
     468{
     469    LVITEMA lvItem;
     470    ZeroMemory(&lvItem, sizeof(LVITEMA));
     471    lvItem.mask = LVIF_PARAM;
     472    for(lvItem.iItem = 0; ListView_GetItemA(This->hWndList, &lvItem); lvItem.iItem++)
     473    {
     474      LPITEMIDLIST currentpidl = (LPITEMIDLIST) lvItem.lParam;
     475      HRESULT hr = IShellFolder_CompareIDs(This->pSFParent, 0, pidl, currentpidl);
     476      if(SUCCEEDED(hr) && !HRESULT_CODE(hr))
     477      {
     478        return lvItem.iItem;
     479      }
     480    }
     481    return -1;
    481482}
    482483
     
    486487static BOOLEAN LV_AddItem(IShellViewImpl * This, LPCITEMIDLIST pidl)
    487488{
    488         LVITEMA lvItem;
    489 
    490         TRACE("(%p)(pidl=%p)\n", This, pidl);
    491 
    492         ZeroMemory(&lvItem, sizeof(lvItem));    /* create the listview item*/
    493         lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;      /*set the mask*/
    494         lvItem.iItem = ListView_GetItemCount(This->hWndList);   /*add the item to the end of the list*/
    495         lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidl));                           /*set the item's data*/
    496         lvItem.pszText = LPSTR_TEXTCALLBACKA;                   /*get text on a callback basis*/
    497         lvItem.iImage = I_IMAGECALLBACK;                        /*get the image on a callback basis*/
    498         return (-1==ListView_InsertItemA(This->hWndList, &lvItem))? FALSE: TRUE;
     489    LVITEMA lvItem;
     490
     491    TRACE("(%p)(pidl=%p)\n", This, pidl);
     492
     493    ZeroMemory(&lvItem, sizeof(lvItem));    /* create the listview item*/
     494    lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;  /*set the mask*/
     495    lvItem.iItem = ListView_GetItemCount(This->hWndList);   /*add the item to the end of the list*/
     496    lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidl));               /*set the item's data*/
     497    lvItem.pszText = LPSTR_TEXTCALLBACKA;           /*get text on a callback basis*/
     498    lvItem.iImage = I_IMAGECALLBACK;            /*get the image on a callback basis*/
     499    return (-1==ListView_InsertItemA(This->hWndList, &lvItem))? FALSE: TRUE;
    499500}
    500501
     
    504505static BOOLEAN LV_DeleteItem(IShellViewImpl * This, LPCITEMIDLIST pidl)
    505506{
    506         int nIndex;
    507 
    508         TRACE("(%p)(pidl=%p)\n", This, pidl);
    509 
    510         nIndex = LV_FindItemByPidl(This, ILFindLastID(pidl));
    511         return (-1==ListView_DeleteItem(This->hWndList, nIndex))? FALSE: TRUE;
     507    int nIndex;
     508
     509    TRACE("(%p)(pidl=%p)\n", This, pidl);
     510
     511    nIndex = LV_FindItemByPidl(This, ILFindLastID(pidl));
     512    return (-1==ListView_DeleteItem(This->hWndList, nIndex))? FALSE: TRUE;
    512513}
    513514
     
    517518static BOOLEAN LV_RenameItem(IShellViewImpl * This, LPCITEMIDLIST pidlOld, LPCITEMIDLIST pidlNew )
    518519{
    519         int nItem;
    520         LVITEMA lvItem;
    521 
    522         TRACE("(%p)(pidlold=%p pidlnew=%p)\n", This, pidlOld, pidlNew);
    523 
    524         nItem = LV_FindItemByPidl(This, ILFindLastID(pidlOld));
    525         if ( -1 != nItem )
    526         {
    527           ZeroMemory(&lvItem, sizeof(lvItem));  /* create the listview item*/
    528           lvItem.mask = LVIF_PARAM;             /* only the pidl */
    529           lvItem.iItem = nItem;
    530           ListView_GetItemA(This->hWndList, &lvItem);
    531 
    532           SHFree((LPITEMIDLIST)lvItem.lParam);
    533           lvItem.mask = LVIF_PARAM;
    534           lvItem.iItem = nItem;
    535           lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidlNew));      /* set the item's data */
    536           ListView_SetItemA(This->hWndList, &lvItem);
    537           ListView_Update(This->hWndList, nItem);
    538           return TRUE;                                  /* fixme: better handling */
    539         }
    540         return FALSE;
     520    int nItem;
     521    LVITEMA lvItem;
     522
     523    TRACE("(%p)(pidlold=%p pidlnew=%p)\n", This, pidlOld, pidlNew);
     524
     525    nItem = LV_FindItemByPidl(This, ILFindLastID(pidlOld));
     526    if ( -1 != nItem )
     527    {
     528      ZeroMemory(&lvItem, sizeof(lvItem));  /* create the listview item*/
     529      lvItem.mask = LVIF_PARAM;     /* only the pidl */
     530      lvItem.iItem = nItem;
     531      ListView_GetItemA(This->hWndList, &lvItem);
     532
     533      SHFree((LPITEMIDLIST)lvItem.lParam);
     534      lvItem.mask = LVIF_PARAM;
     535      lvItem.iItem = nItem;
     536      lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidlNew));  /* set the item's data */
     537      ListView_SetItemA(This->hWndList, &lvItem);
     538      ListView_Update(This->hWndList, nItem);
     539      return TRUE;                  /* fixme: better handling */
     540    }
     541    return FALSE;
    541542}
    542543/**********************************************************
     
    546547* - sorts the list
    547548* - fills the list into the view
    548 */   
     549*/
    549550
    550551static HRESULT ShellView_FillList(IShellViewImpl * This)
    551552{
    552         LPENUMIDLIST    pEnumIDList;
    553         LPITEMIDLIST    pidl;
    554         DWORD           dwFetched;
    555         UINT            i;
    556         HRESULT         hRes;
    557         HDPA            hdpa;
    558 
    559         TRACE("%p\n",This);
    560 
    561         /* get the itemlist from the shfolder*/ 
    562         hRes = IShellFolder_EnumObjects(This->pSFParent,This->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList);
    563         if (hRes != S_OK)
    564         {
    565           if (hRes==S_FALSE)
    566             return(NOERROR);
    567           return(hRes);
    568         }
    569 
    570         /* create a pointer array */   
    571         hdpa = pDPA_Create(16);
    572         if (!hdpa)
    573         {
    574           return(E_OUTOFMEMORY);
    575         }
    576 
    577         /* copy the items into the array*/
    578         while((S_OK == IEnumIDList_Next(pEnumIDList,1, &pidl, &dwFetched)) && dwFetched)
    579         {
    580           if (pDPA_InsertPtr(hdpa, 0x7fff, pidl) == -1)
    581           {
    582             SHFree(pidl);
    583           }
    584         }
    585 
    586         /* sort the array */
    587         pDPA_Sort(hdpa, ShellView_CompareItems, (LPARAM)This->pSFParent);
    588 
    589         /*turn the listview's redrawing off*/
    590         SendMessageA(This->hWndList, WM_SETREDRAW, FALSE, 0);
    591 
    592         for (i=0; i < DPA_GetPtrCount(hdpa); ++i)       /* DPA_GetPtrCount is a macro*/
    593         {
    594           pidl = (LPITEMIDLIST)pDPA_GetPtr(hdpa, i);
    595 
    596           /* in a commdlg This works as a filemask*/
    597           if ( IncludeObject(This, pidl)==S_OK )
    598             LV_AddItem(This, pidl);
    599           SHFree(pidl);
    600         }
    601 
    602         /*turn the listview's redrawing back on and force it to draw*/
    603         SendMessageA(This->hWndList, WM_SETREDRAW, TRUE, 0);
    604 
    605         IEnumIDList_Release(pEnumIDList); /* destroy the list*/
    606         pDPA_Destroy(hdpa);
    607        
    608         return S_OK;
     553    LPENUMIDLIST    pEnumIDList;
     554    LPITEMIDLIST    pidl;
     555    DWORD       dwFetched;
     556    UINT        i;
     557    HRESULT     hRes;
     558    HDPA        hdpa;
     559
     560    TRACE("%p\n",This);
     561
     562    /* get the itemlist from the shfolder*/
     563    hRes = IShellFolder_EnumObjects(This->pSFParent,This->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList);
     564    if (hRes != S_OK)
     565    {
     566      if (hRes==S_FALSE)
     567        return(NOERROR);
     568      return(hRes);
     569    }
     570
     571    /* create a pointer array */
     572    hdpa = pDPA_Create(16);
     573    if (!hdpa)
     574    {
     575      return(E_OUTOFMEMORY);
     576    }
     577
     578    /* copy the items into the array*/
     579    while((S_OK == IEnumIDList_Next(pEnumIDList,1, &pidl, &dwFetched)) && dwFetched)
     580    {
     581      if (pDPA_InsertPtr(hdpa, 0x7fff, pidl) == -1)
     582      {
     583        SHFree(pidl);
     584      }
     585    }
     586
     587    /* sort the array */
     588    pDPA_Sort(hdpa, ShellView_CompareItems, (LPARAM)This->pSFParent);
     589
     590    /*turn the listview's redrawing off*/
     591    SendMessageA(This->hWndList, WM_SETREDRAW, FALSE, 0);
     592
     593    for (i=0; i < DPA_GetPtrCount(hdpa); ++i)   /* DPA_GetPtrCount is a macro*/
     594    {
     595      pidl = (LPITEMIDLIST)pDPA_GetPtr(hdpa, i);
     596
     597      /* in a commdlg This works as a filemask*/
     598      if ( IncludeObject(This, pidl)==S_OK )
     599        LV_AddItem(This, pidl);
     600      SHFree(pidl);
     601    }
     602
     603    /*turn the listview's redrawing back on and force it to draw*/
     604    SendMessageA(This->hWndList, WM_SETREDRAW, TRUE, 0);
     605
     606    IEnumIDList_Release(pEnumIDList); /* destroy the list*/
     607    pDPA_Destroy(hdpa);
     608
     609    return S_OK;
    609610}
    610611
    611612/**********************************************************
    612613*  ShellView_OnCreate()
    613 */   
     614*/
    614615static LRESULT ShellView_OnCreate(IShellViewImpl * This)
    615616{
    616         IDropTarget* pdt;
    617         NOTIFYREGISTER ntreg;
    618         IPersistFolder2 * ppf2 = NULL;
    619        
    620         TRACE("%p\n",This);
    621 
    622         if(ShellView_CreateList(This))
    623         {
    624           if(ShellView_InitList(This))
    625           {
    626             ShellView_FillList(This);
    627           }
    628         }
    629        
    630         if(GetShellOle())
    631         {
    632           if (SUCCEEDED(IShellFolder_CreateViewObject(This->pSFParent, This->hWnd, &IID_IDropTarget, (LPVOID*)&pdt)))
    633           {
    634             pRegisterDragDrop(This->hWnd, pdt);
    635             IDropTarget_Release(pdt);
    636           }
    637         }
    638 
    639         /* register for receiving notifications */
    640         IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppf2);
    641         if (ppf2)
    642         {
    643           IPersistFolder2_GetCurFolder(ppf2, &ntreg.pidlPath);
    644           ntreg.bWatchSubtree = FALSE;
    645           This->hNotify = SHChangeNotifyRegister(This->hWnd, SHCNF_IDLIST, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg);
    646           SHFree(ntreg.pidlPath);
    647           IPersistFolder2_Release(ppf2);
    648         }
    649 
    650         This->hAccel = LoadAcceleratorsA(shell32_hInstance, "shv_accel");
    651        
    652         return S_OK;
    653 }
    654 
    655 /**********************************************************
    656  *      #### Handling of the menus ####
     617    IDropTarget* pdt;
     618    NOTIFYREGISTER ntreg;
     619    IPersistFolder2 * ppf2 = NULL;
     620
     621    TRACE("%p\n",This);
     622
     623    if(ShellView_CreateList(This))
     624    {
     625      if(ShellView_InitList(This))
     626      {
     627        ShellView_FillList(This);
     628      }
     629    }
     630
     631    if(GetShellOle())
     632    {
     633      if (SUCCEEDED(IShellFolder_CreateViewObject(This->pSFParent, This->hWnd, &IID_IDropTarget, (LPVOID*)&pdt)))
     634      {
     635        pRegisterDragDrop(This->hWnd, pdt);
     636        IDropTarget_Release(pdt);
     637      }
     638    }
     639
     640    /* register for receiving notifications */
     641    IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppf2);
     642    if (ppf2)
     643    {
     644      IPersistFolder2_GetCurFolder(ppf2, &ntreg.pidlPath);
     645      ntreg.bWatchSubtree = FALSE;
     646      This->hNotify = SHChangeNotifyRegister(This->hWnd, SHCNF_IDLIST, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg);
     647      SHFree(ntreg.pidlPath);
     648      IPersistFolder2_Release(ppf2);
     649    }
     650
     651    This->hAccel = LoadAcceleratorsA(shell32_hInstance, "shv_accel");
     652
     653    return S_OK;
     654}
     655
     656/**********************************************************
     657 *  #### Handling of the menus ####
    657658 */
    658659
     
    661662*/
    662663static HMENU ShellView_BuildFileMenu(IShellViewImpl * This)
    663 {       CHAR    szText[MAX_PATH];
    664         MENUITEMINFOA   mii;
    665         int     nTools,i;
    666         HMENU   hSubMenu;
    667 
    668         TRACE("(%p)\n",This);
    669 
    670         hSubMenu = CreatePopupMenu();
    671         if(hSubMenu)
    672         { /*get the number of items in our global array*/
    673           for(nTools = 0; Tools[nTools].idCommand != -1; nTools++){}
    674 
    675           /*add the menu items*/
    676           for(i = 0; i < nTools; i++)
    677           {
    678             LoadStringA(shell32_hInstance, Tools[i].idMenuString, szText, MAX_PATH);
    679 
    680             ZeroMemory(&mii, sizeof(mii));
    681             mii.cbSize = sizeof(mii);
    682             mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
    683 
    684             if(TBSTYLE_SEP != Tools[i].bStyle) /* no seperator*/
    685             {
    686               mii.fType = MFT_STRING;
    687               mii.fState = MFS_ENABLED;
    688               mii.dwTypeData = szText;
    689               mii.wID = Tools[i].idCommand;
    690             }
    691             else
    692             {
    693               mii.fType = MFT_SEPARATOR;
    694             }
    695             /* tack This item onto the end of the menu */
    696             InsertMenuItemA(hSubMenu, (UINT)-1, TRUE, &mii);
    697           }
    698         }
    699         TRACE("-- return (menu=0x%x)\n",hSubMenu);
    700         return hSubMenu;
     664{   CHAR    szText[MAX_PATH];
     665    MENUITEMINFOA   mii;
     666    int nTools,i;
     667    HMENU   hSubMenu;
     668
     669    TRACE("(%p)\n",This);
     670
     671    hSubMenu = CreatePopupMenu();
     672    if(hSubMenu)
     673    { /*get the number of items in our global array*/
     674      for(nTools = 0; Tools[nTools].idCommand != -1; nTools++){}
     675
     676      /*add the menu items*/
     677      for(i = 0; i < nTools; i++)
     678      {
     679        LoadStringA(shell32_hInstance, Tools[i].idMenuString, szText, MAX_PATH);
     680
     681        ZeroMemory(&mii, sizeof(mii));
     682        mii.cbSize = sizeof(mii);
     683        mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
     684
     685        if(TBSTYLE_SEP != Tools[i].bStyle) /* no seperator*/
     686        {
     687          mii.fType = MFT_STRING;
     688          mii.fState = MFS_ENABLED;
     689          mii.dwTypeData = szText;
     690          mii.wID = Tools[i].idCommand;
     691        }
     692        else
     693        {
     694          mii.fType = MFT_SEPARATOR;
     695        }
     696        /* tack This item onto the end of the menu */
     697        InsertMenuItemA(hSubMenu, (UINT)-1, TRUE, &mii);
     698      }
     699    }
     700    TRACE("-- return (menu=0x%x)\n",hSubMenu);
     701    return hSubMenu;
    701702}
    702703/**********************************************************
     
    704705*/
    705706static void ShellView_MergeFileMenu(IShellViewImpl * This, HMENU hSubMenu)
    706 {       TRACE("(%p)->(submenu=0x%08x) stub\n",This,hSubMenu);
    707 
    708         if(hSubMenu)
    709         { /*insert This item at the beginning of the menu */
    710           _InsertMenuItem(hSubMenu, 0, TRUE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
    711           _InsertMenuItem(hSubMenu, 0, TRUE, IDM_MYFILEITEM, MFT_STRING, "dummy45", MFS_ENABLED);
    712 
    713         }
    714         TRACE("--\n"); 
     707{   TRACE("(%p)->(submenu=0x%08x) stub\n",This,hSubMenu);
     708
     709    if(hSubMenu)
     710    { /*insert This item at the beginning of the menu */
     711      _InsertMenuItem(hSubMenu, 0, TRUE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
     712      _InsertMenuItem(hSubMenu, 0, TRUE, IDM_MYFILEITEM, MFT_STRING, "dummy45", MFS_ENABLED);
     713
     714    }
     715    TRACE("--\n");
    715716}
    716717
     
    720721
    721722static void ShellView_MergeViewMenu(IShellViewImpl * This, HMENU hSubMenu)
    722 {       MENUITEMINFOA   mii;
    723 
    724         TRACE("(%p)->(submenu=0x%08x)\n",This,hSubMenu);
    725 
    726         if(hSubMenu)
    727         { /*add a separator at the correct position in the menu*/
    728           _InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
    729 
    730           ZeroMemory(&mii, sizeof(mii));
    731           mii.cbSize = sizeof(mii);
    732           mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA;;
    733           mii.fType = MFT_STRING;
    734           mii.dwTypeData = "View";
    735           mii.hSubMenu = LoadMenuA(shell32_hInstance, "MENU_001");
    736           InsertMenuItemA(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii);
    737         }
     723{   MENUITEMINFOA   mii;
     724
     725    TRACE("(%p)->(submenu=0x%08x)\n",This,hSubMenu);
     726
     727    if(hSubMenu)
     728    { /*add a separator at the correct position in the menu*/
     729      _InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
     730
     731      ZeroMemory(&mii, sizeof(mii));
     732      mii.cbSize = sizeof(mii);
     733      mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA;;
     734      mii.fType = MFT_STRING;
     735      mii.dwTypeData = "View";
     736      mii.hSubMenu = LoadMenuA(shell32_hInstance, "MENU_001");
     737      InsertMenuItemA(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii);
     738    }
    738739}
    739740
     
    745746* RETURNS
    746747*  number of selected items
    747 */   
     748*/
    748749static UINT ShellView_GetSelections(IShellViewImpl * This)
    749750{
    750         LVITEMA lvItem;
    751         UINT    i = 0;
    752 
    753         if (This->apidl)
    754         {
    755           SHFree(This->apidl);
    756         }
    757 
    758         This->cidl = ListView_GetSelectedCount(This->hWndList);
    759         This->apidl = (LPITEMIDLIST*)SHAlloc(This->cidl * sizeof(LPITEMIDLIST));
    760 
    761         TRACE("selected=%i\n", This->cidl);
    762        
    763         if(This->apidl)
    764         {
    765           TRACE("-- Items selected =%u\n", This->cidl);
    766 
    767           ZeroMemory(&lvItem, sizeof(lvItem));
    768           lvItem.mask = LVIF_STATE | LVIF_PARAM;
    769           lvItem.stateMask = LVIS_SELECTED;
    770 
    771           while(ListView_GetItemA(This->hWndList, &lvItem) && (i < This->cidl))
    772           {
    773             if(lvItem.state & LVIS_SELECTED)
    774             {
    775               This->apidl[i] = (LPITEMIDLIST)lvItem.lParam;
    776               i++;
    777               TRACE("-- selected Item found\n");
    778             }
    779             lvItem.iItem++;
    780           }
    781         }
    782         return This->cidl;
    783 
    784 }
    785 /**********************************************************
    786  *      ShellView_DoContextMenu()
     751    LVITEMA lvItem;
     752    UINT    i = 0;
     753
     754    if (This->apidl)
     755    {
     756      SHFree(This->apidl);
     757    }
     758
     759    This->cidl = ListView_GetSelectedCount(This->hWndList);
     760    This->apidl = (LPITEMIDLIST*)SHAlloc(This->cidl * sizeof(LPITEMIDLIST));
     761
     762    TRACE("selected=%i\n", This->cidl);
     763
     764    if(This->apidl)
     765    {
     766      TRACE("-- Items selected =%u\n", This->cidl);
     767
     768      ZeroMemory(&lvItem, sizeof(lvItem));
     769      lvItem.mask = LVIF_STATE | LVIF_PARAM;
     770      lvItem.stateMask = LVIS_SELECTED;
     771
     772      while(ListView_GetItemA(This->hWndList, &lvItem) && (i < This->cidl))
     773      {
     774        if(lvItem.state & LVIS_SELECTED)
     775        {
     776          This->apidl[i] = (LPITEMIDLIST)lvItem.lParam;
     777          i++;
     778          TRACE("-- selected Item found\n");
     779        }
     780        lvItem.iItem++;
     781      }
     782    }
     783    return This->cidl;
     784
     785}
     786/**********************************************************
     787 *  ShellView_DoContextMenu()
    787788 */
    788789static void ShellView_DoContextMenu(IShellViewImpl * This, WORD x, WORD y, BOOL bDefault)
    789 {       UINT    uCommand;
    790         DWORD   wFlags;
    791         HMENU   hMenu;
    792         BOOL    fExplore = FALSE;
    793         HWND    hwndTree = 0;
    794         LPCONTEXTMENU   pContextMenu = NULL;
    795         IContextMenu *  pCM = NULL;
    796         CMINVOKECOMMANDINFO     cmi;
    797        
    798         TRACE("(%p)->(0x%08x 0x%08x 0x%08x) stub\n",This, x, y, bDefault);
    799 
    800         /* look, what's selected and create a context menu object of it*/
    801         if( ShellView_GetSelections(This) )
    802         {
    803           IShellFolder_GetUIObjectOf( This->pSFParent, This->hWndParent, This->cidl, This->apidl,
    804                                         (REFIID)&IID_IContextMenu, NULL, (LPVOID *)&pContextMenu);
    805 
    806           if(pContextMenu)
    807           {
    808             TRACE("-- pContextMenu\n");
    809             hMenu = CreatePopupMenu();
    810 
    811             if( hMenu )
    812             {
    813               /* See if we are in Explore or Open mode. If the browser's tree is present, we are in Explore mode.*/
    814               if(SUCCEEDED(IShellBrowser_GetControlWindow(This->pShellBrowser,FCW_TREE, &hwndTree)) && hwndTree)
    815               {
    816                 TRACE("-- explore mode\n");
    817                 fExplore = TRUE;
    818               }
    819 
    820               /* build the flags depending on what we can do with the selected item */
    821               wFlags = CMF_NORMAL | (This->cidl != 1 ? 0 : CMF_CANRENAME) | (fExplore ? CMF_EXPLORE : 0);
    822 
    823               /* let the ContextMenu merge its items in */
    824               if (SUCCEEDED(IContextMenu_QueryContextMenu( pContextMenu, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, wFlags )))
    825               {
    826                 if( bDefault )
    827                 {
    828                   TRACE("-- get menu default command\n");
    829                   uCommand = GetMenuDefaultItem(hMenu, FALSE, GMDI_GOINTOPOPUPS);
    830                 }
    831                 else
    832                 {
    833                   TRACE("-- track popup\n");
    834                   uCommand = TrackPopupMenu( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);
    835                 }               
    836 
    837                 if(uCommand > 0)
    838                 {
    839                   TRACE("-- uCommand=%u\n", uCommand);
    840                   if (IsInCommDlg(This) && ((uCommand==FCIDM_SHVIEW_EXPLORE) || (uCommand==FCIDM_SHVIEW_OPEN)))
    841                   {
    842                     TRACE("-- dlg: OnDefaultCommand\n");
    843                     OnDefaultCommand(This);
    844                   }
    845                   else
    846                   {
    847                     TRACE("-- explore -- invoke command\n");
    848                     ZeroMemory(&cmi, sizeof(cmi));
    849                     cmi.cbSize = sizeof(cmi);
    850                     cmi.hwnd = This->hWndParent; /* this window has to answer CWM_GETISHELLBROWSER */
    851                     cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
    852                     IContextMenu_InvokeCommand(pContextMenu, &cmi);
    853                   }
    854                 }
    855                 DestroyMenu(hMenu);
    856               }
    857             }
    858             if (pContextMenu)
    859               IContextMenu_Release(pContextMenu);
    860           }
    861         }
    862         else    /* background context menu */
    863         {
    864           hMenu = CreatePopupMenu();
    865 
    866           pCM = ISvBgCm_Constructor(This->pSFParent);
    867           IContextMenu_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0);
    868 
    869           uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);
    870           DestroyMenu(hMenu);
    871 
    872           TRACE("-- (%p)->(uCommand=0x%08x )\n",This, uCommand);
    873 
    874           ZeroMemory(&cmi, sizeof(cmi));
    875           cmi.cbSize = sizeof(cmi);
    876           cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
    877           cmi.hwnd = This->hWndParent;
    878           IContextMenu_InvokeCommand(pCM, &cmi);
    879 
    880           IContextMenu_Release(pCM);
    881         }
    882 }
    883 
    884 /**********************************************************
    885  *      ##### message handling #####
     790{   UINT    uCommand;
     791    DWORD   wFlags;
     792    HMENU   hMenu;
     793    BOOL    fExplore = FALSE;
     794    HWND    hwndTree = 0;
     795    LPCONTEXTMENU   pContextMenu = NULL;
     796    IContextMenu *  pCM = NULL;
     797    CMINVOKECOMMANDINFO cmi;
     798
     799    TRACE("(%p)->(0x%08x 0x%08x 0x%08x) stub\n",This, x, y, bDefault);
     800
     801    /* look, what's selected and create a context menu object of it*/
     802    if( ShellView_GetSelections(This) )
     803    {
     804      IShellFolder_GetUIObjectOf( This->pSFParent, This->hWndParent, This->cidl, This->apidl,
     805                    (REFIID)&IID_IContextMenu, NULL, (LPVOID *)&pContextMenu);
     806
     807      if(pContextMenu)
     808      {
     809        TRACE("-- pContextMenu\n");
     810        hMenu = CreatePopupMenu();
     811
     812        if( hMenu )
     813        {
     814          /* See if we are in Explore or Open mode. If the browser's tree is present, we are in Explore mode.*/
     815          if(SUCCEEDED(IShellBrowser_GetControlWindow(This->pShellBrowser,FCW_TREE, &hwndTree)) && hwndTree)
     816          {
     817            TRACE("-- explore mode\n");
     818            fExplore = TRUE;
     819          }
     820
     821          /* build the flags depending on what we can do with the selected item */
     822          wFlags = CMF_NORMAL | (This->cidl != 1 ? 0 : CMF_CANRENAME) | (fExplore ? CMF_EXPLORE : 0);
     823
     824          /* let the ContextMenu merge its items in */
     825          if (SUCCEEDED(IContextMenu_QueryContextMenu( pContextMenu, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, wFlags )))
     826          {
     827        if( bDefault )
     828        {
     829          TRACE("-- get menu default command\n");
     830          uCommand = GetMenuDefaultItem(hMenu, FALSE, GMDI_GOINTOPOPUPS);
     831        }
     832        else
     833        {
     834          TRACE("-- track popup\n");
     835          uCommand = TrackPopupMenu( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);
     836        }
     837
     838        if(uCommand > 0)
     839        {
     840          TRACE("-- uCommand=%u\n", uCommand);
     841          if (IsInCommDlg(This) && ((uCommand==FCIDM_SHVIEW_EXPLORE) || (uCommand==FCIDM_SHVIEW_OPEN)))
     842          {
     843            TRACE("-- dlg: OnDefaultCommand\n");
     844            OnDefaultCommand(This);
     845          }
     846          else
     847          {
     848            TRACE("-- explore -- invoke command\n");
     849            ZeroMemory(&cmi, sizeof(cmi));
     850            cmi.cbSize = sizeof(cmi);
     851            cmi.hwnd = This->hWndParent; /* this window has to answer CWM_GETISHELLBROWSER */
     852            cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
     853            IContextMenu_InvokeCommand(pContextMenu, &cmi);
     854          }
     855        }
     856        DestroyMenu(hMenu);
     857          }
     858        }
     859        if (pContextMenu)
     860          IContextMenu_Release(pContextMenu);
     861      }
     862    }
     863    else    /* background context menu */
     864    {
     865      hMenu = CreatePopupMenu();
     866
     867      pCM = ISvBgCm_Constructor(This->pSFParent);
     868      IContextMenu_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0);
     869
     870      uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);
     871      DestroyMenu(hMenu);
     872
     873      TRACE("-- (%p)->(uCommand=0x%08x )\n",This, uCommand);
     874
     875      ZeroMemory(&cmi, sizeof(cmi));
     876      cmi.cbSize = sizeof(cmi);
     877      cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
     878      cmi.hwnd = This->hWndParent;
     879      IContextMenu_InvokeCommand(pCM, &cmi);
     880
     881      IContextMenu_Release(pCM);
     882    }
     883}
     884
     885/**********************************************************
     886 *  ##### message handling #####
    886887 */
    887888
     
    891892static LRESULT ShellView_OnSize(IShellViewImpl * This, WORD wWidth, WORD wHeight)
    892893{
    893         TRACE("%p width=%u height=%u\n",This, wWidth,wHeight);
    894 
    895         /*resize the ListView to fit our window*/
    896         if(This->hWndList)
    897         {
    898           MoveWindow(This->hWndList, 0, 0, wWidth, wHeight, TRUE);
    899         }
    900 
    901         return S_OK;
     894    TRACE("%p width=%u height=%u\n",This, wWidth,wHeight);
     895
     896    /*resize the ListView to fit our window*/
     897    if(This->hWndList)
     898    {
     899      MoveWindow(This->hWndList, 0, 0, wWidth, wHeight, TRUE);
     900    }
     901
     902    return S_OK;
    902903}
    903904/**********************************************************
     
    906907* NOTES
    907908*  internal
    908 */   
     909*/
    909910static void ShellView_OnDeactivate(IShellViewImpl * This)
    910911{
    911         TRACE("%p\n",This);
    912 
    913         if(This->uState != SVUIA_DEACTIVATE)
    914         {
    915           if(This->hMenu)
    916           {
    917             IShellBrowser_SetMenuSB(This->pShellBrowser,0, 0, 0);
    918             IShellBrowser_RemoveMenusSB(This->pShellBrowser,This->hMenu);
    919             DestroyMenu(This->hMenu);
    920             This->hMenu = 0;
    921           }
    922 
    923           This->uState = SVUIA_DEACTIVATE;
    924         }
     912    TRACE("%p\n",This);
     913
     914    if(This->uState != SVUIA_DEACTIVATE)
     915    {
     916      if(This->hMenu)
     917      {
     918        IShellBrowser_SetMenuSB(This->pShellBrowser,0, 0, 0);
     919        IShellBrowser_RemoveMenusSB(This->pShellBrowser,This->hMenu);
     920        DestroyMenu(This->hMenu);
     921        This->hMenu = 0;
     922      }
     923
     924      This->uState = SVUIA_DEACTIVATE;
     925    }
    925926}
    926927
    927928/**********************************************************
    928929* ShellView_OnActivate()
    929 */   
     930*/
    930931static LRESULT ShellView_OnActivate(IShellViewImpl * This, UINT uState)
    931 {       OLEMENUGROUPWIDTHS   omw = { {0, 0, 0, 0, 0, 0} };
    932         MENUITEMINFOA         mii;
    933         CHAR                szText[MAX_PATH];
    934 
    935         TRACE("%p uState=%x\n",This,uState);   
    936 
    937         /*don't do anything if the state isn't really changing */
    938         if(This->uState == uState)
    939         {
    940           return S_OK;
    941         }
    942 
    943         ShellView_OnDeactivate(This);
    944 
    945         /*only do This if we are active */
    946         if(uState != SVUIA_DEACTIVATE)
    947         {
    948           /*merge the menus */
    949           This->hMenu = CreateMenu();
    950 
    951           if(This->hMenu)
    952           {
    953             IShellBrowser_InsertMenusSB(This->pShellBrowser, This->hMenu, &omw);
    954             TRACE("-- after fnInsertMenusSB\n");   
    955 
    956             /*build the top level menu get the menu item's text*/
    957             strcpy(szText,"dummy 31");
    958 
    959             ZeroMemory(&mii, sizeof(mii));
    960             mii.cbSize = sizeof(mii);
    961             mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_STATE;
    962             mii.fType = MFT_STRING;
    963             mii.fState = MFS_ENABLED;
    964             mii.dwTypeData = szText;
    965             mii.hSubMenu = ShellView_BuildFileMenu(This);
    966 
    967             /*insert our menu into the menu bar*/
    968             if(mii.hSubMenu)
    969             {
    970               InsertMenuItemA(This->hMenu, FCIDM_MENU_HELP, FALSE, &mii);
    971             }
    972 
    973             /*get the view menu so we can merge with it*/
    974             ZeroMemory(&mii, sizeof(mii));
    975             mii.cbSize = sizeof(mii);
    976             mii.fMask = MIIM_SUBMENU;
    977 
    978             if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_VIEW, FALSE, &mii))
    979             {
    980               ShellView_MergeViewMenu(This, mii.hSubMenu);
    981             }
    982 
    983             /*add the items that should only be added if we have the focus*/
    984             if(SVUIA_ACTIVATE_FOCUS == uState)
    985             {
    986               /*get the file menu so we can merge with it */
    987               ZeroMemory(&mii, sizeof(mii));
    988               mii.cbSize = sizeof(mii);
    989               mii.fMask = MIIM_SUBMENU;
    990 
    991               if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_FILE, FALSE, &mii))
    992               {
    993                 ShellView_MergeFileMenu(This, mii.hSubMenu);
    994               }
    995             }
    996             TRACE("-- before fnSetMenuSB\n");     
    997             IShellBrowser_SetMenuSB(This->pShellBrowser, This->hMenu, 0, This->hWnd);
    998           }
    999         }
    1000         This->uState = uState;
    1001         TRACE("--\n");   
    1002         return S_OK;
     932{   OLEMENUGROUPWIDTHS   omw = { {0, 0, 0, 0, 0, 0} };
     933    MENUITEMINFOA         mii;
     934    CHAR                szText[MAX_PATH];
     935
     936    TRACE("%p uState=%x\n",This,uState);
     937
     938    /*don't do anything if the state isn't really changing */
     939    if(This->uState == uState)
     940    {
     941      return S_OK;
     942    }
     943
     944    ShellView_OnDeactivate(This);
     945
     946    /*only do This if we are active */
     947    if(uState != SVUIA_DEACTIVATE)
     948    {
     949      /*merge the menus */
     950      This->hMenu = CreateMenu();
     951
     952      if(This->hMenu)
     953      {
     954        IShellBrowser_InsertMenusSB(This->pShellBrowser, This->hMenu, &omw);
     955        TRACE("-- after fnInsertMenusSB\n");
     956
     957        /*build the top level menu get the menu item's text*/
     958        strcpy(szText,"dummy 31");
     959
     960        ZeroMemory(&mii, sizeof(mii));
     961        mii.cbSize = sizeof(mii);
     962        mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_STATE;
     963        mii.fType = MFT_STRING;
     964        mii.fState = MFS_ENABLED;
     965        mii.dwTypeData = szText;
     966        mii.hSubMenu = ShellView_BuildFileMenu(This);
     967
     968        /*insert our menu into the menu bar*/
     969        if(mii.hSubMenu)
     970        {
     971          InsertMenuItemA(This->hMenu, FCIDM_MENU_HELP, FALSE, &mii);
     972        }
     973
     974        /*get the view menu so we can merge with it*/
     975        ZeroMemory(&mii, sizeof(mii));
     976        mii.cbSize = sizeof(mii);
     977        mii.fMask = MIIM_SUBMENU;
     978
     979        if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_VIEW, FALSE, &mii))
     980        {
     981          ShellView_MergeViewMenu(This, mii.hSubMenu);
     982        }
     983
     984        /*add the items that should only be added if we have the focus*/
     985        if(SVUIA_ACTIVATE_FOCUS == uState)
     986        {
     987          /*get the file menu so we can merge with it */
     988          ZeroMemory(&mii, sizeof(mii));
     989          mii.cbSize = sizeof(mii);
     990          mii.fMask = MIIM_SUBMENU;
     991
     992          if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_FILE, FALSE, &mii))
     993          {
     994            ShellView_MergeFileMenu(This, mii.hSubMenu);
     995          }
     996        }
     997        TRACE("-- before fnSetMenuSB\n");
     998        IShellBrowser_SetMenuSB(This->pShellBrowser, This->hMenu, 0, This->hWnd);
     999      }
     1000    }
     1001    This->uState = uState;
     1002    TRACE("--\n");
     1003    return S_OK;
    10031004}
    10041005
     
    10091010static LRESULT ShellView_OnSetFocus(IShellViewImpl * This)
    10101011{
    1011         TRACE("%p\n",This);
    1012 
    1013         /* Tell the browser one of our windows has received the focus. This
    1014         should always be done before merging menus (OnActivate merges the
    1015         menus) if one of our windows has the focus.*/
    1016 
    1017         IShellBrowser_OnViewWindowActive(This->pShellBrowser,(IShellView*) This);
    1018         ShellView_OnActivate(This, SVUIA_ACTIVATE_FOCUS);
    1019 
    1020         /* Set the focus to the listview */
    1021         SetFocus(This->hWndList);
    1022 
    1023         /* Notify the ICommDlgBrowser interface */
    1024         OnStateChange(This,CDBOSC_SETFOCUS);
    1025 
    1026         return 0;
     1012    TRACE("%p\n",This);
     1013
     1014    /* Tell the browser one of our windows has received the focus. This
     1015    should always be done before merging menus (OnActivate merges the
     1016    menus) if one of our windows has the focus.*/
     1017
     1018    IShellBrowser_OnViewWindowActive(This->pShellBrowser,(IShellView*) This);
     1019    ShellView_OnActivate(This, SVUIA_ACTIVATE_FOCUS);
     1020
     1021    /* Set the focus to the listview */
     1022    SetFocus(This->hWndList);
     1023
     1024    /* Notify the ICommDlgBrowser interface */
     1025    OnStateChange(This,CDBOSC_SETFOCUS);
     1026
     1027    return 0;
    10271028}
    10281029
    10291030/**********************************************************
    10301031* ShellView_OnKillFocus()
    1031 */   
     1032*/
    10321033static LRESULT ShellView_OnKillFocus(IShellViewImpl * This)
    10331034{
    1034         TRACE("(%p) stub\n",This);
    1035 
    1036         ShellView_OnActivate(This, SVUIA_ACTIVATE_NOFOCUS);
    1037         /* Notify the ICommDlgBrowser */
    1038         OnStateChange(This,CDBOSC_KILLFOCUS);
    1039 
    1040         return 0;
     1035    TRACE("(%p) stub\n",This);
     1036
     1037    ShellView_OnActivate(This, SVUIA_ACTIVATE_NOFOCUS);
     1038    /* Notify the ICommDlgBrowser */
     1039    OnStateChange(This,CDBOSC_KILLFOCUS);
     1040
     1041    return 0;
    10411042}
    10421043
     
    10451046*
    10461047* NOTES
    1047 *       the CmdID's are the ones from the context menu
    1048 */   
     1048*   the CmdID's are the ones from the context menu
     1049*/
    10491050static LRESULT ShellView_OnCommand(IShellViewImpl * This,DWORD dwCmdID, DWORD dwCmd, HWND hwndCmd)
    10501051{
    1051         TRACE("(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",This, dwCmdID, dwCmd, hwndCmd);
    1052 
    1053         switch(dwCmdID)
    1054         {
    1055           case FCIDM_SHVIEW_SMALLICON:
    1056             This->FolderSettings.ViewMode = FVM_SMALLICON;
    1057             SetStyle (This, LVS_SMALLICON, LVS_TYPEMASK);
    1058             CheckToolbar(This);
    1059             break;
    1060 
    1061           case FCIDM_SHVIEW_BIGICON:
    1062             This->FolderSettings.ViewMode = FVM_ICON;
    1063             SetStyle (This, LVS_ICON, LVS_TYPEMASK);
    1064             CheckToolbar(This);
    1065             break;
    1066 
    1067           case FCIDM_SHVIEW_LISTVIEW:
    1068             This->FolderSettings.ViewMode = FVM_LIST;
    1069             SetStyle (This, LVS_LIST, LVS_TYPEMASK);
    1070             CheckToolbar(This);
    1071             break;
    1072 
    1073           case FCIDM_SHVIEW_REPORTVIEW:
    1074             This->FolderSettings.ViewMode = FVM_DETAILS;
    1075             SetStyle (This, LVS_REPORT, LVS_TYPEMASK);
    1076             CheckToolbar(This);
    1077             break;
    1078 
    1079           /* the menu-ID's for sorting are 0x30... see shrec.rc */
    1080           case 0x30:
    1081           case 0x31:
    1082           case 0x32:
    1083           case 0x33:
    1084             This->ListViewSortInfo.nHeaderID = (LPARAM) (dwCmdID - 0x30);
    1085             This->ListViewSortInfo.bIsAscending = TRUE;
    1086             This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;
    1087             ListView_SortItems(This->hWndList, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo)));
    1088             break;
    1089            
    1090           default:
    1091             TRACE("-- COMMAND 0x%04lx unhandled\n", dwCmdID);
    1092         }
    1093         return 0;
     1052    TRACE("(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",This, dwCmdID, dwCmd, hwndCmd);
     1053
     1054    switch(dwCmdID)
     1055    {
     1056      case FCIDM_SHVIEW_SMALLICON:
     1057        This->FolderSettings.ViewMode = FVM_SMALLICON;
     1058        SetStyle (This, LVS_SMALLICON, LVS_TYPEMASK);
     1059        CheckToolbar(This);
     1060        break;
     1061
     1062      case FCIDM_SHVIEW_BIGICON:
     1063        This->FolderSettings.ViewMode = FVM_ICON;
     1064        SetStyle (This, LVS_ICON, LVS_TYPEMASK);
     1065        CheckToolbar(This);
     1066        break;
     1067
     1068      case FCIDM_SHVIEW_LISTVIEW:
     1069        This->FolderSettings.ViewMode = FVM_LIST;
     1070        SetStyle (This, LVS_LIST, LVS_TYPEMASK);
     1071        CheckToolbar(This);
     1072        break;
     1073
     1074      case FCIDM_SHVIEW_REPORTVIEW:
     1075        This->FolderSettings.ViewMode = FVM_DETAILS;
     1076        SetStyle (This, LVS_REPORT, LVS_TYPEMASK);
     1077        CheckToolbar(This);
     1078        break;
     1079
     1080      /* the menu-ID's for sorting are 0x30... see shrec.rc */
     1081      case 0x30:
     1082      case 0x31:
     1083      case 0x32:
     1084      case 0x33:
     1085        This->ListViewSortInfo.nHeaderID = (LPARAM) (dwCmdID - 0x30);
     1086        This->ListViewSortInfo.bIsAscending = TRUE;
     1087        This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;
     1088        ListView_SortItems(This->hWndList, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo)));
     1089        break;
     1090
     1091      default:
     1092        TRACE("-- COMMAND 0x%04lx unhandled\n", dwCmdID);
     1093    }
     1094    return 0;
    10941095}
    10951096
     
    10971098* ShellView_OnNotify()
    10981099*/
    1099    
     1100
    11001101static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpnmh)
    1101 {       LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lpnmh;
    1102         NMLVDISPINFOA *lpdi = (NMLVDISPINFOA *)lpnmh;
    1103         LPITEMIDLIST pidl;
    1104 
    1105         TRACE("%p CtlID=%u lpnmh->code=%x\n",This,CtlID,lpnmh->code);
    1106 
    1107         switch(lpnmh->code)
    1108         {
    1109           case NM_SETFOCUS:
    1110             TRACE("-- NM_SETFOCUS %p\n",This);
    1111             ShellView_OnSetFocus(This);
    1112             break;
    1113 
    1114           case NM_KILLFOCUS:
    1115             TRACE("-- NM_KILLFOCUS %p\n",This);
    1116             ShellView_OnDeactivate(This);
    1117             /* Notify the ICommDlgBrowser interface */
    1118             OnStateChange(This,CDBOSC_KILLFOCUS);
    1119             break;
    1120 
    1121           case HDN_ENDTRACKA:
    1122             TRACE("-- HDN_ENDTRACKA %p\n",This);
    1123             /*nColumn1 = ListView_GetColumnWidth(This->hWndList, 0);
    1124             nColumn2 = ListView_GetColumnWidth(This->hWndList, 1);*/
    1125             break;
    1126 
    1127           case LVN_DELETEITEM:
    1128             TRACE("-- LVN_DELETEITEM %p\n",This);
    1129             SHFree((LPITEMIDLIST)lpnmlv->lParam);     /*delete the pidl because we made a copy of it*/
    1130             break;
    1131 
    1132           case LVN_ITEMACTIVATE:
    1133             TRACE("-- LVN_ITEMACTIVATE %p\n",This);
    1134             OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
    1135             ShellView_DoContextMenu(This, 0, 0, TRUE);
    1136             break;
    1137 
    1138           case LVN_COLUMNCLICK:
    1139             This->ListViewSortInfo.nHeaderID = lpnmlv->iSubItem;
    1140             if(This->ListViewSortInfo.nLastHeaderID == This->ListViewSortInfo.nHeaderID)
    1141             {
    1142               This->ListViewSortInfo.bIsAscending = !This->ListViewSortInfo.bIsAscending;
    1143             }
    1144             else
    1145             {
    1146               This->ListViewSortInfo.bIsAscending = TRUE;
    1147             }
    1148             This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;
    1149 
    1150             ListView_SortItems(lpnmlv->hdr.hwndFrom, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo)));
    1151             break;
    1152        
    1153           case LVN_GETDISPINFOA:
    1154             TRACE("-- LVN_GETDISPINFOA %p\n",This);
    1155             pidl = (LPITEMIDLIST)lpdi->item.lParam;
    1156 
    1157             if(lpdi->item.mask & LVIF_TEXT)     /* text requested */
    1158             {
    1159               if (This->pSF2Parent)
    1160               {
    1161                 SHELLDETAILS sd;
    1162                 IShellFolder2_GetDetailsOf(This->pSF2Parent, pidl, lpdi->item.iSubItem, &sd);
    1163                 StrRetToStrNA( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL);
    1164                 TRACE("-- text=%s\n",lpdi->item.pszText);               
    1165               }
    1166               else
    1167               {
    1168                 FIXME("no SF2\n");
    1169               }
    1170             }
    1171             if(lpdi->item.mask & LVIF_IMAGE)    /* image requested */
    1172             {
    1173               lpdi->item.iImage = SHMapPIDLToSystemImageListIndex(This->pSFParent, pidl, 0);
    1174             }
    1175             break;
    1176 
    1177           case LVN_ITEMCHANGED:
    1178             TRACE("-- LVN_ITEMCHANGED %p\n",This);
    1179             OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
    1180             break;
    1181 
    1182           case LVN_BEGINDRAG:
    1183           case LVN_BEGINRDRAG:
    1184             TRACE("-- LVN_BEGINDRAG\n");
    1185 
    1186             if (ShellView_GetSelections(This))
    1187             { 
    1188               IDataObject * pda;
    1189               DWORD dwAttributes = SFGAO_CANLINK;
    1190               DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE;
    1191              
    1192               if(GetShellOle())
    1193               {
    1194                 if (SUCCEEDED(IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, &IID_IDataObject,0,(LPVOID *)&pda)))
    1195                 {
    1196                   IDropSource * pds = (IDropSource*)&(This->lpvtblDropSource);  /* own DropSource interface */
    1197 
    1198                   if (SUCCEEDED(IShellFolder_GetAttributesOf(This->pSFParent, This->cidl, This->apidl, &dwAttributes)))
    1199                   {
    1200                     if (dwAttributes & SFGAO_CANLINK)
    1201                     {
    1202                       dwEffect |= DROPEFFECT_LINK;
    1203                     }
    1204                   }
    1205                
    1206                   if (pds)
    1207                   {
    1208                     DWORD dwEffect;
    1209                     pDoDragDrop(pda, pds, dwEffect, &dwEffect);
    1210                   }
    1211                   IDataObject_Release(pda);
    1212                 }
    1213               }
    1214             }
    1215             break;
    1216 
    1217           case LVN_BEGINLABELEDITA:
    1218             {
    1219               DWORD dwAttr = SFGAO_CANRENAME;
    1220               pidl = (LPITEMIDLIST)lpdi->item.lParam;
    1221 
    1222               TRACE("-- LVN_BEGINLABELEDITA %p\n",This);
    1223 
    1224               IShellFolder_GetAttributesOf(This->pSFParent, 1, &pidl, &dwAttr);
    1225               if (SFGAO_CANRENAME & dwAttr)
    1226               {
    1227                 return FALSE;
    1228               }
    1229               return TRUE;
    1230             }
    1231             break;
    1232 
    1233           case LVN_ENDLABELEDITA:
    1234             {
    1235               TRACE("-- LVN_ENDLABELEDITA %p\n",This);
    1236               if (lpdi->item.pszText)
    1237               {
    1238                 HRESULT hr;
    1239                 WCHAR wszNewName[MAX_PATH];
    1240                 LVITEMA lvItem;
    1241 
    1242                 ZeroMemory(&lvItem, sizeof(LVITEMA));
    1243                 lvItem.iItem = lpdi->item.iItem;
    1244                 lvItem.mask = LVIF_PARAM;
    1245                 ListView_GetItemA(This->hWndList, &lvItem);
    1246                
    1247                 pidl = (LPITEMIDLIST)lpdi->item.lParam;
     1102{   LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lpnmh;
     1103    NMLVDISPINFOA *lpdi = (NMLVDISPINFOA *)lpnmh;
     1104    LPITEMIDLIST pidl;
     1105
     1106    TRACE("%p CtlID=%u lpnmh->code=%x\n",This,CtlID,lpnmh->code);
     1107
     1108    switch(lpnmh->code)
     1109    {
     1110      case NM_SETFOCUS:
     1111        TRACE("-- NM_SETFOCUS %p\n",This);
     1112        ShellView_OnSetFocus(This);
     1113        break;
     1114
     1115      case NM_KILLFOCUS:
     1116        TRACE("-- NM_KILLFOCUS %p\n",This);
     1117        ShellView_OnDeactivate(This);
     1118        /* Notify the ICommDlgBrowser interface */
     1119        OnStateChange(This,CDBOSC_KILLFOCUS);
     1120        break;
     1121
     1122      case HDN_ENDTRACKA:
     1123        TRACE("-- HDN_ENDTRACKA %p\n",This);
     1124        /*nColumn1 = ListView_GetColumnWidth(This->hWndList, 0);
     1125        nColumn2 = ListView_GetColumnWidth(This->hWndList, 1);*/
     1126        break;
     1127
     1128      case LVN_DELETEITEM:
     1129        TRACE("-- LVN_DELETEITEM %p\n",This);
     1130        SHFree((LPITEMIDLIST)lpnmlv->lParam);     /*delete the pidl because we made a copy of it*/
     1131        break;
     1132
     1133      case LVN_ITEMACTIVATE:
     1134        TRACE("-- LVN_ITEMACTIVATE %p\n",This);
     1135        OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
     1136        ShellView_DoContextMenu(This, 0, 0, TRUE);
     1137        break;
     1138
     1139      case LVN_COLUMNCLICK:
     1140        This->ListViewSortInfo.nHeaderID = lpnmlv->iSubItem;
     1141        if(This->ListViewSortInfo.nLastHeaderID == This->ListViewSortInfo.nHeaderID)
     1142        {
     1143          This->ListViewSortInfo.bIsAscending = !This->ListViewSortInfo.bIsAscending;
     1144        }
     1145        else
     1146        {
     1147          This->ListViewSortInfo.bIsAscending = TRUE;
     1148        }
     1149        This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;
     1150
     1151        ListView_SortItems(lpnmlv->hdr.hwndFrom, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo)));
     1152        break;
     1153
     1154      case LVN_GETDISPINFOA:
     1155        TRACE("-- LVN_GETDISPINFOA %p\n",This);
     1156        pidl = (LPITEMIDLIST)lpdi->item.lParam;
     1157
     1158        if(lpdi->item.mask & LVIF_TEXT) /* text requested */
     1159        {
     1160          if (This->pSF2Parent)
     1161          {
     1162            SHELLDETAILS sd;
     1163            IShellFolder2_GetDetailsOf(This->pSF2Parent, pidl, lpdi->item.iSubItem, &sd);
     1164            StrRetToStrNA( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL);
     1165            TRACE("-- text=%s\n",lpdi->item.pszText);
     1166          }
     1167          else
     1168          {
     1169            FIXME("no SF2\n");
     1170          }
     1171        }
     1172        if(lpdi->item.mask & LVIF_IMAGE)    /* image requested */
     1173        {
     1174          lpdi->item.iImage = SHMapPIDLToSystemImageListIndex(This->pSFParent, pidl, 0);
     1175        }
     1176        break;
     1177
     1178      case LVN_ITEMCHANGED:
     1179        TRACE("-- LVN_ITEMCHANGED %p\n",This);
     1180        OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
     1181        break;
     1182
     1183      case LVN_BEGINDRAG:
     1184      case LVN_BEGINRDRAG:
     1185        TRACE("-- LVN_BEGINDRAG\n");
     1186
     1187        if (ShellView_GetSelections(This))
     1188        {
     1189          IDataObject * pda;
     1190          DWORD dwAttributes = SFGAO_CANLINK;
     1191          DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE;
     1192
     1193          if(GetShellOle())
     1194          {
     1195            if (SUCCEEDED(IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, &IID_IDataObject,0,(LPVOID *)&pda)))
     1196            {
     1197              IDropSource * pds = (IDropSource*)&(This->lpvtblDropSource);  /* own DropSource interface */
     1198
     1199          if (SUCCEEDED(IShellFolder_GetAttributesOf(This->pSFParent, This->cidl, This->apidl, &dwAttributes)))
     1200          {
     1201            if (dwAttributes & SFGAO_CANLINK)
     1202            {
     1203              dwEffect |= DROPEFFECT_LINK;
     1204            }
     1205          }
     1206
     1207              if (pds)
     1208              {
     1209                DWORD dwEffect;
     1210            pDoDragDrop(pda, pds, dwEffect, &dwEffect);
     1211          }
     1212              IDataObject_Release(pda);
     1213            }
     1214          }
     1215        }
     1216        break;
     1217
     1218      case LVN_BEGINLABELEDITA:
     1219        {
     1220          DWORD dwAttr = SFGAO_CANRENAME;
     1221          pidl = (LPITEMIDLIST)lpdi->item.lParam;
     1222
     1223          TRACE("-- LVN_BEGINLABELEDITA %p\n",This);
     1224
     1225          IShellFolder_GetAttributesOf(This->pSFParent, 1, &pidl, &dwAttr);
     1226          if (SFGAO_CANRENAME & dwAttr)
     1227          {
     1228            return FALSE;
     1229          }
     1230          return TRUE;
     1231        }
     1232        break;
     1233
     1234      case LVN_ENDLABELEDITA:
     1235        {
     1236          TRACE("-- LVN_ENDLABELEDITA %p\n",This);
     1237          if (lpdi->item.pszText)
     1238          {
     1239            HRESULT hr;
     1240        WCHAR wszNewName[MAX_PATH];
     1241        LVITEMA lvItem;
     1242
     1243        ZeroMemory(&lvItem, sizeof(LVITEMA));
     1244        lvItem.iItem = lpdi->item.iItem;
     1245        lvItem.mask = LVIF_PARAM;
     1246        ListView_GetItemA(This->hWndList, &lvItem);
     1247
     1248        pidl = (LPITEMIDLIST)lpdi->item.lParam;
    12481249                if (!MultiByteToWideChar( CP_ACP, 0, lpdi->item.pszText, -1, wszNewName, MAX_PATH ))
    12491250                    wszNewName[MAX_PATH-1] = 0;
    1250                 hr = IShellFolder_SetNameOf(This->pSFParent, 0, pidl, wszNewName, SHGDN_INFOLDER, &pidl);
    1251                
    1252                 if(SUCCEEDED(hr) && pidl)
    1253                 {
    1254                   lvItem.mask = LVIF_PARAM;
    1255                   lvItem.lParam = (LPARAM)pidl;
    1256                   ListView_SetItemA(This->hWndList, &lvItem);
    1257                   return TRUE;
    1258                 }
    1259               }
    1260               return FALSE;
    1261             }
    1262             break;
    1263          
    1264           case LVN_KEYDOWN:
    1265             {
    1266             /*  MSG msg;
    1267               msg.hwnd = This->hWnd;
    1268               msg.message = WM_KEYDOWN;
    1269               msg.wParam = plvKeyDown->wVKey;
    1270               msg.lParam = 0;
    1271               msg.time = 0;
    1272               msg.pt = 0;*/
    1273              
    1274               LPNMLVKEYDOWN plvKeyDown = (LPNMLVKEYDOWN) lpnmh;
     1251            hr = IShellFolder_SetNameOf(This->pSFParent, 0, pidl, wszNewName, SHGDN_INFOLDER, &pidl);
     1252
     1253        if(SUCCEEDED(hr) && pidl)
     1254        {
     1255              lvItem.mask = LVIF_PARAM;
     1256          lvItem.lParam = (LPARAM)pidl;
     1257          ListView_SetItemA(This->hWndList, &lvItem);
     1258          return TRUE;
     1259        }
     1260          }
     1261          return FALSE;
     1262        }
     1263        break;
     1264
     1265      case LVN_KEYDOWN:
     1266        {
     1267        /*  MSG msg;
     1268          msg.hwnd = This->hWnd;
     1269          msg.message = WM_KEYDOWN;
     1270          msg.wParam = plvKeyDown->wVKey;
     1271          msg.lParam = 0;
     1272          msg.time = 0;
     1273          msg.pt = 0;*/
     1274
     1275          LPNMLVKEYDOWN plvKeyDown = (LPNMLVKEYDOWN) lpnmh;
    12751276
    12761277              /* initiate a rename of the selected file or directory */
     
    12851286                  /* get selected item */
    12861287                  i = ListView_GetNextItem(This->hWndList, -1,
    1287                         LVNI_SELECTED);
    1288  
     1288            LVNI_SELECTED);
     1289
    12891290                  ListView_EnsureVisible(This->hWndList, i, 0);
    12901291                  ListView_EditLabelA(This->hWndList, i);
     
    12921293              }
    12931294#if 0
    1294               TranslateAccelerator(This->hWnd, This->hAccel, &msg)
     1295          TranslateAccelerator(This->hWnd, This->hAccel, &msg)
    12951296#endif
    1296               else if(plvKeyDown->wVKey == VK_DELETE)
     1297          else if(plvKeyDown->wVKey == VK_DELETE)
    12971298              {
    1298                 int i, item_index;
    1299                 LVITEMA item;
    1300                 LPITEMIDLIST* pItems;
    1301                 ISFHelper *psfhlp;
    1302 
    1303                 IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper,
    1304                         (LPVOID*)&psfhlp);
    1305 
    1306                 if(!(i = ListView_GetSelectedCount(This->hWndList)))
    1307                   break;
    1308        
    1309                 /* allocate memory for the pidl array */
    1310                 pItems = HeapAlloc(GetProcessHeap(), 0,
    1311                         sizeof(LPITEMIDLIST) * i);
    1312  
    1313                 /* retrieve all selected items */
    1314                 i = 0;
    1315                 item_index = -1;
    1316                 while(ListView_GetSelectedCount(This->hWndList) > i)
    1317                 {
    1318                   /* get selected item */
    1319                   item_index = ListView_GetNextItem(This->hWndList,
    1320                         item_index, LVNI_SELECTED);
    1321                   item.iItem = item_index;
    1322                   ListView_GetItemA(This->hWndList, &item);
    1323 
    1324                   /* get item pidl */
    1325                   pItems[i] = (LPITEMIDLIST)item.lParam;
    1326                  
    1327                   i++;
    1328                 }
    1329 
    1330                 /* perform the item deletion */
    1331                 ISFHelper_DeleteItems(psfhlp, i, pItems);
    1332 
    1333                 /* free pidl array memory */
    1334                 HeapFree(GetProcessHeap(), 0, pItems);
     1299        int i, item_index;
     1300        LVITEMA item;
     1301        LPITEMIDLIST* pItems;
     1302        ISFHelper *psfhlp;
     1303
     1304        IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper,
     1305            (LPVOID*)&psfhlp);
     1306
     1307        if(!(i = ListView_GetSelectedCount(This->hWndList)))
     1308          break;
     1309
     1310        /* allocate memory for the pidl array */
     1311        pItems = HeapAlloc(GetProcessHeap(), 0,
     1312            sizeof(LPITEMIDLIST) * i);
     1313
     1314        /* retrieve all selected items */
     1315        i = 0;
     1316        item_index = -1;
     1317        while(ListView_GetSelectedCount(This->hWndList) > i)
     1318        {
     1319          /* get selected item */
     1320          item_index = ListView_GetNextItem(This->hWndList,
     1321            item_index, LVNI_SELECTED);
     1322          item.iItem = item_index;
     1323          ListView_GetItemA(This->hWndList, &item);
     1324
     1325          /* get item pidl */
     1326          pItems[i] = (LPITEMIDLIST)item.lParam;
     1327
     1328          i++;
     1329        }
     1330
     1331        /* perform the item deletion */
     1332        ISFHelper_DeleteItems(psfhlp, i, pItems);
     1333
     1334        /* free pidl array memory */
     1335        HeapFree(GetProcessHeap(), 0, pItems);
    13351336              }
    13361337              else
    1337                 FIXME("LVN_KEYDOWN key=0x%08x\n",plvKeyDown->wVKey);
    1338             }
    1339             break;
    1340 
    1341           default:
    1342             TRACE("-- %p WM_COMMAND %x unhandled\n", This, lpnmh->code);
    1343             break;;
    1344         }
    1345         return 0;
     1338        FIXME("LVN_KEYDOWN key=0x%08x\n",plvKeyDown->wVKey);
     1339        }
     1340        break;
     1341
     1342      default:
     1343        TRACE("-- %p WM_COMMAND %x unhandled\n", This, lpnmh->code);
     1344        break;;
     1345    }
     1346    return 0;
    13461347}
    13471348
     
    13531354{
    13541355
    1355         TRACE("(%p)(%p,%p,0x%08lx)\n", This, Pidls[0], Pidls[1], wEventId);
    1356         switch(wEventId)
    1357         {               
    1358           case SHCNE_MKDIR:
    1359           case SHCNE_CREATE:
    1360             LV_AddItem(This, Pidls[0]);
    1361             break;
    1362           case SHCNE_RMDIR:
    1363           case SHCNE_DELETE:
    1364             LV_DeleteItem(This, Pidls[0]);
    1365             break;
    1366           case SHCNE_RENAMEFOLDER:
    1367           case SHCNE_RENAMEITEM:
    1368             LV_RenameItem(This, Pidls[0], Pidls[1]);
    1369             break;
    1370           case SHCNE_UPDATEITEM:
    1371             break;
    1372         }
    1373         return TRUE;
     1356    TRACE("(%p)(%p,%p,0x%08lx)\n", This, Pidls[0], Pidls[1], wEventId);
     1357    switch(wEventId)
     1358    {
     1359      case SHCNE_MKDIR:
     1360      case SHCNE_CREATE:
     1361        LV_AddItem(This, Pidls[0]);
     1362        break;
     1363      case SHCNE_RMDIR:
     1364      case SHCNE_DELETE:
     1365        LV_DeleteItem(This, Pidls[0]);
     1366        break;
     1367      case SHCNE_RENAMEFOLDER:
     1368      case SHCNE_RENAMEITEM:
     1369        LV_RenameItem(This, Pidls[0], Pidls[1]);
     1370        break;
     1371      case SHCNE_UPDATEITEM:
     1372        break;
     1373    }
     1374    return TRUE;
    13741375}
    13751376/**********************************************************
     
    13791380static LRESULT CALLBACK ShellView_WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
    13801381{
    1381         IShellViewImpl * pThis = (IShellViewImpl*)GetWindowLongA(hWnd, GWL_USERDATA);
    1382         LPCREATESTRUCTA lpcs;
    1383 
    1384         TRACE("(hwnd=%x msg=%x wparm=%x lparm=%lx)\n",hWnd, uMessage, wParam, lParam);
    1385 
    1386         switch (uMessage)
    1387         {
    1388           case WM_NCCREATE:
    1389             lpcs = (LPCREATESTRUCTA)lParam;
    1390             pThis = (IShellViewImpl*)(lpcs->lpCreateParams);
    1391             SetWindowLongA(hWnd, GWL_USERDATA, (LONG)pThis);
    1392             pThis->hWnd = hWnd;        /*set the window handle*/
    1393             break;
    1394 
    1395           case WM_SIZE:         return ShellView_OnSize(pThis,LOWORD(lParam), HIWORD(lParam));
    1396           case WM_SETFOCUS:     return ShellView_OnSetFocus(pThis);
    1397           case WM_KILLFOCUS:    return ShellView_OnKillFocus(pThis);
    1398           case WM_CREATE:       return ShellView_OnCreate(pThis);
    1399           case WM_ACTIVATE:     return ShellView_OnActivate(pThis, SVUIA_ACTIVATE_FOCUS);
    1400           case WM_NOTIFY:       return ShellView_OnNotify(pThis,(UINT)wParam, (LPNMHDR)lParam);
    1401           case WM_COMMAND:      return ShellView_OnCommand(pThis,
    1402                                         GET_WM_COMMAND_ID(wParam, lParam),
    1403                                         GET_WM_COMMAND_CMD(wParam, lParam),
    1404                                         GET_WM_COMMAND_HWND(wParam, lParam));
    1405           case SHV_CHANGE_NOTIFY: return ShellView_OnChange(pThis, (LPITEMIDLIST*)wParam, (LONG)lParam);
    1406 
    1407           case WM_CONTEXTMENU:  ShellView_DoContextMenu(pThis, LOWORD(lParam), HIWORD(lParam), FALSE);
    1408                                 return 0;
    1409 
    1410           case WM_SHOWWINDOW:   UpdateWindow(pThis->hWndList);
    1411                                 break;
    1412 
    1413           case WM_GETDLGCODE:   return SendMessageA(pThis->hWndList,uMessage,0,0);
    1414 
    1415           case WM_DESTROY:      if(GetShellOle())
    1416                                 {
    1417                                   pRevokeDragDrop(pThis->hWnd);
    1418                                 }
    1419                                 SHChangeNotifyDeregister(pThis->hNotify);
    1420                                 break;
    1421         }
    1422 
    1423         return DefWindowProcA (hWnd, uMessage, wParam, lParam);
     1382    IShellViewImpl * pThis = (IShellViewImpl*)GetWindowLongA(hWnd, GWL_USERDATA);
     1383    LPCREATESTRUCTA lpcs;
     1384
     1385    TRACE("(hwnd=%x msg=%x wparm=%x lparm=%lx)\n",hWnd, uMessage, wParam, lParam);
     1386
     1387    switch (uMessage)
     1388    {
     1389      case WM_NCCREATE:
     1390        lpcs = (LPCREATESTRUCTA)lParam;
     1391        pThis = (IShellViewImpl*)(lpcs->lpCreateParams);
     1392        SetWindowLongA(hWnd, GWL_USERDATA, (LONG)pThis);
     1393        pThis->hWnd = hWnd;        /*set the window handle*/
     1394        break;
     1395
     1396      case WM_SIZE:     return ShellView_OnSize(pThis,LOWORD(lParam), HIWORD(lParam));
     1397      case WM_SETFOCUS: return ShellView_OnSetFocus(pThis);
     1398      case WM_KILLFOCUS:    return ShellView_OnKillFocus(pThis);
     1399      case WM_CREATE:   return ShellView_OnCreate(pThis);
     1400      case WM_ACTIVATE: return ShellView_OnActivate(pThis, SVUIA_ACTIVATE_FOCUS);
     1401      case WM_NOTIFY:   return ShellView_OnNotify(pThis,(UINT)wParam, (LPNMHDR)lParam);
     1402      case WM_COMMAND:      return ShellView_OnCommand(pThis,
     1403                    GET_WM_COMMAND_ID(wParam, lParam),
     1404                    GET_WM_COMMAND_CMD(wParam, lParam),
     1405                    GET_WM_COMMAND_HWND(wParam, lParam));
     1406      case SHV_CHANGE_NOTIFY: return ShellView_OnChange(pThis, (LPITEMIDLIST*)wParam, (LONG)lParam);
     1407
     1408      case WM_CONTEXTMENU:  ShellView_DoContextMenu(pThis, LOWORD(lParam), HIWORD(lParam), FALSE);
     1409                            return 0;
     1410
     1411      case WM_SHOWWINDOW:   UpdateWindow(pThis->hWndList);
     1412                break;
     1413
     1414      case WM_GETDLGCODE:   return SendMessageA(pThis->hWndList,uMessage,0,0);
     1415
     1416      case WM_DESTROY:  if(GetShellOle())
     1417                {
     1418                  pRevokeDragDrop(pThis->hWnd);
     1419                }
     1420                SHChangeNotifyDeregister(pThis->hNotify);
     1421                            break;
     1422    }
     1423
     1424    return DefWindowProcA (hWnd, uMessage, wParam, lParam);
    14241425}
    14251426/**********************************************************
     
    14341435static HRESULT WINAPI IShellView_fnQueryInterface(IShellView * iface,REFIID riid, LPVOID *ppvObj)
    14351436{
    1436         ICOM_THIS(IShellViewImpl, iface);
    1437 
    1438         TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
    1439 
    1440         *ppvObj = NULL;
    1441 
    1442         if(IsEqualIID(riid, &IID_IUnknown))
    1443         {
    1444           *ppvObj = This;
    1445         }
    1446         else if(IsEqualIID(riid, &IID_IShellView))
    1447         {
    1448           *ppvObj = (IShellView*)This;
    1449         }
    1450         else if(IsEqualIID(riid, &IID_IOleCommandTarget))
    1451         {
    1452           *ppvObj = (IOleCommandTarget*)&(This->lpvtblOleCommandTarget);
    1453         }
    1454         else if(IsEqualIID(riid, &IID_IDropTarget))
    1455         {
    1456           *ppvObj = (IDropTarget*)&(This->lpvtblDropTarget);
    1457         }
    1458         else if(IsEqualIID(riid, &IID_IDropSource))
    1459         {
    1460           *ppvObj = (IDropSource*)&(This->lpvtblDropSource);
    1461         }
    1462         else if(IsEqualIID(riid, &IID_IViewObject))
    1463         {
    1464           *ppvObj = (IViewObject*)&(This->lpvtblViewObject);
    1465         }
    1466 
    1467         if(*ppvObj)
    1468         {
    1469           IUnknown_AddRef( (IUnknown*)*ppvObj );
    1470           TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
    1471           return S_OK;
    1472         }
    1473         TRACE("-- Interface: E_NOINTERFACE\n");
    1474         return E_NOINTERFACE;
     1437    ICOM_THIS(IShellViewImpl, iface);
     1438
     1439    TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
     1440
     1441    *ppvObj = NULL;
     1442
     1443    if(IsEqualIID(riid, &IID_IUnknown))
     1444    {
     1445      *ppvObj = This;
     1446    }
     1447    else if(IsEqualIID(riid, &IID_IShellView))
     1448    {
     1449      *ppvObj = (IShellView*)This;
     1450    }
     1451    else if(IsEqualIID(riid, &IID_IOleCommandTarget))
     1452    {
     1453      *ppvObj = (IOleCommandTarget*)&(This->lpvtblOleCommandTarget);
     1454    }
     1455    else if(IsEqualIID(riid, &IID_IDropTarget))
     1456    {
     1457      *ppvObj = (IDropTarget*)&(This->lpvtblDropTarget);
     1458    }
     1459    else if(IsEqualIID(riid, &IID_IDropSource))
     1460    {
     1461      *ppvObj = (IDropSource*)&(This->lpvtblDropSource);
     1462    }
     1463    else if(IsEqualIID(riid, &IID_IViewObject))
     1464    {
     1465      *ppvObj = (IViewObject*)&(This->lpvtblViewObject);
     1466    }
     1467
     1468    if(*ppvObj)
     1469    {
     1470      IUnknown_AddRef( (IUnknown*)*ppvObj );
     1471      TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
     1472      return S_OK;
     1473    }
     1474    TRACE("-- Interface: E_NOINTERFACE\n");
     1475    return E_NOINTERFACE;
    14751476}
    14761477
     
    14801481static ULONG WINAPI IShellView_fnAddRef(IShellView * iface)
    14811482{
    1482         ICOM_THIS(IShellViewImpl, iface);
    1483 
    1484         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1485 
    1486         shell32_ObjCount++;
    1487         return ++(This->ref);
     1483    ICOM_THIS(IShellViewImpl, iface);
     1484
     1485    TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1486
     1487    shell32_ObjCount++;
     1488    return ++(This->ref);
    14881489}
    14891490/**********************************************************
     
    14921493static ULONG WINAPI IShellView_fnRelease(IShellView * iface)
    14931494{
    1494         ICOM_THIS(IShellViewImpl, iface);
    1495 
    1496         TRACE("(%p)->()\n",This);
    1497 
    1498         shell32_ObjCount--;
    1499 
    1500         if (!--(This->ref))
    1501         {
    1502           TRACE(" destroying IShellView(%p)\n",This);
    1503 
    1504           if(This->pSFParent)
    1505             IShellFolder_Release(This->pSFParent);
    1506 
    1507           if(This->pSF2Parent)
    1508             IShellFolder2_Release(This->pSF2Parent);
    1509 
    1510           if (This->apidl)
    1511             SHFree(This->apidl);
    1512 
    1513           if (This->pCommDlgBrowser)
    1514             ICommDlgBrowser_Release(This->pCommDlgBrowser);
    1515 
    1516           HeapFree(GetProcessHeap(),0,This);
    1517           return 0;
    1518         }
    1519         return This->ref;
     1495    ICOM_THIS(IShellViewImpl, iface);
     1496
     1497    TRACE("(%p)->()\n",This);
     1498
     1499    shell32_ObjCount--;
     1500
     1501    if (!--(This->ref))
     1502    {
     1503      TRACE(" destroying IShellView(%p)\n",This);
     1504
     1505      if(This->pSFParent)
     1506        IShellFolder_Release(This->pSFParent);
     1507
     1508      if(This->pSF2Parent)
     1509        IShellFolder2_Release(This->pSF2Parent);
     1510
     1511      if (This->apidl)
     1512        SHFree(This->apidl);
     1513
     1514      if (This->pCommDlgBrowser)
     1515        ICommDlgBrowser_Release(This->pCommDlgBrowser);
     1516
     1517      HeapFree(GetProcessHeap(),0,This);
     1518      return 0;
     1519    }
     1520    return This->ref;
    15201521}
    15211522
     
    15251526static HRESULT WINAPI IShellView_fnGetWindow(IShellView * iface,HWND * phWnd)
    15261527{
    1527         ICOM_THIS(IShellViewImpl, iface);
    1528 
    1529         TRACE("(%p)\n",This);
    1530 
    1531         *phWnd = This->hWnd;
    1532 
    1533         return S_OK;
     1528    ICOM_THIS(IShellViewImpl, iface);
     1529
     1530    TRACE("(%p)\n",This);
     1531
     1532    *phWnd = This->hWnd;
     1533
     1534    return S_OK;
    15341535}
    15351536
    15361537static HRESULT WINAPI IShellView_fnContextSensitiveHelp(IShellView * iface,BOOL fEnterMode)
    15371538{
    1538         ICOM_THIS(IShellViewImpl, iface);
    1539 
    1540         FIXME("(%p) stub\n",This);
    1541 
    1542         return E_NOTIMPL;
     1539    ICOM_THIS(IShellViewImpl, iface);
     1540
     1541    FIXME("(%p) stub\n",This);
     1542
     1543    return E_NOTIMPL;
    15431544}
    15441545
     
    15521553{
    15531554#if 0
    1554         ICOM_THIS(IShellViewImpl, iface);
    1555 
    1556         FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam);
     1555    ICOM_THIS(IShellViewImpl, iface);
     1556
     1557    FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam);
    15571558#endif
    1558        
    1559         if ((lpmsg->message>=WM_KEYFIRST) && (lpmsg->message>=WM_KEYLAST))
    1560         {
    1561           TRACE("-- key=0x04%x",lpmsg->wParam) ;
    1562         }
    1563         return S_FALSE; /* not handled */
     1559
     1560    if ((lpmsg->message>=WM_KEYFIRST) && (lpmsg->message>=WM_KEYLAST))
     1561    {
     1562      TRACE("-- key=0x04%x",lpmsg->wParam) ;
     1563    }
     1564    return S_FALSE; /* not handled */
    15641565}
    15651566
    15661567static HRESULT WINAPI IShellView_fnEnableModeless(IShellView * iface,BOOL fEnable)
    15671568{
    1568         ICOM_THIS(IShellViewImpl, iface);
    1569 
    1570         FIXME("(%p) stub\n",This);
    1571 
    1572         return E_NOTIMPL;
     1569    ICOM_THIS(IShellViewImpl, iface);
     1570
     1571    FIXME("(%p) stub\n",This);
     1572
     1573    return E_NOTIMPL;
    15731574}
    15741575
    15751576static HRESULT WINAPI IShellView_fnUIActivate(IShellView * iface,UINT uState)
    15761577{
    1577         ICOM_THIS(IShellViewImpl, iface);
     1578    ICOM_THIS(IShellViewImpl, iface);
    15781579
    15791580/*
    1580         CHAR    szName[MAX_PATH];
    1581 */
    1582         LRESULT lResult;
    1583         int     nPartArray[1] = {-1};
    1584 
    1585         TRACE("(%p)->(state=%x) stub\n",This, uState);
    1586 
    1587         /*don't do anything if the state isn't really changing*/
    1588         if(This->uState == uState)
    1589         {
    1590           return S_OK;
    1591         }
    1592 
    1593         /*OnActivate handles the menu merging and internal state*/
    1594         ShellView_OnActivate(This, uState);
    1595 
    1596         /*only do This if we are active*/
    1597         if(uState != SVUIA_DEACTIVATE)
    1598         {
     1581    CHAR    szName[MAX_PATH];
     1582*/
     1583    LRESULT lResult;
     1584    int nPartArray[1] = {-1};
     1585
     1586    TRACE("(%p)->(state=%x) stub\n",This, uState);
     1587
     1588    /*don't do anything if the state isn't really changing*/
     1589    if(This->uState == uState)
     1590    {
     1591      return S_OK;
     1592    }
     1593
     1594    /*OnActivate handles the menu merging and internal state*/
     1595    ShellView_OnActivate(This, uState);
     1596
     1597    /*only do This if we are active*/
     1598    if(uState != SVUIA_DEACTIVATE)
     1599    {
    15991600
    16001601/*
    1601           GetFolderPath is not a method of IShellFolder
    1602           IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) );
    1603 */
    1604           /* set the number of parts */
    1605           IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETPARTS, 1,
    1606                                                         (LPARAM)nPartArray, &lResult);
    1607 
    1608           /* set the text for the parts */
     1602      GetFolderPath is not a method of IShellFolder
     1603      IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) );
     1604*/
     1605      /* set the number of parts */
     1606      IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETPARTS, 1,
     1607                            (LPARAM)nPartArray, &lResult);
     1608
     1609      /* set the text for the parts */
    16091610/*
    1610           IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA,
    1611                                                         0, (LPARAM)szName, &lResult);
    1612 */                                                     
    1613         }
    1614 
    1615         return S_OK;
     1611      IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA,
     1612                            0, (LPARAM)szName, &lResult);
     1613*/
     1614    }
     1615
     1616    return S_OK;
    16161617}
    16171618
    16181619static HRESULT WINAPI IShellView_fnRefresh(IShellView * iface)
    16191620{
    1620         ICOM_THIS(IShellViewImpl, iface);
    1621 
    1622         TRACE("(%p)\n",This);
    1623 
    1624         ListView_DeleteAllItems(This->hWndList);
    1625         ShellView_FillList(This);
    1626 
    1627         return S_OK;
     1621    ICOM_THIS(IShellViewImpl, iface);
     1622
     1623    TRACE("(%p)\n",This);
     1624
     1625    ListView_DeleteAllItems(This->hWndList);
     1626    ShellView_FillList(This);
     1627
     1628    return S_OK;
    16281629}
    16291630
    16301631static HRESULT WINAPI IShellView_fnCreateViewWindow(
    1631         IShellView * iface,
    1632         IShellView *lpPrevView,
    1633         LPCFOLDERSETTINGS lpfs,
    1634         IShellBrowser * psb,
    1635         RECT * prcView,
    1636         HWND  *phWnd)
    1637 {
    1638         ICOM_THIS(IShellViewImpl, iface);
    1639 
    1640         WNDCLASSA wc;
    1641         *phWnd = 0;
    1642 
    1643        
    1644         TRACE("(%p)->(shlview=%p set=%p shlbrs=%p rec=%p hwnd=%p) incomplete\n",This, lpPrevView,lpfs, psb, prcView, phWnd);
    1645         TRACE("-- vmode=%x flags=%x left=%i top=%i right=%i bottom=%i\n",lpfs->ViewMode, lpfs->fFlags ,prcView->left,prcView->top, prcView->right, prcView->bottom);
    1646 
    1647         /*set up the member variables*/
    1648         This->pShellBrowser = psb;
    1649         This->FolderSettings = *lpfs;
    1650 
    1651         /*get our parent window*/
    1652         IShellBrowser_AddRef(This->pShellBrowser);
    1653         IShellBrowser_GetWindow(This->pShellBrowser, &(This->hWndParent));
    1654 
    1655         /* try to get the ICommDlgBrowserInterface, adds a reference !!! */
    1656         This->pCommDlgBrowser=NULL;
    1657         if ( SUCCEEDED (IShellBrowser_QueryInterface( This->pShellBrowser,
    1658                         (REFIID)&IID_ICommDlgBrowser, (LPVOID*) &This->pCommDlgBrowser)))
    1659         {
    1660           TRACE("-- CommDlgBrowser\n");
    1661         }
    1662 
    1663         /*if our window class has not been registered, then do so*/
    1664         if(!GetClassInfoA(shell32_hInstance, SV_CLASS_NAME, &wc))
    1665         {
    1666           ZeroMemory(&wc, sizeof(wc));
    1667           wc.style              = CS_HREDRAW | CS_VREDRAW;
    1668           wc.lpfnWndProc        = (WNDPROC) ShellView_WndProc;
    1669           wc.cbClsExtra         = 0;
    1670           wc.cbWndExtra         = 0;
    1671           wc.hInstance          = shell32_hInstance;
    1672           wc.hIcon              = 0;
    1673           wc.hCursor            = LoadCursorA (0, IDC_ARROWA);
    1674           wc.hbrBackground      = (HBRUSH) (COLOR_WINDOW + 1);
    1675           wc.lpszMenuName       = NULL;
    1676           wc.lpszClassName      = SV_CLASS_NAME;
    1677 
    1678           if(!RegisterClassA(&wc))
    1679             return E_FAIL;
    1680         }
    1681 
    1682         *phWnd = CreateWindowExA(0,
    1683                                 SV_CLASS_NAME,
    1684                                 NULL,
    1685                                 WS_CHILD | WS_VISIBLE | WS_TABSTOP,
    1686                                 prcView->left,
    1687                                 prcView->top,
    1688                                 prcView->right - prcView->left,
    1689                                 prcView->bottom - prcView->top,
    1690                                 This->hWndParent,
    1691                                 0,
    1692                                 shell32_hInstance,
    1693                                 (LPVOID)This);
    1694 
    1695         CheckToolbar(This);
    1696        
    1697         if(!*phWnd) return E_FAIL;
    1698 
    1699         return S_OK;
     1632    IShellView * iface,
     1633    IShellView *lpPrevView,
     1634    LPCFOLDERSETTINGS lpfs,
     1635    IShellBrowser * psb,
     1636    RECT * prcView,
     1637    HWND  *phWnd)
     1638{
     1639    ICOM_THIS(IShellViewImpl, iface);
     1640
     1641    WNDCLASSA wc;
     1642    *phWnd = 0;
     1643
     1644
     1645    TRACE("(%p)->(shlview=%p set=%p shlbrs=%p rec=%p hwnd=%p) incomplete\n",This, lpPrevView,lpfs, psb, prcView, phWnd);
     1646    TRACE("-- vmode=%x flags=%x left=%i top=%i right=%i bottom=%i\n",lpfs->ViewMode, lpfs->fFlags ,prcView->left,prcView->top, prcView->right, prcView->bottom);
     1647
     1648    /*set up the member variables*/
     1649    This->pShellBrowser = psb;
     1650    This->FolderSettings = *lpfs;
     1651
     1652    /*get our parent window*/
     1653    IShellBrowser_AddRef(This->pShellBrowser);
     1654    IShellBrowser_GetWindow(This->pShellBrowser, &(This->hWndParent));
     1655
     1656    /* try to get the ICommDlgBrowserInterface, adds a reference !!! */
     1657    This->pCommDlgBrowser=NULL;
     1658    if ( SUCCEEDED (IShellBrowser_QueryInterface( This->pShellBrowser,
     1659            (REFIID)&IID_ICommDlgBrowser, (LPVOID*) &This->pCommDlgBrowser)))
     1660    {
     1661      TRACE("-- CommDlgBrowser\n");
     1662    }
     1663
     1664    /*if our window class has not been registered, then do so*/
     1665    if(!GetClassInfoA(shell32_hInstance, SV_CLASS_NAME, &wc))
     1666    {
     1667      ZeroMemory(&wc, sizeof(wc));
     1668      wc.style      = CS_HREDRAW | CS_VREDRAW;
     1669      wc.lpfnWndProc    = (WNDPROC) ShellView_WndProc;
     1670      wc.cbClsExtra     = 0;
     1671      wc.cbWndExtra     = 0;
     1672      wc.hInstance      = shell32_hInstance;
     1673      wc.hIcon      = 0;
     1674      wc.hCursor        = LoadCursorA (0, IDC_ARROWA);
     1675      wc.hbrBackground  = (HBRUSH) (COLOR_WINDOW + 1);
     1676      wc.lpszMenuName   = NULL;
     1677      wc.lpszClassName  = SV_CLASS_NAME;
     1678
     1679      if(!RegisterClassA(&wc))
     1680        return E_FAIL;
     1681    }
     1682
     1683    *phWnd = CreateWindowExA(0,
     1684                SV_CLASS_NAME,
     1685                NULL,
     1686                WS_CHILD | WS_VISIBLE | WS_TABSTOP,
     1687                prcView->left,
     1688                prcView->top,
     1689                prcView->right - prcView->left,
     1690                prcView->bottom - prcView->top,
     1691                This->hWndParent,
     1692                0,
     1693                shell32_hInstance,
     1694                (LPVOID)This);
     1695
     1696    CheckToolbar(This);
     1697
     1698    if(!*phWnd) return E_FAIL;
     1699
     1700    return S_OK;
    17001701}
    17011702
    17021703static HRESULT WINAPI IShellView_fnDestroyViewWindow(IShellView * iface)
    17031704{
    1704         ICOM_THIS(IShellViewImpl, iface);
    1705 
    1706         TRACE("(%p)\n",This);
    1707 
    1708         /*Make absolutely sure all our UI is cleaned up.*/
    1709         IShellView_UIActivate((IShellView*)This, SVUIA_DEACTIVATE);
    1710 
    1711         if(This->hMenu)
    1712         {
    1713           DestroyMenu(This->hMenu);
    1714         }
    1715 
    1716         DestroyWindow(This->hWnd);
    1717         IShellBrowser_Release(This->pShellBrowser);
    1718 
    1719         return S_OK;
     1705    ICOM_THIS(IShellViewImpl, iface);
     1706
     1707    TRACE("(%p)\n",This);
     1708
     1709    /*Make absolutely sure all our UI is cleaned up.*/
     1710    IShellView_UIActivate((IShellView*)This, SVUIA_DEACTIVATE);
     1711
     1712    if(This->hMenu)
     1713    {
     1714      DestroyMenu(This->hMenu);
     1715    }
     1716
     1717    DestroyWindow(This->hWnd);
     1718    IShellBrowser_Release(This->pShellBrowser);
     1719
     1720    return S_OK;
    17201721}
    17211722
    17221723static HRESULT WINAPI IShellView_fnGetCurrentInfo(IShellView * iface, LPFOLDERSETTINGS lpfs)
    17231724{
    1724         ICOM_THIS(IShellViewImpl, iface);
    1725 
    1726         TRACE("(%p)->(%p) vmode=%x flags=%x\n",This, lpfs,
    1727                 This->FolderSettings.ViewMode, This->FolderSettings.fFlags);
    1728 
    1729         if (!lpfs) return E_INVALIDARG;
    1730 
    1731         *lpfs = This->FolderSettings;
    1732         return NOERROR;
     1725    ICOM_THIS(IShellViewImpl, iface);
     1726
     1727    TRACE("(%p)->(%p) vmode=%x flags=%x\n",This, lpfs,
     1728        This->FolderSettings.ViewMode, This->FolderSettings.fFlags);
     1729
     1730    if (!lpfs) return E_INVALIDARG;
     1731
     1732    *lpfs = This->FolderSettings;
     1733    return NOERROR;
    17331734}
    17341735
    17351736static HRESULT WINAPI IShellView_fnAddPropertySheetPages(IShellView * iface, DWORD dwReserved,LPFNADDPROPSHEETPAGE lpfn, LPARAM lparam)
    17361737{
    1737         ICOM_THIS(IShellViewImpl, iface);
    1738 
    1739         FIXME("(%p) stub\n",This);
    1740 
    1741         return E_NOTIMPL;
     1738    ICOM_THIS(IShellViewImpl, iface);
     1739
     1740    FIXME("(%p) stub\n",This);
     1741
     1742    return E_NOTIMPL;
    17421743}
    17431744
    17441745static HRESULT WINAPI IShellView_fnSaveViewState(IShellView * iface)
    17451746{
    1746         ICOM_THIS(IShellViewImpl, iface);
    1747 
    1748         FIXME("(%p) stub\n",This);
    1749 
    1750         return S_OK;
     1747    ICOM_THIS(IShellViewImpl, iface);
     1748
     1749    FIXME("(%p) stub\n",This);
     1750
     1751    return S_OK;
    17511752}
    17521753
    17531754static HRESULT WINAPI IShellView_fnSelectItem(
    1754         IShellView * iface,
    1755         LPCITEMIDLIST pidl,
    1756         UINT uFlags)
    1757 {
    1758         ICOM_THIS(IShellViewImpl, iface);
    1759         int i;
    1760        
    1761         TRACE("(%p)->(pidl=%p, 0x%08x) stub\n",This, pidl, uFlags);
    1762        
    1763         i = LV_FindItemByPidl(This, pidl);
    1764 
    1765         if (i != -1)
    1766         {
    1767           LVITEMA lvItem;
    1768          
    1769           if(uFlags & SVSI_ENSUREVISIBLE)
    1770             ListView_EnsureVisible(This->hWndList, i, 0);
     1755    IShellView * iface,
     1756    LPCITEMIDLIST pidl,
     1757    UINT uFlags)
     1758{
     1759    ICOM_THIS(IShellViewImpl, iface);
     1760    int i;
     1761
     1762    TRACE("(%p)->(pidl=%p, 0x%08x) stub\n",This, pidl, uFlags);
     1763
     1764    i = LV_FindItemByPidl(This, pidl);
     1765
     1766    if (i != -1)
     1767    {
     1768      LVITEMA lvItem;
     1769
     1770      if(uFlags & SVSI_ENSUREVISIBLE)
     1771        ListView_EnsureVisible(This->hWndList, i, 0);
    17711772
    17721773          ZeroMemory(&lvItem, sizeof(LVITEMA));
    1773           lvItem.mask = LVIF_STATE;
    1774           lvItem.iItem = 0;
     1774      lvItem.mask = LVIF_STATE;
     1775      lvItem.iItem = 0;
    17751776
    17761777          while(ListView_GetItemA(This->hWndList, &lvItem))
    1777           {
    1778             if (lvItem.iItem == i)
    1779             {
    1780               if (uFlags & SVSI_SELECT)
    1781                 lvItem.state |= LVIS_SELECTED;
    1782               else
    1783                 lvItem.state &= ~LVIS_SELECTED;
    1784 
    1785               if(uFlags & SVSI_FOCUSED)
    1786                 lvItem.state &= ~LVIS_FOCUSED;
    1787             }
    1788             else
    1789             {
    1790               if (uFlags & SVSI_DESELECTOTHERS)
    1791                 lvItem.state &= ~LVIS_SELECTED;
    1792             }
    1793             ListView_SetItemA(This->hWndList, &lvItem);
    1794             lvItem.iItem++;
    1795           }
    1796 
    1797 
    1798           if(uFlags & SVSI_EDIT)
    1799             ListView_EditLabelA(This->hWndList, i);
    1800 
    1801         }
    1802         return S_OK;
     1778      {
     1779        if (lvItem.iItem == i)
     1780        {
     1781          if (uFlags & SVSI_SELECT)
     1782            lvItem.state |= LVIS_SELECTED;
     1783          else
     1784        lvItem.state &= ~LVIS_SELECTED;
     1785
     1786          if(uFlags & SVSI_FOCUSED)
     1787            lvItem.state &= ~LVIS_FOCUSED;
     1788        }
     1789        else
     1790        {
     1791          if (uFlags & SVSI_DESELECTOTHERS)
     1792            lvItem.state &= ~LVIS_SELECTED;
     1793        }
     1794        ListView_SetItemA(This->hWndList, &lvItem);
     1795        lvItem.iItem++;
     1796      }
     1797
     1798
     1799      if(uFlags & SVSI_EDIT)
     1800        ListView_EditLabelA(This->hWndList, i);
     1801
     1802    }
     1803    return S_OK;
    18031804}
    18041805
    18051806static HRESULT WINAPI IShellView_fnGetItemObject(IShellView * iface, UINT uItem, REFIID riid, LPVOID *ppvOut)
    18061807{
    1807         ICOM_THIS(IShellViewImpl, iface);
    1808 
    1809         TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",This, uItem, debugstr_guid(riid), ppvOut);
    1810 
    1811         *ppvOut = NULL;
    1812 
    1813         switch(uItem)
    1814         {
    1815           case SVGIO_BACKGROUND:
    1816             *ppvOut = ISvBgCm_Constructor(This->pSFParent);
    1817             break;
    1818 
    1819           case SVGIO_SELECTION:
    1820             ShellView_GetSelections(This);
    1821             IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, riid, 0, ppvOut);
    1822             break;
    1823         }
    1824         TRACE("-- (%p)->(interface=%p)\n",This, *ppvOut);
    1825 
    1826         if(!*ppvOut) return E_OUTOFMEMORY;
    1827 
    1828         return S_OK;
     1808    ICOM_THIS(IShellViewImpl, iface);
     1809
     1810    TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",This, uItem, debugstr_guid(riid), ppvOut);
     1811
     1812    *ppvOut = NULL;
     1813
     1814    switch(uItem)
     1815    {
     1816      case SVGIO_BACKGROUND:
     1817        *ppvOut = ISvBgCm_Constructor(This->pSFParent);
     1818        break;
     1819
     1820      case SVGIO_SELECTION:
     1821        ShellView_GetSelections(This);
     1822        IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, riid, 0, ppvOut);
     1823        break;
     1824    }
     1825    TRACE("-- (%p)->(interface=%p)\n",This, *ppvOut);
     1826
     1827    if(!*ppvOut) return E_OUTOFMEMORY;
     1828
     1829    return S_OK;
    18291830}
    18301831
    18311832static HRESULT WINAPI IShellView_fnEditItem(
    1832         IShellView * iface,
    1833         LPITEMIDLIST pidl)
    1834 {
    1835         ICOM_THIS(IShellViewImpl, iface);
    1836         int i;
    1837        
    1838         TRACE("(%p)->(pidl=%p)\n",This, pidl);
    1839        
    1840         i = LV_FindItemByPidl(This, pidl);
    1841         if (i != -1)
    1842         {
    1843           SetFocus(This->hWndList);
    1844           ListView_EditLabelA(This->hWndList, i);
    1845         }
    1846         return S_OK;
    1847 }
    1848 
    1849 static struct ICOM_VTABLE(IShellView) svvt = 
    1850 {       
    1851         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    1852         IShellView_fnQueryInterface,
    1853         IShellView_fnAddRef,
    1854         IShellView_fnRelease,
    1855         IShellView_fnGetWindow,
    1856         IShellView_fnContextSensitiveHelp,
    1857         IShellView_fnTranslateAccelerator,
    1858         IShellView_fnEnableModeless,
    1859         IShellView_fnUIActivate,
    1860         IShellView_fnRefresh,
    1861         IShellView_fnCreateViewWindow,
    1862         IShellView_fnDestroyViewWindow,
    1863         IShellView_fnGetCurrentInfo,
    1864         IShellView_fnAddPropertySheetPages,
    1865         IShellView_fnSaveViewState,
    1866         IShellView_fnSelectItem,
    1867         IShellView_fnGetItemObject,
    1868         IShellView_fnEditItem
     1833    IShellView * iface,
     1834    LPITEMIDLIST pidl)
     1835{
     1836    ICOM_THIS(IShellViewImpl, iface);
     1837    int i;
     1838
     1839    TRACE("(%p)->(pidl=%p)\n",This, pidl);
     1840
     1841    i = LV_FindItemByPidl(This, pidl);
     1842    if (i != -1)
     1843    {
     1844      SetFocus(This->hWndList);
     1845      ListView_EditLabelA(This->hWndList, i);
     1846    }
     1847    return S_OK;
     1848}
     1849
     1850static struct ICOM_VTABLE(IShellView) svvt =
     1851{
     1852    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     1853    IShellView_fnQueryInterface,
     1854    IShellView_fnAddRef,
     1855    IShellView_fnRelease,
     1856    IShellView_fnGetWindow,
     1857    IShellView_fnContextSensitiveHelp,
     1858    IShellView_fnTranslateAccelerator,
     1859    IShellView_fnEnableModeless,
     1860    IShellView_fnUIActivate,
     1861    IShellView_fnRefresh,
     1862    IShellView_fnCreateViewWindow,
     1863    IShellView_fnDestroyViewWindow,
     1864    IShellView_fnGetCurrentInfo,
     1865    IShellView_fnAddPropertySheetPages,
     1866    IShellView_fnSaveViewState,
     1867    IShellView_fnSelectItem,
     1868    IShellView_fnGetItemObject,
     1869    IShellView_fnEditItem
    18691870};
    18701871
     
    18741875 */
    18751876static HRESULT WINAPI ISVOleCmdTarget_QueryInterface(
    1876         IOleCommandTarget *     iface,
    1877         REFIID                  iid,
    1878         LPVOID*                 ppvObj)
    1879 {
    1880         _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
    1881 
    1882         return IShellFolder_QueryInterface((IShellFolder*)This, iid, ppvObj);
     1877    IOleCommandTarget * iface,
     1878    REFIID          iid,
     1879    LPVOID*         ppvObj)
     1880{
     1881    _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
     1882
     1883    return IShellFolder_QueryInterface((IShellFolder*)This, iid, ppvObj);
    18831884}
    18841885
     
    18871888 */
    18881889static ULONG WINAPI ISVOleCmdTarget_AddRef(
    1889         IOleCommandTarget *     iface)
    1890 {
    1891         _ICOM_THIS_From_IOleCommandTarget(IShellFolder, iface);
    1892 
    1893         return IShellFolder_AddRef((IShellFolder*)This);
     1890    IOleCommandTarget * iface)
     1891{
     1892    _ICOM_THIS_From_IOleCommandTarget(IShellFolder, iface);
     1893
     1894    return IShellFolder_AddRef((IShellFolder*)This);
    18941895}
    18951896
     
    18981899 */
    18991900static ULONG WINAPI ISVOleCmdTarget_Release(
    1900         IOleCommandTarget *     iface)
    1901 {
    1902         _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
    1903 
    1904         return IShellFolder_Release((IShellFolder*)This);
     1901    IOleCommandTarget * iface)
     1902{
     1903    _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
     1904
     1905    return IShellFolder_Release((IShellFolder*)This);
    19051906}
    19061907
     
    19091910 */
    19101911static HRESULT WINAPI ISVOleCmdTarget_QueryStatus(
    1911         IOleCommandTarget *iface,
    1912         const GUID* pguidCmdGroup,
    1913         ULONG cCmds,
    1914         OLECMD * prgCmds,
    1915         OLECMDTEXT* pCmdText)
    1916 {
    1917         _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
    1918 
    1919         FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n",
     1912    IOleCommandTarget *iface,
     1913    const GUID* pguidCmdGroup,
     1914    ULONG cCmds,
     1915    OLECMD * prgCmds,
     1916    OLECMDTEXT* pCmdText)
     1917{
     1918    _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
     1919
     1920    FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n",
    19201921              This, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
    1921         return E_NOTIMPL;
     1922    return E_NOTIMPL;
    19221923}
    19231924
     
    19281929 */
    19291930static HRESULT WINAPI ISVOleCmdTarget_Exec(
    1930         IOleCommandTarget *iface,
    1931         const GUID* pguidCmdGroup,
    1932         DWORD nCmdID,
    1933         DWORD nCmdexecopt,
    1934         VARIANT* pvaIn,
    1935         VARIANT* pvaOut)
    1936 {
    1937         _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
    1938 
    1939         FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n",
     1931    IOleCommandTarget *iface,
     1932    const GUID* pguidCmdGroup,
     1933    DWORD nCmdID,
     1934    DWORD nCmdexecopt,
     1935    VARIANT* pvaIn,
     1936    VARIANT* pvaOut)
     1937{
     1938    _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
     1939
     1940    FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n",
    19401941              This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
    1941         return E_NOTIMPL;
    1942 }
    1943 
    1944 static ICOM_VTABLE(IOleCommandTarget) ctvt = 
    1945 {
    1946         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    1947         ISVOleCmdTarget_QueryInterface,
    1948         ISVOleCmdTarget_AddRef,
    1949         ISVOleCmdTarget_Release,
    1950         ISVOleCmdTarget_QueryStatus,
    1951         ISVOleCmdTarget_Exec
     1942    return E_NOTIMPL;
     1943}
     1944
     1945static ICOM_VTABLE(IOleCommandTarget) ctvt =
     1946{
     1947    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     1948    ISVOleCmdTarget_QueryInterface,
     1949    ISVOleCmdTarget_AddRef,
     1950    ISVOleCmdTarget_Release,
     1951    ISVOleCmdTarget_QueryStatus,
     1952    ISVOleCmdTarget_Exec
    19521953};
    19531954
     
    19571958
    19581959static HRESULT WINAPI ISVDropTarget_QueryInterface(
    1959         IDropTarget *iface,
    1960         REFIID riid,
    1961         LPVOID *ppvObj)
    1962 {
    1963         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1964 
    1965         TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
    1966 
    1967         return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
     1960    IDropTarget *iface,
     1961    REFIID riid,
     1962    LPVOID *ppvObj)
     1963{
     1964    _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1965
     1966    TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
     1967
     1968    return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
    19681969}
    19691970
    19701971static ULONG WINAPI ISVDropTarget_AddRef( IDropTarget *iface)
    19711972{
    1972         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1973 
    1974         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1975 
    1976         return IShellFolder_AddRef((IShellFolder*)This);
     1973    _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1974
     1975    TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1976
     1977    return IShellFolder_AddRef((IShellFolder*)This);
    19771978}
    19781979
    19791980static ULONG WINAPI ISVDropTarget_Release( IDropTarget *iface)
    19801981{
    1981         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1982 
    1983         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1984 
    1985         return IShellFolder_Release((IShellFolder*)This);
     1982    _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1983
     1984    TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1985
     1986    return IShellFolder_Release((IShellFolder*)This);
    19861987}
    19871988
    19881989static HRESULT WINAPI ISVDropTarget_DragEnter(
    1989         IDropTarget     *iface,
    1990         IDataObject     *pDataObject,
    1991         DWORD           grfKeyState,
    1992         POINTL          pt,
    1993         DWORD           *pdwEffect)
    1994 {       
    1995 
    1996         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1997 
    1998         FIXME("Stub: This=%p, DataObject=%p\n",This,pDataObject);
    1999 
    2000         return E_NOTIMPL;
     1990    IDropTarget     *iface,
     1991    IDataObject *pDataObject,
     1992    DWORD       grfKeyState,
     1993    POINTL      pt,
     1994    DWORD       *pdwEffect)
     1995{
     1996
     1997    _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1998
     1999    FIXME("Stub: This=%p, DataObject=%p\n",This,pDataObject);
     2000
     2001    return E_NOTIMPL;
    20012002}
    20022003
    20032004static HRESULT WINAPI ISVDropTarget_DragOver(
    2004         IDropTarget     *iface,
    2005         DWORD           grfKeyState,
    2006         POINTL          pt,
    2007         DWORD           *pdwEffect)
    2008 {
    2009         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    2010 
    2011         FIXME("Stub: This=%p\n",This);
    2012 
    2013         return E_NOTIMPL;
     2005    IDropTarget *iface,
     2006    DWORD       grfKeyState,
     2007    POINTL      pt,
     2008    DWORD       *pdwEffect)
     2009{
     2010    _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     2011
     2012    FIXME("Stub: This=%p\n",This);
     2013
     2014    return E_NOTIMPL;
    20142015}
    20152016
    20162017static HRESULT WINAPI ISVDropTarget_DragLeave(
    2017         IDropTarget     *iface)
    2018 {
    2019         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    2020 
    2021         FIXME("Stub: This=%p\n",This);
    2022 
    2023         return E_NOTIMPL;
     2018    IDropTarget *iface)
     2019{
     2020    _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     2021
     2022    FIXME("Stub: This=%p\n",This);
     2023
     2024    return E_NOTIMPL;
    20242025}
    20252026
    20262027static HRESULT WINAPI ISVDropTarget_Drop(
    2027         IDropTarget     *iface,
    2028         IDataObject*    pDataObject,
    2029         DWORD           grfKeyState,
    2030         POINTL          pt,
    2031         DWORD           *pdwEffect)
    2032 {
    2033         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    2034 
    2035         FIXME("Stub: This=%p\n",This);
    2036 
    2037         return E_NOTIMPL;
    2038 }
    2039 
    2040 static struct ICOM_VTABLE(IDropTarget) dtvt = 
    2041 {
    2042         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    2043         ISVDropTarget_QueryInterface,
    2044         ISVDropTarget_AddRef,
    2045         ISVDropTarget_Release,
    2046         ISVDropTarget_DragEnter,
    2047         ISVDropTarget_DragOver,
    2048         ISVDropTarget_DragLeave,
    2049         ISVDropTarget_Drop
     2028    IDropTarget *iface,
     2029    IDataObject*    pDataObject,
     2030    DWORD       grfKeyState,
     2031    POINTL      pt,
     2032    DWORD       *pdwEffect)
     2033{
     2034    _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     2035
     2036    FIXME("Stub: This=%p\n",This);
     2037
     2038    return E_NOTIMPL;
     2039}
     2040
     2041static struct ICOM_VTABLE(IDropTarget) dtvt =
     2042{
     2043    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     2044    ISVDropTarget_QueryInterface,
     2045    ISVDropTarget_AddRef,
     2046    ISVDropTarget_Release,
     2047    ISVDropTarget_DragEnter,
     2048    ISVDropTarget_DragOver,
     2049    ISVDropTarget_DragLeave,
     2050    ISVDropTarget_Drop
    20502051};
    20512052
     
    20552056
    20562057static HRESULT WINAPI ISVDropSource_QueryInterface(
    2057         IDropSource *iface,
    2058         REFIID riid,
    2059         LPVOID *ppvObj)
    2060 {
    2061         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    2062 
    2063         TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
    2064 
    2065         return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
     2058    IDropSource *iface,
     2059    REFIID riid,
     2060    LPVOID *ppvObj)
     2061{
     2062    _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     2063
     2064    TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
     2065
     2066    return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
    20662067}
    20672068
    20682069static ULONG WINAPI ISVDropSource_AddRef( IDropSource *iface)
    20692070{
    2070         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    2071 
    2072         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    2073 
    2074         return IShellFolder_AddRef((IShellFolder*)This);
     2071    _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     2072
     2073    TRACE("(%p)->(count=%lu)\n",This,This->ref);
     2074
     2075    return IShellFolder_AddRef((IShellFolder*)This);
    20752076}
    20762077
    20772078static ULONG WINAPI ISVDropSource_Release( IDropSource *iface)
    20782079{
    2079         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    2080 
    2081         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    2082 
    2083         return IShellFolder_Release((IShellFolder*)This);
     2080    _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     2081
     2082    TRACE("(%p)->(count=%lu)\n",This,This->ref);
     2083
     2084    return IShellFolder_Release((IShellFolder*)This);
    20842085}
    20852086static HRESULT WINAPI ISVDropSource_QueryContinueDrag(
    2086         IDropSource *iface,
    2087         BOOL fEscapePressed,
    2088         DWORD grfKeyState)
    2089 {
    2090         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    2091         TRACE("(%p)\n",This);
    2092 
    2093         if (fEscapePressed)
    2094           return DRAGDROP_S_CANCEL;
    2095         else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
    2096           return DRAGDROP_S_DROP;
    2097         else
    2098           return NOERROR;
     2087    IDropSource *iface,
     2088    BOOL fEscapePressed,
     2089    DWORD grfKeyState)
     2090{
     2091    _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     2092    TRACE("(%p)\n",This);
     2093
     2094    if (fEscapePressed)
     2095      return DRAGDROP_S_CANCEL;
     2096    else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
     2097      return DRAGDROP_S_DROP;
     2098    else
     2099      return NOERROR;
    20992100}
    21002101
    21012102static HRESULT WINAPI ISVDropSource_GiveFeedback(
    2102         IDropSource *iface,
    2103         DWORD dwEffect)
    2104 {
    2105         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    2106         TRACE("(%p)\n",This);
    2107 
    2108         return DRAGDROP_S_USEDEFAULTCURSORS;
     2103    IDropSource *iface,
     2104    DWORD dwEffect)
     2105{
     2106    _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     2107    TRACE("(%p)\n",This);
     2108
     2109    return DRAGDROP_S_USEDEFAULTCURSORS;
    21092110}
    21102111
    21112112static struct ICOM_VTABLE(IDropSource) dsvt =
    21122113{
    2113         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    2114         ISVDropSource_QueryInterface,
    2115         ISVDropSource_AddRef,
    2116         ISVDropSource_Release,
    2117         ISVDropSource_QueryContinueDrag,
    2118         ISVDropSource_GiveFeedback
     2114    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     2115    ISVDropSource_QueryInterface,
     2116    ISVDropSource_AddRef,
     2117    ISVDropSource_Release,
     2118    ISVDropSource_QueryContinueDrag,
     2119    ISVDropSource_GiveFeedback
    21192120};
    21202121/**********************************************************
     
    21232124
    21242125static HRESULT WINAPI ISVViewObject_QueryInterface(
    2125         IViewObject *iface,
    2126         REFIID riid,
    2127         LPVOID *ppvObj)
    2128 {
    2129         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2130 
    2131         TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
    2132 
    2133         return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
     2126    IViewObject *iface,
     2127    REFIID riid,
     2128    LPVOID *ppvObj)
     2129{
     2130    _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2131
     2132    TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
     2133
     2134    return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
    21342135}
    21352136
    21362137static ULONG WINAPI ISVViewObject_AddRef( IViewObject *iface)
    21372138{
    2138         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2139 
    2140         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    2141 
    2142         return IShellFolder_AddRef((IShellFolder*)This);
     2139    _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2140
     2141    TRACE("(%p)->(count=%lu)\n",This,This->ref);
     2142
     2143    return IShellFolder_AddRef((IShellFolder*)This);
    21432144}
    21442145
    21452146static ULONG WINAPI ISVViewObject_Release( IViewObject *iface)
    21462147{
    2147         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2148 
    2149         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    2150 
    2151         return IShellFolder_Release((IShellFolder*)This);
     2148    _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2149
     2150    TRACE("(%p)->(count=%lu)\n",This,This->ref);
     2151
     2152    return IShellFolder_Release((IShellFolder*)This);
    21522153}
    21532154
    21542155static HRESULT WINAPI ISVViewObject_Draw(
    2155         IViewObject     *iface,
    2156         DWORD dwDrawAspect,
    2157         LONG lindex,
    2158         void* pvAspect,
    2159         DVTARGETDEVICE* ptd,
    2160         HDC hdcTargetDev,
    2161         HDC hdcDraw,
    2162         LPCRECTL lprcBounds,
    2163         LPCRECTL lprcWBounds,
    2164         IVO_ContCallback pfnContinue,
    2165         DWORD dwContinue)
    2166 {       
    2167 
    2168         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2169 
    2170         FIXME("Stub: This=%p\n",This);
    2171 
    2172         return E_NOTIMPL;
     2156    IViewObject     *iface,
     2157    DWORD dwDrawAspect,
     2158    LONG lindex,
     2159    void* pvAspect,
     2160    DVTARGETDEVICE* ptd,
     2161    HDC hdcTargetDev,
     2162    HDC hdcDraw,
     2163    LPCRECTL lprcBounds,
     2164    LPCRECTL lprcWBounds,
     2165    IVO_ContCallback pfnContinue,
     2166    DWORD dwContinue)
     2167{
     2168
     2169    _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2170
     2171    FIXME("Stub: This=%p\n",This);
     2172
     2173    return E_NOTIMPL;
    21732174}
    21742175static HRESULT WINAPI ISVViewObject_GetColorSet(
    2175         IViewObject     *iface,
    2176         DWORD dwDrawAspect,
    2177         LONG lindex,
    2178         void *pvAspect,
    2179         DVTARGETDEVICE* ptd,
    2180         HDC hicTargetDevice,
    2181         LOGPALETTE** ppColorSet)
    2182 {       
    2183 
    2184         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2185 
    2186         FIXME("Stub: This=%p\n",This);
    2187 
    2188         return E_NOTIMPL;
     2176    IViewObject     *iface,
     2177    DWORD dwDrawAspect,
     2178    LONG lindex,
     2179    void *pvAspect,
     2180    DVTARGETDEVICE* ptd,
     2181    HDC hicTargetDevice,
     2182    LOGPALETTE** ppColorSet)
     2183{
     2184
     2185    _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2186
     2187    FIXME("Stub: This=%p\n",This);
     2188
     2189    return E_NOTIMPL;
    21892190}
    21902191static HRESULT WINAPI ISVViewObject_Freeze(
    2191         IViewObject     *iface,
    2192         DWORD dwDrawAspect,
    2193         LONG lindex,
    2194         void* pvAspect,
    2195         DWORD* pdwFreeze)
    2196 {       
    2197 
    2198         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2199 
    2200         FIXME("Stub: This=%p\n",This);
    2201 
    2202         return E_NOTIMPL;
     2192    IViewObject     *iface,
     2193    DWORD dwDrawAspect,
     2194    LONG lindex,
     2195    void* pvAspect,
     2196    DWORD* pdwFreeze)
     2197{
     2198
     2199    _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2200
     2201    FIXME("Stub: This=%p\n",This);
     2202
     2203    return E_NOTIMPL;
    22032204}
    22042205static HRESULT WINAPI ISVViewObject_Unfreeze(
    2205         IViewObject     *iface,
    2206         DWORD dwFreeze)
    2207 {       
    2208 
    2209         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2210 
    2211         FIXME("Stub: This=%p\n",This);
    2212 
    2213         return E_NOTIMPL;
     2206    IViewObject     *iface,
     2207    DWORD dwFreeze)
     2208{
     2209
     2210    _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2211
     2212    FIXME("Stub: This=%p\n",This);
     2213
     2214    return E_NOTIMPL;
    22142215}
    22152216static HRESULT WINAPI ISVViewObject_SetAdvise(
    2216         IViewObject     *iface,
    2217         DWORD aspects,
    2218         DWORD advf,
    2219         IAdviseSink* pAdvSink)
    2220 {       
    2221 
    2222         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2223 
    2224         FIXME("Stub: This=%p\n",This);
    2225 
    2226         return E_NOTIMPL;
     2217    IViewObject     *iface,
     2218    DWORD aspects,
     2219    DWORD advf,
     2220    IAdviseSink* pAdvSink)
     2221{
     2222
     2223    _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2224
     2225    FIXME("Stub: This=%p\n",This);
     2226
     2227    return E_NOTIMPL;
    22272228}
    22282229static HRESULT WINAPI ISVViewObject_GetAdvise(
    2229         IViewObject     *iface,
    2230         DWORD* pAspects,
    2231         DWORD* pAdvf,
    2232         IAdviseSink** ppAdvSink)
    2233 {       
    2234 
    2235         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2236 
    2237         FIXME("Stub: This=%p\n",This);
    2238 
    2239         return E_NOTIMPL;
    2240 }
    2241 
    2242 
    2243 static struct ICOM_VTABLE(IViewObject) vovt = 
    2244 {
    2245         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    2246         ISVViewObject_QueryInterface,
    2247         ISVViewObject_AddRef,
    2248         ISVViewObject_Release,
    2249         ISVViewObject_Draw,
    2250         ISVViewObject_GetColorSet,
    2251         ISVViewObject_Freeze,
    2252         ISVViewObject_Unfreeze,
    2253         ISVViewObject_SetAdvise,
    2254         ISVViewObject_GetAdvise
     2230    IViewObject     *iface,
     2231    DWORD* pAspects,
     2232    DWORD* pAdvf,
     2233    IAdviseSink** ppAdvSink)
     2234{
     2235
     2236    _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2237
     2238    FIXME("Stub: This=%p\n",This);
     2239
     2240    return E_NOTIMPL;
     2241}
     2242
     2243
     2244static struct ICOM_VTABLE(IViewObject) vovt =
     2245{
     2246    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     2247    ISVViewObject_QueryInterface,
     2248    ISVViewObject_AddRef,
     2249    ISVViewObject_Release,
     2250    ISVViewObject_Draw,
     2251    ISVViewObject_GetColorSet,
     2252    ISVViewObject_Freeze,
     2253    ISVViewObject_Unfreeze,
     2254    ISVViewObject_SetAdvise,
     2255    ISVViewObject_GetAdvise
    22552256};
    22562257
Note: See TracChangeset for help on using the changeset viewer.