WebBrowser/WebBrowserView.py

branch
maintenance
changeset 5730
6422afc7adc4
parent 5680
b93cb6353cc0
parent 5721
b4d0cddecd64
child 5752
1860eca908e4
--- 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.

eric ide

mercurial