summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-03-04 10:13:08 +0000
committerMiklos Vajna <vmiklos@collabora.com>2020-03-17 11:29:01 +0100
commit35d451044f2873a9e9f566044cd4ab26b6dfbab0 (patch)
tree7b3e55e7f6aed090af8d94b2f1c0000b8e79b317
parenta352d0038edd971afdd5d835a8ff548a5f67c389 (diff)
tdf#131076 allow 'return' in GtkComboBox to activate default widget
typically ok and accept the dialog. alt+down is documented as the default menu-activate key binding, space will also work to popup the menu from a combobox. Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89950 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 7a078207fbfd71b33cb51c38b3886351fedcde8d) Change-Id: I7bec880670cc006b288996d6f59a88fe9a9fb8cc tdf#131223 let return deactive active popup Change-Id: Ib116a1eb047aa9f1a5ca7a2ec9333a793addd304 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90188 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 0d81a613ef5af22253e51d9917c5d5c94d764456) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90381 Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx30
1 files changed, 28 insertions, 2 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 541b3356b203..f82347713d65 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -11409,6 +11409,24 @@ private:
return pThis->signal_key_press(pEvent);
}
+ // tdf#131076 we want return in a GtkComboBox to act like return in a
+ // GtkEntry and activate the default dialog/assistant button
+ bool combobox_activate()
+ {
+ GtkWidget *pComboBox = GTK_WIDGET(m_pComboBox);
+ GtkWidget *pToplevel = gtk_widget_get_toplevel(pComboBox);
+ GtkWindow *pWindow = GTK_WINDOW(pToplevel);
+ if (!pWindow)
+ return false;
+ if (!GTK_IS_DIALOG(pWindow) && !GTK_IS_ASSISTANT(pWindow))
+ return false;
+ bool bDone = false;
+ GtkWidget *pDefaultWidget = gtk_window_get_default_widget(pWindow);
+ if (pDefaultWidget && pDefaultWidget != m_pToggleButton && gtk_widget_get_sensitive(pDefaultWidget))
+ bDone = gtk_widget_activate(pDefaultWidget);
+ return bDone;
+ }
+
bool signal_key_press(const GdkEventKey* pEvent)
{
KeyEvent aKEvt(GtkToVcl(*pEvent));
@@ -11417,7 +11435,8 @@ private:
bool bDone = false;
- switch (aKeyCode.GetCode())
+ auto nCode = aKeyCode.GetCode();
+ switch (nCode)
{
case KEY_DOWN:
case KEY_UP:
@@ -11429,9 +11448,16 @@ private:
case KEY_RIGHT:
case KEY_RETURN:
m_aQuickSelectionEngine.Reset();
+ // tdf#131076 don't let bare return toggle menu popup active, but do allow deactive
+ if (nCode == KEY_RETURN && !pEvent->state && !m_bPopupActive)
+ bDone = combobox_activate();
break;
default:
- bDone = m_aQuickSelectionEngine.HandleKeyEvent(aKEvt);
+ // tdf#131076 let base space toggle menu popup when its not already visible
+ if (nCode == KEY_SPACE && !pEvent->state && !m_bPopupActive)
+ bDone = false;
+ else
+ bDone = m_aQuickSelectionEngine.HandleKeyEvent(aKEvt);
break;
}