Initial proof of concept for pseudo layout
Fixes #3920 - hopefully properly this time...
This commit is contained in:
parent
5635639ed4
commit
cee88cd7ca
@ -1057,28 +1057,6 @@ class WebEngineTab(browsertab.AbstractTab):
|
|||||||
def _on_navigation_request(self, navigation):
|
def _on_navigation_request(self, navigation):
|
||||||
super()._on_navigation_request(navigation)
|
super()._on_navigation_request(navigation)
|
||||||
|
|
||||||
if qtutils.version_check('5.11.0', exact=True, compiled=False):
|
|
||||||
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-68224
|
|
||||||
layout = self._widget.layout()
|
|
||||||
count = layout.count()
|
|
||||||
children = self._widget.findChildren(QWidget)
|
|
||||||
if not count and children:
|
|
||||||
log.webview.warning("Found children not in layout: {}, "
|
|
||||||
"focus proxy {} (QTBUG-68224)".format(
|
|
||||||
children, self._widget.focusProxy()))
|
|
||||||
if count > 1:
|
|
||||||
log.webview.debug("Found {} widgets! (QTBUG-68224)"
|
|
||||||
.format(count))
|
|
||||||
for i in range(count):
|
|
||||||
item = layout.itemAt(i)
|
|
||||||
if item is None:
|
|
||||||
continue
|
|
||||||
widget = item.widget()
|
|
||||||
if widget is not self._widget.focusProxy():
|
|
||||||
log.webview.debug("Removing widget {} (QTBUG-68224)"
|
|
||||||
.format(widget))
|
|
||||||
layout.removeWidget(widget)
|
|
||||||
|
|
||||||
if not navigation.accepted or not navigation.is_main_frame:
|
if not navigation.accepted or not navigation.is_main_frame:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
|
import sip
|
||||||
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QUrl, PYQT_VERSION
|
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QUrl, PYQT_VERSION
|
||||||
from PyQt5.QtGui import QPalette
|
from PyQt5.QtGui import QPalette
|
||||||
from PyQt5.QtWebEngineWidgets import (QWebEngineView, QWebEnginePage,
|
from PyQt5.QtWebEngineWidgets import (QWebEngineView, QWebEnginePage,
|
||||||
@ -30,6 +31,7 @@ from qutebrowser.browser import shared
|
|||||||
from qutebrowser.browser.webengine import certificateerror, webenginesettings
|
from qutebrowser.browser.webengine import certificateerror, webenginesettings
|
||||||
from qutebrowser.config import config
|
from qutebrowser.config import config
|
||||||
from qutebrowser.utils import log, debug, usertypes, jinja, objreg, qtutils
|
from qutebrowser.utils import log, debug, usertypes, jinja, objreg, qtutils
|
||||||
|
from qutebrowser.misc import miscwidgets
|
||||||
|
|
||||||
|
|
||||||
class WebEngineView(QWebEngineView):
|
class WebEngineView(QWebEngineView):
|
||||||
@ -51,9 +53,17 @@ class WebEngineView(QWebEngineView):
|
|||||||
parent=self)
|
parent=self)
|
||||||
self.setPage(page)
|
self.setPage(page)
|
||||||
|
|
||||||
|
sip.delete(self.layout())
|
||||||
|
self._layout = miscwidgets.PseudoLayout(self)
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
self.page().shutdown()
|
self.page().shutdown()
|
||||||
|
|
||||||
|
def resizeEvent(self, _event):
|
||||||
|
proxy = self.focusProxy()
|
||||||
|
if proxy:
|
||||||
|
proxy.setGeometry(self.rect())
|
||||||
|
|
||||||
def createWindow(self, wintype):
|
def createWindow(self, wintype):
|
||||||
"""Called by Qt when a page wants to create a new window.
|
"""Called by Qt when a page wants to create a new window.
|
||||||
|
|
||||||
|
@ -266,6 +266,22 @@ class WrapperLayout(QLayout):
|
|||||||
self._widget.deleteLater()
|
self._widget.deleteLater()
|
||||||
|
|
||||||
|
|
||||||
|
class PseudoLayout(QLayout):
|
||||||
|
|
||||||
|
def addItem(self, item):
|
||||||
|
assert self.parent() is not None
|
||||||
|
item.widget().setParent(self.parent())
|
||||||
|
|
||||||
|
def removeItem(self, item):
|
||||||
|
item.widget().setParent(None)
|
||||||
|
|
||||||
|
def count(self):
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def itemAt(self, _pos):
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class FullscreenNotification(QLabel):
|
class FullscreenNotification(QLabel):
|
||||||
|
|
||||||
"""A label telling the user this page is now fullscreen."""
|
"""A label telling the user this page is now fullscreen."""
|
||||||
|
Loading…
Reference in New Issue
Block a user