wxapp_install_idle_handler();
wxToolBar *tbar = (wxToolBar *)tool->GetToolBar();
- if ( tbar->m_blockNextEvent )
- {
- tbar->m_blockNextEvent = FALSE;
- return;
- }
+
+ if (tbar->m_blockEvent) return;
if (g_blockEventsOnDrag) return;
if (!tool->IsEnabled()) return;
}
//-----------------------------------------------------------------------------
-// "enter_notify_event"
+// "enter_notify_event" / "leave_notify_event"
//-----------------------------------------------------------------------------
-static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget),
- GdkEventCrossing *WXUNUSED(gdk_event),
- wxToolBarTool *tool )
+static gint gtk_toolbar_tool_callback( GtkWidget *WXUNUSED(widget),
+ GdkEventCrossing *gdk_event,
+ wxToolBarTool *tool )
{
if (g_isIdle) wxapp_install_idle_handler();
wxToolBar *tb = (wxToolBar *)tool->GetToolBar();
// emit the event
- tb->OnMouseEnter( tool->GetId() );
+ if( gdk_event->type == GDK_ENTER_NOTIFY )
+ tb->OnMouseEnter( tool->GetId() );
+ else
+ tb->OnMouseEnter( -1 );
return FALSE;
}
m_fg =
m_bg = (GdkColor *)NULL;
m_toolbar = (GtkToolbar *)NULL;
- m_blockNextEvent = FALSE;
+ m_blockEvent = FALSE;
}
wxToolBar::~wxToolBar()
gtk_signal_connect( GTK_OBJECT(tool->m_item),
"enter_notify_event",
- GTK_SIGNAL_FUNC(gtk_toolbar_enter_callback),
+ GTK_SIGNAL_FUNC(gtk_toolbar_tool_callback),
+ (gpointer)tool );
+ gtk_signal_connect( GTK_OBJECT(tool->m_item),
+ "leave_notify_event",
+ GTK_SIGNAL_FUNC(gtk_toolbar_tool_callback),
(gpointer)tool );
break;
gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask );
}
- m_blockNextEvent = TRUE; // we cannot use gtk_signal_disconnect here
+ m_blockEvent = TRUE;
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(item), toggle );
+
+ m_blockEvent = FALSE;
}
}