mirror of https://gitlab.com/openlp/openlp.git
creating ConfigScreenChangedEmitter singleton to encapsulate debounced screen change emitter; simplifying main_window's screen_changed warning modal condition
This commit is contained in:
parent
58a07e5058
commit
4cb5cca85d
|
@ -163,7 +163,7 @@ class Screen(object):
|
|||
Callback function for when the screens geometry changes
|
||||
"""
|
||||
self.geometry = geometry
|
||||
emit_config_screen_changed()
|
||||
ConfigScreenChangedEmitter().emit()
|
||||
|
||||
|
||||
class ScreenList(metaclass=Singleton):
|
||||
|
@ -396,7 +396,7 @@ class ScreenList(metaclass=Singleton):
|
|||
is_primary=self.application.primaryScreen() == changed_screen))
|
||||
self.find_new_display_screen()
|
||||
changed_screen.geometryChanged.connect(self.screens[-1].on_geometry_changed)
|
||||
emit_config_screen_changed()
|
||||
ConfigScreenChangedEmitter().emit()
|
||||
|
||||
def on_screen_removed(self, removed_screen):
|
||||
"""
|
||||
|
@ -417,7 +417,7 @@ class ScreenList(metaclass=Singleton):
|
|||
self.screens.pop(removed_screen_number)
|
||||
if removed_screen_is_display:
|
||||
self.find_new_display_screen()
|
||||
emit_config_screen_changed()
|
||||
ConfigScreenChangedEmitter().emit()
|
||||
|
||||
def on_primary_screen_changed(self):
|
||||
"""
|
||||
|
@ -426,21 +426,24 @@ class ScreenList(metaclass=Singleton):
|
|||
for screen in self.screens:
|
||||
screen.is_primary = self.application.primaryScreen().geometry() == screen.geometry
|
||||
self.find_new_display_screen()
|
||||
emit_config_screen_changed()
|
||||
ConfigScreenChangedEmitter().emit()
|
||||
|
||||
|
||||
SCREEN_CHANGED_DEBOUNCE_TIMEOUT = 350
|
||||
|
||||
|
||||
def emit_config_screen_changed():
|
||||
screen_changed_debounce.start()
|
||||
class ConfigScreenChangedEmitter(metaclass=Singleton):
|
||||
def __init__(self):
|
||||
self.timer = QtCore.QTimer(None)
|
||||
self.timer.setInterval(SCREEN_CHANGED_DEBOUNCE_TIMEOUT)
|
||||
self.timer.setSingleShot(True)
|
||||
self.timer.timeout.connect(self.__do_emit_config_screen_changed)
|
||||
|
||||
def emit(self):
|
||||
self.timer.start()
|
||||
|
||||
def __do_emit_config_screen_changed():
|
||||
Registry().execute('config_screen_changed')
|
||||
def __do_emit_config_screen_changed(self):
|
||||
Registry().execute('config_screen_changed')
|
||||
|
||||
|
||||
screen_changed_debounce = QtCore.QTimer(None)
|
||||
screen_changed_debounce.setInterval(SCREEN_CHANGED_DEBOUNCE_TIMEOUT)
|
||||
screen_changed_debounce.setSingleShot(True)
|
||||
screen_changed_debounce.timeout.connect(__do_emit_config_screen_changed)
|
||||
def __del__(self):
|
||||
self.timer.stop()
|
||||
|
|
|
@ -40,7 +40,7 @@ from openlp.core.common.path import create_paths, resolve
|
|||
from openlp.core.common.platform import is_macosx, is_win
|
||||
from openlp.core.common.registry import Registry
|
||||
from openlp.core.common.settings import Settings
|
||||
from openlp.core.display.screens import ScreenList
|
||||
from openlp.core.display.screens import ConfigScreenChangedEmitter, ScreenList
|
||||
from openlp.core.lib.plugin import PluginStatus
|
||||
from openlp.core.lib.ui import create_action
|
||||
from openlp.core.projectors.manager import ProjectorManager
|
||||
|
@ -1021,8 +1021,10 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, LogMixin, RegistryPropert
|
|||
self.screen_updating_lock.acquire()
|
||||
# if a warning has been shown within the last 5 seconds, skip showing again to avoid spamming user,
|
||||
# also do not show if the settings window is visible
|
||||
if not self.settings_form.isVisible() and not self.screen_change_timestamp or \
|
||||
self.screen_change_timestamp and (datetime.now() - self.screen_change_timestamp).seconds > 5:
|
||||
has_shown_messagebox_recently = self.screen_change_timestamp \
|
||||
and (datetime.now() - self.screen_change_timestamp).seconds < 5
|
||||
should_show_messagebox = self.settings_form.isHidden() and not has_shown_messagebox_recently
|
||||
if should_show_messagebox:
|
||||
QtWidgets.QMessageBox.warning(self, translate('OpenLP.MainWindow', 'Screen setup has changed'),
|
||||
translate('OpenLP.MainWindow',
|
||||
'The screen setup has changed. '
|
||||
|
|
Loading…
Reference in New Issue