13
0

T: Fix focus of session dialog widgets

This fixes `assertion 'WIDGET_REALIZED_FOR_EVENT (widget, event)' failed`
This commit is contained in:
Robin Gareus 2024-05-21 04:06:31 +02:00
parent 380d3b587d
commit 8807a62dd5
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 24 additions and 10 deletions

View File

@ -77,7 +77,8 @@ using namespace ArdourWidgets;
using namespace ARDOUR_UI_UTILS;
SessionDialog::SessionDialog (DialogTab initial_tab, const std::string& session_name, const std::string& session_path, const std::string& template_name, bool cancel_not_quit)
: ArdourDialog (initial_tab==New ? _("Session Setup") : _("Recent Sessions"), true, true)
: ArdourDialog (initial_tab == New ? _("Session Setup") : _("Recent Sessions"), true, true)
, _initial_tab (initial_tab)
, new_name_was_edited (false)
, new_folder_chooser (FILE_CHOOSER_ACTION_SELECT_FOLDER)
{
@ -202,15 +203,6 @@ SessionDialog::SessionDialog (DialogTab initial_tab, const std::string& session_
}
_tabs.signal_switch_page().connect (sigc::mem_fun (*this, &SessionDialog::tab_page_switched));
_tabs.set_current_page(3); //this will enforce a page-change, so correct widgets get sensitized
if (initial_tab==New) {
_tabs.set_current_page(0);
} else if (initial_tab==Open) {
_tabs.set_current_page(2);
} else {
_tabs.set_current_page(1);
}
disallow_idle ();
}
@ -218,6 +210,25 @@ SessionDialog::~SessionDialog()
{
}
void
SessionDialog::on_show ()
{
ArdourDialog::on_show ();
_tabs.set_current_page(3); // force change
switch (_initial_tab) {
case New:
_tabs.set_current_page(0);
break;
case Open:
_tabs.set_current_page(2);
break;
default:
_tabs.set_current_page(1);
break;
}
}
void
SessionDialog::tab_page_switched(GtkNotebookPage*, guint page_number)
{

View File

@ -75,6 +75,7 @@ public:
std::string session_template_name();
uint32_t master_channel_count();
void on_show ();
void set_provided_session (std::string const & name, std::string const & path);
void clear_name ();
@ -113,6 +114,8 @@ private:
void setup_recent_sessions ();
Gtk::VBox recent_vbox;
DialogTab _initial_tab;
/* recent sessions */
void setup_existing_session_page ();