// the last click here (extern: used from gtk/menu.cpp)
guint32 wxGtkTimeLastClick = 0;
+// global variables because GTK+ DnD want to have the
+// mouse event that caused it
+GdkEvent *g_lastMouseEvent = (GdkEvent*) NULL;
+int g_lastButtonNumber = 0;
+
extern bool g_mainThreadLocked;
//-----------------------------------------------------------------------------
bool ret = false;
bool return_after_IM = false;
- if( wxTranslateGTKKeyEventToWx(event, win, gdk_event) == false )
+ if ( wxTranslateGTKKeyEventToWx(event, win, gdk_event) )
{
// Emit KEY_DOWN event
ret = win->GetEventHandler()->ProcessEvent( event );
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
- if (win->m_wxwindow && (g_focusWindow != win) && win->AcceptsFocus())
+ g_lastButtonNumber = gdk_event->button;
+
+ if (win->m_wxwindow && (g_focusWindow != win) && win->CanAcceptFocus())
{
gtk_widget_grab_focus( win->m_wxwindow );
/*
return FALSE;
}
+ g_lastMouseEvent = (GdkEvent*) gdk_event;
+
wxMouseEvent event( event_type );
InitMouseEvent( win, event, gdk_event );
if (win->GetEventHandler()->ProcessEvent( event ))
{
gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "button_press_event" );
+ g_lastMouseEvent = NULL;
return TRUE;
}
+ g_lastMouseEvent = NULL;
if (event_type == wxEVT_RIGHT_DOWN)
{
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
+ g_lastButtonNumber = 0;
+
wxEventType event_type = wxEVT_NULL;
switch (gdk_event->button)
return FALSE;
}
+ g_lastMouseEvent = (GdkEvent*) gdk_event;
+
wxMouseEvent event( event_type );
InitMouseEvent( win, event, gdk_event );
gdk_event->y = y;
}
+ g_lastMouseEvent = (GdkEvent*) gdk_event;
+
/*
printf( "OnMotion from " );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
}
- if (win->GetEventHandler()->ProcessEvent( event ))
+ bool ret = win->GetEventHandler()->ProcessEvent( event );
+ g_lastMouseEvent = NULL;
+
+ if ( ret )
{
gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "motion_notify_event" );
- return TRUE;
}
- return FALSE;
+ return ret ? TRUE : FALSE;
}
}
return true;
}
-static void wxWindowNotifyEnable(wxWindowGTK* win, bool enable)
-{
- win->OnParentEnable(enable);
-
- // Recurse, so that children have the opportunity to Do The Right Thing
- // and reset colours that have been messed up by a parent's (really ancestor's)
- // Enable call
- for ( wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst();
- node;
- node = node->GetNext() )
- {
- wxWindow *child = node->GetData();
- if (!child->IsKindOf(CLASSINFO(wxDialog)) && !child->IsKindOf(CLASSINFO(wxFrame)))
- wxWindowNotifyEnable(child, enable);
- }
-}
-
-bool wxWindowGTK::Enable( bool enable )
+void wxWindowGTK::DoEnable( bool enable )
{
- wxCHECK_MSG( (m_widget != NULL), false, wxT("invalid window") );
-
- if (!wxWindowBase::Enable(enable))
- {
- // nothing to do
- return false;
- }
+ wxCHECK_RET( (m_widget != NULL), wxT("invalid window") );
gtk_widget_set_sensitive( m_widget, enable );
if ( m_wxwindow )
gtk_widget_set_sensitive( m_wxwindow, enable );
-
- wxWindowNotifyEnable(this, enable);
-
- return true;
}
int wxWindowGTK::GetCharHeight() const
{
wxCHECK_MSG( (m_widget != NULL), false, wxT("invalid window") );
- if (cursor == m_cursor)
+ if ( cursor.IsSameAs(m_cursor) )
return false;
if (g_isIdle)
wxapp_install_idle_handler();
- if (cursor == wxNullCursor)
- return wxWindowBase::SetCursor( *wxSTANDARD_CURSOR );
- else
- return wxWindowBase::SetCursor( cursor );
+ return wxWindowBase::SetCursor( cursor.IsOk() ? cursor
+ : *wxSTANDARD_CURSOR );
}
void wxWindowGTK::WarpPointer( int x, int y )