Fix of #5537 - GUI_App::post_init could be in some cases called before GUI_App::init_openg when GCode viewer is used.
The solution adds a status flag to GUI_App::init_openg and ensures that GUI_App::post_init isn't called before initialization in GUI_App::init_openg is done.
This commit is contained in:
parent
99f5dfbde7
commit
81878a6f79
2 changed files with 17 additions and 1 deletions
|
@ -669,7 +669,13 @@ wxGLContext* GUI_App::init_glcontext(wxGLCanvas& canvas)
|
||||||
|
|
||||||
bool GUI_App::init_opengl()
|
bool GUI_App::init_opengl()
|
||||||
{
|
{
|
||||||
|
#ifdef __linux__
|
||||||
|
bool status = m_opengl_mgr.init_gl();
|
||||||
|
m_opengl_initialized = true;
|
||||||
|
return status;
|
||||||
|
#else
|
||||||
return m_opengl_mgr.init_gl();
|
return m_opengl_mgr.init_gl();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void GUI_App::init_app_config()
|
void GUI_App::init_app_config()
|
||||||
|
@ -916,7 +922,14 @@ bool GUI_App::on_init_inner()
|
||||||
this->obj_manipul()->update_if_dirty();
|
this->obj_manipul()->update_if_dirty();
|
||||||
|
|
||||||
static bool update_gui_after_init = true;
|
static bool update_gui_after_init = true;
|
||||||
|
|
||||||
|
// An ugly solution to GH #5537 in which GUI_App::init_opengl (normally called from events wxEVT_PAINT
|
||||||
|
// and wxEVT_SET_FOCUS before GUI_App::post_init is called) wasn't called before GUI_App::post_init and OpenGL wasn't initialized.
|
||||||
|
#ifdef __linux__
|
||||||
|
if (update_gui_after_init && m_opengl_initialized) {
|
||||||
|
#else
|
||||||
if (update_gui_after_init) {
|
if (update_gui_after_init) {
|
||||||
|
#endif
|
||||||
update_gui_after_init = false;
|
update_gui_after_init = false;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
this->mainframe->register_win32_callbacks();
|
this->mainframe->register_win32_callbacks();
|
||||||
|
|
|
@ -109,6 +109,9 @@ private:
|
||||||
bool m_app_conf_exists{ false };
|
bool m_app_conf_exists{ false };
|
||||||
EAppMode m_app_mode{ EAppMode::Editor };
|
EAppMode m_app_mode{ EAppMode::Editor };
|
||||||
bool m_is_recreating_gui{ false };
|
bool m_is_recreating_gui{ false };
|
||||||
|
#ifdef __linux__
|
||||||
|
bool m_opengl_initialized{ false };
|
||||||
|
#endif
|
||||||
|
|
||||||
wxColour m_color_label_modified;
|
wxColour m_color_label_modified;
|
||||||
wxColour m_color_label_sys;
|
wxColour m_color_label_sys;
|
||||||
|
@ -251,7 +254,7 @@ public:
|
||||||
RemovableDriveManager* removable_drive_manager() { return m_removable_drive_manager.get(); }
|
RemovableDriveManager* removable_drive_manager() { return m_removable_drive_manager.get(); }
|
||||||
OtherInstanceMessageHandler* other_instance_message_handler() { return m_other_instance_message_handler.get(); }
|
OtherInstanceMessageHandler* other_instance_message_handler() { return m_other_instance_message_handler.get(); }
|
||||||
wxSingleInstanceChecker* single_instance_checker() {return m_single_instance_checker.get();}
|
wxSingleInstanceChecker* single_instance_checker() {return m_single_instance_checker.get();}
|
||||||
|
|
||||||
void init_single_instance_checker(const std::string &name, const std::string &path);
|
void init_single_instance_checker(const std::string &name, const std::string &path);
|
||||||
void set_instance_hash (const size_t hash) { m_instance_hash_int = hash; m_instance_hash_string = std::to_string(hash); }
|
void set_instance_hash (const size_t hash) { m_instance_hash_int = hash; m_instance_hash_string = std::to_string(hash); }
|
||||||
std::string get_instance_hash_string () { return m_instance_hash_string; }
|
std::string get_instance_hash_string () { return m_instance_hash_string; }
|
||||||
|
|
Loading…
Reference in a new issue