mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Delay creation of tool docks and bars...
... after construction time for ToolManager, so that ToolManager can be constructed earlier than ProjectWindow, and therefore the unspecified sequence of invocation of factories of attached objects in the project won't lead to a crash on any platform
This commit is contained in:
parent
9e2a13128a
commit
a085057b66
@ -393,6 +393,7 @@ void InitProjectWindow( ProjectWindow &window )
|
||||
//
|
||||
// Create the ToolDock
|
||||
//
|
||||
ToolManager::Get( project ).CreateWindows();
|
||||
ToolManager::Get( project ).LayoutToolBars();
|
||||
|
||||
//
|
||||
|
@ -342,9 +342,7 @@ auto ToolManager::SetGetTopPanelHook( const GetTopPanelHook &hook )
|
||||
|
||||
static const AudacityProject::AttachedObjects::RegisteredFactory key{
|
||||
[]( AudacityProject &parent ){
|
||||
auto &window = GetProjectFrame( parent );
|
||||
return std::make_shared< ToolManager >(
|
||||
&parent, getTopPanelHook()( window ) ); }
|
||||
return std::make_shared< ToolManager >( &parent ); }
|
||||
};
|
||||
|
||||
ToolManager &ToolManager::Get( AudacityProject &project )
|
||||
@ -360,13 +358,9 @@ const ToolManager &ToolManager::Get( const AudacityProject &project )
|
||||
//
|
||||
// Constructor
|
||||
//
|
||||
ToolManager::ToolManager( AudacityProject *parent, wxWindow *topDockParent )
|
||||
ToolManager::ToolManager( AudacityProject *parent )
|
||||
: wxEvtHandler()
|
||||
{
|
||||
if ( !topDockParent )
|
||||
THROW_INCONSISTENCY_EXCEPTION;
|
||||
|
||||
auto &window = GetProjectFrame( *parent );
|
||||
wxPoint pt[ 3 ];
|
||||
|
||||
#if defined(__WXMAC__)
|
||||
@ -430,6 +424,12 @@ ToolManager::ToolManager( AudacityProject *parent, wxWindow *topDockParent )
|
||||
|
||||
// It's a little shy
|
||||
mIndicator->Hide();
|
||||
}
|
||||
|
||||
void ToolManager::CreateWindows()
|
||||
{
|
||||
auto parent = mParent;
|
||||
auto &window = GetProjectFrame( *parent );
|
||||
|
||||
// Hook the parents mouse events...using the parent helps greatly
|
||||
// under GTK
|
||||
@ -443,6 +443,8 @@ ToolManager::ToolManager( AudacityProject *parent, wxWindow *topDockParent )
|
||||
&ToolManager::OnCaptureLost,
|
||||
this );
|
||||
|
||||
wxWindow *topDockParent = getTopPanelHook()( window );
|
||||
|
||||
// Create the top and bottom docks
|
||||
mTopDock = safenew ToolDock( this, topDockParent, TopDockID );
|
||||
mBotDock = safenew ToolDock( this, &window, BotDockID );
|
||||
|
@ -61,11 +61,13 @@ class ToolManager final
|
||||
static ToolManager &Get( AudacityProject &project );
|
||||
static const ToolManager &Get( const AudacityProject &project );
|
||||
|
||||
ToolManager( AudacityProject *parent, wxWindow *topDockParent );
|
||||
ToolManager( AudacityProject *parent );
|
||||
ToolManager( const ToolManager & ) PROHIBITED;
|
||||
ToolManager &operator=( const ToolManager & ) PROHIBITED;
|
||||
~ToolManager();
|
||||
|
||||
void CreateWindows();
|
||||
|
||||
void LayoutToolBars();
|
||||
|
||||
bool IsDocked( int type );
|
||||
|
Loading…
x
Reference in New Issue
Block a user