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)