--- a/WebBrowser/WebBrowserView.py Sun Apr 09 16:52:55 2017 +0200 +++ b/WebBrowser/WebBrowserView.py Sat May 06 13:43:21 2017 +0200 @@ -123,6 +123,9 @@ WebInspector.registerView(self) if qVersion() >= "5.8.0": + if self.parentWidget() is not None: + self.parentWidget().installEventFilter(self) + lay = self.layout() lay.currentChanged.connect( lambda: QTimer.singleShot(0, self.__setRwhvqt)) @@ -1251,8 +1254,6 @@ elif evt.button() == Qt.XButton2: self.pageAction(QWebEnginePage.Forward).trigger() evt.accept() - else: - super(WebBrowserView, self).mousePressEvent(evt) def _mouseReleaseEvent(self, evt): """ @@ -1283,6 +1284,13 @@ @param evt reference to the mouse event (QMouseEvent) """ + if self.__mw and self.__mw.isFullScreen(): + if self.__mw.isFullScreenNavigationVisible(): + self.__mw.hideFullScreenNavigation() + elif evt.y() < 5: + # mouse is within 5px to the top + self.__mw.showFullScreenNavigation() + if WebBrowserWindow.autoScroller().mouseMove(evt): evt.accept() @@ -1303,17 +1311,13 @@ else: self.zoomIn() evt.accept() - return - if evt.modifiers() & Qt.ShiftModifier: + elif evt.modifiers() & Qt.ShiftModifier: if delta < 0: self.backward() else: self.forward() evt.accept() - return - - super(WebBrowserView, self).wheelEvent(evt) def _keyPressEvent(self, evt): """ @@ -1325,13 +1329,28 @@ evt.accept() return - if evt.key() == Qt.Key_Escape: - if self.isFullScreen(): - self.triggerPageAction(QWebEnginePage.ExitFullScreen) + if evt.key() == Qt.Key_ZoomIn: + self.zoomIn() + evt.accept() + elif evt.key() == Qt.Key_ZoomOut: + self.zoomOut() + evt.accept() + elif evt.key() == Qt.Key_Plus: + if evt.modifiers() & Qt.ControlModifier: + self.zoomIn() evt.accept() - return - - super(WebBrowserView, self).keyPressEvent(evt) + elif evt.key() == Qt.Key_Minus: + if evt.modifiers() & Qt.ControlModifier: + self.zoomOut() + evt.accept() + elif evt.key() == Qt.Key_0: + if evt.modifiers() & Qt.ControlModifier: + self.zoomReset() + evt.accept() + elif evt.key() == Qt.Key_M: + if evt.modifiers() & Qt.ControlModifier: + self.__muteMedia() + evt.accept() def _keyReleaseEvent(self, evt): """ @@ -1339,28 +1358,11 @@ @param evt reference to the key event (QKeyEvent) """ - super(WebBrowserView, self).keyReleaseEvent(evt) - - def focusOutEvent(self, evt): - """ - Protected method called by a focus out event. - - @param evt reference to the focus event (QFocusEvent) - """ - super(WebBrowserView, self).focusOutEvent(evt) - - def event(self, evt): - """ - Public method handling events. - - @param evt reference to the event (QEvent) - @return flag indicating, if the event was handled (boolean) - """ - if evt.type() == QEvent.Gesture: - self._gestureEvent(evt) - return True - - return super(WebBrowserView, self).event(evt) + if evt.key() == Qt.Key_Escape: + if self.isFullScreen(): + self.triggerPageAction(QWebEnginePage.ExitFullScreen) + evt.accept() + self.requestFullScreen(False) def _gestureEvent(self, evt): """ @@ -1399,9 +1401,16 @@ self.grabGesture(Qt.PinchGesture) self.__rwhvqt.grabGesture(Qt.PinchGesture) self.__rwhvqt.installEventFilter(self) + else: + if obj is self and evt.type() == QEvent.ParentChange and \ + self.parentWidget() is not None: + self.parentWidget().installEventFilter(self) # forward events to WebBrowserView - if obj is self.__rwhvqt: + if obj is self.__rwhvqt and \ + evt.type() in [QEvent.KeyPress, QEvent.KeyRelease, + QEvent.MouseButtonPress, QEvent.MouseButtonRelease, + QEvent.MouseMove, QEvent.Wheel, QEvent.Gesture]: wasAccepted = evt.isAccepted() evt.setAccepted(False) if evt.type() == QEvent.KeyPress: @@ -1422,16 +1431,45 @@ evt.setAccepted(wasAccepted) return ret + if obj is self.parentWidget() and \ + evt.type() in [QEvent.KeyPress, QEvent.KeyRelease]: + wasAccepted = evt.isAccepted() + evt.setAccepted(False) + if evt.type() == QEvent.KeyPress: + self._keyPressEvent(evt) + elif evt.type() == QEvent.KeyRelease: + self._keyReleaseEvent(evt) + ret = evt.isAccepted() + evt.setAccepted(wasAccepted) + return ret + # block already handled events if obj is self: if evt.type() in [QEvent.KeyPress, QEvent.KeyRelease, QEvent.MouseButtonPress, QEvent.MouseButtonRelease, - QEvent.Wheel, QEvent.Gesture]: + QEvent.MouseMove, QEvent.Wheel, QEvent.Gesture]: return True + + elif evt.type() == QEvent.Hide: + if self.isFullScreen(): + self.triggerPageAction(QWebEnginePage.ExitFullScreen) return super(WebBrowserView, self).eventFilter(obj, evt) + def event(self, evt): + """ + Public method handling events. + + @param evt reference to the event (QEvent) + @return flag indicating, if the event was handled (boolean) + """ + if evt.type() == QEvent.Gesture: + self._gestureEvent(evt) + return True + + return super(WebBrowserView, self).event(evt) + def inputWidget(self): """ Public method to get a reference to the render widget.