summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firefox-baseline-disable.patch12
-rw-r--r--firefox.spec11
-rw-r--r--mozilla-1144745-1.patch150
-rw-r--r--mozilla-1144745-2.patch185
-rw-r--r--mozilla-1144745-3.patch31
5 files changed, 376 insertions, 13 deletions
diff --git a/firefox-baseline-disable.patch b/firefox-baseline-disable.patch
deleted file mode 100644
index 8052119..0000000
--- a/firefox-baseline-disable.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up firefox-32.0.1/mozilla-release/modules/libpref/src/init/all.js.old firefox-32.0.1/mozilla-release/modules/libpref/src/init/all.js
---- firefox-32.0.1/mozilla-release/modules/libpref/init/all.js.old 2014-09-12 00:25:45.000000000 +0200
-+++ firefox-32.0.1/mozilla-release/modules/libpref/init/all.js 2014-09-16 14:27:52.447743192 +0200
-@@ -844,7 +844,7 @@ pref("javascript.options.strict",
- #ifdef DEBUG
- pref("javascript.options.strict.debug", true);
- #endif
--pref("javascript.options.baselinejit", true);
-+pref("javascript.options.baselinejit", false);
- pref("javascript.options.ion", true);
- pref("javascript.options.asmjs", true);
- pref("javascript.options.native_regexp", true);
diff --git a/firefox.spec b/firefox.spec
index 3b89f22..6e4ea96 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -107,7 +107,7 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 38.0
-Release: 4%{?pre_tag}%{?dist}
+Release: 5%{?pre_tag}%{?dist}
URL: http://www.mozilla.org/projects/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
@@ -155,6 +155,9 @@ Patch412: mozilla-1073117-no-gap-tab.patch
Patch414: mozilla-1143686.patch
Patch415: mozilla-1144643.patch
Patch416: mozilla-1161056.patch
+Patch417: mozilla-1144745-1.patch
+Patch418: mozilla-1144745-2.patch
+Patch419: mozilla-1144745-3.patch
# Fix Skia Neon stuff on AArch64
Patch500: aarch64-fix-skia.patch
@@ -311,6 +314,9 @@ cd %{tarballdir}
%patch414 -p1 -b .1143686
%patch415 -p1 -b .1144643
%patch416 -p1 -b .1161056
+%patch417 -p1 -b .1144745-1
+%patch418 -p1 -b .1144745-2
+%patch419 -p1 -b .1144745-3
%endif
%patch500 -p1
@@ -808,6 +814,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Wed May 13 2015 Martin Stransky <stransky@redhat.com> - 38.0-5
+- Added patch for mozilla#1144745 - HiDPI Gtk3 fixes
+
* Mon May 11 2015 Martin Stransky <stransky@redhat.com> - 38.0-4
- Update to 38.0 Build 3
- Added fix for rhbz#1219542
diff --git a/mozilla-1144745-1.patch b/mozilla-1144745-1.patch
new file mode 100644
index 0000000..82d55e7
--- /dev/null
+++ b/mozilla-1144745-1.patch
@@ -0,0 +1,150 @@
+diff -up mozilla-release/widget/gtk/nsNativeThemeGTK.cpp.1144745-1 mozilla-release/widget/gtk/nsNativeThemeGTK.cpp
+--- mozilla-release/widget/gtk/nsNativeThemeGTK.cpp.1144745-1 2015-05-13 10:25:28.638492635 +0200
++++ mozilla-release/widget/gtk/nsNativeThemeGTK.cpp 2015-05-13 10:28:41.438095846 +0200
+@@ -32,6 +32,7 @@
+ #include "gfxPlatformGtk.h"
+ #include "gfxGdkNativeRenderer.h"
+ #include <algorithm>
++#include <dlfcn.h>
+
+ using namespace mozilla;
+ using namespace mozilla::gfx;
+@@ -88,6 +89,24 @@ nsNativeThemeGTK::RefreshWidgetWindow(ns
+ vm->InvalidateAllViews();
+ }
+
++gint
++nsNativeThemeGTK::GdkScaleFactor()
++{
++#if (MOZ_WIDGET_GTK >= 3)
++ // Since GDK 3.10
++ static auto sGdkScreenGetMonitorScaleFactorPtr = (gint (*)(GdkScreen*, gint))
++ dlsym(RTLD_DEFAULT, "gdk_screen_get_monitor_scale_factor");
++ if (sGdkScreenGetMonitorScaleFactorPtr) {
++ // FIXME: In the future, we'll want to fix this for GTK on Wayland which
++ // supports a variable scale factor per display.
++ GdkScreen *screen = gdk_screen_get_default();
++ return sGdkScreenGetMonitorScaleFactorPtr(screen, 0);
++ }
++#endif
++ return 1;
++}
++
++
+ static bool IsFrameContentNodeInNamespace(nsIFrame *aFrame, uint32_t aNamespace)
+ {
+ nsIContent *content = aFrame ? aFrame->GetContent() : nullptr;
+@@ -711,10 +730,10 @@ nsNativeThemeGTK::GetExtraSizeForWidget(
+ switch (aWidgetType) {
+ case NS_THEME_SCROLLBAR_THUMB_VERTICAL:
+ aExtra->top = aExtra->bottom = 1;
+- return true;
++ break;
+ case NS_THEME_SCROLLBAR_THUMB_HORIZONTAL:
+ aExtra->left = aExtra->right = 1;
+- return true;
++ break;
+
+ // Include the indicator spacing (the padding around the control).
+ case NS_THEME_CHECKBOX:
+@@ -732,7 +751,7 @@ nsNativeThemeGTK::GetExtraSizeForWidget(
+ aExtra->right = indicator_spacing;
+ aExtra->bottom = indicator_spacing;
+ aExtra->left = indicator_spacing;
+- return true;
++ break;
+ }
+ case NS_THEME_BUTTON :
+ {
+@@ -745,7 +764,7 @@ nsNativeThemeGTK::GetExtraSizeForWidget(
+ aExtra->right = right;
+ aExtra->bottom = bottom;
+ aExtra->left = left;
+- return true;
++ break;
+ }
+ }
+ case NS_THEME_FOCUS_OUTLINE:
+@@ -753,7 +772,7 @@ nsNativeThemeGTK::GetExtraSizeForWidget(
+ moz_gtk_get_focus_outline_size(&aExtra->left, &aExtra->top);
+ aExtra->right = aExtra->left;
+ aExtra->bottom = aExtra->top;
+- return true;
++ break;
+ }
+ case NS_THEME_TAB :
+ {
+@@ -777,6 +796,11 @@ nsNativeThemeGTK::GetExtraSizeForWidget(
+ default:
+ return false;
+ }
++ aExtra->top *= GdkScaleFactor();
++ aExtra->right *= GdkScaleFactor();
++ aExtra->bottom *= GdkScaleFactor();
++ aExtra->left *= GdkScaleFactor();
++ return true;
+ }
+
+ NS_IMETHODIMP
+@@ -803,6 +827,7 @@ nsNativeThemeGTK::DrawWidgetBackground(n
+
+ gfxRect rect = presContext->AppUnitsToGfxUnits(aRect);
+ gfxRect dirtyRect = presContext->AppUnitsToGfxUnits(aDirtyRect);
++ gint scaleFactor = GdkScaleFactor();
+
+ // Align to device pixels where sensible
+ // to provide crisper and faster drawing.
+@@ -840,8 +865,10 @@ nsNativeThemeGTK::DrawWidgetBackground(n
+
+ // gdk rectangles are wrt the drawing rect.
+
+- GdkRectangle gdk_rect = {-drawingRect.x, -drawingRect.y,
+- widgetRect.width, widgetRect.height};
++ GdkRectangle gdk_rect = {-drawingRect.x/scaleFactor,
++ -drawingRect.y/scaleFactor,
++ widgetRect.width/scaleFactor,
++ widgetRect.height/scaleFactor};
+
+ // translate everything so (0,0) is the top left of the drawingRect
+ gfxContextAutoSaveRestore autoSR(ctx);
+@@ -850,6 +877,7 @@ nsNativeThemeGTK::DrawWidgetBackground(n
+ tm = ctx->CurrentMatrix();
+ }
+ tm.Translate(rect.TopLeft() + gfxPoint(drawingRect.x, drawingRect.y));
++ tm.Scale(scaleFactor, scaleFactor); // Draw in GDK coords
+ ctx->SetMatrix(tm);
+
+ NS_ASSERTION(!IsWidgetTypeDisabled(mDisabledWidgetTypes, aWidgetType),
+@@ -1038,6 +1066,11 @@ nsNativeThemeGTK::GetWidgetPadding(nsDev
+ aResult->left += horizontal_padding;
+ aResult->right += horizontal_padding;
+
++ aResult->top *= GdkScaleFactor();
++ aResult->right *= GdkScaleFactor();
++ aResult->bottom *= GdkScaleFactor();
++ aResult->left *= GdkScaleFactor();
++
+ return true;
+ }
+ }
+@@ -1298,6 +1331,9 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
+ }
+ break;
+ }
++
++ *aResult = *aResult * GdkScaleFactor();
++
+ return NS_OK;
+ }
+
+diff -up mozilla-release/widget/gtk/nsNativeThemeGTK.h.1144745-1 mozilla-release/widget/gtk/nsNativeThemeGTK.h
+--- mozilla-release/widget/gtk/nsNativeThemeGTK.h.1144745-1 2015-05-08 18:55:27.000000000 +0200
++++ mozilla-release/widget/gtk/nsNativeThemeGTK.h 2015-05-13 10:25:28.642492647 +0200
+@@ -81,6 +81,7 @@ private:
+ nsIntMargin* aExtra);
+
+ void RefreshWidgetWindow(nsIFrame* aFrame);
++ gint GdkScaleFactor();
+
+ uint8_t mDisabledWidgetTypes[32];
+ uint8_t mSafeWidgetStates[1024]; // 256 widgets * 32 bits per widget
diff --git a/mozilla-1144745-2.patch b/mozilla-1144745-2.patch
new file mode 100644
index 0000000..e3b9cdf
--- /dev/null
+++ b/mozilla-1144745-2.patch
@@ -0,0 +1,185 @@
+diff -up mozilla-release/widget/gtk/nsLookAndFeel.cpp.1144745-2 mozilla-release/widget/gtk/nsLookAndFeel.cpp
+--- mozilla-release/widget/gtk/nsLookAndFeel.cpp.1144745-2 2015-05-13 10:30:08.204367309 +0200
++++ mozilla-release/widget/gtk/nsLookAndFeel.cpp 2015-05-13 10:30:08.208367321 +0200
+@@ -18,6 +18,7 @@
+
+ #include <fontconfig/fontconfig.h>
+ #include "gfxPlatformGtk.h"
++#include "nsScreenGtk.h"
+
+ #include "gtkdrawing.h"
+ #include "nsStyleConsts.h"
+@@ -742,12 +743,7 @@ GetSystemFontInfo(GtkWidget *aWidget,
+ // Scale fonts up on HiDPI displays.
+ // This would be done automatically with cairo, but we manually manage
+ // the display scale for platform consistency.
+- static auto sGdkScreenGetMonitorScaleFactorPtr = (gint (*)(GdkScreen*,gint))
+- dlsym(RTLD_DEFAULT, "gdk_screen_get_monitor_scale_factor");
+- if (sGdkScreenGetMonitorScaleFactorPtr) {
+- GdkScreen *screen = gdk_screen_get_default();
+- size *= (*sGdkScreenGetMonitorScaleFactorPtr)(screen, 0);
+- }
++ size *= nsScreenGtk::GetGtkMonitorScaleFactor();
+
+ // |size| is now pixels
+
+diff -up mozilla-release/widget/gtk/nsNativeThemeGTK.cpp.1144745-2 mozilla-release/widget/gtk/nsNativeThemeGTK.cpp
+--- mozilla-release/widget/gtk/nsNativeThemeGTK.cpp.1144745-2 2015-05-13 10:30:08.206367315 +0200
++++ mozilla-release/widget/gtk/nsNativeThemeGTK.cpp 2015-05-13 10:30:46.966488584 +0200
+@@ -6,6 +6,7 @@
+ #include "nsNativeThemeGTK.h"
+ #include "nsThemeConstants.h"
+ #include "gtkdrawing.h"
++#include "nsScreenGtk.h"
+
+ #include "nsIObserverService.h"
+ #include "nsIServiceManager.h"
+@@ -89,23 +90,6 @@ nsNativeThemeGTK::RefreshWidgetWindow(ns
+ vm->InvalidateAllViews();
+ }
+
+-gint
+-nsNativeThemeGTK::GdkScaleFactor()
+-{
+-#if (MOZ_WIDGET_GTK >= 3)
+- // Since GDK 3.10
+- static auto sGdkScreenGetMonitorScaleFactorPtr = (gint (*)(GdkScreen*, gint))
+- dlsym(RTLD_DEFAULT, "gdk_screen_get_monitor_scale_factor");
+- if (sGdkScreenGetMonitorScaleFactorPtr) {
+- // FIXME: In the future, we'll want to fix this for GTK on Wayland which
+- // supports a variable scale factor per display.
+- GdkScreen *screen = gdk_screen_get_default();
+- return sGdkScreenGetMonitorScaleFactorPtr(screen, 0);
+- }
+-#endif
+- return 1;
+-}
+-
+
+ static bool IsFrameContentNodeInNamespace(nsIFrame *aFrame, uint32_t aNamespace)
+ {
+@@ -796,10 +780,11 @@ nsNativeThemeGTK::GetExtraSizeForWidget(
+ default:
+ return false;
+ }
+- aExtra->top *= GdkScaleFactor();
+- aExtra->right *= GdkScaleFactor();
+- aExtra->bottom *= GdkScaleFactor();
+- aExtra->left *= GdkScaleFactor();
++ gint scale = nsScreenGtk::GetGtkMonitorScaleFactor();
++ aExtra->top *= scale;
++ aExtra->right *= scale;
++ aExtra->bottom *= scale;
++ aExtra->left *= scale;
+ return true;
+ }
+
+@@ -827,7 +812,7 @@ nsNativeThemeGTK::DrawWidgetBackground(n
+
+ gfxRect rect = presContext->AppUnitsToGfxUnits(aRect);
+ gfxRect dirtyRect = presContext->AppUnitsToGfxUnits(aDirtyRect);
+- gint scaleFactor = GdkScaleFactor();
++ gint scaleFactor = nsScreenGtk::GetGtkMonitorScaleFactor();
+
+ // Align to device pixels where sensible
+ // to provide crisper and faster drawing.
+@@ -1066,10 +1051,11 @@ nsNativeThemeGTK::GetWidgetPadding(nsDev
+ aResult->left += horizontal_padding;
+ aResult->right += horizontal_padding;
+
+- aResult->top *= GdkScaleFactor();
+- aResult->right *= GdkScaleFactor();
+- aResult->bottom *= GdkScaleFactor();
+- aResult->left *= GdkScaleFactor();
++ gint scale = nsScreenGtk::GetGtkMonitorScaleFactor();
++ aResult->top *= scale;
++ aResult->right *= scale;
++ aResult->bottom *= scale;
++ aResult->left *= scale;
+
+ return true;
+ }
+@@ -1332,7 +1318,7 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
+ break;
+ }
+
+- *aResult = *aResult * GdkScaleFactor();
++ *aResult = *aResult * nsScreenGtk::GetGtkMonitorScaleFactor();
+
+ return NS_OK;
+ }
+diff -up mozilla-release/widget/gtk/nsNativeThemeGTK.h.1144745-2 mozilla-release/widget/gtk/nsNativeThemeGTK.h
+--- mozilla-release/widget/gtk/nsNativeThemeGTK.h.1144745-2 2015-05-13 10:30:08.206367315 +0200
++++ mozilla-release/widget/gtk/nsNativeThemeGTK.h 2015-05-13 10:30:08.209367325 +0200
+@@ -81,7 +81,6 @@ private:
+ nsIntMargin* aExtra);
+
+ void RefreshWidgetWindow(nsIFrame* aFrame);
+- gint GdkScaleFactor();
+
+ uint8_t mDisabledWidgetTypes[32];
+ uint8_t mSafeWidgetStates[1024]; // 256 widgets * 32 bits per widget
+diff -up mozilla-release/widget/gtk/nsScreenGtk.cpp.1144745-2 mozilla-release/widget/gtk/nsScreenGtk.cpp
+--- mozilla-release/widget/gtk/nsScreenGtk.cpp.1144745-2 2015-05-08 18:55:27.000000000 +0200
++++ mozilla-release/widget/gtk/nsScreenGtk.cpp 2015-05-13 10:30:08.209367325 +0200
+@@ -63,6 +63,23 @@ nsScreenGtk :: GetAvailRect(int32_t *out
+
+ } // GetAvailRect
+
++gint
++nsScreenGtk :: GetGtkMonitorScaleFactor()
++{
++#if (MOZ_WIDGET_GTK >= 3)
++ // Since GDK 3.10
++ static auto sGdkScreenGetMonitorScaleFactorPtr = (gint (*)(GdkScreen*, gint))
++ dlsym(RTLD_DEFAULT, "gdk_screen_get_monitor_scale_factor");
++ if (sGdkScreenGetMonitorScaleFactorPtr) {
++ // FIXME: In the future, we'll want to fix this for GTK on Wayland which
++ // supports a variable scale factor per display.
++ GdkScreen *screen = gdk_screen_get_default();
++ return sGdkScreenGetMonitorScaleFactorPtr(screen, 0);
++ }
++#endif
++ return 1;
++}
++
+ double
+ nsScreenGtk :: GetDPIScale()
+ {
+@@ -127,20 +144,9 @@ nsScreenGtk :: GetColorDepth(int32_t *aC
+ void
+ nsScreenGtk :: Init (GdkWindow *aRootWindow)
+ {
+- gint width = gdk_screen_width();
+- gint height = gdk_screen_height();
+-
+- // Since GDK 3.10
+- static auto sGdkScreenGetMonitorScaleFactorPtr = (gint (*)(GdkScreen*, gint))
+- dlsym(RTLD_DEFAULT, "gdk_screen_get_monitor_scale_factor");
+- if (sGdkScreenGetMonitorScaleFactorPtr) {
+- // FIXME: In the future, we'll want to fix this for GTK on Wayland which
+- // supports a variable scale factor per display.
+- GdkScreen *screen = gdk_window_get_screen(aRootWindow);
+- gint scale = sGdkScreenGetMonitorScaleFactorPtr(screen, 0);
+- width *= scale;
+- height *= scale;
+- }
++ gint scale = nsScreenGtk::GetGtkMonitorScaleFactor();
++ gint width = gdk_screen_width()*scale;
++ gint height = gdk_screen_height()*scale;
+
+ // We listen for configure events on the root window to pick up
+ // changes to this rect. We could listen for "size_changed" signals
+diff -up mozilla-release/widget/gtk/nsScreenGtk.h.1144745-2 mozilla-release/widget/gtk/nsScreenGtk.h
+--- mozilla-release/widget/gtk/nsScreenGtk.h.1144745-2 2015-05-08 18:55:27.000000000 +0200
++++ mozilla-release/widget/gtk/nsScreenGtk.h 2015-05-13 10:30:08.209367325 +0200
+@@ -43,7 +43,8 @@ public:
+ void Init(XineramaScreenInfo *aScreenInfo);
+ #endif /* MOZ_X11 */
+
+- static double GetDPIScale();
++ static gint GetGtkMonitorScaleFactor();
++ static double GetDPIScale();
+
+ private:
+ uint32_t mScreenNum;
diff --git a/mozilla-1144745-3.patch b/mozilla-1144745-3.patch
new file mode 100644
index 0000000..3f4d9c7
--- /dev/null
+++ b/mozilla-1144745-3.patch
@@ -0,0 +1,31 @@
+# HG changeset patch
+# User Martin Stransky <stransky@redhat.com>
+# Parent e0299ad29b855f798ee5db8257cbb459894c1b29
+Bug 1144745 - scale border returned by GetWidgetBorder(), r=?karlt
+
+diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp
+--- a/widget/gtk/nsNativeThemeGTK.cpp
++++ b/widget/gtk/nsNativeThemeGTK.cpp
+@@ -990,16 +990,22 @@ nsNativeThemeGTK::GetWidgetBorder(nsDevi
+ if (GetGtkWidgetAndState(aWidgetType, aFrame, gtkWidgetType, nullptr,
+ nullptr)) {
+ moz_gtk_get_widget_border(gtkWidgetType, &aResult->left, &aResult->top,
+ &aResult->right, &aResult->bottom, direction,
+ IsFrameContentNodeInNamespace(aFrame, kNameSpaceID_XHTML));
+ }
+ }
+ }
++
++ gint scale = nsScreenGtk::GetGtkMonitorScaleFactor();
++ aResult->top *= scale;
++ aResult->right *= scale;
++ aResult->bottom *= scale;
++ aResult->left *= scale;
+ return NS_OK;
+ }
+
+ bool
+ nsNativeThemeGTK::GetWidgetPadding(nsDeviceContext* aContext,
+ nsIFrame* aFrame, uint8_t aWidgetType,
+ nsIntMargin* aResult)
+ {
bgstack15