Alexandre Julliard : shell32: Convert the change notifications list to a standard list.
Alexandre Julliard
julliard at winehq.org
Fri Apr 9 11:49:55 CDT 2010
Module: wine
Branch: master
Commit: 7d19601012d879c19c4e221a95c24100d47a2950
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7d19601012d879c19c4e221a95c24100d47a2950
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Apr 9 14:28:26 2010 +0200
shell32: Convert the change notifications list to a standard list.
---
dlls/shell32/changenotify.c | 45 +++++++++++-------------------------------
1 files changed, 12 insertions(+), 33 deletions(-)
diff --git a/dlls/shell32/changenotify.c b/dlls/shell32/changenotify.c
index 13d70dc..3e79b2e 100644
--- a/dlls/shell32/changenotify.c
+++ b/dlls/shell32/changenotify.c
@@ -25,6 +25,7 @@
#define NONAMELESSSTRUCT
#include "windef.h"
#include "winbase.h"
+#include "wine/list.h"
#include "wine/debug.h"
#include "shell32_main.h"
@@ -44,8 +45,7 @@ typedef SHChangeNotifyEntry *LPNOTIFYREGISTER;
/* internal list of notification clients (internal) */
typedef struct _NOTIFICATIONLIST
{
- struct _NOTIFICATIONLIST *next;
- struct _NOTIFICATIONLIST *prev;
+ struct list entry;
HWND hwnd; /* window to notify */
DWORD uMsg; /* message to send */
LPNOTIFYREGISTER apidl; /* array of entries to watch*/
@@ -57,7 +57,7 @@ typedef struct _NOTIFICATIONLIST
} NOTIFICATIONLIST, *LPNOTIFICATIONLIST;
-static NOTIFICATIONLIST *head, *tail;
+static struct list notifications = LIST_INIT( notifications );
#define SHCNE_NOITEMEVENTS ( \
SHCNE_ASSOCCHANGED )
@@ -117,24 +117,10 @@ static const char * NodeName(const NOTIFICATIONLIST *item)
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 )
+ LIST_FOR_EACH_ENTRY( ptr, ¬ifications, NOTIFICATIONLIST, entry )
if( ptr == hitem )
return ptr;
return NULL;
@@ -144,17 +130,10 @@ static void DeleteNode(LPNOTIFICATIONLIST item)
{
UINT i;
- TRACE("item=%p prev=%p next=%p\n", item, item->prev, item->next);
+ TRACE("item=%p\n", item);
/* 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;
+ list_remove( &item->entry );
/* free the item */
for (i=0; i<item->cidl; i++)
@@ -169,12 +148,14 @@ void InitChangeNotifications(void)
void FreeChangeNotifications(void)
{
+ LPNOTIFICATIONLIST ptr, next;
+
TRACE("\n");
EnterCriticalSection(&SHELL32_ChangenotifyCS);
- while( head )
- DeleteNode( head );
+ LIST_FOR_EACH_ENTRY_SAFE( ptr, next, ¬ifications, NOTIFICATIONLIST, entry )
+ DeleteNode( ptr );
LeaveCriticalSection(&SHELL32_ChangenotifyCS);
@@ -202,8 +183,6 @@ SHChangeNotifyRegister(
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 = SHAlloc(sizeof(SHChangeNotifyEntry) * cItems);
for(i=0;i<cItems;i++)
@@ -221,7 +200,7 @@ SHChangeNotifyRegister(
EnterCriticalSection(&SHELL32_ChangenotifyCS);
- AddNode(item);
+ list_add_tail( ¬ifications, &item->entry );
LeaveCriticalSection(&SHELL32_ChangenotifyCS);
@@ -349,7 +328,7 @@ void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID
EnterCriticalSection(&SHELL32_ChangenotifyCS);
/* loop through the list */
- for( ptr = head; ptr; ptr = ptr->next )
+ LIST_FOR_EACH_ENTRY( ptr, ¬ifications, NOTIFICATIONLIST, entry )
{
BOOL notify;
DWORD i;
More information about the wine-cvs
mailing list