From 637559c7b7690a80d4c90e34def555c7c88aacff Mon Sep 17 00:00:00 2001 From: mjbudd77 Date: Mon, 21 Jun 2021 20:06:13 -0400 Subject: [PATCH] Added logic to only hook up screen changed signal handler once the window has fully been constructed. --- src/drivers/Qt/ConsoleViewerGL.cpp | 23 ++++++++++++------ src/drivers/Qt/ConsoleWindow.cpp | 39 +++++++++++++++++++++++++++++- src/drivers/Qt/ConsoleWindow.h | 3 +++ 3 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/drivers/Qt/ConsoleViewerGL.cpp b/src/drivers/Qt/ConsoleViewerGL.cpp index 9cefd306..3cf9b3fa 100644 --- a/src/drivers/Qt/ConsoleViewerGL.cpp +++ b/src/drivers/Qt/ConsoleViewerGL.cpp @@ -30,6 +30,7 @@ #include #include +#include #include #if defined(QT_OPENGL_ES) || defined(QT_OPENGL_ES_2) @@ -72,13 +73,6 @@ ConsoleViewGL_t::ConsoleViewGL_t(QWidget *parent) setMinimumHeight( 224 ); setFocusPolicy(Qt::StrongFocus); - QScreen *screen = window()->screen(); - - if ( screen != NULL ) - { - devPixRatio = screen->devicePixelRatio(); - //printf("GL Ratio: %f \n", screen->devicePixelRatio() ); - } localBufSize = (4 * GL_NES_WIDTH) * (4 * GL_NES_HEIGHT) * sizeof(uint32_t); localBuf = (uint32_t*)malloc( localBufSize ); @@ -138,6 +132,21 @@ void ConsoleViewGL_t::screenChanged( QScreen *screen ) int ConsoleViewGL_t::init( void ) { + QScreen *screen = NULL; + + if ( window() != NULL ) + { + if ( window()->windowHandle() != NULL ) + { + screen = window()->windowHandle()->screen(); + } + } + + if ( screen != NULL ) + { + devPixRatio = screen->devicePixelRatio(); + printf("GL Ratio: %f \n", screen->devicePixelRatio() ); + } return 0; } diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index eb2cd7ca..8df52a64 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -221,7 +221,7 @@ consoleWin_t::consoleWin_t(QWidget *parent) // Create AVI Recording Disk Thread aviDiskThread = new AviRecordDiskThread_t(this); - connect( this->window()->windowHandle(), SIGNAL(screenChanged(QScreen*)), this, SLOT(winScreenChanged(QScreen*)) ); + scrHandlerConnected = false; } consoleWin_t::~consoleWin_t(void) @@ -335,8 +335,39 @@ void consoleWin_t::videoReset(void) return; } +void consoleWin_t::initScreenHandler(void) +{ + if ( !scrHandlerConnected ) + { + QWidget *w; + + w = this->window(); + + // This needs to be scheduled after window creation. + if ( w != NULL) + { + QWindow *hdl = w->windowHandle(); + + if (hdl != NULL) + { + //printf("Connecting to screenChanged Signal\n"); + connect( hdl, SIGNAL(screenChanged(QScreen*)), this, SLOT(winScreenChanged(QScreen*)) ); + scrHandlerConnected = true; + + winScreenChanged( hdl->screen() ); + } + } + } + +} + void consoleWin_t::winScreenChanged(QScreen *scr) { + if ( scr == NULL ) + { + return; + } + //printf("Screen Changed: %p\n", scr ); if ( viewport_GL != NULL ) { @@ -654,6 +685,12 @@ void consoleWin_t::dropEvent(QDropEvent *event) } } +void consoleWin_t::showEvent(QShowEvent *event) +{ + //printf("Main Window Show Event\n"); + initScreenHandler(); +} + //--------------------------------------------------------------------------- void consoleWin_t::initHotKeys(void) { diff --git a/src/drivers/Qt/ConsoleWindow.h b/src/drivers/Qt/ConsoleWindow.h index a52e4080..beec99a4 100644 --- a/src/drivers/Qt/ConsoleWindow.h +++ b/src/drivers/Qt/ConsoleWindow.h @@ -248,6 +248,7 @@ class consoleWin_t : public QMainWindow bool mainMenuEmuPauseSet; bool mainMenuEmuWasPaused; bool mainMenuPauseWhenActv; + bool scrHandlerConnected; std::list romList; std::vector afActList; @@ -261,11 +262,13 @@ class consoleWin_t : public QMainWindow void keyReleaseEvent(QKeyEvent *event); void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent *event); + void showEvent(QShowEvent *event); void syncActionConfig( QAction *act, const char *property ); void showErrorMsgWindow(void); private: void initHotKeys(void); + void initScreenHandler(void); void createMainMenu(void); void buildRecentRomMenu(void); void saveRecentRomMenu(void);