From: Robert Roebling Date: Wed, 28 Apr 1999 08:29:22 +0000 (+0000) Subject: Chnages to focus code with debug code X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/2e563988fb0a55e44f295445727e86dcce793f7a Chnages to focus code with debug code added wxSL_LABELS git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2297 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index f402313c36..459043b402 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -46,6 +46,16 @@ extern bool g_isIdle; extern wxList wxPendingDelete; +//----------------------------------------------------------------------------- +// debug +//----------------------------------------------------------------------------- + +#ifdef __WXDEBUG__ + +extern void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window ); + +#endif + //----------------------------------------------------------------------------- // "size_allocate" //----------------------------------------------------------------------------- @@ -216,6 +226,21 @@ gtk_frame_realized_callback( GtkWidget *widget, wxFrame *win ) win->SetIcon( icon ); } + /* we set the focus to the child that accepts the focus. this + doesn't really have to be done in "realize" but why not? */ + wxNode *node = win->m_children.First(); + while (node) + { + wxWindow *child = (wxWindow*) node->Data(); + if (child->AcceptsFocus()) + { + child->SetFocus(); + break; + } + + node = node->Next(); + } + return FALSE; } @@ -336,6 +361,10 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title, m_widget = gtk_window_new( win_type ); +#ifdef __WXDEBUG__ + debug_focus_in( m_widget, _T("wxFrame::m_widget"), name ); +#endif + gtk_window_set_title( GTK_WINDOW(m_widget), title.mbc_str() ); GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS ); @@ -348,17 +377,22 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title, GTK_WIDGET_UNSET_FLAGS( m_mainWidget, GTK_CAN_FOCUS ); gtk_container_add( GTK_CONTAINER(m_widget), m_mainWidget ); +#ifdef __WXDEBUG__ + debug_focus_in( m_mainWidget, _T("wxFrame::m_mainWidget"), name ); +#endif + /* m_wxwindow only represents the client area without toolbar and menubar */ m_wxwindow = gtk_myfixed_new(); gtk_widget_show( m_wxwindow ); gtk_container_add( GTK_CONTAINER(m_mainWidget), m_wxwindow ); - /* we allow the frame to get the focus as otherwise no - key events will get sent to it. the point with this is - that the menu's key accelerators work by interceting - key events here */ - GTK_WIDGET_SET_FLAGS( m_wxwindow, GTK_CAN_FOCUS ); - gtk_widget_grab_focus( m_wxwindow ); +#ifdef __WXDEBUG__ + debug_focus_in( m_wxwindow, _T("wxFrame::m_wxwindow"), name ); +#endif + + /* we donm't allow the frame to get the focus as otherwise + the frame will grabit at arbitrary fcous changes. */ + GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS ); if (m_parent) m_parent->AddChild( this ); diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index a690de0dea..60df767b8f 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -36,6 +36,16 @@ extern bool g_isIdle; extern bool g_blockEventsOnDrag; +//----------------------------------------------------------------------------- +// debug +//----------------------------------------------------------------------------- + +#ifdef __WXDEBUG__ + +extern void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window ); + +#endif + //----------------------------------------------------------------------------- // wxNotebookPage //----------------------------------------------------------------------------- @@ -246,6 +256,10 @@ bool wxNotebook::Create(wxWindow *parent, wxWindowID id, m_widget = gtk_notebook_new(); +#ifdef __WXDEBUG__ + debug_focus_in( m_widget, _T("wxNotebook::m_widget"), name ); +#endif + gtk_notebook_set_scrollable( GTK_NOTEBOOK(m_widget), 1 ); m_idHandler = gtk_signal_connect ( diff --git a/src/gtk/slider.cpp b/src/gtk/slider.cpp index 3c7c1ade23..0fa63e404e 100644 --- a/src/gtk/slider.cpp +++ b/src/gtk/slider.cpp @@ -101,12 +101,15 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, m_oldPos = 0.0; - if (style & wxSL_VERTICAL == wxSL_VERTICAL) + if (style & wxSL_VERTICAL) m_widget = gtk_hscale_new( (GtkAdjustment *) NULL ); else m_widget = gtk_vscale_new( (GtkAdjustment *) NULL ); - gtk_scale_set_draw_value( GTK_SCALE( m_widget ), FALSE ); + if (style & wxSL_LABELS) + gtk_scale_set_draw_value( GTK_SCALE( m_widget ), TRUE ); + else + gtk_scale_set_draw_value( GTK_SCALE( m_widget ), FALSE ); m_adjust = gtk_range_get_adjustment( GTK_RANGE(m_widget) ); diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index c1a81398db..4fb6cdc1c9 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -121,6 +121,39 @@ */ +//----------------------------------------------------------------------------- +// debug +//----------------------------------------------------------------------------- + +#ifdef __WXDEBUG__ + +static gint gtk_debug_focus_in_callback( GtkWidget *WXUNUSED(widget), + GdkEvent *WXUNUSED(event), + const wxChar *name ) +{ + wxPrintf( _T("FOCUS NOW AT: ") ); + wxPrintf( name ); + wxPrintf( _T("\n") ); + + return FALSE; +} + +void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window ) +{ + wxString tmp = name; + tmp += _T(" FROM "); + tmp += window; + + wxChar *s = new wxChar[tmp.Length()+1]; + + wxStrcpy( s, tmp ); + + gtk_signal_connect( GTK_OBJECT(widget), "focus_in_event", + GTK_SIGNAL_FUNC(gtk_debug_focus_in_callback), (gpointer)s ); +} + +#endif + //----------------------------------------------------------------------------- // data //----------------------------------------------------------------------------- @@ -1542,8 +1575,17 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL ); GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS ); +#ifdef __WXDEBUG__ + debug_focus_in( m_widget, _T("wxWindow::m_widget"), name ); +#endif + GtkScrolledWindow *s_window = GTK_SCROLLED_WINDOW(m_widget); +#ifdef __WXDEBUG__ + debug_focus_in( s_window->hscrollbar, _T("wxWindow::hsrcollbar"), name ); + debug_focus_in( s_window->vscrollbar, _T("wxWindow::vsrcollbar"), name ); +#endif + GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass ); scroll_class->scrollbar_spacing = 0; @@ -1558,6 +1600,10 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, m_wxwindow = gtk_myfixed_new(); gtk_widget_show( m_wxwindow ); +#ifdef __WXDEBUG__ + debug_focus_in( m_wxwindow, _T("wxWindow::m_wxwindow"), name ); +#endif + gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow ); #if (GTK_MINOR_VERSION > 0) @@ -1606,7 +1652,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, } /* grab the actual focus */ - gtk_widget_grab_focus( m_wxwindow ); +// gtk_widget_grab_focus( m_wxwindow ); #if (GTK_MINOR_VERSION == 0) // shut the viewport up @@ -2284,6 +2330,9 @@ void wxWindow::SetSizeHints( int minW, int minH, int maxW, int maxH, int WXUNUSE void wxWindow::OnSize( wxSizeEvent &WXUNUSED(event) ) { + /* this is commented because it also is commented + in wxMSW. before I get even more questions about + this. */ // if (GetAutoLayout()) Layout(); } diff --git a/src/gtk1/frame.cpp b/src/gtk1/frame.cpp index f402313c36..459043b402 100644 --- a/src/gtk1/frame.cpp +++ b/src/gtk1/frame.cpp @@ -46,6 +46,16 @@ extern bool g_isIdle; extern wxList wxPendingDelete; +//----------------------------------------------------------------------------- +// debug +//----------------------------------------------------------------------------- + +#ifdef __WXDEBUG__ + +extern void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window ); + +#endif + //----------------------------------------------------------------------------- // "size_allocate" //----------------------------------------------------------------------------- @@ -216,6 +226,21 @@ gtk_frame_realized_callback( GtkWidget *widget, wxFrame *win ) win->SetIcon( icon ); } + /* we set the focus to the child that accepts the focus. this + doesn't really have to be done in "realize" but why not? */ + wxNode *node = win->m_children.First(); + while (node) + { + wxWindow *child = (wxWindow*) node->Data(); + if (child->AcceptsFocus()) + { + child->SetFocus(); + break; + } + + node = node->Next(); + } + return FALSE; } @@ -336,6 +361,10 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title, m_widget = gtk_window_new( win_type ); +#ifdef __WXDEBUG__ + debug_focus_in( m_widget, _T("wxFrame::m_widget"), name ); +#endif + gtk_window_set_title( GTK_WINDOW(m_widget), title.mbc_str() ); GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS ); @@ -348,17 +377,22 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title, GTK_WIDGET_UNSET_FLAGS( m_mainWidget, GTK_CAN_FOCUS ); gtk_container_add( GTK_CONTAINER(m_widget), m_mainWidget ); +#ifdef __WXDEBUG__ + debug_focus_in( m_mainWidget, _T("wxFrame::m_mainWidget"), name ); +#endif + /* m_wxwindow only represents the client area without toolbar and menubar */ m_wxwindow = gtk_myfixed_new(); gtk_widget_show( m_wxwindow ); gtk_container_add( GTK_CONTAINER(m_mainWidget), m_wxwindow ); - /* we allow the frame to get the focus as otherwise no - key events will get sent to it. the point with this is - that the menu's key accelerators work by interceting - key events here */ - GTK_WIDGET_SET_FLAGS( m_wxwindow, GTK_CAN_FOCUS ); - gtk_widget_grab_focus( m_wxwindow ); +#ifdef __WXDEBUG__ + debug_focus_in( m_wxwindow, _T("wxFrame::m_wxwindow"), name ); +#endif + + /* we donm't allow the frame to get the focus as otherwise + the frame will grabit at arbitrary fcous changes. */ + GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS ); if (m_parent) m_parent->AddChild( this ); diff --git a/src/gtk1/notebook.cpp b/src/gtk1/notebook.cpp index a690de0dea..60df767b8f 100644 --- a/src/gtk1/notebook.cpp +++ b/src/gtk1/notebook.cpp @@ -36,6 +36,16 @@ extern bool g_isIdle; extern bool g_blockEventsOnDrag; +//----------------------------------------------------------------------------- +// debug +//----------------------------------------------------------------------------- + +#ifdef __WXDEBUG__ + +extern void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window ); + +#endif + //----------------------------------------------------------------------------- // wxNotebookPage //----------------------------------------------------------------------------- @@ -246,6 +256,10 @@ bool wxNotebook::Create(wxWindow *parent, wxWindowID id, m_widget = gtk_notebook_new(); +#ifdef __WXDEBUG__ + debug_focus_in( m_widget, _T("wxNotebook::m_widget"), name ); +#endif + gtk_notebook_set_scrollable( GTK_NOTEBOOK(m_widget), 1 ); m_idHandler = gtk_signal_connect ( diff --git a/src/gtk1/slider.cpp b/src/gtk1/slider.cpp index 3c7c1ade23..0fa63e404e 100644 --- a/src/gtk1/slider.cpp +++ b/src/gtk1/slider.cpp @@ -101,12 +101,15 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, m_oldPos = 0.0; - if (style & wxSL_VERTICAL == wxSL_VERTICAL) + if (style & wxSL_VERTICAL) m_widget = gtk_hscale_new( (GtkAdjustment *) NULL ); else m_widget = gtk_vscale_new( (GtkAdjustment *) NULL ); - gtk_scale_set_draw_value( GTK_SCALE( m_widget ), FALSE ); + if (style & wxSL_LABELS) + gtk_scale_set_draw_value( GTK_SCALE( m_widget ), TRUE ); + else + gtk_scale_set_draw_value( GTK_SCALE( m_widget ), FALSE ); m_adjust = gtk_range_get_adjustment( GTK_RANGE(m_widget) ); diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index c1a81398db..4fb6cdc1c9 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -121,6 +121,39 @@ */ +//----------------------------------------------------------------------------- +// debug +//----------------------------------------------------------------------------- + +#ifdef __WXDEBUG__ + +static gint gtk_debug_focus_in_callback( GtkWidget *WXUNUSED(widget), + GdkEvent *WXUNUSED(event), + const wxChar *name ) +{ + wxPrintf( _T("FOCUS NOW AT: ") ); + wxPrintf( name ); + wxPrintf( _T("\n") ); + + return FALSE; +} + +void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window ) +{ + wxString tmp = name; + tmp += _T(" FROM "); + tmp += window; + + wxChar *s = new wxChar[tmp.Length()+1]; + + wxStrcpy( s, tmp ); + + gtk_signal_connect( GTK_OBJECT(widget), "focus_in_event", + GTK_SIGNAL_FUNC(gtk_debug_focus_in_callback), (gpointer)s ); +} + +#endif + //----------------------------------------------------------------------------- // data //----------------------------------------------------------------------------- @@ -1542,8 +1575,17 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL ); GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS ); +#ifdef __WXDEBUG__ + debug_focus_in( m_widget, _T("wxWindow::m_widget"), name ); +#endif + GtkScrolledWindow *s_window = GTK_SCROLLED_WINDOW(m_widget); +#ifdef __WXDEBUG__ + debug_focus_in( s_window->hscrollbar, _T("wxWindow::hsrcollbar"), name ); + debug_focus_in( s_window->vscrollbar, _T("wxWindow::vsrcollbar"), name ); +#endif + GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass ); scroll_class->scrollbar_spacing = 0; @@ -1558,6 +1600,10 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, m_wxwindow = gtk_myfixed_new(); gtk_widget_show( m_wxwindow ); +#ifdef __WXDEBUG__ + debug_focus_in( m_wxwindow, _T("wxWindow::m_wxwindow"), name ); +#endif + gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow ); #if (GTK_MINOR_VERSION > 0) @@ -1606,7 +1652,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, } /* grab the actual focus */ - gtk_widget_grab_focus( m_wxwindow ); +// gtk_widget_grab_focus( m_wxwindow ); #if (GTK_MINOR_VERSION == 0) // shut the viewport up @@ -2284,6 +2330,9 @@ void wxWindow::SetSizeHints( int minW, int minH, int maxW, int maxH, int WXUNUSE void wxWindow::OnSize( wxSizeEvent &WXUNUSED(event) ) { + /* this is commented because it also is commented + in wxMSW. before I get even more questions about + this. */ // if (GetAutoLayout()) Layout(); }