mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-06 07:29:07 +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
|
// Create the ToolDock
|
||||||
//
|
//
|
||||||
|
ToolManager::Get( project ).CreateWindows();
|
||||||
ToolManager::Get( project ).LayoutToolBars();
|
ToolManager::Get( project ).LayoutToolBars();
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -342,9 +342,7 @@ auto ToolManager::SetGetTopPanelHook( const GetTopPanelHook &hook )
|
|||||||
|
|
||||||
static const AudacityProject::AttachedObjects::RegisteredFactory key{
|
static const AudacityProject::AttachedObjects::RegisteredFactory key{
|
||||||
[]( AudacityProject &parent ){
|
[]( AudacityProject &parent ){
|
||||||
auto &window = GetProjectFrame( parent );
|
return std::make_shared< ToolManager >( &parent ); }
|
||||||
return std::make_shared< ToolManager >(
|
|
||||||
&parent, getTopPanelHook()( window ) ); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ToolManager &ToolManager::Get( AudacityProject &project )
|
ToolManager &ToolManager::Get( AudacityProject &project )
|
||||||
@ -360,13 +358,9 @@ const ToolManager &ToolManager::Get( const AudacityProject &project )
|
|||||||
//
|
//
|
||||||
// Constructor
|
// Constructor
|
||||||
//
|
//
|
||||||
ToolManager::ToolManager( AudacityProject *parent, wxWindow *topDockParent )
|
ToolManager::ToolManager( AudacityProject *parent )
|
||||||
: wxEvtHandler()
|
: wxEvtHandler()
|
||||||
{
|
{
|
||||||
if ( !topDockParent )
|
|
||||||
THROW_INCONSISTENCY_EXCEPTION;
|
|
||||||
|
|
||||||
auto &window = GetProjectFrame( *parent );
|
|
||||||
wxPoint pt[ 3 ];
|
wxPoint pt[ 3 ];
|
||||||
|
|
||||||
#if defined(__WXMAC__)
|
#if defined(__WXMAC__)
|
||||||
@ -430,6 +424,12 @@ ToolManager::ToolManager( AudacityProject *parent, wxWindow *topDockParent )
|
|||||||
|
|
||||||
// It's a little shy
|
// It's a little shy
|
||||||
mIndicator->Hide();
|
mIndicator->Hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ToolManager::CreateWindows()
|
||||||
|
{
|
||||||
|
auto parent = mParent;
|
||||||
|
auto &window = GetProjectFrame( *parent );
|
||||||
|
|
||||||
// Hook the parents mouse events...using the parent helps greatly
|
// Hook the parents mouse events...using the parent helps greatly
|
||||||
// under GTK
|
// under GTK
|
||||||
@ -443,6 +443,8 @@ ToolManager::ToolManager( AudacityProject *parent, wxWindow *topDockParent )
|
|||||||
&ToolManager::OnCaptureLost,
|
&ToolManager::OnCaptureLost,
|
||||||
this );
|
this );
|
||||||
|
|
||||||
|
wxWindow *topDockParent = getTopPanelHook()( window );
|
||||||
|
|
||||||
// Create the top and bottom docks
|
// Create the top and bottom docks
|
||||||
mTopDock = safenew ToolDock( this, topDockParent, TopDockID );
|
mTopDock = safenew ToolDock( this, topDockParent, TopDockID );
|
||||||
mBotDock = safenew ToolDock( this, &window, BotDockID );
|
mBotDock = safenew ToolDock( this, &window, BotDockID );
|
||||||
|
@ -61,11 +61,13 @@ class ToolManager final
|
|||||||
static ToolManager &Get( AudacityProject &project );
|
static ToolManager &Get( AudacityProject &project );
|
||||||
static const ToolManager &Get( const AudacityProject &project );
|
static const ToolManager &Get( const AudacityProject &project );
|
||||||
|
|
||||||
ToolManager( AudacityProject *parent, wxWindow *topDockParent );
|
ToolManager( AudacityProject *parent );
|
||||||
ToolManager( const ToolManager & ) PROHIBITED;
|
ToolManager( const ToolManager & ) PROHIBITED;
|
||||||
ToolManager &operator=( const ToolManager & ) PROHIBITED;
|
ToolManager &operator=( const ToolManager & ) PROHIBITED;
|
||||||
~ToolManager();
|
~ToolManager();
|
||||||
|
|
||||||
|
void CreateWindows();
|
||||||
|
|
||||||
void LayoutToolBars();
|
void LayoutToolBars();
|
||||||
|
|
||||||
bool IsDocked( int type );
|
bool IsDocked( int type );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user