Various changes for simplification of focus event
code in wxGTK. It will also work for wxComboBox now, but not for GTK's other composite controls such as wxListBox and wxChoice. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11414 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -165,36 +165,39 @@ public:
|
|||||||
int m_width, m_height;
|
int m_width, m_height;
|
||||||
int m_oldClientWidth,m_oldClientHeight;
|
int m_oldClientWidth,m_oldClientHeight;
|
||||||
|
|
||||||
/* see the docs in src/gtk/window.cpp */
|
// see the docs in src/gtk/window.cpp
|
||||||
GtkWidget *m_widget;
|
GtkWidget *m_widget; // mostly the widget seen by the rest of GTK
|
||||||
GtkWidget *m_wxwindow;
|
GtkWidget *m_wxwindow; // mostly the client area as per wxWindows
|
||||||
|
|
||||||
|
// this widget will be queried for GTK's focus events
|
||||||
|
GtkWidget *m_focusWidget;
|
||||||
|
|
||||||
#if HAVE_XIM
|
#if HAVE_XIM
|
||||||
/* XIM support for wxWindows */
|
// XIM support for wxWindows
|
||||||
GdkIC *m_ic;
|
GdkIC *m_ic;
|
||||||
GdkICAttr *m_icattr;
|
GdkICAttr *m_icattr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* scrolling stuff */
|
// scrolling stuff
|
||||||
GtkAdjustment *m_hAdjust,*m_vAdjust;
|
GtkAdjustment *m_hAdjust,*m_vAdjust;
|
||||||
float m_oldHorizontalPos;
|
float m_oldHorizontalPos;
|
||||||
float m_oldVerticalPos;
|
float m_oldVerticalPos;
|
||||||
|
|
||||||
// extra (wxGTK-specific) flags
|
// extra (wxGTK-specific) flags
|
||||||
bool m_needParent:1; /* ! wxFrame, wxDialog, wxNotebookPage ? */
|
bool m_needParent:1; // ! wxFrame, wxDialog, wxNotebookPage ?
|
||||||
bool m_noExpose:1; /* wxGLCanvas has its own redrawing */
|
bool m_noExpose:1; // wxGLCanvas has its own redrawing
|
||||||
bool m_nativeSizeEvent:1; /* wxGLCanvas sends wxSizeEvent upon "alloc_size" */
|
bool m_nativeSizeEvent:1; // wxGLCanvas sends wxSizeEvent upon "alloc_size"
|
||||||
bool m_hasScrolling:1;
|
bool m_hasScrolling:1;
|
||||||
bool m_hasVMT:1;
|
bool m_hasVMT:1;
|
||||||
bool m_sizeSet:1;
|
bool m_sizeSet:1;
|
||||||
bool m_resizing:1;
|
bool m_resizing:1;
|
||||||
bool m_isStaticBox:1; /* faster than IS_KIND_OF */
|
bool m_isStaticBox:1; // faster than IS_KIND_OF
|
||||||
bool m_isRadioButton:1; /* faster than IS_KIND_OF */
|
bool m_isRadioButton:1; // faster than IS_KIND_OF
|
||||||
bool m_isFrame:1; /* faster than IS_KIND_OF */
|
bool m_isFrame:1; // faster than IS_KIND_OF
|
||||||
bool m_acceptsFocus:1; /* not wxStaticBox, not wxStaticBitmap etc. */
|
bool m_acceptsFocus:1; // not wxStaticBox, not wxStaticBitmap etc.
|
||||||
bool m_isScrolling;
|
bool m_isScrolling;
|
||||||
bool m_clipPaintRegion; /* TRUE after ScrollWindow() */
|
bool m_clipPaintRegion; // TRUE after ScrollWindow()
|
||||||
bool m_queuedFullRedraw; /* TRUE after DoMoveWindow */
|
bool m_queuedFullRedraw; // TRUE after DoMoveWindow
|
||||||
|
|
||||||
// these are true if the style were set before the widget was realized
|
// these are true if the style were set before the widget was realized
|
||||||
// (typcally in the constructor) but the actual GTK style must not be set
|
// (typcally in the constructor) but the actual GTK style must not be set
|
||||||
|
@@ -165,36 +165,39 @@ public:
|
|||||||
int m_width, m_height;
|
int m_width, m_height;
|
||||||
int m_oldClientWidth,m_oldClientHeight;
|
int m_oldClientWidth,m_oldClientHeight;
|
||||||
|
|
||||||
/* see the docs in src/gtk/window.cpp */
|
// see the docs in src/gtk/window.cpp
|
||||||
GtkWidget *m_widget;
|
GtkWidget *m_widget; // mostly the widget seen by the rest of GTK
|
||||||
GtkWidget *m_wxwindow;
|
GtkWidget *m_wxwindow; // mostly the client area as per wxWindows
|
||||||
|
|
||||||
|
// this widget will be queried for GTK's focus events
|
||||||
|
GtkWidget *m_focusWidget;
|
||||||
|
|
||||||
#if HAVE_XIM
|
#if HAVE_XIM
|
||||||
/* XIM support for wxWindows */
|
// XIM support for wxWindows
|
||||||
GdkIC *m_ic;
|
GdkIC *m_ic;
|
||||||
GdkICAttr *m_icattr;
|
GdkICAttr *m_icattr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* scrolling stuff */
|
// scrolling stuff
|
||||||
GtkAdjustment *m_hAdjust,*m_vAdjust;
|
GtkAdjustment *m_hAdjust,*m_vAdjust;
|
||||||
float m_oldHorizontalPos;
|
float m_oldHorizontalPos;
|
||||||
float m_oldVerticalPos;
|
float m_oldVerticalPos;
|
||||||
|
|
||||||
// extra (wxGTK-specific) flags
|
// extra (wxGTK-specific) flags
|
||||||
bool m_needParent:1; /* ! wxFrame, wxDialog, wxNotebookPage ? */
|
bool m_needParent:1; // ! wxFrame, wxDialog, wxNotebookPage ?
|
||||||
bool m_noExpose:1; /* wxGLCanvas has its own redrawing */
|
bool m_noExpose:1; // wxGLCanvas has its own redrawing
|
||||||
bool m_nativeSizeEvent:1; /* wxGLCanvas sends wxSizeEvent upon "alloc_size" */
|
bool m_nativeSizeEvent:1; // wxGLCanvas sends wxSizeEvent upon "alloc_size"
|
||||||
bool m_hasScrolling:1;
|
bool m_hasScrolling:1;
|
||||||
bool m_hasVMT:1;
|
bool m_hasVMT:1;
|
||||||
bool m_sizeSet:1;
|
bool m_sizeSet:1;
|
||||||
bool m_resizing:1;
|
bool m_resizing:1;
|
||||||
bool m_isStaticBox:1; /* faster than IS_KIND_OF */
|
bool m_isStaticBox:1; // faster than IS_KIND_OF
|
||||||
bool m_isRadioButton:1; /* faster than IS_KIND_OF */
|
bool m_isRadioButton:1; // faster than IS_KIND_OF
|
||||||
bool m_isFrame:1; /* faster than IS_KIND_OF */
|
bool m_isFrame:1; // faster than IS_KIND_OF
|
||||||
bool m_acceptsFocus:1; /* not wxStaticBox, not wxStaticBitmap etc. */
|
bool m_acceptsFocus:1; // not wxStaticBox, not wxStaticBitmap etc.
|
||||||
bool m_isScrolling;
|
bool m_isScrolling;
|
||||||
bool m_clipPaintRegion; /* TRUE after ScrollWindow() */
|
bool m_clipPaintRegion; // TRUE after ScrollWindow()
|
||||||
bool m_queuedFullRedraw; /* TRUE after DoMoveWindow */
|
bool m_queuedFullRedraw; // TRUE after DoMoveWindow
|
||||||
|
|
||||||
// these are true if the style were set before the widget was realized
|
// these are true if the style were set before the widget was realized
|
||||||
// (typcally in the constructor) but the actual GTK style must not be set
|
// (typcally in the constructor) but the actual GTK style must not be set
|
||||||
|
@@ -787,6 +787,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
|
|||||||
bmp1,
|
bmp1,
|
||||||
wxPoint(30, 70)
|
wxPoint(30, 70)
|
||||||
);
|
);
|
||||||
|
|
||||||
bmpBtn->SetBitmapSelected(bmp2);
|
bmpBtn->SetBitmapSelected(bmp2);
|
||||||
bmpBtn->SetBitmapFocus(bmp3);
|
bmpBtn->SetBitmapFocus(bmp3);
|
||||||
|
|
||||||
|
@@ -154,6 +154,8 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_parent->DoAddChild( this );
|
m_parent->DoAddChild( this );
|
||||||
|
|
||||||
|
m_focusWidget = GTK_COMBO(m_widget)->entry;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
|
|
||||||
|
@@ -46,11 +46,13 @@ void wxStaticBitmap::CreatePixmapWidget()
|
|||||||
mask = m_bitmap.GetMask()->GetBitmap();
|
mask = m_bitmap.GetMask()->GetBitmap();
|
||||||
m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask );
|
m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask );
|
||||||
|
|
||||||
/* insert GTK representation */
|
// insert GTK representation
|
||||||
(*m_parent->m_insertCallback)(m_parent, this);
|
(*m_parent->m_insertCallback)(m_parent, this);
|
||||||
|
|
||||||
gtk_widget_show( m_widget );
|
gtk_widget_show( m_widget );
|
||||||
|
|
||||||
|
m_focusWidget = m_widget;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +66,7 @@ bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bi
|
|||||||
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
|
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxXX creation failed") );
|
wxFAIL_MSG( wxT("wxXX creation failed") );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_bitmap = bitmap;
|
m_bitmap = bitmap;
|
||||||
@@ -81,6 +83,8 @@ bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bi
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_widget = gtk_label_new( "Bitmap" );
|
m_widget = gtk_label_new( "Bitmap" );
|
||||||
|
|
||||||
|
m_focusWidget = m_widget;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
}
|
}
|
||||||
|
@@ -52,6 +52,9 @@ gtk_insert_text_callback(GtkEditable *editable,
|
|||||||
gint *position,
|
gint *position,
|
||||||
wxTextCtrl *win)
|
wxTextCtrl *win)
|
||||||
{
|
{
|
||||||
|
if (g_isIdle)
|
||||||
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
// we should only be called if we have a max len limit at all
|
// we should only be called if we have a max len limit at all
|
||||||
GtkEntry *entry = GTK_ENTRY (editable);
|
GtkEntry *entry = GTK_ENTRY (editable);
|
||||||
|
|
||||||
@@ -117,111 +120,6 @@ gtk_scrollbar_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
|
|||||||
win->CalculateScrollbar();
|
win->CalculateScrollbar();
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// "focus_in_event"
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
extern wxWindow *g_focusWindow;
|
|
||||||
extern bool g_blockEventsOnDrag;
|
|
||||||
// extern bool g_isIdle;
|
|
||||||
|
|
||||||
static gint gtk_text_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
|
|
||||||
{
|
|
||||||
// Necessary?
|
|
||||||
#if 0
|
|
||||||
if (g_isIdle)
|
|
||||||
wxapp_install_idle_handler();
|
|
||||||
#endif
|
|
||||||
if (!win->m_hasVMT) return FALSE;
|
|
||||||
if (g_blockEventsOnDrag) return FALSE;
|
|
||||||
|
|
||||||
g_focusWindow = win;
|
|
||||||
|
|
||||||
// notify the parent that we got the focus
|
|
||||||
wxChildFocusEvent eventFocus(win);
|
|
||||||
(void)win->GetEventHandler()->ProcessEvent(eventFocus);
|
|
||||||
|
|
||||||
#ifdef HAVE_XIM
|
|
||||||
if (win->m_ic)
|
|
||||||
gdk_im_begin(win->m_ic, win->m_wxwindow->window);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
#ifdef wxUSE_CARET
|
|
||||||
// caret needs to be informed about focus change
|
|
||||||
wxCaret *caret = win->GetCaret();
|
|
||||||
if ( caret )
|
|
||||||
{
|
|
||||||
caret->OnSetFocus();
|
|
||||||
}
|
|
||||||
#endif // wxUSE_CARET
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() );
|
|
||||||
event.SetEventObject( win );
|
|
||||||
|
|
||||||
if (win->GetEventHandler()->ProcessEvent( event ))
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// "focus_out_event"
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
static gint gtk_text_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
if (g_isIdle)
|
|
||||||
wxapp_install_idle_handler();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!win->m_hasVMT) return FALSE;
|
|
||||||
if (g_blockEventsOnDrag) return FALSE;
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// if the focus goes out of our app alltogether, OnIdle() will send
|
|
||||||
// wxActivateEvent, otherwise gtk_window_focus_in_callback() will reset
|
|
||||||
// g_sendActivateEvent to -1
|
|
||||||
g_sendActivateEvent = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxWindow *winFocus = wxFindFocusedChild(win);
|
|
||||||
if ( winFocus )
|
|
||||||
win = winFocus;
|
|
||||||
|
|
||||||
g_focusWindow = (wxWindow *)NULL;
|
|
||||||
|
|
||||||
#ifdef HAVE_XIM
|
|
||||||
if (win->m_ic)
|
|
||||||
gdk_im_end();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
#ifdef wxUSE_CARET
|
|
||||||
// caret needs to be informed about focus change
|
|
||||||
wxCaret *caret = win->GetCaret();
|
|
||||||
if ( caret )
|
|
||||||
{
|
|
||||||
caret->OnKillFocus();
|
|
||||||
}
|
|
||||||
#endif // wxUSE_CARET
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() );
|
|
||||||
event.SetEventObject( win );
|
|
||||||
|
|
||||||
if (win->GetEventHandler()->ProcessEvent( event ))
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxTextCtrl
|
// wxTextCtrl
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -347,6 +245,8 @@ bool wxTextCtrl::Create( wxWindow *parent,
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_parent->DoAddChild( this );
|
m_parent->DoAddChild( this );
|
||||||
|
|
||||||
|
m_focusWidget = m_text;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
|
|
||||||
@@ -368,20 +268,6 @@ bool wxTextCtrl::Create( wxWindow *parent,
|
|||||||
{
|
{
|
||||||
gtk_signal_connect(GTK_OBJECT(GTK_TEXT(m_text)->vadj), "changed",
|
gtk_signal_connect(GTK_OBJECT(GTK_TEXT(m_text)->vadj), "changed",
|
||||||
(GtkSignalFunc) gtk_scrollbar_changed_callback, (gpointer) this );
|
(GtkSignalFunc) gtk_scrollbar_changed_callback, (gpointer) this );
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(GTK_TEXT(m_text)), "focus_in_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_text_focus_in_callback), (gpointer)this );
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(GTK_TEXT(m_text)), "focus_out_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_text_focus_out_callback), (gpointer)this );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_text), "focus_in_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_text_focus_in_callback), (gpointer)this );
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_text), "focus_out_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_text_focus_out_callback), (gpointer)this );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!value.IsEmpty())
|
if (!value.IsEmpty())
|
||||||
|
@@ -1669,7 +1669,7 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
|
|||||||
switch ( g_sendActivateEvent )
|
switch ( g_sendActivateEvent )
|
||||||
{
|
{
|
||||||
case -1:
|
case -1:
|
||||||
// we've got focus from outside, synthtize wxActivateEvent
|
// we've got focus from outside, synthetize wxActivateEvent
|
||||||
g_sendActivateEvent = 1;
|
g_sendActivateEvent = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1683,14 +1683,12 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
|
|||||||
g_focusWindowLast =
|
g_focusWindowLast =
|
||||||
g_focusWindow = win;
|
g_focusWindow = win;
|
||||||
|
|
||||||
/*
|
#if 0
|
||||||
printf( "OnSetFocus from " );
|
wxPrintf( "OnSetFocus from " );
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
||||||
printf( win->GetClassInfo()->GetClassName() );
|
wxPrintf( win->GetClassInfo()->GetClassName() );
|
||||||
printf( " " );
|
wxPrintf( ".\n" );
|
||||||
printf( WXSTRINGCAST win->GetLabel() );
|
#endif
|
||||||
printf( ".\n" );
|
|
||||||
*/
|
|
||||||
|
|
||||||
// notify the parent keeping track of focus for the kbd navigation
|
// notify the parent keeping track of focus for the kbd navigation
|
||||||
// purposes that we got it
|
// purposes that we got it
|
||||||
@@ -1711,16 +1709,6 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_CARET
|
#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())
|
if (win->IsTopLevel())
|
||||||
{
|
{
|
||||||
wxActivateEvent event( wxEVT_ACTIVATE, TRUE, win->GetId() );
|
wxActivateEvent event( wxEVT_ACTIVATE, TRUE, win->GetId() );
|
||||||
@@ -1768,12 +1756,12 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED
|
|||||||
|
|
||||||
g_focusWindow = (wxWindowGTK *)NULL;
|
g_focusWindow = (wxWindowGTK *)NULL;
|
||||||
|
|
||||||
/*
|
#if 0
|
||||||
printf( "OnKillFocus from " );
|
wxPrintf( "OnKillFocus from " );
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
||||||
printf( win->GetClassInfo()->GetClassName() );
|
wxPrintf( win->GetClassInfo()->GetClassName() );
|
||||||
printf( ".\n" );
|
wxPrintf( ".\n" );
|
||||||
*/
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_XIM
|
#ifdef HAVE_XIM
|
||||||
if (win->m_ic)
|
if (win->m_ic)
|
||||||
@@ -1789,16 +1777,6 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_CARET
|
#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())
|
if (win->IsTopLevel())
|
||||||
{
|
{
|
||||||
wxActivateEvent event( wxEVT_ACTIVATE, FALSE, win->GetId() );
|
wxActivateEvent event( wxEVT_ACTIVATE, FALSE, win->GetId() );
|
||||||
@@ -1837,9 +1815,7 @@ static gint gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_
|
|||||||
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
||||||
|
|
||||||
wxMouseEvent event( wxEVT_ENTER_WINDOW );
|
wxMouseEvent event( wxEVT_ENTER_WINDOW );
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
|
||||||
event.SetTimestamp( gdk_event->time );
|
event.SetTimestamp( gdk_event->time );
|
||||||
#endif
|
|
||||||
event.SetEventObject( win );
|
event.SetEventObject( win );
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
@@ -1879,9 +1855,7 @@ static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_
|
|||||||
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
||||||
|
|
||||||
wxMouseEvent event( wxEVT_LEAVE_WINDOW );
|
wxMouseEvent event( wxEVT_LEAVE_WINDOW );
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
|
||||||
event.SetTimestamp( gdk_event->time );
|
event.SetTimestamp( gdk_event->time );
|
||||||
#endif
|
|
||||||
event.SetEventObject( win );
|
event.SetEventObject( win );
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
@@ -2299,6 +2273,7 @@ void wxWindowGTK::Init()
|
|||||||
// GTK specific
|
// GTK specific
|
||||||
m_widget = (GtkWidget *) NULL;
|
m_widget = (GtkWidget *) NULL;
|
||||||
m_wxwindow = (GtkWidget *) NULL;
|
m_wxwindow = (GtkWidget *) NULL;
|
||||||
|
m_focusWidget = (GtkWidget *) NULL;
|
||||||
|
|
||||||
// position/size
|
// position/size
|
||||||
m_x = 0;
|
m_x = 0;
|
||||||
@@ -2313,7 +2288,7 @@ void wxWindowGTK::Init()
|
|||||||
|
|
||||||
m_noExpose = FALSE;
|
m_noExpose = FALSE;
|
||||||
m_nativeSizeEvent = FALSE;
|
m_nativeSizeEvent = FALSE;
|
||||||
|
|
||||||
m_hasScrolling = FALSE;
|
m_hasScrolling = FALSE;
|
||||||
m_isScrolling = FALSE;
|
m_isScrolling = FALSE;
|
||||||
|
|
||||||
@@ -2487,6 +2462,8 @@ bool wxWindowGTK::Create( wxWindow *parent,
|
|||||||
|
|
||||||
if (m_parent)
|
if (m_parent)
|
||||||
m_parent->DoAddChild( this );
|
m_parent->DoAddChild( this );
|
||||||
|
|
||||||
|
m_focusWidget = m_wxwindow;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
|
|
||||||
@@ -2576,12 +2553,12 @@ bool wxWindowGTK::PreCreation( wxWindowGTK *parent, const wxPoint &pos, const w
|
|||||||
void wxWindowGTK::PostCreation()
|
void wxWindowGTK::PostCreation()
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") );
|
wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") );
|
||||||
|
|
||||||
if (m_wxwindow)
|
if (m_wxwindow)
|
||||||
{
|
{
|
||||||
if (!m_noExpose)
|
if (!m_noExpose)
|
||||||
{
|
{
|
||||||
/* these get reported to wxWindows -> wxPaintEvent */
|
// these get reported to wxWindows -> wxPaintEvent
|
||||||
|
|
||||||
gtk_pizza_set_external( GTK_PIZZA(m_wxwindow), TRUE );
|
gtk_pizza_set_external( GTK_PIZZA(m_wxwindow), TRUE );
|
||||||
|
|
||||||
@@ -2598,35 +2575,32 @@ void wxWindowGTK::PostCreation()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
// these are called when the "sunken" or "raised" borders are drawn */
|
||||||
/* these are called when the "sunken" or "raised" borders are drawn */
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "expose_event",
|
gtk_signal_connect( GTK_OBJECT(m_widget), "expose_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_own_expose_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_own_expose_callback), (gpointer)this );
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "draw",
|
gtk_signal_connect( GTK_OBJECT(m_widget), "draw",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_own_draw_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_own_draw_callback), (gpointer)this );
|
||||||
|
}
|
||||||
|
|
||||||
|
// focus handling
|
||||||
|
|
||||||
|
if (m_focusWidget == NULL)
|
||||||
|
m_focusWidget = m_widget;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (GetClassInfo() && GetClassInfo()->GetClassName())
|
||||||
|
wxPrintf( GetClassInfo()->GetClassName() );
|
||||||
|
wxPrintf( ".\n" );
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
if (m_wxwindow && m_needParent)
|
gtk_signal_connect( GTK_OBJECT(m_focusWidget), "focus_in_event",
|
||||||
{
|
GTK_SIGNAL_FUNC(gtk_window_focus_in_callback), (gpointer)this );
|
||||||
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "focus_in_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_window_focus_in_callback), (gpointer)this );
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "focus_out_event",
|
gtk_signal_connect( GTK_OBJECT(m_focusWidget), "focus_out_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_focus_out_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_focus_out_callback), (gpointer)this );
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// For dialogs and frames, we are interested mainly in
|
|
||||||
// m_widget's focus.
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "focus_in_event",
|
// connect to the various key and mouse handlers
|
||||||
GTK_SIGNAL_FUNC(gtk_window_focus_in_callback), (gpointer)this );
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "focus_out_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_window_focus_out_callback), (gpointer)this );
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *connect_widget = GetConnectWidget();
|
GtkWidget *connect_widget = GetConnectWidget();
|
||||||
|
|
||||||
|
@@ -154,6 +154,8 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_parent->DoAddChild( this );
|
m_parent->DoAddChild( this );
|
||||||
|
|
||||||
|
m_focusWidget = GTK_COMBO(m_widget)->entry;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
|
|
||||||
|
@@ -46,11 +46,13 @@ void wxStaticBitmap::CreatePixmapWidget()
|
|||||||
mask = m_bitmap.GetMask()->GetBitmap();
|
mask = m_bitmap.GetMask()->GetBitmap();
|
||||||
m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask );
|
m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask );
|
||||||
|
|
||||||
/* insert GTK representation */
|
// insert GTK representation
|
||||||
(*m_parent->m_insertCallback)(m_parent, this);
|
(*m_parent->m_insertCallback)(m_parent, this);
|
||||||
|
|
||||||
gtk_widget_show( m_widget );
|
gtk_widget_show( m_widget );
|
||||||
|
|
||||||
|
m_focusWidget = m_widget;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +66,7 @@ bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bi
|
|||||||
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
|
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxXX creation failed") );
|
wxFAIL_MSG( wxT("wxXX creation failed") );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_bitmap = bitmap;
|
m_bitmap = bitmap;
|
||||||
@@ -81,6 +83,8 @@ bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bi
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_widget = gtk_label_new( "Bitmap" );
|
m_widget = gtk_label_new( "Bitmap" );
|
||||||
|
|
||||||
|
m_focusWidget = m_widget;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
}
|
}
|
||||||
|
@@ -52,6 +52,9 @@ gtk_insert_text_callback(GtkEditable *editable,
|
|||||||
gint *position,
|
gint *position,
|
||||||
wxTextCtrl *win)
|
wxTextCtrl *win)
|
||||||
{
|
{
|
||||||
|
if (g_isIdle)
|
||||||
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
// we should only be called if we have a max len limit at all
|
// we should only be called if we have a max len limit at all
|
||||||
GtkEntry *entry = GTK_ENTRY (editable);
|
GtkEntry *entry = GTK_ENTRY (editable);
|
||||||
|
|
||||||
@@ -117,111 +120,6 @@ gtk_scrollbar_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
|
|||||||
win->CalculateScrollbar();
|
win->CalculateScrollbar();
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// "focus_in_event"
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
extern wxWindow *g_focusWindow;
|
|
||||||
extern bool g_blockEventsOnDrag;
|
|
||||||
// extern bool g_isIdle;
|
|
||||||
|
|
||||||
static gint gtk_text_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
|
|
||||||
{
|
|
||||||
// Necessary?
|
|
||||||
#if 0
|
|
||||||
if (g_isIdle)
|
|
||||||
wxapp_install_idle_handler();
|
|
||||||
#endif
|
|
||||||
if (!win->m_hasVMT) return FALSE;
|
|
||||||
if (g_blockEventsOnDrag) return FALSE;
|
|
||||||
|
|
||||||
g_focusWindow = win;
|
|
||||||
|
|
||||||
// notify the parent that we got the focus
|
|
||||||
wxChildFocusEvent eventFocus(win);
|
|
||||||
(void)win->GetEventHandler()->ProcessEvent(eventFocus);
|
|
||||||
|
|
||||||
#ifdef HAVE_XIM
|
|
||||||
if (win->m_ic)
|
|
||||||
gdk_im_begin(win->m_ic, win->m_wxwindow->window);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
#ifdef wxUSE_CARET
|
|
||||||
// caret needs to be informed about focus change
|
|
||||||
wxCaret *caret = win->GetCaret();
|
|
||||||
if ( caret )
|
|
||||||
{
|
|
||||||
caret->OnSetFocus();
|
|
||||||
}
|
|
||||||
#endif // wxUSE_CARET
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() );
|
|
||||||
event.SetEventObject( win );
|
|
||||||
|
|
||||||
if (win->GetEventHandler()->ProcessEvent( event ))
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// "focus_out_event"
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
static gint gtk_text_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
if (g_isIdle)
|
|
||||||
wxapp_install_idle_handler();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!win->m_hasVMT) return FALSE;
|
|
||||||
if (g_blockEventsOnDrag) return FALSE;
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// if the focus goes out of our app alltogether, OnIdle() will send
|
|
||||||
// wxActivateEvent, otherwise gtk_window_focus_in_callback() will reset
|
|
||||||
// g_sendActivateEvent to -1
|
|
||||||
g_sendActivateEvent = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxWindow *winFocus = wxFindFocusedChild(win);
|
|
||||||
if ( winFocus )
|
|
||||||
win = winFocus;
|
|
||||||
|
|
||||||
g_focusWindow = (wxWindow *)NULL;
|
|
||||||
|
|
||||||
#ifdef HAVE_XIM
|
|
||||||
if (win->m_ic)
|
|
||||||
gdk_im_end();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
#ifdef wxUSE_CARET
|
|
||||||
// caret needs to be informed about focus change
|
|
||||||
wxCaret *caret = win->GetCaret();
|
|
||||||
if ( caret )
|
|
||||||
{
|
|
||||||
caret->OnKillFocus();
|
|
||||||
}
|
|
||||||
#endif // wxUSE_CARET
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() );
|
|
||||||
event.SetEventObject( win );
|
|
||||||
|
|
||||||
if (win->GetEventHandler()->ProcessEvent( event ))
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxTextCtrl
|
// wxTextCtrl
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -347,6 +245,8 @@ bool wxTextCtrl::Create( wxWindow *parent,
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_parent->DoAddChild( this );
|
m_parent->DoAddChild( this );
|
||||||
|
|
||||||
|
m_focusWidget = m_text;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
|
|
||||||
@@ -368,20 +268,6 @@ bool wxTextCtrl::Create( wxWindow *parent,
|
|||||||
{
|
{
|
||||||
gtk_signal_connect(GTK_OBJECT(GTK_TEXT(m_text)->vadj), "changed",
|
gtk_signal_connect(GTK_OBJECT(GTK_TEXT(m_text)->vadj), "changed",
|
||||||
(GtkSignalFunc) gtk_scrollbar_changed_callback, (gpointer) this );
|
(GtkSignalFunc) gtk_scrollbar_changed_callback, (gpointer) this );
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(GTK_TEXT(m_text)), "focus_in_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_text_focus_in_callback), (gpointer)this );
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(GTK_TEXT(m_text)), "focus_out_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_text_focus_out_callback), (gpointer)this );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_text), "focus_in_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_text_focus_in_callback), (gpointer)this );
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_text), "focus_out_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_text_focus_out_callback), (gpointer)this );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!value.IsEmpty())
|
if (!value.IsEmpty())
|
||||||
|
@@ -1669,7 +1669,7 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
|
|||||||
switch ( g_sendActivateEvent )
|
switch ( g_sendActivateEvent )
|
||||||
{
|
{
|
||||||
case -1:
|
case -1:
|
||||||
// we've got focus from outside, synthtize wxActivateEvent
|
// we've got focus from outside, synthetize wxActivateEvent
|
||||||
g_sendActivateEvent = 1;
|
g_sendActivateEvent = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1683,14 +1683,12 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
|
|||||||
g_focusWindowLast =
|
g_focusWindowLast =
|
||||||
g_focusWindow = win;
|
g_focusWindow = win;
|
||||||
|
|
||||||
/*
|
#if 0
|
||||||
printf( "OnSetFocus from " );
|
wxPrintf( "OnSetFocus from " );
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
||||||
printf( win->GetClassInfo()->GetClassName() );
|
wxPrintf( win->GetClassInfo()->GetClassName() );
|
||||||
printf( " " );
|
wxPrintf( ".\n" );
|
||||||
printf( WXSTRINGCAST win->GetLabel() );
|
#endif
|
||||||
printf( ".\n" );
|
|
||||||
*/
|
|
||||||
|
|
||||||
// notify the parent keeping track of focus for the kbd navigation
|
// notify the parent keeping track of focus for the kbd navigation
|
||||||
// purposes that we got it
|
// purposes that we got it
|
||||||
@@ -1711,16 +1709,6 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_CARET
|
#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())
|
if (win->IsTopLevel())
|
||||||
{
|
{
|
||||||
wxActivateEvent event( wxEVT_ACTIVATE, TRUE, win->GetId() );
|
wxActivateEvent event( wxEVT_ACTIVATE, TRUE, win->GetId() );
|
||||||
@@ -1768,12 +1756,12 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED
|
|||||||
|
|
||||||
g_focusWindow = (wxWindowGTK *)NULL;
|
g_focusWindow = (wxWindowGTK *)NULL;
|
||||||
|
|
||||||
/*
|
#if 0
|
||||||
printf( "OnKillFocus from " );
|
wxPrintf( "OnKillFocus from " );
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
||||||
printf( win->GetClassInfo()->GetClassName() );
|
wxPrintf( win->GetClassInfo()->GetClassName() );
|
||||||
printf( ".\n" );
|
wxPrintf( ".\n" );
|
||||||
*/
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_XIM
|
#ifdef HAVE_XIM
|
||||||
if (win->m_ic)
|
if (win->m_ic)
|
||||||
@@ -1789,16 +1777,6 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_CARET
|
#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())
|
if (win->IsTopLevel())
|
||||||
{
|
{
|
||||||
wxActivateEvent event( wxEVT_ACTIVATE, FALSE, win->GetId() );
|
wxActivateEvent event( wxEVT_ACTIVATE, FALSE, win->GetId() );
|
||||||
@@ -1837,9 +1815,7 @@ static gint gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_
|
|||||||
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
||||||
|
|
||||||
wxMouseEvent event( wxEVT_ENTER_WINDOW );
|
wxMouseEvent event( wxEVT_ENTER_WINDOW );
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
|
||||||
event.SetTimestamp( gdk_event->time );
|
event.SetTimestamp( gdk_event->time );
|
||||||
#endif
|
|
||||||
event.SetEventObject( win );
|
event.SetEventObject( win );
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
@@ -1879,9 +1855,7 @@ static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_
|
|||||||
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
|
||||||
|
|
||||||
wxMouseEvent event( wxEVT_LEAVE_WINDOW );
|
wxMouseEvent event( wxEVT_LEAVE_WINDOW );
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
|
||||||
event.SetTimestamp( gdk_event->time );
|
event.SetTimestamp( gdk_event->time );
|
||||||
#endif
|
|
||||||
event.SetEventObject( win );
|
event.SetEventObject( win );
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
@@ -2299,6 +2273,7 @@ void wxWindowGTK::Init()
|
|||||||
// GTK specific
|
// GTK specific
|
||||||
m_widget = (GtkWidget *) NULL;
|
m_widget = (GtkWidget *) NULL;
|
||||||
m_wxwindow = (GtkWidget *) NULL;
|
m_wxwindow = (GtkWidget *) NULL;
|
||||||
|
m_focusWidget = (GtkWidget *) NULL;
|
||||||
|
|
||||||
// position/size
|
// position/size
|
||||||
m_x = 0;
|
m_x = 0;
|
||||||
@@ -2313,7 +2288,7 @@ void wxWindowGTK::Init()
|
|||||||
|
|
||||||
m_noExpose = FALSE;
|
m_noExpose = FALSE;
|
||||||
m_nativeSizeEvent = FALSE;
|
m_nativeSizeEvent = FALSE;
|
||||||
|
|
||||||
m_hasScrolling = FALSE;
|
m_hasScrolling = FALSE;
|
||||||
m_isScrolling = FALSE;
|
m_isScrolling = FALSE;
|
||||||
|
|
||||||
@@ -2487,6 +2462,8 @@ bool wxWindowGTK::Create( wxWindow *parent,
|
|||||||
|
|
||||||
if (m_parent)
|
if (m_parent)
|
||||||
m_parent->DoAddChild( this );
|
m_parent->DoAddChild( this );
|
||||||
|
|
||||||
|
m_focusWidget = m_wxwindow;
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
|
|
||||||
@@ -2576,12 +2553,12 @@ bool wxWindowGTK::PreCreation( wxWindowGTK *parent, const wxPoint &pos, const w
|
|||||||
void wxWindowGTK::PostCreation()
|
void wxWindowGTK::PostCreation()
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") );
|
wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") );
|
||||||
|
|
||||||
if (m_wxwindow)
|
if (m_wxwindow)
|
||||||
{
|
{
|
||||||
if (!m_noExpose)
|
if (!m_noExpose)
|
||||||
{
|
{
|
||||||
/* these get reported to wxWindows -> wxPaintEvent */
|
// these get reported to wxWindows -> wxPaintEvent
|
||||||
|
|
||||||
gtk_pizza_set_external( GTK_PIZZA(m_wxwindow), TRUE );
|
gtk_pizza_set_external( GTK_PIZZA(m_wxwindow), TRUE );
|
||||||
|
|
||||||
@@ -2598,35 +2575,32 @@ void wxWindowGTK::PostCreation()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
// these are called when the "sunken" or "raised" borders are drawn */
|
||||||
/* these are called when the "sunken" or "raised" borders are drawn */
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "expose_event",
|
gtk_signal_connect( GTK_OBJECT(m_widget), "expose_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_own_expose_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_own_expose_callback), (gpointer)this );
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "draw",
|
gtk_signal_connect( GTK_OBJECT(m_widget), "draw",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_own_draw_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_own_draw_callback), (gpointer)this );
|
||||||
|
}
|
||||||
|
|
||||||
|
// focus handling
|
||||||
|
|
||||||
|
if (m_focusWidget == NULL)
|
||||||
|
m_focusWidget = m_widget;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (GetClassInfo() && GetClassInfo()->GetClassName())
|
||||||
|
wxPrintf( GetClassInfo()->GetClassName() );
|
||||||
|
wxPrintf( ".\n" );
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
if (m_wxwindow && m_needParent)
|
gtk_signal_connect( GTK_OBJECT(m_focusWidget), "focus_in_event",
|
||||||
{
|
GTK_SIGNAL_FUNC(gtk_window_focus_in_callback), (gpointer)this );
|
||||||
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "focus_in_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_window_focus_in_callback), (gpointer)this );
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "focus_out_event",
|
gtk_signal_connect( GTK_OBJECT(m_focusWidget), "focus_out_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_focus_out_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_focus_out_callback), (gpointer)this );
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// For dialogs and frames, we are interested mainly in
|
|
||||||
// m_widget's focus.
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "focus_in_event",
|
// connect to the various key and mouse handlers
|
||||||
GTK_SIGNAL_FUNC(gtk_window_focus_in_callback), (gpointer)this );
|
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "focus_out_event",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_window_focus_out_callback), (gpointer)this );
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *connect_widget = GetConnectWidget();
|
GtkWidget *connect_widget = GetConnectWidget();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user