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/windlg.cpp

    r5258 r5935  
    1 /* $Id: windlg.cpp,v 1.22 2001-02-23 14:52:42 sandervl Exp $ */
     1/* $Id: windlg.cpp,v 1.23 2001-06-09 14:50:25 sandervl Exp $ */
    22/*
    33 * Win32 dialog apis for OS/2
     
    8787    {
    8888        dprintf(("Win32Dialog error found (%0x)!!", GetLastError()));
     89        RELEASE_WNDOBJ(dialog);
    8990        delete dialog;
    9091        return 0;
    9192    }
    92     return dialog->getWindowHandle();
     93    HWND hwnd = dialog->getWindowHandle();
     94    RELEASE_WNDOBJ(dialog);
     95    return hwnd;
    9396}
    9497//******************************************************************************
     
    115118    {
    116119        dprintf(("Win32Dialog error found!!"));
     120        RELEASE_WNDOBJ(dialog);
    117121        delete dialog;
    118122        return 0;
    119123    }
    120     return dialog->getWindowHandle();
     124    HWND hwnd = dialog->getWindowHandle();
     125    RELEASE_WNDOBJ(dialog);
     126    return hwnd;
    121127}
    122128//******************************************************************************
     
    127133                      LPARAM lParamInit)
    128134{
     135    INT result;
    129136    HWND hwnd = CreateDialogIndirectParamA(hInst, dlgtemplate, hwndParent, dlgproc,
    130137                                           lParamInit);
     
    136143        if(!dialog || !dialog->IsDialog()) {
    137144            dprintf(("DialogBoxIndirectParamA, dialog %x not found", hwnd));
     145            if(dialog) RELEASE_WNDOBJ(dialog);
    138146            SetLastError(ERROR_INVALID_WINDOW_HANDLE);
    139147            return 0;
    140148        }
    141         return dialog->doDialogBox();
     149        result = dialog->doDialogBox();
     150        RELEASE_WNDOBJ(dialog);
     151        return result;
    142152    }
    143153    return -1;
     
    149159                                      LPARAM lParamInit)
    150160{
     161    INT result;
    151162    HWND hwnd = CreateDialogIndirectParamW(hInst, dlgtemplate, hwndParent, dlgproc,
    152163                                           lParamInit);
     
    158169        if(!dialog || !dialog->IsDialog()) {
    159170            dprintf(("DialogBoxIndirectParamW, dialog %x not found", hwnd));
     171            if(dialog) RELEASE_WNDOBJ(dialog);
    160172            SetLastError(ERROR_INVALID_WINDOW_HANDLE);
    161173            return 0;
    162174        }
    163         return dialog->doDialogBox();
     175        result = dialog->doDialogBox();
     176        RELEASE_WNDOBJ(dialog);
     177        return result;
    164178    }
    165179    return -1;
     
    170184                     DLGPROC dlgproc, LPARAM  lParamInit)
    171185{
     186    INT result;
    172187    HWND hwnd = CreateDialogParamA( hInst, lpszTemplate, hwndOwner, dlgproc, lParamInit);
    173188
     
    179194        if(!dialog || !dialog->IsDialog()) {
    180195            dprintf(("DialogBoxParamA, dialog %x not found", hwnd));
     196            if(dialog) RELEASE_WNDOBJ(dialog);
    181197            SetLastError(ERROR_INVALID_WINDOW_HANDLE);
    182198            return 0;
    183199        }
    184         return dialog->doDialogBox();
     200        result = dialog->doDialogBox();
     201        RELEASE_WNDOBJ(dialog);
     202        return result;
    185203    }
    186204    return -1;
     
    191209                             DLGPROC dlgproc, LPARAM lParamInit)
    192210{
     211    INT result;
    193212    HWND hwnd = CreateDialogParamW( hInst, lpszTemplate, hwndOwner, dlgproc, lParamInit);
    194213
     
    200219        if(!dialog || !dialog->IsDialog()) {
    201220            dprintf(("DialogBoxParamW, dialog %x not found", hwnd));
     221            if(dialog) RELEASE_WNDOBJ(dialog);
    202222            SetLastError(ERROR_INVALID_WINDOW_HANDLE);
    203223            return 0;
    204224        }
    205         return dialog->doDialogBox();
     225        result = dialog->doDialogBox();
     226        RELEASE_WNDOBJ(dialog);
     227        return result;
    206228    }
    207229    return -1;
     
    213235{
    214236  Win32Dialog *dialog;
     237  BOOL rc;
    215238#ifdef DEBUG
    216   BOOL rc;
    217239  RECT dlgRect = *rect;
    218240#endif
     
    222244        dprintf(("MapDialogRect, window %x not found", hwndDlg));
    223245        SetLastError(ERROR_INVALID_WINDOW_HANDLE);
    224         return 0;
    225     }
    226 #ifdef DEBUG
     246        if(dialog) RELEASE_WNDOBJ(dialog);
     247        return 0;
     248    }
    227249    rc = dialog->MapDialogRect(rect);
    228250    dprintf(("USER32: MapDialogRect %x (%d,%d)(%d,%d) -> (%d,%d)(%d,%d)", hwndDlg, dlgRect.left, dlgRect.top, dlgRect.right, dlgRect.bottom, rect->left, rect->top, rect->right, rect->bottom));
     251    RELEASE_WNDOBJ(dialog);
    229252    return rc;
    230 #else
    231     dprintf(("USER32: MapDialogRect %x (%d,%d)(%d,%d)", hwndDlg, rect->left, rect->top, rect->right, rect->bottom));
    232     return dialog->MapDialogRect(rect);
    233 #endif
    234253}
    235254//******************************************************************************
     
    334353HWND WIN32API GetNextDlgTabItem(HWND hwndDlg, HWND hwndCtrl, BOOL fPrevious)
    335354{
    336   Win32BaseWindow *window;
    337 
    338     window = (Win32BaseWindow*)Win32BaseWindow::GetWindowFromHandle(hwndDlg);
    339     if(!window) {
     355    if(!IsWindow(hwndDlg)) {
    340356        dprintf(("GetNextDlgTabItem, window %x not found", hwndDlg));
    341357        SetLastError(ERROR_INVALID_WINDOW_HANDLE);
     
    352368HWND WIN32API GetDlgItem(HWND hwnd, int id)
    353369{
    354   Win32BaseWindow *dlgcontrol, *window;
     370  Win32BaseWindow *window;
     371  HWND             hwndDlgItem;
    355372
    356373    window = (Win32Dialog *)Win32BaseWindow::GetWindowFromHandle(hwnd);
     
    360377        return 0;
    361378    }
    362     dlgcontrol = window->FindWindowById(id);
    363     if(dlgcontrol) {
    364         dprintf(("USER32: GetDlgItem %x %d returned %x\n", hwnd, id, dlgcontrol->getWindowHandle()));
    365         return dlgcontrol->getWindowHandle();
     379    hwndDlgItem = window->FindWindowById(id);
     380    RELEASE_WNDOBJ(window);
     381    if(hwndDlgItem) {
     382        dprintf(("USER32: GetDlgItem %x %d returned %x\n", hwnd, id, hwndDlgItem));
     383        return hwndDlgItem;
    366384    }
    367385    dprintf(("USER32: GetDlgItem %x %d NOT FOUND!\n", hwnd, id));
Note: See TracChangeset for help on using the changeset viewer.