summaryrefslogtreecommitdiff
path: root/vcl/unx/gtk3/gtk3gtkframe.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-08-23 20:12:28 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-08-23 22:14:54 +0200
commit9d0d788fa73744fcdf50534360a2942e5c3cc6d4 (patch)
treecd7f47d53da33f963286c320374cabd088f4ed90 /vcl/unx/gtk3/gtk3gtkframe.cxx
parented61a80297cd97331d08837553c4fd4f623ccd6b (diff)
tdf#135779 move focus back to usual parent before grabbing pointer
Change-Id: Ia4f1f2f1672a76515ab586d679a05467515868d6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101247 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx/gtk3/gtk3gtkframe.cxx')
-rw-r--r--vcl/unx/gtk3/gtk3gtkframe.cxx13
1 files changed, 11 insertions, 2 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index b4ddd142ca1d..5959bb62a67d 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -1997,6 +1997,13 @@ void GtkSalFrame::SetPointer( PointerStyle ePointerStyle )
void GtkSalFrame::grabPointer( bool bGrab, bool bKeyboardAlso, bool bOwnerEvents )
{
+ if (bGrab)
+ {
+ // tdf#135779 move focus back inside usual input window out of any
+ // other gtk widgets before grabbing the pointer
+ GrabFocus();
+ }
+
static const char* pEnv = getenv( "SAL_NO_MOUSEGRABS" );
if (pEnv && *pEnv)
return;
@@ -2533,8 +2540,10 @@ void GtkSalFrame::GrabFocus()
pGrabWidget = GTK_WIDGET(m_pWindow);
else
pGrabWidget = GTK_WIDGET(m_pFixedContainer);
- gtk_widget_set_can_focus(pGrabWidget, true);
- gtk_widget_grab_focus(pGrabWidget);
+ if (!gtk_widget_get_can_focus(pGrabWidget))
+ gtk_widget_set_can_focus(pGrabWidget, true);
+ if (!gtk_widget_has_focus(pGrabWidget))
+ gtk_widget_grab_focus(pGrabWidget);
}
gboolean GtkSalFrame::signalButton(GtkWidget*, GdkEventButton* pEvent, gpointer frame)