diff options
author | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-09-22 08:07:43 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-09-22 08:09:48 -0300 |
commit | 68218eff74911f1d90b45d34270a6ab66ede8537 (patch) | |
tree | 001a77b8fbd22a507ba1aa2dc087486fdae9497e | |
parent | e4f438e8cfa146d236f5e1ac6df6c5bb8b2a94f4 (diff) |
iceweasel: updating version for testing
-rw-r--r-- | libre-testing/iceweasel/PKGBUILD | 39 | ||||
-rw-r--r-- | libre-testing/iceweasel/iceweasel-gtk3-20.patch | 2333 | ||||
-rw-r--r-- | libre-testing/iceweasel/iceweasel.desktop | 368 | ||||
-rw-r--r-- | libre-testing/iceweasel/mozconfig | 9 | ||||
-rw-r--r-- | libre-testing/iceweasel/no-libnotify.patch | 51 |
5 files changed, 183 insertions, 2617 deletions
diff --git a/libre-testing/iceweasel/PKGBUILD b/libre-testing/iceweasel/PKGBUILD index e5e1113d9..74cef31cf 100644 --- a/libre-testing/iceweasel/PKGBUILD +++ b/libre-testing/iceweasel/PKGBUILD @@ -8,6 +8,7 @@ # Contributor: Figue <ffigue at gmail> # Contributor: taro-k <taro-k@movasense_com> # Contributor: Michał Masłowski <mtjm@mtjm.eu> +# Contributor: Luke R. <g4jc@openmailbox.org> # Thank you very much to the older contributors: # Contributor: evr <evanroman at gmail> # Contributor: Muhammad 'MJ' Jassim <UnbreakableMJ@gmail.com> @@ -16,9 +17,9 @@ _pgo=false # We're getting this from Debian Sid _debname=firefox -_brandingver=48.0 +_brandingver=49.0 _brandingrel=1 -_debver=48.0 +_debver=49.0 _debrel=deb1 _debrepo=http://ftp.debian.org/debian/pool/main/ _parabolarepo=https://repo.parabola.nu/other/iceweasel @@ -28,17 +29,13 @@ _pkgname=firefox pkgname=iceweasel epoch=1 pkgver=$_debver.$_debrel -pkgrel=3 +pkgrel=2 pkgdesc="A libre version of Debian Iceweasel, the standalone web browser based on Mozilla Firefox." arch=(i686 x86_64 armv7h) license=(MPL GPL LGPL) -depends=(alsa-lib dbus-glib ffmpeg gtk2 gtk3 hunspell icu=57.1 libevent - libvpx=1.6.0 libxt mime-types mozilla-common nss sqlite - startup-notification ttf-font) -makedepends=(autoconf2.13 diffutils gconf imagemagick imake inetutils libidl2 - libpulse librsvg-stable libxslt mesa mozilla-searchplugins - pkg-config python2 quilt unzip yasm zip) +depends=(alsa-lib dbus-glib ffmpeg gtk2 gtk3 hunspell icu=57.1 libevent libvpx=1.6.0 libxt mime-types mozilla-common nss sqlite startup-notification ttf-font) +makedepends=(autoconf2.13 diffutils gconf imagemagick imake inetutils libidl2 libpulse librsvg-stable libxslt mesa mozilla-searchplugins pkg-config python2 quilt unzip yasm zip) makedepends_i686=(rust) makedepends_x86_64=("${makedepends_i686[@]}") options=(!emptydirs !makeflags debug) @@ -47,6 +44,7 @@ if $_pgo; then options+=(!ccache) fi optdepends=('networkmanager: Location detection via available WiFi networks' + 'libnotify: Notification integration' 'upower: Battery API') url="https://wiki.parabola.nu/$pkgname" replaces=("$pkgname-libre" "$_pkgname") @@ -63,25 +61,21 @@ source=("$_debrepo/`debfile $_debname`_$_debver.orig.tar.xz" $pkgname.desktop $pkgname-install-dir.patch vendor.js - no-libnotify.patch - $pkgname-gtk3-20.patch enable-object-directory-paths.patch mozilla-1253216.patch mozilla-build-arm.patch) -sha256sums=('032cc7c6da26b4336a6e0cea41a2821a149469b5cdeaec66723bf256bbf13ec5' - 'bda6131cb58bedfb33ed372ab0b8ad666f8b6b310f4788c7415efb9e3ae30ec6' - '0c4ce096711629db4a5f15415b9d752fd77c4eab7bfd22bd3cb6640ed9cbf861' +sha256sums=('2f463afd3c74eb9477f58525214f06498357ff90f01b45fb2675fc77c57bcffe' + 'ad6e1da709e0f7e86da83fee84067968acd1678576c4cf1757214b2954780ce5' + 'c0fd88e37187298a7658919cf2e4b6d024425b781d6aff5bdba49dc991f379d3' 'SKIP' - '6891d6237312914b579c632b71f9e4f613e7b00bbf2fd7ce53b4cf681820f609' + '69d612da53ed7eb04be20d0bfc51eb6e132216a7f7159dde37f4666973ca14d4' '013af398e97da9e855a143582816bf819e0d9d8d2b0e323d6b832f3df1157fdd' '32f1fe3ad4f80d0ae419064db2abe49b97cd7cb18c35d68be1a2befb60172a2a' '93e3001ce152e1d142619e215a9ef07dd429943b99d21726c25da9ceb31e31cd' '56eba484179c7f498076f8dc603d8795e99dce8c6ea1da9736318c59d666bff6' - '2257dc69886bd0b72c48675a27c3a88b9cf6b598252c9e9f1c99763180684fc3' + '87034dbb640f70454b27d1695a6f03b6fd1ab81c82eb4d8c771db925ae03d408' '3aea6676f1e53a09673b6ae219d281fc28054beb6002b09973611c02f827651d' 'e1c82f5f683258e17f7b3dba62a938e4efe4d232f45a4b82e74cd2793fd5f7fe' - 'e4ebdd14096d177d264a7993dbd5df46463605ff45f783732c26d30b9caa53a7' - 'c984c8bda3c173349d98f3fa71ec8ff8e8b74e6ca20a3f39f33596dbb4c4d1e8' 'e260e555b261aabab1e48786dd514eeea056e4402af7cfd4dfd1d32858441484' 'fbb6011501a74a8ea6d01c041870fcefb7ef2859c134aedc676e5f6452833f65' '56eecee8162c138c442773d66483886f1242c8dd2b16eed5711ae5e63d9b0e3a') @@ -116,13 +110,6 @@ prepare() { # Install to /usr/lib/$pkgname patch -Np1 -i "$srcdir/$pkgname-install-dir.patch" - # https://bugzilla.mozilla.org/show_bug.cgi?id=1234158 - patch -Np1 -i "$srcdir/$pkgname-gtk3-20.patch" - - # Notifications with libnotify are broken - # https://bugzilla.mozilla.org/show_bug.cgi?id=1236150 - patch -Np1 -i "$srcdir/no-libnotify.patch" - # Patch and remove anything that's left patch -Np1 -i "$srcdir/libre.patch" sed -i 's|Adobe Flash|SWF Player|g; @@ -172,7 +159,7 @@ build() { LDFLAGS+=" -Wl,-z,now" # GCC 6 - CXXFLAGS+=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2" + CXXFLAGS+=" -fno-delete-null-pointer-checks -fno-schedule-insns2" export PATH="$srcdir/path:$PATH" diff --git a/libre-testing/iceweasel/iceweasel-gtk3-20.patch b/libre-testing/iceweasel/iceweasel-gtk3-20.patch deleted file mode 100644 index eccbc5e8d..000000000 --- a/libre-testing/iceweasel/iceweasel-gtk3-20.patch +++ /dev/null @@ -1,2333 +0,0 @@ -diff -up firefox-48.0/widget/gtk/gtk3drawing.cpp.gtk3-20 firefox-48.0/widget/gtk/gtk3drawing.cpp ---- firefox-48.0/widget/gtk/gtk3drawing.cpp.gtk3-20 2016-07-25 22:22:07.000000000 +0200 -+++ firefox-48.0/widget/gtk/gtk3drawing.cpp 2016-07-29 09:15:11.822285857 +0200 -@@ -18,15 +18,9 @@ - - #include <math.h> - --static GtkWidget* gProtoWindow; - static GtkWidget* gProtoLayout; --static GtkWidget* gButtonWidget; --static GtkWidget* gToggleButtonWidget; --static GtkWidget* gButtonArrowWidget; --static GtkWidget* gSpinWidget; - static GtkWidget* gHScaleWidget; - static GtkWidget* gVScaleWidget; --static GtkWidget* gEntryWidget; - static GtkWidget* gComboBoxWidget; - static GtkWidget* gComboBoxButtonWidget; - static GtkWidget* gComboBoxArrowWidget; -@@ -35,30 +29,15 @@ static GtkWidget* gComboBoxEntryWidget; - static GtkWidget* gComboBoxEntryTextareaWidget; - static GtkWidget* gComboBoxEntryButtonWidget; - static GtkWidget* gComboBoxEntryArrowWidget; --static GtkWidget* gHandleBoxWidget; --static GtkWidget* gToolbarWidget; --static GtkWidget* gFrameWidget; --static GtkWidget* gProgressWidget; - static GtkWidget* gTabWidget; --static GtkWidget* gTextViewWidget; --static GtkWidget* gTooltipWidget; --static GtkWidget* gMenuBarWidget; --static GtkWidget* gMenuBarItemWidget; --static GtkWidget* gMenuPopupWidget; --static GtkWidget* gMenuItemWidget; - static GtkWidget* gImageMenuItemWidget; - static GtkWidget* gCheckMenuItemWidget; - static GtkWidget* gTreeViewWidget; - static GtkTreeViewColumn* gMiddleTreeViewColumn; - static GtkWidget* gTreeHeaderCellWidget; - static GtkWidget* gTreeHeaderSortArrowWidget; --static GtkWidget* gExpanderWidget; --static GtkWidget* gToolbarSeparatorWidget; --static GtkWidget* gMenuSeparatorWidget; - static GtkWidget* gHPanedWidget; - static GtkWidget* gVPanedWidget; --static GtkWidget* gScrolledWindowWidget; --static GtkWidget* gInfoBar; - - static style_prop_t style_prop_func; - static gboolean have_arrow_scaling; -@@ -94,15 +73,6 @@ GetStateFlagsFromGtkWidgetState(GtkWidge - return stateFlags; - } - --/* Because we have such an unconventional way of drawing widgets, signal to the GTK theme engine -- that they are drawing for Mozilla instead of a conventional GTK app so they can do any specific -- things they may want to do. */ --static void --moz_gtk_set_widget_name(GtkWidget* widget) --{ -- gtk_widget_set_name(widget, "MozillaGtkWidget"); --} -- - gint - moz_gtk_enable_style_props(style_prop_t styleGetProp) - { -@@ -111,15 +81,6 @@ moz_gtk_enable_style_props(style_prop_t - } - - static gint --ensure_window_widget() --{ -- if (!gProtoWindow) { -- gProtoWindow = GetWidget(MOZ_GTK_WINDOW); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint - setup_widget_prototype(GtkWidget* widget) - { - if (!gProtoLayout) { -@@ -130,16 +91,6 @@ setup_widget_prototype(GtkWidget* widget - } - - static gint --ensure_button_widget() --{ -- if (!gButtonWidget) { -- gButtonWidget = gtk_button_new_with_label("M"); -- setup_widget_prototype(gButtonWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint - ensure_hpaned_widget() - { - if (!gHPanedWidget) { -@@ -160,40 +111,6 @@ ensure_vpaned_widget() - } - - static gint --ensure_toggle_button_widget() --{ -- if (!gToggleButtonWidget) { -- gToggleButtonWidget = gtk_toggle_button_new(); -- setup_widget_prototype(gToggleButtonWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_button_arrow_widget() --{ -- if (!gButtonArrowWidget) { -- ensure_toggle_button_widget(); -- -- gButtonArrowWidget = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT); -- gtk_container_add(GTK_CONTAINER(gToggleButtonWidget), gButtonArrowWidget); -- gtk_widget_realize(gButtonArrowWidget); -- gtk_widget_show(gButtonArrowWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_spin_widget() --{ -- if (!gSpinWidget) { -- gSpinWidget = gtk_spin_button_new(NULL, 1, 0); -- setup_widget_prototype(gSpinWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint - ensure_scale_widget() - { - if (!gHScaleWidget) { -@@ -207,16 +124,6 @@ ensure_scale_widget() - return MOZ_GTK_SUCCESS; - } - --static gint --ensure_entry_widget() --{ -- if (!gEntryWidget) { -- gEntryWidget = gtk_entry_new(); -- setup_widget_prototype(gEntryWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- - /* We need to have pointers to the inner widgets (button, separator, arrow) - * of the ComboBox to get the correct rendering from theme engines which - * special cases their look. Since the inner layout can change, we ask GTK -@@ -225,7 +132,7 @@ ensure_entry_widget() - * g_object_add_weak_pointer(). - * Note that if we don't find the inner widgets (which shouldn't happen), we - * fallback to use generic "non-inner" widgets, and they don't need that kind -- * of weak pointer since they are explicit children of gProtoWindow and as -+ * of weak pointer since they are explicit children of gProtoLayout and as - * such GTK holds a strong reference to them. */ - static void - moz_gtk_get_combo_box_inner_button(GtkWidget *widget, gpointer client_data) -@@ -297,16 +204,14 @@ ensure_combo_box_widgets() - /* Shouldn't be reached with current internal gtk implementation; we - * use a generic toggle button as last resort fallback to avoid - * crashing. */ -- ensure_toggle_button_widget(); -- gComboBoxButtonWidget = gToggleButtonWidget; -+ gComboBoxButtonWidget = GetWidget(MOZ_GTK_TOGGLE_BUTTON); - } - - if (!gComboBoxArrowWidget) { - /* Shouldn't be reached with current internal gtk implementation; - * we gButtonArrowWidget as last resort fallback to avoid - * crashing. */ -- ensure_button_arrow_widget(); -- gComboBoxArrowWidget = gButtonArrowWidget; -+ gComboBoxArrowWidget = GetWidget(MOZ_GTK_BUTTON_ARROW); - } - - /* We don't test the validity of gComboBoxSeparatorWidget since there -@@ -316,15 +221,6 @@ ensure_combo_box_widgets() - return MOZ_GTK_SUCCESS; - } - --static void --ensure_info_bar() --{ -- if (!gInfoBar) { -- gInfoBar = gtk_info_bar_new(); -- setup_widget_prototype(gInfoBar); -- } --} -- - /* We need to have pointers to the inner widgets (entry, button, arrow) of - * the ComboBoxEntry to get the correct rendering from theme engines which - * special cases their look. Since the inner layout can change, we ask GTK -@@ -333,7 +229,7 @@ ensure_info_bar() - * g_object_add_weak_pointer(). - * Note that if we don't find the inner widgets (which shouldn't happen), we - * fallback to use generic "non-inner" widgets, and they don't need that kind -- * of weak pointer since they are explicit children of gProtoWindow and as -+ * of weak pointer since they are explicit children of gProtoLayout and as - * such GTK holds a strong reference to them. */ - static void - moz_gtk_get_combo_box_entry_inner_widgets(GtkWidget *widget, -@@ -385,8 +281,7 @@ ensure_combo_box_entry_widgets() - NULL); - - if (!gComboBoxEntryTextareaWidget) { -- ensure_entry_widget(); -- gComboBoxEntryTextareaWidget = gEntryWidget; -+ gComboBoxEntryTextareaWidget = GetWidget(MOZ_GTK_ENTRY); - } - - if (gComboBoxEntryButtonWidget) { -@@ -412,68 +307,19 @@ ensure_combo_box_entry_widgets() - /* Shouldn't be reached with current internal gtk implementation; - * we use a generic toggle button as last resort fallback to avoid - * crashing. */ -- ensure_toggle_button_widget(); -- gComboBoxEntryButtonWidget = gToggleButtonWidget; -+ gComboBoxEntryButtonWidget = GetWidget(MOZ_GTK_TOGGLE_BUTTON); - } - - if (!gComboBoxEntryArrowWidget) { - /* Shouldn't be reached with current internal gtk implementation; - * we gButtonArrowWidget as last resort fallback to avoid - * crashing. */ -- ensure_button_arrow_widget(); -- gComboBoxEntryArrowWidget = gButtonArrowWidget; -+ gComboBoxEntryArrowWidget = GetWidget(MOZ_GTK_BUTTON_ARROW); - } - - return MOZ_GTK_SUCCESS; - } - -- --static gint --ensure_handlebox_widget() --{ -- if (!gHandleBoxWidget) { -- gHandleBoxWidget = gtk_handle_box_new(); -- setup_widget_prototype(gHandleBoxWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_toolbar_widget() --{ -- if (!gToolbarWidget) { -- ensure_handlebox_widget(); -- gToolbarWidget = gtk_toolbar_new(); -- gtk_container_add(GTK_CONTAINER(gHandleBoxWidget), gToolbarWidget); -- gtk_widget_realize(gToolbarWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_toolbar_separator_widget() --{ -- if (!gToolbarSeparatorWidget) { -- ensure_toolbar_widget(); -- gToolbarSeparatorWidget = GTK_WIDGET(gtk_separator_tool_item_new()); -- setup_widget_prototype(gToolbarSeparatorWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_tooltip_widget() --{ -- if (!gTooltipWidget) { -- gTooltipWidget = gtk_window_new(GTK_WINDOW_POPUP); -- GtkStyleContext* style = gtk_widget_get_style_context(gTooltipWidget); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP); -- gtk_widget_realize(gTooltipWidget); -- moz_gtk_set_widget_name(gTooltipWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- - static gint - ensure_tab_widget() - { -@@ -485,81 +331,11 @@ ensure_tab_widget() - } - - static gint --ensure_progress_widget() --{ -- if (!gProgressWidget) { -- gProgressWidget = gtk_progress_bar_new(); -- setup_widget_prototype(gProgressWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_frame_widget() --{ -- if (!gFrameWidget) { -- gFrameWidget = gtk_frame_new(NULL); -- setup_widget_prototype(gFrameWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_menu_bar_widget() --{ -- if (!gMenuBarWidget) { -- gMenuBarWidget = gtk_menu_bar_new(); -- setup_widget_prototype(gMenuBarWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_menu_bar_item_widget() --{ -- if (!gMenuBarItemWidget) { -- ensure_menu_bar_widget(); -- gMenuBarItemWidget = gtk_menu_item_new(); -- gtk_menu_shell_append(GTK_MENU_SHELL(gMenuBarWidget), -- gMenuBarItemWidget); -- gtk_widget_realize(gMenuBarItemWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_menu_popup_widget() --{ -- if (!gMenuPopupWidget) { -- ensure_window_widget(); -- gMenuPopupWidget = gtk_menu_new(); -- gtk_menu_attach_to_widget(GTK_MENU(gMenuPopupWidget), gProtoWindow, -- NULL); -- gtk_widget_realize(gMenuPopupWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_menu_item_widget() --{ -- if (!gMenuItemWidget) { -- ensure_menu_popup_widget(); -- gMenuItemWidget = gtk_menu_item_new_with_label("M"); -- gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget), -- gMenuItemWidget); -- gtk_widget_realize(gMenuItemWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint - ensure_image_menu_item_widget() - { - if (!gImageMenuItemWidget) { -- ensure_menu_popup_widget(); - gImageMenuItemWidget = gtk_image_menu_item_new(); -- gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget), -+ gtk_menu_shell_append(GTK_MENU_SHELL(GetWidget(MOZ_GTK_MENUPOPUP)), - gImageMenuItemWidget); - gtk_widget_realize(gImageMenuItemWidget); - } -@@ -567,25 +343,11 @@ ensure_image_menu_item_widget() - } - - static gint --ensure_menu_separator_widget() --{ -- if (!gMenuSeparatorWidget) { -- ensure_menu_popup_widget(); -- gMenuSeparatorWidget = gtk_separator_menu_item_new(); -- gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget), -- gMenuSeparatorWidget); -- gtk_widget_realize(gMenuSeparatorWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint - ensure_check_menu_item_widget() - { - if (!gCheckMenuItemWidget) { -- ensure_menu_popup_widget(); -- gCheckMenuItemWidget = gtk_check_menu_item_new_with_label("M"); -- gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget), -+ gCheckMenuItemWidget = gtk_check_menu_item_new(); -+ gtk_menu_shell_append(GTK_MENU_SHELL(GetWidget(MOZ_GTK_MENUPOPUP)), - gCheckMenuItemWidget); - gtk_widget_realize(gCheckMenuItemWidget); - } -@@ -646,37 +408,6 @@ ensure_tree_header_cell_widget() - return MOZ_GTK_SUCCESS; - } - --static gint --ensure_expander_widget() --{ -- if (!gExpanderWidget) { -- gExpanderWidget = gtk_expander_new("M"); -- setup_widget_prototype(gExpanderWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static gint --ensure_scrolled_window_widget() --{ -- if (!gScrolledWindowWidget) { -- gScrolledWindowWidget = gtk_scrolled_window_new(NULL, NULL); -- setup_widget_prototype(gScrolledWindowWidget); -- } -- return MOZ_GTK_SUCCESS; --} -- --static void --ensure_text_view_widget() --{ -- if (gTextViewWidget) -- return; -- -- gTextViewWidget = gtk_text_view_new(); -- ensure_scrolled_window_widget(); -- gtk_container_add(GTK_CONTAINER(gScrolledWindowWidget), gTextViewWidget); --} -- - gint - moz_gtk_init() - { -@@ -729,26 +460,21 @@ moz_gtk_get_focus_outline_size(gint* foc - { - GtkBorder border; - GtkBorder padding; -- GtkStyleContext *style; -- -- ensure_entry_widget(); -- style = gtk_widget_get_style_context(gEntryWidget); -- -+ GtkStyleContext *style = ClaimStyleContext(MOZ_GTK_ENTRY); - gtk_style_context_get_border(style, GTK_STATE_FLAG_NORMAL, &border); - gtk_style_context_get_padding(style, GTK_STATE_FLAG_NORMAL, &padding); - *focus_h_width = border.left + padding.left; - *focus_v_width = border.top + padding.top; -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - - gint - moz_gtk_menuitem_get_horizontal_padding(gint* horizontal_padding) - { -- ensure_menu_item_widget(); -- -- gtk_style_context_get_style(gtk_widget_get_style_context(gMenuItemWidget), -- "horizontal-padding", horizontal_padding, -- NULL); -+ gtk_widget_style_get(GetWidget(MOZ_GTK_MENUITEM), -+ "horizontal-padding", horizontal_padding, -+ nullptr); - - return MOZ_GTK_SUCCESS; - } -@@ -771,10 +497,11 @@ moz_gtk_button_get_default_overflow(gint - { - GtkBorder* default_outside_border; - -- ensure_button_widget(); -- gtk_style_context_get_style(gtk_widget_get_style_context(gButtonWidget), -+ GtkStyleContext *style = ClaimStyleContext(MOZ_GTK_BUTTON); -+ gtk_style_context_get_style(style, - "default-outside-border", &default_outside_border, - NULL); -+ ReleaseStyleContext(style); - - if (default_outside_border) { - *border_top = default_outside_border->top; -@@ -794,10 +521,11 @@ moz_gtk_button_get_default_border(gint* - { - GtkBorder* default_border; - -- ensure_button_widget(); -- gtk_style_context_get_style(gtk_widget_get_style_context(gButtonWidget), -+ GtkStyleContext *style = ClaimStyleContext(MOZ_GTK_BUTTON); -+ gtk_style_context_get_style(style, - "default-border", &default_border, - NULL); -+ ReleaseStyleContext(style); - - if (default_border) { - *border_top = default_border->top; -@@ -831,17 +559,15 @@ static gint - moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect, - GtkTextDirection direction) - { -- GtkStyleContext* style; -- -- ensure_window_widget(); -- gtk_widget_set_direction(gProtoWindow, direction); -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_WINDOW, direction); - -- style = gtk_widget_get_style_context(gProtoWindow); - gtk_style_context_save(style); - gtk_style_context_add_class(style, GTK_STYLE_CLASS_BACKGROUND); - gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); - gtk_style_context_restore(style); - -+ ReleaseStyleContext(style); -+ - return MOZ_GTK_SUCCESS; - } - -@@ -1118,6 +844,36 @@ moz_gtk_scrollbar_button_paint(cairo_t * - return MOZ_GTK_SUCCESS; - } - -+static void -+moz_gtk_update_scrollbar_style(GtkStyleContext* style, -+ WidgetNodeType widget, -+ GtkTextDirection direction) -+{ -+ if (widget == MOZ_GTK_SCROLLBAR_HORIZONTAL) { -+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_BOTTOM); -+ } else { -+ if (direction == GTK_TEXT_DIR_LTR) { -+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_RIGHT); -+ gtk_style_context_remove_class(style, GTK_STYLE_CLASS_LEFT); -+ } else { -+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_LEFT); -+ gtk_style_context_remove_class(style, GTK_STYLE_CLASS_RIGHT); -+ } -+ } -+} -+ -+static void -+moz_gtk_draw_styled_frame(GtkStyleContext* style, cairo_t *cr, -+ GdkRectangle* rect, bool drawFocus) -+{ -+ gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); -+ gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); -+ if (drawFocus) { -+ gtk_render_focus(style, cr, -+ rect->x, rect->y, rect->width, rect->height); -+ } -+} -+ - static gint - moz_gtk_scrollbar_trough_paint(WidgetNodeType widget, - cairo_t *cr, GdkRectangle* rect, -@@ -1126,26 +882,34 @@ moz_gtk_scrollbar_trough_paint(WidgetNod - GtkTextDirection direction) - { - if (flags & MOZ_GTK_TRACK_OPAQUE) { -- GtkStyleContext* style = -- gtk_widget_get_style_context(GTK_WIDGET(gProtoWindow)); -- gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_WINDOW, direction); -+ gtk_render_background(style, cr, -+ rect->x, rect->y, rect->width, rect->height); -+ ReleaseStyleContext(style); - } - -- GtkStyleContext* style = -- ClaimStyleContext(widget == MOZ_GTK_SCROLLBAR_HORIZONTAL ? -- MOZ_GTK_SCROLLBAR_TROUGH_HORIZONTAL : -- MOZ_GTK_SCROLLBAR_TROUGH_VERTICAL, -- direction); -- // TODO - integate with ClaimStyleContext()? -- gtk_style_context_set_direction(style, direction); -+ bool isHorizontal = (widget == MOZ_GTK_SCROLLBAR_HORIZONTAL); -+ GtkStyleContext* style; - -- gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); -- gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); -+ // Draw all child CSS Nodes for Gtk >= 3.20 -+ if (gtk_check_version(3, 20, 0) == nullptr) { -+ style = ClaimStyleContext(widget, direction); -+ moz_gtk_update_scrollbar_style(style, widget, direction); -+ moz_gtk_draw_styled_frame(style, cr, rect, state->focused); -+ ReleaseStyleContext(style); - -- if (state->focused) { -- gtk_render_focus(style, cr, -- rect->x, rect->y, rect->width, rect->height); -+ style = ClaimStyleContext(isHorizontal ? -+ MOZ_GTK_SCROLLBAR_CONTENTS_HORIZONTAL : -+ MOZ_GTK_SCROLLBAR_CONTENTS_VERTICAL, -+ direction); -+ moz_gtk_draw_styled_frame(style, cr, rect, state->focused); -+ ReleaseStyleContext(style); - } -+ style = ClaimStyleContext(isHorizontal ? -+ MOZ_GTK_SCROLLBAR_TROUGH_HORIZONTAL : -+ MOZ_GTK_SCROLLBAR_TROUGH_VERTICAL, -+ direction); -+ moz_gtk_draw_styled_frame(style, cr, rect, state->focused); - ReleaseStyleContext(style); - - return MOZ_GTK_SUCCESS; -@@ -1160,12 +924,7 @@ moz_gtk_scrollbar_thumb_paint(WidgetNode - GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); - GtkBorder margin; - -- GtkStyleContext* style = ClaimStyleContext(widget, direction); -- -- // TODO - integate those with ClaimStyleContext()? -- gtk_style_context_set_state(style, state_flags); -- gtk_style_context_set_direction(style, direction); -- -+ GtkStyleContext* style = ClaimStyleContext(widget, direction, state_flags); - gtk_style_context_get_margin (style, state_flags, &margin); - - gtk_render_slider(style, cr, -@@ -1185,17 +944,10 @@ static gint - moz_gtk_spin_paint(cairo_t *cr, GdkRectangle* rect, - GtkTextDirection direction) - { -- GtkStyleContext* style; -- -- ensure_spin_widget(); -- gtk_widget_set_direction(gSpinWidget, direction); -- style = gtk_widget_get_style_context(gSpinWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_SPINBUTTON); -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_SPINBUTTON, direction); - gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); - gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); -- gtk_style_context_restore(style); -- -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -1204,21 +956,14 @@ moz_gtk_spin_updown_paint(cairo_t *cr, G - gboolean isDown, GtkWidgetState* state, - GtkTextDirection direction) - { -- GdkRectangle arrow_rect; -- GtkStyleContext* style; -- -- ensure_spin_widget(); -- style = gtk_widget_get_style_context(gSpinWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_SPINBUTTON); -- gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); -- gtk_widget_set_direction(gSpinWidget, direction); -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_SPINBUTTON, direction, -+ GetStateFlagsFromGtkWidgetState(state)); - - gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); - gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); - -- - /* hard code these values */ -+ GdkRectangle arrow_rect; - arrow_rect.width = 6; - arrow_rect.height = 6; - arrow_rect.x = rect->x + (rect->width - arrow_rect.width) / 2; -@@ -1229,7 +974,8 @@ moz_gtk_spin_updown_paint(cairo_t *cr, G - isDown ? ARROW_DOWN : ARROW_UP, - arrow_rect.x, arrow_rect.y, - arrow_rect.width); -- gtk_style_context_restore(style); -+ -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -1295,8 +1041,8 @@ moz_gtk_scale_thumb_paint(cairo_t *cr, G - gtk_widget_set_direction(widget, direction); - - style = gtk_widget_get_style_context(widget); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER); - gtk_style_context_save(style); -+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER); - gtk_style_context_set_state(style, state_flags); - /* determine the thumb size, and position the thumb in the center in the opposite axis - */ -@@ -1321,20 +1067,12 @@ moz_gtk_gripper_paint(cairo_t *cr, GdkRe - GtkWidgetState* state, - GtkTextDirection direction) - { -- GtkStyleContext* style; -- -- ensure_handlebox_widget(); -- gtk_widget_set_direction(gHandleBoxWidget, direction); -- -- style = gtk_widget_get_style_context(gHandleBoxWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_GRIP); -- gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); -- -+ GtkStyleContext* style = -+ ClaimStyleContext(MOZ_GTK_GRIPPER, direction, -+ GetStateFlagsFromGtkWidgetState(state)); - gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); - gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); -- gtk_style_context_restore(style); -- -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -1435,6 +1173,38 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRect - return MOZ_GTK_SUCCESS; - } - -+static gint -+moz_gtk_text_view_paint(cairo_t *cr, GdkRectangle* rect, -+ GtkWidgetState* state, -+ GtkTextDirection direction) -+{ -+ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); -+ -+ GtkStyleContext* style_frame = -+ ClaimStyleContext(MOZ_GTK_SCROLLED_WINDOW, direction, state_flags); -+ gtk_render_frame(style_frame, cr, rect->x, rect->y, rect->width, rect->height); -+ -+ GtkBorder border, padding; -+ gtk_style_context_get_border(style_frame, state_flags, &border); -+ gtk_style_context_get_padding(style_frame, state_flags, &padding); -+ ReleaseStyleContext(style_frame); -+ -+ GtkStyleContext* style = -+ ClaimStyleContext(MOZ_GTK_TEXT_VIEW, direction, state_flags); -+ -+ gint xthickness = border.left + padding.left; -+ gint ythickness = border.top + padding.top; -+ -+ gtk_render_background(style, cr, -+ rect->x + xthickness, rect->y + ythickness, -+ rect->width - 2 * xthickness, -+ rect->height - 2 * ythickness); -+ -+ ReleaseStyleContext(style); -+ -+ return MOZ_GTK_SUCCESS; -+} -+ - static gint - moz_gtk_treeview_paint(cairo_t *cr, GdkRectangle* rect, - GtkWidgetState* state, -@@ -1447,18 +1217,13 @@ moz_gtk_treeview_paint(cairo_t *cr, GdkR - GtkBorder border; - - ensure_tree_view_widget(); -- ensure_scrolled_window_widget(); -- - gtk_widget_set_direction(gTreeViewWidget, direction); -- gtk_widget_set_direction(gScrolledWindowWidget, direction); - - /* only handle disabled and normal states, otherwise the whole background - * area will be painted differently with other states */ - state_flags = state->disabled ? GTK_STATE_FLAG_INSENSITIVE : GTK_STATE_FLAG_NORMAL; - -- style = gtk_widget_get_style_context(gScrolledWindowWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_FRAME); -+ style = ClaimStyleContext(MOZ_GTK_SCROLLED_WINDOW, direction); - gtk_style_context_get_border(style, state_flags, &border); - xthickness = border.left; - ythickness = border.top; -@@ -1473,7 +1238,7 @@ moz_gtk_treeview_paint(cairo_t *cr, GdkR - rect->height - 2 * ythickness); - gtk_render_frame(style, cr, - rect->x, rect->y, rect->width, rect->height); -- gtk_style_context_restore(style); -+ ReleaseStyleContext(style); - gtk_style_context_restore(style_tree); - return MOZ_GTK_SUCCESS; - } -@@ -1648,20 +1413,9 @@ moz_gtk_arrow_paint(cairo_t *cr, GdkRect - GtkWidgetState* state, - GtkArrowType arrow_type, GtkTextDirection direction) - { -- GtkStyleContext* style; -- GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); - GdkRectangle arrow_rect; - gdouble arrow_angle; - -- ensure_button_arrow_widget(); -- style = gtk_widget_get_style_context(gButtonArrowWidget); -- gtk_style_context_save(style); -- gtk_style_context_set_state(style, state_flags); -- gtk_widget_set_direction(gButtonArrowWidget, direction); -- -- calculate_arrow_rect(gButtonArrowWidget, rect, &arrow_rect, -- direction); -- - if (direction == GTK_TEXT_DIR_RTL) { - arrow_type = (arrow_type == GTK_ARROW_LEFT) ? - GTK_ARROW_RIGHT : GTK_ARROW_LEFT; -@@ -1680,10 +1434,17 @@ moz_gtk_arrow_paint(cairo_t *cr, GdkRect - arrow_angle = ARROW_UP; - break; - } -- if (arrow_type != GTK_ARROW_NONE) -- gtk_render_arrow(style, cr, arrow_angle, -- arrow_rect.x, arrow_rect.y, arrow_rect.width); -- gtk_style_context_restore(style); -+ if (arrow_type == GTK_ARROW_NONE) -+ return MOZ_GTK_SUCCESS; -+ -+ calculate_arrow_rect(GetWidget(MOZ_GTK_BUTTON_ARROW), rect, &arrow_rect, -+ direction); -+ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_BUTTON_ARROW, -+ direction, state_flags); -+ gtk_render_arrow(style, cr, arrow_angle, -+ arrow_rect.x, arrow_rect.y, arrow_rect.width); -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -1776,19 +1537,10 @@ static gint - moz_gtk_toolbar_paint(cairo_t *cr, GdkRectangle* rect, - GtkTextDirection direction) - { -- GtkStyleContext* style; -- -- ensure_toolbar_widget(); -- gtk_widget_set_direction(gToolbarWidget, direction); -- -- style = gtk_widget_get_style_context(gToolbarWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLBAR); -- -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_TOOLBAR, direction); - gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); - gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); -- gtk_style_context_restore(style); -- -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -1798,7 +1550,6 @@ static gint - moz_gtk_toolbar_separator_paint(cairo_t *cr, GdkRectangle* rect, - GtkTextDirection direction) - { -- GtkStyleContext* style; - gint separator_width; - gint paint_width; - gboolean wide_separators; -@@ -1807,16 +1558,14 @@ moz_gtk_toolbar_separator_paint(cairo_t - const double start_fraction = 0.2; - const double end_fraction = 0.8; - -- ensure_toolbar_separator_widget(); -- gtk_widget_set_direction(gToolbarSeparatorWidget, direction); -- -- style = gtk_widget_get_style_context(gToolbarSeparatorWidget); -- -- gtk_style_context_get_style(gtk_widget_get_style_context(gToolbarWidget), -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_TOOLBAR); -+ gtk_style_context_get_style(style, - "wide-separators", &wide_separators, - "separator-width", &separator_width, - NULL); -+ ReleaseStyleContext(style); - -+ style = ClaimStyleContext(MOZ_GTK_TOOLBAR_SEPARATOR, direction); - if (wide_separators) { - if (separator_width > rect->width) - separator_width = rect->width; -@@ -1840,7 +1589,7 @@ moz_gtk_toolbar_separator_paint(cairo_t - rect->x + (rect->width - paint_width) / 2, - rect->y + rect->height * end_fraction); - } -- -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -1848,14 +1597,10 @@ static gint - moz_gtk_tooltip_paint(cairo_t *cr, GdkRectangle* rect, - GtkTextDirection direction) - { -- GtkStyleContext* style; -- -- ensure_tooltip_widget(); -- gtk_widget_set_direction(gTooltipWidget, direction); -- -- style = gtk_widget_get_style_context(gTooltipWidget); -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_TOOLTIP, direction); - gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); - gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -1870,14 +1615,11 @@ moz_gtk_resizer_paint(cairo_t *cr, GdkRe - // GTK_STYLE_CLASS_VIEW to match the background with textarea elements. - // The resizer is drawn with shaded variants of the background color, and - // so a transparent background would lead to a transparent resizer. -- ensure_text_view_widget(); -- gtk_widget_set_direction(gTextViewWidget, GTK_TEXT_DIR_LTR); -- -- style = gtk_widget_get_style_context(gTextViewWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_VIEW); -+ style = ClaimStyleContext(MOZ_GTK_TEXT_VIEW, GTK_TEXT_DIR_LTR, -+ GetStateFlagsFromGtkWidgetState(state)); -+ // TODO - we need to save/restore style when gtk 3.20 CSS node path -+ // is used - gtk_style_context_add_class(style, GTK_STYLE_CLASS_GRIP); -- gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); - - // Workaround unico not respecting the text direction for resizers. - // See bug 1174248. -@@ -1891,7 +1633,7 @@ moz_gtk_resizer_paint(cairo_t *cr, GdkRe - - gtk_render_handle(style, cr, rect->x, rect->y, rect->width, rect->height); - cairo_restore(cr); -- gtk_style_context_restore(style); -+ ReleaseStyleContext(style); - - return MOZ_GTK_SUCCESS; - } -@@ -1900,16 +1642,9 @@ static gint - moz_gtk_frame_paint(cairo_t *cr, GdkRectangle* rect, - GtkTextDirection direction) - { -- GtkStyleContext* style; -- -- ensure_frame_widget(); -- gtk_widget_set_direction(gFrameWidget, direction); -- style = gtk_widget_get_style_context(gFrameWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_FRAME); -- -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_FRAME, direction); - gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); -- gtk_style_context_restore(style); -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -1917,18 +1652,11 @@ static gint - moz_gtk_progressbar_paint(cairo_t *cr, GdkRectangle* rect, - GtkTextDirection direction) - { -- GtkStyleContext* style; -- -- ensure_progress_widget(); -- gtk_widget_set_direction(gProgressWidget, direction); -- -- style = gtk_widget_get_style_context(gProgressWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TROUGH); -- -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_PROGRESS_TROUGH, -+ direction); - gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); - gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); -- gtk_style_context_restore(style); -+ ReleaseStyleContext(style); - - return MOZ_GTK_SUCCESS; - } -@@ -1940,13 +1668,15 @@ moz_gtk_progress_chunk_paint(cairo_t *cr - { - GtkStyleContext* style; - -- ensure_progress_widget(); -- gtk_widget_set_direction(gProgressWidget, direction); -- -- style = gtk_widget_get_style_context(gProgressWidget); -- gtk_style_context_save(style); -- gtk_style_context_remove_class(style, GTK_STYLE_CLASS_TROUGH); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_PROGRESSBAR); -+ if (gtk_check_version(3, 20, 0) != nullptr) { -+ /* Ask for MOZ_GTK_PROGRESS_TROUGH instead of MOZ_GTK_PROGRESSBAR -+ * because ClaimStyleContext() saves/restores that style */ -+ style = ClaimStyleContext(MOZ_GTK_PROGRESS_TROUGH, direction); -+ gtk_style_context_remove_class(style, GTK_STYLE_CLASS_TROUGH); -+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_PROGRESSBAR); -+ } else { -+ style = ClaimStyleContext(MOZ_GTK_PROGRESS_CHUNK, direction); -+ } - - if (widget == MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE || - widget == MOZ_GTK_PROGRESS_CHUNK_VERTICAL_INDETERMINATE) { -@@ -1990,7 +1720,7 @@ moz_gtk_progress_chunk_paint(cairo_t *cr - } else { - gtk_render_activity(style, cr, rect->x, rect->y, rect->width, rect->height); - } -- gtk_style_context_restore(style); -+ ReleaseStyleContext(style); - - return MOZ_GTK_SUCCESS; - } -@@ -2324,10 +2054,10 @@ moz_gtk_menu_bar_paint(cairo_t *cr, GdkR - { - GtkStyleContext* style; - -- ensure_menu_bar_widget(); -- gtk_widget_set_direction(gMenuBarWidget, direction); -+ GtkWidget* widget = GetWidget(MOZ_GTK_MENUBAR); -+ gtk_widget_set_direction(widget, direction); - -- style = gtk_widget_get_style_context(gMenuBarWidget); -+ style = gtk_widget_get_style_context(widget); - gtk_style_context_save(style); - gtk_style_context_add_class(style, GTK_STYLE_CLASS_MENUBAR); - gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height); -@@ -2343,14 +2073,14 @@ moz_gtk_menu_popup_paint(cairo_t *cr, Gd - { - GtkStyleContext* style; - -- ensure_menu_popup_widget(); -- gtk_widget_set_direction(gMenuPopupWidget, direction); -+ GtkWidget* widget = GetWidget(MOZ_GTK_MENUPOPUP); -+ gtk_widget_set_direction(widget, direction); - - // Draw a backing toplevel. This fixes themes that don't provide a menu - // background, and depend on the GtkMenu's implementation window to provide it. - moz_gtk_window_paint(cr, rect, direction); - -- style = gtk_widget_get_style_context(gMenuPopupWidget); -+ style = gtk_widget_get_style_context(widget); - gtk_style_context_save(style); - gtk_style_context_add_class(style, GTK_STYLE_CLASS_MENU); - -@@ -2373,12 +2103,10 @@ moz_gtk_menu_separator_paint(cairo_t *cr - gint x, y, w; - GtkBorder padding; - -- ensure_menu_separator_widget(); -- gtk_widget_set_direction(gMenuSeparatorWidget, direction); -- -- border_width = gtk_container_get_border_width(GTK_CONTAINER(gMenuSeparatorWidget)); -- -- style = gtk_widget_get_style_context(gMenuSeparatorWidget); -+ border_width = -+ gtk_container_get_border_width(GTK_CONTAINER( -+ GetWidget(MOZ_GTK_MENUSEPARATOR))); -+ style = ClaimStyleContext(MOZ_GTK_MENUSEPARATOR, direction); - gtk_style_context_get_padding(style, GTK_STATE_FLAG_NORMAL, &padding); - - x = rect->x + border_width; -@@ -2408,42 +2136,36 @@ moz_gtk_menu_separator_paint(cairo_t *cr - } - - gtk_style_context_restore(style); -+ ReleaseStyleContext(style); - - return MOZ_GTK_SUCCESS; - } - - // See gtk_menu_item_draw() for reference. - static gint --moz_gtk_menu_item_paint(cairo_t *cr, GdkRectangle* rect, -- GtkWidgetState* state, -- gint flags, GtkTextDirection direction) -+moz_gtk_menu_item_paint(WidgetNodeType widget, cairo_t *cr, GdkRectangle* rect, -+ GtkWidgetState* state, GtkTextDirection direction) - { -- GtkStyleContext* style; -- GtkWidget* item_widget; -- guint border_width; - gint x, y, w, h; - - if (state->inHover && !state->disabled) { -- if (flags & MOZ_TOPLEVEL_MENU_ITEM) { -- ensure_menu_bar_item_widget(); -- item_widget = gMenuBarItemWidget; -- } else { -- ensure_menu_item_widget(); -- item_widget = gMenuItemWidget; -- } -- style = gtk_widget_get_style_context(item_widget); -- gtk_style_context_save(style); -+ guint border_width = -+ gtk_container_get_border_width(GTK_CONTAINER(GetWidget(widget))); -+ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); -+ GtkStyleContext* style = -+ ClaimStyleContext(widget, direction, state_flags); - -- if (flags & MOZ_TOPLEVEL_MENU_ITEM) { -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_MENUBAR); -+ bool pre_3_6 = gtk_check_version(3, 6, 0) != nullptr; -+ if (pre_3_6) { -+ // GTK+ 3.4 saves the style context and adds the menubar class to -+ // menubar children, but does each of these only when drawing, not -+ // during layout. -+ gtk_style_context_save(style); -+ if (widget == MOZ_GTK_MENUBARITEM) { -+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_MENUBAR); -+ } - } - -- gtk_widget_set_direction(item_widget, direction); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_MENUITEM); -- gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); -- -- border_width = gtk_container_get_border_width(GTK_CONTAINER(item_widget)); -- - x = rect->x + border_width; - y = rect->y + border_width; - w = rect->width - border_width * 2; -@@ -2451,7 +2173,11 @@ moz_gtk_menu_item_paint(cairo_t *cr, Gdk - - gtk_render_background(style, cr, x, y, w, h); - gtk_render_frame(style, cr, x, y, w, h); -- gtk_style_context_restore(style); -+ -+ if (pre_3_6) { -+ gtk_style_context_restore(style); -+ } -+ ReleaseStyleContext(style); - } - - return MOZ_GTK_SUCCESS; -@@ -2462,21 +2188,13 @@ moz_gtk_menu_arrow_paint(cairo_t *cr, Gd - GtkWidgetState* state, - GtkTextDirection direction) - { -- GtkStyleContext* style; - GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); -- -- ensure_menu_item_widget(); -- gtk_widget_set_direction(gMenuItemWidget, direction); -- -- style = gtk_widget_get_style_context(gMenuItemWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_MENUITEM); -- gtk_style_context_set_state(style, state_flags); -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_MENUITEM, -+ direction, state_flags); - gtk_render_arrow(style, cr, - (direction == GTK_TEXT_DIR_LTR) ? ARROW_RIGHT : ARROW_LEFT, - rect->x, rect->y, rect->width); -- gtk_style_context_restore(style); -- -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -2494,7 +2212,7 @@ moz_gtk_check_menu_item_paint(cairo_t *c - gint indicator_size, horizontal_padding; - gint x, y; - -- moz_gtk_menu_item_paint(cr, rect, state, FALSE, direction); -+ moz_gtk_menu_item_paint(MOZ_GTK_MENUITEM, cr, rect, state, direction); - - ensure_check_menu_item_widget(); - gtk_widget_set_direction(gCheckMenuItemWidget, direction); -@@ -2545,21 +2263,13 @@ static gint - moz_gtk_info_bar_paint(cairo_t *cr, GdkRectangle* rect, - GtkWidgetState* state) - { -- GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); -- GtkStyleContext *style; -- ensure_info_bar(); -- -- style = gtk_widget_get_style_context(gInfoBar); -- gtk_style_context_save(style); -- -- gtk_style_context_set_state(style, state_flags); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_INFO); -- -+ GtkStyleContext *style = -+ ClaimStyleContext(MOZ_GTK_INFO_BAR, GTK_TEXT_DIR_LTR, -+ GetStateFlagsFromGtkWidgetState(state)); - gtk_render_background(style, cr, rect->x, rect->y, rect->width, - rect->height); - gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height); -- -- gtk_style_context_restore(style); -+ ReleaseStyleContext(style); - - return MOZ_GTK_SUCCESS; - } -@@ -2605,18 +2315,18 @@ moz_gtk_get_widget_border(WidgetNodeType - case MOZ_GTK_BUTTON: - case MOZ_GTK_TOOLBAR_BUTTON: - { -- ensure_button_widget(); -- style = gtk_widget_get_style_context(gButtonWidget); -+ style = ClaimStyleContext(MOZ_GTK_BUTTON); - -- *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); -+ *left = *top = *right = *bottom = -+ gtk_container_get_border_width(GTK_CONTAINER(GetWidget(MOZ_GTK_BUTTON))); - - if (widget == MOZ_GTK_TOOLBAR_BUTTON) { - gtk_style_context_save(style); - gtk_style_context_add_class(style, "image-button"); - } -- -+ - moz_gtk_add_style_padding(style, left, top, right, bottom); -- -+ - if (widget == MOZ_GTK_TOOLBAR_BUTTON) - gtk_style_context_restore(style); - -@@ -2624,12 +2334,13 @@ moz_gtk_get_widget_border(WidgetNodeType - // -moz-focus-inner border (Bug 1228281). - *left -= 1; *top -= 1; *right -= 1; *bottom -= 1; - moz_gtk_add_style_border(style, left, top, right, bottom); -+ -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_ENTRY: - { -- ensure_entry_widget(); -- style = gtk_widget_get_style_context(gEntryWidget); -+ style = ClaimStyleContext(MOZ_GTK_ENTRY); - - // XXX: Subtract 1 pixel from the padding to account for the default - // padding in forms.css. See bug 1187385. -@@ -2637,16 +2348,15 @@ moz_gtk_get_widget_border(WidgetNodeType - moz_gtk_add_style_padding(style, left, top, right, bottom); - moz_gtk_add_style_border(style, left, top, right, bottom); - -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } -+ case MOZ_GTK_TEXT_VIEW: - case MOZ_GTK_TREEVIEW: - { -- ensure_scrolled_window_widget(); -- style = gtk_widget_get_style_context(gScrolledWindowWidget); -- gtk_style_context_save(style); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_FRAME); -+ style = ClaimStyleContext(MOZ_GTK_SCROLLED_WINDOW); - moz_gtk_add_style_border(style, left, top, right, bottom); -- gtk_style_context_restore(style); -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_TREE_HEADER_CELL: -@@ -2726,14 +2436,12 @@ moz_gtk_get_widget_border(WidgetNodeType - w = gTabWidget; - break; - case MOZ_GTK_PROGRESSBAR: -- ensure_progress_widget(); -- w = gProgressWidget; -+ w = GetWidget(MOZ_GTK_PROGRESSBAR); - break; - case MOZ_GTK_SPINBUTTON_ENTRY: - case MOZ_GTK_SPINBUTTON_UP: - case MOZ_GTK_SPINBUTTON_DOWN: -- ensure_spin_widget(); -- w = gSpinWidget; -+ w = GetWidget(MOZ_GTK_SPINBUTTON); - break; - case MOZ_GTK_SCALE_HORIZONTAL: - ensure_scale_widget(); -@@ -2744,8 +2452,7 @@ moz_gtk_get_widget_border(WidgetNodeType - w = gVScaleWidget; - break; - case MOZ_GTK_FRAME: -- ensure_frame_widget(); -- w = gFrameWidget; -+ w = GetWidget(MOZ_GTK_FRAME); - break; - case MOZ_GTK_CHECKBUTTON_CONTAINER: - case MOZ_GTK_RADIOBUTTON_CONTAINER: -@@ -2761,19 +2468,17 @@ moz_gtk_get_widget_border(WidgetNodeType - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_MENUPOPUP: -- ensure_menu_popup_widget(); -- w = gMenuPopupWidget; -+ w = GetWidget(MOZ_GTK_MENUPOPUP); - break; -+ case MOZ_GTK_MENUBARITEM: - case MOZ_GTK_MENUITEM: - case MOZ_GTK_CHECKMENUITEM: - case MOZ_GTK_RADIOMENUITEM: - { -- if (widget == MOZ_GTK_MENUITEM) { -- ensure_menu_item_widget(); -- ensure_menu_bar_item_widget(); -- w = gMenuItemWidget; -- } -- else { -+ if (widget == MOZ_GTK_MENUBARITEM || widget == MOZ_GTK_MENUITEM) { -+ // Bug 1274143 for MOZ_GTK_MENUBARITEM -+ w = GetWidget(MOZ_GTK_MENUITEM); -+ } else { - ensure_check_menu_item_widget(); - w = gCheckMenuItemWidget; - } -@@ -2784,9 +2489,16 @@ moz_gtk_get_widget_border(WidgetNodeType - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_INFO_BAR: -- ensure_info_bar(); -- w = gInfoBar; -+ w = GetWidget(MOZ_GTK_INFO_BAR); - break; -+ case MOZ_GTK_TOOLTIP: -+ { -+ style = ClaimStyleContext(MOZ_GTK_TOOLTIP); -+ moz_gtk_add_style_border(style, left, top, right, bottom); -+ moz_gtk_add_style_padding(style, left, top, right, bottom); -+ ReleaseStyleContext(style); -+ return MOZ_GTK_SUCCESS; -+ } - /* These widgets have no borders, since they are not containers. */ - case MOZ_GTK_CHECKBUTTON_LABEL: - case MOZ_GTK_RADIOBUTTON_LABEL: -@@ -2810,7 +2522,6 @@ moz_gtk_get_widget_border(WidgetNodeType - case MOZ_GTK_MENUSEPARATOR: - /* These widgets have no borders.*/ - case MOZ_GTK_SPINBUTTON: -- case MOZ_GTK_TOOLTIP: - case MOZ_GTK_WINDOW: - case MOZ_GTK_RESIZER: - case MOZ_GTK_MENUARROW: -@@ -2908,8 +2619,7 @@ moz_gtk_get_arrow_size(WidgetNodeType wi - widget = gComboBoxArrowWidget; - break; - default: -- ensure_button_arrow_widget(); -- widget = gButtonArrowWidget; -+ widget = GetWidget(MOZ_GTK_BUTTON_ARROW); - break; - } - -@@ -2924,11 +2634,9 @@ moz_gtk_get_toolbar_separator_width(gint - { - gboolean wide_separators; - gint separator_width; -- GtkStyleContext* style; - GtkBorder border; - -- ensure_toolbar_widget(); -- style = gtk_widget_get_style_context(gToolbarWidget); -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_TOOLBAR); - gtk_style_context_get_style(style, - "space-size", size, - "wide-separators", &wide_separators, -@@ -2937,17 +2645,18 @@ moz_gtk_get_toolbar_separator_width(gint - /* Just in case... */ - gtk_style_context_get_border(style, GTK_STATE_FLAG_NORMAL, &border); - *size = MAX(*size, (wide_separators ? separator_width : border.left)); -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - - gint - moz_gtk_get_expander_size(gint* size) - { -- ensure_expander_widget(); -- gtk_style_context_get_style(gtk_widget_get_style_context(gExpanderWidget), -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_EXPANDER); -+ gtk_style_context_get_style(style, - "expander-size", size, - NULL); -- -+ ReleaseStyleContext(style); - return MOZ_GTK_SUCCESS; - } - -@@ -2972,11 +2681,11 @@ moz_gtk_get_menu_separator_height(gint * - GtkStyleContext* style; - guint border_width; - -- ensure_menu_separator_widget(); -- -- border_width = gtk_container_get_border_width(GTK_CONTAINER(gMenuSeparatorWidget)); -+ border_width = -+ gtk_container_get_border_width(GTK_CONTAINER( -+ GetWidget(MOZ_GTK_MENUSEPARATOR))); - -- style = gtk_widget_get_style_context(gMenuSeparatorWidget); -+ style = ClaimStyleContext(MOZ_GTK_MENUSEPARATOR); - gtk_style_context_get_padding(style, GTK_STATE_FLAG_NORMAL, &padding); - - gtk_style_context_save(style); -@@ -2988,6 +2697,7 @@ moz_gtk_get_menu_separator_height(gint * - NULL); - - gtk_style_context_restore(style); -+ ReleaseStyleContext(style); - - *size = padding.top + padding.bottom + border_width*2; - *size += (wide_separators) ? separator_height : 1; -@@ -2998,8 +2708,7 @@ moz_gtk_get_menu_separator_height(gint * - void - moz_gtk_get_entry_min_height(gint* height) - { -- ensure_entry_widget(); -- GtkStyleContext* style = gtk_widget_get_style_context(gEntryWidget); -+ GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_ENTRY); - if (!gtk_check_version(3, 20, 0)) { - gtk_style_context_get(style, gtk_style_context_get_state(style), - "min-height", height, -@@ -3014,6 +2723,7 @@ moz_gtk_get_entry_min_height(gint* heigh - gtk_style_context_get_padding(style, GTK_STATE_FLAG_NORMAL, &padding); - - *height += (border.top + border.bottom + padding.top + padding.bottom); -+ ReleaseStyleContext(style); - } - - void -@@ -3094,8 +2804,7 @@ moz_gtk_images_in_buttons() - gboolean result; - GtkSettings* settings; - -- ensure_button_widget(); -- settings = gtk_widget_get_settings(gButtonWidget); -+ settings = gtk_widget_get_settings(GetWidget(MOZ_GTK_BUTTON)); - - g_object_get(settings, "gtk-button-images", &result, NULL); - return result; -@@ -3116,14 +2825,14 @@ moz_gtk_widget_paint(WidgetNodeType widg - case MOZ_GTK_BUTTON: - case MOZ_GTK_TOOLBAR_BUTTON: - if (state->depressed) { -- ensure_toggle_button_widget(); - return moz_gtk_button_paint(cr, rect, state, - (GtkReliefStyle) flags, -- gToggleButtonWidget, direction); -+ GetWidget(MOZ_GTK_TOGGLE_BUTTON), -+ direction); - } -- ensure_button_widget(); - return moz_gtk_button_paint(cr, rect, state, -- (GtkReliefStyle) flags, gButtonWidget, -+ (GtkReliefStyle) flags, -+ GetWidget(MOZ_GTK_BUTTON), - direction); - break; - case MOZ_GTK_CHECKBUTTON: -@@ -3171,9 +2880,9 @@ moz_gtk_widget_paint(WidgetNodeType widg - state, direction); - break; - case MOZ_GTK_SPINBUTTON_ENTRY: -- ensure_spin_widget(); -+ // TODO - use MOZ_GTK_SPINBUTTON_ENTRY style directly - return moz_gtk_entry_paint(cr, rect, state, -- gSpinWidget, direction); -+ GetWidget(MOZ_GTK_SPINBUTTON), direction); - break; - case MOZ_GTK_GRIPPER: - return moz_gtk_gripper_paint(cr, rect, state, -@@ -3198,9 +2907,11 @@ moz_gtk_widget_paint(WidgetNodeType widg - (GtkExpanderStyle) flags, direction); - break; - case MOZ_GTK_ENTRY: -- ensure_entry_widget(); -- return moz_gtk_entry_paint(cr, rect, state, -- gEntryWidget, direction); -+ return moz_gtk_entry_paint(cr, rect, state, GetWidget(MOZ_GTK_ENTRY), -+ direction); -+ break; -+ case MOZ_GTK_TEXT_VIEW: -+ return moz_gtk_text_view_paint(cr, rect, state, direction); - break; - case MOZ_GTK_DROPDOWN: - return moz_gtk_combo_box_paint(cr, rect, state, direction); -@@ -3271,9 +2982,9 @@ moz_gtk_widget_paint(WidgetNodeType widg - return moz_gtk_menu_separator_paint(cr, rect, - direction); - break; -+ case MOZ_GTK_MENUBARITEM: - case MOZ_GTK_MENUITEM: -- return moz_gtk_menu_item_paint(cr, rect, state, flags, -- direction); -+ return moz_gtk_menu_item_paint(widget, cr, rect, state, direction); - break; - case MOZ_GTK_MENUARROW: - return moz_gtk_menu_arrow_paint(cr, rect, state, -@@ -3333,25 +3044,16 @@ gboolean moz_gtk_has_scrollbar_buttons(v - gint - moz_gtk_shutdown() - { -- if (gTooltipWidget) -- gtk_widget_destroy(gTooltipWidget); - /* This will destroy all of our widgets */ -- - ResetWidgetCache(); - - /* TODO - replace it with appropriate widget */ - if (gTreeHeaderSortArrowWidget) - gtk_widget_destroy(gTreeHeaderSortArrowWidget); - -- gProtoWindow = NULL; - gProtoLayout = NULL; -- gButtonWidget = NULL; -- gToggleButtonWidget = NULL; -- gButtonArrowWidget = NULL; -- gSpinWidget = NULL; - gHScaleWidget = NULL; - gVScaleWidget = NULL; -- gEntryWidget = NULL; - gComboBoxWidget = NULL; - gComboBoxButtonWidget = NULL; - gComboBoxSeparatorWidget = NULL; -@@ -3360,29 +3062,15 @@ moz_gtk_shutdown() - gComboBoxEntryButtonWidget = NULL; - gComboBoxEntryArrowWidget = NULL; - gComboBoxEntryTextareaWidget = NULL; -- gHandleBoxWidget = NULL; -- gToolbarWidget = NULL; -- gFrameWidget = NULL; -- gProgressWidget = NULL; - gTabWidget = NULL; -- gTextViewWidget = nullptr; -- gTooltipWidget = NULL; -- gMenuBarWidget = NULL; -- gMenuBarItemWidget = NULL; -- gMenuPopupWidget = NULL; -- gMenuItemWidget = NULL; - gImageMenuItemWidget = NULL; - gCheckMenuItemWidget = NULL; - gTreeViewWidget = NULL; - gMiddleTreeViewColumn = NULL; - gTreeHeaderCellWidget = NULL; - gTreeHeaderSortArrowWidget = NULL; -- gExpanderWidget = NULL; -- gToolbarSeparatorWidget = NULL; -- gMenuSeparatorWidget = NULL; - gHPanedWidget = NULL; - gVPanedWidget = NULL; -- gScrolledWindowWidget = NULL; - - is_initialized = FALSE; - -diff -up firefox-48.0/widget/gtk/gtkdrawing.h.gtk3-20 firefox-48.0/widget/gtk/gtkdrawing.h ---- firefox-48.0/widget/gtk/gtkdrawing.h.gtk3-20 2016-07-25 22:22:07.000000000 +0200 -+++ firefox-48.0/widget/gtk/gtkdrawing.h 2016-07-29 09:15:11.822285857 +0200 -@@ -69,12 +69,6 @@ typedef enum { - MOZ_GTK_TAB_SELECTED = 1 << 10 - } GtkTabFlags; - --/** flags for menuitems **/ --typedef enum { -- /* menuitem is part of the menubar */ -- MOZ_TOPLEVEL_MENU_ITEM = 1 << 0 --} GtkMenuItemFlags; -- - /* function type for moz_gtk_enable_style_props */ - typedef gint (*style_prop_t)(GtkStyle*, const gchar*, gint); - -@@ -93,6 +87,10 @@ typedef enum { - MOZ_GTK_BUTTON, - /* Paints a button with image and no text */ - MOZ_GTK_TOOLBAR_BUTTON, -+ /* Paints a toggle button */ -+ MOZ_GTK_TOGGLE_BUTTON, -+ /* Paints a button arrow */ -+ MOZ_GTK_BUTTON_ARROW, - - /* Paints the container part of a GtkCheckButton. */ - MOZ_GTK_CHECKBUTTON_CONTAINER, -@@ -115,6 +113,7 @@ typedef enum { - - /* Horizontal GtkScrollbar counterparts */ - MOZ_GTK_SCROLLBAR_HORIZONTAL, -+ MOZ_GTK_SCROLLBAR_CONTENTS_HORIZONTAL, - /* Paints the trough (track) of a GtkScrollbar. */ - MOZ_GTK_SCROLLBAR_TROUGH_HORIZONTAL, - /* Paints the slider (thumb) of a GtkScrollbar. */ -@@ -122,6 +121,7 @@ typedef enum { - - /* Vertical GtkScrollbar counterparts */ - MOZ_GTK_SCROLLBAR_VERTICAL, -+ MOZ_GTK_SCROLLBAR_CONTENTS_VERTICAL, - MOZ_GTK_SCROLLBAR_TROUGH_VERTICAL, - MOZ_GTK_SCROLLBAR_THUMB_VERTICAL, - -@@ -140,6 +140,10 @@ typedef enum { - MOZ_GTK_GRIPPER, - /* Paints a GtkEntry. */ - MOZ_GTK_ENTRY, -+ /* Paints a GtkExpander. */ -+ MOZ_GTK_EXPANDER, -+ /* Paints a GtkTextView. */ -+ MOZ_GTK_TEXT_VIEW, - /* Paints a GtkOptionMenu. */ - MOZ_GTK_DROPDOWN, - /* Paints a dropdown arrow (a GtkButton containing a down GtkArrow). */ -@@ -159,6 +163,8 @@ typedef enum { - MOZ_GTK_RESIZER, - /* Paints a GtkProgressBar. */ - MOZ_GTK_PROGRESSBAR, -+ /* Paints a trough (track) of a GtkProgressBar */ -+ MOZ_GTK_PROGRESS_TROUGH, - /* Paints a progress chunk of a GtkProgressBar. */ - MOZ_GTK_PROGRESS_CHUNK, - /* Paints a progress chunk of an indeterminated GtkProgressBar. */ -@@ -187,7 +193,9 @@ typedef enum { - MOZ_GTK_MENUARROW, - /* Paints an arrow in a toolbar button. flags is a GtkArrowType. */ - MOZ_GTK_TOOLBARBUTTON_ARROW, -- /* Paints items of menubar and popups. */ -+ /* Paints items of menubar. */ -+ MOZ_GTK_MENUBARITEM, -+ /* Paints items of popup menus. */ - MOZ_GTK_MENUITEM, - MOZ_GTK_CHECKMENUITEM, - MOZ_GTK_RADIOMENUITEM, -@@ -202,6 +210,8 @@ typedef enum { - MOZ_GTK_WINDOW_CONTAINER, - /* Paints a GtkInfoBar, for notifications. */ - MOZ_GTK_INFO_BAR, -+ /* Used for scrolled window shell. */ -+ MOZ_GTK_SCROLLED_WINDOW, - - MOZ_GTK_WIDGET_NODE_COUNT - } WidgetNodeType; -diff -up firefox-48.0/widget/gtk/mozgtk/mozgtk.c.gtk3-20 firefox-48.0/widget/gtk/mozgtk/mozgtk.c ---- firefox-48.0/widget/gtk/mozgtk/mozgtk.c.gtk3-20 2016-07-25 22:22:07.000000000 +0200 -+++ firefox-48.0/widget/gtk/mozgtk/mozgtk.c 2016-07-29 09:15:11.823285862 +0200 -@@ -517,6 +517,7 @@ STUB(gdk_event_get_source_device) - STUB(gdk_window_get_type) - STUB(gdk_x11_window_get_xid) - STUB(gdk_x11_display_get_type) -+STUB(gtk_box_new) - STUB(gtk_cairo_should_draw_window) - STUB(gtk_cairo_transform_to_window) - STUB(gtk_combo_box_text_append) -@@ -570,6 +571,7 @@ STUB(gtk_tree_view_column_get_button) - STUB(gtk_widget_get_preferred_size) - STUB(gtk_widget_get_state_flags) - STUB(gtk_widget_get_style_context) -+STUB(gtk_widget_path_append_for_widget) - STUB(gtk_widget_path_append_type) - STUB(gtk_widget_path_copy) - STUB(gtk_widget_path_free) -@@ -587,6 +589,10 @@ STUB(gtk_color_chooser_get_type) - STUB(gtk_color_chooser_set_rgba) - STUB(gtk_color_chooser_get_rgba) - STUB(gtk_color_chooser_set_use_alpha) -+STUB(gtk_check_menu_item_new) -+STUB(gtk_style_context_get_direction) -+STUB(gtk_style_context_invalidate) -+STUB(gtk_tooltip_get_type) - #endif - - #ifdef GTK2_SYMBOLS -diff -up firefox-48.0/widget/gtk/nsLookAndFeel.cpp.gtk3-20 firefox-48.0/widget/gtk/nsLookAndFeel.cpp ---- firefox-48.0/widget/gtk/nsLookAndFeel.cpp.gtk3-20 2016-06-01 06:11:44.000000000 +0200 -+++ firefox-48.0/widget/gtk/nsLookAndFeel.cpp 2016-07-29 09:15:54.943459700 +0200 -@@ -31,6 +31,7 @@ - - #if MOZ_WIDGET_GTK != 2 - #include <cairo-gobject.h> -+#include "WidgetStyleCache.h" - #endif - - using mozilla::LookAndFeel; -@@ -1135,15 +1136,24 @@ nsLookAndFeel::Init() - gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color); - sMozWindowText = GDK_RGBA_TO_NS_RGBA(color); - gtk_style_context_restore(style); -+ g_object_unref(style); - - // tooltip foreground and background -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP); -- gtk_style_context_add_class(style, GTK_STYLE_CLASS_BACKGROUND); -+ style = ClaimStyleContext(MOZ_GTK_TOOLTIP); - gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color); - sInfoBackground = GDK_RGBA_TO_NS_RGBA(color); -- gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color); -+ { -+ GtkStyleContext* boxStyle = -+ CreateStyleForWidget(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0), -+ style); -+ GtkStyleContext* labelStyle = -+ CreateStyleForWidget(gtk_label_new(nullptr), boxStyle); -+ gtk_style_context_get_color(labelStyle, GTK_STATE_FLAG_NORMAL, &color); -+ g_object_unref(labelStyle); -+ g_object_unref(boxStyle); -+ } - sInfoText = GDK_RGBA_TO_NS_RGBA(color); -- g_object_unref(style); -+ ReleaseStyleContext(style); - - // menu foreground & menu background - GtkWidget *accel_label = gtk_accel_label_new("M"); -diff -up firefox-48.0/widget/gtk/nsNativeThemeGTK.cpp.gtk3-20 firefox-48.0/widget/gtk/nsNativeThemeGTK.cpp ---- firefox-48.0/widget/gtk/nsNativeThemeGTK.cpp.gtk3-20 2016-07-25 22:22:07.000000000 +0200 -+++ firefox-48.0/widget/gtk/nsNativeThemeGTK.cpp 2016-07-29 09:15:11.824285865 +0200 -@@ -354,10 +354,8 @@ nsNativeThemeGTK::GetGtkWidgetAndState(u - - if (isTopLevel) { - aState->inHover = menuFrame->IsOpen(); -- *aWidgetFlags |= MOZ_TOPLEVEL_MENU_ITEM; - } else { - aState->inHover = CheckBooleanAttr(aFrame, nsGkAtoms::menuactive); -- *aWidgetFlags &= ~MOZ_TOPLEVEL_MENU_ITEM; - } - - aState->active = FALSE; -@@ -510,8 +508,14 @@ nsNativeThemeGTK::GetGtkWidgetAndState(u - break; - case NS_THEME_NUMBER_INPUT: - case NS_THEME_TEXTFIELD: -+ aGtkWidgetType = MOZ_GTK_ENTRY; -+ break; - case NS_THEME_TEXTFIELD_MULTILINE: -+#if (MOZ_WIDGET_GTK == 3) -+ aGtkWidgetType = MOZ_GTK_TEXT_VIEW; -+#else - aGtkWidgetType = MOZ_GTK_ENTRY; -+#endif - break; - case NS_THEME_LISTBOX: - case NS_THEME_TREEVIEW: -@@ -673,6 +677,13 @@ nsNativeThemeGTK::GetGtkWidgetAndState(u - aGtkWidgetType = MOZ_GTK_MENUPOPUP; - break; - case NS_THEME_MENUITEM: -+ { -+ nsMenuFrame *menuFrame = do_QueryFrame(aFrame); -+ if (menuFrame && menuFrame->IsOnMenuBar()) { -+ aGtkWidgetType = MOZ_GTK_MENUBARITEM; -+ break; -+ } -+ } - aGtkWidgetType = MOZ_GTK_MENUITEM; - break; - case NS_THEME_MENUSEPARATOR: -diff -up firefox-48.0/widget/gtk/WidgetStyleCache.cpp.gtk3-20 firefox-48.0/widget/gtk/WidgetStyleCache.cpp ---- firefox-48.0/widget/gtk/WidgetStyleCache.cpp.gtk3-20 2016-07-25 22:22:07.000000000 +0200 -+++ firefox-48.0/widget/gtk/WidgetStyleCache.cpp 2016-07-29 09:15:11.825285869 +0200 -@@ -22,7 +22,7 @@ static bool sStyleContextNeedsRestore; - static GtkStyleContext* sCurrentStyleContext; - #endif - static GtkStyleContext* --GetStyleInternal(WidgetNodeType aNodeType); -+GetCssNodeStyleInternal(WidgetNodeType aNodeType); - - static GtkWidget* - CreateWindowWidget() -@@ -67,12 +67,175 @@ CreateCheckboxWidget() - static GtkWidget* - CreateRadiobuttonWidget() - { -- GtkWidget* widget = gtk_radio_button_new_with_label(NULL, "M"); -+ GtkWidget* widget = gtk_radio_button_new_with_label(nullptr, "M"); - AddToWindowContainer(widget); - return widget; - } - - static GtkWidget* -+CreateMenuBarWidget() -+{ -+ GtkWidget* widget = gtk_menu_bar_new(); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateMenuPopupWidget() -+{ -+ GtkWidget* widget = gtk_menu_new(); -+ gtk_menu_attach_to_widget(GTK_MENU(widget), GetWidget(MOZ_GTK_WINDOW), -+ nullptr); -+ return widget; -+} -+ -+static GtkWidget* -+CreateMenuItemWidget(WidgetNodeType aShellType) -+{ -+ GtkWidget* widget = gtk_menu_item_new(); -+ gtk_menu_shell_append(GTK_MENU_SHELL(GetWidget(aShellType)), widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateProgressWidget() -+{ -+ GtkWidget* widget = gtk_progress_bar_new(); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateTooltipWidget() -+{ -+ MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr, -+ "CreateTooltipWidget should be used for Gtk < 3.20 only."); -+ GtkWidget* widget = CreateWindowWidget(); -+ GtkStyleContext* style = gtk_widget_get_style_context(widget); -+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP); -+ return widget; -+} -+ -+static GtkWidget* -+CreateExpanderWidget() -+{ -+ GtkWidget* widget = gtk_expander_new("M"); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateFrameWidget() -+{ -+ GtkWidget* widget = gtk_frame_new(nullptr); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateGripperWidget() -+{ -+ GtkWidget* widget = gtk_handle_box_new(); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateToolbarWidget() -+{ -+ GtkWidget* widget = gtk_toolbar_new(); -+ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_GRIPPER)), widget); -+ gtk_widget_realize(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateToolbarSeparatorWidget() -+{ -+ GtkWidget* widget = GTK_WIDGET(gtk_separator_tool_item_new()); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateInfoBarWidget() -+{ -+ GtkWidget* widget = gtk_info_bar_new(); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateButtonWidget() -+{ -+ GtkWidget* widget = gtk_button_new_with_label("M"); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateToggleButtonWidget() -+{ -+ GtkWidget* widget = gtk_toggle_button_new(); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateButtonArrowWidget() -+{ -+ GtkWidget* widget = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT); -+ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_TOGGLE_BUTTON)), widget); -+ gtk_widget_realize(widget); -+ gtk_widget_show(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateSpinWidget() -+{ -+ GtkWidget* widget = gtk_spin_button_new(nullptr, 1, 0); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateEntryWidget() -+{ -+ GtkWidget* widget = gtk_entry_new(); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateScrolledWindowWidget() -+{ -+ GtkWidget* widget = gtk_scrolled_window_new(nullptr, nullptr); -+ AddToWindowContainer(widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateTextViewWidget() -+{ -+ GtkWidget* widget = gtk_text_view_new(); -+ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_SCROLLED_WINDOW)), -+ widget); -+ return widget; -+} -+ -+static GtkWidget* -+CreateMenuSeparatorWidget() -+{ -+ GtkWidget* widget = gtk_separator_menu_item_new(); -+ gtk_menu_shell_append(GTK_MENU_SHELL(GetWidget(MOZ_GTK_MENUPOPUP)), -+ widget); -+ gtk_widget_realize(widget); -+ return widget; -+} -+ -+ -+static GtkWidget* - CreateWidget(WidgetNodeType aWidgetType) - { - switch (aWidgetType) { -@@ -80,16 +243,54 @@ CreateWidget(WidgetNodeType aWidgetType) - return CreateWindowWidget(); - case MOZ_GTK_WINDOW_CONTAINER: - return CreateWindowContainerWidget(); -+ case MOZ_GTK_CHECKBUTTON_CONTAINER: -+ return CreateCheckboxWidget(); -+ case MOZ_GTK_PROGRESSBAR: -+ return CreateProgressWidget(); -+ case MOZ_GTK_RADIOBUTTON_CONTAINER: -+ return CreateRadiobuttonWidget(); - case MOZ_GTK_SCROLLBAR_HORIZONTAL: - return CreateScrollbarWidget(aWidgetType, - GTK_ORIENTATION_HORIZONTAL); - case MOZ_GTK_SCROLLBAR_VERTICAL: - return CreateScrollbarWidget(aWidgetType, - GTK_ORIENTATION_VERTICAL); -- case MOZ_GTK_CHECKBUTTON_CONTAINER: -- return CreateCheckboxWidget(); -- case MOZ_GTK_RADIOBUTTON_CONTAINER: -- return CreateRadiobuttonWidget(); -+ case MOZ_GTK_MENUBAR: -+ return CreateMenuBarWidget(); -+ case MOZ_GTK_MENUPOPUP: -+ return CreateMenuPopupWidget(); -+ case MOZ_GTK_MENUBARITEM: -+ return CreateMenuItemWidget(MOZ_GTK_MENUBAR); -+ case MOZ_GTK_MENUITEM: -+ return CreateMenuItemWidget(MOZ_GTK_MENUPOPUP); -+ case MOZ_GTK_MENUSEPARATOR: -+ return CreateMenuSeparatorWidget(); -+ case MOZ_GTK_EXPANDER: -+ return CreateExpanderWidget(); -+ case MOZ_GTK_FRAME: -+ return CreateFrameWidget(); -+ case MOZ_GTK_GRIPPER: -+ return CreateGripperWidget(); -+ case MOZ_GTK_TOOLBAR: -+ return CreateToolbarWidget(); -+ case MOZ_GTK_TOOLBAR_SEPARATOR: -+ return CreateToolbarSeparatorWidget(); -+ case MOZ_GTK_INFO_BAR: -+ return CreateInfoBarWidget(); -+ case MOZ_GTK_SPINBUTTON: -+ return CreateSpinWidget(); -+ case MOZ_GTK_BUTTON: -+ return CreateButtonWidget(); -+ case MOZ_GTK_TOGGLE_BUTTON: -+ return CreateToggleButtonWidget(); -+ case MOZ_GTK_BUTTON_ARROW: -+ return CreateButtonArrowWidget(); -+ case MOZ_GTK_ENTRY: -+ return CreateEntryWidget(); -+ case MOZ_GTK_SCROLLED_WINDOW: -+ return CreateScrolledWindowWidget(); -+ case MOZ_GTK_TEXT_VIEW: -+ return CreateTextViewWidget(); - default: - /* Not implemented */ - return nullptr; -@@ -107,17 +308,42 @@ GetWidget(WidgetNodeType aWidgetType) - return widget; - } - --static GtkStyleContext* --CreateCSSNode(const char* aName, GtkStyleContext *aParentStyle) -+GtkStyleContext* -+CreateStyleForWidget(GtkWidget* aWidget, GtkStyleContext* aParentStyle) -+{ -+ GtkWidgetPath* path = aParentStyle ? -+ gtk_widget_path_copy(gtk_style_context_get_path(aParentStyle)) : -+ gtk_widget_path_new(); -+ -+ // Work around https://bugzilla.gnome.org/show_bug.cgi?id=767312 -+ // which exists in GTK+ 3.20. -+ gtk_widget_get_style_context(aWidget); -+ -+ gtk_widget_path_append_for_widget(path, aWidget); -+ // Release any floating reference on aWidget. -+ g_object_ref_sink(aWidget); -+ g_object_unref(aWidget); -+ -+ GtkStyleContext *context = gtk_style_context_new(); -+ gtk_style_context_set_path(context, path); -+ gtk_style_context_set_parent(context, aParentStyle); -+ gtk_widget_path_unref(path); -+ -+ return context; -+} -+ -+GtkStyleContext* -+CreateCSSNode(const char* aName, GtkStyleContext* aParentStyle, GType aType) - { - static auto sGtkWidgetPathIterSetObjectName = - reinterpret_cast<void (*)(GtkWidgetPath *, gint, const char *)> - (dlsym(RTLD_DEFAULT, "gtk_widget_path_iter_set_object_name")); - -- GtkWidgetPath* path = -- gtk_widget_path_copy(gtk_style_context_get_path(aParentStyle)); -+ GtkWidgetPath* path = aParentStyle ? -+ gtk_widget_path_copy(gtk_style_context_get_path(aParentStyle)) : -+ gtk_widget_path_new(); - -- gtk_widget_path_append_type(path, G_TYPE_NONE); -+ gtk_widget_path_append_type(path, aType); - - (*sGtkWidgetPathIterSetObjectName)(path, -1, aName); - -@@ -130,95 +356,168 @@ CreateCSSNode(const char* aName, GtkStyl - } - - static GtkStyleContext* --GetChildNodeStyle(WidgetNodeType aStyleType, -- WidgetNodeType aWidgetType, -- const gchar* aStyleClass, -- WidgetNodeType aParentNodeType) -+CreateChildCSSNode(const char* aName, WidgetNodeType aParentNodeType) - { -- GtkStyleContext* style; -- -- if (gtk_check_version(3, 20, 0) != nullptr) { -- style = gtk_widget_get_style_context(sWidgetStorage[aWidgetType]); -- -- gtk_style_context_save(style); -- MOZ_ASSERT(!sStyleContextNeedsRestore); -- sStyleContextNeedsRestore = true; -- -- gtk_style_context_add_class(style, aStyleClass); -- } -- else { -- style = sStyleStorage[aStyleType]; -- if (!style) { -- style = CreateCSSNode(aStyleClass, GetStyleInternal(aParentNodeType)); -- MOZ_ASSERT(!sStyleContextNeedsRestore); -- sStyleStorage[aStyleType] = style; -- } -- } -+ return CreateCSSNode(aName, GetCssNodeStyleInternal(aParentNodeType)); -+} - -+static GtkStyleContext* -+GetWidgetStyleWithClass(WidgetNodeType aWidgetType, const gchar* aStyleClass) -+{ -+ GtkStyleContext* style = gtk_widget_get_style_context(GetWidget(aWidgetType)); -+ gtk_style_context_save(style); -+ MOZ_ASSERT(!sStyleContextNeedsRestore); -+ sStyleContextNeedsRestore = true; -+ gtk_style_context_add_class(style, aStyleClass); - return style; - } - -+/* GetCssNodeStyleInternal is used by Gtk >= 3.20 */ - static GtkStyleContext* --GetStyleInternal(WidgetNodeType aNodeType) -+GetCssNodeStyleInternal(WidgetNodeType aNodeType) - { -+ GtkStyleContext* style = sStyleStorage[aNodeType]; -+ if (style) -+ return style; -+ - switch (aNodeType) { -- case MOZ_GTK_SCROLLBAR_HORIZONTAL: -- /* Root CSS node / widget for scrollbars */ -+ case MOZ_GTK_SCROLLBAR_CONTENTS_HORIZONTAL: -+ style = CreateChildCSSNode("contents", -+ MOZ_GTK_SCROLLBAR_HORIZONTAL); - break; - case MOZ_GTK_SCROLLBAR_TROUGH_HORIZONTAL: -- return GetChildNodeStyle(aNodeType, -- MOZ_GTK_SCROLLBAR_HORIZONTAL, -- GTK_STYLE_CLASS_TROUGH, -- MOZ_GTK_SCROLLBAR_HORIZONTAL); -- -+ style = CreateChildCSSNode(GTK_STYLE_CLASS_TROUGH, -+ MOZ_GTK_SCROLLBAR_CONTENTS_HORIZONTAL); -+ break; - case MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL: -- return GetChildNodeStyle(aNodeType, -- MOZ_GTK_SCROLLBAR_HORIZONTAL, -- GTK_STYLE_CLASS_SLIDER, -- MOZ_GTK_SCROLLBAR_TROUGH_HORIZONTAL); -- -- case MOZ_GTK_SCROLLBAR_VERTICAL: -- /* Root CSS node / widget for scrollbars */ -+ style = CreateChildCSSNode(GTK_STYLE_CLASS_SLIDER, -+ MOZ_GTK_SCROLLBAR_TROUGH_HORIZONTAL); -+ break; -+ case MOZ_GTK_SCROLLBAR_CONTENTS_VERTICAL: -+ style = CreateChildCSSNode("contents", -+ MOZ_GTK_SCROLLBAR_VERTICAL); - break; - case MOZ_GTK_SCROLLBAR_TROUGH_VERTICAL: -- return GetChildNodeStyle(aNodeType, -- MOZ_GTK_SCROLLBAR_VERTICAL, -- GTK_STYLE_CLASS_TROUGH, -- MOZ_GTK_SCROLLBAR_VERTICAL); -- -+ style = CreateChildCSSNode(GTK_STYLE_CLASS_TROUGH, -+ MOZ_GTK_SCROLLBAR_CONTENTS_VERTICAL); -+ break; - case MOZ_GTK_SCROLLBAR_THUMB_VERTICAL: -- return GetChildNodeStyle(aNodeType, -- MOZ_GTK_SCROLLBAR_VERTICAL, -- GTK_STYLE_CLASS_SLIDER, -- MOZ_GTK_SCROLLBAR_TROUGH_VERTICAL); -- -- case MOZ_GTK_RADIOBUTTON_CONTAINER: -- /* Root CSS node / widget for checkboxes */ -+ style = CreateChildCSSNode(GTK_STYLE_CLASS_SLIDER, -+ MOZ_GTK_SCROLLBAR_TROUGH_VERTICAL); - break; - case MOZ_GTK_RADIOBUTTON: -- return GetChildNodeStyle(aNodeType, -- MOZ_GTK_RADIOBUTTON_CONTAINER, -- GTK_STYLE_CLASS_RADIO, -- MOZ_GTK_RADIOBUTTON_CONTAINER); -- case MOZ_GTK_CHECKBUTTON_CONTAINER: -- /* Root CSS node / widget for radiobuttons */ -+ style = CreateChildCSSNode(GTK_STYLE_CLASS_RADIO, -+ MOZ_GTK_RADIOBUTTON_CONTAINER); - break; - case MOZ_GTK_CHECKBUTTON: -- return GetChildNodeStyle(aNodeType, -- MOZ_GTK_CHECKBUTTON_CONTAINER, -- GTK_STYLE_CLASS_CHECK, -- MOZ_GTK_CHECKBUTTON_CONTAINER); -- default: -+ style = CreateChildCSSNode(GTK_STYLE_CLASS_CHECK, -+ MOZ_GTK_CHECKBUTTON_CONTAINER); -+ break; -+ case MOZ_GTK_PROGRESS_TROUGH: -+ /* Progress bar background (trough) */ -+ style = CreateChildCSSNode(GTK_STYLE_CLASS_TROUGH, -+ MOZ_GTK_PROGRESSBAR); -+ break; -+ case MOZ_GTK_PROGRESS_CHUNK: -+ style = CreateChildCSSNode("progress", -+ MOZ_GTK_PROGRESS_TROUGH); - break; -+ case MOZ_GTK_TOOLTIP: -+ // We create this from the path because GtkTooltipWindow is not public. -+ style = CreateCSSNode("tooltip", nullptr, GTK_TYPE_TOOLTIP); -+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_BACKGROUND); -+ break; -+ case MOZ_GTK_GRIPPER: -+ // TODO - create from CSS node -+ return GetWidgetStyleWithClass(MOZ_GTK_GRIPPER, -+ GTK_STYLE_CLASS_GRIP); -+ case MOZ_GTK_INFO_BAR: -+ // TODO - create from CSS node -+ return GetWidgetStyleWithClass(MOZ_GTK_INFO_BAR, -+ GTK_STYLE_CLASS_INFO); -+ case MOZ_GTK_SPINBUTTON_ENTRY: -+ // TODO - create from CSS node -+ return GetWidgetStyleWithClass(MOZ_GTK_SPINBUTTON, -+ GTK_STYLE_CLASS_ENTRY); -+ case MOZ_GTK_SCROLLED_WINDOW: -+ // TODO - create from CSS node -+ return GetWidgetStyleWithClass(MOZ_GTK_SCROLLED_WINDOW, -+ GTK_STYLE_CLASS_FRAME); -+ case MOZ_GTK_TEXT_VIEW: -+ // TODO - create from CSS node -+ return GetWidgetStyleWithClass(MOZ_GTK_TEXT_VIEW, -+ GTK_STYLE_CLASS_VIEW); -+ default: -+ // TODO - create style from style path -+ GtkWidget* widget = GetWidget(aNodeType); -+ return gtk_widget_get_style_context(widget); - } - -- GtkWidget* widget = GetWidget(aNodeType); -- if (widget) { -- return gtk_widget_get_style_context(widget); -- } -+ MOZ_ASSERT(style, "missing style context for node type"); -+ sStyleStorage[aNodeType] = style; -+ return style; -+} - -- MOZ_ASSERT_UNREACHABLE("missing style context for node type"); -- return nullptr; -+/* GetWidgetStyleInternal is used by Gtk < 3.20 */ -+static GtkStyleContext* -+GetWidgetStyleInternal(WidgetNodeType aNodeType) -+{ -+ switch (aNodeType) { -+ case MOZ_GTK_SCROLLBAR_TROUGH_HORIZONTAL: -+ return GetWidgetStyleWithClass(MOZ_GTK_SCROLLBAR_HORIZONTAL, -+ GTK_STYLE_CLASS_TROUGH); -+ case MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL: -+ return GetWidgetStyleWithClass(MOZ_GTK_SCROLLBAR_HORIZONTAL, -+ GTK_STYLE_CLASS_SLIDER); -+ case MOZ_GTK_SCROLLBAR_TROUGH_VERTICAL: -+ return GetWidgetStyleWithClass(MOZ_GTK_SCROLLBAR_VERTICAL, -+ GTK_STYLE_CLASS_TROUGH); -+ case MOZ_GTK_SCROLLBAR_THUMB_VERTICAL: -+ return GetWidgetStyleWithClass(MOZ_GTK_SCROLLBAR_VERTICAL, -+ GTK_STYLE_CLASS_SLIDER); -+ case MOZ_GTK_RADIOBUTTON: -+ return GetWidgetStyleWithClass(MOZ_GTK_RADIOBUTTON_CONTAINER, -+ GTK_STYLE_CLASS_RADIO); -+ case MOZ_GTK_CHECKBUTTON: -+ return GetWidgetStyleWithClass(MOZ_GTK_CHECKBUTTON_CONTAINER, -+ GTK_STYLE_CLASS_CHECK); -+ case MOZ_GTK_PROGRESS_TROUGH: -+ return GetWidgetStyleWithClass(MOZ_GTK_PROGRESSBAR, -+ GTK_STYLE_CLASS_TROUGH); -+ case MOZ_GTK_TOOLTIP: { -+ GtkStyleContext* style = sStyleStorage[aNodeType]; -+ if (style) -+ return style; -+ -+ // The tooltip style class is added first in CreateTooltipWidget() so -+ // that gtk_widget_path_append_for_widget() in CreateStyleForWidget() -+ // will find it. -+ GtkWidget* tooltipWindow = CreateTooltipWidget(); -+ style = CreateStyleForWidget(tooltipWindow, nullptr); -+ gtk_widget_destroy(tooltipWindow); // Release GtkWindow self-reference. -+ sStyleStorage[aNodeType] = style; -+ return style; -+ } -+ case MOZ_GTK_GRIPPER: -+ return GetWidgetStyleWithClass(MOZ_GTK_GRIPPER, -+ GTK_STYLE_CLASS_GRIP); -+ case MOZ_GTK_INFO_BAR: -+ return GetWidgetStyleWithClass(MOZ_GTK_INFO_BAR, -+ GTK_STYLE_CLASS_INFO); -+ case MOZ_GTK_SPINBUTTON_ENTRY: -+ return GetWidgetStyleWithClass(MOZ_GTK_SPINBUTTON, -+ GTK_STYLE_CLASS_ENTRY); -+ case MOZ_GTK_SCROLLED_WINDOW: -+ return GetWidgetStyleWithClass(MOZ_GTK_SCROLLED_WINDOW, -+ GTK_STYLE_CLASS_FRAME); -+ case MOZ_GTK_TEXT_VIEW: -+ return GetWidgetStyleWithClass(MOZ_GTK_TEXT_VIEW, -+ GTK_STYLE_CLASS_VIEW); -+ default: -+ GtkWidget* widget = GetWidget(aNodeType); -+ MOZ_ASSERT(widget); -+ return gtk_widget_get_style_context(widget); -+ } - } - - void -@@ -245,13 +544,39 @@ ResetWidgetCache(void) - - GtkStyleContext* - ClaimStyleContext(WidgetNodeType aNodeType, GtkTextDirection aDirection, -- StyleFlags aFlags) -+ GtkStateFlags aStateFlags, StyleFlags aFlags) - { -- GtkStyleContext* style = GetStyleInternal(aNodeType); -+ MOZ_ASSERT(!sStyleContextNeedsRestore); -+ GtkStyleContext* style; -+ if (gtk_check_version(3, 20, 0) != nullptr) { -+ style = GetWidgetStyleInternal(aNodeType); -+ } else { -+ style = GetCssNodeStyleInternal(aNodeType); -+ } - #ifdef DEBUG - MOZ_ASSERT(!sCurrentStyleContext); - sCurrentStyleContext = style; - #endif -+ GtkStateFlags oldState = gtk_style_context_get_state(style); -+ GtkTextDirection oldDirection = gtk_style_context_get_direction(style); -+ if (oldState != aStateFlags || oldDirection != aDirection) { -+ // From GTK 3.8, set_state() will overwrite the direction, so set -+ // direction after state. -+ gtk_style_context_set_state(style, aStateFlags); -+ gtk_style_context_set_direction(style, aDirection); -+ -+ // This invalidate is necessary for unsaved style contexts from GtkWidgets -+ // in pre-3.18 GTK, because automatic invalidation of such contexts -+ // was delayed until a resize event runs. -+ // -+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1272194#c7 -+ // -+ // Avoid calling invalidate on saved contexts to avoid performing -+ // build_properties() (in 3.16 stylecontext.c) unnecessarily early. -+ if (!sStyleContextNeedsRestore) { -+ gtk_style_context_invalidate(style); -+ } -+ } - return style; - } - -diff -up firefox-48.0/widget/gtk/WidgetStyleCache.h.gtk3-20 firefox-48.0/widget/gtk/WidgetStyleCache.h ---- firefox-48.0/widget/gtk/WidgetStyleCache.h.gtk3-20 2016-07-25 22:22:07.000000000 +0200 -+++ firefox-48.0/widget/gtk/WidgetStyleCache.h 2016-07-29 09:15:11.825285869 +0200 -@@ -21,10 +21,24 @@ enum : StyleFlags { - GtkWidget* - GetWidget(WidgetNodeType aNodeType); - -+/* -+ * Return a new style context based on aWidget, as a child of aParentStyle. -+ * If aWidget still has a floating reference, then it is sunk and released. -+ */ -+GtkStyleContext* -+CreateStyleForWidget(GtkWidget* aWidget, GtkStyleContext* aParentStyle); -+ -+// CreateCSSNode is implemented for gtk >= 3.20 only. -+GtkStyleContext* -+CreateCSSNode(const char* aName, -+ GtkStyleContext* aParentStyle, -+ GType aType = G_TYPE_NONE); -+ - // Callers must call ReleaseStyleContext() on the returned context. - GtkStyleContext* - ClaimStyleContext(WidgetNodeType aNodeType, - GtkTextDirection aDirection = GTK_TEXT_DIR_LTR, -+ GtkStateFlags aStateFlags = GTK_STATE_FLAG_NORMAL, - StyleFlags aFlags = NO_STYLE_FLAGS); - void - ReleaseStyleContext(GtkStyleContext* style); diff --git a/libre-testing/iceweasel/iceweasel.desktop b/libre-testing/iceweasel/iceweasel.desktop index a3bcb5b79..028aeffde 100644 --- a/libre-testing/iceweasel/iceweasel.desktop +++ b/libre-testing/iceweasel/iceweasel.desktop @@ -1,4 +1,5 @@ [Desktop Entry] +Version=1.0 Name=Iceweasel GenericName=Web Browser GenericName[ar]=متصفح ويب @@ -7,6 +8,7 @@ GenericName[bn]=ওয়েব ব্রাউজার GenericName[ca]=Navegador web GenericName[cs]=Webový prohlížeč GenericName[da]=Webbrowser +GenericName[de]=Webbrowser GenericName[el]=Περιηγητής διαδικτύου GenericName[es]=Navegador web GenericName[et]=Veebibrauser @@ -17,7 +19,7 @@ GenericName[gl]=Navegador Web GenericName[he]=דפדפן אינטרנט GenericName[hr]=Web preglednik GenericName[hu]=Webböngésző -GenericName[it]=Browser web +GenericName[it]=Browser Web GenericName[ja]=ウェブ・ブラウザ GenericName[ko]=웹 브라우저 GenericName[ku]=Geroka torê @@ -40,11 +42,11 @@ GenericName[uk]=Веб-браузер GenericName[vi]=Trình duyệt Web GenericName[zh_CN]=网络浏览器 GenericName[zh_TW]=網路瀏覽器 -Comment=Browse the World Wide Web +Comment=Browse the Web Comment[ar]=تصفح الشبكة العنكبوتية العالمية Comment[ast]=Restola pela Rede Comment[bn]=ইন্টারনেট ব্রাউজ করুন -Comment[ca]=Navegueu per la web +Comment[ca]=Navegueu per el web Comment[cs]=Prohlížení stránek World Wide Webu Comment[da]=Surf på internettet Comment[de]=Im Internet surfen @@ -82,210 +84,150 @@ Comment[vi]=Để duyệt các trang web Comment[zh_CN]=浏览互联网 Comment[zh_TW]=瀏覽網際網路 Exec=iceweasel %u +Icon=iceweasel Terminal=false Type=Application -Icon=iceweasel -Categories=Network;WebBrowser; -MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp; +MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https; StartupNotify=true -Actions=NewTab;NewWindow;NewPrivateWindow; - -[Desktop Action NewTab] -Name=Open new tab -Name[ach]=Yab dirica matidi manyen -Name[af]=Open nuwe oortjie -Name[an]=Ubrir una pestanya nueva -Name[ar]=افتح لسانًا جديدًا -Name[as]=নতুন টেব খোলক -Name[ast]=Abrir llingüeta nueva -Name[az]=Yeni vərəq aç -Name[be]=Адкрыць новую ўстаўку -Name[bg]=Отваряне на нов подпрозорец -Name[bn_BD]=নতুন ট্যাব খুলুন -Name[bn_IN]=নতুন ট্যাব খুলুন -Name[br]=Digeriñ un ivinell nevez -Name[bs]=Otvori novi tab -Name[ca]=Obre una pestanya nova -Name[cs]=Otevřít nový panel -Name[cy]=Agor tab newydd -Name[da]=Åbn nyt faneblad -Name[de]=Neuen Tab öffnen -Name[dsb]=Nowy rejtark wócyniś -Name[el]=Άνοιγμα νέας καρτέλας -Name[eo]=Malfermi novan langeton -Name[es_AR]=Abrir nueva pestaña -Name[es_CL]=Abrir nueva pestaña -Name[es_ES]=Abrir pestaña nueva -Name[es_MX]=Abrir una pestaña nueva -Name[et]=Ava uus kaart -Name[eu]=Ireki fitxa berria -Name[ff]=Uddit tabbere hesere -Name[fi]=Avaa uusi välilehti -Name[fr]=Ouvrir un nouvel onglet -Name[fy_NL]=Iepenje nij ljepblêd -Name[ga_IE]=Oscail i gcluaisín nua -Name[gd]=Fosgail taba ùr -Name[gl]=Abrir unha nova lapela -Name[gu_IN]=નવી ટૅબને ખોલો -Name[he]=פתיחת לשונית חדשה -Name[hi_IN]=नया टैब खोलें -Name[hr]=Otvori novu karticu -Name[hsb]=Nowy rajtark wočinić -Name[hu]=Új lap megnyitása -Name[hy_AM]=Բացել նոր ներդիր -Name[id]=Buka tab baru -Name[is]=Opna nýjan flipa -Name[it]=Apri nuova scheda -Name[ja]=新しいタブ -Name[kk]=Жаңа бетті ашу -Name[kn]=ಹೊಸ ಹಾಳೆಯನ್ನು ತೆರೆ -Name[ko]=새 탭 열기 -Name[lij]=Àrvi nêuvo féuggio -Name[lt]=Atverti naują kortelę -Name[mai]=नव टैब खोलू -Name[mk]=Отвори ново јазиче -Name[ml]=പുതിയ റ്റാബ് തുറക്കുക -Name[mr]=नवीन टॅब उघडा -Name[ms]=Buka tab baru -Name[nb_NO]=Åpne ny fane -Name[nl]=Nieuw tabblad openen -Name[nn_NO]=Opna ny fane -Name[or]=ନୂତନ ଟ୍ୟାବ ଖୋଲନ୍ତୁ -Name[pa_IN]=ਨਵੀਂ ਟੈਬ ਖੋਲ੍ਹੋ -Name[pl]=Otwórz nową kartę -Name[pt_BR]=Nova aba -Name[pt_PT]=Abrir novo separador -Name[rm]=Avrir in nov tab -Name[ro]=Deschide o filă nouă -Name[ru]=Открыть новую вкладку -Name[si]=නව ටැබය විවෘත කරන්න -Name[sk]=Otvoriť novú kartu -Name[sl]=Odpri nov zavihek -Name[son]=Nor loku taaga feeri -Name[sq]=Hap skedë të re -Name[sr]=Отвори нови језичак -Name[sv_SE]=Öppna ny flik -Name[ta]=புதிய கீற்றைத் திற -Name[te]=కొత్త టాబ్ తెరువుము -Name[th]=เปิดแท็บใหม่ -Name[tr]=Yeni sekme aç -Name[uk]=Відкрити нову вкладку -Name[uz]=Yangi ichki oyna ochish -Name[vi]=Mở thẻ mới -Name[xh]=Vula ithebhu entsha -Name[zh_CN]=打开新标签页 -Name[zh_TW]=開啟新分頁 -Exec=iceweasel -new-tab about:newtab +Categories=Network;WebBrowser; +Keywords=web;browser;internet; +Actions=new-window;new-private-window; -[Desktop Action NewWindow] -Name=Open new window -Name[ach]=Yab dirica manyen -Name[af]=Open nuwe venster -Name[an]=Ubrir una nueva finestra -Name[ar]=افتح نافذة جديدة -Name[as]=নতুন উইন্ডো খোলক -Name[ast]=Abrir ventana nueva -Name[az]=Yeni pəncərə aç -Name[be]=Адкрыць новае акно -Name[bg]=Отваряне на нов прозорец -Name[bn_BD]=নতুন উইন্ডো খুলুন -Name[bn_IN]=নতুন উইন্ডো খুলুন -Name[br]=Digeriñ ur prenestr nevez -Name[bs]=Otvori novi prozor -Name[ca]=Obre una finestra nova -Name[cs]=Otevřít nové okno -Name[cy]=Agor ffenestr newydd -Name[da]=Åbn nyt vindue -Name[de]=Neues Fenster öffnen -Name[dsb]=Nowe wokno wócyniś -Name[el]=Άνοιγμα νέου παραθύρου -Name[eo]=Malfermi novan fenestron -Name[es_AR]=Abrir nueva ventana -Name[es_CL]=Abrir nueva ventana -Name[es_ES]=Abrir nueva ventana -Name[es_MX]=Abrir nueva ventana -Name[et]=Ava uus aken -Name[eu]=Ireki leiho berria -Name[ff]=Uddit henorde hesere -Name[fi]=Avaa uusi ikkuna -Name[fr]=Ouvrir une nouvelle fenêtre -Name[fy_NL]=Iepenje nij finster -Name[ga_IE]=Oscail fuinneog nua -Name[gd]=Fosgail uinneag ùr -Name[gl]=Abrir unha nova xanela -Name[gu_IN]=નવી વિન્ડોને ખોલો -Name[he]=פתח חלון חדש -Name[hi_IN]=नई विंडो खोलें -Name[hr]=Otvori novi prozor -Name[hsb]=Nowe wokno wočinić -Name[hu]=Új ablak megnyitása -Name[hy_AM]=Բացել նոր պատուհան -Name[id]=Buka jendela baru -Name[is]=Opna nýjan glugga -Name[it]=Apri nuova finestra +[Desktop Action new-window] +Name=New Window +Name[ach]=Dirica manyen +Name[af]=Nuwe venster +Name[an]=Nueva finestra +Name[ar]=نافذة جديدة +Name[as]=নতুন উইন্ডো +Name[ast]=Ventana nueva +Name[az]=Yeni Pəncərə +Name[be]=Новае акно +Name[bg]=Нов прозорец +Name[bn_BD]=নতুন উইন্ডো (N) +Name[bn_IN]=নতুন উইন্ডো +Name[br]=Prenestr nevez +Name[brx]=गोदान उइन्ड'(N) +Name[bs]=Novi prozor +Name[ca]=Finestra nova +Name[cak]=K'ak'a' tzuwäch +Name[cs]=Nové okno +Name[cy]=Ffenestr Newydd +Name[da]=Nyt vindue +Name[de]=Neues Fenster +Name[dsb]=Nowe wokno +Name[el]=Νέο παράθυρο +Name[en_GB]=New Window +Name[en_US]=New Window +Name[en_ZA]=New Window +Name[eo]=Nova fenestro +Name[es_AR]=Nueva ventana +Name[es_CL]=Nueva ventana +Name[es_ES]=Nueva ventana +Name[es_MX]=Nueva ventana +Name[et]=Uus aken +Name[eu]=Leiho berria +Name[fa]=پنجره جدید +Name[ff]=Henorde Hesere +Name[fi]=Uusi ikkuna +Name[fr]=Nouvelle fenêtre +Name[fy_NL]=Nij finster +Name[ga_IE]=Fuinneog Nua +Name[gd]=Uinneag ùr +Name[gl]=Nova xanela +Name[gn]=Ovetã pyahu +Name[gu_IN]=નવી વિન્ડો +Name[he]=חלון חדש +Name[hi_IN]=नया विंडो +Name[hr]=Novi prozor +Name[hsb]=Nowe wokno +Name[hu]=Új ablak +Name[hy_AM]=Նոր Պատուհան +Name[id]=Jendela Baru +Name[is]=Nýr gluggi +Name[it]=Nuova finestra Name[ja]=新しいウィンドウ -Name[kk]=Жаңа терезені ашу -Name[kn]=ಹೊಸ ವಿಂಡೊವನ್ನು ತೆರೆ -Name[ko]=새 창 열기 -Name[lij]=Àrvi nêuvo barcón -Name[lt]=Atverti naują langą -Name[mai]=नई विंडो खोलू -Name[mk]=Отвори нов прозорец -Name[ml]=പുതിയ ജാലകം തുറക്കുക -Name[mr]=नवीन पटल उघडा -Name[ms]=Buka tetingkap baru -Name[nb_NO]=Åpne nytt vindu -Name[nl]=Een nieuw venster openen -Name[nn_NO]=Opna nytt vindauge -Name[or]=ନୂତନ ୱିଣ୍ଡୋ ଖୋଲନ୍ତୁ -Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ ਖੋਲ੍ਹੋ -Name[pl]=Otwórz nowe okno +Name[ja_JP-mac]=新規ウインドウ +Name[ka]=ახალი ფანჯარა +Name[kk]=Жаңа терезе +Name[km]=បង្អួចថ្មី +Name[kn]=ಹೊಸ ಕಿಟಕಿ +Name[ko]=새 창 +Name[kok]=नवें जनेल +Name[ks]=نئئ وِنڈو +Name[lij]=Neuvo barcon +Name[lo]=ຫນ້າຕ່າງໃຫມ່ +Name[lt]=Naujas langas +Name[ltg]=Jauns lūgs +Name[lv]=Jauns logs +Name[mai]=नव विंडो +Name[mk]=Нов прозорец +Name[ml]=പുതിയ ജാലകം +Name[mr]=नवीन पटल +Name[ms]=Tetingkap Baru +Name[my]=ဝင်းဒိုးအသစ် +Name[nb_NO]=Nytt vindu +Name[ne_NP]=नयाँ सञ्झ्याल +Name[nl]=Nieuw venster +Name[nn_NO]=Nytt vindauge +Name[or]=ନୂତନ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ +Name[pl]=Nowe okno Name[pt_BR]=Nova janela -Name[pt_PT]=Abrir nova janela -Name[rm]=Avrir ina nova fanestra -Name[ro]=Deschide o nouă fereastră -Name[ru]=Открыть новое окно -Name[si]=නව කවුළුවක් විවෘත කරන්න -Name[sk]=Otvoriť nové okno -Name[sl]=Odpri novo okno -Name[son]=Zanfun taaga feeri -Name[sq]=Hap dritare të re -Name[sr]=Отвори нови прозор -Name[sv_SE]=Öppna nytt fönster -Name[ta]=புதிய சாளரத்தை திற -Name[te]=కొత్త విండో తెరువుము -Name[th]=เปิดหน้าต่างใหม่ -Name[tr]=Yeni pencere aç -Name[uk]=Відкрити нове вікно -Name[uz]=Yangi oyna ochish -Name[vi]=Mở cửa sổ mới -Name[xh]=Vula iwindow entsha -Name[zh_CN]=打开新窗口 -Name[zh_TW]=開啟新視窗 -Exec=iceweasel -new-window +Name[pt_PT]=Nova janela +Name[rm]=Nova fanestra +Name[ro]=Fereastră nouă +Name[ru]=Новое окно +Name[sat]=नावा विंडो (N) +Name[si]=නව කවුළුවක් +Name[sk]=Nové okno +Name[sl]=Novo okno +Name[son]=Zanfun taaga +Name[sq]=Dritare e Re +Name[sr]=Нови прозор +Name[sv_SE]=Nytt fönster +Name[ta]=புதிய சாளரம் +Name[te]=కొత్త విండో +Name[th]=หน้าต่างใหม่ +Name[tr]=Yeni pencere +Name[tsz]=Eraatarakua jimpani +Name[uk]=Нове вікно +Name[ur]=نیا دریچہ +Name[uz]=Yangi oyna +Name[vi]=Cửa sổ mới +Name[wo]=Palanteer bu bees +Name[xh]=Ifestile entsha +Name[zh_CN]=新建窗口 +Name[zh_TW]=開新視窗 +Exec=iceweasel --new-window %u -[Desktop Action NewPrivateWindow] -Name=New private window +[Desktop Action new-private-window] +Name=New Private Window Name[ach]=Dirica manyen me mung Name[af]=Nuwe privaatvenster -Name[an]=Nueva finestra de navegación privada +Name[an]=Nueva finestra privada Name[ar]=نافذة خاصة جديدة Name[as]=নতুন ব্যক্তিগত উইন্ডো Name[ast]=Ventana privada nueva -Name[az]=Yeni məxfi pəncərə +Name[az]=Yeni Məxfi Pəncərə Name[be]=Новае акно адасаблення Name[bg]=Нов прозорец за поверително сърфиране Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো -Name[bn_IN]=নতুন ব্যাক্তিগত উইন্ডো +Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো Name[br]=Prenestr merdeiñ prevez nevez +Name[brx]=गोदान प्राइभेट उइन्ड' Name[bs]=Novi privatni prozor Name[ca]=Finestra privada nova +Name[cak]=K'ak'a' ichinan tzuwäch Name[cs]=Nové anonymní okno -Name[cy]=Ffenestr breifat newydd +Name[cy]=Ffenestr Breifat Newydd Name[da]=Nyt privat vindue -Name[de]=Neues privates Fenster öffnen +Name[de]=Neues privates Fenster Name[dsb]=Nowe priwatne wokno Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης +Name[en_GB]=New Private Window +Name[en_US]=New Private Window +Name[en_ZA]=New Private Window Name[eo]=Nova privata fenestro Name[es_AR]=Nueva ventana privada Name[es_CL]=Nueva ventana privada @@ -293,60 +235,76 @@ Name[es_ES]=Nueva ventana privada Name[es_MX]=Nueva ventana privada Name[et]=Uus privaatne aken Name[eu]=Leiho pribatu berria -Name[ff]=Henorde suturo hesere +Name[fa]=پنجره ناشناس جدید +Name[ff]=Henorde Suturo Hesere Name[fi]=Uusi yksityinen ikkuna Name[fr]=Nouvelle fenêtre de navigation privée Name[fy_NL]=Nij priveefinster -Name[ga_IE]=Fuinneog nua phríobháideach +Name[ga_IE]=Fuinneog Nua Phríobháideach Name[gd]=Uinneag phrìobhaideach ùr Name[gl]=Nova xanela privada +Name[gn]=Ovetã ñemi pyahu Name[gu_IN]=નવી ખાનગી વિન્ડો Name[he]=חלון פרטי חדש -Name[hi_IN]=नया निजी विंडो +Name[hi_IN]=नयी निजी विंडो Name[hr]=Novi privatni prozor Name[hsb]=Nowe priwatne wokno Name[hu]=Új privát ablak -Name[hy_AM]=Գաղտնի դիտարկում -Name[id]=Jendela mode pribadi baru -Name[is]=Nýr einkagluggi +Name[hy_AM]=Սկսել Գաղտնի դիտարկում +Name[id]=Jendela Mode Pribadi Baru +Name[is]=Nýr huliðsgluggi Name[it]=Nuova finestra anonima Name[ja]=新しいプライベートウィンドウ +Name[ja_JP-mac]=新規プライベートウインドウ +Name[ka]=ახალი პირადი ფანჯარა Name[kk]=Жаңа жекелік терезе +Name[km]=បង្អួចឯកជនថ្មី Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ -Name[ko]=새 사생활 보호 창 +Name[ko]=새 사생활 보호 모드 +Name[kok]=नवो खाजगी विंडो +Name[ks]=نْو پرایوٹ وینڈو Name[lij]=Nêuvo barcón privòu -Name[lt]=Atverti privačiojo naršymo langą -Name[mai]=नव निज विंडो -Name[mk]=Нов прозорец за приватно сурфање +Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ +Name[lt]=Naujas privataus naršymo langas +Name[ltg]=Jauns privatais lūgs +Name[lv]=Jauns privātais logs +Name[mai]=नया निज विंडो (W) +Name[mk]=Нов приватен прозорец Name[ml]=പുതിയ സ്വകാര്യ ജാലകം Name[mr]=नवीन वैयक्तिक पटल -Name[ms]=Tetingkap peribadi baharu +Name[ms]=Tetingkap Persendirian Baharu +Name[my]=New Private Window Name[nb_NO]=Nytt privat vindu +Name[ne_NP]=नयाँ निजी सञ्झ्याल Name[nl]=Nieuw privévenster Name[nn_NO]=Nytt privat vindauge Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ -Name[pl]=Nowe okno w trybie prywatnym +Name[pl]=Nowe okno prywatne Name[pt_BR]=Nova janela privativa Name[pt_PT]=Nova janela privada Name[rm]=Nova fanestra privata -Name[ro]=Fereastră fără urme nouă +Name[ro]=Fereastră privată nouă Name[ru]=Новое приватное окно -Name[si]=නව පුද්ගලික කවුළුව +Name[sat]=नावा निजेराक् विंडो (W ) +Name[si]=නව පුද්ගලික කවුළුව (W) Name[sk]=Nové okno v režime Súkromné prehliadanie Name[sl]=Novo zasebno okno Name[son]=Sutura zanfun taaga -Name[sq]=Dritare e re private -Name[sr]=Нови приватни прозор +Name[sq]=Dritare e Re Private +Name[sr]=Нови приватан прозор Name[sv_SE]=Nytt privat fönster Name[ta]=புதிய தனிப்பட்ட சாளரம் Name[te]=కొత్త ఆంతరంగిక విండో -Name[th]=หน้าต่างท่องเว็บแบบส่วนตัวใหม่ +Name[th]=หน้าต่างส่วนตัวใหม่ Name[tr]=Yeni gizli pencere -Name[uk]=Нове приватне вікно -Name[uz]=Yangi shaxsiy oyna +Name[tsz]=Juchiiti eraatarakua jimpani +Name[uk]=Приватне вікно +Name[ur]=نیا نجی دریچہ +Name[uz]=Yangi maxfiy oyna Name[vi]=Cửa sổ riêng tư mới +Name[wo]=Panlanteeru biir bu bees Name[xh]=Ifestile yangasese entsha Name[zh_CN]=新建隐私浏览窗口 Name[zh_TW]=新增隱私視窗 -Exec=iceweasel -private-window +Exec=iceweasel --private-window %u diff --git a/libre-testing/iceweasel/mozconfig b/libre-testing/iceweasel/mozconfig index b3dde9a7d..0245c3ead 100644 --- a/libre-testing/iceweasel/mozconfig +++ b/libre-testing/iceweasel/mozconfig @@ -1,4 +1,4 @@ -. $topsrcdir/browser/config/mozconfig +ac_add_options --enable-application=browser ac_add_options --prefix=/usr ac_add_options --enable-release @@ -6,9 +6,12 @@ ac_add_options --enable-gold ac_add_options --enable-pie ac_add_options --enable-rust -# Iceweasel +# Release Iceweasel branding ac_add_options --disable-official-branding ac_add_options --with-branding=debian/branding +ac_add_options --enable-update-channel=release +MOZ_ADDON_SIGNING=1 +MOZ_REQUIRE_SIGNING=1 # System libraries ac_add_options --with-system-nspr @@ -38,3 +41,5 @@ ac_add_options --disable-eme # Other mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/moz-objdir + +# vim:set ft=sh: diff --git a/libre-testing/iceweasel/no-libnotify.patch b/libre-testing/iceweasel/no-libnotify.patch deleted file mode 100644 index 8d5845743..000000000 --- a/libre-testing/iceweasel/no-libnotify.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff --git i/toolkit/system/gnome/moz.build w/toolkit/system/gnome/moz.build -index 0ecde07..206d6eb 100644 ---- i/toolkit/system/gnome/moz.build -+++ w/toolkit/system/gnome/moz.build -@@ -5,9 +5,7 @@ - # file, You can obtain one at http://mozilla.org/MPL/2.0/. - - SOURCES += [ -- 'nsAlertsIconListener.cpp', - 'nsGnomeModule.cpp', -- 'nsSystemAlertsService.cpp', - ] - - if CONFIG['MOZ_ENABLE_GCONF']: -diff --git i/toolkit/system/gnome/nsGnomeModule.cpp w/toolkit/system/gnome/nsGnomeModule.cpp -index 6ecebcc..2f193a3 100644 ---- i/toolkit/system/gnome/nsGnomeModule.cpp -+++ w/toolkit/system/gnome/nsGnomeModule.cpp -@@ -20,8 +20,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsGIOService) - NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGSettingsService, Init) - NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPackageKitService, Init) - #endif --#include "nsSystemAlertsService.h" --NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemAlertsService, Init) - - #ifdef MOZ_ENABLE_GCONF - NS_DEFINE_NAMED_CID(NS_GCONFSERVICE_CID); -@@ -31,7 +29,6 @@ NS_DEFINE_NAMED_CID(NS_GIOSERVICE_CID); - NS_DEFINE_NAMED_CID(NS_GSETTINGSSERVICE_CID); - NS_DEFINE_NAMED_CID(NS_PACKAGEKITSERVICE_CID); - #endif --NS_DEFINE_NAMED_CID(NS_SYSTEMALERTSSERVICE_CID); - - static const mozilla::Module::CIDEntry kGnomeCIDs[] = { - #ifdef MOZ_ENABLE_GCONF -@@ -42,7 +39,6 @@ static const mozilla::Module::CIDEntry kGnomeCIDs[] = { - { &kNS_GSETTINGSSERVICE_CID, false, nullptr, nsGSettingsServiceConstructor }, - { &kNS_PACKAGEKITSERVICE_CID, false, nullptr, nsPackageKitServiceConstructor }, - #endif -- { &kNS_SYSTEMALERTSSERVICE_CID, false, nullptr, nsSystemAlertsServiceConstructor }, - { nullptr } - }; - -@@ -55,7 +51,6 @@ static const mozilla::Module::ContractIDEntry kGnomeContracts[] = { - { NS_GSETTINGSSERVICE_CONTRACTID, &kNS_GSETTINGSSERVICE_CID }, - { NS_PACKAGEKITSERVICE_CONTRACTID, &kNS_PACKAGEKITSERVICE_CID }, - #endif -- { NS_SYSTEMALERTSERVICE_CONTRACTID, &kNS_SYSTEMALERTSSERVICE_CID }, - { nullptr } - }; - |