Title: [224872] trunk/Source
Revision
224872
Author
commit-qu...@webkit.org
Date
2017-11-15 04:06:43 -0800 (Wed, 15 Nov 2017)

Log Message

[GTK] Automatically adjust font size when gtk-xft-dpi changes
https://bugs.webkit.org/show_bug.cgi?id=142673

Some follow-up fixes for the previous patch.

Patch by Gabriel Ivascu <giva...@igalia.com> on 2017-11-15
Reviewed by Carlos Garcia Campos.

Source/WebCore:

* platform/PlatformScreen.h:
* platform/gtk/PlatformScreenGtk.cpp:
(WebCore::screenDPIObserverHandlersMap):
(WebCore::gtkXftDPIChangedCallback):
(WebCore::setScreenDPIObserverHandler):
* platform/wpe/PlatformScreenWPE.cpp:
(WebCore::setScreenDPIObserverHandler):

Source/WebKit:

* UIProcess/API/glib/WebKitSettings.cpp:
(webKitSettingsDispose):
(webKitSettingsConstructed):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (224871 => 224872)


--- trunk/Source/WebCore/ChangeLog	2017-11-15 07:56:04 UTC (rev 224871)
+++ trunk/Source/WebCore/ChangeLog	2017-11-15 12:06:43 UTC (rev 224872)
@@ -1,3 +1,20 @@
+2017-11-15  Gabriel Ivascu  <giva...@igalia.com>
+
+        [GTK] Automatically adjust font size when gtk-xft-dpi changes
+        https://bugs.webkit.org/show_bug.cgi?id=142673
+
+        Some follow-up fixes for the previous patch.
+
+        Reviewed by Carlos Garcia Campos.
+
+        * platform/PlatformScreen.h:
+        * platform/gtk/PlatformScreenGtk.cpp:
+        (WebCore::screenDPIObserverHandlersMap):
+        (WebCore::gtkXftDPIChangedCallback):
+        (WebCore::setScreenDPIObserverHandler):
+        * platform/wpe/PlatformScreenWPE.cpp:
+        (WebCore::setScreenDPIObserverHandler):
+
 2017-11-14  Nan Wang  <n_w...@apple.com>
 
         AX: AOM: Implement AccessibleNode class and support label and role attributes

Modified: trunk/Source/WebCore/platform/PlatformScreen.h (224871 => 224872)


--- trunk/Source/WebCore/platform/PlatformScreen.h	2017-11-15 07:56:04 UTC (rev 224871)
+++ trunk/Source/WebCore/platform/PlatformScreen.h	2017-11-15 12:06:43 UTC (rev 224872)
@@ -64,7 +64,7 @@
 bool screenHasInvertedColors();
 #if USE(GLIB)
 double screenDPI();
-void setScreenDPIObserverHandler(Function<void()>&&);
+void setScreenDPIObserverHandler(Function<void()>&&, void*);
 #endif
 
 FloatRect screenRect(Widget*);

Modified: trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp (224871 => 224872)


--- trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp	2017-11-15 07:56:04 UTC (rev 224871)
+++ trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp	2017-11-15 12:06:43 UTC (rev 224872)
@@ -40,7 +40,8 @@
 
 #include <cmath>
 #include <gtk/gtk.h>
-#include <wtf/Optional.h>
+#include <wtf/HashMap.h>
+#include <wtf/NeverDestroyed.h>
 
 namespace WebCore {
 
@@ -113,30 +114,38 @@
     return cachedDpi;
 }
 
-static std::optional<Function<void()>> screenDPIObserverHandler;
+static WTF::HashMap<void*, Function<void()>>& screenDPIObserverHandlersMap()
+{
+    static WTF::NeverDestroyed<WTF::HashMap<void*, Function<void()>>> handlersMap;
+    return handlersMap;
+}
 
 static void gtkXftDPIChangedCallback()
 {
-    if (screenDPIObserverHandler)
-        (*screenDPIObserverHandler)();
+    for (const auto& keyValuePair : screenDPIObserverHandlersMap())
+        keyValuePair.value();
 }
 
-void setScreenDPIObserverHandler(Function<void()>&& handler)
+void setScreenDPIObserverHandler(Function<void()>&& handler, void* context)
 {
     static GtkSettings* gtkSettings = gtk_settings_get_default();
     static unsigned long gtkXftDpiChangedHandlerID = 0;
 
-    if (!handler) {
-        if (gtkSettings && gtkXftDpiChangedHandlerID) {
-            g_signal_handler_disconnect(gtkSettings, gtkXftDpiChangedHandlerID);
-            gtkXftDpiChangedHandlerID = 0;
-        }
+    if (!gtkSettings)
         return;
+
+    if (handler)
+        screenDPIObserverHandlersMap().set(context, WTFMove(handler));
+    else
+        screenDPIObserverHandlersMap().remove(context);
+
+    if (!screenDPIObserverHandlersMap().isEmpty()) {
+        if (!gtkXftDpiChangedHandlerID)
+            gtkXftDpiChangedHandlerID = g_signal_connect(gtkSettings, "notify::gtk-xft-dpi", G_CALLBACK(gtkXftDPIChangedCallback), nullptr);
+    } else if (gtkXftDpiChangedHandlerID) {
+        g_signal_handler_disconnect(gtkSettings, gtkXftDpiChangedHandlerID);
+        gtkXftDpiChangedHandlerID = 0;
     }
-
-    screenDPIObserverHandler = WTFMove(handler);
-    if (gtkSettings && !gtkXftDpiChangedHandlerID)
-        gtkXftDpiChangedHandlerID = g_signal_connect(gtkSettings, "notify::gtk-xft-dpi", G_CALLBACK(gtkXftDPIChangedCallback), nullptr);
 }
 
 static GdkScreen* getScreen(GtkWidget* widget)

Modified: trunk/Source/WebCore/platform/wpe/PlatformScreenWPE.cpp (224871 => 224872)


--- trunk/Source/WebCore/platform/wpe/PlatformScreenWPE.cpp	2017-11-15 07:56:04 UTC (rev 224871)
+++ trunk/Source/WebCore/platform/wpe/PlatformScreenWPE.cpp	2017-11-15 12:06:43 UTC (rev 224872)
@@ -60,7 +60,7 @@
     return 96;
 }
 
-void setScreenDPIObserverHandler(Function<void()>&&)
+void setScreenDPIObserverHandler(Function<void()>&&, void*)
 {
     notImplemented();
 }

Modified: trunk/Source/WebKit/ChangeLog (224871 => 224872)


--- trunk/Source/WebKit/ChangeLog	2017-11-15 07:56:04 UTC (rev 224871)
+++ trunk/Source/WebKit/ChangeLog	2017-11-15 12:06:43 UTC (rev 224872)
@@ -1,3 +1,16 @@
+2017-11-15  Gabriel Ivascu  <giva...@igalia.com>
+
+        [GTK] Automatically adjust font size when gtk-xft-dpi changes
+        https://bugs.webkit.org/show_bug.cgi?id=142673
+
+        Some follow-up fixes for the previous patch.
+
+        Reviewed by Carlos Garcia Campos.
+
+        * UIProcess/API/glib/WebKitSettings.cpp:
+        (webKitSettingsDispose):
+        (webKitSettingsConstructed):
+
 2017-11-14  Nan Wang  <n_w...@apple.com>
 
         AX: AOM: Implement AccessibleNode class and support label and role attributes

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp (224871 => 224872)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp	2017-11-15 07:56:04 UTC (rev 224871)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp	2017-11-15 12:06:43 UTC (rev 224872)
@@ -161,7 +161,7 @@
 
 static void webKitSettingsDispose(GObject* object)
 {
-    WebCore::setScreenDPIObserverHandler(nullptr);
+    WebCore::setScreenDPIObserverHandler(nullptr, object);
     G_OBJECT_CLASS(webkit_settings_parent_class)->dispose(object);
 }
 
@@ -180,17 +180,15 @@
             return;
 
         auto scalingFactor = newScreenDpi / settings->priv->screenDpi;
-        auto prevFontSize = settings->priv->preferences->defaultFontSize();
-        auto prevMonospaceFontSize = settings->priv->preferences->defaultFixedFontSize();
+        auto fontSize = settings->priv->preferences->defaultFontSize();
+        auto monospaceFontSize = settings->priv->preferences->defaultFixedFontSize();
+        settings->priv->screenDpi = newScreenDpi;
 
-        settings->priv->preferences->setDefaultFontSize(std::round(prevFontSize * scalingFactor));
-        g_object_notify(G_OBJECT(settings), "default-font-size");
-
-        settings->priv->preferences->setDefaultFixedFontSize(std::round(prevMonospaceFontSize * scalingFactor));
-        g_object_notify(G_OBJECT(settings), "default-monospace-font-size");
-
-        settings->priv->screenDpi = newScreenDpi;
-    });
+        g_object_freeze_notify(G_OBJECT(settings));
+        webkit_settings_set_default_font_size(settings, std::round(fontSize * scalingFactor));
+        webkit_settings_set_default_monospace_font_size(settings, std::round(monospaceFontSize * scalingFactor));
+        g_object_thaw_notify(G_OBJECT(settings));
+    }, object);
 }
 
 static void webKitSettingsSetProperty(GObject* object, guint propId, const GValue* value, GParamSpec* paramSpec)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to