diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-03-04 10:13:08 +0000 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2020-03-17 11:29:01 +0100 |
commit | 35d451044f2873a9e9f566044cd4ab26b6dfbab0 (patch) | |
tree | 7b3e55e7f6aed090af8d94b2f1c0000b8e79b317 | |
parent | a352d0038edd971afdd5d835a8ff548a5f67c389 (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.cxx | 30 |
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; } |