msvcrt: Implement fopen/wfopen on top of fsopen/wfsopen instead of the other way...
[wine] / dlls / comctl32 / tooltips.c
index 39d981b..ea487b7 100644 (file)
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  *
  * NOTES
  *
@@ -496,7 +496,9 @@ static void
 TOOLTIPS_Show (HWND hwnd, TOOLTIPS_INFO *infoPtr)
 {
     TTTOOL_INFO *toolPtr;
-    RECT rect, wndrect;
+    HMONITOR monitor;
+    MONITORINFO mon_info;
+    RECT rect;
     SIZE size;
     NMHDR  hdr;
     int ptfx = 0;
@@ -530,7 +532,7 @@ TOOLTIPS_Show (HWND hwnd, TOOLTIPS_INFO *infoPtr)
     TRACE("%s\n", debugstr_w(infoPtr->szTipText));
 
     TOOLTIPS_CalcTipSize (hwnd, infoPtr, &size);
-    TRACE("size %ld x %ld\n", size.cx, size.cy);
+    TRACE("size %d x %d\n", size.cx, size.cy);
 
     if (toolPtr->uFlags & TTF_CENTERTIP) {
        RECT rc;
@@ -587,19 +589,24 @@ TOOLTIPS_Show (HWND hwnd, TOOLTIPS_INFO *infoPtr)
         }
     }
 
-    TRACE("pos %ld - %ld\n", rect.left, rect.top);
+    TRACE("pos %d - %d\n", rect.left, rect.top);
 
     rect.right = rect.left + size.cx;
     rect.bottom = rect.top + size.cy;
 
     /* check position */
-    wndrect.right = GetSystemMetrics( SM_CXSCREEN );
-    if( rect.right > wndrect.right ) {
-          rect.left -= rect.right - wndrect.right + 2;
-          rect.right = wndrect.right - 2;
+
+    monitor = MonitorFromRect( &rect, MONITOR_DEFAULTTOPRIMARY );
+    mon_info.cbSize = sizeof(mon_info);
+    GetMonitorInfoW( monitor, &mon_info );
+
+    if( rect.right > mon_info.rcWork.right ) {
+        rect.left -= rect.right - mon_info.rcWork.right + 2;
+        rect.right = mon_info.rcWork.right - 2;
     }
-    wndrect.bottom = GetSystemMetrics( SM_CYSCREEN );
-    if( rect.bottom > wndrect.bottom ) {
+    if (rect.left < mon_info.rcWork.left) rect.left = mon_info.rcWork.left;
+
+    if( rect.bottom > mon_info.rcWork.bottom ) {
         RECT rc;
 
        if (toolPtr->uFlags & TTF_IDISHWND)
@@ -744,7 +751,7 @@ TOOLTIPS_TrackShow (HWND hwnd, TOOLTIPS_INFO *infoPtr)
     TRACE("%s\n", debugstr_w(infoPtr->szTipText));
 
     TOOLTIPS_CalcTipSize (hwnd, infoPtr, &size);
-    TRACE("size %ld x %ld\n", size.cx, size.cy);
+    TRACE("size %d x %d\n", size.cx, size.cy);
 
     if (toolPtr->uFlags & TTF_ABSOLUTE) {
        rect.left = infoPtr->xTrackPos;
@@ -779,7 +786,7 @@ TOOLTIPS_TrackShow (HWND hwnd, TOOLTIPS_INFO *infoPtr)
            rect.left = rcTool.right;
     }
 
-    TRACE("pos %ld - %ld\n", rect.left, rect.top);
+    TRACE("pos %d - %d\n", rect.left, rect.top);
 
     rect.right = rect.left + size.cx;
     rect.bottom = rect.top + size.cy;
@@ -1364,7 +1371,7 @@ TOOLTIPS_GetBubbleSize (HWND hwnd, WPARAM wParam, LPARAM lParam)
     TRACE("tool %d\n", nTool);
 
     TOOLTIPS_CalcTipSize (hwnd, infoPtr, &size);
-    TRACE("size %ld x %ld\n", size.cx, size.cy);
+    TRACE("size %d x %d\n", size.cx, size.cy);
 
     return MAKELRESULT(size.cx, size.cy);
 }
@@ -1376,12 +1383,10 @@ TOOLTIPS_GetCurrentToolA (HWND hwnd, WPARAM wParam, LPARAM lParam)
     LPTTTOOLINFOA lpToolInfo = (LPTTTOOLINFOA)lParam;
     TTTOOL_INFO *toolPtr;
 
-    if (lpToolInfo == NULL)
-       return FALSE;
-    if (lpToolInfo->cbSize < TTTOOLINFOA_V1_SIZE)
-       return FALSE;
-
     if (lpToolInfo) {
+        if (lpToolInfo->cbSize < TTTOOLINFOA_V1_SIZE)
+            return FALSE;
+
        if (infoPtr->nCurrentTool > -1) {
            toolPtr = &infoPtr->tools[infoPtr->nCurrentTool];
 
@@ -1412,12 +1417,10 @@ TOOLTIPS_GetCurrentToolW (HWND hwnd, WPARAM wParam, LPARAM lParam)
     LPTTTOOLINFOW lpToolInfo = (LPTTTOOLINFOW)lParam;
     TTTOOL_INFO *toolPtr;
 
-    if (lpToolInfo == NULL)
-       return FALSE;
-    if (lpToolInfo->cbSize < TTTOOLINFOW_V1_SIZE)
-       return FALSE;
-
     if (lpToolInfo) {
+        if (lpToolInfo->cbSize < TTTOOLINFOW_V1_SIZE)
+            return FALSE;
+
        if (infoPtr->nCurrentTool > -1) {
            toolPtr = &infoPtr->tools[infoPtr->nCurrentTool];
 
@@ -1787,14 +1790,14 @@ TOOLTIPS_RelayEvent (HWND hwnd, WPARAM wParam, LPARAM lParam)
            break;
 
        case WM_MOUSEMOVE:
-           pt.x = LOWORD(lpMsg->lParam);
-           pt.y = HIWORD(lpMsg->lParam);
+           pt.x = (short)LOWORD(lpMsg->lParam);
+           pt.y = (short)HIWORD(lpMsg->lParam);
            nOldTool = infoPtr->nTool;
            infoPtr->nTool = TOOLTIPS_GetToolFromPoint(infoPtr, lpMsg->hwnd,
                                                       &pt);
            TRACE("tool (%p) %d %d %d\n", hwnd, nOldTool,
                  infoPtr->nTool, infoPtr->nCurrentTool);
-           TRACE("WM_MOUSEMOVE (%p %ld %ld)\n", hwnd, pt.x, pt.y);
+            TRACE("WM_MOUSEMOVE (%p %d %d)\n", hwnd, pt.x, pt.y);
 
            if (infoPtr->nTool != nOldTool) {
                if(infoPtr->nTool == -1) { /* Moved out of all tools */
@@ -2025,7 +2028,8 @@ TOOLTIPS_SetToolInfoA (HWND hwnd, WPARAM wParam, LPARAM lParam)
        else {
            if ( (toolPtr->lpszText) &&
                 !IS_INTRESOURCE(toolPtr->lpszText) ) {
-               Free (toolPtr->lpszText);
+               if( toolPtr->lpszText != LPSTR_TEXTCALLBACKW)
+                    Free (toolPtr->lpszText);
                toolPtr->lpszText = NULL;
            }
            if (lpToolInfo->lpszText) {
@@ -2082,7 +2086,8 @@ TOOLTIPS_SetToolInfoW (HWND hwnd, WPARAM wParam, LPARAM lParam)
        else {
            if ( (toolPtr->lpszText) &&
                 !IS_INTRESOURCE(toolPtr->lpszText) ) {
-               Free (toolPtr->lpszText);
+               if( toolPtr->lpszText != LPSTR_TEXTCALLBACKW)
+                    Free (toolPtr->lpszText);
                toolPtr->lpszText = NULL;
            }
            if (lpToolInfo->lpszText) {
@@ -2208,7 +2213,8 @@ TOOLTIPS_UpdateTipTextA (HWND hwnd, WPARAM wParam, LPARAM lParam)
        else {
            if ( (toolPtr->lpszText) &&
                 !IS_INTRESOURCE(toolPtr->lpszText) ) {
-               Free (toolPtr->lpszText);
+               if( toolPtr->lpszText != LPSTR_TEXTCALLBACKW)
+                    Free (toolPtr->lpszText);
                toolPtr->lpszText = NULL;
            }
            if (lpToolInfo->lpszText) {
@@ -2265,7 +2271,8 @@ TOOLTIPS_UpdateTipTextW (HWND hwnd, WPARAM wParam, LPARAM lParam)
        else {
            if ( (toolPtr->lpszText)  &&
                 !IS_INTRESOURCE(toolPtr->lpszText) ) {
-               Free (toolPtr->lpszText);
+               if( toolPtr->lpszText != LPSTR_TEXTCALLBACKW)
+                    Free (toolPtr->lpszText);
                toolPtr->lpszText = NULL;
            }
            if (lpToolInfo->lpszText) {
@@ -2400,7 +2407,7 @@ TOOLTIPS_NCCreate (HWND hwnd, WPARAM wParam, LPARAM lParam)
     DWORD dwStyle = GetWindowLongW (hwnd, GWL_STYLE);
     DWORD dwExStyle = GetWindowLongW (hwnd, GWL_EXSTYLE);
 
-    dwStyle &= 0x0000FFFF;
+    dwStyle &= ~(WS_CHILD | /*WS_MAXIMIZE |*/ WS_BORDER | WS_DLGFRAME);
     dwStyle |= (WS_POPUP | WS_BORDER | WS_CLIPSIBLINGS);
 
     /* WS_BORDER only draws a border round the window rect, not the