#include "wx/caret.h"
#endif // wxUSE_CARET
+#if wxUSE_TEXTCTRL
+#include "wx/textctrl.h"
+#endif
+
#include "wx/menu.h"
#include "wx/statusbr.h"
#include "wx/intl.h"
// returns the child of win which currently has focus or NULL if not found
//
// Note: can't be static, needed by textctrl.cpp.
-wxWindow *FindFocusedChild(wxWindowGTK *win)
+wxWindow *wxFindFocusedChild(wxWindowGTK *win)
{
- wxWindowGTK *winFocus = wxWindowGTK::FindFocus();
+ wxWindow *winFocus = wxWindowGTK::FindFocus();
if ( !winFocus )
- return (wxWindowGTK *)NULL;
+ return (wxWindow *)NULL;
if ( winFocus == win )
- return win;
+ return (wxWindow *)win;
for ( wxWindowList::Node *node = win->GetChildren().GetFirst();
node;
node = node->GetNext() )
{
- wxWindowGTK *child = FindFocusedChild(node->GetData());
+ wxWindow *child = wxFindFocusedChild(node->GetData());
if ( child )
return child;
}
- return (wxWindowGTK *)NULL;
+ return (wxWindow *)NULL;
}
static void draw_frame( GtkWidget *widget, wxWindowGTK *win )
printf( ".\n" );
*/
- wxPanel *panel = wxDynamicCast(win->GetParent(), wxPanel);
- if (panel)
- {
- panel->SetLastFocus(win);
- }
+ // notify the parent keeping track of focus for the kbd navigation
+ // purposes that we got it
+ wxChildFocusEvent eventFocus(win);
+ (void)win->GetEventHandler()->ProcessEvent(eventFocus);
#ifdef HAVE_XIM
if (win->m_ic)
}
#endif // wxUSE_CARET
+#if wxUSE_TEXTCTRL
+ // If it's a wxTextCtrl don't send the event as it will be done
+ // after the control gets to process it.
+ wxTextCtrl *ctrl = wxDynamicCast(win, wxTextCtrl);
+ if ( ctrl )
+ {
+ return FALSE;
+ }
+#endif
+
if (win->IsTopLevel())
{
wxActivateEvent event( wxEVT_ACTIVATE, TRUE, win->GetId() );
// g_sendActivateEvent to -1
g_sendActivateEvent = 0;
- wxWindowGTK *winFocus = FindFocusedChild(win);
+ wxWindowGTK *winFocus = wxFindFocusedChild(win);
if ( winFocus )
win = winFocus;
}
#endif // wxUSE_CARET
+#if wxUSE_TEXTCTRL
+ // If it's a wxTextCtrl don't send the event as it will be done
+ // after the control gets to process it.
+ wxTextCtrl *ctrl = wxDynamicCast(win, wxTextCtrl);
+ if ( ctrl )
+ {
+ return FALSE;
+ }
+#endif
+
if (win->IsTopLevel())
{
wxActivateEvent event( wxEVT_ACTIVATE, FALSE, win->GetId() );
// wxWindowGTK
//-----------------------------------------------------------------------------
+// in wxUniv/MSW this class is abstract because it doesn't have DoPopupMenu()
+// method
#ifdef __WXUNIVERSAL__
- IMPLEMENT_DYNAMIC_CLASS(wxWindowGTK, wxWindowBase)
-#else
+ IMPLEMENT_ABSTRACT_CLASS(wxWindowGTK, wxWindowBase)
+#else // __WXGTK__
IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowBase)
-#endif
+#endif // __WXUNIVERSAL__/__WXGTK__
void wxWindowGTK::Init()
{
return TRUE;
}
-static void wxWindowNotifyEnable(wxWindow* win, bool enable)
+static void wxWindowNotifyEnable(wxWindowGTK* win, bool enable)
{
win->OnParentEnable(enable);
}
}
-bool wxWindow::Enable( bool enable )
+bool wxWindowGTK::Enable( bool enable )
{
wxCHECK_MSG( (m_widget != NULL), FALSE, wxT("invalid window") );
wxWindowBase::DoSetToolTip(tip);
if (m_tooltip)
- m_tooltip->Apply( this );
+ m_tooltip->Apply( (wxWindow *)this );
}
void wxWindowGTK::ApplyToolTip( GtkTooltips *tips, const wxChar *tip )
// Pop-up menu stuff
//-----------------------------------------------------------------------------
-#if wxUSE_MENUS
+#if wxUSE_MENUS_NATIVE
static void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting )
{
return TRUE;
}
-#endif // wxUSE_MENUS
+#endif // wxUSE_MENUS_NATIVE
#if wxUSE_DRAG_AND_DROP
{
wxCHECK_RET( m_widget != NULL, wxT("invalid window") );
- wxCHECK_RET( g_captureWindow == NULL, wxT("CaptureMouse called twice") );
-
GdkWindow *window = (GdkWindow*) NULL;
if (m_wxwindow)
window = GTK_PIZZA(m_wxwindow)->bin_window;
else
window = GetConnectWidget()->window;
- if (!window) return;
+ wxCHECK_RET( window, _T("CaptureMouse() failed") );
wxCursor* cursor = & m_cursor;
if (!cursor->Ok())
{
wxCHECK_RET( m_widget != NULL, wxT("invalid window") );
- wxCHECK_RET( g_captureWindow, wxT("ReleaseMouse called twice") );
+ wxCHECK_RET( g_captureWindow, wxT("can't release mouse - not captured") );
GdkWindow *window = (GdkWindow*) NULL;
if (m_wxwindow)