Ignore:
Timestamp:
Jun 9, 2001, 4:50:26 PM (24 years ago)
Author:
sandervl
Message:

reference count (window + class objects) rewrite

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/windowclass.cpp

    r5472 r5935  
    1 /* $Id: windowclass.cpp,v 1.20 2001-04-04 09:01:25 sandervl Exp $ */
     1/* $Id: windowclass.cpp,v 1.21 2001-06-09 14:50:26 sandervl Exp $ */
    22/*
    33 * Win32 Window Class Code for OS/2
     
    5252    wc.hIconSm = 0;
    5353 
    54     if(Win32WndClass::FindClass(wc.hInstance, (LPSTR)wc.lpszClassName)) {
     54    wclass = Win32WndClass::FindClass(wc.hInstance, (LPSTR)wc.lpszClassName);
     55    if(wclass) {
     56        RELEASE_CLASSOBJ(wclass);
    5557        if(HIWORD(wc.lpszClassName)) {
    5658                dprintf(("RegisterClassA %x %s already exists", wc.hInstance, wc.lpszClassName));
     
    7577        return(0);
    7678    }
    77     return(wclass->getAtom());
     79    ATOM atom = wclass->getAtom();
     80    RELEASE_CLASSOBJ(wclass);
     81    return atom;
    7882}
    7983//******************************************************************************
     
    8488 Win32WndClass *wclass;
    8589
    86     if(Win32WndClass::FindClass(lpWndClass->hInstance, (LPSTR)lpWndClass->lpszClassName)) {
     90    wclass = Win32WndClass::FindClass(lpWndClass->hInstance, (LPSTR)lpWndClass->lpszClassName);
     91    if(wclass) {
     92        RELEASE_CLASSOBJ(wclass);
    8793        if(HIWORD(lpWndClass->lpszClassName)) {
    8894                dprintf(("RegisterClassExA %x %s already exists", lpWndClass->hInstance, lpWndClass->lpszClassName));
     
    100106        return(0);
    101107    }
    102     return(wclass->getAtom());
     108    ATOM atom = wclass->getAtom();
     109    RELEASE_CLASSOBJ(wclass);
     110    return atom;
    103111}
    104112//******************************************************************************
     
    115123    memcpy(&wc.style, lpwc, sizeof(WNDCLASSA));
    116124
    117     if(Win32WndClass::FindClass(wc.hInstance, (LPWSTR)wc.lpszClassName)) {
     125    winclass = Win32WndClass::FindClass(wc.hInstance, (LPWSTR)wc.lpszClassName);
     126    if(winclass) {
     127        RELEASE_CLASSOBJ(winclass);
    118128        if(HIWORD(wc.lpszClassName)) {
    119129                dprintf(("RegisterClassW %x %ls already exists", wc.hInstance, wc.lpszClassName));
     
    139149    }
    140150    rc = winclass->getAtom();
    141 
     151    RELEASE_CLASSOBJ(winclass);
    142152    return(rc);
    143153}
     
    153163    memcpy(&wc, lpwc, sizeof(WNDCLASSEXA));
    154164
    155     if(Win32WndClass::FindClass(wc.hInstance, (LPWSTR)wc.lpszClassName)) {
     165    winclass = Win32WndClass::FindClass(wc.hInstance, (LPWSTR)wc.lpszClassName);
     166    if(winclass) {
     167        RELEASE_CLASSOBJ(winclass);
    156168        if(HIWORD(wc.lpszClassName)) {
    157169                dprintf(("RegisterClassExW %x %ls already exists", wc.hInstance, wc.lpszClassName));
     
    170182    }
    171183    rc = winclass->getAtom();
     184    RELEASE_CLASSOBJ(winclass);
    172185
    173186    return(rc);
     
    180193
    181194   ret = Win32WndClass::UnregisterClassA(hinst, (LPSTR)lpszClassName);
    182 #if 1
    183195   return ret;
    184 #else
    185   //Spintest returns FALSE in dll termination, so pretend it succeeded
    186 //  return(TRUE);
    187 #endif
    188196}
    189197//******************************************************************************
     
    204212        FreeAsciiString((char *)astring);
    205213
    206 #if 1
    207214  return ret;
    208 #else
    209   //Spintest returns FALSE in dll termination, so pretend it succeeded
    210 //  return(TRUE);
    211 #endif
    212215}
    213216//******************************************************************************
     
    227230  if(wndclass) {
    228231        wndclass->getClassInfo(&wc);
     232        RELEASE_CLASSOBJ(wndclass);
    229233        memcpy(lpwc, &wc.style, sizeof(WNDCLASSA));
    230234        SetLastError(ERROR_SUCCESS);
     
    256260  if(wndclass) {
    257261        wndclass->getClassInfo(&wc);
     262        RELEASE_CLASSOBJ(wndclass);
    258263        memcpy(lpwc, &wc.style, sizeof(WNDCLASSW));
    259264        SetLastError(ERROR_SUCCESS);
     
    295300  if(wndclass) {
    296301        wndclass->getClassInfo(lpwcx);
     302        RELEASE_CLASSOBJ(wndclass);
    297303        lpwcx->cbSize = sizeof(WNDCLASSEXA);
    298304        SetLastError(ERROR_SUCCESS);
     
    344350  if(wndclass) {
    345351        wndclass->getClassInfo(lpwcx);
     352        RELEASE_CLASSOBJ(wndclass);
    346353        lpwcx->cbSize = sizeof(WNDCLASSEXW);
    347354        SetLastError(ERROR_SUCCESS);
     
    365372    *lpszClassName = 0;
    366373    rc = (wnd->getClass())->getClassName(lpszClassName, cchClassName);
     374    RELEASE_WNDOBJ(wnd);
    367375    dprintf(("USER32: GetClassNameA %x %s (%d)", hwnd, lpszClassName, rc));
    368376    return rc;
     
    373381{
    374382 Win32BaseWindow *wnd;
     383 int              ret;
    375384
    376385    dprintf(("USER32: GetClassNameW\n"));
     
    380389        return(0);
    381390    }
    382     return (wnd->getClass())->getClassName(lpszClassName, cchClassName);
     391    ret = (wnd->getClass())->getClassName(lpszClassName, cchClassName);
     392    RELEASE_WNDOBJ(wnd);
     393    return ret;
    383394}
    384395//******************************************************************************
     
    387398{
    388399 Win32BaseWindow *wnd;
     400 LONG             ret;
    389401
    390402    wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
     
    393405        return(0);
    394406    }
    395     return (wnd->getClass())->setClassLongA(nIndex, lNewVal);
     407    ret = (wnd->getClass())->setClassLongA(nIndex, lNewVal);
     408    RELEASE_WNDOBJ(wnd);
     409    return ret;
    396410}
    397411//******************************************************************************
     
    400414{
    401415 Win32BaseWindow *wnd;
     416 LONG             ret;
    402417
    403418    wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
     
    406421        return(0);
    407422    }
    408     return (wnd->getClass())->setClassLongW(nIndex, lNewVal);
     423    ret = (wnd->getClass())->setClassLongW(nIndex, lNewVal);
     424    RELEASE_WNDOBJ(wnd);
     425    return ret;
    409426}
    410427//******************************************************************************
     
    413430{
    414431 Win32BaseWindow *wnd;
     432 LONG             ret;
    415433
    416434    dprintf(("USER32: SetClassWord %x %d %x", hwnd, nIndex, (ULONG)wNewVal));
     
    420438        return(0);
    421439    }
    422     return (wnd->getClass())->setClassWord(nIndex, wNewVal);
     440    ret = (wnd->getClass())->setClassWord(nIndex, wNewVal);
     441    RELEASE_WNDOBJ(wnd);
     442    return ret;
    423443}
    424444//******************************************************************************
     
    435455    }
    436456    ret = (wnd->getClass())->getClassWord(nIndex);
     457    RELEASE_WNDOBJ(wnd);
    437458    dprintf(("USER32: GetClassWord %x %d returned %x", hwnd, nIndex, (ULONG)ret));
    438459    return ret;
     
    451472    }
    452473    ret = (wnd->getClass())->getClassLongA(nIndex);
     474    RELEASE_WNDOBJ(wnd);
    453475    dprintf(("USER32: GetClassLongA %x %d returned %x", hwnd, nIndex, ret));
    454476    return ret;
     
    467489    }
    468490    ret = (wnd->getClass())->getClassLongW(nIndex);
     491    RELEASE_WNDOBJ(wnd);
    469492    dprintf(("USER32: GetClassLongW %x %d returned %x", hwnd, nIndex, ret));
    470493    return ret;
Note: See TracChangeset for help on using the changeset viewer.