summarylogtreecommitdiffstats
path: root/firefox-wayland.patch
diff options
context:
space:
mode:
authorJonas Heinrich2016-06-23 21:59:38 +0200
committerJonas Heinrich2016-06-23 21:59:38 +0200
commitc32f5a0508ecc85d28dc928aac9d5d73c0ac0513 (patch)
treec6c5809ec4f3d988785fca8617935c4488ed91e0 /firefox-wayland.patch
parent74caebf80fc1ee89837ea66d4a2a97614424da94 (diff)
downloadaur-c32f5a0508ecc85d28dc928aac9d5d73c0ac0513.tar.gz
updated to version 47.0, newest patches
Diffstat (limited to 'firefox-wayland.patch')
-rw-r--r--firefox-wayland.patch325
1 files changed, 325 insertions, 0 deletions
diff --git a/firefox-wayland.patch b/firefox-wayland.patch
new file mode 100644
index 000000000000..157fa3d60a88
--- /dev/null
+++ b/firefox-wayland.patch
@@ -0,0 +1,325 @@
+diff --git a/gfx/gl/GLContextProviderGLX.cpp b/gfx/gl/GLContextProviderGLX.cpp
+--- a/gfx/gl/GLContextProviderGLX.cpp
++++ b/gfx/gl/GLContextProviderGLX.cpp
+@@ -177,16 +177,18 @@ GLXLibrary::EnsureInitialized()
+
+ if (!GLLibraryLoader::LoadSymbols(mOGLLibrary, &symbols[0])) {
+ NS_WARNING("Couldn't find required entry point in OpenGL shared library");
+ return false;
+ }
+
+ Display *display = DefaultXDisplay();
+ int screen = DefaultScreen(display);
++
++ return false;
+
+ if (!xQueryVersion(display, &mGLXMajorVersion, &mGLXMinorVersion)) {
+ mGLXMajorVersion = 0;
+ mGLXMinorVersion = 0;
+ return false;
+ }
+
+ if (!GLXVersionCheck(1, 1))
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -129,6 +129,7 @@
+ #include "nsWindow.h"
+
+ #include <dlfcn.h>
++#include <sys/time.h>
+
+ #include "mozilla/layers/APZCTreeManager.h"
+
+@@ -282,47 +283,55 @@ TimeConverter() {
+ return sTimeConverterSingleton;
+ }
+
+ namespace mozilla {
+
+ class CurrentX11TimeGetter
+ {
+ public:
+- explicit CurrentX11TimeGetter(GdkWindow* aWindow)
++ explicit CurrentX11TimeGetter(GdkWindow* aWindow, bool aIsX11Display)
+ : mWindow(aWindow)
++ , mIsX11Display(aIsX11Display)
+ , mAsyncUpdateStart()
+ {
+ }
+
+ guint32 GetCurrentTime() const
+ {
+- return gdk_x11_get_server_time(mWindow);
++ if (mIsX11Display) {
++ return gdk_x11_get_server_time(mWindow);
++ } else {
++ return g_get_monotonic_time()/1000;
++ }
+ }
+
+ void GetTimeAsyncForPossibleBackwardsSkew(const TimeStamp& aNow)
+ {
+ // Check for in-flight request
+- if (!mAsyncUpdateStart.IsNull()) {
++ if (!mIsX11Display || !mAsyncUpdateStart.IsNull()) {
+ return;
+ }
+ mAsyncUpdateStart = aNow;
+
+ Display* xDisplay = GDK_WINDOW_XDISPLAY(mWindow);
+ Window xWindow = GDK_WINDOW_XID(mWindow);
+ unsigned char c = 'a';
+ Atom timeStampPropAtom = TimeStampPropAtom();
+ XChangeProperty(xDisplay, xWindow, timeStampPropAtom,
+ timeStampPropAtom, 8, PropModeReplace, &c, 1);
+ XFlush(xDisplay);
+ }
+
+ gboolean PropertyNotifyHandler(GtkWidget* aWidget,
+ GdkEventProperty* aEvent)
+ {
++ if (!mIsX11Display)
++ return FALSE;
++
+ if (aEvent->atom !=
+ gdk_x11_xatom_to_atom(TimeStampPropAtom())) {
+ return FALSE;
+ }
+
+ guint32 eventTime = aEvent->time;
+ TimeStamp lowerBound = mAsyncUpdateStart;
+
+@@ -335,16 +344,17 @@ private:
+ static Atom TimeStampPropAtom() {
+ return gdk_x11_get_xatom_by_name_for_display(
+ gdk_display_get_default(), "GDK_TIMESTAMP_PROP");
+ }
+
+ // This is safe because this class is stored as a member of mWindow and
+ // won't outlive it.
+ GdkWindow* mWindow;
++ bool mIsX11Display;
+ TimeStamp mAsyncUpdateStart;
+ };
+
+ } // namespace mozilla
+
+ static NS_DEFINE_IID(kCDragServiceCID, NS_DRAGSERVICE_CID);
+
+ // The window from which the focus manager asks us to dispatch key events.
+@@ -422,16 +432,17 @@ nsWindow::nsWindow()
+ mIsShown = false;
+ mNeedsShow = false;
+ mEnabled = true;
+ mCreated = false;
+ #if GTK_CHECK_VERSION(3,4,0)
+ mHandleTouchEvent = false;
+ #endif
+ mIsDragPopup = false;
++ mIsX11Display = GDK_IS_X11_DISPLAY(gdk_display_get_default());
+
+ mContainer = nullptr;
+ mGdkWindow = nullptr;
+ mShell = nullptr;
+ mPluginNativeWindow = nullptr;
+ mHasMappedToplevel = false;
+ mIsFullyObscured = false;
+ mRetryPointerGrab = false;
+@@ -1382,16 +1393,20 @@ SetUserTimeAndStartupIDForActivatedWindo
+ /* static */ guint32
+ nsWindow::GetLastUserInputTime()
+ {
+ // gdk_x11_display_get_user_time tracks button and key presses,
+ // DESKTOP_STARTUP_ID used to start the app, drop events from external
+ // drags, WM_DELETE_WINDOW delete events, but not usually mouse motion nor
+ // button and key releases. Therefore use the most recent of
+ // gdk_x11_display_get_user_time and the last time that we have seen.
++ GdkDisplay *display = gdk_display_get_default();
++ if (!GDK_IS_X11_DISPLAY(display))
++ return sLastUserInputTime;
++
+ guint32 timestamp =
+ gdk_x11_display_get_user_time(gdk_display_get_default());
+ if (sLastUserInputTime != GDK_CURRENT_TIME &&
+ TimestampIsNewerThan(sLastUserInputTime, timestamp)) {
+ return sLastUserInputTime;
+ }
+
+ return timestamp;
+@@ -1532,17 +1547,17 @@ nsWindow::GetClientBounds(LayoutDeviceIn
+ return NS_OK;
+ }
+
+ void
+ nsWindow::UpdateClientOffset()
+ {
+ PROFILER_LABEL("nsWindow", "UpdateClientOffset", js::ProfileEntry::Category::GRAPHICS);
+
+- if (!mIsTopLevel || !mShell || !mGdkWindow ||
++ if (!mIsTopLevel || !mShell || !mGdkWindow || !mIsX11Display ||
+ gtk_window_get_window_type(GTK_WINDOW(mShell)) == GTK_WINDOW_POPUP) {
+ mClientOffset = nsIntPoint(0, 0);
+ return;
+ }
+
+ GdkAtom cardinal_atom = gdk_x11_xatom_to_atom(XA_CARDINAL);
+
+ GdkAtom type_returned;
+@@ -1963,19 +1978,18 @@ nsWindow::HasPendingInputEvent()
+ // This sucks, but gtk/gdk has no way to answer the question we want while
+ // excluding paint events, and there's no X API that will let us peek
+ // without blocking or removing. To prevent event reordering, peek
+ // anything except expose events. Reordering expose and others should be
+ // ok, hopefully.
+ bool haveEvent = false;
+ #ifdef MOZ_X11
+ XEvent ev;
+- GdkDisplay* gdkDisplay = gdk_display_get_default();
+- if (GDK_IS_X11_DISPLAY(gdkDisplay)) {
+- Display *display = GDK_DISPLAY_XDISPLAY(gdkDisplay);
++ if (mIsX11Display) {
++ Display *display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default());
+ haveEvent =
+ XCheckMaskEvent(display,
+ KeyPressMask | KeyReleaseMask | ButtonPressMask |
+ ButtonReleaseMask | EnterWindowMask | LeaveWindowMask |
+ PointerMotionMask | PointerMotionHintMask |
+ Button1MotionMask | Button2MotionMask |
+ Button3MotionMask | Button4MotionMask |
+ Button5MotionMask | ButtonMotionMask | KeymapStateMask |
+@@ -2609,18 +2623,17 @@ nsWindow::OnMotionNotifyEvent(GdkEventMo
+ {
+ // see if we can compress this event
+ // XXXldb Why skip every other motion event when we have multiple,
+ // but not more than that?
+ bool synthEvent = false;
+ #ifdef MOZ_X11
+ XEvent xevent;
+
+- bool isX11Display = GDK_IS_X11_DISPLAY(gdk_display_get_default());
+- if (isX11Display) {
++ if (mIsX11Display) {
+ while (XPending (GDK_WINDOW_XDISPLAY(aEvent->window))) {
+ XEvent peeked;
+ XPeekEvent (GDK_WINDOW_XDISPLAY(aEvent->window), &peeked);
+ if (peeked.xany.window != gdk_x11_window_get_xid(aEvent->window)
+ || peeked.type != MotionNotify)
+ break;
+
+ synthEvent = true;
+@@ -3040,7 +3053,8 @@
+ nsWindow::GetCurrentTimeGetter() {
+ MOZ_ASSERT(mGdkWindow, "Expected mGdkWindow to be set");
+ if (MOZ_UNLIKELY(!mCurrentTimeGetter)) {
+- mCurrentTimeGetter = new CurrentX11TimeGetter(mGdkWindow);
++ //mCurrentTimeGetter = MakeUnique<CurrentX11TimeGetter>(mGdkWindow, mIsX11Display);
++ mCurrentTimeGetter = new CurrentX11TimeGetter(mGdkWindow,mIsX11Display);
+ }
+ return mCurrentTimeGetter;
+ }
+@@ -3923,17 +3936,18 @@ nsWindow::Create(nsIWidget* aParent,
+ // Visibility events are sent to the owning widget of the relevant
+ // window but do not propagate to parent widgets so connect on
+ // mShell (if it exists) as well as mContainer.
+ g_signal_connect(widgets[i], "visibility-notify-event",
+ G_CALLBACK(visibility_notify_event_cb), nullptr);
+ // Similarly double buffering is controlled by the window's owning
+ // widget. Disable double buffering for painting directly to the
+ // X Window.
+- gtk_widget_set_double_buffered(widgets[i], FALSE);
++ if (mIsX11Display)
++ gtk_widget_set_double_buffered(widgets[i], FALSE);
+ }
+
+ // We create input contexts for all containers, except for
+ // toplevel popup windows
+ if (mWindowType != eWindowType_popup) {
+ mIMContext = new IMContextWrapper(this);
+ }
+ } else if (!mIMContext) {
+@@ -3986,17 +4000,17 @@ nsWindow::Create(nsIWidget* aParent,
+ mGdkWindow, gdk_window_get_parent(mGdkWindow)));
+ }
+
+ // resize so that everything is set to the right dimensions
+ if (!mIsTopLevel)
+ Resize(mBounds.x, mBounds.y, mBounds.width, mBounds.height, false);
+
+ #ifdef MOZ_X11
+- if (mGdkWindow) {
++ if (mIsX11Display && 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
+@@ -4034,17 +4048,17 @@ nsWindow::SetWindowClass(const nsAString
+ }
+ res_name[0] = toupper(res_name[0]);
+ if (!role) role = res_name;
+
+ gdk_window_set_role(mGdkWindow, role);
+
+ #ifdef MOZ_X11
+ GdkDisplay *display = gdk_display_get_default();
+- if (GDK_IS_X11_DISPLAY(display)) {
++ if (mIsX11Display) {
+ XClassHint *class_hint = XAllocClassHint();
+ if (!class_hint) {
+ free(res_name);
+ return NS_ERROR_OUT_OF_MEMORY;
+ }
+ class_hint->res_name = res_name;
+ class_hint->res_class = const_cast<char*>(res_class);
+
+diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
+--- a/widget/gtk/nsWindow.h
++++ b/widget/gtk/nsWindow.h
+@@ -402,16 +402,18 @@ protected:
+ // has the native window for this been created yet?
+ bool mCreated;
+ #if GTK_CHECK_VERSION(3,4,0)
+ // whether we handle touch event
+ bool mHandleTouchEvent;
+ #endif
+ // true if this is a drag and drop feedback popup
+ bool mIsDragPopup;
++ // Can we access X?
++ bool mIsX11Display;
+
+ private:
+ void DestroyChildWindows();
+ GtkWidget *GetToplevelWidget();
+ nsWindow *GetContainerWindow();
+ void SetUrgencyHint(GtkWidget *top_window, bool state);
+ void *SetupPluginPort(void);
+ void SetDefaultIcon(void);
+diff --git a/widget/nsShmImage.cpp b/widget/nsShmImage.cpp
+--- a/widget/nsShmImage.cpp
++++ b/widget/nsShmImage.cpp
+@@ -124,16 +124,21 @@ bool
+ nsShmImage::InitExtension()
+ {
+ if (gShmInitialized) {
+ return gShmAvailable;
+ }
+
+ gShmInitialized = true;
+
++ if (!GDK_IS_X11_DISPLAY(mDisplay)) {
++ gShmAvailable = false;
++ return false;
++ }
++
+ if (!XShmQueryExtension(mDisplay)) {
+ gShmAvailable = false;
+ return false;
+ }
+
+ int major, minor;
+ Bool pixmaps;
+ if (!XShmQueryVersion(mDisplay, &major, &minor, &pixmaps)) {