summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-02-19 12:35:56 +0000
committerCaolán McNamara <caolanm@redhat.com>2020-02-19 15:03:54 +0100
commitfaa2e7b7227b6b87379e7e136ea9ab63f37c3fc4 (patch)
tree9d69d454e515256ea1e1a5c0ac9543a0eb978fa5
parent035a5a419b92bf00973d67755d32126c6a36d6fa (diff)
Resolves: tdf#130400 reserve ctrl+page_up and ctrl+page_down for notebooks
Change-Id: I627298cb844967eeb1e166720e3951be732a4dc5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89016 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx29
1 files changed, 29 insertions, 0 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index bdfe4fe1ced0..fe3cd37ba8af 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -12797,6 +12797,9 @@ private:
bool signal_key_press(GdkEventKey* pEvent)
{
+ if (pEvent->state) // only with no modifiers held
+ return false;
+
if (pEvent->keyval == GDK_KEY_KP_Up || pEvent->keyval == GDK_KEY_Up || pEvent->keyval == GDK_KEY_KP_Page_Up || pEvent->keyval == GDK_KEY_Page_Up ||
pEvent->keyval == GDK_KEY_KP_Down || pEvent->keyval == GDK_KEY_Down || pEvent->keyval == GDK_KEY_KP_Page_Down || pEvent->keyval == GDK_KEY_Page_Down)
{
@@ -13126,6 +13129,31 @@ void ensure_intercept_drawing_area_accessibility()
}
}
+void ensure_disable_ctrl_page_up_down(GType eType)
+{
+ gpointer pClass = g_type_class_ref(eType);
+ GtkWidgetClass* pWidgetClass = GTK_WIDGET_CLASS(pClass);
+ GtkBindingSet* pBindingSet = gtk_binding_set_by_class(pWidgetClass);
+ gtk_binding_entry_remove(pBindingSet, GDK_KEY_Page_Up, GDK_CONTROL_MASK);
+ gtk_binding_entry_remove(pBindingSet, GDK_KEY_Page_Up, static_cast<GdkModifierType>(GDK_SHIFT_MASK|GDK_CONTROL_MASK));
+ gtk_binding_entry_remove(pBindingSet, GDK_KEY_Page_Down, GDK_CONTROL_MASK);
+ gtk_binding_entry_remove(pBindingSet, GDK_KEY_Page_Down, static_cast<GdkModifierType>(GDK_SHIFT_MASK|GDK_CONTROL_MASK));
+ g_type_class_unref(pClass);
+}
+
+// tdf#130400 disable ctrl+page_up and ctrl+page_down bindings so the
+// keystrokes are consumed by the surrounding notebook bindings instead
+void ensure_disable_ctrl_page_up_down_bindings()
+{
+ static bool bDone;
+ if (!bDone)
+ {
+ ensure_disable_ctrl_page_up_down(GTK_TYPE_TREE_VIEW);
+ ensure_disable_ctrl_page_up_down(GTK_TYPE_SPIN_BUTTON);
+ bDone = true;
+ }
+}
+
class GtkInstanceBuilder : public weld::Builder
{
private:
@@ -13333,6 +13361,7 @@ public:
, m_xInterimGlue(pInterimGlue)
{
ensure_intercept_drawing_area_accessibility();
+ ensure_disable_ctrl_page_up_down_bindings();
sal_Int32 nIdx = m_sHelpRoot.lastIndexOf('.');
if (nIdx != -1)