Bug #799 ยป qt-fix-zoom.patch
| src/core/web_contents_delegate_qt.cpp | ||
|---|---|---|
| 
                 const base::Process &process = renderProcessHost->GetProcess(); 
   | 
||
| 
                 if (process.IsValid()) { 
   | 
||
| 
                     m_viewClient->renderProcessPidChanged(process.Pid()); 
   | 
||
| 
                     m_viewClient->zoomUpdateIsNeeded(); 
   | 
||
| 
                 } 
   | 
||
| 
             } 
   | 
||
| 
         } 
   | 
||
| ... | ... | |
| 
         if (newHost && newHost->GetWidget() && newHost->GetWidget()->GetView()) { 
   | 
||
| 
             auto rwhv = static_cast<RenderWidgetHostViewQt *>(newHost->GetWidget()->GetView()); 
   | 
||
| 
             m_viewClient->widgetChanged(rwhv->delegate()); 
   | 
||
| 
             m_viewClient->zoomUpdateIsNeeded(); 
   | 
||
| 
         } 
   | 
||
| 
     } 
   | 
||
| 
     -- a/src/webenginewidgets/api/qwebenginepage.cpp 
   | 
||
| 
     ++ b/src/webenginewidgets/api/qwebenginepage.cpp 
   | 
||
| ... | ... | |
| 
     #endif 
   | 
||
| 
         if (defaultAudioMuted != adapter->isAudioMuted()) 
   | 
||
| 
             adapter->setAudioMuted(defaultAudioMuted); 
   | 
||
| 
         if (!qFuzzyCompare(adapter->currentZoomFactor(), defaultZoomFactor)) 
   | 
||
| 
             adapter->setZoomFactor(defaultZoomFactor); 
   | 
||
| 
         if (view) 
   | 
||
| 
             adapter->setVisible(view->isVisible()); 
   | 
||
| ... | ... | |
| 
         }); 
   | 
||
| 
     } 
   | 
||
| 
     void QWebEnginePagePrivate::zoomUpdateIsNeeded() 
   | 
||
| 
     { 
   | 
||
| 
         Q_Q(QWebEnginePage); 
   | 
||
| 
         q->setZoomFactor(defaultZoomFactor); 
   | 
||
| 
     } 
   | 
||
| 
     void QWebEnginePagePrivate::recentlyAudibleChanged(bool recentlyAudible) 
   | 
||
| 
     { 
   | 
||
| 
         Q_Q(QWebEnginePage); 
   | 
||
| 
     -- a/src/webengine/api/qquickwebengineview.cpp 
   | 
||
| 
     ++ b/src/webengine/api/qquickwebengineview.cpp 
   | 
||
| ... | ... | |
| 
         updateEditActions(); 
   | 
||
| 
     } 
   | 
||
| 
     void QQuickWebEngineViewPrivate::zoomUpdateIsNeeded() 
   | 
||
| 
     { 
   | 
||
| 
         Q_Q(QQuickWebEngineView); 
   | 
||
| 
         q->setZoomFactor(m_zoomFactor); 
   | 
||
| 
     } 
   | 
||
| 
     void QQuickWebEngineViewPrivate::recentlyAudibleChanged(bool recentlyAudible) 
   | 
||
| 
     { 
   | 
||
| 
         Q_Q(QQuickWebEngineView); 
   | 
||
| 
     -- a/src/webenginewidgets/api/qwebenginepage_p.h 
   | 
||
| 
     ++ b/src/webenginewidgets/api/qwebenginepage_p.h 
   | 
||
| ... | ... | |
| 
         void loadProgressChanged(int progress) override; 
   | 
||
| 
         void didUpdateTargetURL(const QUrl&) override; 
   | 
||
| 
         void selectionChanged() override; 
   | 
||
| 
         void zoomUpdateIsNeeded() override; 
   | 
||
| 
         void recentlyAudibleChanged(bool recentlyAudible) override; 
   | 
||
| 
         void renderProcessPidChanged(qint64 pid) override; 
   | 
||
| 
         QRectF viewportRect() const override; 
   | 
||
| 
     -- a/src/webengine/api/qquickwebengineview_p_p.h 
   | 
||
| 
     ++ b/src/webengine/api/qquickwebengineview_p_p.h 
   | 
||
| ... | ... | |
| 
         void loadProgressChanged(int progress) override; 
   | 
||
| 
         void didUpdateTargetURL(const QUrl&) override; 
   | 
||
| 
         void selectionChanged() override; 
   | 
||
| 
         void zoomUpdateIsNeeded() override; 
   | 
||
| 
         void recentlyAudibleChanged(bool recentlyAudible) override; 
   | 
||
| 
         void renderProcessPidChanged(qint64 pid) override; 
   | 
||
| 
         QRectF viewportRect() const override; 
   | 
||
| 
     -- a/src/core/web_contents_adapter_client.h 
   | 
||
| 
     ++ b/src/core/web_contents_adapter_client.h 
   | 
||
| ... | ... | |
| 
         virtual void loadProgressChanged(int progress) = 0; 
   | 
||
| 
         virtual void didUpdateTargetURL(const QUrl&) = 0; 
   | 
||
| 
         virtual void selectionChanged() = 0; 
   | 
||
| 
         virtual void zoomUpdateIsNeeded() = 0; 
   | 
||
| 
         virtual void recentlyAudibleChanged(bool recentlyAudible) = 0; 
   | 
||
| 
         virtual void renderProcessPidChanged(qint64 pid) = 0; 
   | 
||
| 
         virtual QRectF viewportRect() const = 0; 
   | 
||
| 
     -- a/src/core/web_contents_adapter.cpp 
   | 
||
| 
     ++ b/src/core/web_contents_adapter.cpp 
   | 
||
| ... | ... | |
| 
         content::HostZoomMap *zoomMap = content::HostZoomMap::GetForWebContents(m_webContents.get()); 
   | 
||
| 
         if (zoomMap) { 
   | 
||
| 
             int render_process_id = m_webContents->GetMainFrame()->GetProcess()->GetID(); 
   | 
||
| 
             int render_view_id = m_webContents->GetRenderViewHost()->GetRoutingID(); 
   | 
||
| 
             zoomMap->SetTemporaryZoomLevel(render_process_id, render_view_id, zoomLevel); 
   | 
||
| 
             // Set the default zoom level.  Chromium uses a host map to remember zoom levels for individual hosts. 
   | 
||
| 
             // Qt WebEngine does not make use of this host map, but all the code that utilizes it still remains 
   | 
||
| 
             // underneath.  The desired behavior in Qt WebEngine is that, once a zoom level has been set on a page, 
   | 
||
| 
             // it will remain until it is set again.  To accomplish this, The default zoom level is set below. 
   | 
||
| 
             // This triggers logic which sets the zoom for the current page.  When the URL of the page changes, 
   | 
||
| 
             // Chromium checks the zoom map (which is empty), and then resets the zoom level to the default set 
   | 
||
| 
             // below, causing the zoom to remain constant.  See <https://bugreports.qt.io/browse/QTBUG-101030>. 
   | 
||
| 
             zoomMap->SetDefaultZoomLevel(zoomLevel); 
   | 
||
| 
         } 
   | 
||
| 
     } 
   | 
||