summaryrefslogtreecommitdiff
path: root/waterfox
diff options
context:
space:
mode:
Diffstat (limited to 'waterfox')
-rw-r--r--waterfox/patch-bug1321069102
-rw-r--r--waterfox/patch-bug1381815278
-rw-r--r--waterfox/rhbz-1497932.patch21
-rw-r--r--waterfox/waterfox.spec35
4 files changed, 398 insertions, 38 deletions
diff --git a/waterfox/patch-bug1321069 b/waterfox/patch-bug1321069
new file mode 100644
index 0000000..6663400
--- /dev/null
+++ b/waterfox/patch-bug1321069
@@ -0,0 +1,102 @@
+commit a09c25bcc3b4
+Author: Kartikaya Gupta <kgupta@mozilla.com>
+Date: Wed May 30 09:49:23 2018 -0400
+
+ Bug 1321069 - Redirect the end event of a long-tap sequence back to the content window. r=karlt, a=RyanVM
+
+ In the case of a long-tap touch sequence, a new popup window (the
+ contextmenu) is spawned while the sequence is ongoing. The touch-end of
+ the sequence ends up getting delivered to the popup window, instead of
+ the original content window, and that causes the touch-handling
+ machinery state in the content window to get out of sync with reality.
+ This patch detects this scenario and redirects the touch events on the
+ popup window back to the original content window.
+
+ MozReview-Commit-ID: L2vvKLlogRA
+
+ --HG--
+ extra : source : 27a160b7025ffaadd7cc1ce326ce8729c2b180a0
+---
+ widget/gtk/nsWindow.cpp | 36 +++++++++++++++++++++++++++++++++++-
+ widget/gtk/nsWindow.h | 3 +++
+ 2 files changed, 38 insertions(+), 1 deletion(-)
+
+diff --git widget/gtk/nsWindow.cpp widget/gtk/nsWindow.cpp
+index 54ec8615051f1..18d0ccac4dbd6 100644
+--- widget/gtk/nsWindow.cpp
++++ widget/gtk/nsWindow.cpp
+@@ -3455,11 +3455,41 @@ nsWindow::OnDragDataReceivedEvent(GtkWidget *aWidget,
+ aSelectionData, aInfo, aTime);
+ }
+
++nsWindow*
++nsWindow::GetTransientForWindowIfPopup()
++{
++ if (mWindowType != eWindowType_popup) {
++ return nullptr;
++ }
++ GtkWindow* toplevel = gtk_window_get_transient_for(GTK_WINDOW(mShell));
++ if (toplevel) {
++ return get_window_for_gtk_widget(GTK_WIDGET(toplevel));
++ }
++ return nullptr;
++}
++
++bool
++nsWindow::IsHandlingTouchSequence(GdkEventSequence* aSequence)
++{
++ return mHandleTouchEvent && mTouches.Contains(aSequence);
++}
++
+ #if GTK_CHECK_VERSION(3,4,0)
+ gboolean
+ nsWindow::OnTouchEvent(GdkEventTouch* aEvent)
+ {
+ if (!mHandleTouchEvent) {
++ // If a popup window was spawned (e.g. as the result of a long-press)
++ // and touch events got diverted to that window within a touch sequence,
++ // ensure the touch event gets sent to the original window instead. We
++ // keep the checks here very conservative so that we only redirect
++ // events in this specific scenario.
++ nsWindow* targetWindow = GetTransientForWindowIfPopup();
++ if (targetWindow &&
++ targetWindow->IsHandlingTouchSequence(aEvent->sequence)) {
++ return targetWindow->OnTouchEvent(aEvent);
++ }
++
+ return FALSE;
+ }
+
+@@ -4780,12 +4810,16 @@ nsWindow::GrabPointer(guint32 aTime)
+ return;
+
+ gint retval;
++ // Note that we need GDK_TOUCH_MASK below to work around a GDK/X11 bug that
++ // causes touch events that would normally be received by this client on
++ // other windows to be discarded during the grab.
+ retval = gdk_pointer_grab(mGdkWindow, TRUE,
+ (GdkEventMask)(GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_ENTER_NOTIFY_MASK |
+ GDK_LEAVE_NOTIFY_MASK |
+- GDK_POINTER_MOTION_MASK),
++ GDK_POINTER_MOTION_MASK |
++ GDK_TOUCH_MASK),
+ (GdkWindow *)nullptr, nullptr, aTime);
+
+ if (retval == GDK_GRAB_NOT_VIEWABLE) {
+diff --git widget/gtk/nsWindow.h widget/gtk/nsWindow.h
+index c28c1749c76dc..33e8c4db7c1c0 100644
+--- widget/gtk/nsWindow.h
++++ widget/gtk/nsWindow.h
+@@ -434,7 +434,10 @@ private:
+ nsIWidgetListener* GetListener();
+ bool IsComposited() const;
+
+ void UpdateClientOffsetForCSDWindow();
++
++ nsWindow* GetTransientForWindowIfPopup();
++ bool IsHandlingTouchSequence(GdkEventSequence* aSequence);
+
+ GtkWidget *mShell;
+ MozContainer *mContainer;
diff --git a/waterfox/patch-bug1381815 b/waterfox/patch-bug1381815
new file mode 100644
index 0000000..c18d856
--- /dev/null
+++ b/waterfox/patch-bug1381815
@@ -0,0 +1,278 @@
+commit 165fab2f8596
+Author: Jan Horak <jhorak@redhat.com>
+Date: Tue Oct 10 13:35:56 2017 +0200
+
+ Bug 1381815 - fixing dimensions of radio and checkbox for GTK 3.20+; r=karlt
+
+ In the GTK < 3.20 the size of radio and checkbox toggle is determined by indicator
+ spacing and indicator size. By GTK 3.20+ it is replaced by standard box model
+ (padding, margin, border). The patch fixes that while keeping the functionality
+ for older GTK. The values are also cached by similar way as scrollbar metrics
+ are cached now.
+
+ The focus is no longer rendered by GTK but by Mozilla code, so the extra
+ size for toggles has been removed from GetExtraSizeForWidget and toggles
+ no longer render focus indicator.
+
+ MozReview-Commit-ID: 1Wg5AgHy1Vz
+
+ --HG--
+ extra : rebase_source : 81437f45b7d32555942d21fccc9de4a561d85111
+---
+ widget/gtk/gtk3drawing.cpp | 121 ++++++++++++++++++++++++++++++----------
+ widget/gtk/gtkdrawing.h | 14 +++++
+ widget/gtk/nsNativeThemeGTK.cpp | 32 +----------
+ 3 files changed, 107 insertions(+), 60 deletions(-)
+
+diff --git widget/gtk/gtk3drawing.cpp widget/gtk/gtk3drawing.cpp
+index 4c562b380095..7968aef920f6 100644
+--- widget/gtk/gtk3drawing.cpp
++++ widget/gtk/gtk3drawing.cpp
+@@ -24,6 +24,8 @@ static gboolean notebook_has_tab_gap;
+
+ static ScrollbarGTKMetrics sScrollbarMetrics[2];
+ static ToolbarGTKMetrics sToolbarMetrics;
++static ToggleGTKMetrics sCheckboxMetrics;
++static ToggleGTKMetrics sRadioMetrics;
+
+ #define ARROW_UP 0
+ #define ARROW_DOWN G_PI
+@@ -190,6 +192,8 @@ moz_gtk_refresh()
+ sScrollbarMetrics[GTK_ORIENTATION_HORIZONTAL].initialized = false;
+ sScrollbarMetrics[GTK_ORIENTATION_VERTICAL].initialized = false;
+ sToolbarMetrics.initialized = false;
++ sCheckboxMetrics.initialized = false;
++ sRadioMetrics.initialized = false;
+
+ /* This will destroy all of our widgets */
+ ResetWidgetCache();
+@@ -611,33 +615,21 @@ moz_gtk_toggle_paint(cairo_t *cr, GdkRec
+ gboolean isradio, GtkTextDirection direction)
+ {
+ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
+- gint indicator_size, indicator_spacing;
+ gint x, y, width, height;
+- gint focus_x, focus_y, focus_width, focus_height;
+ GtkStyleContext *style;
+
+- GtkWidget *widget = GetWidget(isradio ? MOZ_GTK_RADIOBUTTON_CONTAINER :
+- MOZ_GTK_CHECKBUTTON_CONTAINER);
+- gtk_widget_style_get(widget,
+- "indicator_size", &indicator_size,
+- "indicator_spacing", &indicator_spacing,
+- nullptr);
++ const ToggleGTKMetrics* metrics = GetToggleMetrics(isradio);
+
+ // XXX we should assert rect->height >= indicator_size too
+ // after bug 369581 is fixed.
+- MOZ_ASSERT(rect->width >= indicator_size,
++ MOZ_ASSERT(rect->width >= metrics->minSizeWithBorder.width,
+ "GetMinimumWidgetSize was ignored");
+
+ // Paint it center aligned in the rect.
+- x = rect->x + (rect->width - indicator_size) / 2;
+- y = rect->y + (rect->height - indicator_size) / 2;
+- width = indicator_size;
+- height = indicator_size;
+-
+- focus_x = x - indicator_spacing;
+- focus_y = y - indicator_spacing;
+- focus_width = width + 2 * indicator_spacing;
+- focus_height = height + 2 * indicator_spacing;
++ width = metrics->minSizeWithBorder.width;
++ height = metrics->minSizeWithBorder.height;
++ x = rect->x + (rect->width - width) / 2;
++ y = rect->y + (rect->height - height) / 2;
+
+ if (selected)
+ state_flags = static_cast<GtkStateFlags>(state_flags|checkbox_check_state);
+@@ -651,20 +643,25 @@ moz_gtk_toggle_paint(cairo_t *cr, GdkRec
+ if (gtk_check_version(3, 20, 0) == nullptr) {
+ gtk_render_background(style, cr, x, y, width, height);
+ gtk_render_frame(style, cr, x, y, width, height);
+- }
+-
+- if (isradio) {
+- gtk_render_option(style, cr, x, y, width, height);
+- if (state->focused) {
+- gtk_render_focus(style, cr, focus_x, focus_y,
+- focus_width, focus_height);
++ // Indicator is inset by the toggle's padding and border.
++ gint indicator_x = x + metrics->borderAndPadding.left;
++ gint indicator_y = y + metrics->borderAndPadding.top;
++ gint indicator_width = metrics->minSizeWithBorder.width -
++ metrics->borderAndPadding.left - metrics->borderAndPadding.right;
++ gint indicator_height = metrics->minSizeWithBorder.height -
++ metrics->borderAndPadding.top - metrics->borderAndPadding.bottom;
++ if (isradio) {
++ gtk_render_option(style, cr, indicator_x, indicator_y,
++ indicator_width, indicator_height);
++ } else {
++ gtk_render_check(style, cr, indicator_x, indicator_y,
++ indicator_width, indicator_height);
+ }
+- }
+- else {
+- gtk_render_check(style, cr, x, y, width, height);
+- if (state->focused) {
+- gtk_render_focus(style, cr,
+- focus_x, focus_y, focus_width, focus_height);
++ } else {
++ if (isradio) {
++ gtk_render_option(style, cr, x, y, width, height);
++ } else {
++ gtk_render_check(style, cr, x, y, width, height);
+ }
+ }
+
+@@ -2789,6 +2786,68 @@ SizeFromLengthAndBreadth(GtkOrientation
+ MozGtkSize({aLength, aBreadth}) : MozGtkSize({aBreadth, aLength});
+ }
+
++const ToggleGTKMetrics*
++GetToggleMetrics(bool isRadio)
++{
++ ToggleGTKMetrics* metrics;
++ if (isRadio) {
++ metrics = &sRadioMetrics;
++ } else {
++ metrics = &sCheckboxMetrics;
++ }
++ if (metrics->initialized)
++ return metrics;
++
++ metrics->initialized = true;
++ if (gtk_check_version(3,20,0) == nullptr) {
++ GtkStyleContext* style;
++ if (isRadio) {
++ style = GetStyleContext(MOZ_GTK_RADIOBUTTON);
++ } else {
++ style = GetStyleContext(MOZ_GTK_CHECKBUTTON);
++ }
++ GtkStateFlags state_flags = gtk_style_context_get_state(style);
++ gtk_style_context_get(style, state_flags,
++ "min-height",&(metrics->minSizeWithBorder.height),
++ "min-width", &(metrics->minSizeWithBorder.width),
++ nullptr);
++ // Fallback to indicator size if min dimensions are zero
++ if (metrics->minSizeWithBorder.height == 0 ||
++ metrics->minSizeWithBorder.width == 0) {
++ gint indicator_size;
++ gtk_widget_style_get(GetWidget(MOZ_GTK_CHECKBUTTON_CONTAINER),
++ "indicator_size", &indicator_size, nullptr);
++ if (metrics->minSizeWithBorder.height == 0) {
++ metrics->minSizeWithBorder.height = indicator_size;
++ }
++ if (metrics->minSizeWithBorder.width == 0) {
++ metrics->minSizeWithBorder.width = indicator_size;
++ }
++ }
++
++ GtkBorder border, padding;
++ gtk_style_context_get_border(style, state_flags, &border);
++ gtk_style_context_get_padding(style, state_flags, &padding);
++ metrics->borderAndPadding.left = border.left + padding.left;
++ metrics->borderAndPadding.right = border.right + padding.right;
++ metrics->borderAndPadding.top = border.top + padding.top;
++ metrics->borderAndPadding.bottom = border.bottom + padding.bottom;
++ metrics->minSizeWithBorder.width += metrics->borderAndPadding.left +
++ metrics->borderAndPadding.right;
++ metrics->minSizeWithBorder.height += metrics->borderAndPadding.top +
++ metrics->borderAndPadding.bottom;
++ } else {
++ gint indicator_size, indicator_spacing;
++ gtk_widget_style_get(GetWidget(MOZ_GTK_CHECKBUTTON_CONTAINER),
++ "indicator_size", &indicator_size,
++ "indicator_spacing", &indicator_spacing,
++ nullptr);
++ metrics->minSizeWithBorder.width =
++ metrics->minSizeWithBorder.height = indicator_size;
++ }
++ return metrics;
++}
++
+ const ScrollbarGTKMetrics*
+ GetScrollbarMetrics(GtkOrientation aOrientation)
+ {
+diff --git widget/gtk/gtkdrawing.h widget/gtk/gtkdrawing.h
+index 42dbf8287499..909c18f7f525 100644
+--- widget/gtk/gtkdrawing.h
++++ widget/gtk/gtkdrawing.h
+@@ -83,6 +83,12 @@ typedef struct {
+ } border;
+ } ScrollbarGTKMetrics;
+
++typedef struct {
++ bool initialized;
++ MozGtkSize minSizeWithBorder;
++ GtkBorder borderAndPadding;
++} ToggleGTKMetrics;
++
+ typedef enum {
+ MOZ_GTK_STEPPER_DOWN = 1 << 0,
+ MOZ_GTK_STEPPER_BOTTOM = 1 << 1,
+@@ -391,6 +397,14 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom,
+ gint
+ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing);
+
++/**
++ * Get metrics of the toggle (radio or checkbox)
++ * isRadio: [IN] true when requesting metrics for the radio button
++ * returns: pointer to ToggleGTKMetrics struct
++ */
++const ToggleGTKMetrics*
++GetToggleMetrics(bool isRadio);
++
+ /**
+ * Get the desired size of a GtkRadioButton
+ * indicator_size: [OUT] the indicator size
+diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp
+index 06e62efbcda8..da3eaa71a6b4 100644
+--- widget/gtk/nsNativeThemeGTK.cpp
++++ widget/gtk/nsNativeThemeGTK.cpp
+@@ -1020,24 +1020,6 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType,
+ aExtra->left = aExtra->right = 1;
+ break;
+
+- // Include the indicator spacing (the padding around the control).
+- case NS_THEME_CHECKBOX:
+- case NS_THEME_RADIO:
+- {
+- gint indicator_size, indicator_spacing;
+-
+- if (aWidgetType == NS_THEME_CHECKBOX) {
+- moz_gtk_checkbox_get_metrics(&indicator_size, &indicator_spacing);
+- } else {
+- moz_gtk_radio_get_metrics(&indicator_size, &indicator_spacing);
+- }
+-
+- aExtra->top = indicator_spacing;
+- aExtra->right = indicator_spacing;
+- aExtra->bottom = indicator_spacing;
+- aExtra->left = indicator_spacing;
+- break;
+- }
+ case NS_THEME_BUTTON :
+ {
+ if (IsDefaultButton(aFrame)) {
+@@ -1595,17 +1577,9 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
+ case NS_THEME_CHECKBOX:
+ case NS_THEME_RADIO:
+ {
+- gint indicator_size, indicator_spacing;
+-
+- if (aWidgetType == NS_THEME_CHECKBOX) {
+- moz_gtk_checkbox_get_metrics(&indicator_size, &indicator_spacing);
+- } else {
+- moz_gtk_radio_get_metrics(&indicator_size, &indicator_spacing);
+- }
+-
+- // Include space for the indicator and the padding around it.
+- aResult->width = indicator_size;
+- aResult->height = indicator_size;
++ const ToggleGTKMetrics* metrics = GetToggleMetrics(aWidgetType == NS_THEME_RADIO);
++ aResult->width = metrics->minSizeWithBorder.width;
++ aResult->height = metrics->minSizeWithBorder.height;
+ }
+ break;
+ case NS_THEME_TOOLBARBUTTON_DROPDOWN:
diff --git a/waterfox/rhbz-1497932.patch b/waterfox/rhbz-1497932.patch
deleted file mode 100644
index d6e7886..0000000
--- a/waterfox/rhbz-1497932.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
-diff -up firefox-56.0/media/webrtc/trunk/Makefile.old firefox-56.0/media/webrtc/trunk/Makefile
-diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old firefox-56.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old 2017-10-04 09:21:56.155553585 +0200
-+++ firefox-56.0/widget/gtk/mozgtk/mozgtk.c 2017-10-04 09:22:35.562427061 +0200
-@@ -61,7 +61,6 @@ STUB(gdk_screen_get_height_mm)
- STUB(gdk_screen_get_n_monitors)
- STUB(gdk_screen_get_monitor_at_window)
- STUB(gdk_screen_get_monitor_geometry)
--STUB(gdk_screen_get_monitor_workarea)
- STUB(gdk_screen_get_monitor_height_mm)
- STUB(gdk_screen_get_number)
- STUB(gdk_screen_get_resolution)
-@@ -550,6 +549,7 @@ STUB(gtk_render_line)
- STUB(gtk_render_option)
- STUB(gtk_render_slider)
- STUB(gtk_scale_new)
-+STUB(gdk_screen_get_monitor_workarea)
- STUB(gtk_scrollbar_new)
- STUB(gtk_style_context_add_class)
- STUB(gtk_style_context_add_region)
diff --git a/waterfox/waterfox.spec b/waterfox/waterfox.spec
index 85db78f..6a8928b 100644
--- a/waterfox/waterfox.spec
+++ b/waterfox/waterfox.spec
@@ -1,9 +1,9 @@
%global _legacy_common_support 1
-%global commit f6fe91ce29333271a5ef97ba148294404d28ab3f
+%global commit d5de4ec99d1d61a309d7fcd96da12488c9afe550
%global shortcommit %(c=%{commit}; echo ${c:0:7})
-%global date 20200313
-%global with_snapshot 1
+%global date 20200408
+%global with_snapshot 0
%global branch classic
@@ -29,12 +29,7 @@ ExcludeArch: armv7hl
%global system_ffi 1
%global system_cairo 0
%global system_harfbuzz 1
-# libvpx is too new for Waterfox 56
-%if 0%{?fedora} < 30
-%global system_libvpx 1
-%else
%global system_libvpx 0
-%endif
%global system_webp 1
%global system_libicu 0
%global system_jpeg 1
@@ -161,8 +156,8 @@ BuildRequires: %{scl_buildreq}
Summary: Waterfox Web browser
Name: waterfox
-Version: 2020.03.1
-Release: 12%{?branch:.%{branch}}%{?gver}%{?dist}
+Version: 2020.04
+Release: 11%{?branch:.%{branch}}%{?gver}%{?dist}
URL: https://www.waterfox.net
License: MPLv1.1 or GPLv2+ or LGPLv2+
@@ -178,6 +173,8 @@ Source0: %{vc_url}/archive/%{version}-%{branch}/%{name}-%{version}-%{bran
# rev=revision ./waterfox-FreeBSD-patches-snapshot.sh
# https://github.com/MrAlex94/Waterfox/issues/1220
Source600: https://dl.bintray.com/phantomx/tarballs/%{freebsd_root}.tar.xz
+Source601: patch-bug1321069
+Source602: patch-bug1381815
Source10: waterfox-mozconfig
Source12: bgstack15-%{name}-prefs.js
@@ -211,7 +208,6 @@ Patch224: mozilla-1170092.patch
Patch225: mozilla-1005640-accept-lang.patch
#ARM run-time patch
Patch226: rhbz-1354671.patch
-Patch230: rhbz-1497932.patch
# Firefox upstream patches
Patch402: mozilla-1196777.patch
@@ -419,7 +415,6 @@ This package contains results of tests executed during build.
%ifarch aarch64
%patch226 -p1 -b .1354671
%endif
-%patch230 -p1 -b .1497932
%patch402 -p1 -b .1196777
%patch406 -p1 -b .256180
@@ -445,6 +440,7 @@ This package contains results of tests executed during build.
# Prepare FreeBSD patches
mkdir _patches
cp -p %{freebsd_root}/patch-{bug,z-bug,revert-bug}* _patches/
+cp -pf %{S:601} %{S:602} _patches/
filterdiff -x dom/svg/crashtests/crashtests.list %{freebsd_root}/patch-bug1343147 \
> _patches/patch-bug1343147
@@ -463,14 +459,16 @@ done
# 3: no apply
# 4: uncertain
for i in \
- 702179 991253 1021761 1144632 1288587 1379148 1393235 1393283 1393627 \
- 1395486 1427126 1430508 1433747 1452576 1453127 1454285 1466606 1469257 \
- 1384121 1388744 1413143 1415883 1437450 \
+ 702179 991253 1021761 1144632 1288587 1379148 1393235 1393283 1393627 1395486 1396722 \
+ 1401909 1427126 1430508 1433747 1452576 1453127 1454285 1455235 1466606 1469257 \
+ 1384121 1384701 1388744 1401063 1413143 1415883 1437450 \
1447519
do
rm -f _patches/patch-bug${i}
done
+rm -f _patches/patch-z-bug1355143
+
patchcommand='patch -p0 -s -i'
for i in _patches/patch-{bug{??????,???????},revert-bug*,z-*} ;do
@@ -670,7 +668,7 @@ echo "Generate big endian version of config/external/icu/data/icud58l.dat"
# Update the various config.guess to upstream release for aarch64 support
find ./ -name config.guess -exec cp /usr/lib/rpm/config.guess {} ';'
-RPM_SMP_MFLAGS_NCPUS=%(echo %{_smp_mflags} | sed 's|-j||')
+RPM_SMP_MFLAGS_NCPUS="%{?_smp_build_ncpus}%{!?_smp_build_ncpus:2}"
RPM_NCPUS=1
# On x86 architectures, Mozilla can build up to 4 jobs at once in parallel,
@@ -1086,11 +1084,14 @@ fi
#---------------------------------------------------------------------
%changelog
-* Thu Mar 19 2020 B Stack <bgstack15@gmail.com> - 2020.02.1-12.classic.20200313gitf6fe91c
+* Tue Apr 14 2020 B Stack <bgstack15@gmail.com> - 2020.04-11.classic
- add el7 and el8 support
- repackage for stackrpms
- disable simd globally
+* Thu Apr 09 2020 Phantom X <megaphantomx at bol dot com dot br> - 2020.04-1.classic
+- 2020.04
+
* Wed Mar 18 2020 Phantom X <megaphantomx at bol dot com dot br> - 2020.03.1-2.classic.20200313gitf6fe91c
- gcc 10 fix
bgstack15