Ignore:
Timestamp:
Sep 15, 2001, 11:26:26 AM (24 years ago)
Author:
sandervl
Message:

restored old version

File:
1 edited

Legend:

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

    r6650 r6709  
    1 /* $Id: shlview.c,v 1.3 2001-09-05 13:46:59 bird Exp $ */
    21/*
    3  *  ShellView
     2 *      ShellView
    43 *
    5  *  Copyright 1998,1999 <juergen.schmied@debitel.net>
     4 *      Copyright 1998,1999     <juergen.schmied@debitel.net>
    65 *
    76 * This is the view visualizing the data provied by the shellfolder.
    8  * No direct access to data from pidls should be done from here.
    9  *
     7 * No direct access to data from pidls should be done from here. 
     8 * 
    109 * FIXME: The order by part of the background context menu should be
    1110 * buily according to the columns shown.
     
    2120 *
    2221 * FIXME: when the ShellView_WndProc gets a WM_NCDESTROY should we do a
    23  * Release() ???
     22 * Release() ??? 
    2423 */
    2524
     
    5049}LISTVIEW_SORT_INFO, *LPLISTVIEW_SORT_INFO;
    5150
    52 typedef 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;
     51typedef 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;
    7170        LISTVIEW_SORT_INFO ListViewSortInfo;
    72     HANDLE      hNotify;    /* change notification handle */
    73     HANDLE      hAccel;
     71        HANDLE          hNotify;        /* change notification handle */
     72        HANDLE          hAccel;
    7473} IShellViewImpl;
    7574
     
    7776
    7877static struct ICOM_VTABLE(IOleCommandTarget) ctvt;
    79 #define _IOleCommandTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblOleCommandTarget)))
    80 #define _ICOM_THIS_From_IOleCommandTarget(class, name) class* This = (class*)(((char*)name)-_IOleCommandTarget_Offset);
     78#define _IOleCommandTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblOleCommandTarget))) 
     79#define _ICOM_THIS_From_IOleCommandTarget(class, name) class* This = (class*)(((char*)name)-_IOleCommandTarget_Offset); 
    8180
    8281static struct ICOM_VTABLE(IDropTarget) dtvt;
    83 #define _IDropTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropTarget)))
    84 #define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset);
     82#define _IDropTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropTarget))) 
     83#define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset); 
    8584
    8685static struct ICOM_VTABLE(IDropSource) dsvt;
    87 #define _IDropSource_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropSource)))
    88 #define _ICOM_THIS_From_IDropSource(class, name) class* This = (class*)(((char*)name)-_IDropSource_Offset);
     86#define _IDropSource_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropSource))) 
     87#define _ICOM_THIS_From_IDropSource(class, name) class* This = (class*)(((char*)name)-_IDropSource_Offset); 
    8988
    9089static struct ICOM_VTABLE(IViewObject) vovt;
    91 #define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject)))
    92 #define _ICOM_THIS_From_IViewObject(class, name) class* This = (class*)(((char*)name)-_IViewObject_Offset);
     90#define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject))) 
     91#define _ICOM_THIS_From_IViewObject(class, name) class* This = (class*)(((char*)name)-_IViewObject_Offset); 
    9392
    9493/* ListView Header ID's */
     
    113112#define GET_WM_COMMAND_CMD(wp, lp)              HIWORD(wp)
    114113
    115 extern void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition,
    116             UINT wID, UINT fType, LPSTR dwTypeData, UINT fState);
     114extern void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition, 
     115                        UINT wID, UINT fType, LPSTR dwTypeData, UINT fState);
    117116
    118117/*
     
    128127} MYTOOLINFO, *LPMYTOOLINFO;
    129128
    130 MYTOOLINFO Tools[] =
     129MYTOOLINFO Tools[] = 
    131130{
    132131{ FCIDM_SHVIEW_BIGICON,    0, 0, IDS_VIEW_LARGE,   TBSTATE_ENABLED, TBSTYLE_BUTTON },
     
    144143
    145144/**********************************************************
    146  *  IShellView_Constructor
     145 *      IShellView_Constructor
    147146 */
    148147IShellView * IShellView_Constructor( IShellFolder * pFolder)
    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;
     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;
    165164}
    166165
     
    170169 */
    171170static BOOL IsInCommDlg(IShellViewImpl * This)
    172 {   return(This->pCommDlgBrowser != NULL);
     171{       return(This->pCommDlgBrowser != NULL);
    173172}
    174173
    175174static HRESULT IncludeObject(IShellViewImpl * This, LPCITEMIDLIST pidl)
    176175{
    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;
     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;
    186185}
    187186
    188187static HRESULT OnDefaultCommand(IShellViewImpl * This)
    189188{
    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;
     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;
    199198}
    200199
    201200static HRESULT OnStateChange(IShellViewImpl * This, UINT uFlags)
    202201{
    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
     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
    215214 *
    216  * - activates the buttons from the shellbrowser according to
     215 * - activates the buttons from the shellbrowser according to 
    217216 *   the view state
    218217 */
    219218static void CheckToolbar(IShellViewImpl * This)
    220219{
    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     }
     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        }
    236235}
    237236
     
    241240 */
    242241/**********************************************************
    243  *  change the style of the listview control
     242 *      change the style of the listview control
    244243 */
    245244static void SetStyle(IShellViewImpl * This, DWORD dwAdd, DWORD dwRemove)
    246245{
    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));
     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));
    253252}
    254253
     
    259258*/
    260259static BOOL ShellView_CreateList (IShellViewImpl * This)
    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;
     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;
    293292
    294293        This->ListViewSortInfo.bIsAscending = TRUE;
     
    297296
    298297        /*  UpdateShellSettings(); */
    299     return TRUE;
     298        return TRUE;
    300299}
    301300
     
    307306static BOOL ShellView_InitList(IShellViewImpl * This)
    308307{
    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()
     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() 
    345344*
    346345* NOTES
    347346*  internal, CALLBACK for DSA_Sort
    348 */
     347*/   
    349348static INT CALLBACK ShellView_CompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData)
    350349{
    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;
     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;
    359358}
    360359
     
    370369 *
    371370 * RETURNS
    372  *     A negative value if the first item should precede the second,
    373  *     a positive value if the first item should follow the second,
     371 *     A negative value if the first item should precede the second, 
     372 *     a positive value if the first item should follow the second, 
    374373 *     or zero if the two items are equivalent
    375374 *
    376375 * NOTES
    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)
     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)
    384383 */
    385384static INT CALLBACK ShellView_ListViewCompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData)
     
    404403    }
    405404    else
    406     {
     405    {   
    407406        /* Sort by Time: Folders or Files can be sorted */
    408 
     407 
    409408        if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TIME)
    410409        {
     
    443442    }
    444443    /*  If the Date, FileSize, FileType, Attrib was the same, sort by FileName */
    445 
     444       
    446445    if(nDiff == 0)
    447446    {
     
    462461/**********************************************************
    463462*  LV_FindItemByPidl()
    464 */
     463*/   
    465464static int LV_FindItemByPidl(
    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;
     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;
    482481}
    483482
     
    487486static BOOLEAN LV_AddItem(IShellViewImpl * This, LPCITEMIDLIST pidl)
    488487{
    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;
     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;
    500499}
    501500
     
    505504static BOOLEAN LV_DeleteItem(IShellViewImpl * This, LPCITEMIDLIST pidl)
    506505{
    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;
     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;
    513512}
    514513
     
    518517static BOOLEAN LV_RenameItem(IShellViewImpl * This, LPCITEMIDLIST pidlOld, LPCITEMIDLIST pidlNew )
    519518{
    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;
     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;
    542541}
    543542/**********************************************************
     
    547546* - sorts the list
    548547* - fills the list into the view
    549 */
     548*/   
    550549
    551550static HRESULT ShellView_FillList(IShellViewImpl * This)
    552551{
    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;
     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;
    610609}
    611610
    612611/**********************************************************
    613612*  ShellView_OnCreate()
    614 */
     613*/   
    615614static LRESULT ShellView_OnCreate(IShellViewImpl * This)
    616615{
    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 ####
     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 ####
    658657 */
    659658
     
    662661*/
    663662static HMENU ShellView_BuildFileMenu(IShellViewImpl * This)
    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;
     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;
    702701}
    703702/**********************************************************
     
    705704*/
    706705static void ShellView_MergeFileMenu(IShellViewImpl * This, HMENU hSubMenu)
    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");
     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"); 
    716715}
    717716
     
    721720
    722721static void ShellView_MergeViewMenu(IShellViewImpl * This, HMENU hSubMenu)
    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     }
     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        }
    739738}
    740739
     
    746745* RETURNS
    747746*  number of selected items
    748 */
     747*/   
    749748static UINT ShellView_GetSelections(IShellViewImpl * This)
    750749{
    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()
     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()
    788787 */
    789788static void ShellView_DoContextMenu(IShellViewImpl * This, WORD x, WORD y, BOOL bDefault)
    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 #####
     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 #####
    887886 */
    888887
     
    892891static LRESULT ShellView_OnSize(IShellViewImpl * This, WORD wWidth, WORD wHeight)
    893892{
    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;
     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;
    903902}
    904903/**********************************************************
     
    907906* NOTES
    908907*  internal
    909 */
     908*/   
    910909static void ShellView_OnDeactivate(IShellViewImpl * This)
    911910{
    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     }
     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        }
    926925}
    927926
    928927/**********************************************************
    929928* ShellView_OnActivate()
    930 */
     929*/   
    931930static LRESULT ShellView_OnActivate(IShellViewImpl * This, UINT uState)
    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;
     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;
    10041003}
    10051004
     
    10101009static LRESULT ShellView_OnSetFocus(IShellViewImpl * This)
    10111010{
    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;
     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;
    10281027}
    10291028
    10301029/**********************************************************
    10311030* ShellView_OnKillFocus()
    1032 */
     1031*/   
    10331032static LRESULT ShellView_OnKillFocus(IShellViewImpl * This)
    10341033{
    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;
     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;
    10421041}
    10431042
     
    10461045*
    10471046* NOTES
    1048 *   the CmdID's are the ones from the context menu
    1049 */
     1047*       the CmdID's are the ones from the context menu
     1048*/   
    10501049static LRESULT ShellView_OnCommand(IShellViewImpl * This,DWORD dwCmdID, DWORD dwCmd, HWND hwndCmd)
    10511050{
    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;
     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;
    10951094}
    10961095
     
    10981097* ShellView_OnNotify()
    10991098*/
    1100 
     1099   
    11011100static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpnmh)
    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;
     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;
    12491248                if (!MultiByteToWideChar( CP_ACP, 0, lpdi->item.pszText, -1, wszNewName, MAX_PATH ))
    12501249                    wszNewName[MAX_PATH-1] = 0;
    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;
     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;
    12761275
    12771276              /* initiate a rename of the selected file or directory */
     
    12861285                  /* get selected item */
    12871286                  i = ListView_GetNextItem(This->hWndList, -1,
    1288             LVNI_SELECTED);
    1289 
     1287                        LVNI_SELECTED);
     1288 
    12901289                  ListView_EnsureVisible(This->hWndList, i, 0);
    12911290                  ListView_EditLabelA(This->hWndList, i);
     
    12931292              }
    12941293#if 0
    1295           TranslateAccelerator(This->hWnd, This->hAccel, &msg)
     1294              TranslateAccelerator(This->hWnd, This->hAccel, &msg)
    12961295#endif
    1297           else if(plvKeyDown->wVKey == VK_DELETE)
     1296              else if(plvKeyDown->wVKey == VK_DELETE)
    12981297              {
    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);
     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);
    13361335              }
    13371336              else
    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;
     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;
    13471346}
    13481347
     
    13541353{
    13551354
    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;
     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;
    13751374}
    13761375/**********************************************************
     
    13801379static LRESULT CALLBACK ShellView_WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
    13811380{
    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);
     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);
    14251424}
    14261425/**********************************************************
     
    14351434static HRESULT WINAPI IShellView_fnQueryInterface(IShellView * iface,REFIID riid, LPVOID *ppvObj)
    14361435{
    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;
     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;
    14761475}
    14771476
     
    14811480static ULONG WINAPI IShellView_fnAddRef(IShellView * iface)
    14821481{
    1483     ICOM_THIS(IShellViewImpl, iface);
    1484 
    1485     TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1486 
    1487     shell32_ObjCount++;
    1488     return ++(This->ref);
     1482        ICOM_THIS(IShellViewImpl, iface);
     1483
     1484        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1485
     1486        shell32_ObjCount++;
     1487        return ++(This->ref);
    14891488}
    14901489/**********************************************************
     
    14931492static ULONG WINAPI IShellView_fnRelease(IShellView * iface)
    14941493{
    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;
     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;
    15211520}
    15221521
     
    15261525static HRESULT WINAPI IShellView_fnGetWindow(IShellView * iface,HWND * phWnd)
    15271526{
    1528     ICOM_THIS(IShellViewImpl, iface);
    1529 
    1530     TRACE("(%p)\n",This);
    1531 
    1532     *phWnd = This->hWnd;
    1533 
    1534     return S_OK;
     1527        ICOM_THIS(IShellViewImpl, iface);
     1528
     1529        TRACE("(%p)\n",This);
     1530
     1531        *phWnd = This->hWnd;
     1532
     1533        return S_OK;
    15351534}
    15361535
    15371536static HRESULT WINAPI IShellView_fnContextSensitiveHelp(IShellView * iface,BOOL fEnterMode)
    15381537{
    1539     ICOM_THIS(IShellViewImpl, iface);
    1540 
    1541     FIXME("(%p) stub\n",This);
    1542 
    1543     return E_NOTIMPL;
     1538        ICOM_THIS(IShellViewImpl, iface);
     1539
     1540        FIXME("(%p) stub\n",This);
     1541
     1542        return E_NOTIMPL;
    15441543}
    15451544
     
    15531552{
    15541553#if 0
    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);
     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);
    15581557#endif
    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 */
     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 */
    15651564}
    15661565
    15671566static HRESULT WINAPI IShellView_fnEnableModeless(IShellView * iface,BOOL fEnable)
    15681567{
    1569     ICOM_THIS(IShellViewImpl, iface);
    1570 
    1571     FIXME("(%p) stub\n",This);
    1572 
    1573     return E_NOTIMPL;
     1568        ICOM_THIS(IShellViewImpl, iface);
     1569
     1570        FIXME("(%p) stub\n",This);
     1571
     1572        return E_NOTIMPL;
    15741573}
    15751574
    15761575static HRESULT WINAPI IShellView_fnUIActivate(IShellView * iface,UINT uState)
    15771576{
    1578     ICOM_THIS(IShellViewImpl, iface);
     1577        ICOM_THIS(IShellViewImpl, iface);
    15791578
    15801579/*
    1581     CHAR    szName[MAX_PATH];
     1580        CHAR    szName[MAX_PATH];
    15821581*/
    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     {
     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        {
    16001599
    16011600/*
    1602       GetFolderPath is not a method of IShellFolder
    1603       IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) );
     1601          GetFolderPath is not a method of IShellFolder
     1602          IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) );
    16041603*/
    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 */
     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 */
    16101609/*
    1611       IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA,
    1612                             0, (LPARAM)szName, &lResult);
    1613 */
    1614     }
    1615 
    1616     return S_OK;
     1610          IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA,
     1611                                                        0, (LPARAM)szName, &lResult);
     1612*/                                                     
     1613        }
     1614
     1615        return S_OK;
    16171616}
    16181617
    16191618static HRESULT WINAPI IShellView_fnRefresh(IShellView * iface)
    16201619{
    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;
     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;
    16291628}
    16301629
    16311630static HRESULT WINAPI IShellView_fnCreateViewWindow(
    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;
     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;
    17011700}
    17021701
    17031702static HRESULT WINAPI IShellView_fnDestroyViewWindow(IShellView * iface)
    17041703{
    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;
     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;
    17211720}
    17221721
    17231722static HRESULT WINAPI IShellView_fnGetCurrentInfo(IShellView * iface, LPFOLDERSETTINGS lpfs)
    17241723{
    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;
     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;
    17341733}
    17351734
    17361735static HRESULT WINAPI IShellView_fnAddPropertySheetPages(IShellView * iface, DWORD dwReserved,LPFNADDPROPSHEETPAGE lpfn, LPARAM lparam)
    17371736{
    1738     ICOM_THIS(IShellViewImpl, iface);
    1739 
    1740     FIXME("(%p) stub\n",This);
    1741 
    1742     return E_NOTIMPL;
     1737        ICOM_THIS(IShellViewImpl, iface);
     1738
     1739        FIXME("(%p) stub\n",This);
     1740
     1741        return E_NOTIMPL;
    17431742}
    17441743
    17451744static HRESULT WINAPI IShellView_fnSaveViewState(IShellView * iface)
    17461745{
    1747     ICOM_THIS(IShellViewImpl, iface);
    1748 
    1749     FIXME("(%p) stub\n",This);
    1750 
    1751     return S_OK;
     1746        ICOM_THIS(IShellViewImpl, iface);
     1747
     1748        FIXME("(%p) stub\n",This);
     1749
     1750        return S_OK;
    17521751}
    17531752
    17541753static HRESULT WINAPI IShellView_fnSelectItem(
    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);
     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);
    17721771
    17731772          ZeroMemory(&lvItem, sizeof(LVITEMA));
    1774       lvItem.mask = LVIF_STATE;
    1775       lvItem.iItem = 0;
     1773          lvItem.mask = LVIF_STATE;
     1774          lvItem.iItem = 0;
    17761775
    17771776          while(ListView_GetItemA(This->hWndList, &lvItem))
    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;
     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;
    18041803}
    18051804
    18061805static HRESULT WINAPI IShellView_fnGetItemObject(IShellView * iface, UINT uItem, REFIID riid, LPVOID *ppvOut)
    18071806{
    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;
     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;
    18301829}
    18311830
    18321831static HRESULT WINAPI 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 
    1850 static 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
     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
     1849static 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
    18701869};
    18711870
     
    18751874 */
    18761875static HRESULT WINAPI ISVOleCmdTarget_QueryInterface(
    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);
     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);
    18841883}
    18851884
     
    18881887 */
    18891888static ULONG WINAPI ISVOleCmdTarget_AddRef(
    1890     IOleCommandTarget * iface)
    1891 {
    1892     _ICOM_THIS_From_IOleCommandTarget(IShellFolder, iface);
    1893 
    1894     return IShellFolder_AddRef((IShellFolder*)This);
     1889        IOleCommandTarget *     iface)
     1890{
     1891        _ICOM_THIS_From_IOleCommandTarget(IShellFolder, iface);
     1892
     1893        return IShellFolder_AddRef((IShellFolder*)This);
    18951894}
    18961895
     
    18991898 */
    19001899static ULONG WINAPI ISVOleCmdTarget_Release(
    1901     IOleCommandTarget * iface)
    1902 {
    1903     _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
    1904 
    1905     return IShellFolder_Release((IShellFolder*)This);
     1900        IOleCommandTarget *     iface)
     1901{
     1902        _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
     1903
     1904        return IShellFolder_Release((IShellFolder*)This);
    19061905}
    19071906
     
    19101909 */
    19111910static HRESULT WINAPI ISVOleCmdTarget_QueryStatus(
    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",
     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",
    19211920              This, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
    1922     return E_NOTIMPL;
     1921        return E_NOTIMPL;
    19231922}
    19241923
     
    19291928 */
    19301929static HRESULT WINAPI ISVOleCmdTarget_Exec(
    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",
     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",
    19411940              This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
    1942     return E_NOTIMPL;
    1943 }
    1944 
    1945 static 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
     1941        return E_NOTIMPL;
     1942}
     1943
     1944static 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
    19531952};
    19541953
     
    19581957
    19591958static HRESULT WINAPI ISVDropTarget_QueryInterface(
    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);
     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);
    19691968}
    19701969
    19711970static ULONG WINAPI ISVDropTarget_AddRef( IDropTarget *iface)
    19721971{
    1973     _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1974 
    1975     TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1976 
    1977     return IShellFolder_AddRef((IShellFolder*)This);
     1972        _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1973
     1974        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1975
     1976        return IShellFolder_AddRef((IShellFolder*)This);
    19781977}
    19791978
    19801979static ULONG WINAPI ISVDropTarget_Release( IDropTarget *iface)
    19811980{
    1982     _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1983 
    1984     TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1985 
    1986     return IShellFolder_Release((IShellFolder*)This);
     1981        _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1982
     1983        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1984
     1985        return IShellFolder_Release((IShellFolder*)This);
    19871986}
    19881987
    19891988static HRESULT WINAPI ISVDropTarget_DragEnter(
    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;
     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;
    20022001}
    20032002
    20042003static HRESULT WINAPI ISVDropTarget_DragOver(
    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;
     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;
    20152014}
    20162015
    20172016static HRESULT WINAPI ISVDropTarget_DragLeave(
    2018     IDropTarget *iface)
    2019 {
    2020     _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    2021 
    2022     FIXME("Stub: This=%p\n",This);
    2023 
    2024     return E_NOTIMPL;
     2017        IDropTarget     *iface)
     2018{
     2019        _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     2020
     2021        FIXME("Stub: This=%p\n",This);
     2022
     2023        return E_NOTIMPL;
    20252024}
    20262025
    20272026static HRESULT WINAPI 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 
    2041 static 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
     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
     2040static 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
    20512050};
    20522051
     
    20562055
    20572056static HRESULT WINAPI ISVDropSource_QueryInterface(
    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);
     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);
    20672066}
    20682067
    20692068static ULONG WINAPI ISVDropSource_AddRef( IDropSource *iface)
    20702069{
    2071     _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    2072 
    2073     TRACE("(%p)->(count=%lu)\n",This,This->ref);
    2074 
    2075     return IShellFolder_AddRef((IShellFolder*)This);
     2070        _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     2071
     2072        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     2073
     2074        return IShellFolder_AddRef((IShellFolder*)This);
    20762075}
    20772076
    20782077static ULONG WINAPI ISVDropSource_Release( IDropSource *iface)
    20792078{
    2080     _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    2081 
    2082     TRACE("(%p)->(count=%lu)\n",This,This->ref);
    2083 
    2084     return IShellFolder_Release((IShellFolder*)This);
     2079        _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     2080
     2081        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     2082
     2083        return IShellFolder_Release((IShellFolder*)This);
    20852084}
    20862085static HRESULT WINAPI ISVDropSource_QueryContinueDrag(
    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;
     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;
    21002099}
    21012100
    21022101static HRESULT WINAPI ISVDropSource_GiveFeedback(
    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;
     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;
    21102109}
    21112110
    21122111static struct ICOM_VTABLE(IDropSource) dsvt =
    21132112{
    2114     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    2115     ISVDropSource_QueryInterface,
    2116     ISVDropSource_AddRef,
    2117     ISVDropSource_Release,
    2118     ISVDropSource_QueryContinueDrag,
    2119     ISVDropSource_GiveFeedback
     2113        ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     2114        ISVDropSource_QueryInterface,
     2115        ISVDropSource_AddRef,
     2116        ISVDropSource_Release,
     2117        ISVDropSource_QueryContinueDrag,
     2118        ISVDropSource_GiveFeedback
    21202119};
    21212120/**********************************************************
     
    21242123
    21252124static HRESULT WINAPI ISVViewObject_QueryInterface(
    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);
     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);
    21352134}
    21362135
    21372136static ULONG WINAPI ISVViewObject_AddRef( IViewObject *iface)
    21382137{
    2139     _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2140 
    2141     TRACE("(%p)->(count=%lu)\n",This,This->ref);
    2142 
    2143     return IShellFolder_AddRef((IShellFolder*)This);
     2138        _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2139
     2140        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     2141
     2142        return IShellFolder_AddRef((IShellFolder*)This);
    21442143}
    21452144
    21462145static ULONG WINAPI ISVViewObject_Release( IViewObject *iface)
    21472146{
    2148     _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    2149 
    2150     TRACE("(%p)->(count=%lu)\n",This,This->ref);
    2151 
    2152     return IShellFolder_Release((IShellFolder*)This);
     2147        _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     2148
     2149        TRACE("(%p)->(count=%lu)\n",This,This->ref);
     2150
     2151        return IShellFolder_Release((IShellFolder*)This);
    21532152}
    21542153
    21552154static HRESULT WINAPI ISVViewObject_Draw(
    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;
     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;
    21742173}
    21752174static HRESULT WINAPI ISVViewObject_GetColorSet(
    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;
     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;
    21902189}
    21912190static HRESULT WINAPI ISVViewObject_Freeze(
    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;
     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;
    22042203}
    22052204static HRESULT WINAPI ISVViewObject_Unfreeze(
    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;
     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;
    22152214}
    22162215static HRESULT WINAPI ISVViewObject_SetAdvise(
    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;
     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;
    22282227}
    22292228static HRESULT WINAPI 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 
    2244 static 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
     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
     2243static 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
    22562255};
    22572256
Note: See TracChangeset for help on using the changeset viewer.