Fix restoring to main window when the dock icon is clicked

bzr-revno: 2531
This commit is contained in:
Jonathan Springer 2015-04-25 20:49:58 +01:00 committed by Tim Bentley
commit 1b52957a6b
2 changed files with 30 additions and 3 deletions

View File

@ -250,7 +250,7 @@ class OpenLP(OpenLPMixin, QtGui.QApplication):
def event(self, event):
"""
Enables direct file opening on OS X
Enables platform specific event handling i.e. direct file opening on OS X
:param event: The event
"""
@ -259,8 +259,19 @@ class OpenLP(OpenLPMixin, QtGui.QApplication):
log.debug('Got open file event for %s!', file_name)
self.args.insert(0, file_name)
return True
else:
return QtGui.QApplication.event(self, event)
# Mac OS X should restore app window when user clicked on the OpenLP icon
# in the Dock bar. However, OpenLP consists of multiple windows and this
# does not work. This workaround fixes that.
# The main OpenLP window is restored when it was previously minimized.
elif event.type() == QtCore.QEvent.ApplicationActivate:
if is_macosx() and hasattr(self, 'main_window'):
if self.main_window.isMinimized():
# Copied from QWidget.setWindowState() docs on how to restore and activate a minimized window
# while preserving its maximized and/or full-screen state.
self.main_window.setWindowState(self.main_window.windowState() & ~QtCore.Qt.WindowMinimized |
QtCore.Qt.WindowActive)
return True
return QtGui.QApplication.event(self, event)
def parse_options(args):

View File

@ -66,6 +66,22 @@ class TestInit(TestCase, TestMixin):
mocked_file_method.assert_called_once_with()
self.assertEqual(self.openlp.args[0], file_path, "The path should be in args.")
def application_activate_event_test(self):
"""
Test that clicking on the dock icon on Mac OS X restores the main window if it is minimized
"""
# GIVEN:
with patch('openlp.core.is_macosx') as mocked_is_macosx:
mocked_is_macosx.return_value = True
event = QtCore.QEvent(QtCore.QEvent.ApplicationActivate)
# WHEN:
result = self.openlp.event(event)
# THEN:
self.assertTrue(result, "The method should have returned True.")
self.assertFalse(self.openlp.main_window.isMinimized())
def backup_on_upgrade_first_install_test(self):
"""
Test that we don't try to backup on a new install