VirtualBox

Changeset 3884 in vbox for trunk/src/VBox/Additions


Ignore:
Timestamp:
Jul 26, 2007 3:58:26 PM (18 years ago)
Author:
vboxsync
Message:

Filter out duplicates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxService/VBoxSeamless.cpp

    r3881 r3884  
    3535    const VBOXSERVICEENV *pEnv;
    3636
    37     HMODULE hModule;
    38 
    39     BOOL (* pfnVBoxInstallHook)(HMODULE hDll, HWND hwndPostWindow);
    40     BOOL (* pfnVBoxRemoveHook)();
    41 
     37    HMODULE    hModule;
     38
     39    BOOL    (* pfnVBoxInstallHook)(HMODULE hDll, HWND hwndPostWindow);
     40    BOOL    (* pfnVBoxRemoveHook)();
     41
     42    LPRGNDATA lpRgnData;
    4243} VBOXSEAMLESSCONTEXT;
    4344
     
    132133    if (gCtx.pfnVBoxRemoveHook)
    133134        gCtx.pfnVBoxRemoveHook();
     135
     136    if (gCtx.lpRgnData)
     137    {
     138        free(gCtx.lpRgnData);
     139        gCtx.lpRgnData = NULL;
     140    }
    134141}
    135142
     
    221228        if (cbSize)
    222229        {
    223             LPRGNDATA lpRgnData = (LPRGNDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbSize);
    224 
     230            LPRGNDATA lpRgnData = (LPRGNDATA)malloc(cbSize);
     231            memset(lpRgnData, 0, cbSize);
    225232            if (lpRgnData)
    226233            {
     
    237244                    }
    238245#endif
    239                     /* send to display driver */
    240                     ExtEscape(param.hdc, VBOXESC_SETVISIBLEREGION, cbSize, (LPCSTR)lpRgnData, 0, NULL);
     246                    if (    !gCtx.lpRgnData
     247                        ||  lpRgnData->rdh.dwSize != gCtx.lpRgnData->rdh.dwSize
     248                        ||  memcmp(gCtx.lpRgnData, lpRgnData, lpRgnData->rdh.dwSize))
     249                    {
     250                        /* send to display driver */
     251                        ExtEscape(param.hdc, VBOXESC_SETVISIBLEREGION, cbSize, (LPCSTR)lpRgnData, 0, NULL);
     252
     253                        if (gCtx.lpRgnData)
     254                            free(gCtx.lpRgnData);
     255                        gCtx.lpRgnData = lpRgnData;
     256                    }
     257                    else
     258                        dprintf(("Visible rectangles haven't changed; ignore\n"));
    241259                }
    242                 HeapFree(GetProcessHeap(), 0, lpRgnData);
     260                if (lpRgnData != gCtx.lpRgnData)
     261                    free(lpRgnData);
    243262            }
    244263        }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette