fix referencing bug (ros crashed during setup if mousemove) in co_WinPosSearchChildren
authorGunnar Dalsnes <hardon@online.no>
Sun, 11 Sep 2005 21:05:32 +0000 (21:05 +0000)
committerGunnar Dalsnes <hardon@online.no>
Sun, 11 Sep 2005 21:05:32 +0000 (21:05 +0000)
svn path=/trunk/; revision=17809

reactos/subsys/win32k/include/userfuncs.h
reactos/subsys/win32k/ntuser/message.c
reactos/subsys/win32k/ntuser/object.c
reactos/subsys/win32k/ntuser/winpos.c

index 66e813a..6c2ff4d 100644 (file)
@@ -14,9 +14,10 @@ PMENU_OBJECT FASTCALL UserGetMenuObject(HMENU hMenu);
    DPRINT1("obj 0x%x dereffed to %i refs\n",_obj_, USER_BODY_TO_HEADER(_obj_)->RefCount-1); \\r
    ObmDereferenceObject2(_obj_); \\r
 }\r
-#endif\r
 \r
+#endif\r
 \r
+#define ObmDereferenceObject(_obj_) ObmDereferenceObject2(_obj_)\r
 \r
 \r
 \r
@@ -59,7 +60,7 @@ PMENU_OBJECT FASTCALL UserGetMenuObject(HMENU hMenu);
 \r
 \r
 VOID FASTCALL ObmReferenceObject(PVOID obj);\r
-BOOL FASTCALL ObmDereferenceObject(PVOID obj);\r
+BOOL FASTCALL ObmDereferenceObject2(PVOID obj);\r
 \r
 PWINDOW_OBJECT FASTCALL IntGetWindowObject(HWND hWnd);\r
 PVOID FASTCALL\r
index 18da809..47d7b2c 100644 (file)
@@ -773,7 +773,7 @@ MessageFound:
             USHORT HitTest;
 
             UserRefObjectCo(MsgWindow);
-            
+
             if(co_IntTranslateMouseMessage(ThreadQueue, &Msg->Msg, &HitTest, TRUE))
                /* FIXME - check message filter again, if the message doesn't match anymore,
                           search again */
@@ -782,7 +782,7 @@ MessageFound:
                /* eat the message, search again */
                goto CheckMessages;
             }
-            
+
             if(ThreadQueue->CaptureWindow == NULL)
             {
                co_IntSendHitTestMessages(ThreadQueue, &Msg->Msg);
index 47aebc6..8130756 100644 (file)
@@ -275,7 +275,7 @@ VOID FASTCALL ObmReferenceObject(PVOID obj)
 }
 
 
-BOOL FASTCALL ObmDereferenceObject(PVOID obj)
+BOOL FASTCALL ObmDereferenceObject2(PVOID obj)
 {
    PUSER_OBJECT_HEADER hdr = USER_BODY_TO_HEADER(obj);
 
index b56fb1d..1327102 100644 (file)
@@ -1483,20 +1483,23 @@ PWINDOW_OBJECT child_window_from_point(PWINDOW_OBJECT parent, int x, int y )
 }
 #endif
 
+/* wine server: child_window_from_point 
 
+Caller must dereference the "returned" Window
+*/
 static
 VOID FASTCALL
 co_WinPosSearchChildren(
    PWINDOW_OBJECT ScopeWin, 
    PUSER_MESSAGE_QUEUE OnlyHitTests, 
    POINT *Point,
-   PWINDOW_OBJECT* Window, 
+   PWINDOW_OBJECT* Window,    
    USHORT *HitTest
    )
 {
    PWINDOW_OBJECT Current;
    HWND *List, *phWnd;
-
+   
    ASSERT_REFS_CO(ScopeWin);
 
    if ((List = IntWinListChildren(ScopeWin)))
@@ -1517,24 +1520,24 @@ co_WinPosSearchChildren(
             continue;
          }
 
-         if (!IntPtInWindow(Current, Point->x, Point->y))
+         if (!IntPtInWindow(Current, Point->x, Point->y)) 
          {
-            continue;
+             continue;
          }
-
+        
+         if (*Window) UserDerefObject(*Window);
          *Window = Current;
+         UserRefObject(*Window);
          
          if (Current->Style & WS_MINIMIZE)
          {
             *HitTest = HTCAPTION;
-            UserRefObject(Current);
             break;
          }
 
          if (Current->Style & WS_DISABLED)
          {
             *HitTest = HTERROR;
-            UserRefObject(Current);
             break;
          }
 
@@ -1561,13 +1564,12 @@ co_WinPosSearchChildren(
             co_WinPosSearchChildren(Current, OnlyHitTests, Point, Window, HitTest);
          }
          
-         UserRefObject(Current);
          UserDerefObjectCo(Current);
 
          break;
       }
       ExFreePool(List);
-   }
+   } 
 }
 
 /* wine: WINPOS_WindowFromPoint */