Fri, 05 Feb 2016 20:02:09 +0100
Continued porting the web browser.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebBrowser/JavaScript/AutoFillJsObject.py Fri Feb 05 20:02:09 2016 +0100 @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the Auto Fill web channel endpoint. +""" + +# +# This code was ported from QupZilla. +# Copyright (C) David Rosca <nowrep@gmail.com> +# + +from PyQt5.QtCore import pyqtSlot, QObject, QByteArray + + +class AutoFillJsObject(QObject): + """ + Class implementing the Auto Fill web channel endpoint. + """ + def __init__(self, parent): + """ + Constructor + + @param parent reference to the parent object + @type ExternalJsObject + """ + super(AutoFillJsObject, self).__init__(parent) + + self.__jsObject = parent + + @pyqtSlot(str, str, str, QByteArray) + def formSubmitted(self, urlStr, userName, password, data): + """ + Public slot passing form data to the auto fill manager. + """ + # TODO: AutoFill + pass +##void AutoFillJsObject::formSubmitted(const QString &frameUrl, const QString &username, const QString &password, const QByteArray &data) +##{ +## PageFormData formData; +## formData.username = username; +## formData.password = password; +## formData.postData = data; +## +## mApp->autoFill()->saveForm(m_jsObject->page(), QUrl(frameUrl), formData); +##}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebBrowser/JavaScript/ExternalJsObject.py Fri Feb 05 20:02:09 2016 +0100 @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the JavaScript external object being the endpoint of +a web channel. +""" + +# +# This code was ported from QupZilla. +# Copyright (C) David Rosca <nowrep@gmail.com> +# + +from PyQt5.QtCore import QObject + +from .AutoFillJsObject import AutoFillJsObject + + +class ExternalJsObject(QObject): + """ + Class implementing the endpoint of our web channel. + """ + def __init__(self, page): + """ + Constructor + + @param page reference to the web page object + @type WebBrowserPage + """ + super(ExternalJsObject, self).__init__(page) + + self.__page = page + self.__autoFill = AutoFillJsObject(self) + + def page(self): + """ + Public method returning a reference to the web page object. + + @return reference to the web page object + @rtype WebBrowserPage + """ + return self.__page + + def speedDial(self): + """ + Public method returning a reference to a speed dial object. + + @return reference to a speed dial object + @rtype SpeedDial + """ + if self.__page.url().toString() != "eric:speeddial": + return None + + # TODO: SpeedDial +## return WebBrowser.WebBrowserWindow.WebBrowserWindow.speedDial() + return None + + def autoFill(self): + """ + Public method returning a reference to the auto fill object. + + @return reference to the auto fill object + @rtype AutoFillJsObject + """ + return self.__autoFill + +##void ExternalJsObject::AddSearchProvider(const QString &engineUrl) +##{ Slot +## mApp->searchEnginesManager()->addEngine(QUrl(engineUrl)); +##} +## +##int ExternalJsObject::IsSearchProviderInstalled(const QString &engineURL) +##{ Slot +## qDebug() << "NOT IMPLEMENTED: IsSearchProviderInstalled()" << engineURL; +## return 0; +##}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebBrowser/JavaScript/__init__.py Fri Feb 05 20:02:09 2016 +0100 @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Package implementing the external JavaScript objects. +"""
--- a/WebBrowser/WebBrowserPage.py Thu Feb 04 19:39:54 2016 +0100 +++ b/WebBrowser/WebBrowserPage.py Fri Feb 05 20:02:09 2016 +0100 @@ -10,25 +10,20 @@ from __future__ import unicode_literals try: - str = unicode + str = unicode # __IGNORE_EXCEPTION__ except NameError: pass from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject, QT_TRANSLATE_NOOP, \ QUrl, QBuffer, QIODevice, QFileInfo, Qt, QTimer, QEvent, \ - QRect, QFile, QPoint, QByteArray, qVersion + QRect, QFile, QPoint, QByteArray, QEventLoop, qVersion from PyQt5.QtGui import QDesktopServices, QClipboard, QMouseEvent, QColor, \ QPalette from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication, QInputDialog, \ QLineEdit, QLabel, QToolTip, QFrame, QDialog from PyQt5.QtPrintSupport import QPrinter, QPrintDialog -##from PyQt5.QtWebKit import QWebSettings -##from PyQt5.QtWebKitWidgets import QWebView, QWebPage from PyQt5.QtWebEngineWidgets import QWebEnginePage -try: - from PyQt5.QtWebKit import QWebElement -except ImportError: - pass +from PyQt5.QtWebChannel import QWebChannel from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest import sip @@ -37,6 +32,8 @@ import WebBrowser import WebBrowser.WebBrowserWindow +from .JavaScript.ExternalJsObject import ExternalJsObject + import Preferences import UI.PixmapCache import Globals @@ -173,6 +170,8 @@ """ super(WebBrowserPage, self).__init__(parent) + self.setupWebChannel() + ## self.setPluginFactory(self.webPluginFactory()) ## ## self.__lastRequest = None @@ -186,8 +185,8 @@ ## self.__proxy.setPrimaryNetworkAccessManager( ## Helpviewer.HelpWindow.HelpWindow.networkAccessManager()) ## self.setNetworkAccessManager(self.__proxy) -## -## self.__sslConfiguration = None + + self.__sslConfiguration = None ## self.__proxy.finished.connect(self.__managerFinished) ## self.__adBlockedEntries = [] @@ -587,37 +586,32 @@ ## self.tr("SSL Info"), ## self.tr("""This site does not contain SSL information.""")) ## -## def hasValidSslInfo(self): -## """ -## Public method to check, if the page has a valid SSL certificate. -## -## @return flag indicating a valid SSL certificate (boolean) -## """ -## if self.__sslConfiguration is None: -## return False -## -## certList = self.__sslConfiguration.peerCertificateChain() -## if not certList: -## return False -## -## certificateDict = Globals.toDict( -## Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) -## for server in certificateDict: -## localCAList = QSslCertificate.fromData(certificateDict[server]) -## for cert in certList: -## if cert in localCAList: -## return True -## -## if qVersion() >= "5.0.0": -## for cert in certList: -## if cert.isBlacklisted(): -## return False -## else: -## for cert in certList: -## if not cert.isValid(): -## return False -## -## return True + def hasValidSslInfo(self): + """ + Public method to check, if the page has a valid SSL certificate. + + @return flag indicating a valid SSL certificate (boolean) + """ + if self.__sslConfiguration is None: + return False + + certList = self.__sslConfiguration.peerCertificateChain() + if not certList: + return False + + certificateDict = Globals.toDict( + Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) + for server in certificateDict: + localCAList = QSslCertificate.fromData(certificateDict[server]) + for cert in certList: + if cert in localCAList: + return True + + for cert in certList: + if cert.isBlacklisted(): + return False + + return True ## @classmethod ## def webPluginFactory(cls): @@ -711,6 +705,69 @@ @param feature requested feature @type QWebEnginePage.Feature """ - manager = WebBrowser.WebBrowserWindow.WebBrowserWindow\ - .featurePermissionManager() - manager.requestFeaturePermission(self, frame, feature) + # TODO: Feature Permission +## manager = WebBrowser.WebBrowserWindow.WebBrowserWindow\ +## .featurePermissionManager() +## manager.requestFeaturePermission(self, frame, feature) + + def execJavaScript(self, script): + """ + Public method to execute a JavaScript function synchroneously. + + @param script JavaScript script source to be executed + @type str + @return result of the script + @rtype depending upon script result + """ + loop = QEventLoop() + resultDict = {"res": None} + + def resultCallback(res, resDict=resultDict): + if loop and loop.isRunning(): + resDict["res"] = res + loop.quit() + + self.previewView.page().runJavaScript( + script, resultCallback) + + loop.exec_() + return resultDict["res"] + + def scroll(self, x, y): + """ + Public method to scroll by the given amount of pixels. + + @param x horizontal scroll value + @type int + @param y vertical scroll value + @type int + """ + self.runJavaScript( + "window.scrollTo(window.scrollX + {0}, window.scrollY + {1})" + .format(x, y) + ) + + def hitTestContent(self, pos): + """ + Public method to test the contents at a given position. + + @param pos position to be tested + @type QPoint + @return object containing the test results + @rtype WebBrowserHitTestResult + """ + # TODO: WebBrowserHitTestResult +## return WebBrowserHitTestResult(self, pos) + + def setupWebChannel(self): + """ + Public method to setup a web channel to our external object. + """ + oldChannel = self.webChannel() + newChannel = QWebChannel() + newChannel.registerObject("eric_object", ExternalJsObject(self)) + self.setWebChannel(newChannel) + + if oldChannel: + del oldChannel.registeredObjects["eric_object"] + del oldChannel
--- a/WebBrowser/WebBrowserView.py Thu Feb 04 19:39:54 2016 +0100 +++ b/WebBrowser/WebBrowserView.py Fri Feb 05 20:02:09 2016 +0100 @@ -40,117 +40,6 @@ except ImportError: SSL_AVAILABLE = False -############################################################################### -## -## -##class JavaScriptExternalObject(QObject): -## """ -## Class implementing an external javascript object to add search providers. -## """ -## def __init__(self, mw, parent=None): -## """ -## Constructor -## -## @param mw reference to the main window 8HelpWindow) -## @param parent reference to the parent object (QObject) -## """ -## super(JavaScriptExternalObject, self).__init__(parent) -## -## self.__mw = mw -## -## @pyqtSlot(str) -## def AddSearchProvider(self, url): -## """ -## Public slot to add a search provider. -## -## @param url url of the XML file defining the search provider (string) -## """ -## self.__mw.openSearchManager().addEngine(QUrl(url)) -## -## -##class LinkedResource(object): -## """ -## Class defining a data structure for linked resources. -## """ -## def __init__(self): -## """ -## Constructor -## """ -## self.rel = "" -## self.type_ = "" -## self.href = "" -## self.title = "" -## -############################################################################### -## -## -##class JavaScriptEricObject(QObject): -## """ -## Class implementing an external javascript object to search via the -## startpage. -## """ -## # these must be in line with the strings used by the javascript part of -## # the start page -## translations = [ -## QT_TRANSLATE_NOOP("JavaScriptEricObject", -## "Welcome to eric6 Web Browser!"), -## QT_TRANSLATE_NOOP("JavaScriptEricObject", "eric6 Web Browser"), -## QT_TRANSLATE_NOOP("JavaScriptEricObject", "Search!"), -## QT_TRANSLATE_NOOP("JavaScriptEricObject", "About eric6"), -## ] -## -## def __init__(self, mw, parent=None): -## """ -## Constructor -## -## @param mw reference to the main window 8HelpWindow) -## @param parent reference to the parent object (QObject) -## """ -## super(JavaScriptEricObject, self).__init__(parent) -## -## self.__mw = mw -## -## @pyqtSlot(str, result=str) -## def translate(self, trans): -## """ -## Public method to translate the given string. -## -## @param trans string to be translated (string) -## @return translation (string) -## """ -## if trans == "QT_LAYOUT_DIRECTION": -## # special handling to detect layout direction -## if qApp.isLeftToRight(): -## return "LTR" -## else: -## return "RTL" -## -## return self.tr(trans) -## -## @pyqtSlot(result=str) -## def providerString(self): -## """ -## Public method to get a string for the search provider. -## -## @return string for the search provider (string) -## """ -## return self.tr("Search results provided by {0}")\ -## .format(self.__mw.openSearchManager().currentEngineName()) -## -## @pyqtSlot(str, result=str) -## def searchUrl(self, searchStr): -## """ -## Public method to get the search URL for the given search term. -## -## @param searchStr search term (string) -## @return search URL (string) -## """ -## return bytes( -## self.__mw.openSearchManager().currentEngine() -## .searchUrl(searchStr).toEncoded()).decode() -## -############################################################################### - class WebBrowserView(QWebEngineView): """ @@ -187,6 +76,9 @@ """ super(WebBrowserView, self).__init__(parent) self.setObjectName(name) + + self.__rwhvqt = None + self.installEventFilter(self) ## ## import Helpviewer.HelpWindow ## self.__speedDial = Helpviewer.HelpWindow.HelpWindow.speedDial() @@ -232,9 +124,6 @@ ## self.__mw.openSearchManager().currentEngineChanged.connect( ## self.__currentEngineChanged) - self.__rwhvqt = None - # TODO: eventFilter (see below) -## self.installEventFilter(self) self.setAcceptDrops(True) # TODO: Access Keys @@ -254,7 +143,8 @@ ## self.__mw.personalInformationManager().connectPage(self.page()) # TODO: GreaseMonkey ## self.__mw.greaseMonkeyManager().connectPage(self.page()) -## + + # TODO: WebInspector ## self.__inspector = None self.grabGesture(Qt.PinchGesture) @@ -1272,7 +1162,7 @@ self.setSource(url) evt.acceptProposedAction() - def mousePressEvent(self, evt): + def _mousePressEvent(self, evt): """ Protected method called by a mouse press event. @@ -1288,7 +1178,7 @@ else: super(WebBrowserView, self).mousePressEvent(evt) - def mouseReleaseEvent(self, evt): + def _mouseReleaseEvent(self, evt): """ Protected method called by a mouse release event. @@ -1307,7 +1197,7 @@ self.setSource(url) evt.setAccepted(accepted) - def wheelEvent(self, evt): + def _wheelEvent(self, evt): """ Protected method to handle wheel events. @@ -1332,45 +1222,45 @@ super(WebBrowserView, self).wheelEvent(evt) -## def keyPressEvent(self, evt): -## """ -## Protected method called by a key press. -## -## @param evt reference to the key event (QKeyEvent) -## """ -## # TODO: PIM -#### if self.__mw.personalInformationManager().viewKeyPressEvent(self, evt): -#### return -## -## # TODO: Access Keys -#### if self.__enableAccessKeys: -#### self.__accessKeysPressed = ( -#### evt.modifiers() == Qt.ControlModifier and -#### evt.key() == Qt.Key_Control) -#### if not self.__accessKeysPressed: -#### if self.__checkForAccessKey(evt): -#### self.__hideAccessKeys() -#### evt.accept() -#### return -#### self.__hideAccessKeys() -#### else: -#### QTimer.singleShot(300, self.__accessKeyShortcut) -## -## self.__ctrlPressed = (evt.key() == Qt.Key_Control) -## super(WebBrowserView, self).keyPressEvent(evt) -## -## def keyReleaseEvent(self, evt): -## """ -## Protected method called by a key release. -## -## @param evt reference to the key event (QKeyEvent) -## """ -## # TODO: Access Keys -#### if self.__enableAccessKeys: -#### self.__accessKeysPressed = evt.key() == Qt.Key_Control -## -## self.__ctrlPressed = False -## super(WebBrowserView, self).keyReleaseEvent(evt) + def _keyPressEvent(self, evt): + """ + Protected method called by a key press. + + @param evt reference to the key event (QKeyEvent) + """ + # TODO: PIM +## if self.__mw.personalInformationManager().viewKeyPressEvent(self, evt): +## return + + # TODO: Access Keys +## if self.__enableAccessKeys: +## self.__accessKeysPressed = ( +## evt.modifiers() == Qt.ControlModifier and +## evt.key() == Qt.Key_Control) +## if not self.__accessKeysPressed: +## if self.__checkForAccessKey(evt): +## self.__hideAccessKeys() +## evt.accept() +## return +## self.__hideAccessKeys() +## else: +## QTimer.singleShot(300, self.__accessKeyShortcut) + + self.__ctrlPressed = (evt.key() == Qt.Key_Control) + super(WebBrowserView, self).keyPressEvent(evt) + + def _keyReleaseEvent(self, evt): + """ + Protected method called by a key release. + + @param evt reference to the key event (QKeyEvent) + """ + # TODO: Access Keys +## if self.__enableAccessKeys: +## self.__accessKeysPressed = evt.key() == Qt.Key_Control + + self.__ctrlPressed = False + super(WebBrowserView, self).keyReleaseEvent(evt) def focusOutEvent(self, evt): """ @@ -1385,20 +1275,21 @@ 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) + # TODO: Obsoleted by eventFilter() (?) +## 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 gestureEvent(self, evt): + def _gestureEvent(self, evt): """ Protected method handling gesture events. @@ -1413,73 +1304,58 @@ self.__currentZoom = int(scaleFactor * 100) self.__applyZoom() evt.accept() -##bool WebView::eventFilter(QObject *obj, QEvent *event) -##{ -## // Hack to find widget that receives input events -## if (obj == this && event->type() == QEvent::ChildAdded) { -## QWidget *child = qobject_cast<QWidget*>(static_cast<QChildEvent*>(event)->child()); -## if (child && child->inherits("QtWebEngineCore::RenderWidgetHostViewQtDelegateWidget")) { -## m_rwhvqt = child; -## m_rwhvqt->installEventFilter(this); -## } -## } -## -## // Forward events to WebView -## if (obj == m_rwhvqt) { -###define HANDLE_EVENT(f, t) \ -## { \ -## bool wasAccepted = event->isAccepted(); \ -## event->setAccepted(false); \ -## f(static_cast<t*>(event)); \ -## bool ret = event->isAccepted(); \ -## event->setAccepted(wasAccepted); \ -## return ret; \ -## } -## -## switch (event->type()) { -## case QEvent::KeyPress: -## HANDLE_EVENT(_keyPressEvent, QKeyEvent); -## -## case QEvent::KeyRelease: -## HANDLE_EVENT(_keyReleaseEvent, QKeyEvent); -## -## case QEvent::MouseButtonPress: -## HANDLE_EVENT(_mousePressEvent, QMouseEvent); -## -## case QEvent::MouseButtonRelease: -## HANDLE_EVENT(_mouseReleaseEvent, QMouseEvent); -## -## case QEvent::MouseMove: -## HANDLE_EVENT(_mouseMoveEvent, QMouseEvent); -## -## case QEvent::Wheel: -## HANDLE_EVENT(_wheelEvent, QWheelEvent); -## -## default: -## break; -## } -## -###undef HANDLE_EVENT -## } -## -## // Block already handled events -## if (obj == this) { -## switch (event->type()) { -## case QEvent::KeyPress: -## case QEvent::KeyRelease: -## case QEvent::MouseButtonPress: -## case QEvent::MouseButtonRelease: -## case QEvent::MouseMove: -## case QEvent::Wheel: -## return true; -## -## default: -## break; -## } -## } -## -## return QWebEngineView::eventFilter(obj, event); -##} + + def eventFilter(self, obj, evt): + """ + Protected method to process event for other objects. + + @param obj reference to object to process events for + @type QObject + @param evt reference to event to be processed + @type QEvent + @return flag indicating that the event should be filtered out + @rtype bool + """ + # find the render widget receiving events for the web page + if obj is self and evt.type() == QEvent.ChildAdded: + child = evt.child() + if child and child.inherits( + "QtWebEngineCore::RenderWidgetHostViewQtDelegateWidget"): + self.__rwhvqt = child + self.__rwhvqt.installEventFilter(self) + + # forward events to WebBrowserView + if obj is self.__rwhvqt: + wasAccepted = evt.isAccepted() + evt.setAccepted(False) + if evt.type() == QEvent.KeyPress: + self._keyPressEvent(evt) + elif evt.type() == QEvent.KeyRelease: + self._keyReleaseEvent(evt) + elif evt.type() == QEvent.MouseButtonPress: + self._mousePressEvent(evt) + elif evt.type() == QEvent.MouseButtonRelease: + self._mouseReleaseEvent(evt) +## elif evt.type() == QEvent.MouseMove: +## self.__mouseMoveEvent(evt) + elif evt.type() == QEvent.Wheel: + self._wheelEvent(evt) + elif evt.type() == QEvent.Gesture: + self._gestureEvent(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.MouseMove, + QEvent.Wheel, QEvent.Gesture]: + return True + + return super(WebBrowserView, self).eventFilter(obj, evt) def clearHistory(self): """ @@ -1547,10 +1423,11 @@ self.__isLoading = False self.__progress = 0 - if Preferences.getHelp("ClickToFlashEnabled"): - # this is a hack to make the ClickToFlash button appear - self.zoomIn() - self.zoomOut() + # TODO: ClickToFlash (?) +## if Preferences.getHelp("ClickToFlashEnabled"): +## # this is a hack to make the ClickToFlash button appear +## self.zoomIn() +## self.zoomOut() # TODO: Zoom Manager ## zoomValue = Helpviewer.HelpWindow.HelpWindow.zoomManager()\
--- a/WebBrowser/WebBrowserWindow.py Thu Feb 04 19:39:54 2016 +0100 +++ b/WebBrowser/WebBrowserWindow.py Fri Feb 05 20:02:09 2016 +0100 @@ -1674,9 +1674,9 @@ menu = mb.addMenu(self.tr('&View')) menu.setTearOffEnabled(True) -## menu.addAction(self.zoomInAct) -## menu.addAction(self.zoomResetAct) -## menu.addAction(self.zoomOutAct) + menu.addAction(self.zoomInAct) + menu.addAction(self.zoomResetAct) + menu.addAction(self.zoomOutAct) ## if self.zoomTextOnlyAct is not None: ## menu.addAction(self.zoomTextOnlyAct) menu.addSeparator() @@ -1832,12 +1832,12 @@ edittb.setIconSize(UI.Config.ToolBarIconSize) edittb.addAction(self.copyAct) -## viewtb = self.addToolBar(self.tr("View")) -## viewtb.setObjectName("ViewToolBar") -## viewtb.setIconSize(UI.Config.ToolBarIconSize) -## viewtb.addAction(self.zoomInAct) -## viewtb.addAction(self.zoomResetAct) -## viewtb.addAction(self.zoomOutAct) + viewtb = self.addToolBar(self.tr("View")) + viewtb.setObjectName("ViewToolBar") + viewtb.setIconSize(UI.Config.ToolBarIconSize) + viewtb.addAction(self.zoomInAct) + viewtb.addAction(self.zoomResetAct) + viewtb.addAction(self.zoomOutAct) ## viewtb.addSeparator() ## viewtb.addAction(self.fullScreenAct) @@ -2545,28 +2545,29 @@ # set value of zoom widget self.__zoomWidget.setValue(cb.zoomValue()) + # TODO: Preferences dialog def __showPreferences(self): """ Private slot to set the preferences. """ - from Preferences.ConfigurationDialog import ConfigurationDialog - dlg = ConfigurationDialog( - self, 'Configuration', True, fromEric=self.__fromEric, - displayMode=ConfigurationDialog.WebBrowserMode) - dlg.preferencesChanged.connect(self.preferencesChanged) - dlg.masterPasswordChanged.connect(self.masterPasswordChanged) - dlg.show() - if self.__lastConfigurationPageName: - dlg.showConfigurationPageByName(self.__lastConfigurationPageName) - else: - dlg.showConfigurationPageByName("empty") - dlg.exec_() - QApplication.processEvents() - if dlg.result() == QDialog.Accepted: - dlg.setPreferences() - Preferences.syncPreferences() - self.preferencesChanged() - self.__lastConfigurationPageName = dlg.getConfigurationPageName() +## from Preferences.ConfigurationDialog import ConfigurationDialog +## dlg = ConfigurationDialog( +## self, 'Configuration', True, fromEric=self.__fromEric, +## displayMode=ConfigurationDialog.WebBrowserMode) +## dlg.preferencesChanged.connect(self.preferencesChanged) +## dlg.masterPasswordChanged.connect(self.masterPasswordChanged) +## dlg.show() +## if self.__lastConfigurationPageName: +## dlg.showConfigurationPageByName(self.__lastConfigurationPageName) +## else: +## dlg.showConfigurationPageByName("empty") +## dlg.exec_() +## QApplication.processEvents() +## if dlg.result() == QDialog.Accepted: +## dlg.setPreferences() +## Preferences.syncPreferences() +## self.preferencesChanged() +## self.__lastConfigurationPageName = dlg.getConfigurationPageName() def preferencesChanged(self): """ @@ -3576,38 +3577,38 @@ else: QWebEngineSettings.globalSettings().setDefaultTextEncoding(codec) -## def eventMouseButtons(self): -## """ -## Public method to get the last recorded mouse buttons. -## -## @return mouse buttons (Qt.MouseButtons) -## """ -## return self.__eventMouseButtons -## -## def eventKeyboardModifiers(self): -## """ -## Public method to get the last recorded keyboard modifiers. -## -## @return keyboard modifiers (Qt.KeyboardModifiers) -## """ -## return self.__eventKeyboardModifiers -## -## def setEventMouseButtons(self, buttons): -## """ -## Public method to record mouse buttons. -## -## @param buttons mouse buttons to record (Qt.MouseButtons) -## """ -## self.__eventMouseButtons = buttons -## -## def setEventKeyboardModifiers(self, modifiers): -## """ -## Public method to record keyboard modifiers. -## -## @param modifiers keyboard modifiers to record (Qt.KeyboardModifiers) -## """ -## self.__eventKeyboardModifiers = modifiers -## + def eventMouseButtons(self): + """ + Public method to get the last recorded mouse buttons. + + @return mouse buttons (Qt.MouseButtons) + """ + return self.__eventMouseButtons + + def eventKeyboardModifiers(self): + """ + Public method to get the last recorded keyboard modifiers. + + @return keyboard modifiers (Qt.KeyboardModifiers) + """ + return self.__eventKeyboardModifiers + + def setEventMouseButtons(self, buttons): + """ + Public method to record mouse buttons. + + @param buttons mouse buttons to record (Qt.MouseButtons) + """ + self.__eventMouseButtons = buttons + + def setEventKeyboardModifiers(self, modifiers): + """ + Public method to record keyboard modifiers. + + @param modifiers keyboard modifiers to record (Qt.KeyboardModifiers) + """ + self.__eventKeyboardModifiers = modifiers + def mousePressEvent(self, evt): """ Protected method called by a mouse press event.
--- a/eric6.e4p Thu Feb 04 19:39:54 2016 +0100 +++ b/eric6.e4p Fri Feb 05 20:02:09 2016 +0100 @@ -1264,6 +1264,9 @@ <Source>ViewManager/BookmarkedFilesDialog.py</Source> <Source>ViewManager/ViewManager.py</Source> <Source>ViewManager/__init__.py</Source> + <Source>WebBrowser/JavaScript/AutoFillJsObject.py</Source> + <Source>WebBrowser/JavaScript/ExternalJsObject.py</Source> + <Source>WebBrowser/JavaScript/__init__.py</Source> <Source>WebBrowser/SearchWidget.py</Source> <Source>WebBrowser/UrlBar/StackedUrlBar.py</Source> <Source>WebBrowser/UrlBar/UrlBar.py</Source>