[arch-commits] Commit in firefox/trunk (2 files)
Jan Steffens
heftig at archlinux.org
Tue Nov 21 11:51:24 UTC 2017
Date: Tuesday, November 21, 2017 @ 11:51:23
Author: heftig
Revision: 310496
57.0-2: FS#56387
Added:
firefox/trunk/0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch
Modified:
firefox/trunk/PKGBUILD
-----------------------------------------------------------------+
0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch | 202 ++++++++++
PKGBUILD | 7
2 files changed, 208 insertions(+), 1 deletion(-)
Added: 0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch
===================================================================
--- 0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch (rev 0)
+++ 0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch 2017-11-21 11:51:23 UTC (rev 310496)
@@ -0,0 +1,202 @@
+From 34508b32f65d5ad8143623b1258eb92d347514e2 Mon Sep 17 00:00:00 2001
+Message-Id: <34508b32f65d5ad8143623b1258eb92d347514e2.1511260210.git.jan.steffens at gmail.com>
+From: Robin Grenet <robin.grenet at wanadoo.fr>
+Date: Thu, 16 Nov 2017 13:35:58 +0100
+Subject: [PATCH] Bug 1360278 - Add preference to trigger context menu on mouse
+ up for GTK+ and macOS, r=mstange,smaug
+
+MozReview-Commit-ID: Bg60bD8jIg6
+
+--HG--
+extra : rebase_source : cc8bd5796096f49ad4fdab81885a426afd6117e4
+---
+ modules/libpref/init/all.js | 4 ++++
+ widget/cocoa/nsChildView.mm | 23 +++++++++++++++++++++--
+ widget/gtk/nsWindow.cpp | 27 ++++++++++++++++++++-------
+ widget/gtk/nsWindow.h | 2 ++
+ widget/nsBaseWidget.cpp | 16 ++++++++++++++++
+ widget/nsBaseWidget.h | 6 ++++++
+ 6 files changed, 69 insertions(+), 9 deletions(-)
+
+diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
+index 315422a6e2255e5f..92bcf5f02564d46e 100644
+--- a/modules/libpref/init/all.js
++++ b/modules/libpref/init/all.js
+@@ -234,6 +234,10 @@ pref("browser.sessionhistory.max_total_viewers", -1);
+
+ pref("ui.use_native_colors", true);
+ pref("ui.click_hold_context_menus", false);
++
++// Pop up context menu on mouseup instead of mousedown, if that's the OS default.
++// Note: ignored on Windows (context menus always use mouseup)
++pref("ui.context_menus.after_mouseup", false);
+ // Duration of timeout of incremental search in menus (ms). 0 means infinite.
+ pref("ui.menu.incremental_search.timeout", 1000);
+ // If true, all popups won't hide automatically on blur
+diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm
+index cac897327a190422..bf42b4f8c0950753 100644
+--- a/widget/cocoa/nsChildView.mm
++++ b/widget/cocoa/nsChildView.mm
+@@ -4700,30 +4700,49 @@ NSEvent* gLastDragMouseDownEvent = nil;
+ if (!mGeckoChild)
+ return;
+
+- // Let the superclass do the context menu stuff.
+- [super rightMouseDown:theEvent];
++ if (!nsBaseWidget::ShowContextMenuAfterMouseUp()) {
++ // Let the superclass do the context menu stuff.
++ [super rightMouseDown:theEvent];
++ }
+
+ NS_OBJC_END_TRY_ABORT_BLOCK;
+ }
+
+ - (void)rightMouseUp:(NSEvent *)theEvent
+ {
+ NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
+
+ if (!mGeckoChild)
+ return;
+ if (mTextInputHandler->OnHandleEvent(theEvent)) {
+ return;
+ }
+
+ WidgetMouseEvent geckoEvent(true, eMouseUp, mGeckoChild,
+ WidgetMouseEvent::eReal);
+ [self convertCocoaMouseEvent:theEvent toGeckoEvent:&geckoEvent];
+ geckoEvent.button = WidgetMouseEvent::eRightButton;
+ geckoEvent.mClickCount = [theEvent clickCount];
+
+ nsAutoRetainCocoaObject kungFuDeathGrip(self);
+ mGeckoChild->DispatchInputEvent(&geckoEvent);
++ if (!mGeckoChild)
++ return;
++
++ if (nsBaseWidget::ShowContextMenuAfterMouseUp()) {
++ // Let the superclass do the context menu stuff, but pretend it's rightMouseDown.
++ NSEvent *dupeEvent = [NSEvent mouseEventWithType:NSRightMouseDown
++ location:theEvent.locationInWindow
++ modifierFlags:theEvent.modifierFlags
++ timestamp:theEvent.timestamp
++ windowNumber:theEvent.windowNumber
++ context:theEvent.context
++ eventNumber:theEvent.eventNumber
++ clickCount:theEvent.clickCount
++ pressure:theEvent.pressure];
++
++ [super rightMouseDown:dupeEvent];
++ }
+
+ NS_OBJC_END_TRY_ABORT_BLOCK;
+ }
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+index 87cc858ca7efd11d..17992f78bbf0a0a7 100644
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -2737,6 +2737,19 @@ static guint ButtonMaskFromGDKButton(guint button)
+ return GDK_BUTTON1_MASK << (button - 1);
+ }
+
++void
++nsWindow::DispatchContextMenuEventFromMouseEvent(uint16_t domButton,
++ GdkEventButton *aEvent)
++{
++ if (domButton == WidgetMouseEvent::eRightButton && MOZ_LIKELY(!mIsDestroyed)) {
++ WidgetMouseEvent contextMenuEvent(true, eContextMenu, this,
++ WidgetMouseEvent::eReal);
++ InitButtonEvent(contextMenuEvent, aEvent);
++ contextMenuEvent.pressure = mLastMotionPressure;
++ DispatchInputEvent(&contextMenuEvent);
++ }
++}
++
+ void
+ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+ {
+@@ -2806,13 +2819,8 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+ DispatchInputEvent(&event);
+
+ // right menu click on linux should also pop up a context menu
+- if (domButton == WidgetMouseEvent::eRightButton &&
+- MOZ_LIKELY(!mIsDestroyed)) {
+- WidgetMouseEvent contextMenuEvent(true, eContextMenu, this,
+- WidgetMouseEvent::eReal);
+- InitButtonEvent(contextMenuEvent, aEvent);
+- contextMenuEvent.pressure = mLastMotionPressure;
+- DispatchInputEvent(&contextMenuEvent);
++ if (!nsBaseWidget::ShowContextMenuAfterMouseUp()) {
++ DispatchContextMenuEventFromMouseEvent(domButton, aEvent);
+ }
+ }
+
+@@ -2848,6 +2856,11 @@ nsWindow::OnButtonReleaseEvent(GdkEventButton *aEvent)
+
+ DispatchInputEvent(&event);
+ mLastMotionPressure = pressure;
++
++ // right menu click on linux should also pop up a context menu
++ if (nsBaseWidget::ShowContextMenuAfterMouseUp()) {
++ DispatchContextMenuEventFromMouseEvent(domButton, aEvent);
++ }
+ }
+
+ void
+diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
+index 0fafc8994579fe3c..7a28e3260c0fdefb 100644
+--- a/widget/gtk/nsWindow.h
++++ b/widget/gtk/nsWindow.h
+@@ -245,6 +245,8 @@ private:
+
+ void UpdateClientOffset();
+
++ void DispatchContextMenuEventFromMouseEvent(uint16_t domButton,
++ GdkEventButton *aEvent);
+ public:
+ void ThemeChanged(void);
+ void OnDPIChanged(void);
+diff --git a/widget/nsBaseWidget.cpp b/widget/nsBaseWidget.cpp
+index 13fccd7f7d6627fb..e4ca5e011894f5c4 100644
+--- a/widget/nsBaseWidget.cpp
++++ b/widget/nsBaseWidget.cpp
+@@ -1218,6 +1218,22 @@ nsBaseWidget::DispatchEventToAPZOnly(mozilla::WidgetInputEvent* aEvent)
+ }
+ }
+
++// static
++bool
++nsBaseWidget::ShowContextMenuAfterMouseUp()
++{
++ static bool gContextMenuAfterMouseUp = false;
++ static bool gContextMenuAfterMouseUpCached = false;
++ if (!gContextMenuAfterMouseUpCached) {
++ Preferences::AddBoolVarCache(&gContextMenuAfterMouseUp,
++ "ui.context_menus.after_mouseup",
++ false);
++
++ gContextMenuAfterMouseUpCached = true;
++ }
++ return gContextMenuAfterMouseUp;
++}
++
+ nsIDocument*
+ nsBaseWidget::GetDocument() const
+ {
+diff --git a/widget/nsBaseWidget.h b/widget/nsBaseWidget.h
+index f4e8e3d783307cc1..3cb56f38b6ced983 100644
+--- a/widget/nsBaseWidget.h
++++ b/widget/nsBaseWidget.h
+@@ -417,6 +417,12 @@ public:
+ void RecvScreenPixels(mozilla::ipc::Shmem&& aMem, const ScreenIntSize& aSize) override {};
+ #endif
+
++ /**
++ * Whether context menus should only appear on mouseup instead of mousedown,
++ * on OSes where they normally appear on mousedown (macOS, *nix).
++ */
++ static bool ShowContextMenuAfterMouseUp();
++
+ protected:
+ // These are methods for CompositorWidgetWrapper, and should only be
+ // accessed from that class. Derived widgets can choose which methods to
+--
+2.15.0
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2017-11-21 03:49:39 UTC (rev 310495)
+++ PKGBUILD 2017-11-21 11:51:23 UTC (rev 310496)
@@ -5,7 +5,7 @@
pkgname=firefox
pkgver=57.0
-pkgrel=1
+pkgrel=2
pkgdesc="Standalone web browser from mozilla.org"
arch=(x86_64)
license=(MPL GPL LGPL)
@@ -22,11 +22,13 @@
_repo=https://hg.mozilla.org/mozilla-unified
source=("hg+$_repo#tag=FIREFOX_${pkgver//./_}_RELEASE"
$pkgname.desktop firefox-symbolic.svg
+ 0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch
wifi-disentangle.patch wifi-fix-interface.patch
firefox-install-dir.patch no-plt.diff)
sha256sums=('SKIP'
'677e1bde4c6b3cff114345c211805c7c43085038ca0505718a11e96432e9811a'
'a2474b32b9b2d7e0fb53a4c89715507ad1c194bef77713d798fa39d507def9e9'
+ '1f71b379f2262d7319624c2aed31fa2dbed42828feccc27b1cd82153b76ad707'
'f068b84ad31556095145d8fefc012dd3d1458948533ed3fff6cbc7250b6e73ed'
'e98a3453d803cc7ddcb81a7dc83f883230dd8591bdf936fc5a868428979ed1f1'
'd86e41d87363656ee62e12543e2f5181aadcff448e406ef3218e91865ae775cd'
@@ -51,6 +53,9 @@
cd mozilla-unified
patch -Np1 -i ../firefox-install-dir.patch
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1360278
+ patch -Np1 -i ../0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch
+
# https://bugzilla.mozilla.org/show_bug.cgi?id=1314968
patch -Np1 -i ../wifi-disentangle.patch
patch -Np1 -i ../wifi-fix-interface.patch
More information about the arch-commits
mailing list