X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7798a18ec81d3733082bc60a958fac1d4510faca..3826db3ef5fc3ac97fb91aa11eb2381b2c96248d:/src/gtk/window.cpp?ds=sidebyside diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 4c9708ee27..74ab35d9c7 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -108,7 +108,9 @@ void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, //----------------------------------------------------------------------------- // size -// I don't any longer intercept GTK's internal resize events (except frames) +// I don't any longer intercept GTK's internal resize events, except +// for frames and from within MDI and tabbed windows (client area +// size determined internally by GTK, not wxWin). /* void gtk_window_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win ) @@ -414,9 +416,9 @@ gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_e //----------------------------------------------------------------------------- // focus_in -void gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win ) +gint gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win ) { - if (g_blockEventsOnDrag) return; + if (g_blockEventsOnDrag) return FALSE; if (win->m_wxwindow) { if (GTK_WIDGET_CAN_FOCUS(win->m_wxwindow)) @@ -431,7 +433,7 @@ void gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUS }; }; - if (!win->HasVMT()) return; + if (!win->HasVMT()) return FALSE; /* printf( "OnSetFocus from " ); @@ -444,22 +446,22 @@ void gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUS wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() ); event.SetEventObject( win ); - win->ProcessEvent( event ); + return win->ProcessEvent( event ); }; //----------------------------------------------------------------------------- // focus out -void gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win ) +gint gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win ) { - if (g_blockEventsOnDrag) return; + if (g_blockEventsOnDrag) return FALSE; if (win->m_wxwindow) { if (GTK_WIDGET_CAN_FOCUS(win->m_wxwindow)) GTK_WIDGET_UNSET_FLAGS (win->m_wxwindow, GTK_HAS_FOCUS); }; - if (!win->HasVMT()) return; + if (!win->HasVMT()) return FALSE; /* printf( "OnKillFocus from " ); @@ -470,7 +472,7 @@ void gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNU wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() ); event.SetEventObject( win ); - win->ProcessEvent( event ); + return win->ProcessEvent( event ); }; //----------------------------------------------------------------------------- @@ -648,27 +650,35 @@ bool gtk_window_destroy_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSE //----------------------------------------------------------------------------- // enter -bool gtk_window_enter_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win ) +bool gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win ) { + if (widget->window != gdk_event->window) return TRUE; + if (g_blockEventsOnDrag) return FALSE; if (widget->window) gdk_window_set_cursor( widget->window, win->m_cursor->GetCursor() ); - return TRUE; + wxMouseEvent event( wxEVT_ENTER_WINDOW ); + event.SetEventObject( win ); + return win->ProcessEvent( event ); }; //----------------------------------------------------------------------------- // leave -bool gtk_window_leave_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *WXUNUSED(win) ) +bool gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win ) { + if (widget->window != gdk_event->window) return TRUE; + if (g_blockEventsOnDrag) return FALSE; if (widget->window) gdk_window_set_cursor( widget->window, wxSTANDARD_CURSOR->GetCursor() ); - return TRUE; + wxMouseEvent event( wxEVT_LEAVE_WINDOW ); + event.SetEventObject( win ); + return win->ProcessEvent( event ); }; //----------------------------------------------------------------------------- @@ -722,18 +732,19 @@ wxWindow::wxWindow() m_drawingOffsetX = 0; m_drawingOffsetY = 0; m_pDropTarget = NULL; + m_resizing = FALSE; }; -wxWindow::wxWindow( wxWindow *parent, const wxWindowID id, - const wxPoint &pos, const wxSize &size, - const long style, const wxString &name ) +wxWindow::wxWindow( wxWindow *parent, wxWindowID id, + const wxPoint &pos, const wxSize &size, + long style, const wxString &name ) { Create( parent, id, pos, size, style, name ); }; -bool wxWindow::Create( wxWindow *parent, const wxWindowID id, - const wxPoint &pos, const wxSize &size, - const long style, const wxString &name ) +bool wxWindow::Create( wxWindow *parent, wxWindowID id, + const wxPoint &pos, const wxSize &size, + long style, const wxString &name ) { m_isShown = FALSE; m_isEnabled = TRUE; @@ -869,9 +880,9 @@ wxWindow::~wxWindow(void) }; -void wxWindow::PreCreation( wxWindow *parent, const wxWindowID id, - const wxPoint &pos, const wxSize &size, - const long style, const wxString &name ) +void wxWindow::PreCreation( wxWindow *parent, wxWindowID id, + const wxPoint &pos, const wxSize &size, + long style, const wxString &name ) { if (m_needParent && (parent == NULL)) wxFatalError( "Need complete parent.", name ); @@ -905,6 +916,7 @@ void wxWindow::PreCreation( wxWindow *parent, const wxWindowID id, m_drawingOffsetX = 0; m_drawingOffsetY = 0; m_pDropTarget = NULL; + m_resizing = FALSE; } void wxWindow::PostCreation(void) @@ -997,7 +1009,7 @@ bool wxWindow::HasVMT(void) return m_hasVMT; }; -bool wxWindow::Close( const bool force ) +bool wxWindow::Close( bool force ) { wxCloseEvent event(wxEVT_CLOSE_WINDOW, m_windowId); event.SetEventObject(this); @@ -1049,8 +1061,11 @@ void wxWindow::ImplementSetPosition(void) gtk_widget_set_uposition( m_widget, m_x, m_y ); }; -void wxWindow::SetSize( const int x, const int y, const int width, const int height, const int sizeFlags ) +void wxWindow::SetSize( int x, int y, int width, int height, int sizeFlags ) { + if (m_resizing) return; // I don't like recursions + m_resizing = TRUE; + int newX = x; int newY = y; int newW = width; @@ -1091,25 +1106,27 @@ void wxWindow::SetSize( const int x, const int y, const int width, const int hei wxSizeEvent event( wxSize(m_width,m_height), GetId() ); event.SetEventObject( this ); ProcessEvent( event ); + + m_resizing = FALSE; }; -void wxWindow::SetSize( const int width, const int height ) +void wxWindow::SetSize( int width, int height ) { SetSize( -1, -1, width, height, wxSIZE_USE_EXISTING ); }; -void wxWindow::Move( const int x, const int y ) +void wxWindow::Move( int x, int y ) { SetSize( x, y, -1, -1, wxSIZE_USE_EXISTING ); }; void wxWindow::GetSize( int *width, int *height ) const { - (*width) = m_width; - (*height) = m_height; + if (width) (*width) = m_width; + if (height) (*height) = m_height; }; -void wxWindow::SetClientSize( const int width, const int height ) +void wxWindow::SetClientSize( int width, int height ) { if (!m_wxwindow) { @@ -1287,7 +1304,7 @@ void wxWindow::ScreenToClient( int *x, int *y ) if (y) *y -= org_y; }; -void wxWindow::Centre( const int direction ) +void wxWindow::Centre( int direction ) { int x = 0; int y = 0; @@ -1335,10 +1352,10 @@ void wxWindow::Fit(void) void wxWindow::OnSize( wxSizeEvent &WXUNUSED(event) ) { - if (GetAutoLayout()) Layout(); + //if (GetAutoLayout()) Layout(); }; -bool wxWindow::Show( const bool show ) +bool wxWindow::Show( bool show ) { if (show) gtk_widget_show( m_widget ); @@ -1348,14 +1365,14 @@ bool wxWindow::Show( const bool show ) return TRUE; }; -void wxWindow::Enable( const bool enable ) +void wxWindow::Enable( bool enable ) { m_isEnabled = enable; gtk_widget_set_sensitive( m_widget, enable ); if (m_wxwindow) gtk_widget_set_sensitive( m_wxwindow, enable ); }; -void wxWindow::MakeModal( const bool modal ) +void wxWindow::MakeModal( bool modal ) { return; // Disable all other windows @@ -1415,6 +1432,8 @@ void wxWindow::AddChild( wxWindow *child ) }; }; + // wxNotebooks are very special, so they have their own AddChild + if (IsKindOf(CLASSINFO(wxNotebook))) { wxNotebook *tab = (wxNotebook*)this; @@ -1508,7 +1527,7 @@ void wxWindow::SetCursor( const wxCursor &cursor ) gdk_window_set_cursor( m_wxwindow->window, m_cursor->GetCursor() ); }; -void wxWindow::Refresh( const bool eraseBackground, const wxRect *rect ) +void wxWindow::Refresh( bool eraseBackground, const wxRect *rect ) { if (eraseBackground && m_wxwindow && m_wxwindow->window) { @@ -1557,12 +1576,12 @@ void wxWindow::Refresh( const bool eraseBackground, const wxRect *rect ) }; }; -bool wxWindow::IsExposed( const long x, const long y ) +bool wxWindow::IsExposed( long x, long y ) { return (m_updateRegion.Contains( x, y ) != wxOutRegion ); }; -bool wxWindow::IsExposed( const long x, const long y, const long width, const long height ) +bool wxWindow::IsExposed( long x, long y, long width, long height ) { return (m_updateRegion.Contains( x, y, width, height ) != wxOutRegion ); }; @@ -1739,7 +1758,7 @@ wxString wxWindow::GetName(void) const return (wxString&)m_windowName; }; -bool wxWindow::IsShown(void) +bool wxWindow::IsShown(void) const { return m_isShown; }; @@ -1749,7 +1768,7 @@ bool wxWindow::IsRetained(void) return FALSE; }; -wxWindow *wxWindow::FindWindow( const long id ) +wxWindow *wxWindow::FindWindow( long id ) { if (id == m_windowId) return this; wxNode *node = m_children.First(); @@ -1777,8 +1796,8 @@ wxWindow *wxWindow::FindWindow( const wxString& name ) return NULL; }; -void wxWindow::SetScrollbar( const int orient, const int pos, const int thumbVisible, - const int range, const bool WXUNUSED(refresh) ) +void wxWindow::SetScrollbar( int orient, int pos, int thumbVisible, + int range, bool WXUNUSED(refresh) ) { if (!m_wxwindow) return; @@ -1820,7 +1839,7 @@ void wxWindow::SetScrollbar( const int orient, const int pos, const int thumbVis m_vAdjust->page_increment = (float)(wxMax(fthumb-2,0)); m_vAdjust->page_size = fthumb; }; - + if (m_wxwindow->window) { if (orient == wxHORIZONTAL) @@ -1828,11 +1847,11 @@ void wxWindow::SetScrollbar( const int orient, const int pos, const int thumbVis else gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "changed" ); -// gtk_widget_set_usize( m_widget, m_width, m_height ); + gtk_widget_set_usize( m_widget, m_width, m_height ); }; }; -void wxWindow::SetScrollPos( const int orient, const int pos, const bool WXUNUSED(refresh) ) +void wxWindow::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) ) { if (!m_wxwindow) return; @@ -1861,7 +1880,7 @@ void wxWindow::SetScrollPos( const int orient, const int pos, const bool WXUNUSE }; }; -int wxWindow::GetScrollThumb( const int orient ) const +int wxWindow::GetScrollThumb( int orient ) const { if (!m_wxwindow) return 0; @@ -1871,7 +1890,7 @@ int wxWindow::GetScrollThumb( const int orient ) const return (int)(m_vAdjust->page_size+0.5); }; -int wxWindow::GetScrollPos( const int orient ) const +int wxWindow::GetScrollPos( int orient ) const { if (!m_wxwindow) return 0; @@ -1881,7 +1900,7 @@ int wxWindow::GetScrollPos( const int orient ) const return (int)(m_vAdjust->value+0.5); }; -int wxWindow::GetScrollRange( const int orient ) const +int wxWindow::GetScrollRange( int orient ) const { if (!m_wxwindow) return 0; @@ -1891,7 +1910,7 @@ int wxWindow::GetScrollRange( const int orient ) const return (int)(m_vAdjust->upper+0.5); }; -void wxWindow::ScrollWindow( const int dx, const int dy, const wxRect* WXUNUSED(rect) ) +void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) ) { if (!m_wxwindow) return; @@ -1985,7 +2004,7 @@ void wxWindow::SetConstraints( wxLayoutConstraints *constraints ) } ; -void wxWindow::SetAutoLayout( const bool autoLayout ) +void wxWindow::SetAutoLayout( bool autoLayout ) { m_autoLayout = autoLayout; }; @@ -2153,7 +2172,7 @@ bool wxWindow::LayoutPhase2(int *noChanges) } // Do a phase of evaluating child constraints -bool wxWindow::DoPhase(const int phase) +bool wxWindow::DoPhase(int phase) { int noIterations = 0; int maxIterations = 500; @@ -2221,7 +2240,7 @@ void wxWindow::ResetConstraints(void) // Need to distinguish between setting the 'fake' size for // windows and sizers, and setting the real values. -void wxWindow::SetConstraintSizes(const bool recurse) +void wxWindow::SetConstraintSizes(bool recurse) { wxLayoutConstraints *constr = GetConstraints(); if (constr && constr->left.GetDone() && constr->right.GetDone() && @@ -2294,7 +2313,7 @@ void wxWindow::TransformSizerToActual(int *x, int *y) const *y += yp; } -void wxWindow::SizerSetSize(const int x, const int y, const int w, const int h) +void wxWindow::SizerSetSize(int x, int y, int w, int h) { int xx = x; int yy = y; @@ -2302,7 +2321,7 @@ void wxWindow::SizerSetSize(const int x, const int y, const int w, const int h) SetSize(xx, yy, w, h); } -void wxWindow::SizerMove(const int x, const int y) +void wxWindow::SizerMove(int x, int y) { int xx = x; int yy = y; @@ -2311,7 +2330,7 @@ void wxWindow::SizerMove(const int x, const int y) } // Only set the size/position of the constraint (if any) -void wxWindow::SetSizeConstraint(const int x, const int y, const int w, const int h) +void wxWindow::SetSizeConstraint(int x, int y, int w, int h) { wxLayoutConstraints *constr = GetConstraints(); if (constr) @@ -2339,7 +2358,7 @@ void wxWindow::SetSizeConstraint(const int x, const int y, const int w, const in } } -void wxWindow::MoveConstraint(const int x, const int y) +void wxWindow::MoveConstraint(int x, int y) { wxLayoutConstraints *constr = GetConstraints(); if (constr) @@ -2393,3 +2412,7 @@ void wxWindow::GetPositionConstraint(int *x, int *y) const GetPosition(x, y); } +bool wxWindow::AcceptsFocus() const +{ + return IsEnabled() && IsShown(); +}