Changeset 7338 for trunk/src/user32/win32wbase.cpp
- Timestamp:
- Nov 14, 2001, 3:36:06 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/win32wbase.cpp
r7294 r7338 1 /* $Id: win32wbase.cpp,v 1.29 8 2001-11-07 15:36:10 sandervlExp $ */1 /* $Id: win32wbase.cpp,v 1.299 2001-11-14 14:36:06 phaller Exp $ */ 2 2 /* 3 3 * Win32 Window Base Class for OS/2 … … 152 152 windowNameA = NULL; 153 153 windowNameW = NULL; 154 154 windowNameLength = 0; 155 155 156 userWindowBytes = NULL;; 156 157 nrUserWindowBytes= 0; … … 600 601 vertScrollInfo->flags = ESB_ENABLE_BOTH; 601 602 } 602 603 604 // initially allocate the window name fields 603 605 if(HIWORD(cs->lpszName)) 604 606 { 605 607 if (!isUnicode) 606 608 { 607 int wndNameLength = strlen(cs->lpszName);608 windowNameA = (LPSTR)_smalloc(w ndNameLength+1);609 strcpy(windowNameA,cs->lpszName);610 windowNameW = (LPWSTR)_smalloc((w ndNameLength+1)*sizeof(WCHAR));611 lstrcpy AtoW(windowNameW,windowNameA);612 windowNameA[w ndNameLength] = 0;613 windowNameW[w ndNameLength] = 0;609 windowNameLength = strlen(cs->lpszName); 610 windowNameA = (LPSTR)_smalloc(windowNameLength+1); 611 memcpy(windowNameA,cs->lpszName,windowNameLength+1); 612 windowNameW = (LPWSTR)_smalloc((windowNameLength+1)*sizeof(WCHAR)); 613 lstrcpynAtoW(windowNameW,windowNameA,windowNameLength+1); 614 windowNameA[windowNameLength] = 0; 615 windowNameW[windowNameLength] = 0; 614 616 } 615 617 else 616 618 { 617 619 // Wide 618 int wndNameLength = lstrlenW((LPWSTR)cs->lpszName); 619 windowNameW = (LPWSTR)_smalloc((wndNameLength+1)*sizeof(WCHAR)); 620 lstrcpyW(windowNameW,(LPWSTR)cs->lpszName); 621 windowNameW[lstrlenW((LPWSTR)cs->lpszName)] = 0; // need ? 620 windowNameLength = lstrlenW((LPWSTR)cs->lpszName); 621 windowNameW = (LPWSTR)_smalloc( (windowNameLength+1)*sizeof(WCHAR) ); 622 memcpy(windowNameW,(LPWSTR)cs->lpszName, (windowNameLength+1)*sizeof(WCHAR) ); 623 624 // windowNameW[lstrlenW((LPWSTR)cs->lpszName)] = 0; // need ? 625 622 626 // Ascii 623 LPSTR tmp = HEAP_strdupWtoA(GetProcessHeap(), 0, (LPWSTR)cs->lpszName);624 if(tmp) {625 long tmpLength = strlen( tmp );626 windowNameA = (LPSTR)_smalloc(tmpLength+1);627 strcpy(windowNameA,tmp);628 windowNameA[tmpLength] = 0; // need ?629 HEAP_free(tmp);630 } else {631 windowNameA = (LPSTR)_smalloc(1);632 windowNameA[0] = 0;633 634 }627 windowNameA = (LPSTR)_smalloc(windowNameLength+1); 628 WideCharToMultiByte(CP_ACP, 629 0, 630 windowNameW, 631 windowNameLength, 632 windowNameA, 633 windowNameLength + 1, 634 0, 635 NULL); 636 windowNameA[windowNameLength] = 0; 637 } 638 635 639 if(fOS2Look) { 636 640 OSLibWinSetTitleBarText(OS2HwndFrame, windowNameA); … … 1469 1473 1470 1474 case WM_GETTEXTLENGTH: 1471 if(windowNameA) {1472 return strlen(windowNameA); 1473 }1474 else {1475 return windowNameLength; 1476 1477 case WM_GETTEXT: 1478 if (!lParam || !wParam) 1475 1479 return 0; 1476 } 1477 1478 case WM_GETTEXT: 1479 if (!lParam || !wParam) return 0; 1480 if (!windowNameA) ((LPSTR)lParam)[0] = 0; 1481 else lstrcpynA((LPSTR)lParam, windowNameA, wParam); 1482 return min((windowNameA ? strlen(windowNameA) : 0), wParam); 1480 if (!windowNameA) 1481 ((LPSTR)lParam)[0] = 0; 1482 else 1483 memcpy((LPSTR)lParam, windowNameA, min(windowNameLength+1, wParam) ); 1484 return min(windowNameLength, wParam); 1483 1485 1484 1486 case WM_SETTEXT: 1485 1487 { 1486 1488 LPCSTR lpsz = (LPCSTR)lParam; 1487 1488 if(windowNameA) free(windowNameA); 1489 if(windowNameW) free(windowNameW); 1490 if (lParam) 1491 { 1492 int wndNameLength = strlen(lpsz); 1493 windowNameA = (LPSTR)_smalloc(wndNameLength+1); 1494 strcpy(windowNameA, lpsz); 1495 windowNameW = (LPWSTR)_smalloc((wndNameLength+1)*sizeof(WCHAR)); 1496 lstrcpyAtoW(windowNameW, windowNameA); 1489 1490 // reallocate if new buffer is larger 1491 if (!lParam) 1492 { 1493 free(windowNameA); 1494 free(windowNameW); 1495 windowNameLength = 0; 1496 windowNameA = NULL; 1497 windowNameW = NULL; 1497 1498 } 1498 1499 else 1499 1500 { 1500 windowNameA = NULL; 1501 windowNameW = NULL; 1502 } 1501 // determine length of new text 1502 int iTextLength = strlen(lpsz); 1503 1504 if (windowNameLength < iTextLength) 1505 { 1506 if (windowNameA) 1507 { 1508 free(windowNameA); 1509 windowNameA = NULL; 1510 } 1511 1512 if (windowNameW) 1513 { 1514 free(windowNameW); 1515 windowNameW = NULL; 1516 } 1517 } 1518 1519 windowNameLength = iTextLength; 1520 if(!windowNameA) 1521 windowNameA = (LPSTR)_smalloc(windowNameLength+1); 1522 memcpy(windowNameA, lpsz, windowNameLength+1); 1523 if(!windowNameW) 1524 windowNameW = (LPWSTR)_smalloc((windowNameLength+1)*sizeof(WCHAR)); 1525 lstrcpynAtoW(windowNameW, windowNameA, windowNameLength+1); 1526 } 1527 1503 1528 dprintf(("WM_SETTEXT of %x to %s\n", Win32Hwnd, lParam)); 1504 1529 if ((dwStyle & WS_CAPTION) == WS_CAPTION) … … 1964 1989 { 1965 1990 case WM_GETTEXTLENGTH: 1966 if(windowNameW) { 1967 return lstrlenW(windowNameW); 1968 } 1969 else return 0; 1991 return windowNameLength; 1970 1992 1971 1993 case WM_GETTEXT: 1972 if (!lParam || !wParam) return 0; 1973 if (!windowNameW) ((LPWSTR)lParam)[0] = 0; 1974 else lstrcpynW((LPWSTR)lParam,windowNameW,wParam); 1975 return min((windowNameW ? lstrlenW(windowNameW) : 0),wParam); 1994 if (!lParam || !wParam) 1995 return 0; 1996 if (!windowNameW) 1997 ((LPWSTR)lParam)[0] = 0; 1998 else 1999 memcpy((LPSTR)lParam, windowNameW, min( sizeof(WCHAR) * (windowNameLength+1), wParam) ); 2000 return min(windowNameLength, wParam); 1976 2001 1977 2002 case WM_SETTEXT: 1978 2003 { 1979 2004 LPWSTR lpsz = (LPWSTR)lParam; 1980 1981 if(windowNameA) free(windowNameA); 1982 if(windowNameW) free(windowNameW); 1983 if (lParam) 1984 { 1985 // Wide 1986 int wndNameLength = lstrlenW(lpsz); 1987 windowNameW = (LPWSTR)_smalloc((wndNameLength+1)*sizeof(WCHAR)); 1988 lstrcpyW(windowNameW,lpsz); 1989 // Ascii 1990 LPSTR tmp = HEAP_strdupWtoA(GetProcessHeap(), 0, lpsz); 1991 if(tmp) { 1992 long tmpLength = strlen( tmp ); 1993 windowNameA = (LPSTR)_smalloc(tmpLength+1); 1994 strcpy(windowNameA,tmp); 1995 windowNameA[tmpLength] = 0; // need ? 1996 HEAP_free(tmp); 1997 } 1998 else { 1999 windowNameA = (LPSTR)_smalloc(1); 2000 windowNameA[0] = 0; 2001 } 2005 2006 // reallocate if new buffer is larger 2007 if (!lParam) 2008 { 2009 free(windowNameA); 2010 free(windowNameW); 2011 windowNameLength = 0; 2012 windowNameA = NULL; 2013 windowNameW = NULL; 2002 2014 } 2003 2015 else 2004 2016 { 2005 windowNameA = NULL; 2006 windowNameW = NULL; 2007 } 2017 // determine length of new text 2018 int iTextLength = lstrlenW(lpsz); 2019 2020 if (windowNameLength < iTextLength) 2021 { 2022 if (windowNameA) 2023 { 2024 free(windowNameA); 2025 windowNameA = NULL; 2026 } 2027 2028 if (windowNameW) 2029 { 2030 free(windowNameW); 2031 windowNameW = NULL; 2032 } 2033 } 2034 2035 windowNameLength = iTextLength; 2036 if(!windowNameA) 2037 windowNameA = (LPSTR)_smalloc(windowNameLength+1); 2038 lstrcpynWtoA(windowNameA, windowNameW, windowNameLength+1); 2039 if(!windowNameW) 2040 windowNameW = (LPWSTR)_smalloc((windowNameLength+1)*sizeof(WCHAR)); 2041 memcpy(windowNameW, lpsz, (windowNameLength+1) * sizeof(WCHAR)); 2042 } 2043 2008 2044 dprintf(("WM_SETTEXT of %x\n",Win32Hwnd)); 2009 2045 if ((dwStyle & WS_CAPTION) == WS_CAPTION) … … 3532 3568 //else get data directory from window structure 3533 3569 //TODO: must lock window structure.... (TODO) 3534 if(fUnicode) { 3535 if(windowNameW) { 3536 return strlenW(windowNameW); 3537 } 3538 else return 0; 3539 } 3540 else { 3541 if(windowNameA) { 3542 return strlen(windowNameA); 3543 } 3544 else return 0; 3545 } 3570 return windowNameLength; 3546 3571 } 3547 3572 //****************************************************************************** … … 3555 3580 return SendInternalMessageA(WM_GETTEXT,(WPARAM)cch,(LPARAM)lpsz); 3556 3581 } 3582 3557 3583 //else get data directory from window structure 3558 3584 if (!lpsz || !cch) return 0; 3559 3585 if (!windowNameA) lpsz[0] = 0; 3560 else lstrcpynA(lpsz, windowNameA, cch);3561 return min( (windowNameA ? strlen(windowNameA) : 0), cch);3586 else memcpy(lpsz, windowNameA, min(windowNameLength + 1, cch) ); 3587 return min(windowNameLength, cch); 3562 3588 } 3563 3589 //****************************************************************************** … … 3572 3598 } 3573 3599 //else get data directory from window structure 3574 if (!lpsz || !cch) return 0; 3575 if (!windowNameW) lpsz[0] = 0; 3576 else lstrcpynW(lpsz, windowNameW, cch); 3577 return min((windowNameW ? strlenW(windowNameW) : 0), cch); 3600 if (!lpsz || !cch) 3601 return 0; 3602 if (!windowNameW) 3603 lpsz[0] = 0; 3604 else 3605 memcpy(lpsz, windowNameW, min( sizeof(WCHAR) * (windowNameLength+1), cch)); 3606 3607 return min(windowNameLength, cch); 3578 3608 } 3579 3609 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.