]> git.saurik.com Git - wxWidgets.git/commitdiff
Extended maximum tooltip length (in non-Unicode comctl32 4.70+ mode) from (MSW limite...
authorDimitri Schoolwerth <dimitri.schoolwerth@gmail.com>
Sun, 15 Feb 2004 21:38:22 +0000 (21:38 +0000)
committerDimitri Schoolwerth <dimitri.schoolwerth@gmail.com>
Sun, 15 Feb 2004 21:38:22 +0000 (21:38 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25828 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/window.cpp

index d47f77d3a1ebaabca84b047743e6caae55a40a23..4e05e2b683197041557e0243d2bb8dcb84d05b74 100644 (file)
@@ -3222,32 +3222,26 @@ bool wxWindowMSW::HandleTooltipNotify(WXUINT code,
         // in Unicode mode this is just what we need
         ttText->lpszText = (wxChar *)ttip.c_str();
 #else // !Unicode
-/*
-        MultiByteToWideChar(CP_ACP, 0, ttip, ttip.length()+1,
-                            (wchar_t *)ttText->szText,
-                            sizeof(ttText->szText) / sizeof(wchar_t));
-*/
-        // Fix by dimitrishortcut: see patch 771772
+        // Convert tooltip from multi byte to Unicode.
 
-        // FIXME: szText has a max of 80 bytes, so limit the tooltip string
-        // length accordingly. Ideally lpszText should be used, but who
-        // would be responsible for freeing the buffer?
+        // We don't want to use the szText buffer because it has a limit of 80
+        // bytes, for now use our own static buffer with a higher fixed max
+        // length.
+        // Preferably a dynamic buffer should be used, but who frees the buffer?
 
-        // Maximum length of a tip is 39 characters. 39 is 80/2 minus 1 byte
-        // needed for NULL character.
-        size_t tipLength = wxMin(ttip.Len(), 39);
+        static const int MAX_LENGTH = 512;
+        static wchar_t buf[MAX_LENGTH+1];
+
+        ttText->lpszText = (LPSTR) buf;
+
+        // Truncate tooltip length if needed
+        size_t tipLength = wxMin(ttip.Len(), MAX_LENGTH);
 
         // Convert to WideChar without adding the NULL character. The NULL
-        // character is added afterwards (Could have used ttip.Left(tipLength)
-        // and a cchMultiByte parameter of tipLength+1, but this is more
-        //efficient.
-        ::MultiByteToWideChar(CP_ACP, 0, ttip, tipLength,
-                             (wchar_t *)ttText->szText,
-                             sizeof(ttText->szText) / sizeof(wchar_t));
-
-        // Add the NULL character.
-        ttText->szText[tipLength*2+0] = '\0';
-        ttText->szText[tipLength*2+1] = '\0';
+        // character is added afterwards (this is more efficient).
+        ::MultiByteToWideChar(CP_ACP, 0, ttip, tipLength, buf, MAX_LENGTH);
+
+        buf[tipLength] = '\0';
 
 #endif // Unicode/!Unicode
     }