Fixed bugs with MultiDialog. Fixed Bug with prompting about modules.
Previously MultiDialog attempted to centre on parent dialog, but there was a NULL parent. Now the application top window is used. Dialog shows centred, for example when there are missing block files. If the top window is a WX_STAY_ON_TOP, we move our dialog to the left, as otherwise it would be partially hidden. Previously Audacity would ask about enabling a module whilst the splash screen was showing. For some as yet undetermined reason the MultiDialog and Splash Screen are incompatible. Possibly it's related to doing a ShowModal before a full application exists. The not ideal workaround is to now delay showing the splash screen until after the modules have been loaded.
This commit is contained in:
parent
66b3eb3d71
commit
221474e37a
|
@ -1167,10 +1167,24 @@ bool AudacityApp::OnInit()
|
||||||
mLocale = NULL;
|
mLocale = NULL;
|
||||||
InitLang( lang );
|
InitLang( lang );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//JKC We'd like to initialise the module manager WHILE showing the splash screen.
|
||||||
|
//Can't as MultiDialog interacts poorly with the splash screen. So we do it before.
|
||||||
|
//TODO: Find out why opening a multidialog wrecks the splash screen.
|
||||||
|
//best current guess is that it's something to do with doing a DoModal this early
|
||||||
|
//in the program.
|
||||||
|
|
||||||
|
// Initialize the CommandHandler
|
||||||
|
InitCommandHandler();
|
||||||
|
// Initialize the ModuleManager, including loading found modules
|
||||||
|
ModuleManager::Initialize(*mCmdHandler);
|
||||||
|
|
||||||
// BG: Create a temporary window to set as the top window
|
// BG: Create a temporary window to set as the top window
|
||||||
wxImage logoimage((const char **) AudacityLogoWithName_xpm);
|
wxImage logoimage((const char **) AudacityLogoWithName_xpm);
|
||||||
logoimage.Rescale(logoimage.GetWidth() / 2, logoimage.GetHeight() / 2);
|
logoimage.Rescale(logoimage.GetWidth() / 2, logoimage.GetHeight() / 2);
|
||||||
wxBitmap logo(logoimage);
|
wxBitmap logo(logoimage);
|
||||||
|
|
||||||
wxSplashScreen *temporarywindow =
|
wxSplashScreen *temporarywindow =
|
||||||
new wxSplashScreen(logo,
|
new wxSplashScreen(logo,
|
||||||
wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT,
|
wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT,
|
||||||
|
@ -1183,11 +1197,8 @@ bool AudacityApp::OnInit()
|
||||||
temporarywindow->SetTitle(_("Audacity is starting up..."));
|
temporarywindow->SetTitle(_("Audacity is starting up..."));
|
||||||
SetTopWindow(temporarywindow);
|
SetTopWindow(temporarywindow);
|
||||||
|
|
||||||
// Initialize the CommandHandler
|
|
||||||
InitCommandHandler();
|
|
||||||
|
|
||||||
// Initialize the ModuleManager, including loading found modules
|
|
||||||
ModuleManager::Initialize(*mCmdHandler);
|
|
||||||
|
|
||||||
// Init DirManager, which initializes the temp directory
|
// Init DirManager, which initializes the temp directory
|
||||||
// If this fails, we must exit the program.
|
// If this fails, we must exit the program.
|
||||||
|
@ -1234,9 +1245,9 @@ bool AudacityApp::OnInit()
|
||||||
|
|
||||||
SetExitOnFrameDelete(true);
|
SetExitOnFrameDelete(true);
|
||||||
|
|
||||||
|
|
||||||
AudacityProject *project = CreateNewAudacityProject();
|
AudacityProject *project = CreateNewAudacityProject();
|
||||||
mCmdHandler->SetProject(project);
|
mCmdHandler->SetProject(project);
|
||||||
|
|
||||||
wxWindow * pWnd = MakeHijackPanel() ;
|
wxWindow * pWnd = MakeHijackPanel() ;
|
||||||
if( pWnd )
|
if( pWnd )
|
||||||
{
|
{
|
||||||
|
@ -1246,9 +1257,11 @@ bool AudacityApp::OnInit()
|
||||||
pWnd->Show( true );
|
pWnd->Show( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
temporarywindow->Show( false );
|
|
||||||
|
temporarywindow->Show(false);
|
||||||
delete temporarywindow;
|
delete temporarywindow;
|
||||||
|
|
||||||
|
|
||||||
if( project->mShowSplashScreen )
|
if( project->mShowSplashScreen )
|
||||||
project->OnHelpWelcome();
|
project->OnHelpWelcome();
|
||||||
|
|
||||||
|
|
|
@ -245,7 +245,7 @@ void ModuleManager::Initialize(CommandHandler &cmdHandler)
|
||||||
msg += _("\n\nOnly use modules from trusted sources");
|
msg += _("\n\nOnly use modules from trusted sources");
|
||||||
const wxChar *buttons[] = {_("Yes"), _("No"), NULL}; // could add a button here for 'yes and remember that', and put it into the cfg file. Needs more thought.
|
const wxChar *buttons[] = {_("Yes"), _("No"), NULL}; // could add a button here for 'yes and remember that', and put it into the cfg file. Needs more thought.
|
||||||
int action;
|
int action;
|
||||||
action = ShowMultiDialog(msg, _("Module Loader"), buttons, _("Try and load this module?"), false);
|
action = ShowMultiDialog(msg, _("Audacity Module Loader"), buttons, _("Try and load this module?"), false);
|
||||||
#ifdef EXPERIMENTAL_MODULE_PREFS
|
#ifdef EXPERIMENTAL_MODULE_PREFS
|
||||||
// If we're not prompting always, accept the answer permanantly
|
// If we're not prompting always, accept the answer permanantly
|
||||||
if( iModuleStatus == kModuleNew ){
|
if( iModuleStatus == kModuleNew ){
|
||||||
|
|
|
@ -47,6 +47,8 @@ void ModulePrefs::GetAllModuleStatuses(){
|
||||||
// mod-script-pipe
|
// mod-script-pipe
|
||||||
// mod-nyq-bench
|
// mod-nyq-bench
|
||||||
// mod-track-panel
|
// mod-track-panel
|
||||||
|
// mod-menu-munger
|
||||||
|
// mod-theming
|
||||||
|
|
||||||
// TODO: On an Audacity upgrade we should (?) actually untick modules.
|
// TODO: On an Audacity upgrade we should (?) actually untick modules.
|
||||||
// The old modules might be still around, and we do not want to use them.
|
// The old modules might be still around, and we do not want to use them.
|
||||||
|
|
|
@ -36,7 +36,8 @@ for each problem encountered, since there can be many orphans.
|
||||||
class MultiDialog : public wxDialog
|
class MultiDialog : public wxDialog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MultiDialog(wxString message,
|
MultiDialog(wxWindow * pParent,
|
||||||
|
wxString message,
|
||||||
wxString title,
|
wxString title,
|
||||||
const wxChar **buttons, wxString boxMsg, bool log);
|
const wxChar **buttons, wxString boxMsg, bool log);
|
||||||
~MultiDialog() {};
|
~MultiDialog() {};
|
||||||
|
@ -57,10 +58,11 @@ BEGIN_EVENT_TABLE(MultiDialog, wxDialog)
|
||||||
EVT_BUTTON(ID_SHOW_LOG_BUTTON, MultiDialog::OnShowLog)
|
EVT_BUTTON(ID_SHOW_LOG_BUTTON, MultiDialog::OnShowLog)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
MultiDialog::MultiDialog(wxString message,
|
MultiDialog::MultiDialog(wxWindow * pParent,
|
||||||
|
wxString message,
|
||||||
wxString title,
|
wxString title,
|
||||||
const wxChar **buttons, wxString boxMsg, bool log)
|
const wxChar **buttons, wxString boxMsg, bool log)
|
||||||
: wxDialog(NULL, (wxWindowID)-1, title,
|
: wxDialog(pParent, wxID_ANY, title,
|
||||||
wxDefaultPosition, wxDefaultSize,
|
wxDefaultPosition, wxDefaultSize,
|
||||||
wxCAPTION) // not wxDEFAULT_DIALOG_STYLE because we don't want wxCLOSE_BOX and wxSYSTEM_MENU
|
wxCAPTION) // not wxDEFAULT_DIALOG_STYLE because we don't want wxCLOSE_BOX and wxSYSTEM_MENU
|
||||||
{
|
{
|
||||||
|
@ -140,11 +142,25 @@ void MultiDialog::OnShowLog(wxCommandEvent & WXUNUSED(event))
|
||||||
|
|
||||||
|
|
||||||
int ShowMultiDialog(wxString message,
|
int ShowMultiDialog(wxString message,
|
||||||
wxString title,
|
wxString title,
|
||||||
const wxChar **buttons, wxString boxMsg, bool log)
|
const wxChar **buttons, wxString boxMsg, bool log)
|
||||||
{
|
{
|
||||||
MultiDialog dlog(message, title, buttons, boxMsg, log);
|
wxWindow * pParent = wxGetApp().GetTopWindow();
|
||||||
dlog.CentreOnParent();
|
if (pParent) {
|
||||||
|
if ((pParent->GetWindowStyle() & wxSTAY_ON_TOP) == wxSTAY_ON_TOP)
|
||||||
|
pParent = NULL;
|
||||||
|
}
|
||||||
|
MultiDialog dlog(pParent,
|
||||||
|
message, title, buttons, boxMsg, log);
|
||||||
|
// If dialog does not have a parent, cannot be centred on it.
|
||||||
|
if (pParent != NULL)
|
||||||
|
dlog.CentreOnParent();
|
||||||
|
else {
|
||||||
|
dlog.CenterOnScreen();
|
||||||
|
wxPoint Pos = dlog.GetPosition() + wxPoint(-300, -10);
|
||||||
|
dlog.Move(Pos);
|
||||||
|
dlog;
|
||||||
|
}
|
||||||
return dlog.ShowModal();
|
return dlog.ShowModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue