diff --git a/gramps/gui/clipboard.py b/gramps/gui/clipboard.py
index 9ea72cd76..bd09f32e1 100644
--- a/gramps/gui/clipboard.py
+++ b/gramps/gui/clipboard.py
@@ -60,7 +60,7 @@ from gramps.gen.constfunc import mac
from .glade import Glade
from .ddtargets import DdTargets
from .makefilter import make_filter
-from .utils import is_right_click
+from .utils import is_right_click, get_primary_mask
#-------------------------------------------------------------------------
#
@@ -1598,7 +1598,7 @@ class MultiTreeView(Gtk.TreeView):
# otherwise:
if (target
and event.type == Gdk.EventType.BUTTON_PRESS
- and not (event.get_state() & (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK))
+ and not (event.get_state() & get_primary_mask(Gdk.ModifierType.SHIFT_MASK))
and self.get_selection().path_is_selected(target[0])):
# disable selection
self.get_selection().set_select_function(lambda *ignore: False, None)
diff --git a/gramps/gui/editors/displaytabs/buttontab.py b/gramps/gui/editors/displaytabs/buttontab.py
index 50fb8872d..c8fd12b04 100644
--- a/gramps/gui/editors/displaytabs/buttontab.py
+++ b/gramps/gui/editors/displaytabs/buttontab.py
@@ -43,6 +43,7 @@ _ = glocale.translation.gettext
from ...widgets import SimpleButton
from .grampstab import GrampsTab
from gramps.gen.errors import WindowActiveError
+from ...utils import get_primary_mask
_KP_ENTER = Gdk.keyval_from_name("KP_Enter")
_RETURN = Gdk.keyval_from_name("Return")
@@ -219,7 +220,7 @@ class ButtonTab(GrampsTab):
return
self.add_button_clicked(obj)
elif event.keyval in (_OPEN,) and self.share_btn and \
- (event.get_state() & Gdk.ModifierType.CONTROL_MASK):
+ (event.get_state() & get_primary_mask()):
self.share_button_clicked(obj)
elif event.keyval in (_LEFT,) and \
(event.get_state() & Gdk.ModifierType.MOD1_MASK):
diff --git a/gramps/gui/editors/displaytabs/surnametab.py b/gramps/gui/editors/displaytabs/surnametab.py
index d3fac96c3..71f838723 100644
--- a/gramps/gui/editors/displaytabs/surnametab.py
+++ b/gramps/gui/editors/displaytabs/surnametab.py
@@ -48,6 +48,7 @@ from .surnamemodel import SurnameModel
from .embeddedlist import EmbeddedList, TEXT_COL, MARKUP_COL, ICON_COL
from ...ddtargets import DdTargets
from gramps.gen.lib import Surname, NameOriginType
+from ...utils import get_primary_mask
#-------------------------------------------------------------------------
#
@@ -322,11 +323,11 @@ class SurnameTab(EmbeddedList):
"""
if not EmbeddedList.key_pressed(self, obj, event):
if event.type == Gdk.EventType.KEY_PRESS and event.keyval in (_TAB,):
- if not (event.get_state() & (Gdk.ModifierType.SHIFT_MASK |
- Gdk.ModifierType.CONTROL_MASK)):
+ if not (event.get_state() &
+ get_primary_mask(Gdk.ModifierType.SHIFT_MASK)):
return self.next_cell()
- elif (event.get_state() & (Gdk.ModifierType.SHIFT_MASK |
- Gdk.ModifierType.CONTROL_MASK)):
+ elif (event.get_state() &
+ get_primary_mask(Gdk.ModifierType.SHIFT_MASK)):
return self.prev_cell()
else:
return
diff --git a/gramps/gui/filters/_searchbar.py b/gramps/gui/filters/_searchbar.py
index b34f889ed..f8aa9a722 100644
--- a/gramps/gui/filters/_searchbar.py
+++ b/gramps/gui/filters/_searchbar.py
@@ -32,7 +32,7 @@ from gi.repository import Gdk
from gi.repository import Gtk
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
-
+from ..utils import get_primary_mask
_RETURN = Gdk.keyval_from_name("Return")
_KP_ENTER = Gdk.keyval_from_name("KP_Enter")
@@ -139,7 +139,7 @@ class SearchBar:
self.clear_button.set_sensitive(True)
def key_press(self, obj, event):
- if not (event.get_state() & Gdk.ModifierType.CONTROL_MASK):
+ if not (event.get_state() & get_primary_mask()):
if event.keyval in (_RETURN, _KP_ENTER):
self.filter_button.set_sensitive(False)
self.clear_button.set_sensitive(True)
diff --git a/gramps/gui/filters/sidebar/_sidebarfilter.py b/gramps/gui/filters/sidebar/_sidebarfilter.py
index b28f33c19..02552dea2 100644
--- a/gramps/gui/filters/sidebar/_sidebarfilter.py
+++ b/gramps/gui/filters/sidebar/_sidebarfilter.py
@@ -29,6 +29,7 @@ from gi.repository import Pango
from ... import widgets
from ...dbguielement import DbGUIElement
from gramps.gen.config import config
+from ...utils import get_primary_mask
_RETURN = Gdk.keyval_from_name("Return")
_KP_ENTER = Gdk.keyval_from_name("KP_Enter")
@@ -129,7 +130,7 @@ class SidebarFilter(DbGUIElement):
widget.set_tooltip_text(tooltip)
def key_press(self, obj, event):
- if not (event.get_state() & Gdk.ModifierType.CONTROL_MASK):
+ if not (event.get_state() & get_primary_mask()):
if event.keyval in (_RETURN, _KP_ENTER):
self.clicked(obj)
return False
diff --git a/gramps/gui/glade/book.glade b/gramps/gui/glade/book.glade
index bab136662..21157e4da 100644
--- a/gramps/gui/glade/book.glade
+++ b/gramps/gui/glade/book.glade
@@ -118,7 +118,7 @@
document-save
-
+
False
@@ -163,7 +163,7 @@
gtk-index
-
+
False
@@ -333,7 +333,7 @@
list-add
-
+
False
diff --git a/gramps/gui/glade/editaddress.glade b/gramps/gui/glade/editaddress.glade
index f51ee2216..44761faba 100644
--- a/gramps/gui/glade/editaddress.glade
+++ b/gramps/gui/glade/editaddress.glade
@@ -297,7 +297,7 @@ Note: Use Residence Event for genealogical address data.
Private
-
+
5
@@ -332,7 +332,7 @@ Note: Use Residence Event for genealogical address data.
Date
-
+
5
diff --git a/gramps/gui/glade/editattribute.glade b/gramps/gui/glade/editattribute.glade
index e9e7baf29..487d1982b 100644
--- a/gramps/gui/glade/editattribute.glade
+++ b/gramps/gui/glade/editattribute.glade
@@ -153,7 +153,7 @@
Private
-
+
2
diff --git a/gramps/gui/glade/editchildref.glade b/gramps/gui/glade/editchildref.glade
index d9867bcff..94a94fc35 100644
--- a/gramps/gui/glade/editchildref.glade
+++ b/gramps/gui/glade/editchildref.glade
@@ -180,7 +180,7 @@
Private
-
+
2
@@ -250,7 +250,7 @@
Child
-
+
2
diff --git a/gramps/gui/glade/editcitation.glade b/gramps/gui/glade/editcitation.glade
index a0844298a..866754aa2 100644
--- a/gramps/gui/glade/editcitation.glade
+++ b/gramps/gui/glade/editcitation.glade
@@ -122,7 +122,7 @@
Date
-
+
2
@@ -345,7 +345,7 @@ Very High =Direct and primary evidence used, or by dominance of the evidence
Private
-
+
2
diff --git a/gramps/gui/glade/editevent.glade b/gramps/gui/glade/editevent.glade
index 9e1e6406b..ba39c4e2a 100644
--- a/gramps/gui/glade/editevent.glade
+++ b/gramps/gui/glade/editevent.glade
@@ -148,7 +148,7 @@
Date
-
+
4
@@ -213,7 +213,7 @@
False
-
+
4
@@ -270,7 +270,7 @@
Place
-
+
False
@@ -355,7 +355,7 @@
Private
-
+
4
diff --git a/gramps/gui/glade/editeventref.glade b/gramps/gui/glade/editeventref.glade
index cd3e25bf9..05d4f2a9e 100644
--- a/gramps/gui/glade/editeventref.glade
+++ b/gramps/gui/glade/editeventref.glade
@@ -149,7 +149,7 @@
Private
-
+
2
@@ -388,7 +388,7 @@
Date
-
+
2
diff --git a/gramps/gui/glade/editfamily.glade b/gramps/gui/glade/editfamily.glade
index a634982e5..434925a21 100644
--- a/gramps/gui/glade/editfamily.glade
+++ b/gramps/gui/glade/editfamily.glade
@@ -286,7 +286,7 @@
Edit
-
+
False
@@ -530,7 +530,7 @@
-
+
False
@@ -594,7 +594,7 @@
Edit
-
+
False
diff --git a/gramps/gui/glade/editldsord.glade b/gramps/gui/glade/editldsord.glade
index c6c0e8dcd..4dc96a29b 100644
--- a/gramps/gui/glade/editldsord.glade
+++ b/gramps/gui/glade/editldsord.glade
@@ -165,7 +165,7 @@
Date
-
+
2
@@ -267,7 +267,7 @@
Family
-
+
2
@@ -381,7 +381,7 @@
Private
-
+
2
diff --git a/gramps/gui/glade/editlink.glade b/gramps/gui/glade/editlink.glade
index 9b22e9163..6d82e9689 100644
--- a/gramps/gui/glade/editlink.glade
+++ b/gramps/gui/glade/editlink.glade
@@ -171,7 +171,7 @@
Link
-
+
2
diff --git a/gramps/gui/glade/editmedia.glade b/gramps/gui/glade/editmedia.glade
index bef93695f..cc416950f 100644
--- a/gramps/gui/glade/editmedia.glade
+++ b/gramps/gui/glade/editmedia.glade
@@ -254,7 +254,7 @@ Gramps does not store the media internally, it only stores the path! Set the 'Re
Date
-
+
3
@@ -332,7 +332,7 @@ Gramps does not store the media internally, it only stores the path! Set the 'Re
Private
-
+
3
diff --git a/gramps/gui/glade/editmediaref.glade b/gramps/gui/glade/editmediaref.glade
index 71febc2e6..26025b00b 100644
--- a/gramps/gui/glade/editmediaref.glade
+++ b/gramps/gui/glade/editmediaref.glade
@@ -301,7 +301,7 @@ You can use the mouse on the picture to select a region, or use these spinbutton
Private
-
+
False
@@ -592,7 +592,7 @@ You can use the mouse on the picture to select a region, or use these spinbutton
Date
-
+
3
diff --git a/gramps/gui/glade/editname.glade b/gramps/gui/glade/editname.glade
index 98ba18667..220ffcdcd 100644
--- a/gramps/gui/glade/editname.glade
+++ b/gramps/gui/glade/editname.glade
@@ -155,7 +155,7 @@
Private
-
+
False
@@ -581,7 +581,7 @@ Here you can make sure this person is sorted according to a custom name format (
Date
-
+
2
diff --git a/gramps/gui/glade/editnote.glade b/gramps/gui/glade/editnote.glade
index be7345340..6aa40e3ed 100644
--- a/gramps/gui/glade/editnote.glade
+++ b/gramps/gui/glade/editnote.glade
@@ -233,7 +233,7 @@ Use monospace font to keep preformatting.
Private
-
+
4
diff --git a/gramps/gui/glade/editperson.glade b/gramps/gui/glade/editperson.glade
index 77f4578f4..e57ec031f 100644
--- a/gramps/gui/glade/editperson.glade
+++ b/gramps/gui/glade/editperson.glade
@@ -361,7 +361,7 @@ Indicate that the surname consists of different parts. Every surname has its own
Add
-
+
8
@@ -417,7 +417,7 @@ Indicate that the surname consists of different parts. Every surname has its own
Private
-
+
False
@@ -516,7 +516,7 @@ Indicate that the surname consists of different parts. Every surname has its own
Edit
-
+
8
diff --git a/gramps/gui/glade/editpersonref.glade b/gramps/gui/glade/editpersonref.glade
index 89ffb1321..b2fe746d4 100644
--- a/gramps/gui/glade/editpersonref.glade
+++ b/gramps/gui/glade/editpersonref.glade
@@ -158,7 +158,7 @@ Note: Use Events instead for relations connected to specific time frames or occa
Private
-
+
2
@@ -211,7 +211,7 @@ Note: Use Events instead for relations connected to specific time frames or occa
Person
-
+
2
diff --git a/gramps/gui/glade/editplace.glade b/gramps/gui/glade/editplace.glade
index 00cc2db4a..8a4f2c900 100644
--- a/gramps/gui/glade/editplace.glade
+++ b/gramps/gui/glade/editplace.glade
@@ -328,7 +328,7 @@ You can set these values via the Geography View by searching the place, or via a
Private
-
+
4
diff --git a/gramps/gui/glade/editplacename.glade b/gramps/gui/glade/editplacename.glade
index 8b012d0b3..8edd88a82 100644
--- a/gramps/gui/glade/editplacename.glade
+++ b/gramps/gui/glade/editplacename.glade
@@ -142,7 +142,7 @@
Date
-
+
2
diff --git a/gramps/gui/glade/editplaceref.glade b/gramps/gui/glade/editplaceref.glade
index a8f7db67d..87d1aa473 100644
--- a/gramps/gui/glade/editplaceref.glade
+++ b/gramps/gui/glade/editplaceref.glade
@@ -431,7 +431,7 @@
Private
-
+
4
diff --git a/gramps/gui/glade/editreporef.glade b/gramps/gui/glade/editreporef.glade
index 0c0e1438f..c02ae7cbc 100644
--- a/gramps/gui/glade/editreporef.glade
+++ b/gramps/gui/glade/editreporef.glade
@@ -195,7 +195,7 @@
Private
-
+
2
diff --git a/gramps/gui/glade/editrepository.glade b/gramps/gui/glade/editrepository.glade
index f4f006b8c..43b3b8f96 100644
--- a/gramps/gui/glade/editrepository.glade
+++ b/gramps/gui/glade/editrepository.glade
@@ -212,7 +212,7 @@
Private
-
+
False
diff --git a/gramps/gui/glade/editsource.glade b/gramps/gui/glade/editsource.glade
index fd5d2fa1c..f57b79f5c 100644
--- a/gramps/gui/glade/editsource.glade
+++ b/gramps/gui/glade/editsource.glade
@@ -295,7 +295,7 @@
Private
-
+
2
diff --git a/gramps/gui/glade/editurl.glade b/gramps/gui/glade/editurl.glade
index 9735b0da4..162158454 100644
--- a/gramps/gui/glade/editurl.glade
+++ b/gramps/gui/glade/editurl.glade
@@ -156,7 +156,7 @@
Private
-
+
2
diff --git a/gramps/gui/utils.py b/gramps/gui/utils.py
index f78acb679..4e8072367 100644
--- a/gramps/gui/utils.py
+++ b/gramps/gui/utils.py
@@ -44,6 +44,7 @@ import gi
gi.require_version('PangoCairo', '1.0')
from gi.repository import PangoCairo
from gi.repository import GLib
+from gi.repository import Gdk
#-------------------------------------------------------------------------
#
@@ -466,18 +467,11 @@ def process_pending_events(max_count=10):
def is_right_click(event):
"""
- Returns True if the event is a button-3 or equivalent
+ Returns True if the event is to open the context menu.
"""
from gi.repository import Gdk
-
- if event.type == Gdk.EventType.BUTTON_PRESS:
- if is_quartz():
- if (event.button == 3
- or (event.button == 1 and event.get_state() & Gdk.ModifierType.CONTROL_MASK)):
- return True
-
- if event.button == 3:
- return True
+ if Gdk.Event.triggers_context_menu(event):
+ return True
def color_graph_box(alive=False, gender=Person.MALE):
"""
@@ -685,3 +679,12 @@ def text_to_clipboard(text):
clipboard = Gtk.Clipboard.get_for_display(Gdk.Display.get_default(),
Gdk.SELECTION_CLIPBOARD)
clipboard.set_text(text, -1)
+
+def get_primary_mask(addl_mask=0):
+ """
+ Obtain the IntentPrimary mask for the platform bitwise-ored with a
+ passed-in additional mask.
+ """
+ keymap = Gdk.Keymap.get_default()
+ primary = keymap.get_modifier_mask(Gdk.ModifierIntent.PRIMARY_ACCELERATOR)
+ return primary | addl_mask
diff --git a/gramps/gui/views/navigationview.py b/gramps/gui/views/navigationview.py
index de036a476..ed96673b8 100644
--- a/gramps/gui/views/navigationview.py
+++ b/gramps/gui/views/navigationview.py
@@ -52,6 +52,7 @@ from .pageview import PageView
from ..actiongroup import ActionGroup
from gramps.gen.utils.db import navigation_label
from gramps.gen.constfunc import mod_key
+from ..utils import get_primary_mask
DISABLED = -1
MRU_SIZE = 10
@@ -480,7 +481,7 @@ class NavigationView(PageView):
if self.active:
if event.type == Gdk.EventType.KEY_PRESS:
if (event.keyval == Gdk.KEY_c and
- (event.get_state() & Gdk.ModifierType.CONTROL_MASK)):
+ (event.get_state() & get_primary_mask())):
self.call_copy()
return True
return super(NavigationView, self).key_press_handler(widget, event)
diff --git a/gramps/gui/widgets/grampletpane.py b/gramps/gui/widgets/grampletpane.py
index 76a8e8f7e..561f833ea 100644
--- a/gramps/gui/widgets/grampletpane.py
+++ b/gramps/gui/widgets/grampletpane.py
@@ -48,7 +48,7 @@ from gramps.gen.errors import WindowActiveError
from gramps.gen.const import URL_MANUAL_PAGE, VERSION_DIR, COLON
from ..editors import EditPerson, EditFamily
from ..managedwindow import ManagedWindow
-from ..utils import is_right_click, rgb_to_hex
+from ..utils import is_right_click, rgb_to_hex, get_primary_mask
from .menuitem import add_menuitem
from ..plug import make_gui_option
from ..plug.quick import run_quick_report_by_name
@@ -405,12 +405,12 @@ class GuiGramplet:
"""
if ((Gdk.keyval_name(event.keyval) == 'Z') and
- (event.get_state() & Gdk.ModifierType.CONTROL_MASK) and
- (event.get_state() & Gdk.ModifierType.SHIFT_MASK)):
+ (event.get_state() &
+ get_primary_mask(Gdk.ModifierType.SHIFT_MASK))):
self.redo()
return True
elif ((Gdk.keyval_name(event.keyval) == 'z') and
- (event.get_state() & Gdk.ModifierType.CONTROL_MASK)):
+ (event.get_state() & get_primary_mask())):
self.undo()
return True
diff --git a/gramps/gui/widgets/interactivesearchbox.py b/gramps/gui/widgets/interactivesearchbox.py
index 5e2c6eba0..4a4cd44d6 100644
--- a/gramps/gui/widgets/interactivesearchbox.py
+++ b/gramps/gui/widgets/interactivesearchbox.py
@@ -38,6 +38,12 @@ _LOG = logging.getLogger(".widgets.interactivesearch")
#-------------------------------------------------------------------------
from gi.repository import Gtk, Gdk, GLib
+#-------------------------------------------------------------------------
+#
+# Gramps modules
+#
+#-------------------------------------------------------------------------
+from ..utils import get_primary_mask
#-------------------------------------------------------------------------
#
# InteractiveSearchBox class
@@ -100,10 +106,7 @@ class InteractiveSearchBox:
self._search_entry.disconnect(popup_menu_id)
# Intercept CTRL+F keybinding because Gtk do not allow to _replace_ it.
- default_accel = obj.get_modifier_mask(
- Gdk.ModifierIntent.PRIMARY_ACCELERATOR)
- if ((event.state & (default_accel | Gdk.ModifierType.CONTROL_MASK))
- == (default_accel | Gdk.ModifierType.CONTROL_MASK)
+ if ((event.state & get_primary_mask())
and event.keyval in [Gdk.KEY_f, Gdk.KEY_F]):
self.__imcontext_changed = True
# self.real_start_interactive_search(event.get_device(), True)
diff --git a/gramps/gui/widgets/multitreeview.py b/gramps/gui/widgets/multitreeview.py
index 45b36b90e..13e423802 100644
--- a/gramps/gui/widgets/multitreeview.py
+++ b/gramps/gui/widgets/multitreeview.py
@@ -24,6 +24,7 @@ An override to allow easy multiselections.
from gi.repository import Gdk
from gi.repository import Gtk
+from ..utils import get_primary_mask
#-------------------------------------------------------------------------
#
@@ -65,7 +66,8 @@ class MultiTreeView(Gtk.TreeView):
target = self.get_path_at_pos(int(event.x), int(event.y))
if (target
and event.type == Gdk.EventType.BUTTON_PRESS
- and not (event.get_state() & (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK))
+ and not (event.get_state() &
+ get_primary_mask(Gdk.ModifierType.SHIFT_MASK))
and self.get_selection().path_is_selected(target[0])):
# disable selection
self.get_selection().set_select_function(lambda *ignore: False, None)
diff --git a/gramps/gui/widgets/styledtexteditor.py b/gramps/gui/widgets/styledtexteditor.py
index d2cf84338..7f96510b8 100644
--- a/gramps/gui/widgets/styledtexteditor.py
+++ b/gramps/gui/widgets/styledtexteditor.py
@@ -60,7 +60,7 @@ from .toolcomboentry import ToolComboEntry
from .springseparator import SpringSeparatorAction
from ..spell import Spell
from ..display import display_url
-from ..utils import SystemFonts, rgb_to_hex
+from ..utils import SystemFonts, rgb_to_hex, get_primary_mask
from gramps.gen.config import config
from gramps.gen.constfunc import has_display
from ..actiongroup import ActionGroup
@@ -247,12 +247,12 @@ class StyledTextEditor(Gtk.TextView):
"""
if ((Gdk.keyval_name(event.keyval) == 'Z') and
- (event.get_state() & Gdk.ModifierType.CONTROL_MASK) and
- (event.get_state() & Gdk.ModifierType.SHIFT_MASK)):
+ (event.get_state() &
+ get_primary_mask(Gdk.ModifierType.SHIFT_MASK))):
self.redo()
return True
elif ((Gdk.keyval_name(event.keyval) == 'z') and
- (event.get_state() & Gdk.ModifierType.CONTROL_MASK)):
+ (event.get_state() & get_primary_mask())):
self.undo()
return True
else:
@@ -344,7 +344,7 @@ class StyledTextEditor(Gtk.TextView):
self.selclick=False
if ((event.type == Gdk.EventType.BUTTON_PRESS) and
(event.button == 1) and
- (event.get_state() and Gdk.ModifierType.CONTROL_MASK) and
+ (event.get_state() and get_primary_mask()) and
(self.url_match)):
flavor = self.url_match[MATCH_FLAVOR]
diff --git a/gramps/plugins/lib/maps/osmgps.py b/gramps/plugins/lib/maps/osmgps.py
index 85247c504..65625a79e 100644
--- a/gramps/plugins/lib/maps/osmgps.py
+++ b/gramps/plugins/lib/maps/osmgps.py
@@ -504,7 +504,7 @@ class OsmGps:
elif event.button == 2 and event.type == Gdk.EventType.BUTTON_RELEASE:
self.end_selection = current
self.zone_selection = False
- elif event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS:
+ elif Gdk.Event.triggers_context_menu():
self.build_nav_menu(osm, event, lat, lon)
else:
self.save_center(lat, lon)