relinquish the mouse capture when a dialog is about to be made modal to ensure that the mouse can be used in it (patch 1754648)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48121 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -2107,6 +2107,25 @@ void gtk_window_size_callback( GtkWidget *WXUNUSED(widget),
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// "grab_broken"
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
static void
|
||||
gtk_window_grab_broken( GtkWidget *m_widget,
|
||||
GdkEventGrabBroken *event,
|
||||
wxWindow *win )
|
||||
{
|
||||
// Mouse capture has been lost involuntarily, notify the application
|
||||
if( !event->keyboard && win && wxWindow::GetCapture() == win )
|
||||
{
|
||||
wxMouseCaptureLostEvent evt( win->GetId() );
|
||||
evt.SetEventObject( win );
|
||||
win->GetEventHandler()->ProcessEvent( evt );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} // extern "C"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -2521,6 +2540,16 @@ void wxWindowGTK::PostCreation()
|
||||
// Catch native resize events
|
||||
g_signal_connect (m_wxwindow, "size_allocate",
|
||||
G_CALLBACK (gtk_window_size_callback), this);
|
||||
// Make sure we can notify the app when mouse capture is lost
|
||||
g_signal_connect (m_wxwindow, "grab_broken_event",
|
||||
G_CALLBACK (gtk_window_grab_broken), this);
|
||||
}
|
||||
|
||||
if ( connect_widget != m_wxwindow )
|
||||
{
|
||||
// Make sure we can notify app code when mouse capture is lost
|
||||
g_signal_connect (connect_widget, "grab_broken_event",
|
||||
G_CALLBACK (gtk_window_grab_broken), this);
|
||||
}
|
||||
|
||||
#if wxUSE_COMBOBOX
|
||||
@@ -4069,6 +4098,14 @@ void wxWindowGTK::DoReleaseMouse()
|
||||
gdk_pointer_ungrab ( (guint32)GDK_CURRENT_TIME );
|
||||
}
|
||||
|
||||
void wxWindowGTK::GTKReleaseMouseAndNotify()
|
||||
{
|
||||
DoReleaseMouse();
|
||||
wxMouseCaptureLostEvent evt(GetId());
|
||||
evt.SetEventObject( this );
|
||||
GetEventHandler()->ProcessEvent( evt );
|
||||
}
|
||||
|
||||
/* static */
|
||||
wxWindow *wxWindowBase::GetCapture()
|
||||
{
|
||||
|
Reference in New Issue
Block a user