Continued porting the web browser. QtWebEngine

Sun, 28 Feb 2016 12:48:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 28 Feb 2016 12:48:12 +0100
branch
QtWebEngine
changeset 4782
4ad656e4ebec
parent 4781
15d416f1eca5
child 4783
7de17766a5df

Continued porting the web browser.

- fixed some inspector related issues
- added page menu action to translate and validate the page

Preferences/__init__.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserTabWidget.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserView.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserWindow.py file | annotate | diff | comparison | revisions
WebBrowser/WebInspector.py file | annotate | diff | comparison | revisions
eric6_browser.py file | annotate | diff | comparison | revisions
icons/default/w3.png file | annotate | diff | comparison | revisions
--- a/Preferences/__init__.py	Sat Feb 27 20:51:44 2016 +0100
+++ b/Preferences/__init__.py	Sun Feb 28 12:48:12 2016 +0100
@@ -2686,6 +2686,15 @@
     if key.startswith(("FlashCookie", "Pim", "VirusTotal")):
         return getHelp(key, prefClass)
     
+    # Web inspector stuff must come before initializing web engine settings
+    # because that starts the chromium web process
+    if key == "WebInspectorPort":
+        return int(prefClass.settings.value(
+            "WebBrowser/" + key, prefClass.webBrowserDefaults[key]))
+    elif key == "WebInspectorEnabled":
+        return toBool(prefClass.settings.value(
+            "WebBrowser/" + key, prefClass.webBrowserDefaults[key]))
+    
     if not prefClass.webEngineSettingsIntitialized:
         prefClass.initWebEngineSettingsDefaults()
     
--- a/WebBrowser/WebBrowserTabWidget.py	Sat Feb 27 20:51:44 2016 +0100
+++ b/WebBrowser/WebBrowserTabWidget.py	Sun Feb 28 12:48:12 2016 +0100
@@ -22,6 +22,7 @@
 from E5Gui.E5Application import e5App
 
 from .WebBrowserView import WebBrowserView
+from . import WebInspector
 
 import UI.PixmapCache
 
@@ -65,10 +66,6 @@
         
         self.__mainWindow = parent
         
-        if Preferences.getWebBrowser("WebInspectorEnabled"):
-            os.environ["QTWEBENGINE_REMOTE_DEBUGGING"] = \
-                str(Preferences.getWebBrowser("WebInspectorPort"))
-        
         self.setUsesScrollButtons(True)
         self.setDocumentMode(True)
         self.setElideMode(Qt.ElideNone)
@@ -490,7 +487,7 @@
         self.__closedTabsManager.recordBrowser(browser, index)
         
         browser.closeWebInspector()
-        browser.home()
+        WebInspector.unregisterView(browser)
         self.removeTab(index)
         self.browserClosed.emit(browser)
         browser.deleteLater()
--- a/WebBrowser/WebBrowserView.py	Sat Feb 27 20:51:44 2016 +0100
+++ b/WebBrowser/WebBrowserView.py	Sun Feb 28 12:48:12 2016 +0100
@@ -153,12 +153,6 @@
         
         self.grabGesture(Qt.PinchGesture)
     
-    def __del__(self):
-        """
-        Special method doing some cleanup stuff.
-        """
-        WebInspector.unregisterView(self)
-    
 ##    def __addExternalBinding(self, frame=None):
 ##        """
 ##        Private slot to add javascript bindings for adding search providers.
@@ -601,10 +595,11 @@
 ##        if not hitTest.isContentEditable() and not hitTest.isContentSelected():
 ##            self.__menu.addAction(self.__mw.adBlockIcon().menuAction())
         
-        self.__menu.addSeparator()
-        self.__menu.addAction(
-            UI.PixmapCache.getIcon("webInspector.png"),
-            self.tr("Inspect Element..."), self.__webInspector)
+        if Preferences.getWebBrowser("WebInspectorEnabled"):
+            self.__menu.addSeparator()
+            self.__menu.addAction(
+                UI.PixmapCache.getIcon("webInspector.png"),
+                self.tr("Inspect Element..."), self.__webInspector)
         
         if not self.__menu.isEmpty():
             pos = evt.globalPos()
@@ -840,19 +835,6 @@
                 self.tr("Dictionary"), self.__openLinkInNewTab)\
                 .setData(wiktionaryUrl)
             menu.addSeparator()
-##    QString langCode = mApp->currentLanguage().left(2).toUtf8();
-##    QUrl googleTranslateUrl = QUrl(QString("https://translate.google.com/#auto/%1/%2").arg(langCode, selectedText));
-##    Action* gtwact = new Action(QIcon(":icons/sites/translate.png"), tr("Google Translate"));
-##    gtwact->setData(googleTranslateUrl);
-##    connect(gtwact, SIGNAL(triggered()), this, SLOT(openUrlInSelectedTab()));
-##    connect(gtwact, SIGNAL(ctrlTriggered()), this, SLOT(openUrlInBackgroundTab()));
-##    menu->addAction(gtwact);
-##
-##    Action* dictact = new Action(QIcon::fromTheme("accessories-dictionary"), tr("Dictionary"));
-##    dictact->setData(QUrl("http://" + (!langCode.isEmpty() ? langCode + "." : langCode) + "wiktionary.org/wiki/Special:Search?search=" + selectedText));
-##    connect(dictact, SIGNAL(triggered()), this, SLOT(openUrlInSelectedTab()));
-##    connect(dictact, SIGNAL(ctrlTriggered()), this, SLOT(openUrlInBackgroundTab()));
-##    menu->addAction(dictact);
         
         guessedUrl = QUrl.fromUserInput(self.selectedText().strip())
         if self.__isUrlValid(guessedUrl):
@@ -910,14 +892,35 @@
         # TODO: Site Info
 ##        menu.addSeparator()
 ##        menu.addAction(self.__mw.siteInfoAct)
-##    if (url().scheme() == QLatin1String("http") || url().scheme() == QLatin1String("https")) {
-##        const QUrl w3url = QUrl::fromEncoded("http://validator.w3.org/check?uri=" + QUrl::toPercentEncoding(url().toEncoded()));
-##        menu->addAction(QIcon(":icons/sites/w3.png"), tr("Validate page"), this, SLOT(openUrlInSelectedTab()))->setData(w3url);
-##
-##        QByteArray langCode = mApp->currentLanguage().left(2).toUtf8();
-##        const QUrl gturl = QUrl::fromEncoded("http://translate.google.com/translate?sl=auto&tl=" + langCode + "&u=" + QUrl::toPercentEncoding(url().toEncoded()));
-##        menu->addAction(QIcon(":icons/sites/translate.png"), tr("Translate page"), this, SLOT(openUrlInSelectedTab()))->setData(gturl);
-##    }
+        if self.url().scheme() in ["http", "https"]:
+            menu.addSeparator()
+            
+            w3url = QUrl.fromEncoded(
+                b"http://validator.w3.org/check?uri=" +
+                QUrl.toPercentEncoding(bytes(self.url().toEncoded()).decode()))
+            menu.addAction(
+                UI.PixmapCache.getIcon("w3.png"),
+                self.tr("Validate Page"), self.__openLinkInNewTab)\
+                .setData(w3url)
+            
+            from .WebBrowserLanguagesDialog import WebBrowserLanguagesDialog
+            languages = Preferences.toList(
+                Preferences.Prefs.settings.value(
+                    "WebBrowser/AcceptLanguages",
+                    WebBrowserLanguagesDialog.defaultAcceptLanguages()))
+            if languages:
+                language = languages[0]
+                langCode = language.split("[")[1][:2]
+                googleTranslatorUrl = QUrl.fromEncoded(
+                    b"http://translate.google.com/translate?sl=auto&tl=" +
+                    langCode.encode() +
+                    b"&u=" +
+                    QUrl.toPercentEncoding(
+                        bytes(self.url().toEncoded()).decode()))
+                menu.addAction(
+                    UI.PixmapCache.getIcon("translate.png"),
+                    self.tr("Google Translate"), self.__openLinkInNewTab)\
+                    .setData(googleTranslatorUrl)
         
     def __checkForForm(self, act, pos):
         """
@@ -1121,10 +1124,8 @@
             self.__inspector = WebInspector()
             self.__inspector.setView(self, True)
             self.__inspector.show()
-        elif self.__inspector.isVisible():
-            self.__inspector.hide()
         else:
-            self.__inspector.show()
+            self.closeWebInspector()
     
     def closeWebInspector(self):
         """
@@ -1133,6 +1134,7 @@
         if self.__inspector is not None:
             if self.__inspector.isVisible():
                 self.__inspector.hide()
+            WebInspector.unregisterView(self.__inspector)
             self.__inspector.deleteLater()
             self.__inspector = None
     
@@ -1388,8 +1390,6 @@
                 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:
@@ -1403,7 +1403,6 @@
             if evt.type() in [QEvent.KeyPress, QEvent.KeyRelease,
                               QEvent.MouseButtonPress,
                               QEvent.MouseButtonRelease,
-##                              QEvent.MouseMove,
                               QEvent.Wheel, QEvent.Gesture]:
                 return True
         
@@ -2119,11 +2118,3 @@
 ##        return True
 ##    
 ##    return False
-    
-    ######################
-    
-    def renderWidgetPixmap(self):
-        return self.__rwhvqt.grabFramebuffer()
-    
-    def repaintRenderWidget(self):
-        self.__rwhvqt.repaint()
--- a/WebBrowser/WebBrowserWindow.py	Sat Feb 27 20:51:44 2016 +0100
+++ b/WebBrowser/WebBrowserWindow.py	Sun Feb 28 12:48:12 2016 +0100
@@ -137,6 +137,11 @@
         if self.__initShortcutsOnly:
             self.__initActions()
         else:
+            if Preferences.getWebBrowser("WebInspectorEnabled"):
+                os.putenv(
+                    "QTWEBENGINE_REMOTE_DEBUGGING",
+                    str(Preferences.getWebBrowser("WebInspectorPort")))
+            
             self.webProfile(private)
             
             from .SearchWidget import SearchWidget
@@ -258,12 +263,10 @@
             self.__initMenus()
             self.__initToolbars()
             
+            syncMgr = self.syncManager()
+            syncMgr.syncMessage.connect(self.statusBar().showMessage)
+            syncMgr.syncError.connect(self.statusBar().showMessage)
             
-            # TODO: Sync
-##            syncMgr = self.syncManager()
-##            syncMgr.syncMessage.connect(self.statusBar().showMessage)
-##            syncMgr.syncError.connect(self.statusBar().showMessage)
-##            
             self.__tabWidget.newBrowser(home)
             self.__tabWidget.currentBrowser().setFocus()
             
@@ -2483,8 +2486,8 @@
 ##        self.userAgentsManager().close()
 ##        
 ##        self.speedDial().close()
-##        
-##        self.syncManager().close()
+        
+        self.syncManager().close()
         
         ZoomManager.instance().close()
         
--- a/WebBrowser/WebInspector.py	Sat Feb 27 20:51:44 2016 +0100
+++ b/WebBrowser/WebInspector.py	Sun Feb 28 12:48:12 2016 +0100
@@ -47,12 +47,6 @@
         self.page().windowCloseRequested.connect(self.close)
         self.page().loadFinished.connect(self.__loadFinished)
     
-    def __del__(self):
-        """
-        Special method doing some cleanup stuff.
-        """
-        unregisterView(self)
-
     def closeEvent(self, evt):
         """
         Protected method to save the geometry when closed.
@@ -155,6 +149,9 @@
     @param view reference to the view
     @type WebBrowserView
     """
+    if _VIEWS is None:
+        return
+    
     _VIEWS.insert(0, view)
 
 
@@ -165,6 +162,9 @@
     @param view reference to the view
     @type WebBrowserView
     """
+    if _VIEWS is None:
+        return
+    
     if view in _VIEWS:
         _VIEWS.remove(view)
 
@@ -176,6 +176,9 @@
     @param view reference to the view
     @type WebBrowserView
     """
+    if _VIEWS is None:
+        return
+    
     if view in _VIEWS:
         _VIEWS.remove(view)
     _VIEWS.insert(0, view)
--- a/eric6_browser.py	Sat Feb 27 20:51:44 2016 +0100
+++ b/eric6_browser.py	Sun Feb 28 12:48:12 2016 +0100
@@ -67,6 +67,10 @@
 sys.path.insert(2, os.path.join(os.path.dirname(__file__),
                                 "ThirdParty", "Pygments"))
 
+##import Preferences
+##if Preferences.getWebBrowser("WebInspectorEnabled"):
+##    os.environ["QTWEBENGINE_REMOTE_DEBUGGING"] = \
+##        str(Preferences.getWebBrowser("WebInspectorPort"))
 from PyQt5 import QtWebEngineWidgets    # __IGNORE_WARNING__
 
 import Globals
Binary file icons/default/w3.png has changed

eric ide

mercurial