Author: akhaldi
Date: Thu Nov  6 16:01:10 2014
New Revision: 65286

URL: http://svn.reactos.org/svn/reactos?rev=65286&view=rev
Log:
[SHELL32]
* Move changenotify.cpp to the wine folder.
* Convert changenotify.cpp into changenotify.c.

Added:
    branches/shell-experiments/dll/win32/shell32/wine/changenotify.c
      - copied, changed from r65270, 
branches/shell-experiments/dll/win32/shell32/changenotify.cpp
Removed:
    branches/shell-experiments/dll/win32/shell32/changenotify.cpp
Modified:
    branches/shell-experiments/dll/win32/shell32/CMakeLists.txt

Modified: branches/shell-experiments/dll/win32/shell32/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shell32/CMakeLists.txt?rev=65286&r1=65285&r2=65286&view=diff
==============================================================================
--- branches/shell-experiments/dll/win32/shell32/CMakeLists.txt [iso-8859-1] 
(original)
+++ branches/shell-experiments/dll/win32/shell32/CMakeLists.txt [iso-8859-1] 
Thu Nov  6 16:01:10 2014
@@ -17,7 +17,6 @@
 
 list(APPEND SOURCE
     CAutoComplete.cpp
-    changenotify.cpp
     classes.cpp
     clipboard.cpp
     CMenuBand.cpp
@@ -67,6 +66,7 @@
 add_library(shell32 SHARED
     ${SOURCE}
     wine/brsfolder.c
+    wine/changenotify.c
     wine/control.c
     wine/pidl.c
     wine/shell32_main.c

Removed: branches/shell-experiments/dll/win32/shell32/changenotify.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shell32/changenotify.cpp?rev=65285
==============================================================================
--- branches/shell-experiments/dll/win32/shell32/changenotify.cpp       
[iso-8859-1] (original)
+++ branches/shell-experiments/dll/win32/shell32/changenotify.cpp       
(removed)
@@ -1,527 +0,0 @@
-/*
- *    shell change notification
- *
- * Copyright 2000 Juergen Schmied
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include "precomp.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(shell);
-
-namespace
-{
-    extern CRITICAL_SECTION SHELL32_ChangenotifyCS;
-    CRITICAL_SECTION_DEBUG critsect_debug =
-    {
-        0, 0, &SHELL32_ChangenotifyCS,
-        { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
-          0, 0, { (DWORD_PTR)(__FILE__ ": SHELL32_ChangenotifyCS") }
-    };
-    CRITICAL_SECTION SHELL32_ChangenotifyCS = { &critsect_debug, -1, 0, 0, 0, 
0 };
-}
-
-typedef SHChangeNotifyEntry *LPNOTIFYREGISTER;
-
-/* internal list of notification clients (internal) */
-typedef struct _NOTIFICATIONLIST
-{
-    struct _NOTIFICATIONLIST *next;
-    struct _NOTIFICATIONLIST *prev;
-    HWND hwnd;        /* window to notify */
-    DWORD uMsg;        /* message to send */
-    LPNOTIFYREGISTER apidl; /* array of entries to watch*/
-    UINT cidl;        /* number of pidls in array */
-    LONG wEventMask;    /* subscribed events */
-    LONG wSignalledEvent;   /* event that occurred */
-    DWORD dwFlags;        /* client flags */
-    LPCITEMIDLIST pidlSignaled; /*pidl of the path that caused the signal*/
-
-} NOTIFICATIONLIST, *LPNOTIFICATIONLIST;
-
-static NOTIFICATIONLIST *head, *tail;
-
-#define SHCNE_NOITEMEVENTS ( \
-   SHCNE_ASSOCCHANGED )
-
-#define SHCNE_ONEITEMEVENTS ( \
-   SHCNE_ATTRIBUTES | SHCNE_CREATE | SHCNE_DELETE | SHCNE_DRIVEADD | \
-   SHCNE_DRIVEADDGUI | SHCNE_DRIVEREMOVED | SHCNE_FREESPACE | \
-   SHCNE_MEDIAINSERTED | SHCNE_MEDIAREMOVED | SHCNE_MKDIR | \
-   SHCNE_NETSHARE | SHCNE_NETUNSHARE | SHCNE_RMDIR | \
-   SHCNE_SERVERDISCONNECT | SHCNE_UPDATEDIR | SHCNE_UPDATEIMAGE )
-
-#define SHCNE_TWOITEMEVENTS ( \
-   SHCNE_RENAMEFOLDER | SHCNE_RENAMEITEM | SHCNE_UPDATEITEM )
-
-/* for dumping events */
-static const char * DumpEvent( LONG event )
-{
-    if( event == SHCNE_ALLEVENTS )
-        return "SHCNE_ALLEVENTS";
-#define DUMPEV(x)  ,( event & SHCNE_##x )? #x " " : ""
-    return wine_dbg_sprintf( "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"
-    DUMPEV(RENAMEITEM)
-    DUMPEV(CREATE)
-    DUMPEV(DELETE)
-    DUMPEV(MKDIR)
-    DUMPEV(RMDIR)
-    DUMPEV(MEDIAINSERTED)
-    DUMPEV(MEDIAREMOVED)
-    DUMPEV(DRIVEREMOVED)
-    DUMPEV(DRIVEADD)
-    DUMPEV(NETSHARE)
-    DUMPEV(NETUNSHARE)
-    DUMPEV(ATTRIBUTES)
-    DUMPEV(UPDATEDIR)
-    DUMPEV(UPDATEITEM)
-    DUMPEV(SERVERDISCONNECT)
-    DUMPEV(UPDATEIMAGE)
-    DUMPEV(DRIVEADDGUI)
-    DUMPEV(RENAMEFOLDER)
-    DUMPEV(FREESPACE)
-    DUMPEV(EXTENDED_EVENT)
-    DUMPEV(ASSOCCHANGED)
-    DUMPEV(INTERRUPT)
-    );
-#undef DUMPEV
-}
-
-static const char * NodeName(const NOTIFICATIONLIST *item)
-{
-    const char *str;
-    WCHAR path[MAX_PATH];
-
-    if(SHGetPathFromIDListW(item->apidl[0].pidl, path ))
-        str = wine_dbg_sprintf("%s", debugstr_w(path));
-    else
-        str = wine_dbg_sprintf("<not a disk file>" );
-    return str;
-}
-
-static void AddNode(LPNOTIFICATIONLIST item)
-{
-    TRACE("item %p\n", item );
-
-    /* link items */
-    item->prev = tail;
-    item->next = NULL;
-    if( tail )
-        tail->next = item;
-    else
-        head = item;
-    tail = item;
-}
-
-static LPNOTIFICATIONLIST FindNode( HANDLE hitem )
-{
-    LPNOTIFICATIONLIST ptr;
-    for( ptr = head; ptr; ptr = ptr->next )
-        if( ptr == (LPNOTIFICATIONLIST) hitem )
-            return ptr;
-    return NULL;
-}
-
-static void DeleteNode(LPNOTIFICATIONLIST item)
-{
-    UINT i;
-
-    TRACE("item=%p prev=%p next=%p\n", item, item->prev, item->next);
-
-    /* remove item from list */
-    if( item->prev )
-        item->prev->next = item->next;
-    else
-        head = item->next;
-    if( item->next )
-        item->next->prev = item->prev;
-    else
-        tail = item->prev;
-
-    /* free the item */
-    for (i=0; i<item->cidl; i++)
-        SHFree((LPITEMIDLIST)item->apidl[i].pidl);
-    SHFree(item->apidl);
-    SHFree(item);
-}
-
-void InitChangeNotifications(void)
-{
-}
-
-void FreeChangeNotifications(void)
-{
-    TRACE("\n");
-
-    EnterCriticalSection(&SHELL32_ChangenotifyCS);
-
-    while( head )
-        DeleteNode( head );
-
-    LeaveCriticalSection(&SHELL32_ChangenotifyCS);
-
-    // DeleteCriticalSection(&SHELL32_ChangenotifyCS); // static
-}
-
-/*************************************************************************
- * SHChangeNotifyRegister            [SHELL32.2]
- *
- */
-ULONG WINAPI
-SHChangeNotifyRegister(
-    HWND hwnd,
-    int fSources,
-    LONG wEventMask,
-    UINT uMsg,
-    int cItems,
-    SHChangeNotifyEntry *lpItems)
-{
-    LPNOTIFICATIONLIST item;
-    int i;
-
-    item = (NOTIFICATIONLIST *)SHAlloc(sizeof(NOTIFICATIONLIST));
-
-    TRACE("(%p,0x%08x,0x%08x,0x%08x,%d,%p) item=%p\n",
-    hwnd, fSources, wEventMask, uMsg, cItems, lpItems, item);
-
-    item->next = NULL;
-    item->prev = NULL;
-    item->cidl = cItems;
-    item->apidl = (SHChangeNotifyEntry *)SHAlloc(sizeof(SHChangeNotifyEntry) * 
cItems);
-    for(i=0;i<cItems;i++)
-    {
-        item->apidl[i].pidl = ILClone(lpItems[i].pidl);
-        item->apidl[i].fRecursive = lpItems[i].fRecursive;
-    }
-    item->hwnd = hwnd;
-    item->uMsg = uMsg;
-    item->wEventMask = wEventMask;
-    item->wSignalledEvent = 0;
-    item->dwFlags = fSources;
-
-    TRACE("new node: %s\n", NodeName( item ));
-
-    EnterCriticalSection(&SHELL32_ChangenotifyCS);
-
-    AddNode(item);
-
-    LeaveCriticalSection(&SHELL32_ChangenotifyCS);
-
-    return (ULONG)item;
-}
-
-/*************************************************************************
- * SHChangeNotifyDeregister            [SHELL32.4]
- */
-BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify)
-{
-    LPNOTIFICATIONLIST node;
-
-    TRACE("(0x%08x)\n", hNotify);
-
-    EnterCriticalSection(&SHELL32_ChangenotifyCS);
-
-    node = FindNode((HANDLE)hNotify);
-    if( node )
-        DeleteNode(node);
-
-    LeaveCriticalSection(&SHELL32_ChangenotifyCS);
-
-    return node?TRUE:FALSE;
-}
-
-/*************************************************************************
- * SHChangeNotifyUpdateEntryList               [SHELL32.5]
- */
-EXTERN_C BOOL WINAPI SHChangeNotifyUpdateEntryList(DWORD unknown1, DWORD 
unknown2,
-                  DWORD unknown3, DWORD unknown4)
-{
-    FIXME("(0x%08x, 0x%08x, 0x%08x, 0x%08x)\n",
-          unknown1, unknown2, unknown3, unknown4);
-
-    return -1;
-}
-
-static BOOL should_notify( LPCITEMIDLIST changed, LPCITEMIDLIST watched, BOOL 
sub )
-{
-    TRACE("%p %p %d\n", changed, watched, sub );
-    if ( !watched )
-        return FALSE;
-    if (ILIsEqual( watched, changed ) )
-        return TRUE;
-    if( sub && ILIsParent( watched, changed, TRUE ) )
-        return TRUE;
-    if (sub && _ILIsDesktop(watched)) {
-        WCHAR wszPath[MAX_PATH];
-        SHGetSpecialFolderPathW(0, wszPath, CSIDL_DESKTOPDIRECTORY, FALSE);
-        LPITEMIDLIST deskpidl = SHSimpleIDListFromPathW(wszPath);
-        if (ILIsParent(deskpidl, changed, TRUE))
-        {
-            ILFree(deskpidl);
-            return TRUE;
-        }
-        ILFree(deskpidl);
-        SHGetSpecialFolderPathW(0, wszPath, CSIDL_COMMON_DESKTOPDIRECTORY, 
FALSE);
-        deskpidl = SHSimpleIDListFromPathW(wszPath);
-        if (ILIsParent(deskpidl, changed, TRUE))
-        {
-            ILFree(deskpidl);
-            return TRUE;
-        }
-        ILFree(deskpidl);
-    }
-    return FALSE;
-}
-
-/*************************************************************************
- * SHChangeNotify                [SHELL32.@]
- */
-void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, 
LPCVOID dwItem2)
-{
-    LPITEMIDLIST Pidls[2];
-    LPNOTIFICATIONLIST ptr;
-    UINT typeFlag = uFlags & SHCNF_TYPE;
-
-    Pidls[0] = NULL;
-    Pidls[1] = NULL;
-
-    TRACE("(0x%08x,0x%08x,%p,%p):stub.\n", wEventId, uFlags, dwItem1, dwItem2);
-
-    if( ( wEventId & SHCNE_NOITEMEVENTS ) && ( dwItem1 || dwItem2 ) )
-    {
-        TRACE("dwItem1 and dwItem2 are not zero, but should be\n");
-        dwItem1 = 0;
-        dwItem2 = 0;
-        return;
-    }
-    else if( ( wEventId & SHCNE_ONEITEMEVENTS ) && dwItem2 )
-    {
-        TRACE("dwItem2 is not zero, but should be\n");
-        dwItem2 = 0;
-        return;
-    }
-
-    if( ( ( wEventId & SHCNE_NOITEMEVENTS ) &&
-          ( wEventId & ~SHCNE_NOITEMEVENTS ) ) ||
-        ( ( wEventId & SHCNE_ONEITEMEVENTS ) &&
-          ( wEventId & ~SHCNE_ONEITEMEVENTS ) ) ||
-        ( ( wEventId & SHCNE_TWOITEMEVENTS ) &&
-          ( wEventId & ~SHCNE_TWOITEMEVENTS ) ) )
-    {
-        WARN("mutually incompatible events listed\n");
-        return;
-    }
-
-    /* convert paths in IDLists*/
-    switch (typeFlag)
-    {
-    case SHCNF_PATHA:
-        if (dwItem1) Pidls[0] = SHSimpleIDListFromPathA((LPCSTR)dwItem1); 
//FIXME
-        if (dwItem2) Pidls[1] = SHSimpleIDListFromPathA((LPCSTR)dwItem2); 
//FIXME
-        break;
-    case SHCNF_PATHW:
-        if (dwItem1) Pidls[0] = SHSimpleIDListFromPathW((LPCWSTR)dwItem1);
-        if (dwItem2) Pidls[1] = SHSimpleIDListFromPathW((LPCWSTR)dwItem2);
-        if (wEventId & (SHCNE_MKDIR | SHCNE_RMDIR | SHCNE_UPDATEDIR | 
SHCNE_RENAMEFOLDER))
-        {
-            /*
-             * The last items in the ID are currently files. So we chop off 
the last
-             * entry, and create a new one using a find data struct.
-             */
-            if (dwItem1 && Pidls[0]){
-                ILRemoveLastID(Pidls[0]);
-                WIN32_FIND_DATAW wfd;
-                LPWSTR p = PathFindFileNameW((LPCWSTR)dwItem1);
-                lstrcpynW(&wfd.cFileName[0], p, MAX_PATH);
-                wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
-                LPITEMIDLIST newpidl = _ILCreateFromFindDataW(&wfd);
-                LPITEMIDLIST oldpidl = ILClone(Pidls[0]);
-                ILFree(Pidls[0]);
-                Pidls[0] = ILCombine(oldpidl, newpidl);
-                ILFree(newpidl);
-                ILFree(oldpidl);
-            }
-            if (dwItem2 && Pidls[1]){
-                ILRemoveLastID(Pidls[1]);
-                WIN32_FIND_DATAW wfd;
-                LPWSTR p = PathFindFileNameW((LPCWSTR)dwItem2);
-                lstrcpynW(&wfd.cFileName[0], p, MAX_PATH);
-                wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
-                LPITEMIDLIST newpidl = _ILCreateFromFindDataW(&wfd);
-                LPITEMIDLIST oldpidl = ILClone(Pidls[0]);
-                ILFree(Pidls[1]);
-                Pidls[1] = ILCombine(oldpidl, newpidl);
-                ILFree(newpidl);
-                ILFree(oldpidl);
-            }
-        }
-        break;
-    case SHCNF_IDLIST:
-        Pidls[0] = (LPITEMIDLIST)dwItem1;
-        Pidls[1] = (LPITEMIDLIST)dwItem2;
-        break;
-    case SHCNF_PRINTERA:
-    case SHCNF_PRINTERW:
-        FIXME("SHChangeNotify with (uFlags & SHCNF_PRINTER)\n");
-        return;
-    case SHCNF_DWORD:
-    default:
-        FIXME("unknown type %08x\n",typeFlag);
-        return;
-    }
-
-    {
-        WCHAR path[MAX_PATH];
-
-        if( Pidls[0] && SHGetPathFromIDListW(Pidls[0], path ))
-            TRACE("notify %08x on item1 = %s\n", wEventId, debugstr_w(path));
-
-        if( Pidls[1] && SHGetPathFromIDListW(Pidls[1], path ))
-            TRACE("notify %08x on item2 = %s\n", wEventId, debugstr_w(path));
-    }
-
-    EnterCriticalSection(&SHELL32_ChangenotifyCS);
-
-    /* loop through the list */
-    for( ptr = head; ptr; ptr = ptr->next )
-    {
-        BOOL notify;
-        DWORD i;
-
-        notify = FALSE;
-
-        TRACE("trying %p\n", ptr);
-
-        for( i=0; (i<ptr->cidl) && !notify ; i++ )
-        {
-            LPCITEMIDLIST pidl = ptr->apidl[i].pidl;
-            BOOL subtree = ptr->apidl[i].fRecursive;
-
-            if (wEventId & ptr->wEventMask)
-            {
-                if( !pidl )          /* all ? */
-                    notify = TRUE;
-                else if( wEventId & SHCNE_NOITEMEVENTS )
-                    notify = TRUE;
-                else if( wEventId & ( SHCNE_ONEITEMEVENTS | 
SHCNE_TWOITEMEVENTS ) )
-                    notify = should_notify( Pidls[0], pidl, subtree );
-                else if( wEventId & SHCNE_TWOITEMEVENTS )
-                    notify = should_notify( Pidls[1], pidl, subtree );
-            }
-        }
-
-        if( !notify )
-            continue;
-
-        ptr->pidlSignaled = ILClone(Pidls[0]);
-
-        TRACE("notifying %s, event %s(%x) before\n", NodeName( ptr ), 
DumpEvent(
-               wEventId ),wEventId );
-
-        ptr->wSignalledEvent |= wEventId;
-
-        if (ptr->dwFlags  & SHCNRF_NewDelivery)
-            SendMessageW(ptr->hwnd, ptr->uMsg, (WPARAM) ptr, (LPARAM) 
GetCurrentProcessId());
-        else
-            SendMessageW(ptr->hwnd, ptr->uMsg, (WPARAM)Pidls, wEventId);
-
-        TRACE("notifying %s, event %s(%x) after\n", NodeName( ptr ), DumpEvent(
-                wEventId ),wEventId );
-
-    }
-    TRACE("notify Done\n");
-    LeaveCriticalSection(&SHELL32_ChangenotifyCS);
-
-    /* if we allocated it, free it. The ANSI flag is also set in its Unicode 
sibling. */
-    if ((typeFlag & SHCNF_PATHA) || (typeFlag & SHCNF_PRINTERA))
-    {
-        SHFree((LPITEMIDLIST)Pidls[0]);
-        SHFree((LPITEMIDLIST)Pidls[1]);
-    }
-}
-
-/*************************************************************************
- * NTSHChangeNotifyRegister            [SHELL32.640]
- * NOTES
- *   Idlist is an array of structures and Count specifies how many items in 
the array.
- *   count should always be one when calling SHChangeNotifyRegister, or
- *   SHChangeNotifyDeregister will not work properly.
- */
-EXTERN_C ULONG WINAPI NTSHChangeNotifyRegister(
-    HWND hwnd,
-    int fSources,
-    LONG fEvents,
-    UINT msg,
-    int count,
-    SHChangeNotifyEntry *idlist)
-{
-    return SHChangeNotifyRegister(hwnd, fSources | SHCNRF_NewDelivery,
-                                  fEvents, msg, count, idlist);
-}
-
-/*************************************************************************
- * SHChangeNotification_Lock            [SHELL32.644]
- */
-HANDLE WINAPI SHChangeNotification_Lock(
-    HANDLE hChange,
-    DWORD dwProcessId,
-    LPITEMIDLIST **lppidls,
-    LPLONG lpwEventId)
-{
-    DWORD i;
-    LPNOTIFICATIONLIST node;
-    LPCITEMIDLIST *idlist;
-
-    TRACE("%p %08x %p %p\n", hChange, dwProcessId, lppidls, lpwEventId);
-
-    /* EnterCriticalSection(&SHELL32_ChangenotifyCS); */
-
-    node = FindNode( hChange );
-    if( node )
-    {
-        idlist = (LPCITEMIDLIST *)SHAlloc( sizeof(LPCITEMIDLIST *) * 
node->cidl );
-        for(i=0; i<node->cidl; i++)
-            idlist[i] = (LPCITEMIDLIST)node->pidlSignaled;
-        *lpwEventId = node->wSignalledEvent;
-        *lppidls = (LPITEMIDLIST*)idlist;
-        node->wSignalledEvent = 0;
-    }
-    else
-        ERR("Couldn't find %p\n", hChange );
-
-    /* LeaveCriticalSection(&SHELL32_ChangenotifyCS); */
-
-    return (HANDLE) node;
-}
-
-/*************************************************************************
- * SHChangeNotification_Unlock            [SHELL32.645]
- */
-BOOL WINAPI SHChangeNotification_Unlock ( HANDLE hLock)
-{
-    TRACE("\n");
-    return 1;
-}
-
-/*************************************************************************
- * NTSHChangeNotifyDeregister            [SHELL32.641]
- */
-EXTERN_C DWORD WINAPI NTSHChangeNotifyDeregister(ULONG x1)
-{
-    FIXME("(0x%08x):semi stub.\n",x1);
-
-    return SHChangeNotifyDeregister( x1 );
-}

Copied: branches/shell-experiments/dll/win32/shell32/wine/changenotify.c (from 
r65270, branches/shell-experiments/dll/win32/shell32/changenotify.cpp)
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shell32/wine/changenotify.c?p2=branches/shell-experiments/dll/win32/shell32/wine/changenotify.c&p1=branches/shell-experiments/dll/win32/shell32/changenotify.cpp&r1=65270&r2=65286&rev=65286&view=diff
==============================================================================
--- branches/shell-experiments/dll/win32/shell32/changenotify.cpp       
[iso-8859-1] (original)
+++ branches/shell-experiments/dll/win32/shell32/wine/changenotify.c    
[iso-8859-1] Thu Nov  6 16:01:10 2014
@@ -18,21 +18,30 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "precomp.h"
+#define WIN32_NO_STATUS
+#define _INC_WINDOWS
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+
+#include <windef.h>
+#include <winbase.h>
+#include <shlobj.h>
+#include <undocshell.h>
+#include <shlwapi.h>
+#include <wine/debug.h>
+
+#include "pidl.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 
-namespace
-{
-    extern CRITICAL_SECTION SHELL32_ChangenotifyCS;
-    CRITICAL_SECTION_DEBUG critsect_debug =
-    {
-        0, 0, &SHELL32_ChangenotifyCS,
-        { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
-          0, 0, { (DWORD_PTR)(__FILE__ ": SHELL32_ChangenotifyCS") }
-    };
-    CRITICAL_SECTION SHELL32_ChangenotifyCS = { &critsect_debug, -1, 0, 0, 0, 
0 };
-}
+static CRITICAL_SECTION SHELL32_ChangenotifyCS;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+    0, 0, &SHELL32_ChangenotifyCS,
+    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+      0, 0, { (DWORD_PTR)(__FILE__ ": SHELL32_ChangenotifyCS") }
+};
+static CRITICAL_SECTION SHELL32_ChangenotifyCS = { &critsect_debug, -1, 0, 0, 
0, 0 };
 
 typedef SHChangeNotifyEntry *LPNOTIFYREGISTER;
 
@@ -265,9 +274,10 @@
     if( sub && ILIsParent( watched, changed, TRUE ) )
         return TRUE;
     if (sub && _ILIsDesktop(watched)) {
+        LPITEMIDLIST deskpidl;
         WCHAR wszPath[MAX_PATH];
         SHGetSpecialFolderPathW(0, wszPath, CSIDL_DESKTOPDIRECTORY, FALSE);
-        LPITEMIDLIST deskpidl = SHSimpleIDListFromPathW(wszPath);
+        deskpidl = SHSimpleIDListFromPathW(wszPath);
         if (ILIsParent(deskpidl, changed, TRUE))
         {
             ILFree(deskpidl);
@@ -342,26 +352,28 @@
              * entry, and create a new one using a find data struct.
              */
             if (dwItem1 && Pidls[0]){
+                WIN32_FIND_DATAW wfd;
+                LPITEMIDLIST oldpidl, newpidl;
+                LPWSTR p = PathFindFileNameW((LPCWSTR)dwItem1);
                 ILRemoveLastID(Pidls[0]);
-                WIN32_FIND_DATAW wfd;
-                LPWSTR p = PathFindFileNameW((LPCWSTR)dwItem1);
                 lstrcpynW(&wfd.cFileName[0], p, MAX_PATH);
                 wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
-                LPITEMIDLIST newpidl = _ILCreateFromFindDataW(&wfd);
-                LPITEMIDLIST oldpidl = ILClone(Pidls[0]);
+                newpidl = _ILCreateFromFindDataW(&wfd);
+                oldpidl = ILClone(Pidls[0]);
                 ILFree(Pidls[0]);
                 Pidls[0] = ILCombine(oldpidl, newpidl);
                 ILFree(newpidl);
                 ILFree(oldpidl);
             }
             if (dwItem2 && Pidls[1]){
+                WIN32_FIND_DATAW wfd;
+                LPITEMIDLIST oldpidl, newpidl;
+                LPWSTR p = PathFindFileNameW((LPCWSTR)dwItem2);
                 ILRemoveLastID(Pidls[1]);
-                WIN32_FIND_DATAW wfd;
-                LPWSTR p = PathFindFileNameW((LPCWSTR)dwItem2);
                 lstrcpynW(&wfd.cFileName[0], p, MAX_PATH);
                 wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
-                LPITEMIDLIST newpidl = _ILCreateFromFindDataW(&wfd);
-                LPITEMIDLIST oldpidl = ILClone(Pidls[0]);
+                newpidl = _ILCreateFromFindDataW(&wfd);
+                oldpidl = ILClone(Pidls[0]);
                 ILFree(Pidls[1]);
                 Pidls[1] = ILCombine(oldpidl, newpidl);
                 ILFree(newpidl);


Reply via email to