From d24408a6a72c49cfb6c6127b6d7e4d20373dddb0 Mon Sep 17 00:00:00 2001 From: Ximi1970 Date: Sat, 16 Jan 2021 21:46:33 +0100 Subject: [PATCH] Extra check in monitor --- .../SysTray-X-app/windowctrl-unix.cpp | 18 ++++++++++++++- .../SysTray-X-lib-x11/systray-x-lib-x11.cpp | 23 +++++++++++++++++++ .../SysTray-X-lib-x11/systray-x-lib-x11.h | 7 ++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/app/SysTray-X/SysTray-X-app/windowctrl-unix.cpp b/app/SysTray-X/SysTray-X-app/windowctrl-unix.cpp index 99eb73a..dad7f87 100644 --- a/app/SysTray-X/SysTray-X-app/windowctrl-unix.cpp +++ b/app/SysTray-X/SysTray-X-app/windowctrl-unix.cpp @@ -106,6 +106,22 @@ void WindowCtrlUnix::updateX11WindowStates() qint32 n_wm_state; void* wm_state_ptr = GetWindowProperty( m_display, m_tb_windows.at( i ), "WM_STATE", &n_wm_state ); + if( Error() ) + { +#ifdef DEBUG_DISPLAY_ACTIONS_DETAILS + emit signalConsole( QString( "Updatex11: Removing WinID %1").arg( m_tb_windows.at( i ) ) ); +#endif + + /* + * Window does not exist + */ + m_tb_windows.removeAt( i ); + m_tb_window_positions.removeAt( i ); + m_tb_window_states_x11.removeAt( i ); + + continue; + } + /* * Get the state */ @@ -175,7 +191,7 @@ void WindowCtrlUnix::updateX11WindowStates() if( ( current_state == Preferences::STATE_MINIMIZED || current_state == Preferences::STATE_DOCKED ) && current_state != getWindowState( m_tb_windows.at( i ) ) ) { #ifdef DEBUG_DISPLAY_ACTIONS_DETAILS - emit signalConsole( QString( "WinID %1, state: %2").arg( m_tb_windows.at( i ) ). + emit signalConsole( QString( "Updatex11: WinID %1, state: %2").arg( m_tb_windows.at( i ) ). arg( Preferences::WindowStateString.at( m_tb_window_states[ m_tb_windows.at( i ) ] ) ) ); for( int j = 0 ; j < atom_list.length() ; ++j ) diff --git a/app/SysTray-X/SysTray-X-lib-x11/systray-x-lib-x11.cpp b/app/SysTray-X/SysTray-X-lib-x11/systray-x-lib-x11.cpp index 0550d50..6f9389d 100644 --- a/app/SysTray-X/SysTray-X-lib-x11/systray-x-lib-x11.cpp +++ b/app/SysTray-X/SysTray-X-lib-x11/systray-x-lib-x11.cpp @@ -15,11 +15,19 @@ #include +/* + * X11 error state + * */ +bool x11Error = false; + + /* * Open the display */ void* OpenDisplay() { + x11Error = false; + return XOpenDisplay( NULL ); } @@ -471,6 +479,7 @@ int ErrorHandler( Display* display, XErrorEvent* event ) XGetErrorText( display, event->error_code, buf, 1024 ); fprintf( stderr, "%s\n", buf ); + x11Error = true; return 0; } @@ -484,10 +493,24 @@ void SetErrorHandler() } +/* + * Get the error state + */ +bool Error() +{ + bool stete = x11Error; + x11Error = false; + + return stete; +} + + /* * Unset the error handler */ void UnSetErrorHandler() { + x11Error = false; + XSetErrorHandler( NULL ); } diff --git a/app/SysTray-X/SysTray-X-lib-x11/systray-x-lib-x11.h b/app/SysTray-X/SysTray-X-lib-x11/systray-x-lib-x11.h index c9ba75f..4f7b789 100644 --- a/app/SysTray-X/SysTray-X-lib-x11/systray-x-lib-x11.h +++ b/app/SysTray-X/SysTray-X-lib-x11/systray-x-lib-x11.h @@ -266,6 +266,13 @@ void MoveWindow( void* display, quint64 window, int x, int y ); */ void SetErrorHandler(); +/** + * @brief Error. Get the error state. + * + * @return The error state. + */ +bool Error(); + /** * @brief UnSetErrorHandler. Unset the x11 error handler. */