diff --git a/.abf.yml b/.abf.yml index 601c2bc..391e50e 100644 --- a/.abf.yml +++ b/.abf.yml @@ -1,3 +1,2 @@ sources: - firefox-49.0.1.source.tar.xz: 1e267ca9b6b0d19a7b6e0acfbf11e545d55eb830 - + firefox-49.0.2.source.tar.xz: 52d527f06c522c95e2fcf4008dce1a9913379aaf diff --git a/firefox.spec b/firefox.spec index 127ca38..82af3ac 100644 --- a/firefox.spec +++ b/firefox.spec @@ -7,7 +7,7 @@ # This also means only STABLE upstream releases, NO betas. # This is a discussed topic. Please, do not flame it again. -%define major 49.0.1 +%define major 49.0.2 %define ff_epoch 0 # (tpg) set version HERE !!! %define realver %{major} @@ -39,7 +39,8 @@ Url: http://www.mozilla.com/firefox/ %if 0%{?prel} Source0: ftp://ftp.mozilla.org/pub/mozilla.org/%{name}/releases/%{realver}/source/%{name}-%{realver}%prel.source.tar.xz %else -Source0: ftp://ftp.mozilla.org/pub/mozilla.org/%{name}/releases/%{realver}/source/%{name}-%{realver}.source.tar.xz +# Source0: ftp://ftp.mozilla.org/pub/mozilla.org/%{name}/releases/%{realver}/source/%{name}-%{realver}.source.tar.xz +Source0: https://archive.mozilla.org/pub/firefox/releases/%{realver}/source/%{name}-%{realver}.source.tar.xz %endif Source4: %{name}.desktop Source9: kde.js diff --git a/mozilla-1160154.patch b/mozilla-1160154.patch deleted file mode 100644 index 1dbf3d5..0000000 --- a/mozilla-1160154.patch +++ /dev/null @@ -1,115 +0,0 @@ -# HG changeset patch -# Parent 3a4bfa5d2d026f7d3fbfd0f87663b87b5caa9344 -# User Petr Jasicek -Bug 1160154 - Decrease padding between icons in the personal toolbar with Gtk3 by using "image-button" css style class. r=karlt - -diff --git a/widget/gtk/gtk3drawing.c b/widget/gtk/gtk3drawing.c ---- a/widget/gtk/gtk3drawing.c -+++ b/widget/gtk/gtk3drawing.c -@@ -2629,26 +2629,35 @@ moz_gtk_get_widget_border(GtkThemeWidget - gboolean inhtml) - { - GtkWidget* w; - GtkStyleContext* style; - *left = *top = *right = *bottom = 0; - - switch (widget) { - case MOZ_GTK_BUTTON: -+ case MOZ_GTK_TOOLBAR_BUTTON: - { - ensure_button_widget(); - style = gtk_widget_get_style_context(gButtonWidget); - - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); - - /* Don't add this padding in HTML, otherwise the buttons will - become too big and stuff the layout. */ - if (!inhtml) { -+ 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); - } - - moz_gtk_add_style_border(style, left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_ENTRY: - { - ensure_entry_widget(); -@@ -3081,16 +3090,17 @@ moz_gtk_widget_paint(GtkThemeWidgetType - GtkTextDirection direction) - { - /* A workaround for https://bugzilla.gnome.org/show_bug.cgi?id=694086 - */ - cairo_new_path(cr); - - switch (widget) { - 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); - } - ensure_button_widget(); - return moz_gtk_button_paint(cr, rect, state, -diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h ---- a/widget/gtk/gtkdrawing.h -+++ b/widget/gtk/gtkdrawing.h -@@ -84,16 +84,18 @@ typedef gint (*style_prop_t)(GtkStyle*, - /*** checkbox/radio flags ***/ - #define MOZ_GTK_WIDGET_CHECKED 1 - #define MOZ_GTK_WIDGET_INCONSISTENT (1 << 1) - - /*** widget type constants ***/ - typedef enum { - /* Paints a GtkButton. flags is a GtkReliefStyle. */ - MOZ_GTK_BUTTON, -+ /* Paints a button with image and no text */ -+ MOZ_GTK_TOOLBAR_BUTTON, - /* Paints a GtkCheckButton. flags is a boolean, 1=checked, 0=not checked. */ - MOZ_GTK_CHECKBUTTON, - /* Paints a GtkRadioButton. flags is a boolean, 1=checked, 0=not checked. */ - MOZ_GTK_RADIOBUTTON, - /** - * Paints the button of a GtkScrollbar. flags is a GtkArrowType giving - * the arrow direction. - */ -diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp ---- a/widget/gtk/nsNativeThemeGTK.cpp -+++ b/widget/gtk/nsNativeThemeGTK.cpp -@@ -386,21 +386,25 @@ nsNativeThemeGTK::GetGtkWidgetAndState(u - *aWidgetFlags = CheckBooleanAttr(aFrame, nsGkAtoms::parentfocused); - } - } - } - } - - switch (aWidgetType) { - case NS_THEME_BUTTON: -+ if (aWidgetFlags) -+ *aWidgetFlags = GTK_RELIEF_NORMAL; -+ aGtkWidgetType = MOZ_GTK_BUTTON; -+ break; - case NS_THEME_TOOLBAR_BUTTON: - case NS_THEME_TOOLBAR_DUAL_BUTTON: - if (aWidgetFlags) -- *aWidgetFlags = (aWidgetType == NS_THEME_BUTTON) ? GTK_RELIEF_NORMAL : GTK_RELIEF_NONE; -- aGtkWidgetType = MOZ_GTK_BUTTON; -+ *aWidgetFlags = GTK_RELIEF_NONE; -+ aGtkWidgetType = MOZ_GTK_TOOLBAR_BUTTON; - break; - case NS_THEME_FOCUS_OUTLINE: - aGtkWidgetType = MOZ_GTK_ENTRY; - break; - case NS_THEME_CHECKBOX: - case NS_THEME_RADIO: - aGtkWidgetType = (aWidgetType == NS_THEME_RADIO) ? MOZ_GTK_RADIOBUTTON : MOZ_GTK_CHECKBUTTON; - break; diff --git a/mozilla-1180971.patch b/mozilla-1180971.patch deleted file mode 100644 index a83bfb2..0000000 --- a/mozilla-1180971.patch +++ /dev/null @@ -1,50 +0,0 @@ -# HG changeset patch -# User Andrew Comminos - -Bug 1180971 - Fix X11 SHM invalidation regions on HiDPI with GTK3. r=karlt - -diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp -index 19b634e..064116c 100644 ---- a/widget/gtk/nsWindow.cpp -+++ b/widget/gtk/nsWindow.cpp -@@ -2264,17 +2264,17 @@ nsWindow::OnExposeEvent(cairo_t *cr) - ctx->SetOperator(gfxContext::OPERATOR_SOURCE); - ctx->SetPattern(pattern); - ctx->Paint(); - } - } - } - # ifdef MOZ_HAVE_SHMIMAGE - if (mShmImage && MOZ_LIKELY(!mIsDestroyed)) { -- mShmImage->Put(mGdkWindow, exposeRegion); -+ mShmImage->Put(mGdkWindow, region); - } - # endif // MOZ_HAVE_SHMIMAGE - #endif // MOZ_X11 - - listener->DidPaintWindow(); - - // Synchronously flush any new dirty areas - #if (MOZ_WIDGET_GTK == 2) -@@ -6173,21 +6173,16 @@ nsWindow::EndRemoteDrawingInRegion(DrawTarget* aDrawTarget, nsIntRegion& aInvali - if (!mGdkWindow || mIsFullyObscured || !mHasMappedToplevel || mIsDestroyed || - !mShmImage) - return; - - if (mThebesSurface) { - aInvalidRegion.AndWith(nsIntRect(nsIntPoint(0, 0), mThebesSurface->GetSize())); - } - -- gint scale = GdkScaleFactor(); -- if (scale != 1) { -- aInvalidRegion.ScaleInverseRoundOut(scale, scale); -- } -- - mShmImage->Put(mGdkWindow, aInvalidRegion); - - # endif // MOZ_HAVE_SHMIMAGE - #endif // MOZ_X11 - } - - // return the gfxASurface for rendering to this widget - gfxASurface* diff --git a/mozilla-1190935.patch b/mozilla-1190935.patch deleted file mode 100644 index 242311f..0000000 --- a/mozilla-1190935.patch +++ /dev/null @@ -1,33 +0,0 @@ -# HG changeset patch -# User Lee Salzman -# Date 1438873323 14400 -# Thu Aug 06 11:02:03 2015 -0400 -# Node ID 9ad90210cc51eb61d21230086b9acf5c8003aea0 -# Parent abc56d57f6e1aebade48949fb557d26eae555df8 -fix race condition in gtk window EndRemoteDrawingInRegion - -diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp ---- a/widget/gtk/nsWindow.cpp -+++ b/widget/gtk/nsWindow.cpp -@@ -6203,19 +6203,19 @@ nsWindow::StartRemoteDrawing() - } - } - - void - nsWindow::EndRemoteDrawingInRegion(DrawTarget* aDrawTarget, nsIntRegion& aInvalidRegion) - { - #ifdef MOZ_X11 - # ifdef MOZ_HAVE_SHMIMAGE -- if (!mGdkWindow || mIsFullyObscured || !mHasMappedToplevel || mIsDestroyed || -- !mShmImage) -+ if (!mGdkWindow || !mShmImage) { - return; -+ } - - if (mThebesSurface) { - aInvalidRegion.AndWith(nsIntRect(nsIntPoint(0, 0), mThebesSurface->GetSize())); - } - - mShmImage->Put(mGdkWindow, aInvalidRegion); - - # endif // MOZ_HAVE_SHMIMAGE diff --git a/mozilla-1192243.patch b/mozilla-1192243.patch deleted file mode 100644 index 5adbe2b..0000000 --- a/mozilla-1192243.patch +++ /dev/null @@ -1,115 +0,0 @@ -# HG changeset patch -# Parent 8cba870a352ca71b53cebee7688847756eb3f5f7 -# User Petr Jasicek -Bug 1192243 - Fix Gtk3 crash reporter's ScrolledWindow and width. r=karlt - -diff --git a/toolkit/crashreporter/client/crashreporter_linux.cpp b/toolkit/crashreporter/client/crashreporter_linux.cpp ---- a/toolkit/crashreporter/client/crashreporter_linux.cpp -+++ b/toolkit/crashreporter/client/crashreporter_linux.cpp -@@ -9,16 +9,18 @@ - #include - #include - - #include - - #include "crashreporter.h" - #include "crashreporter_gtk_common.h" - -+#define LABEL_MAX_CHAR_WIDTH 48 -+ - using std::string; - using std::vector; - - using namespace CrashReporter; - - static GtkWidget* gViewReportButton = 0; - static GtkWidget* gCommentTextLabel = 0; - static GtkWidget* gCommentText = 0; -@@ -178,19 +180,22 @@ static void ViewReportClicked(GtkButton* - GTK_DIALOG_MODAL, - GTK_STOCK_OK, - GTK_RESPONSE_OK, - nullptr)); - - GtkWidget* scrolled = gtk_scrolled_window_new(0, 0); - gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(dialog)), scrolled); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), -- GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); -+ GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), - GTK_SHADOW_IN); -+#if (MOZ_WIDGET_GTK >= 3) -+ gtk_widget_set_vexpand(scrolled, TRUE); -+#endif - - GtkWidget* viewReportTextView = gtk_text_view_new(); - gtk_container_add(GTK_CONTAINER(scrolled), viewReportTextView); - gtk_text_view_set_editable(GTK_TEXT_VIEW(viewReportTextView), FALSE); - gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(viewReportTextView), - GTK_WRAP_WORD); - gtk_widget_set_size_request(GTK_WIDGET(viewReportTextView), -1, 100); - -@@ -407,17 +412,21 @@ bool UIShowCrashUI(const StringTable& fi - gStrings[ST_CRASHREPORTERHEADER].c_str()); - gtk_label_set_markup(GTK_LABEL(titleLabel), markup); - g_free(markup); - - GtkWidget* descriptionLabel = - gtk_label_new(gStrings[ST_CRASHREPORTERDESCRIPTION].c_str()); - gtk_box_pack_start(GTK_BOX(vbox), descriptionLabel, TRUE, TRUE, 0); - // force the label to line wrap -+#if (MOZ_WIDGET_GTK == 2) - gtk_widget_set_size_request(descriptionLabel, 400, -1); -+#else -+ gtk_label_set_max_width_chars(GTK_LABEL(descriptionLabel), LABEL_MAX_CHAR_WIDTH); -+#endif - gtk_label_set_line_wrap(GTK_LABEL(descriptionLabel), TRUE); - gtk_label_set_selectable(GTK_LABEL(descriptionLabel), TRUE); - gtk_misc_set_alignment(GTK_MISC(descriptionLabel), 0, 0.5); - - // this is honestly how they suggest you indent a section - GtkWidget* indentBox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), indentBox, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(indentBox), gtk_label_new(""), FALSE, FALSE, 6); -@@ -451,16 +460,19 @@ bool UIShowCrashUI(const StringTable& fi - g_signal_connect(gViewReportButton, "clicked", G_CALLBACK(ViewReportClicked), 0); - - GtkWidget* scrolled = gtk_scrolled_window_new(0, 0); - gtk_container_add(GTK_CONTAINER(innerVBox), scrolled); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), - GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), - GTK_SHADOW_IN); -+#if (MOZ_WIDGET_GTK >= 3) -+ gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolled), 100); -+#endif - - gCommentTextLabel = gtk_label_new(gStrings[ST_COMMENTGRAYTEXT].c_str()); - gCommentText = gtk_text_view_new(); - gtk_label_set_mnemonic_widget(GTK_LABEL(gCommentTextLabel), gCommentText); - gtk_text_view_set_accepts_tab(GTK_TEXT_VIEW(gCommentText), FALSE); - g_signal_connect(gCommentText, "focus-in-event", G_CALLBACK(CommentFocusChange), 0); - g_signal_connect(gCommentText, "focus-out-event", G_CALLBACK(CommentFocusChange), 0); - -@@ -509,17 +521,21 @@ bool UIShowCrashUI(const StringTable& fi - g_free(dir); - gThrobber = gtk_image_new_from_file(path); - gtk_box_pack_start(GTK_BOX(progressBox), gThrobber, FALSE, FALSE, 0); - - gProgressLabel = - gtk_label_new(gStrings[ST_REPORTPRESUBMIT].c_str()); - gtk_box_pack_start(GTK_BOX(progressBox), gProgressLabel, TRUE, TRUE, 0); - // force the label to line wrap -+#if (MOZ_WIDGET_GTK == 2) - gtk_widget_set_size_request(gProgressLabel, 400, -1); -+#else -+ gtk_label_set_max_width_chars(GTK_LABEL(gProgressLabel), LABEL_MAX_CHAR_WIDTH); -+#endif - gtk_label_set_line_wrap(GTK_LABEL(gProgressLabel), TRUE); - - GtkWidget* buttonBox = gtk_hbutton_box_new(); - gtk_box_pack_end(GTK_BOX(vbox), buttonBox, FALSE, FALSE, 0); - gtk_box_set_spacing(GTK_BOX(buttonBox), 6); - gtk_button_box_set_layout(GTK_BUTTON_BOX(buttonBox), GTK_BUTTONBOX_END); - - gCloseButton = diff --git a/mozilla-1205045.patch b/mozilla-1205045.patch deleted file mode 100644 index 9574772..0000000 --- a/mozilla-1205045.patch +++ /dev/null @@ -1,587 +0,0 @@ -diff -up mozilla-release/gfx/layers/basic/BasicCompositor.cpp.1205045 mozilla-release/gfx/layers/basic/BasicCompositor.cpp ---- mozilla-release/gfx/layers/basic/BasicCompositor.cpp.1205045 2015-09-18 00:13:31.000000000 +0200 -+++ mozilla-release/gfx/layers/basic/BasicCompositor.cpp 2015-09-22 12:57:51.047938671 +0200 -@@ -509,11 +509,11 @@ BasicCompositor::BeginFrame(const nsIntR - } - - if (mTarget) { -- // If we have a copy target, then we don't have a widget-provided mDrawTarget (currently). Create a dummy -+ // If we have a copy target, then we don't have a widget-provided mDrawTarget (currently). Use a dummy - // placeholder so that CreateRenderTarget() works. -- mDrawTarget = gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(IntSize(1,1), SurfaceFormat::B8G8R8A8); -+ mDrawTarget = gfxPlatform::GetPlatform()->ScreenReferenceDrawTarget(); - } else { -- mDrawTarget = mWidget->StartRemoteDrawing(); -+ mDrawTarget = mWidget->StartRemoteDrawingInRegion(mInvalidRegion); - } - if (!mDrawTarget) { - return; -diff -up mozilla-release/widget/gtk/nsWindow.cpp.1205045 mozilla-release/widget/gtk/nsWindow.cpp ---- mozilla-release/widget/gtk/nsWindow.cpp.1205045 2015-09-22 12:57:51.043938667 +0200 -+++ mozilla-release/widget/gtk/nsWindow.cpp 2015-09-22 12:57:51.049938673 +0200 -@@ -351,6 +351,11 @@ nsWindow::nsWindow() - - #ifdef MOZ_X11 - mOldFocusWindow = 0; -+ -+ mXDisplay = nullptr; -+ mXWindow = None; -+ mXVisual = nullptr; -+ mXDepth = 0; - #endif /* MOZ_X11 */ - mPluginType = PluginType_NONE; - -@@ -649,10 +654,6 @@ nsWindow::Destroy(void) - gPluginFocusWindow->LoseNonXEmbedPluginFocus(); - } - #endif /* MOZ_X11 && MOZ_WIDGET_GTK2 */ -- -- // Destroy thebes surface now. Badness can happen if we destroy -- // the surface after its X Window. -- mThebesSurface = nullptr; - - GtkWidget *owningWidget = GetMozContainerWidget(); - if (mShell) { -@@ -2069,7 +2070,13 @@ ExtractExposeRegion(nsIntRegion& aRegion - - #if (MOZ_WIDGET_GTK == 2) - gboolean --nsWindow::OnExposeEvent(GdkEventExpose *aEvent) -+nsWindow:: -+ -+ -+ -+ -+ -+Event(GdkEventExpose *aEvent) - #else - gboolean - nsWindow::OnExposeEvent(cairo_t *cr) -@@ -2191,7 +2198,7 @@ nsWindow::OnExposeEvent(cairo_t *cr) - return TRUE; - } - -- RefPtr dt = StartRemoteDrawing(); -+ RefPtr dt = GetDrawTarget(region); - if(!dt) { - return FALSE; - } -@@ -2269,8 +2276,8 @@ nsWindow::OnExposeEvent(cairo_t *cr) - } - } - # ifdef MOZ_HAVE_SHMIMAGE -- if (mShmImage && MOZ_LIKELY(!mIsDestroyed)) { -- mShmImage->Put(mGdkWindow, region); -+ if (mShmImage && MOZ_LIKELY(!mIsDestroyed)) { -+ mShmImage->Put(mXDisplay, mXWindow, region); - } - # endif // MOZ_HAVE_SHMIMAGE - #endif // MOZ_X11 -@@ -3818,9 +3825,12 @@ nsWindow::Create(nsIWidget *aPare - - #ifdef MOZ_X11 - if (mGdkWindow) { -- // force creation of native window via internal call to gdk_window_ensure_native -- // in case it was not created already -- gdk_x11_window_get_xid(mGdkWindow); -+ mXDisplay = GDK_WINDOW_XDISPLAY(mGdkWindow); -+ mXWindow = gdk_x11_window_get_xid(mGdkWindow); -+ -+ GdkVisual* gdkVisual = gdk_window_get_visual(mGdkWindow); -+ mXVisual = gdk_x11_visual_get_xvisual(gdkVisual); -+ mXDepth = gdk_visual_get_depth(gdkVisual); - } - #endif - -@@ -6155,31 +6165,42 @@ nsWindow::GetSurfaceForGdkDrawable(GdkDr - #endif - - TemporaryRef --nsWindow::StartRemoteDrawing() -+nsWindow::GetDrawTarget(const nsIntRegion& aRegion) - { -- gfxASurface *surf = GetThebesSurface(); -- if (!surf) { -+ if (!mGdkWindow) { - return nullptr; - } - -- nsIntSize size = surf->GetSize(); -+ nsIntRect bounds = aRegion.GetBounds(); -+ IntSize size(bounds.XMost(), bounds.YMost()); - if (size.width <= 0 || size.height <= 0) { - return nullptr; - } - -- gfxPlatform *platform = gfxPlatform::GetPlatform(); -- if (platform->SupportsAzureContentForType(BackendType::CAIRO) || -- surf->GetType() == gfxSurfaceType::Xlib) { -- return platform->CreateDrawTargetForSurface(surf, size); -- } else if (platform->SupportsAzureContentForType(BackendType::SKIA) && -- surf->GetType() == gfxSurfaceType::Image) { -- gfxImageSurface* imgSurf = static_cast(surf); -- SurfaceFormat format = ImageFormatToSurfaceFormat(imgSurf->Format()); -- return platform->CreateDrawTargetForData( -- imgSurf->Data(), size, imgSurf->Stride(), format); -- } else { -- return nullptr; -+ RefPtr dt; -+#ifdef MOZ_X11 -+# ifdef MOZ_HAVE_SHMIMAGE -+ if (nsShmImage::UseShm()) { -+ dt = nsShmImage::EnsureShmImage(size, -+ mXDisplay, mXVisual, mXDepth, -+ mShmImage); - } -+# endif // MOZ_HAVE_SHMIMAGE -+ if (!dt) { -+ RefPtr surf = new gfxXlibSurface(mXDisplay, mXWindow, mXVisual, size); -+ if (!surf->CairoStatus()) { -+ dt = gfxPlatform::GetPlatform()->CreateDrawTargetForSurface(surf.get(), surf->GetSize()); -+ } -+ } -+#endif // MOZ_X11 -+ -+ return dt.forget(); -+} -+ -+TemporaryRef -+nsWindow::StartRemoteDrawingInRegion(nsIntRegion& aInvalidRegion) -+{ -+ return GetDrawTarget(aInvalidRegion); - } - - void -@@ -6191,73 +6212,11 @@ nsWindow::EndRemoteDrawingInRegion(DrawT - return; - } - -- if (mThebesSurface) { -- aInvalidRegion.AndWith(nsIntRect(nsIntPoint(0, 0), mThebesSurface->GetSize())); -- } -- -- mShmImage->Put(mGdkWindow, aInvalidRegion); -- -+ mShmImage->Put(mXDisplay, mXWindow, aInvalidRegion); - # endif // MOZ_HAVE_SHMIMAGE - #endif // MOZ_X11 - } - --// return the gfxASurface for rendering to this widget --gfxASurface* --nsWindow::GetThebesSurface() --{ -- if (!mGdkWindow) -- return nullptr; -- --#ifdef MOZ_X11 -- gint width, height; -- --#if (MOZ_WIDGET_GTK == 2) -- gdk_drawable_get_size(GDK_DRAWABLE(mGdkWindow), &width, &height); --#else -- width = GdkCoordToDevicePixels(gdk_window_get_width(mGdkWindow)); -- height = GdkCoordToDevicePixels(gdk_window_get_height(mGdkWindow)); --#endif -- -- // Owen Taylor says this is the right thing to do! -- width = std::min(32767, width); -- height = std::min(32767, height); -- gfxIntSize size(width, height); -- -- GdkVisual *gdkVisual = gdk_window_get_visual(mGdkWindow); -- Visual* visual = gdk_x11_visual_get_xvisual(gdkVisual); -- --# ifdef MOZ_HAVE_SHMIMAGE -- bool usingShm = false; -- if (nsShmImage::UseShm()) { -- // EnsureShmImage() is a dangerous interface, but we guarantee -- // that the thebes surface and the shmimage have the same -- // lifetime -- mThebesSurface = -- nsShmImage::EnsureShmImage(size, -- visual, gdk_visual_get_depth(gdkVisual), -- mShmImage); -- usingShm = mThebesSurface != nullptr; -- } -- if (!usingShm) --# endif // MOZ_HAVE_SHMIMAGE -- { -- mThebesSurface = new gfxXlibSurface -- (GDK_WINDOW_XDISPLAY(mGdkWindow), -- gdk_x11_window_get_xid(mGdkWindow), -- visual, -- size); -- } --#endif // MOZ_X11 -- -- // if the surface creation is reporting an error, then -- // we don't have a surface to give back -- if (mThebesSurface && mThebesSurface->CairoStatus() != 0) { -- mThebesSurface = nullptr; -- } -- -- return mThebesSurface; --} -- - // Code shared begin BeginMoveDrag and BeginResizeDrag - bool - nsWindow::GetDragInfo(WidgetMouseEvent* aMouseEvent, -diff -up mozilla-release/widget/gtk/nsWindow.h.1205045 mozilla-release/widget/gtk/nsWindow.h ---- mozilla-release/widget/gtk/nsWindow.h.1205045 2015-09-18 00:13:31.000000000 +0200 -+++ mozilla-release/widget/gtk/nsWindow.h 2015-09-22 12:57:51.049938673 +0200 -@@ -195,7 +195,7 @@ public: - gpointer aData); - - virtual mozilla::TemporaryRef -- StartRemoteDrawing() override; -+ StartRemoteDrawingInRegion(nsIntRegion& aInvalidRegion) override; - virtual void EndRemoteDrawingInRegion(mozilla::gfx::DrawTarget* aDrawTarget, - nsIntRegion& aInvalidRegion) override; - -@@ -292,7 +292,7 @@ public: - virtual nsresult ConfigureChildren(const nsTArray& aConfigurations) override; - nsresult UpdateTranslucentWindowAlphaInternal(const nsIntRect& aRect, - uint8_t* aAlphas, int32_t aStride); -- virtual gfxASurface *GetThebesSurface(); -+ virtual mozilla::TemporaryRef GetDrawTarget(const nsIntRegion& aRegion); - - #if (MOZ_WIDGET_GTK == 2) - static already_AddRefed GetSurfaceForGdkDrawable(GdkDrawable* aDrawable, -@@ -393,11 +393,17 @@ private: - guint32 mLastScrollEventTime; - #endif - -+#ifdef MOZ_X11 -+ Display* mXDisplay; -+ Drawable mXWindow; -+ Visual* mXVisual; -+ int mXDepth; -+#endif -+ - #ifdef MOZ_HAVE_SHMIMAGE -- // If we're using xshm rendering, mThebesSurface wraps mShmImage -+ // If we're using xshm rendering - nsRefPtr mShmImage; - #endif -- nsRefPtr mThebesSurface; - - #ifdef ACCESSIBILITY - nsRefPtr mRootAccessible; -diff -up mozilla-release/widget/nsIWidget.h.1205045 mozilla-release/widget/nsIWidget.h ---- mozilla-release/widget/nsIWidget.h.1205045 2015-09-18 00:13:31.000000000 +0200 -+++ mozilla-release/widget/nsIWidget.h 2015-09-22 13:24:51.542447323 +0200 -@@ -1706,6 +1706,9 @@ class nsIWidget : public nsISupports { - * before each composition. - */ - virtual mozilla::TemporaryRef StartRemoteDrawing() = 0; -+ virtual mozilla::TemporaryRef StartRemoteDrawingInRegion(nsIntRegion& aInvalidRegion) { -+ return StartRemoteDrawing(); -+ } - - /** - * Ensure that what was painted into the DrawTarget returned from -diff -up mozilla-release/widget/nsShmImage.cpp.1205045 mozilla-release/widget/nsShmImage.cpp ---- mozilla-release/widget/nsShmImage.cpp.1205045 2015-09-18 00:13:31.000000000 +0200 -+++ mozilla-release/widget/nsShmImage.cpp 2015-09-22 12:57:51.050938674 +0200 -@@ -15,11 +15,11 @@ - #ifdef MOZ_WIDGET_GTK - #include "gfxPlatformGtk.h" - #endif --#include "gfxImageSurface.h" - - #ifdef MOZ_HAVE_SHMIMAGE - - using namespace mozilla::ipc; -+using namespace mozilla::gfx; - - // If XShm isn't available to our client, we'll try XShm once, fail, - // set this to false and then never try again. -@@ -33,14 +33,25 @@ bool nsShmImage::UseShm() - #endif - } - -+#ifdef MOZ_WIDGET_GTK -+static int gShmError = 0; -+ -+static int -+TrapShmError(Display* aDisplay, XErrorEvent* aEvent) -+{ -+ // store the error code and ignore the error -+ gShmError = aEvent->error_code; -+ return 0; -+} -+#endif -+ - already_AddRefed - nsShmImage::Create(const gfxIntSize& aSize, -- Visual* aVisual, unsigned int aDepth) -+ Display* aDisplay, Visual* aVisual, unsigned int aDepth) - { -- Display* dpy = DISPLAY(); -- - nsRefPtr shm = new nsShmImage(); -- shm->mImage = XShmCreateImage(dpy, aVisual, aDepth, -+ shm->mDisplay = aDisplay; -+ shm->mImage = XShmCreateImage(aDisplay, aVisual, aDepth, - ZPixmap, nullptr, - &(shm->mInfo), - aSize.width, aSize.height); -@@ -60,17 +71,20 @@ nsShmImage::Create(const gfxIntSize& aSi - shm->mImage->data = static_cast(shm->mSegment->memory()); - shm->mInfo.readOnly = False; - -- int xerror = 0; - #if defined(MOZ_WIDGET_GTK) -- gdk_error_trap_push(); -- Status attachOk = XShmAttach(dpy, &shm->mInfo); -- XSync(dpy, False); -- xerror = gdk_error_trap_pop(); -+ gShmError = 0; -+ XErrorHandler previousHandler = XSetErrorHandler(TrapShmError); -+ Status attachOk = XShmAttach(aDisplay, &shm->mInfo); -+ XSync(aDisplay, False); -+ XSetErrorHandler(previousHandler); -+ if (gShmError) { -+ attachOk = 0; -+ } - #elif defined(MOZ_WIDGET_QT) -- Status attachOk = XShmAttach(dpy, &shm->mInfo); -+ Status attachOk = XShmAttach(aDisplay, &shm->mInfo); - #endif - -- if (!attachOk || xerror) { -+ if (!attachOk) { - // Assume XShm isn't available, and don't attempt to use it - // again. - gShmAvailable = false; -@@ -84,7 +98,7 @@ nsShmImage::Create(const gfxIntSize& aSi - if ((shm->mImage->red_mask == 0xff0000) && - (shm->mImage->green_mask == 0xff00) && - (shm->mImage->blue_mask == 0xff)) { -- shm->mFormat = gfxImageFormat::ARGB32; -+ shm->mFormat = SurfaceFormat::B8G8R8A8; - break; - } - goto unsupported; -@@ -93,12 +107,13 @@ nsShmImage::Create(const gfxIntSize& aSi - if ((shm->mImage->red_mask == 0xff0000) && - (shm->mImage->green_mask == 0xff00) && - (shm->mImage->blue_mask == 0xff)) { -- shm->mFormat = gfxImageFormat::RGB24; -+ shm->mFormat = SurfaceFormat::B8G8R8X8; - break; - } - goto unsupported; - case 16: -- shm->mFormat = gfxImageFormat::RGB16_565; break; -+ shm->mFormat = SurfaceFormat::R5G6B5; -+ break; - unsupported: - default: - NS_WARNING("Unsupported XShm Image format!"); -@@ -108,20 +123,19 @@ nsShmImage::Create(const gfxIntSize& aSi - return shm.forget(); - } - --already_AddRefed --nsShmImage::AsSurface() -+already_AddRefed -+nsShmImage::CreateDrawTarget() - { -- return nsRefPtr( -- new gfxImageSurface(static_cast(mSegment->memory()), -- mSize, -- mImage->bytes_per_line, -- mFormat) -- ).forget(); -+ return gfxPlatform::GetPlatform()->CreateDrawTargetForData( -+ static_cast(mSegment->memory()), -+ mSize, -+ mImage->bytes_per_line, -+ mFormat); - } - --#if (MOZ_WIDGET_GTK == 2) -+#ifdef MOZ_WIDGET_GTK - void --nsShmImage::Put(GdkWindow* aWindow, const nsIntRegion& aRegion) -+nsShmImage::Put(Display* aDisplay, Drawable aWindow, const nsIntRegion& aRegion) - { - GdkDrawable* gd; - gint dx, dy; -@@ -130,45 +144,16 @@ nsShmImage::Put(GdkWindow* aWindow, cons - Display* dpy = gdk_x11_get_default_xdisplay(); - Drawable d = GDK_DRAWABLE_XID(gd); - -- GC gc = XCreateGC(dpy, d, 0, nullptr); -+ GC gc = XCreateGC(aDisplay, aWindow, 0, nullptr); - nsIntRegionRectIterator iter(aRegion); - for (const nsIntRect *r = iter.Next(); r; r = iter.Next()) { -- XShmPutImage(dpy, d, gc, mImage, -+ XShmPutImage(aDisplay, aWindow, gc, mImage, - r->x, r->y, -- r->x - dx, r->y - dy, -- r->width, r->height, -- False); -- } -- XFreeGC(dpy, gc); -- -- // FIXME/bug 597336: we need to ensure that the shm image isn't -- // scribbled over before all its pending XShmPutImage()s complete. -- // However, XSync() is an unnecessarily heavyweight -- // synchronization mechanism; other options are possible. If this -- // XSync is shown to hurt responsiveness, we need to explore the -- // other options. -- XSync(dpy, False); --} -- --#elif (MOZ_WIDGET_GTK == 3) --void --nsShmImage::Put(GdkWindow* aWindow, const nsIntRegion& aRegion) --{ -- Display* dpy = gdk_x11_get_default_xdisplay(); -- Drawable d = GDK_WINDOW_XID(aWindow); -- int dx = 0, dy = 0; -- -- GC gc = XCreateGC(dpy, d, 0, nullptr); -- nsIntRegionRectIterator iter(aRegion); -- for (const nsIntRect *r = iter.Next(); r; r = iter.Next()) { -- XShmPutImage(dpy, d, gc, mImage, - r->x, r->y, -- r->x - dx, r->y - dy, - r->width, r->height, - False); - } -- -- XFreeGC(dpy, gc); -+ XFreeGC(aDisplay, gc); - - // FIXME/bug 597336: we need to ensure that the shm image isn't - // scribbled over before all its pending XShmPutImage()s complete. -@@ -176,7 +161,7 @@ nsShmImage::Put(GdkWindow* aWindow, cons - // synchronization mechanism; other options are possible. If this - // XSync is shown to hurt responsiveness, we need to explore the - // other options. -- XSync(dpy, False); -+ XSync(aDisplay, False); - } - - #elif defined(MOZ_WIDGET_QT) -@@ -198,9 +183,10 @@ nsShmImage::Put(QWindow* aWindow, QRect& - } - #endif - --already_AddRefed --nsShmImage::EnsureShmImage(const gfxIntSize& aSize, Visual* aVisual, unsigned int aDepth, -- nsRefPtr& aImage) -+already_AddRefed -+nsShmImage::EnsureShmImage(const gfxIntSize& aSize, -+ Display* aDisplay, Visual* aVisual, unsigned int aDepth, -+ nsRefPtr& aImage) - { - if (!aImage || aImage->Size() != aSize) { - // Because we XSync() after XShmAttach() to trap errors, we -@@ -208,9 +194,9 @@ nsShmImage::EnsureShmImage(const gfxIntS - // into its address space, so it's OK to destroy the old image - // here even if there are outstanding Puts. The Detach is - // ordered after the Puts. -- aImage = nsShmImage::Create(aSize, aVisual, aDepth); -+ aImage = nsShmImage::Create(aSize, aDisplay, aVisual, aDepth); - } -- return !aImage ? nullptr : aImage->AsSurface(); -+ return !aImage ? nullptr : aImage->CreateDrawTarget(); - } - - #endif // defined(MOZ_X11) && defined(MOZ_HAVE_SHAREDMEMORYSYSV) -diff -up mozilla-release/widget/nsShmImage.h.1205045 mozilla-release/widget/nsShmImage.h ---- mozilla-release/widget/nsShmImage.h.1205045 2015-09-18 00:13:31.000000000 +0200 -+++ mozilla-release/widget/nsShmImage.h 2015-09-22 12:57:51.051938675 +0200 -@@ -15,8 +15,8 @@ - - #ifdef MOZ_HAVE_SHMIMAGE - -+#include "mozilla/gfx/2D.h" - #include "nsIWidget.h" --#include "gfxTypes.h" - #include "nsAutoPtr.h" - - #include "mozilla/X11Util.h" -@@ -24,15 +24,10 @@ - #include - #include - --#if defined(MOZ_WIDGET_GTK) --#define DISPLAY gdk_x11_get_default_xdisplay --#elif defined(MOZ_WIDGET_QT) --#define DISPLAY mozilla::DefaultXDisplay --#endif -- -+#ifdef MOZ_WIDGET_QT - class QRect; - class QWindow; --class gfxASurface; -+#endif - - class nsShmImage { - // bug 1168843, compositor thread may create shared memory instances that are destroyed by main thread on shutdown, so this must use thread-safe RC to avoid hitting assertion -@@ -41,31 +36,31 @@ class nsShmImage { - typedef mozilla::ipc::SharedMemorySysV SharedMemorySysV; - - public: -- typedef gfxImageFormat Format; -- - static bool UseShm(); - static already_AddRefed -- Create(const gfxIntSize& aSize, Visual* aVisual, unsigned int aDepth); -- static already_AddRefed -- EnsureShmImage(const gfxIntSize& aSize, Visual* aVisual, unsigned int aDepth, -+ Create(const gfxIntSize& aSize, -+ Display* aDisplay, Visual* aVisual, unsigned int aDepth); -+ static already_AddRefed -+ EnsureShmImage(const gfxIntSize& aSize, -+ Display* aDisplay, Visual* aVisual, unsigned int aDepth, - nsRefPtr& aImage); - - private: - ~nsShmImage() { - if (mImage) { -- mozilla::FinishX(DISPLAY()); -+ mozilla::FinishX(mDisplay); - if (mXAttached) { -- XShmDetach(DISPLAY(), &mInfo); -+ XShmDetach(mDisplay, &mInfo); - } - XDestroyImage(mImage); - } - } - - public: -- already_AddRefed AsSurface(); -+ already_AddRefed CreateDrawTarget(); - - #ifdef MOZ_WIDGET_GTK -- void Put(GdkWindow* aWindow, const nsIntRegion& aRegion); -+ void Put(Display* aDisplay, Drawable aWindow, const nsIntRegion& aRegion); - #elif defined(MOZ_WIDGET_QT) - void Put(QWindow* aWindow, QRect& aRect); - #endif -@@ -75,14 +70,17 @@ public: - private: - nsShmImage() - : mImage(nullptr) -+ , mDisplay(nullptr) -+ , mFormat(mozilla::gfx::SurfaceFormat::UNKNOWN) - , mXAttached(false) - { mInfo.shmid = SharedMemorySysV::NULLHandle(); } - - nsRefPtr mSegment; - XImage* mImage; -+ Display* mDisplay; - XShmSegmentInfo mInfo; - gfxIntSize mSize; -- Format mFormat; -+ mozilla::gfx::SurfaceFormat mFormat; - bool mXAttached; - }; - diff --git a/mozilla-kde-background.patch b/mozilla-kde-background.patch deleted file mode 100644 index 0127c66..0000000 --- a/mozilla-kde-background.patch +++ /dev/null @@ -1,142 +0,0 @@ -diff -urN mozilla-release.orig/browser/components/shell/src/nsKDEShellService.cpp mozilla-release/browser/components/shell/src/nsKDEShellService.cpp ---- mozilla-release.orig/browser/components/shell/src/nsKDEShellService.cpp 2014-08-04 17:37:32.064081427 +0400 -+++ mozilla-release/browser/components/shell/src/nsKDEShellService.cpp 2014-08-04 17:42:22.108041230 +0400 -@@ -17,6 +17,21 @@ - #include "nsIMutableArray.h" - #include "nsISupportsPrimitives.h" - #include "nsArrayUtils.h" -+#include "nsIImageLoadingContent.h" -+#include "imgIRequest.h" -+#include "nsIStringBundle.h" -+#include "nsIDOMHTMLImageElement.h" -+#include "prenv.h" -+ -+#include -+#include -+#include -+#include -+#if defined(MOZ_WIDGET_GTK) -+#include "nsIImageToPixbuf.h" -+#endif -+#include -+#include - - using namespace mozilla; - -@@ -28,6 +43,29 @@ - return NS_OK; - } - -+static nsresult -+WriteImage(const nsCString& aPath, imgIContainer* aImage) -+{ -+#if !defined(MOZ_WIDGET_GTK) -+ return NS_ERROR_NOT_AVAILABLE; -+#else -+ nsCOMPtr imgToPixbuf = -+ do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1"); -+ if (!imgToPixbuf) -+ return NS_ERROR_NOT_AVAILABLE; -+ -+ GdkPixbuf* pixbuf = imgToPixbuf->ConvertImageToPixbuf(aImage); -+ if (!pixbuf) -+ return NS_ERROR_NOT_AVAILABLE; -+ -+ gboolean res = gdk_pixbuf_save(pixbuf, aPath.get(), "png", nullptr, nullptr); -+ -+ g_object_unref(pixbuf); -+ return res ? NS_OK : NS_ERROR_FAILURE; -+#endif -+} -+ -+ - NS_IMPL_ISUPPORTS(nsKDEShellService, nsIShellService) - - NS_IMETHODIMP -@@ -123,19 +161,83 @@ - nsKDEShellService::SetDesktopBackground(nsIDOMElement* aElement, - PRInt32 aPosition) - { -- return NS_ERROR_NOT_IMPLEMENTED; -+ nsresult rv; -+ nsCOMPtr imageContent = do_QueryInterface(aElement, &rv); -+ if (!imageContent) return rv; -+ -+ // get the image container -+ nsCOMPtr request; -+ rv = imageContent->GetRequest(nsIImageLoadingContent::CURRENT_REQUEST, -+ getter_AddRefs(request)); -+ if (!request) return rv; -+ nsCOMPtr container; -+ rv = request->GetImage(getter_AddRefs(container)); -+ if (!container) return rv; -+ -+ // Set desktop wallpaper filling style -+ nsAutoCString options; -+ if (aPosition == BACKGROUND_TILE) -+ options.Assign("TiledResize"); -+ else if (aPosition == BACKGROUND_STRETCH) -+ options.Assign("ScaledResize"); -+ else if (aPosition == BACKGROUND_FILL) -+ options.Assign("ScaledAndCroppedResize"); -+ else if (aPosition == BACKGROUND_FIT) -+ options.Assign("MaxpectResize"); -+ else -+ options.Assign("CenteredResize"); -+ -+ // Write the background file to the home directory. -+ nsAutoCString filePath(PR_GetEnv("HOME")); -+ -+ // get the product brand name from localized strings -+ nsString brandName; -+ nsCID bundleCID = NS_STRINGBUNDLESERVICE_CID; -+ nsCOMPtr bundleService(do_GetService(bundleCID)); -+ if (bundleService) { -+ nsCOMPtr brandBundle; -+ rv = bundleService->CreateBundle(BRAND_PROPERTIES, -+ getter_AddRefs(brandBundle)); -+ if (NS_SUCCEEDED(rv) && brandBundle) { -+ rv = brandBundle->GetStringFromName(NS_LITERAL_STRING("brandShortName").get(), -+ getter_Copies(brandName)); -+ NS_ENSURE_SUCCESS(rv, rv); -+ } -+ } -+ -+ // build the file name -+ filePath.Append('/'); -+ filePath.Append(NS_ConvertUTF16toUTF8(brandName)); -+ filePath.Append("_wallpaper.png"); -+ -+ // write the image to a file in the home dir -+ rv = WriteImage(filePath, container); -+ NS_ENSURE_SUCCESS(rv, rv); -+ -+ nsCOMPtr command = do_CreateInstance( NS_ARRAY_CONTRACTID ); -+ nsCOMPtr cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); -+ nsCOMPtr imgstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); -+ nsCOMPtr modestr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); -+ cmdstr->SetData( NS_LITERAL_CSTRING( "SETWALLPAPER" )); -+ command->AppendElement( cmdstr, false ); -+ imgstr->SetData( filePath ); -+ command->AppendElement( imgstr, false ); -+ modestr->SetData( options ); -+ command->AppendElement( modestr, false ); -+ return nsKDEUtils::command( command ) ? rv : NS_ERROR_FAILURE; - } - - NS_IMETHODIMP - nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor) - { -- return NS_ERROR_NOT_IMPLEMENTED; -+ aColor = 0; -+ return NS_OK; - } - - NS_IMETHODIMP - nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor) - { -- return NS_ERROR_NOT_IMPLEMENTED; -+ return NS_OK; - } - - NS_IMETHODIMP