Modified: trunk/Source/WebKit2/ChangeLog (109229 => 109230)
--- trunk/Source/WebKit2/ChangeLog 2012-02-29 18:45:14 UTC (rev 109229)
+++ trunk/Source/WebKit2/ChangeLog 2012-02-29 18:51:15 UTC (rev 109230)
@@ -1,5 +1,29 @@
2012-02-29 Carlos Garcia Campos <[email protected]>
+ [GTK] Use text or page zoom factor in WebKitWebView depending on zoom-text-only
+ https://bugs.webkit.org/show_bug.cgi?id=75252
+
+ Reviewed by Gustavo Noronha Silva.
+
+ * UIProcess/API/gtk/WebKitWebView.cpp:
+ (zoomTextOnlyChanged): Update text/page zoom factor when
+ zoom-text-only setting changes.
+ (webkitWebViewSetSettings): Helper function to set the settings
+ object for the web view, initializing the settings for the page
+ and connecting to notify::zoom-text-only signal.
+ (webkitWebViewConstructed): Use webkitWebViewSetSettings().
+ (webkit_web_view_set_settings): Use webkitWebViewSetSettings() and
+ disconnect from the notify::zoom-text-only signal of the previous
+ settings object.
+ (webkit_web_view_set_zoom_level): Set text/page zoom factor
+ depending on WebKitSettings:zoom-text-only property.
+ (webkit_web_view_get_zoom_level): Get text/page zoom factor
+ depending on WebKitSettings:zoom-text-only property.
+ * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
+ (testWebViewZoomLevel):
+
+2012-02-29 Carlos Garcia Campos <[email protected]>
+
[GTK] Add zoom-text-only setting to WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=75249
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (109229 => 109230)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp 2012-02-29 18:45:14 UTC (rev 109229)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp 2012-02-29 18:51:15 UTC (rev 109230)
@@ -172,6 +172,22 @@
return TRUE;
}
+static void zoomTextOnlyChanged(WebKitSettings* settings, GParamSpec*, WebKitWebView* webView)
+{
+ WKPageRef wkPage = toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)));
+ gboolean zoomTextOnly = webkit_settings_get_zoom_text_only(settings);
+ gdouble pageZoomLevel = zoomTextOnly ? 1 : WKPageGetTextZoomFactor(wkPage);
+ gdouble textZoomLevel = zoomTextOnly ? WKPageGetPageZoomFactor(wkPage) : 1;
+ WKPageSetPageAndTextZoomFactors(wkPage, pageZoomLevel, textZoomLevel);
+}
+
+static void webkitWebViewSetSettings(WebKitWebView* webView, WebKitSettings* settings, WKPageRef wkPage)
+{
+ webView->priv->settings = settings;
+ webkitSettingsAttachSettingsToPage(webView->priv->settings.get(), wkPage);
+ g_signal_connect(settings, "notify::zoom-text-only", G_CALLBACK(zoomTextOnlyChanged), webView);
+}
+
static void webkitWebViewConstructed(GObject* object)
{
if (G_OBJECT_CLASS(webkit_web_view_parent_class)->constructed)
@@ -189,8 +205,9 @@
WebPageProxy* page = webkitWebViewBaseGetPage(webViewBase);
priv->backForwardList = adoptGRef(webkitBackForwardListCreate(WKPageGetBackForwardList(toAPI(page))));
- priv->settings = adoptGRef(webkit_settings_new());
- webkitSettingsAttachSettingsToPage(priv->settings.get(), toAPI(page));
+
+ GRefPtr<WebKitSettings> settings = adoptGRef(webkit_settings_new());
+ webkitWebViewSetSettings(webView, settings.get(), toAPI(page));
}
static void webkitWebViewSetProperty(GObject* object, guint propId, const GValue* value, GParamSpec* paramSpec)
@@ -1304,8 +1321,8 @@
if (webView->priv->settings == settings)
return;
- webView->priv->settings = settings;
- webkitSettingsAttachSettingsToPage(settings, toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView))));
+ g_signal_handlers_disconnect_by_func(webView->priv->settings.get(), reinterpret_cast<gpointer>(zoomTextOnlyChanged), webView);
+ webkitWebViewSetSettings(webView, settings, toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView))));
}
/**
@@ -1367,7 +1384,10 @@
if (WKPageGetPageZoomFactor(wkPage) == zoomLevel)
return;
- WKPageSetPageZoomFactor(wkPage, zoomLevel);
+ if (webkit_settings_get_zoom_text_only(webView->priv->settings.get()))
+ WKPageSetTextZoomFactor(wkPage, zoomLevel);
+ else
+ WKPageSetPageZoomFactor(wkPage, zoomLevel);
g_object_notify(G_OBJECT(webView), "zoom-level");
}
@@ -1385,7 +1405,8 @@
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 1);
WKPageRef wkPage = toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)));
- return WKPageGetPageZoomFactor(wkPage);
+ gboolean zoomTextOnly = webkit_settings_get_zoom_text_only(webView->priv->settings.get());
+ return zoomTextOnly ? WKPageGetTextZoomFactor(wkPage) : WKPageGetPageZoomFactor(wkPage);
}
static void didValidateCommand(WKStringRef command, bool isEnabled, int32_t state, WKErrorRef, void* context)
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp (109229 => 109230)
--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp 2012-02-29 18:45:14 UTC (rev 109229)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp 2012-02-29 18:51:15 UTC (rev 109230)
@@ -445,6 +445,10 @@
g_assert_cmpfloat(webkit_web_view_get_zoom_level(test->m_webView), ==, 1);
webkit_web_view_set_zoom_level(test->m_webView, 2.5);
g_assert_cmpfloat(webkit_web_view_get_zoom_level(test->m_webView), ==, 2.5);
+
+ webkit_settings_set_zoom_text_only(webkit_web_view_get_settings(test->m_webView), TRUE);
+ // The zoom level shouldn't change when zoom-text-only setting changes.
+ g_assert_cmpfloat(webkit_web_view_get_zoom_level(test->m_webView), ==, 2.5);
}
void beforeAll()