use "event" signal emission hook to install idle handler for many events
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40854 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -184,6 +184,16 @@ void wxApp::WakeUpIdle()
|
||||
extern "C"
|
||||
{
|
||||
|
||||
// One-shot emission hook for "event" signal, to install idle handler.
|
||||
// This will be called when the "event" signal is issued on any GtkWidget object.
|
||||
static gboolean
|
||||
event_emission_hook(GSignalInvocationHint*, guint, const GValue*, gpointer)
|
||||
{
|
||||
wxapp_install_idle_handler();
|
||||
// remove hook
|
||||
return false;
|
||||
}
|
||||
|
||||
static gint wxapp_idle_callback( gpointer WXUNUSED(data) )
|
||||
{
|
||||
if (!wxTheApp)
|
||||
@@ -222,6 +232,13 @@ static gint wxapp_idle_callback( gpointer WXUNUSED(data) )
|
||||
// Release lock again
|
||||
gdk_threads_leave();
|
||||
|
||||
if (!moreIdles)
|
||||
{
|
||||
// add emission hook for "event" signal, to re-install idle handler when needed
|
||||
guint sig_id = g_signal_lookup("event", GTK_TYPE_WIDGET);
|
||||
g_signal_add_emission_hook(sig_id, 0, event_emission_hook, NULL, NULL);
|
||||
}
|
||||
|
||||
// Return FALSE if no more idle events are to be sent
|
||||
return moreIdles;
|
||||
}
|
||||
|
Reference in New Issue
Block a user