Fixes for scrolling in wxScrolledWindow

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3539 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Michael Bedward
1999-08-31 05:36:29 +00:00
parent 70bdacfc8e
commit 311227c3fe

View File

@@ -80,7 +80,7 @@ static void wxCanvasInputEvent(Widget drawingArea, XtPointer data, XmDrawingArea
static void wxCanvasMotionEvent(Widget, XButtonEvent * event); static void wxCanvasMotionEvent(Widget, XButtonEvent * event);
static void wxCanvasEnterLeave(Widget drawingArea, XtPointer clientData, XCrossingEvent * event); static void wxCanvasEnterLeave(Widget drawingArea, XtPointer clientData, XCrossingEvent * event);
static void wxScrollBarCallback(Widget widget, XtPointer clientData, static void wxScrollBarCallback(Widget widget, XtPointer clientData,
XmScaleCallbackStruct *cbs); XmScrollBarCallbackStruct *cbs);
static void wxPanelItemEventHandler(Widget wid, static void wxPanelItemEventHandler(Widget wid,
XtPointer client_data, XtPointer client_data,
XEvent* event, XEvent* event,
@@ -402,6 +402,15 @@ wxWindow::~wxWindow()
wxDeleteWindowFromTable((Widget) m_scrolledWindow); wxDeleteWindowFromTable((Widget) m_scrolledWindow);
} }
if (m_hScrollBar)
{
wxDeleteWindowFromTable((Widget) m_hScrollBar);
}
if (m_vScrollBar)
{
wxDeleteWindowFromTable((Widget) m_vScrollBar);
}
UnmanageAndDestroy(m_hScrollBar); UnmanageAndDestroy(m_hScrollBar);
UnmanageAndDestroy(m_vScrollBar); UnmanageAndDestroy(m_vScrollBar);
UnmanageAndDestroy(m_scrolledWindow); UnmanageAndDestroy(m_scrolledWindow);
@@ -470,6 +479,8 @@ void wxWindow::CreateScrollbar(wxOrientation orientation)
NULL); NULL);
m_hScroll = TRUE; m_hScroll = TRUE;
wxAddWindowToTable( hScrollBar, this );
} }
if (orientation == wxVERTICAL) if (orientation == wxVERTICAL)
@@ -503,6 +514,8 @@ void wxWindow::CreateScrollbar(wxOrientation orientation)
NULL); NULL);
m_vScroll = TRUE; m_vScroll = TRUE;
wxAddWindowToTable( vScrollBar, this );
} }
XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_ANY, NULL); XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_ANY, NULL);
@@ -518,6 +531,7 @@ void wxWindow::DestroyScrollbar(wxOrientation orientation)
{ {
if (m_hScrollBar) if (m_hScrollBar)
{ {
wxDeleteWindowFromTable((Widget)m_hScrollBar);
XtDestroyWidget((Widget) m_hScrollBar); XtDestroyWidget((Widget) m_hScrollBar);
} }
m_hScrollBar = (WXWidget) 0; m_hScrollBar = (WXWidget) 0;
@@ -533,6 +547,7 @@ void wxWindow::DestroyScrollbar(wxOrientation orientation)
{ {
if (m_vScrollBar) if (m_vScrollBar)
{ {
wxDeleteWindowFromTable((Widget)m_vScrollBar);
XtDestroyWidget((Widget) m_vScrollBar); XtDestroyWidget((Widget) m_vScrollBar);
} }
m_vScrollBar = (WXWidget) 0; m_vScrollBar = (WXWidget) 0;
@@ -2196,7 +2211,7 @@ static void wxPanelItemEventHandler(Widget wid,
static void wxScrollBarCallback(Widget scrollbar, static void wxScrollBarCallback(Widget scrollbar,
XtPointer clientData, XtPointer clientData,
XmScaleCallbackStruct *cbs) XmScrollBarCallbackStruct *cbs)
{ {
wxWindow *win = wxGetWindowFromTable(scrollbar); wxWindow *win = wxGetWindowFromTable(scrollbar);
int orientation = (int) clientData; int orientation = (int) clientData;
@@ -2206,44 +2221,44 @@ static void wxScrollBarCallback(Widget scrollbar,
{ {
case XmCR_INCREMENT: case XmCR_INCREMENT:
{ {
eventType = wxEVT_SCROLL_LINEDOWN; eventType = wxEVT_SCROLLWIN_LINEDOWN;
break; break;
} }
case XmCR_DECREMENT: case XmCR_DECREMENT:
{ {
eventType = wxEVT_SCROLL_LINEUP; eventType = wxEVT_SCROLLWIN_LINEUP;
break; break;
} }
case XmCR_DRAG: case XmCR_DRAG:
{ {
eventType = wxEVT_SCROLL_THUMBTRACK; eventType = wxEVT_SCROLLWIN_THUMBTRACK;
break; break;
} }
case XmCR_VALUE_CHANGED: case XmCR_VALUE_CHANGED:
{ {
// TODO: Should this be intercepted too, or will it cause // TODO: Should this be intercepted too, or will it cause
// duplicate events? // duplicate events?
eventType = wxEVT_SCROLL_THUMBTRACK; eventType = wxEVT_SCROLLWIN_THUMBTRACK;
break; break;
} }
case XmCR_PAGE_INCREMENT: case XmCR_PAGE_INCREMENT:
{ {
eventType = wxEVT_SCROLL_PAGEDOWN; eventType = wxEVT_SCROLLWIN_PAGEDOWN;
break; break;
} }
case XmCR_PAGE_DECREMENT: case XmCR_PAGE_DECREMENT:
{ {
eventType = wxEVT_SCROLL_PAGEUP; eventType = wxEVT_SCROLLWIN_PAGEUP;
break; break;
} }
case XmCR_TO_TOP: case XmCR_TO_TOP:
{ {
eventType = wxEVT_SCROLL_TOP; eventType = wxEVT_SCROLLWIN_TOP;
break; break;
} }
case XmCR_TO_BOTTOM: case XmCR_TO_BOTTOM:
{ {
eventType = wxEVT_SCROLL_BOTTOM; eventType = wxEVT_SCROLLWIN_BOTTOM;
break; break;
} }
default: default:
@@ -2254,11 +2269,11 @@ static void wxScrollBarCallback(Widget scrollbar,
} }
} }
wxScrollEvent event(eventType, win->GetId()); wxScrollWinEvent event(eventType,
cbs->value,
((orientation == XmHORIZONTAL) ?
wxHORIZONTAL : wxVERTICAL));
event.SetEventObject( win ); event.SetEventObject( win );
event.SetPosition(cbs->value);
event.SetOrientation( (orientation == XmHORIZONTAL) ? wxHORIZONTAL : wxVERTICAL );
win->GetEventHandler()->ProcessEvent(event); win->GetEventHandler()->ProcessEvent(event);
} }
@@ -2871,3 +2886,7 @@ wxWindow *wxGetActiveWindow()
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
int wxNoOptimize::ms_count = 0; int wxNoOptimize::ms_count = 0;