diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-06-09 17:40:13 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-06-09 17:40:13 +0100 |
commit | ffbd9647698738084c7a69fc72a2a7317109df7c (patch) | |
tree | 519dc7a5bbf462b3ca0244f61d4d693bcd550d90 | |
parent | f89b9d8b8064a2f323f5b3362f88cb873bad8fcc (diff) |
wrong hunk included
Change-Id: I5fbeea83393e811cdf333f3cf456cbd6cc2f9d6c
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkframe.cxx | 25 |
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 ); |