From 9067c6c5377cd6248d34352a2c8a0e1a2485e5c9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 26 Dec 2009 16:36:39 +0000 Subject: [PATCH] Take into account the initial buttons state when creating wxGTK toolbar. With wxMSW it is possible to call e.g. wxToolBarTool::Enable(false) on a tool before calling wxToolBar::Realize() to create the tool in an initially disabled state but this wasn't done in wxGTK version. Override Realize() now under wxGTK to bring the native toolbar buttons state in sync with the internal state of the corresponding wxToolBarTools. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62994 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/toolbar.h | 2 ++ src/gtk/toolbar.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/wx/gtk/toolbar.h b/include/wx/gtk/toolbar.h index ffefa73a58..c752a8dd45 100644 --- a/include/wx/gtk/toolbar.h +++ b/include/wx/gtk/toolbar.h @@ -51,6 +51,8 @@ public: virtual void SetToolNormalBitmap(int id, const wxBitmap& bitmap); virtual void SetToolDisabledBitmap(int id, const wxBitmap& bitmap); + virtual bool Realize(); + static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); diff --git a/src/gtk/toolbar.cpp b/src/gtk/toolbar.cpp index 274feaa587..df4530d636 100644 --- a/src/gtk/toolbar.cpp +++ b/src/gtk/toolbar.cpp @@ -445,6 +445,32 @@ void wxToolBar::SetWindowStyleFlag( long style ) GtkSetStyle(); } +bool wxToolBar::Realize() +{ + if ( !wxToolBarBase::Realize() ) + return false; + + // bring the initial state of all the toolbar items in line with the + // internal state if the latter was changed by calling wxToolBarTool:: + // Enable(): this works under MSW, where the toolbar items are only created + // in Realize() which uses the internal state to determine the initial + // button state, so make it work under GTK too + for ( wxToolBarToolsList::const_iterator i = m_tools.begin(); + i != m_tools.end(); + ++i ) + { + // by default the toolbar items are enabled and not toggled, so we only + // have to do something if their internal state doesn't correspond to + // this + if ( !(*i)->IsEnabled() ) + DoEnableTool(*i, false); + if ( (*i)->IsToggled() ) + DoToggleTool(*i, true); + } + + return true; +} + bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) { wxToolBarTool* tool = static_cast(toolBase); -- 2.45.2