As small as possible reorganization within wxDateTime to please PCH in DLL build...
[wxWidgets.git] / src / msw / tbar95.cpp
index 1d667c258d340706ae705aecc69313e22b521c9a..28f96b3f93bb5fb7860bb127cfb6d47ab2ef2ff1 100644 (file)
     #define TB_HITTEST              (WM_USER + 69)
 #endif
 
+#ifndef TB_GETMAXSIZE
+    #define TB_GETMAXSIZE           (WM_USER + 83)
+#endif
+
 // these values correspond to those used by comctl32.dll
 #define DEFAULTBITMAPX   16
 #define DEFAULTBITMAPY   15
@@ -338,11 +342,32 @@ wxToolBar::~wxToolBar()
 
 wxSize wxToolBar::DoGetBestSize() const
 {
-    wxSize sizeBest = GetToolSize();
-    sizeBest.x *= GetToolsCount();
+    wxSize sizeBest;
 
-    // reverse horz and vertical components if necessary
-    return HasFlag(wxTB_VERTICAL) ? wxSize(sizeBest.y, sizeBest.x) : sizeBest;
+    SIZE size;
+    if ( !::SendMessage(GetHwnd(), TB_GETMAXSIZE, 0, (LPARAM)&size) )
+    {
+        // maybe an old (< 0x400) Windows version? try to approximate the
+        // toolbar size ourselves
+        sizeBest = GetToolSize();
+        sizeBest.y += 2 * ::GetSystemMetrics(SM_CYBORDER); // Add borders
+        sizeBest.x *= GetToolsCount();
+
+        // reverse horz and vertical components if necessary
+        if ( HasFlag(wxTB_VERTICAL) )
+        {
+            int t = sizeBest.x;
+            sizeBest.x = sizeBest.y;
+            sizeBest.y = t;
+        }
+    }
+    else
+    {
+        sizeBest.x = size.cx;
+        sizeBest.y = size.cy;
+    }
+
+    return sizeBest;
 }
 
 WXDWORD wxToolBar::MSWGetStyle(long style, WXDWORD *exstyle) const
@@ -1186,11 +1211,14 @@ void wxToolBar::OnMouseEvent(wxMouseEvent& event)
         return;
     }
 
-    if (event.RightDown())
+    if ( event.RightDown() )
     {
-        // For now, we don't have an id. Later we could
-        // try finding the tool.
-        OnRightClick((int)-1, event.GetX(), event.GetY());
+        // find the tool under the mouse
+        wxCoord x,y;
+        event.GetPosition(&x, &y);
+
+        wxToolBarToolBase *tool = FindToolForPosition(x, y);
+        OnRightClick(tool ? tool->GetId() : -1, x, y);
     }
     else
     {