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:
Vadim Zeitlin
2007-08-15 21:01:30 +00:00
parent b1294ada8e
commit 7738af5957
4 changed files with 54 additions and 0 deletions

View File

@@ -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()
{