wxLog::AddTraceMask("focus");
s_done = TRUE;
}
- wxLogTrace(_T("FOCUS NOW AT: %s"), name);
+ wxLogTrace(T("FOCUS NOW AT: %s"), name);
*/
return FALSE;
void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window )
{
wxString tmp = name;
- tmp += _T(" FROM ");
+ tmp += T(" FROM ");
tmp += window;
wxChar *s = new wxChar[tmp.Length()+1];
if (gdk_event->count > 0)
return;
- wxPaintEvent event( win->GetId() );
- event.SetEventObject( win );
- win->GetEventHandler()->ProcessEvent( event );
-
/*
wxPrintf( "OnExpose from " );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
(int)gdk_event->area.height );
*/
+ wxPaintEvent event( win->GetId() );
+ event.SetEventObject( win );
+ win->GetEventHandler()->ProcessEvent( event );
+
win->GetUpdateRegion().Clear();
}
// "draw" of m_wxwindow
//-----------------------------------------------------------------------------
-static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxWindow *win )
+static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxWindow *win )
{
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT)
return;
+ GtkMyFixed *myfixed = GTK_MYFIXED (widget);
+ if (!myfixed->children)
+ return; /* mini optimisation */
+
win->GetUpdateRegion().Union( rect->x, rect->y,
rect->width, rect->height );
- wxPaintEvent event( win->GetId() );
- event.SetEventObject( win );
-
/*
wxPrintf( "OnDraw from " );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
(int)rect->width,
(int)rect->height );
*/
-
+
+ wxPaintEvent event( win->GetId() );
+ event.SetEventObject( win );
win->GetEventHandler()->ProcessEvent( event );
win->GetUpdateRegion().Clear();
wxapp_install_idle_handler();
/*
- wxPrintf( _T("1) OnButtonPress from ") );
+ wxPrintf( T("1) OnButtonPress from ") );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
wxPrintf( win->GetClassInfo()->GetClassName() );
- wxPrintf( _T(".\n") );
+ wxPrintf( T(".\n") );
*/
if (!win->m_hasVMT) return FALSE;
if (g_blockEventsOnDrag) return TRUE;
gtk_widget_grab_focus (win->m_wxwindow);
/*
- wxPrintf( _T("GrabFocus from ") );
+ wxPrintf( T("GrabFocus from ") );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
wxPrintf( win->GetClassInfo()->GetClassName() );
- wxPrintf( _T(".\n") );
+ wxPrintf( T(".\n") );
*/
}
}
/*
- wxPrintf( _T("2) OnButtonPress from ") );
+ wxPrintf( T("2) OnButtonPress from ") );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
wxPrintf( win->GetClassInfo()->GetClassName() );
- wxPrintf( _T(".\n") );
+ wxPrintf( T(".\n") );
*/
wxEventType event_type = wxEVT_LEFT_DOWN;
if (gdk_event->is_hint)
{
- int x = 0;
- int y = 0;
- GdkModifierType state;
- gdk_window_get_pointer(gdk_event->window, &x, &y, &state);
- gdk_event->x = x;
- gdk_event->y = y;
- gdk_event->state = state;
+ int x = 0;
+ int y = 0;
+ GdkModifierType state;
+ gdk_window_get_pointer(gdk_event->window, &x, &y, &state);
+ gdk_event->x = x;
+ gdk_event->y = y;
}
/*
// "button_release_event" from scrollbar
//-----------------------------------------------------------------------------
-static gint gtk_scrollbar_button_release_callback( GtkRange *widget,
+static gint gtk_scrollbar_button_release_callback( GtkRange *WXUNUSED(widget),
GdkEventButton *WXUNUSED(gdk_event),
wxWindow *win )
{
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
{
- wxFAIL_MSG( _T("wxWindow creation failed") );
+ wxFAIL_MSG( T("wxWindow creation failed") );
return FALSE;
}
GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
#ifdef __WXDEBUG__
- debug_focus_in( m_widget, _T("wxWindow::m_widget"), name );
+ debug_focus_in( m_widget, T("wxWindow::m_widget"), name );
#endif
GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
#ifdef __WXDEBUG__
- debug_focus_in( scrolledWindow->hscrollbar, _T("wxWindow::hsrcollbar"), name );
- debug_focus_in( scrolledWindow->vscrollbar, _T("wxWindow::vsrcollbar"), name );
+ debug_focus_in( scrolledWindow->hscrollbar, T("wxWindow::hsrcollbar"), name );
+ debug_focus_in( scrolledWindow->vscrollbar, T("wxWindow::vsrcollbar"), name );
#endif
GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
m_wxwindow = gtk_myfixed_new();
#ifdef __WXDEBUG__
- debug_focus_in( m_wxwindow, _T("wxWindow::m_wxwindow"), name );
+ debug_focus_in( m_wxwindow, T("wxWindow::m_wxwindow"), name );
#endif
gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
bool wxWindow::PreCreation( wxWindow *parent, const wxPoint &pos, const wxSize &size )
{
- wxCHECK_MSG( !m_needParent || parent, FALSE, _T("Need complete parent.") );
+ wxCHECK_MSG( !m_needParent || parent, FALSE, T("Need complete parent.") );
/* this turns -1 into 20 so that a minimal window is
visible even although -1,-1 has been given as the
void wxWindow::PostCreation()
{
- wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
+ wxASSERT_MSG( (m_widget != NULL), T("invalid window") );
if (m_wxwindow)
{
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event",
GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this );
- gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw",
+ gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw",
GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this );
-
+
#if (GTK_MINOR_VERSION > 0)
/* these are called when the "sunken", "raised" or "simple" borders are drawn */
gtk_signal_connect( GTK_OBJECT(m_widget), "expose_event",
bool wxWindow::Destroy()
{
- wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
+ wxASSERT_MSG( (m_widget != NULL), T("invalid window") );
m_hasVMT = FALSE;
void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
{
- wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
- wxASSERT_MSG( (m_parent != NULL), _T("wxWindow::SetSize requires parent.\n") );
+ wxASSERT_MSG( (m_widget != NULL), T("invalid window") );
+ wxASSERT_MSG( (m_parent != NULL), T("wxWindow::SetSize requires parent.\n") );
if (m_resizing) return; /* I don't like recursions */
m_resizing = TRUE;
wxCursor cursor = m_cursor;
if (g_globalCursor.Ok()) cursor = g_globalCursor;
- if (cursor.Ok() && m_currentGdkCursor != cursor)
+ if (cursor.Ok())
{
- m_currentGdkCursor = cursor;
-
+ /* I now set the cursor the anew in every OnInternalIdle call
+ as setting the cursor in a parent window also effects the
+ windows above so that checking for the current cursor is
+ not possible. */
+
if (m_wxwindow)
{
GdkWindow *window = m_wxwindow->window;
void wxWindow::DoGetSize( int *width, int *height ) const
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
if (width) (*width) = m_width;
if (height) (*height) = m_height;
void wxWindow::DoSetClientSize( int width, int height )
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
if (!m_wxwindow)
{
void wxWindow::DoGetClientSize( int *width, int *height ) const
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
if (!m_wxwindow)
{
void wxWindow::DoGetPosition( int *x, int *y ) const
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
if (x) (*x) = m_x;
if (y) (*y) = m_y;
void wxWindow::DoClientToScreen( int *x, int *y ) const
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
if (!m_widget->window) return;
void wxWindow::DoScreenToClient( int *x, int *y ) const
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
if (!m_widget->window) return;
bool wxWindow::Show( bool show )
{
- wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
+ wxCHECK_MSG( (m_widget != NULL), FALSE, T("invalid window") );
if (!wxWindowBase::Show(show))
{
bool wxWindow::Enable( bool enable )
{
- wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
+ wxCHECK_MSG( (m_widget != NULL), FALSE, T("invalid window") );
if (!wxWindowBase::Enable(enable))
{
int wxWindow::GetCharHeight() const
{
- wxCHECK_MSG( (m_widget != NULL), 12, _T("invalid window") );
+ wxCHECK_MSG( (m_widget != NULL), 12, T("invalid window") );
- wxCHECK_MSG( m_font.Ok(), 12, _T("invalid font") );
+ wxCHECK_MSG( m_font.Ok(), 12, T("invalid font") );
GdkFont *font = m_font.GetInternalFont( 1.0 );
int wxWindow::GetCharWidth() const
{
- wxCHECK_MSG( (m_widget != NULL), 8, _T("invalid window") );
+ wxCHECK_MSG( (m_widget != NULL), 8, T("invalid window") );
- wxCHECK_MSG( m_font.Ok(), 8, _T("invalid font") );
+ wxCHECK_MSG( m_font.Ok(), 8, T("invalid font") );
GdkFont *font = m_font.GetInternalFont( 1.0 );
wxFont fontToUse = m_font;
if (theFont) fontToUse = *theFont;
- wxCHECK_RET( fontToUse.Ok(), _T("invalid font") );
+ wxCHECK_RET( fontToUse.Ok(), T("invalid font") );
GdkFont *font = fontToUse.GetInternalFont( 1.0 );
if (x) (*x) = gdk_string_width( font, string.mbc_str() );
void wxWindow::SetFocus()
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
GtkWidget *connect_widget = GetConnectWidget();
if (connect_widget)
bool wxWindow::Reparent( wxWindowBase *newParentBase )
{
- wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
+ wxCHECK_MSG( (m_widget != NULL), FALSE, T("invalid window") );
wxWindow *oldParent = m_parent,
*newParent = (wxWindow *)newParentBase;
void wxWindow::DoAddChild(wxWindow *child)
{
- wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
+ wxASSERT_MSG( (m_widget != NULL), T("invalid window") );
- wxASSERT_MSG( (child != NULL), _T("invalid child window") );
+ wxASSERT_MSG( (child != NULL), T("invalid child window") );
- wxASSERT_MSG( (m_insertCallback != NULL), _T("invalid child insertion function") );
+ wxASSERT_MSG( (m_insertCallback != NULL), T("invalid child insertion function") );
/* add to list */
AddChild( child );
void wxWindow::Raise()
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
if (!m_widget->window) return;
void wxWindow::Lower()
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
if (!m_widget->window) return;
bool wxWindow::SetCursor( const wxCursor &cursor )
{
- wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
+ wxCHECK_MSG( (m_widget != NULL), FALSE, T("invalid window") );
return wxWindowBase::SetCursor( cursor );
}
void wxWindow::WarpPointer( int x, int y )
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
GtkWidget *connect_widget = GetConnectWidget();
if (connect_widget->window)
void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
{
- wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+ wxCHECK_RET( (m_widget != NULL), T("invalid window") );
if (!m_widget->window) return;
if (m_wxwindow)
{
/* call the callback directly for preventing GTK from
- clearing the bakground */
+ clearing the background */
int w = 0;
int h = 0;
GetClientSize( &w, &h );
- GdkRectangle gdk_rect;
- gdk_rect.x = 0;
- gdk_rect.y = 0;
- gdk_rect.width = w;
- gdk_rect.height = h;
- gtk_window_draw_callback( m_wxwindow, &gdk_rect, this );
+
+ GetUpdateRegion().Union( 0, 0, w, h );
+ wxPaintEvent event( GetId() );
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( event );
+ GetUpdateRegion().Clear();
}
else
{
}
else
{
- GdkRectangle gdk_rect;
- gdk_rect.x = rect->x;
- gdk_rect.y = rect->y;
- gdk_rect.width = rect->width;
- gdk_rect.height = rect->height;
if (m_wxwindow)
{
/* call the callback directly for preventing GTK from
- clearing the bakground */
- gtk_window_draw_callback( m_wxwindow, &gdk_rect, this );
+ clearing the background */
+ GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
+ wxPaintEvent event( GetId() );
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( event );
+ GetUpdateRegion().Clear();
}
else
{
+ GdkRectangle gdk_rect;
+ gdk_rect.x = rect->x;
+ gdk_rect.y = rect->y;
+ gdk_rect.width = rect->width;
+ gdk_rect.height = rect->height;
+
gtk_widget_draw( m_widget, &gdk_rect );
}
}
void wxWindow::Clear()
{
- wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+ wxCHECK_RET( m_widget != NULL, T("invalid window") );
if (!m_widget->window) return;
bool wxWindow::SetBackgroundColour( const wxColour &colour )
{
- wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
+ wxCHECK_MSG( m_widget != NULL, FALSE, T("invalid window") );
if (!wxWindowBase::SetBackgroundColour(colour))
{
bool wxWindow::SetForegroundColour( const wxColour &colour )
{
- wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
+ wxCHECK_MSG( m_widget != NULL, FALSE, T("invalid window") );
if (!wxWindowBase::SetForegroundColour(colour))
{
bool wxWindow::DoPopupMenu( wxMenu *menu, int x, int y )
{
- wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
+ wxCHECK_MSG( m_widget != NULL, FALSE, T("invalid window") );
- wxCHECK_MSG( menu != NULL, FALSE, _T("invalid popup-menu") );
+ wxCHECK_MSG( menu != NULL, FALSE, T("invalid popup-menu") );
SetInvokingWindow( menu, this );
void wxWindow::SetDropTarget( wxDropTarget *dropTarget )
{
- wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+ wxCHECK_RET( m_widget != NULL, T("invalid window") );
GtkWidget *dnd_widget = GetConnectWidget();
bool wxWindow::SetFont( const wxFont &font )
{
- wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
+ wxCHECK_MSG( m_widget != NULL, FALSE, T("invalid window") );
if (!wxWindowBase::SetFont(font))
{
void wxWindow::CaptureMouse()
{
- wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+ wxCHECK_RET( m_widget != NULL, T("invalid window") );
- wxCHECK_RET( g_captureWindow == NULL, _T("CaptureMouse called twice") );
+ wxCHECK_RET( g_captureWindow == NULL, T("CaptureMouse called twice") );
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return;
(GdkEventMask)
(GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
+ GDK_POINTER_MOTION_HINT_MASK |
GDK_POINTER_MOTION_MASK),
(GdkWindow *) NULL,
m_cursor.GetCursor(),
void wxWindow::ReleaseMouse()
{
- wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+ wxCHECK_RET( m_widget != NULL, T("invalid window") );
- wxCHECK_RET( g_captureWindow, _T("ReleaseMouse called twice") );
+ wxCHECK_RET( g_captureWindow, T("ReleaseMouse called twice") );
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return;
void wxWindow::SetScrollbar( int orient, int pos, int thumbVisible,
int range, bool refresh )
{
- wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+ wxCHECK_RET( m_widget != NULL, T("invalid window") );
- wxCHECK_RET( m_wxwindow != NULL, _T("window needs client area for scrolling") );
+ wxCHECK_RET( m_wxwindow != NULL, T("window needs client area for scrolling") );
m_hasScrolling = TRUE;
void wxWindow::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) )
{
- wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+ wxCHECK_RET( m_widget != NULL, T("invalid window") );
- wxCHECK_RET( m_wxwindow != NULL, _T("window needs client area for scrolling") );
+ wxCHECK_RET( m_wxwindow != NULL, T("window needs client area for scrolling") );
if (orient == wxHORIZONTAL)
{
int wxWindow::GetScrollThumb( int orient ) const
{
- wxCHECK_MSG( m_widget != NULL, 0, _T("invalid window") );
+ wxCHECK_MSG( m_widget != NULL, 0, T("invalid window") );
- wxCHECK_MSG( m_wxwindow != NULL, 0, _T("window needs client area for scrolling") );
+ wxCHECK_MSG( m_wxwindow != NULL, 0, T("window needs client area for scrolling") );
if (orient == wxHORIZONTAL)
return (int)(m_hAdjust->page_size+0.5);
int wxWindow::GetScrollPos( int orient ) const
{
- wxCHECK_MSG( m_widget != NULL, 0, _T("invalid window") );
+ wxCHECK_MSG( m_widget != NULL, 0, T("invalid window") );
- wxCHECK_MSG( m_wxwindow != NULL, 0, _T("window needs client area for scrolling") );
+ wxCHECK_MSG( m_wxwindow != NULL, 0, T("window needs client area for scrolling") );
if (orient == wxHORIZONTAL)
return (int)(m_hAdjust->value+0.5);
int wxWindow::GetScrollRange( int orient ) const
{
- wxCHECK_MSG( m_widget != NULL, 0, _T("invalid window") );
+ wxCHECK_MSG( m_widget != NULL, 0, T("invalid window") );
- wxCHECK_MSG( m_wxwindow != NULL, 0, _T("window needs client area for scrolling") );
+ wxCHECK_MSG( m_wxwindow != NULL, 0, T("window needs client area for scrolling") );
if (orient == wxHORIZONTAL)
return (int)(m_hAdjust->upper+0.5);
void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
{
- wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+ wxCHECK_RET( m_widget != NULL, T("invalid window") );
- wxCHECK_RET( m_wxwindow != NULL, _T("window needs client area for scrolling") );
+ wxCHECK_RET( m_wxwindow != NULL, T("window needs client area for scrolling") );
if (!m_scrollGC)
{