OSDN Git Service

[UI][Qt][DRAW] Fix crash sometimes when exit emulator.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 11 May 2016 04:26:34 +0000 (13:26 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 11 May 2016 04:26:34 +0000 (13:26 +0900)
source/src/qt/common/qt_utils.cpp
source/src/qt/gui/mainwidget_base.h
source/src/qt/gui/qt_gldraw.cpp
source/src/qt/gui/qt_gldraw.h
source/src/qt/gui/qt_glutil.cpp

index ba415b7..da2453b 100644 (file)
@@ -110,6 +110,8 @@ void Ui_MainWindow::LaunchEmuThread(void)
        connect(hRunEmu, SIGNAL(sig_is_enable_mouse(bool)), glv, SLOT(do_set_mouse_enabled(bool)));
        connect(glv, SIGNAL(sig_key_down(uint32_t, uint32_t, bool)), hRunEmu, SLOT(do_key_down(uint32_t, uint32_t, bool)));
        connect(glv, SIGNAL(sig_key_up(uint32_t, uint32_t)), hRunEmu, SLOT(do_key_up(uint32_t, uint32_t)));
+       connect(this, SIGNAL(sig_quit_widgets()), glv, SLOT(do_stop_run_vm()));
+
        
        //connect(hRunEmu, SIGNAL(sig_finished()), this, SLOT(delete_emu_thread()));
        connect(this, SIGNAL(sig_vm_reset()), hRunEmu, SLOT(doReset()));
@@ -360,6 +362,8 @@ void Ui_MainWindow::OnMainWindowClosed(void)
        emit quit_draw_thread();
        emit quit_joy_thread();
        emit quit_emu_thread();
+       emit sig_quit_widgets();
+       
        if(hDrawEmu != NULL) {
                hDrawEmu->wait();
                delete hDrawEmu;
index 03780af..22f3b44 100644 (file)
@@ -624,6 +624,7 @@ signals:
        int sig_start_auto_key(QString);
        int sig_stop_auto_key(void);
        int quit_debugger_thread(void);
+       int sig_quit_widgets(void);
 };
 QT_END_NAMESPACE
 
index fc019a9..4956dce 100644 (file)
@@ -125,6 +125,8 @@ GLDrawClass::GLDrawClass(QWidget *parent)
        draw_height = using_flags->get_screen_height();
        delay_update = false;
        is_mouse_enabled = false;
+
+       run_vm = true;
        this->initKeyCode();
 }
 
@@ -164,3 +166,7 @@ QSize GLDrawClass::getDrawSize(void)
        return QSize(draw_width, draw_height);
 }
 
+void GLDrawClass::do_stop_run_vm()
+{
+       run_vm = false;
+}
index 29197bc..7bac274 100644 (file)
@@ -45,6 +45,8 @@ class GLDrawClass: public QGLWidget
        bool delay_update;
 
  protected:
+       bool run_vm;
+
        void keyReleaseEvent(QKeyEvent *event);
        void keyPressEvent(QKeyEvent *event);
        void initializeGL();
@@ -64,7 +66,7 @@ class GLDrawClass: public QGLWidget
        void SaveToPixmap(void);
        GLDraw_2_0 *extfunc;
        CSP_KeyTables *key_table;
-       
+
 public:
        GLDrawClass(QWidget *parent = 0);
        ~GLDrawClass();
@@ -120,6 +122,7 @@ public slots:
        void do_set_screen_multiply(float mul);
        void do_update_keyboard_scan_code(uint32_t vk, uint32_t scan);
        void do_set_mouse_enabled(bool flag);
+       void do_stop_run_vm();
 signals:
        void update_screenChanged(int tick);
        void do_notify_move_mouse(int x, int y);
index d458936..5970a92 100644 (file)
@@ -23,7 +23,7 @@
 void GLDrawClass::update_screen(bitmap_t *p)
 {
        //if(tick < (1000 / 75)) tick = 1000 / 75;
-       if(p != NULL) {
+       if((p != NULL) && (run_vm)) {
                this->makeCurrent();
                //imgptr = &(p->pImage);
                drawUpdateTexture(p);