diff -r c269212cceac -r 6983af705a7f WebBrowser/WebBrowserWindow.py --- a/WebBrowser/WebBrowserWindow.py Sat Mar 19 20:07:34 2016 +0100 +++ b/WebBrowser/WebBrowserWindow.py Sun Mar 20 14:09:05 2016 +0100 @@ -18,7 +18,7 @@ import sys from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QByteArray, QSize, QTimer, \ - QUrl, QThread, QTextCodec, QProcess + QUrl, QThread, QTextCodec, QProcess, QEvent from PyQt5.QtGui import QDesktopServices, QKeySequence, QFont, QFontMetrics, \ QIcon from PyQt5.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QDockWidget, \ @@ -153,6 +153,9 @@ self.webProfile(private) self.networkManager() + self.__htmlFullScreen = False + self.__windowStates = 0 + from .SearchWidget import SearchWidget from .QtHelp.HelpTocWidget import HelpTocWidget from .QtHelp.HelpIndexWidget import HelpIndexWidget @@ -520,6 +523,9 @@ settings.setAttribute( QWebEngineSettings.ErrorPageEnabled, Preferences.getWebBrowser("ErrorPageEnabled")) + settings.setAttribute( + QWebEngineSettings.FullScreenSupportEnabled, + Preferences.getWebBrowser("FullScreenSupportEnabled")) def __initActions(self): """ @@ -793,8 +799,7 @@ UI.PixmapCache.getIcon("back.png"), self.tr('&Backward'), QKeySequence(self.tr("Alt+Left", "Go|Backward")), - QKeySequence(self.tr("Backspace", "Go|Backward")), - self, 'webbrowser_go_backward') + 0, self, 'webbrowser_go_backward') self.backAct.setStatusTip(self.tr('Move one screen backward')) self.backAct.setWhatsThis(self.tr( """<b>Backward</b>""" @@ -810,8 +815,7 @@ UI.PixmapCache.getIcon("forward.png"), self.tr('&Forward'), QKeySequence(self.tr("Alt+Right", "Go|Forward")), - QKeySequence(self.tr("Shift+Backspace", "Go|Forward")), - self, 'webbrowser_go_foreward') + 0, self, 'webbrowser_go_foreward') self.forwardAct.setStatusTip(self.tr( 'Move one screen forward')) self.forwardAct.setWhatsThis(self.tr( @@ -2577,7 +2581,7 @@ Preferences.setWebBrowser("WebBrowserState", state) if Preferences.getWebBrowser("SaveGeometry"): - if not self.__isFullScreen(): + if not self.isFullScreen(): Preferences.setGeometry("WebBrowserGeometry", self.saveGeometry()) else: @@ -2662,28 +2666,33 @@ """ Private slot called to toggle fullscreen mode. """ - if self.__isFullScreen(): + if self.__htmlFullScreen: + self.currentBrowser().triggerPageAction( + QWebEnginePage.ExitFullScreen) + return + + if self.isFullScreen(): # switch back to normal - self.setWindowState(self.windowState() & ~Qt.WindowFullScreen) + self.showNormal() self.menuBar().show() self.fullScreenAct.setIcon( UI.PixmapCache.getIcon("windowFullscreen.png")) self.fullScreenAct.setIconText(self.tr('Full Screen')) else: # switch to full screen - self.setWindowState(self.windowState() | Qt.WindowFullScreen) + self.showFullScreen() self.menuBar().hide() self.fullScreenAct.setIcon( UI.PixmapCache.getIcon("windowRestore.png")) self.fullScreenAct.setIconText(self.tr('Restore Window')) - def __isFullScreen(self): - """ - Private method to determine, if the window is in full screen mode. - - @return flag indicating full screen mode (boolean) - """ - return self.windowState() & Qt.WindowFullScreen + def enterHtmlFullScreen(self): + """ + Public method to switch to full screen initiated by the + HTML page. + """ + self.showFullScreen() + self.__htmlFullScreen = True def __copy(self): """ @@ -3961,6 +3970,28 @@ super(WebBrowserWindow, self).keyPressEvent(evt) + def event(self, evt): + """ + Public method handling events. + + @param evt reference to the event + @type QEvent + @return flag indicating a handled event + @rtype bool + """ + if evt.type() == QEvent.WindowStateChange: + if not bool(evt.oldState() & Qt.WindowFullScreen) and \ + bool(self.windowState() & Qt.WindowFullScreen): + # enter full screen mode + self.__windowStates = evt.oldState() + elif bool(evt.oldState() & Qt.WindowFullScreen) and \ + not bool(self.windowState() & Qt.WindowFullScreen): + # leave full screen mode + self.setWindowState(self.__windowStates) + self.__htmlFullScreen = False + + return super(WebBrowserWindow, self).event(evt) + ########################################################################### ## Interface to VirusTotal below ## ###########################################################################