yet more avoiding direct struct access

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67324 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett
2011-03-27 19:38:10 +00:00
parent a8886b11f2
commit 989d151ce2

View File

@@ -313,7 +313,8 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win)
if (!win->IsShown()) if (!win->IsShown())
return false; return false;
const GtkAllocation& alloc = win->m_wxwindow->allocation; GtkAllocation alloc;
gtk_widget_get_allocation(win->m_wxwindow, &alloc);
const int x = alloc.x; const int x = alloc.x;
const int y = alloc.y; const int y = alloc.y;
const int w = alloc.width; const int w = alloc.width;
@@ -1151,7 +1152,9 @@ template<typename T> void InitMouseEvent(wxWindowGTK *win,
if ((win->m_wxwindow) && (win->GetLayoutDirection() == wxLayout_RightToLeft)) if ((win->m_wxwindow) && (win->GetLayoutDirection() == wxLayout_RightToLeft))
{ {
// origin in the upper right corner // origin in the upper right corner
int window_width = win->m_wxwindow->allocation.width; GtkAllocation a;
gtk_widget_get_allocation(win->m_wxwindow, &a);
int window_width = a.width;
event.m_x = window_width - event.m_x; event.m_x = window_width - event.m_x;
} }
@@ -1618,13 +1621,11 @@ window_scroll_event_hscrollbar(GtkWidget*, GdkEventScroll* gdk_event, wxWindow*
if (range && gtk_widget_get_visible(GTK_WIDGET(range))) if (range && gtk_widget_get_visible(GTK_WIDGET(range)))
{ {
GtkAdjustment* adj = gtk_range_get_adjustment(range); GtkAdjustment* adj = gtk_range_get_adjustment(range);
gdouble delta = adj->step_increment * 3; double delta = gtk_adjustment_get_step_increment(adj) * 3;
if (gdk_event->direction == GDK_SCROLL_LEFT) if (gdk_event->direction == GDK_SCROLL_LEFT)
delta = -delta; delta = -delta;
gdouble new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size); gtk_range_set_value(range, gtk_adjustment_get_value(adj) + delta);
gtk_adjustment_set_value (adj, new_value);
return TRUE; return TRUE;
} }
@@ -1660,13 +1661,11 @@ window_scroll_event(GtkWidget*, GdkEventScroll* gdk_event, wxWindow* win)
if (range && gtk_widget_get_visible(GTK_WIDGET(range))) if (range && gtk_widget_get_visible(GTK_WIDGET(range)))
{ {
GtkAdjustment* adj = gtk_range_get_adjustment(range); GtkAdjustment* adj = gtk_range_get_adjustment(range);
gdouble delta = adj->step_increment * 3; double delta = gtk_adjustment_get_step_increment(adj) * 3;
if (gdk_event->direction == GDK_SCROLL_UP) if (gdk_event->direction == GDK_SCROLL_UP)
delta = -delta; delta = -delta;
gdouble new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size); gtk_range_set_value(range, gtk_adjustment_get_value(adj) + delta);
gtk_adjustment_set_value (adj, new_value);
return TRUE; return TRUE;
} }
@@ -1749,7 +1748,7 @@ gtk_window_enter_callback( GtkWidget *widget,
int y = 0; int y = 0;
GdkModifierType state = (GdkModifierType)0; GdkModifierType state = (GdkModifierType)0;
gdk_window_get_pointer( widget->window, &x, &y, &state ); gdk_window_get_pointer(gtk_widget_get_window(widget), &x, &y, &state);
wxMouseEvent event( wxEVT_ENTER_WINDOW ); wxMouseEvent event( wxEVT_ENTER_WINDOW );
InitMouseEvent(win, event, gdk_event); InitMouseEvent(win, event, gdk_event);
@@ -1789,7 +1788,7 @@ gtk_window_leave_callback( GtkWidget *widget,
int y = 0; int y = 0;
GdkModifierType state = (GdkModifierType)0; GdkModifierType state = (GdkModifierType)0;
gdk_window_get_pointer( widget->window, &x, &y, &state ); gdk_window_get_pointer(gtk_widget_get_window(widget), &x, &y, &state);
InitMouseEvent(win, event, gdk_event); InitMouseEvent(win, event, gdk_event);
@@ -1886,7 +1885,7 @@ gtk_window_realized_callback(GtkWidget* widget, wxWindow* win)
if (win->m_imData) if (win->m_imData)
{ {
gtk_im_context_set_client_window( win->m_imData->context, gtk_im_context_set_client_window( win->m_imData->context,
win->m_wxwindow ? win->GTKGetDrawingWindow() : widget->window); win->m_wxwindow ? win->GTKGetDrawingWindow() : gtk_widget_get_window(widget));
} }
// We cannot set colours and fonts before the widget // We cannot set colours and fonts before the widget
@@ -1930,8 +1929,10 @@ size_allocate(GtkWidget*, GtkAllocation* alloc, wxWindow* win)
win->m_oldClientHeight = h; win->m_oldClientHeight = h;
// this callback can be connected to m_wxwindow, // this callback can be connected to m_wxwindow,
// so always get size from m_widget->allocation // so always get size from m_widget->allocation
win->m_width = win->m_widget->allocation.width; GtkAllocation a;
win->m_height = win->m_widget->allocation.height; gtk_widget_get_allocation(win->m_widget, &a);
win->m_width = a.width;
win->m_height = a.height;
if (!win->m_nativeSizeEvent) if (!win->m_nativeSizeEvent)
{ {
wxSizeEvent event(win->GetSize(), win->GetId()); wxSizeEvent event(win->GetSize(), win->GetId());
@@ -2178,17 +2179,14 @@ bool wxWindowGTK::Create( wxWindow *parent,
if (HasFlag(wxALWAYS_SHOW_SB)) if (HasFlag(wxALWAYS_SHOW_SB))
{ {
gtk_scrolled_window_set_policy( scrolledWindow, GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS ); gtk_scrolled_window_set_policy( scrolledWindow, GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS );
scrolledWindow->hscrollbar_visible = TRUE;
scrolledWindow->vscrollbar_visible = TRUE;
} }
else else
{ {
gtk_scrolled_window_set_policy( scrolledWindow, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_set_policy( scrolledWindow, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
} }
m_scrollBar[ScrollDir_Horz] = GTK_RANGE(scrolledWindow->hscrollbar); m_scrollBar[ScrollDir_Horz] = GTK_RANGE(gtk_scrolled_window_get_hscrollbar(scrolledWindow));
m_scrollBar[ScrollDir_Vert] = GTK_RANGE(scrolledWindow->vscrollbar); m_scrollBar[ScrollDir_Vert] = GTK_RANGE(gtk_scrolled_window_get_vscrollbar(scrolledWindow));
if (GetLayoutDirection() == wxLayout_RightToLeft) if (GetLayoutDirection() == wxLayout_RightToLeft)
gtk_range_set_inverted( m_scrollBar[ScrollDir_Horz], TRUE ); gtk_range_set_inverted( m_scrollBar[ScrollDir_Horz], TRUE );
@@ -2678,7 +2676,7 @@ void wxWindowGTK::DoGetClientSize( int *width, int *height ) const
case GTK_POLICY_AUTOMATIC: case GTK_POLICY_AUTOMATIC:
// may be shown or not, check // may be shown or not, check
GtkAdjustment *adj = gtk_range_get_adjustment(range); GtkAdjustment *adj = gtk_range_get_adjustment(range);
if ( adj->upper <= adj->page_size ) if (gtk_adjustment_get_upper(adj) <= gtk_adjustment_get_page_size(adj))
continue; continue;
} }
@@ -2736,9 +2734,9 @@ void wxWindowGTK::DoGetPosition( int *x, int *y ) const
{ {
GdkWindow *source = NULL; GdkWindow *source = NULL;
if (m_wxwindow) if (m_wxwindow)
source = m_wxwindow->window; source = gtk_widget_get_window(m_wxwindow);
else else
source = m_widget->window; source = gtk_widget_get_window(m_widget);
if (source) if (source)
{ {
@@ -2762,13 +2760,13 @@ void wxWindowGTK::DoClientToScreen( int *x, int *y ) const
{ {
wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); wxCHECK_RET( (m_widget != NULL), wxT("invalid window") );
if (!m_widget->window) return; if (gtk_widget_get_window(m_widget) == NULL) return;
GdkWindow *source = NULL; GdkWindow *source = NULL;
if (m_wxwindow) if (m_wxwindow)
source = m_wxwindow->window; source = gtk_widget_get_window(m_wxwindow);
else else
source = m_widget->window; source = gtk_widget_get_window(m_widget);
int org_x = 0; int org_x = 0;
int org_y = 0; int org_y = 0;
@@ -2778,8 +2776,10 @@ void wxWindowGTK::DoClientToScreen( int *x, int *y ) const
{ {
if (!gtk_widget_get_has_window(m_widget)) if (!gtk_widget_get_has_window(m_widget))
{ {
org_x += m_widget->allocation.x; GtkAllocation a;
org_y += m_widget->allocation.y; gtk_widget_get_allocation(m_widget, &a);
org_x += a.x;
org_y += a.y;
} }
} }
@@ -2799,13 +2799,13 @@ void wxWindowGTK::DoScreenToClient( int *x, int *y ) const
{ {
wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); wxCHECK_RET( (m_widget != NULL), wxT("invalid window") );
if (!m_widget->window) return; if (!gtk_widget_get_realized(m_widget)) return;
GdkWindow *source = NULL; GdkWindow *source = NULL;
if (m_wxwindow) if (m_wxwindow)
source = m_wxwindow->window; source = gtk_widget_get_window(m_wxwindow);
else else
source = m_widget->window; source = gtk_widget_get_window(m_widget);
int org_x = 0; int org_x = 0;
int org_y = 0; int org_y = 0;
@@ -2815,8 +2815,10 @@ void wxWindowGTK::DoScreenToClient( int *x, int *y ) const
{ {
if (!gtk_widget_get_has_window(m_widget)) if (!gtk_widget_get_has_window(m_widget))
{ {
org_x += m_widget->allocation.x; GtkAllocation a;
org_y += m_widget->allocation.y; gtk_widget_get_allocation(m_widget, &a);
org_x += a.x;
org_y += a.y;
} }
} }
@@ -3421,13 +3423,13 @@ void wxWindowGTK::Raise()
{ {
wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); wxCHECK_RET( (m_widget != NULL), wxT("invalid window") );
if (m_wxwindow && m_wxwindow->window) if (m_wxwindow && gtk_widget_get_window(m_wxwindow))
{ {
gdk_window_raise( m_wxwindow->window ); gdk_window_raise(gtk_widget_get_window(m_wxwindow));
} }
else if (m_widget->window) else if (gtk_widget_get_window(m_widget))
{ {
gdk_window_raise( m_widget->window ); gdk_window_raise(gtk_widget_get_window(m_widget));
} }
} }
@@ -3435,13 +3437,13 @@ void wxWindowGTK::Lower()
{ {
wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); wxCHECK_RET( (m_widget != NULL), wxT("invalid window") );
if (m_wxwindow && m_wxwindow->window) if (m_wxwindow && gtk_widget_get_window(m_wxwindow))
{ {
gdk_window_lower( m_wxwindow->window ); gdk_window_lower(gtk_widget_get_window(m_wxwindow));
} }
else if (m_widget->window) else if (gtk_widget_get_window(m_widget))
{ {
gdk_window_lower( m_widget->window ); gdk_window_lower(gtk_widget_get_window(m_widget));
} }
} }
@@ -3500,9 +3502,9 @@ void wxWindowGTK::WarpPointer( int x, int y )
GdkWindow *window = NULL; GdkWindow *window = NULL;
if (m_wxwindow) if (m_wxwindow)
window = m_wxwindow->window; window = gtk_widget_get_window(m_wxwindow);
else else
window = GetConnectWidget()->window; window = gtk_widget_get_window(GetConnectWidget());
if (window) if (window)
gdk_window_warp_pointer( window, x, y ); gdk_window_warp_pointer( window, x, y );
@@ -3529,13 +3531,13 @@ bool wxWindowGTK::DoScrollByUnits(ScrollDir dir, ScrollUnit unit, int units)
if ( range && units ) if ( range && units )
{ {
GtkAdjustment* adj = gtk_range_get_adjustment(range); GtkAdjustment* adj = gtk_range_get_adjustment(range);
gdouble inc = unit == ScrollUnit_Line ? adj->step_increment double inc = unit == ScrollUnit_Line ? gtk_adjustment_get_step_increment(adj)
: adj->page_increment; : gtk_adjustment_get_page_increment(adj);
const int posOld = int(gtk_adjustment_get_value(adj) + 0.5); const int posOld = wxRound(gtk_adjustment_get_value(adj));
gtk_range_set_value(range, posOld + units*inc); gtk_range_set_value(range, posOld + units*inc);
changed = int(gtk_adjustment_get_value(adj) + 0.5) != posOld; changed = wxRound(gtk_adjustment_get_value(adj)) != posOld;
} }
return changed; return changed;
@@ -3605,7 +3607,7 @@ void wxWindowGTK::Update()
GdkWindow* window = GTKGetDrawingWindow(); GdkWindow* window = GTKGetDrawingWindow();
if (window == NULL) if (window == NULL)
window = m_widget->window; window = gtk_widget_get_window(m_widget);
gdk_window_process_updates(window, true); gdk_window_process_updates(window, true);
// Flush again, but no need to wait for it to finish // Flush again, but no need to wait for it to finish
@@ -3645,7 +3647,7 @@ void wxWindowGTK::GtkSendPaintEvents()
m_updateRegion.Clear(); m_updateRegion.Clear();
gint width; gint width;
gdk_drawable_get_size(m_wxwindow->window, &width, NULL); gdk_drawable_get_size(gtk_widget_get_window(m_wxwindow), &width, NULL);
wxRegionIterator upd( m_nativeUpdateRegion ); wxRegionIterator upd( m_nativeUpdateRegion );
while (upd) while (upd)
@@ -3712,7 +3714,7 @@ void wxWindowGTK::GtkSendPaintEvents()
gtk_paint_flat_box(gtk_widget_get_style(parent->m_widget), gtk_paint_flat_box(gtk_widget_get_style(parent->m_widget),
GTKGetDrawingWindow(), GTKGetDrawingWindow(),
(GtkStateType)gtk_widget_get_state(m_wxwindow), gtk_widget_get_state(m_wxwindow),
GTK_SHADOW_NONE, GTK_SHADOW_NONE,
&rect, &rect,
parent->m_widget, parent->m_widget,
@@ -3956,7 +3958,7 @@ bool wxWindowGTK::SetBackgroundStyle(wxBackgroundStyle style)
else else
{ {
GtkWidget * const w = GetConnectWidget(); GtkWidget * const w = GetConnectWidget();
window = w ? w->window : NULL; window = w ? gtk_widget_get_window(w) : NULL;
} }
if (window) if (window)
@@ -4096,7 +4098,7 @@ bool wxWindowGTK::GTKIsOwnWindow(GdkWindow *window) const
GdkWindow *wxWindowGTK::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const GdkWindow *wxWindowGTK::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const
{ {
return m_wxwindow ? GTKGetDrawingWindow() : m_widget->window; return m_wxwindow ? GTKGetDrawingWindow() : gtk_widget_get_window(m_widget);
} }
bool wxWindowGTK::SetFont( const wxFont &font ) bool wxWindowGTK::SetFont( const wxFont &font )
@@ -4121,7 +4123,7 @@ void wxWindowGTK::DoCaptureMouse()
if (m_wxwindow) if (m_wxwindow)
window = GTKGetDrawingWindow(); window = GTKGetDrawingWindow();
else else
window = GetConnectWidget()->window; window = gtk_widget_get_window(GetConnectWidget());
wxCHECK_RET( window, wxT("CaptureMouse() failed") ); wxCHECK_RET( window, wxT("CaptureMouse() failed") );
@@ -4154,7 +4156,7 @@ void wxWindowGTK::DoReleaseMouse()
if (m_wxwindow) if (m_wxwindow)
window = GTKGetDrawingWindow(); window = GTKGetDrawingWindow();
else else
window = GetConnectWidget()->window; window = gtk_widget_get_window(GetConnectWidget());
if (!window) if (!window)
return; return;
@@ -4198,13 +4200,11 @@ void wxWindowGTK::SetScrollbar(int orient,
thumbVisible = 1; thumbVisible = 1;
} }
GtkAdjustment * const adj = sb->adjustment;
adj->page_size = thumbVisible;
g_signal_handlers_block_by_func( g_signal_handlers_block_by_func(
sb, (void*)gtk_scrollbar_value_changed, this); sb, (void*)gtk_scrollbar_value_changed, this);
gtk_range_set_increments(sb, 1, thumbVisible); gtk_range_set_increments(sb, 1, thumbVisible);
gtk_adjustment_set_page_size(gtk_range_get_adjustment(sb), thumbVisible);
gtk_range_set_range(sb, 0, range); gtk_range_set_range(sb, 0, range);
gtk_range_set_value(sb, pos); gtk_range_set_value(sb, pos);
m_scrollPos[dir] = gtk_range_get_value(sb); m_scrollPos[dir] = gtk_range_get_value(sb);
@@ -4239,7 +4239,7 @@ int wxWindowGTK::GetScrollThumb(int orient) const
GtkRange * const sb = m_scrollBar[ScrollDirFromOrient(orient)]; GtkRange * const sb = m_scrollBar[ScrollDirFromOrient(orient)];
wxCHECK_MSG( sb, 0, wxT("this window is not scrollable") ); wxCHECK_MSG( sb, 0, wxT("this window is not scrollable") );
return wxRound(sb->adjustment->page_size); return wxRound(gtk_adjustment_get_page_size(gtk_range_get_adjustment(sb)));
} }
int wxWindowGTK::GetScrollPos( int orient ) const int wxWindowGTK::GetScrollPos( int orient ) const
@@ -4255,7 +4255,7 @@ int wxWindowGTK::GetScrollRange( int orient ) const
GtkRange * const sb = m_scrollBar[ScrollDirFromOrient(orient)]; GtkRange * const sb = m_scrollBar[ScrollDirFromOrient(orient)];
wxCHECK_MSG( sb, 0, wxT("this window is not scrollable") ); wxCHECK_MSG( sb, 0, wxT("this window is not scrollable") );
return wxRound(sb->adjustment->upper); return wxRound(gtk_adjustment_get_upper(gtk_range_get_adjustment(sb)));
} }
// Determine if increment is the same as +/-x, allowing for some small // Determine if increment is the same as +/-x, allowing for some small
@@ -4293,11 +4293,11 @@ wxEventType wxWindowGTK::GTKGetScrollEventType(GtkRange* range)
const bool isDown = diff > 0; const bool isDown = diff > 0;
GtkAdjustment* adj = gtk_range_get_adjustment(range); GtkAdjustment* adj = gtk_range_get_adjustment(range);
if (IsScrollIncrement(adj->step_increment, diff)) if (IsScrollIncrement(gtk_adjustment_get_step_increment(adj), diff))
{ {
eventType = isDown ? wxEVT_SCROLL_LINEDOWN : wxEVT_SCROLL_LINEUP; eventType = isDown ? wxEVT_SCROLL_LINEDOWN : wxEVT_SCROLL_LINEUP;
} }
else if (IsScrollIncrement(adj->page_increment, diff)) else if (IsScrollIncrement(gtk_adjustment_get_page_increment(adj), diff))
{ {
eventType = isDown ? wxEVT_SCROLL_PAGEDOWN : wxEVT_SCROLL_PAGEUP; eventType = isDown ? wxEVT_SCROLL_PAGEDOWN : wxEVT_SCROLL_PAGEUP;
} }
@@ -4423,7 +4423,7 @@ GdkWindow* wxWindowGTK::GTKGetDrawingWindow() const
{ {
GdkWindow* window = NULL; GdkWindow* window = NULL;
if (m_wxwindow) if (m_wxwindow)
window = m_wxwindow->window; window = gtk_widget_get_window(m_wxwindow);
return window; return window;
} }
@@ -4448,9 +4448,11 @@ static void wx_frozen_widget_realize(GtkWidget* w, wxWindowGTK* win)
win win
); );
GdkWindow* window = w->window; GdkWindow* window;
if (w == win->m_wxwindow) if (w == win->m_wxwindow)
window = win->GTKGetDrawingWindow(); window = win->GTKGetDrawingWindow();
else
window = gtk_widget_get_window(w);
gdk_window_freeze_updates(window); gdk_window_freeze_updates(window);
} }
@@ -4461,7 +4463,8 @@ void wxWindowGTK::GTKFreezeWidget(GtkWidget *w)
if ( !w || !gtk_widget_get_has_window(w) ) if ( !w || !gtk_widget_get_has_window(w) )
return; // window-less widget, cannot be frozen return; // window-less widget, cannot be frozen
if ( !gtk_widget_get_realized(w) ) GdkWindow* window = gtk_widget_get_window(w);
if (window == NULL)
{ {
// we can't thaw unrealized widgets because they don't have GdkWindow, // we can't thaw unrealized widgets because they don't have GdkWindow,
// so set it up to be done immediately after realization: // so set it up to be done immediately after realization:
@@ -4475,7 +4478,6 @@ void wxWindowGTK::GTKFreezeWidget(GtkWidget *w)
return; return;
} }
GdkWindow* window = w->window;
if (w == m_wxwindow) if (w == m_wxwindow)
window = GTKGetDrawingWindow(); window = GTKGetDrawingWindow();
gdk_window_freeze_updates(window); gdk_window_freeze_updates(window);
@@ -4486,7 +4488,8 @@ void wxWindowGTK::GTKThawWidget(GtkWidget *w)
if ( !w || !gtk_widget_get_has_window(w) ) if ( !w || !gtk_widget_get_has_window(w) )
return; // window-less widget, cannot be frozen return; // window-less widget, cannot be frozen
if ( !gtk_widget_get_realized(w) ) GdkWindow* window = gtk_widget_get_window(w);
if (window == NULL)
{ {
// the widget wasn't realized yet, no need to thaw // the widget wasn't realized yet, no need to thaw
g_signal_handlers_disconnect_by_func g_signal_handlers_disconnect_by_func
@@ -4498,7 +4501,6 @@ void wxWindowGTK::GTKThawWidget(GtkWidget *w)
return; return;
} }
GdkWindow* window = w->window;
if (w == m_wxwindow) if (w == m_wxwindow)
window = GTKGetDrawingWindow(); window = GTKGetDrawingWindow();
gdk_window_thaw_updates(window); gdk_window_thaw_updates(window);