summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-06-09 17:40:13 +0100
committerCaolán McNamara <caolanm@redhat.com>2016-06-09 17:40:13 +0100
commitffbd9647698738084c7a69fc72a2a7317109df7c (patch)
tree519dc7a5bbf462b3ca0244f61d4d693bcd550d90
parentf89b9d8b8064a2f323f5b3362f88cb873bad8fcc (diff)
wrong hunk included
Change-Id: I5fbeea83393e811cdf333f3cf456cbd6cc2f9d6c
-rw-r--r--vcl/unx/gtk3/gtk3gtkframe.cxx25
1 files changed, 15 insertions, 10 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index c76e2cd905d1..5a12fa66c0ac 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -1440,11 +1440,15 @@ void GtkSalFrame::Show( bool bVisible, bool bNoActivate )
m_nFloats++;
if( ! getDisplay()->GetCaptureFrame() && m_nFloats == 1 )
{
- GdkDeviceManager* pDeviceManager = gdk_display_get_device_manager(getGdkDisplay());
- GdkDevice* pPointer = gdk_device_manager_get_client_pointer(pDeviceManager);
- GdkDevice* pKeyboard = gdk_device_get_associated_device(pPointer);
- gtk_device_grab_add(m_pParent->getWindow(), pPointer, false);
- gtk_device_grab_add(m_pParent->getWindow(), pKeyboard, false);
+ GtkWidget* pGrabWidgetBeforeShowFloat;
+ while ((pGrabWidgetBeforeShowFloat = gtk_grab_get_current()))
+ {
+ m_aGrabWidgetsBeforeShowFloat.push_back(pGrabWidgetBeforeShowFloat);
+ gtk_grab_remove(pGrabWidgetBeforeShowFloat);
+ }
+ grabPointer(true, true);
+ GtkSalFrame *pKeyboardFrame = m_pParent ? m_pParent : this;
+ pKeyboardFrame->grabKeyboard(true);
}
// #i44068# reset parent's IM context
if( m_pParent )
@@ -1460,11 +1464,12 @@ void GtkSalFrame::Show( bool bVisible, bool bNoActivate )
m_nFloats--;
if( ! getDisplay()->GetCaptureFrame() && m_nFloats == 0)
{
- GdkDeviceManager* pDeviceManager = gdk_display_get_device_manager(getGdkDisplay());
- GdkDevice* pPointer = gdk_device_manager_get_client_pointer(pDeviceManager);
- GdkDevice* pKeyboard = gdk_device_get_associated_device(pPointer);
- gtk_device_grab_remove(m_pParent->getWindow(), pKeyboard);
- gtk_device_grab_remove(m_pParent->getWindow(), pPointer);
+ GtkSalFrame *pKeyboardFrame = m_pParent ? m_pParent : this;
+ pKeyboardFrame->grabKeyboard(false);
+ grabPointer(false);
+ for (auto i = m_aGrabWidgetsBeforeShowFloat.rbegin(); i != m_aGrabWidgetsBeforeShowFloat.rend(); ++i)
+ gtk_grab_add(*i);
+ m_aGrabWidgetsBeforeShowFloat.clear();
}
}
gtk_widget_hide( m_pWindow );