]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/tbar95.cpp
fix for handling TAB presses in readonly text controls
[wxWidgets.git] / src / msw / tbar95.cpp
index 13b388e50951dbc9f43e5d66ac95866682f8f2a3..53a2ef7ce89c584e2029e09a55d2a2c44349e2c7 100644 (file)
@@ -262,6 +262,10 @@ bool wxToolBar::Create(wxWindow *parent,
             msflags |= TBSTYLE_FLAT | TBSTYLE_TRANSPARENT;
         }
     }
+    if (style & wxTB_NODIVIDER)
+        msflags |= CCS_NODIVIDER;
+    if (style & wxTB_NOALIGN)
+        msflags |= CCS_NOPARENTALIGN;
 
     // MSW-specific initialisation
     if ( !wxControl::MSWCreateControl(TOOLBARCLASSNAME, msflags) )
@@ -854,13 +858,14 @@ bool wxToolBar::MSWOnNotify(int WXUNUSED(idCtrl),
                             WXLPARAM lParam,
                             WXLPARAM *WXUNUSED(result))
 {
+#if wxUSE_TOOLTIPS
     // First check if this applies to us
     NMHDR *hdr = (NMHDR *)lParam;
 
     // the tooltips control created by the toolbar is sometimes Unicode, even
     // in an ANSI application - this seems to be a bug in comctl32.dll v5
-    int code = (int)hdr->code;
-    if ( (code != TTN_NEEDTEXTA) && (code != TTN_NEEDTEXTW) )
+    UINT code = hdr->code;
+    if ( (code != (UINT) TTN_NEEDTEXTA) && (code != (UINT) TTN_NEEDTEXTW) )
         return FALSE;
 
     HWND toolTipWnd = (HWND)::SendMessage((HWND)GetHWND(), TB_GETTOOLTIPS, 0, 0);
@@ -874,51 +879,10 @@ bool wxToolBar::MSWOnNotify(int WXUNUSED(idCtrl),
     if ( !tool )
         return FALSE;
 
-    const wxString& help = tool->GetShortHelp();
-
-    if ( !help.IsEmpty() )
-    {
-        if ( code == TTN_NEEDTEXTA )
-        {
-            ttText->lpszText = (wxChar *)help.c_str();
-        }
-        else
-        {
-#if wxUSE_UNICODE
-            ttText->lpszText = (wxChar *)help.c_str();
+    return HandleTooltipNotify(code, lParam, tool->GetShortHelp());
 #else
-            // VZ: I don't know why it happens, but the versions of
-            //     comctl32.dll starting from 4.70 sometimes send TTN_NEEDTEXTW
-            //     even to ANSI programs (normally, this message is supposed
-            //     to be sent to Unicode programs only) - hence we need to
-            //     handle it as well, otherwise no tooltips will be shown in
-            //     this case
-
-            size_t lenAnsi = help.Len();
-            #if defined( __MWERKS__ ) || defined( __CYGWIN__ )
-                // MetroWerks doesn't like calling mbstowcs with NULL argument
-                // neither Cygwin does
-                size_t lenUnicode = 2*lenAnsi;
-            #else
-                size_t lenUnicode = mbstowcs(NULL, help, lenAnsi);
-            #endif
-
-            // using the pointer of right type avoids us doing all sorts of
-            // pointer arithmetics ourselves
-            wchar_t *dst = (wchar_t *)ttText->szText,
-                    *pwz = new wchar_t[lenUnicode + 1];
-            mbstowcs(pwz, help, lenAnsi + 1);
-            memcpy(dst, pwz, lenUnicode*sizeof(wchar_t));
-
-            // put the terminating _wide_ NUL
-            dst[lenUnicode] = 0;
-
-            delete [] pwz;
+    return FALSE;
 #endif
-        }
-    }
-
-    return TRUE;
 }
 
 // ----------------------------------------------------------------------------
@@ -1144,6 +1108,13 @@ void wxToolBar::OnSysColourChanged(wxSysColourChangedEvent& event)
 
 void wxToolBar::OnMouseEvent(wxMouseEvent& event)
 {
+    if (event.Leaving() && m_pInTool)
+    {
+        OnMouseEnter( -1 );
+        event.Skip();
+        return;
+    }
+
     if (event.RightDown())
     {
         // For now, we don't have an id. Later we could
@@ -1177,11 +1148,18 @@ bool wxToolBar::HandleSize(WXWPARAM wParam, WXLPARAM lParam)
         else
         {
             w = LOWORD(lParam);
-            h = r.bottom - r.top;
+            if (HasFlag( wxTB_FLAT ))
+                h = r.bottom - r.top - 3;
+            else
+                h = r.bottom - r.top;
             if ( m_maxRows )
             {
                 // FIXME: 6 is hardcoded separator line height...
-                h += 6;
+                //h += 6;
+                if (HasFlag(wxTB_NODIVIDER))
+                    h += 3;
+                else
+                    h += 6;
                 h *= m_maxRows;
             }
         }