#include "wx/renderer.h"
#ifdef __WXMAC__
-#include "wx/mac/carbon/private.h"
+#include "wx/osx/private.h"
+// for themeing support
+#include <Carbon/Carbon.h>
#endif
#include "wx/arrimpl.cpp"
m_fixed_tab_width = 100;
m_tab_ctrl_height = 0;
-#ifdef __WXMAC__
- wxBrush toolbarbrush;
- toolbarbrush.MacSetTheme( kThemeBrushToolbarBackground );
- wxColor base_colour = toolbarbrush.GetColour();
+#if defined( __WXMAC__ ) && wxOSX_USE_COCOA_OR_CARBON
+ wxColor base_colour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground));
#else
wxColor base_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
#endif
return;
wxMemoryDC dc;
+
+ // use the same layout direction as the window DC uses to ensure that the
+ // text is rendered correctly
+ dc.SetLayoutDirection(raw_dc->GetLayoutDirection());
+
wxBitmap bmp;
size_t i;
size_t page_count = m_pages.GetCount();
EVT_SET_FOCUS(wxAuiTabCtrl::OnSetFocus)
EVT_KILL_FOCUS(wxAuiTabCtrl::OnKillFocus)
EVT_CHAR(wxAuiTabCtrl::OnChar)
+ EVT_MOUSE_CAPTURE_LOST(wxAuiTabCtrl::OnCaptureLost)
END_EVENT_TABLE()
}
}
+void wxAuiTabCtrl::OnCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event))
+{
+}
+
void wxAuiTabCtrl::OnLeftUp(wxMouseEvent& evt)
{
if (GetCapture() == this)
int newPage = -1;
- if (key == WXK_RIGHT)
+ int forwardKey, backwardKey;
+ if (GetLayoutDirection() == wxLayout_RightToLeft)
+ {
+ forwardKey = WXK_LEFT;
+ backwardKey = WXK_RIGHT;
+ }
+ else
+ {
+ forwardKey = WXK_RIGHT;
+ backwardKey = WXK_LEFT;
+ }
+
+ if (key == forwardKey)
{
if (m_pages.GetCount() > 1)
{
newPage = GetActivePage() + 1;
}
}
- else if (key == WXK_LEFT)
+ else if (key == backwardKey)
{
if (m_pages.GetCount() > 1)
{
for (i = 0; i < page_count; ++i)
{
+ int height = m_rect.height - m_tab_ctrl_height;
+ if ( height < 0 )
+ {
+ // avoid passing negative height to wxWindow::SetSize(), this
+ // results in assert failures/GTK+ warnings
+ height = 0;
+ }
+
wxAuiNotebookPage& page = pages.Item(i);
if (m_tabs->GetFlags() & wxAUI_NB_BOTTOM)
{
- page.window->SetSize(m_rect.x, m_rect.y,
- m_rect.width, m_rect.height - m_tab_ctrl_height);
+ page.window->SetSize(m_rect.x, m_rect.y, m_rect.width, height);
}
else //TODO: if (GetFlags() & wxAUI_NB_TOP)
{
page.window->SetSize(m_rect.x, m_rect.y + m_tab_ctrl_height,
- m_rect.width, m_rect.height - m_tab_ctrl_height);
+ m_rect.width, height);
}
// TODO: else if (GetFlags() & wxAUI_NB_LEFT){}
// TODO: else if (GetFlags() & wxAUI_NB_RIGHT){}
wxAuiNotebook::~wxAuiNotebook()
{
+ // Indicate we're deleting pages
+ m_isBeingDeleted = true;
+
while ( GetPageCount() > 0 )
DeletePage(0);
bool select,
const wxBitmap& bitmap)
{
+ wxASSERT_MSG(page, wxT("page pointer must be non-NULL"));
+ if (!page)
+ return false;
+
page->Reparent(this);
wxAuiNotebookPage info;
RemoveEmptyTabFrames();
// set new active pane
- if (new_active)
+ if (new_active && !m_isBeingDeleted)
{
m_curpage = -1;
SetSelectionToWindow(new_active);
m_mgr.GetPane(first_good).Centre();
}
- m_mgr.Update();
+ if (!m_isBeingDeleted)
+ m_mgr.Update();
}
void wxAuiNotebook::OnChildFocusNotebook(wxChildFocusEvent& evt)
{
// if the close button is to the right, use the active
// page selection to determine which page to close
- selection = GetSelection();
+ selection = tabs->GetActivePage();
}
if (selection != -1)