Make wxTransientPopupWindow ignore button down events

which have been sent before or at the same time as
    the control creation time so that these evens don't
    make the control disappear again.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37747 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2006-02-27 09:16:28 +00:00
parent c8470018b8
commit 33c0d0ed75
2 changed files with 16 additions and 8 deletions

View File

@@ -36,6 +36,9 @@ public:
virtual void OnInternalIdle();
// GTK time when connecting to button_press signal
wxUint32 m_time;
protected:
void GtkOnSize( int x, int y, int width, int height );

View File

@@ -39,13 +39,16 @@ static gint gtk_popup_button_press (GtkWidget *widget, GdkEvent *gdk_event, wxPo
{
GtkWidget *child = gtk_get_event_widget (gdk_event);
/* We don't ask for button press events on the grab widget, so
* if an event is reported directly to the grab widget, it must
* be on a window outside the application (and thus we remove
* the popup window). Otherwise, we check if the widget is a child
* of the grab widget, and only remove the popup window if it
* is not.
*/
/* Ignore events sent out before we connected to the signal */
if (win->m_time >= ((GdkEventButton*)gdk_event)->time)
return FALSE;
/* We don't ask for button press events on the grab widget, so
* if an event is reported directly to the grab widget, it must
* be on a window outside the application (and thus we remove
* the popup window). Otherwise, we check if the widget is a child
* of the grab widget, and only remove the popup window if it
* is not. */
if (child != widget)
{
while (child)
@@ -75,7 +78,7 @@ static gint gtk_dialog_focus_callback( GtkWidget *widget, GtkDirectionType WXUNU
if (g_isIdle)
wxapp_install_idle_handler();
// This disables GTK's tab traversal
/* This disables GTK's tab traversal */
g_signal_stop_emission_by_name (widget, "focus");
return TRUE;
}
@@ -214,6 +217,8 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
g_signal_connect (m_widget, "focus",
G_CALLBACK (gtk_dialog_focus_callback), this);
m_time = gtk_get_current_event_time();
g_signal_connect (m_widget, "button_press_event",
G_CALLBACK (gtk_popup_button_press), this);