X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/937013e0fd914d4c42f9f5ec98da665986b93dfa..4e15d1caa03346c126015019c1fdf093033ef40b:/src/gtk1/window.cpp diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index a2e39a0d66..42a37b7df2 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -49,7 +49,7 @@ #include "wx/fontutil.h" -#ifdef __WXDEBUG__ +#if wxDEBUG_LEVEL #include "wx/thread.h" #endif @@ -207,19 +207,19 @@ static GdkGC *g_eraseGC = NULL; // mouse capture state: the window which has it and if the mouse is currently // inside it -static wxWindowGTK *g_captureWindow = (wxWindowGTK*) NULL; +static wxWindowGTK *g_captureWindow = NULL; static bool g_captureWindowHasMouse = false; -wxWindowGTK *g_focusWindow = (wxWindowGTK*) NULL; +wxWindowGTK *g_focusWindow = NULL; // the last window which had the focus - this is normally never NULL (except // if we never had focus at all) as even when g_focusWindow is NULL it still // keeps its previous value -wxWindowGTK *g_focusWindowLast = (wxWindowGTK*) NULL; +wxWindowGTK *g_focusWindowLast = NULL; // If a window get the focus set but has not been realized // yet, defer setting the focus to idle time. -wxWindowGTK *g_delayedFocus = (wxWindowGTK*) NULL; +wxWindowGTK *g_delayedFocus = NULL; // hack: we need something to pass to gtk_menu_popup, so we store the time of // the last click here (extern: used from gtk/menu.cpp) @@ -227,7 +227,7 @@ guint32 wxGtkTimeLastClick = 0; // global variables because GTK+ DnD want to have the // mouse event that caused it -GdkEvent *g_lastMouseEvent = (GdkEvent*) NULL; +GdkEvent *g_lastMouseEvent = NULL; int g_lastButtonNumber = 0; extern bool g_mainThreadLocked; @@ -236,19 +236,16 @@ extern bool g_mainThreadLocked; // debug //----------------------------------------------------------------------------- -#ifdef __WXDEBUG__ - #if wxUSE_THREADS -# define DEBUG_MAIN_THREAD if (wxThread::IsMain() && g_mainThreadLocked) printf("gui reentrance"); +# define DEBUG_MAIN_THREAD \ + wxASSERT_MSG( !g_mainThreadLocked || !wxThread::IsMain(), \ + "GUI reentrancy detected" ); #else # define DEBUG_MAIN_THREAD #endif -#else -#define DEBUG_MAIN_THREAD -#endif // Debug // the trace mask used for the focus debugging messages -#define TRACE_FOCUS _T("focus") +#define TRACE_FOCUS wxT("focus") //----------------------------------------------------------------------------- // missing gdk functions @@ -294,7 +291,7 @@ wxWindow *wxFindFocusedChild(wxWindowGTK *win) { wxWindow *winFocus = wxWindowGTK::FindFocus(); if ( !winFocus ) - return (wxWindow *)NULL; + return NULL; if ( winFocus == win ) return (wxWindow *)win; @@ -308,7 +305,7 @@ wxWindow *wxFindFocusedChild(wxWindowGTK *win) return child; } - return (wxWindow *)NULL; + return NULL; } static void draw_frame( GtkWidget *widget, wxWindowGTK *win ) @@ -611,7 +608,7 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle child_area; if (gtk_widget_intersect (child->widget, rect, &child_area)) { - gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ ); + gtk_widget_draw (child->widget, &child_area /* NULL*/ ); } } #endif @@ -623,7 +620,7 @@ static void gtk_window_draw_callback( GtkWidget *widget, //----------------------------------------------------------------------------- // set WXTRACE to this to see the key event codes on the console -#define TRACE_KEYS _T("keyevent") +#define TRACE_KEYS wxT("keyevent") // translates an X key symbol to WXK_XXX value // @@ -923,7 +920,6 @@ static void wxFillOtherKeyEventFields(wxKeyEvent& event, event.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK) != 0; event.m_altDown = (gdk_event->state & GDK_MOD1_MASK) != 0; event.m_metaDown = (gdk_event->state & GDK_MOD2_MASK) != 0; - event.m_scanCode = gdk_event->keyval; event.m_rawCode = (wxUint32) gdk_event->keyval; event.m_rawFlags = 0; #if wxUSE_UNICODE @@ -958,9 +954,9 @@ wxTranslateGTKKeyEventToWx(wxKeyEvent& event, KeySym keysym = gdk_event->keyval; - wxLogTrace(TRACE_KEYS, _T("Key %s event: keysym = %ld"), - event.GetEventType() == wxEVT_KEY_UP ? _T("release") - : _T("press"), + wxLogTrace(TRACE_KEYS, wxT("Key %s event: keysym = %ld"), + event.GetEventType() == wxEVT_KEY_UP ? wxT("release") + : wxT("press"), keysym); long key_code = wxTranslateKeySymToWXKey(keysym, false /* !isChar */); @@ -989,7 +985,7 @@ wxTranslateGTKKeyEventToWx(wxKeyEvent& event, Display *dpy = (Display *)wxGetDisplay(); KeyCode keycode = XKeysymToKeycode(dpy, keysym); - wxLogTrace(TRACE_KEYS, _T("\t-> keycode %d"), keycode); + wxLogTrace(TRACE_KEYS, wxT("\t-> keycode %d"), keycode); KeySym keysymNormalized = XKeycodeToKeysym(dpy, keycode, 0); @@ -1028,7 +1024,7 @@ wxTranslateGTKKeyEventToWx(wxKeyEvent& event, } } - wxLogTrace(TRACE_KEYS, _T("\t-> wxKeyCode %ld"), key_code); + wxLogTrace(TRACE_KEYS, wxT("\t-> wxKeyCode %ld"), key_code); // sending unknown key events doesn't really make sense if ( !key_code ) @@ -1180,7 +1176,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, if ( key_code ) { - wxLogTrace(TRACE_KEYS, _T("Char event: %ld"), key_code); + wxLogTrace(TRACE_KEYS, wxT("Char event: %ld"), key_code); event.m_keyCode = key_code; @@ -1433,7 +1429,7 @@ wxWindowGTK *FindWindowForMouseEvent(wxWindowGTK *win, wxCoord& x, wxCoord& y) } else { - if ((child->m_wxwindow == (GtkWidget*) NULL) && + if ((child->m_wxwindow == NULL) && (child->m_x <= xx) && (child->m_y <= yy) && (child->m_x+child->m_width >= xx) && @@ -1684,7 +1680,7 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, break; default: - // unknwon button, don't process + // unknown button, don't process return FALSE; } @@ -1824,7 +1820,7 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, g_focusWindow = win; wxLogTrace(TRACE_FOCUS, - _T("%s: focus in"), win->GetName().c_str()); + wxT("%s: focus in"), win->GetName().c_str()); #ifdef HAVE_XIM if (win->m_ic) @@ -1872,14 +1868,14 @@ static gint gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), wxapp_install_idle_handler(); wxLogTrace( TRACE_FOCUS, - _T("%s: focus out"), win->GetName().c_str() ); + wxT("%s: focus out"), win->GetName().c_str() ); wxWindowGTK *winFocus = wxFindFocusedChild(win); if ( winFocus ) win = winFocus; - g_focusWindow = (wxWindowGTK *)NULL; + g_focusWindow = NULL; #ifdef HAVE_XIM if (win->m_ic) @@ -2417,16 +2413,14 @@ wxMouseState wxGetMouseState() // method #ifdef __WXUNIVERSAL__ IMPLEMENT_ABSTRACT_CLASS(wxWindowGTK, wxWindowBase) -#else // __WXGTK__ - IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowBase) -#endif // __WXUNIVERSAL__/__WXGTK__ +#endif // __WXUNIVERSAL__ void wxWindowGTK::Init() { // GTK specific - m_widget = (GtkWidget *) NULL; - m_wxwindow = (GtkWidget *) NULL; - m_focusWidget = (GtkWidget *) NULL; + m_widget = NULL; + m_wxwindow = NULL; + m_focusWidget = NULL; // position/size m_x = 0; @@ -2437,7 +2431,6 @@ void wxWindowGTK::Init() m_sizeSet = false; m_hasVMT = false; m_needParent = true; - m_isBeingDeleted = false; m_noExpose = false; m_nativeSizeEvent = false; @@ -2445,8 +2438,8 @@ void wxWindowGTK::Init() m_hasScrolling = false; m_isScrolling = false; - m_hAdjust = (GtkAdjustment*) NULL; - m_vAdjust = (GtkAdjustment*) NULL; + m_hAdjust = NULL; + m_vAdjust = NULL; m_oldHorizontalPos = m_oldVerticalPos = 0.0; m_oldClientWidth = @@ -2466,8 +2459,8 @@ void wxWindowGTK::Init() m_cursor = *wxSTANDARD_CURSOR; #ifdef HAVE_XIM - m_ic = (GdkIC*) NULL; - m_icattr = (GdkICAttr*) NULL; + m_ic = NULL; + m_icattr = NULL; #endif } @@ -2509,7 +2502,7 @@ bool wxWindowGTK::Create( wxWindow *parent, m_insertCallback = wxInsertChildInWindow; - m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL ); + m_widget = gtk_scrolled_window_new( NULL, NULL ); GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS ); GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget); @@ -2613,7 +2606,6 @@ wxWindowGTK::~wxWindowGTK() if ( g_delayedFocus == this ) g_delayedFocus = NULL; - m_isBeingDeleted = true; m_hasVMT = false; // destroy children before destroying this window itself @@ -2642,13 +2634,13 @@ wxWindowGTK::~wxWindowGTK() if (m_wxwindow) { gtk_widget_destroy( m_wxwindow ); - m_wxwindow = (GtkWidget*) NULL; + m_wxwindow = NULL; } if (m_widget) { gtk_widget_destroy( m_widget ); - m_widget = (GtkWidget*) NULL; + m_widget = NULL; } } @@ -2937,9 +2929,9 @@ void wxWindowGTK::OnInternalIdle() GtkUpdate(); wxCursor cursor = m_cursor; - if (g_globalCursor.Ok()) cursor = g_globalCursor; + if (g_globalCursor.IsOk()) cursor = g_globalCursor; - if (cursor.Ok()) + if (cursor.IsOk()) { /* I now set the cursor anew in every OnInternalIdle call as setting the cursor in a parent window also effects the @@ -2952,7 +2944,7 @@ void wxWindowGTK::OnInternalIdle() if (window) gdk_window_set_cursor( window, cursor.GetCursor() ); - if (!g_globalCursor.Ok()) + if (!g_globalCursor.IsOk()) cursor = *wxSTANDARD_CURSOR; window = m_widget->window; @@ -2968,8 +2960,7 @@ void wxWindowGTK::OnInternalIdle() } } - if (wxUpdateUIEvent::CanUpdate(this) && IsShown()) - UpdateWindowUI(wxUPDATE_UI_FROMIDLE); + wxWindowBase::OnInternalIdle(); } void wxWindowGTK::DoGetSize( int *width, int *height ) const @@ -3138,7 +3129,7 @@ void wxWindowGTK::DoClientToScreen( int *x, int *y ) const if (!m_widget->window) return; - GdkWindow *source = (GdkWindow *) NULL; + GdkWindow *source = NULL; if (m_wxwindow) source = GTK_PIZZA(m_wxwindow)->bin_window; else @@ -3167,7 +3158,7 @@ void wxWindowGTK::DoScreenToClient( int *x, int *y ) const if (!m_widget->window) return; - GdkWindow *source = (GdkWindow *) NULL; + GdkWindow *source = NULL; if (m_wxwindow) source = GTK_PIZZA(m_wxwindow)->bin_window; else @@ -3227,7 +3218,7 @@ int wxWindowGTK::GetCharHeight() const wxCHECK_MSG( (m_widget != NULL), 12, wxT("invalid window") ); wxFont font = GetFont(); - wxCHECK_MSG( font.Ok(), 12, wxT("invalid font") ); + wxCHECK_MSG( font.IsOk(), 12, wxT("invalid font") ); GdkFont *gfont = font.GetInternalFont( 1.0 ); @@ -3239,23 +3230,23 @@ int wxWindowGTK::GetCharWidth() const wxCHECK_MSG( (m_widget != NULL), 8, wxT("invalid window") ); wxFont font = GetFont(); - wxCHECK_MSG( font.Ok(), 8, wxT("invalid font") ); + wxCHECK_MSG( font.IsOk(), 8, wxT("invalid font") ); GdkFont *gfont = font.GetInternalFont( 1.0 ); return gdk_string_width( gfont, "g" ); } -void wxWindowGTK::GetTextExtent( const wxString& string, - int *x, - int *y, - int *descent, - int *externalLeading, - const wxFont *theFont ) const +void wxWindowGTK::DoGetTextExtent(const wxString& string, + int *x, + int *y, + int *descent, + int *externalLeading, + const wxFont *theFont) const { wxFont fontToUse = theFont ? *theFont : GetFont(); - wxCHECK_RET( fontToUse.Ok(), wxT("invalid font") ); + wxCHECK_RET( fontToUse.IsOk(), wxT("invalid font") ); if (string.empty()) { @@ -3298,7 +3289,7 @@ void wxWindowGTK::SetFocus() // it should be focused and will do it later, during the idle // time, as soon as we can wxLogTrace(TRACE_FOCUS, - _T("Delaying setting focus to %s(%s)"), + wxT("Delaying setting focus to %s(%s)"), GetClassInfo()->GetClassName(), GetLabel().c_str()); g_delayedFocus = this; @@ -3306,7 +3297,7 @@ void wxWindowGTK::SetFocus() else { wxLogTrace(TRACE_FOCUS, - _T("Setting focus to %s(%s)"), + wxT("Setting focus to %s(%s)"), GetClassInfo()->GetClassName(), GetLabel().c_str()); gtk_widget_grab_focus (m_widget); @@ -3320,7 +3311,7 @@ void wxWindowGTK::SetFocus() else { wxLogTrace(TRACE_FOCUS, - _T("Can't set focus to %s(%s)"), + wxT("Can't set focus to %s(%s)"), GetClassInfo()->GetClassName(), GetLabel().c_str()); } } @@ -3431,7 +3422,7 @@ void wxWindowGTK::WarpPointer( int x, int y ) // We provide this function ourselves as it is // missing in GDK (top of this file). - GdkWindow *window = (GdkWindow*) NULL; + GdkWindow *window = NULL; if (m_wxwindow) window = GTK_PIZZA(m_wxwindow)->bin_window; else @@ -3505,7 +3496,7 @@ void wxWindowGTK::Refresh( bool eraseBackground, const wxRect *rect ) } else { - gtk_widget_draw( m_widget, (GdkRectangle*) NULL ); + gtk_widget_draw( m_widget, NULL ); } } } @@ -3583,15 +3574,11 @@ void wxWindowGTK::GtkSendPaintEvents() } } } - else - - // if (!m_clearRegion.IsEmpty()) // Always send an erase event under GTK 1.2 + else // Always send an erase event under GTK 1.2 { wxWindowDC dc( (wxWindow*)this ); - if (m_clearRegion.IsEmpty()) - dc.SetClippingRegion( m_updateRegion ); - else - dc.SetClippingRegion( m_clearRegion ); + dc.SetDeviceClippingRegion( m_clearRegion.IsEmpty() ? m_updateRegion + : m_clearRegion ); wxEraseEvent erase_event( GetId(), &dc ); erase_event.SetEventObject( this ); @@ -3699,7 +3686,7 @@ void wxWindowGTK::DoSetToolTip( wxToolTip *tip ) void wxWindowGTK::ApplyToolTip( GtkTooltips *tips, const wxChar *tip ) { wxString tmp( tip ); - gtk_tooltips_set_tip( tips, GetConnectWidget(), wxGTK_CONV(tmp), (gchar*) NULL ); + gtk_tooltips_set_tip( tips, GetConnectWidget(), wxGTK_CONV(tmp), NULL ); } #endif // wxUSE_TOOLTIPS @@ -3710,7 +3697,7 @@ bool wxWindowGTK::SetBackgroundColour( const wxColour &colour ) if (!wxWindowBase::SetBackgroundColour(colour)) return false; - if (colour.Ok()) + if (colour.IsOk()) { // We need the pixel value e.g. for background clearing. m_backgroundColour.CalcPixel(gtk_widget_get_colormap(m_widget)); @@ -3733,7 +3720,7 @@ bool wxWindowGTK::SetForegroundColour( const wxColour &colour ) return false; } - if (colour.Ok()) + if (colour.IsOk()) { // We need the pixel value e.g. for background clearing. m_foregroundColour.CalcPixel(gtk_widget_get_colormap(m_widget)); @@ -3750,21 +3737,21 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle) { // do we need to apply any changes at all? if ( !forceStyle && - !m_font.Ok() && - !m_foregroundColour.Ok() && !m_backgroundColour.Ok() ) + !m_font.IsOk() && + !m_foregroundColour.IsOk() && !m_backgroundColour.IsOk() ) { return NULL; } GtkRcStyle *style = gtk_rc_style_new(); - if ( m_font.Ok() ) + if ( m_font.IsOk() ) { wxString xfontname = m_font.GetNativeFontInfo()->GetXFontName(); style->fontset_name = g_strdup(xfontname.c_str()); } - if ( m_foregroundColour.Ok() ) + if ( m_foregroundColour.IsOk() ) { GdkColor *fg = m_foregroundColour.GetColor(); @@ -3778,7 +3765,7 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle) style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG; } - if ( m_backgroundColour.Ok() ) + if ( m_backgroundColour.IsOk() ) { GdkColor *bg = m_backgroundColour.GetColor(); @@ -3833,7 +3820,7 @@ bool wxWindowGTK::SetBackgroundStyle(wxBackgroundStyle style) if (style == wxBG_STYLE_CUSTOM) { - GdkWindow *window = (GdkWindow*) NULL; + GdkWindow *window = NULL; if (m_wxwindow) window = GTK_PIZZA(m_wxwindow)->bin_window; else @@ -3917,16 +3904,16 @@ void wxWindowGTK::DoCaptureMouse() { wxCHECK_RET( m_widget != NULL, wxT("invalid window") ); - GdkWindow *window = (GdkWindow*) NULL; + GdkWindow *window = NULL; if (m_wxwindow) window = GTK_PIZZA(m_wxwindow)->bin_window; else window = GetConnectWidget()->window; - wxCHECK_RET( window, _T("CaptureMouse() failed") ); + wxCHECK_RET( window, wxT("CaptureMouse() failed") ); const wxCursor* cursor = &m_cursor; - if (!cursor->Ok()) + if (!cursor->IsOk()) cursor = wxSTANDARD_CURSOR; gdk_pointer_grab( window, FALSE, @@ -3935,7 +3922,7 @@ void wxWindowGTK::DoCaptureMouse() GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_POINTER_MOTION_MASK), - (GdkWindow *) NULL, + NULL, cursor->GetCursor(), (guint32)GDK_CURRENT_TIME ); g_captureWindow = this; @@ -3948,9 +3935,9 @@ void wxWindowGTK::DoReleaseMouse() wxCHECK_RET( g_captureWindow, wxT("can't release mouse - not captured") ); - g_captureWindow = (wxWindowGTK*) NULL; + g_captureWindow = NULL; - GdkWindow *window = (GdkWindow*) NULL; + GdkWindow *window = NULL; if (m_wxwindow) window = GTK_PIZZA(m_wxwindow)->bin_window; else