static void wxCanvasMotionEvent(Widget, XButtonEvent * event);
static void wxCanvasEnterLeave(Widget drawingArea, XtPointer clientData, XCrossingEvent * event);
static void wxScrollBarCallback(Widget widget, XtPointer clientData,
- XmScaleCallbackStruct *cbs);
+ XmScrollBarCallbackStruct *cbs);
static void wxPanelItemEventHandler(Widget wid,
XtPointer client_data,
XEvent* event,
wxDeleteWindowFromTable((Widget) m_scrolledWindow);
}
+ if (m_hScrollBar)
+ {
+ wxDeleteWindowFromTable((Widget) m_hScrollBar);
+ }
+ if (m_vScrollBar)
+ {
+ wxDeleteWindowFromTable((Widget) m_vScrollBar);
+ }
+
UnmanageAndDestroy(m_hScrollBar);
UnmanageAndDestroy(m_vScrollBar);
UnmanageAndDestroy(m_scrolledWindow);
NULL);
m_hScroll = TRUE;
+
+ wxAddWindowToTable( hScrollBar, this );
}
if (orientation == wxVERTICAL)
NULL);
m_vScroll = TRUE;
+
+ wxAddWindowToTable( vScrollBar, this );
}
XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_ANY, NULL);
{
if (m_hScrollBar)
{
+ wxDeleteWindowFromTable((Widget)m_hScrollBar);
XtDestroyWidget((Widget) m_hScrollBar);
}
m_hScrollBar = (WXWidget) 0;
{
if (m_vScrollBar)
{
+ wxDeleteWindowFromTable((Widget)m_vScrollBar);
XtDestroyWidget((Widget) m_vScrollBar);
}
m_vScrollBar = (WXWidget) 0;
}
wxASSERT_MSG( m_cursor.Ok(),
- _T("cursor must be valid after call to the base version"));
+ T("cursor must be valid after call to the base version"));
WXDisplay *dpy = GetXDisplay();
WXCursor x_cursor = m_cursor.GetXCursor(dpy);
{
case Expose:
{
+ win->AddUpdateRect(event->xexpose.x, event->xexpose.y,
+ event->xexpose.width, event->xexpose.height);
+
if (event -> xexpose.count == 0)
{
-#if 0
- wxPaintEvent event(win->GetId());
- event.SetEventObject(win);
- win->GetEventHandler()->ProcessEvent(event);
-#endif // 0
-
win->DoPaint();
win->ClearUpdateRects();
}
- else
- {
- win->AddUpdateRect(event->xexpose.x, event->xexpose.y,
- event->xexpose.width, event->xexpose.height);
- }
break;
}
}
case ButtonRelease:
case MotionNotify:
{
+ // FIXME: most of this mouse event code is more or less
+ // duplicated in wxTranslateMouseEvent
+ //
wxEventType eventType = wxEVT_NULL;
if (local_event.xany.type == EnterNotify)
}
else if (local_event.xany.type == LeaveNotify)
{
- //if (local_event.xcrossing.mode!=NotifyNormal)
+ //if (local_event.xcrossingr.mode!=NotifyNormal)
// return ; // Ignore grab events
eventType = wxEVT_LEAVE_WINDOW;
// canvas->GetEventHandler()->OnKillFocus();
static void wxScrollBarCallback(Widget scrollbar,
XtPointer clientData,
- XmScaleCallbackStruct *cbs)
+ XmScrollBarCallbackStruct *cbs)
{
wxWindow *win = wxGetWindowFromTable(scrollbar);
int orientation = (int) clientData;
{
case XmCR_INCREMENT:
{
- eventType = wxEVT_SCROLL_LINEDOWN;
+ eventType = wxEVT_SCROLLWIN_LINEDOWN;
break;
}
case XmCR_DECREMENT:
{
- eventType = wxEVT_SCROLL_LINEUP;
+ eventType = wxEVT_SCROLLWIN_LINEUP;
break;
}
case XmCR_DRAG:
{
- eventType = wxEVT_SCROLL_THUMBTRACK;
+ eventType = wxEVT_SCROLLWIN_THUMBTRACK;
break;
}
case XmCR_VALUE_CHANGED:
{
// TODO: Should this be intercepted too, or will it cause
// duplicate events?
- eventType = wxEVT_SCROLL_THUMBTRACK;
+ eventType = wxEVT_SCROLLWIN_THUMBTRACK;
break;
}
case XmCR_PAGE_INCREMENT:
{
- eventType = wxEVT_SCROLL_PAGEDOWN;
+ eventType = wxEVT_SCROLLWIN_PAGEDOWN;
break;
}
case XmCR_PAGE_DECREMENT:
{
- eventType = wxEVT_SCROLL_PAGEUP;
+ eventType = wxEVT_SCROLLWIN_PAGEUP;
break;
}
case XmCR_TO_TOP:
{
- eventType = wxEVT_SCROLL_TOP;
+ eventType = wxEVT_SCROLLWIN_TOP;
break;
}
case XmCR_TO_BOTTOM:
{
- eventType = wxEVT_SCROLL_BOTTOM;
+ eventType = wxEVT_SCROLLWIN_BOTTOM;
break;
}
default:
}
}
- wxScrollEvent event(eventType, win->GetId());
- event.SetEventObject(win);
- event.SetPosition(cbs->value);
- event.SetOrientation( (orientation == XmHORIZONTAL) ? wxHORIZONTAL : wxVERTICAL );
-
+ wxScrollWinEvent event(eventType,
+ cbs->value,
+ ((orientation == XmHORIZONTAL) ?
+ wxHORIZONTAL : wxVERTICAL));
+ event.SetEventObject( win );
win->GetEventHandler()->ProcessEvent(event);
}
{
switch (xevent->xany.type)
{
- case EnterNotify:
- case LeaveNotify:
- case ButtonPress:
- case ButtonRelease:
- case MotionNotify:
+ case EnterNotify: // never received here - yes ? MB
+ case LeaveNotify: // never received here - yes ? MB
+ case ButtonPress:
+ case ButtonRelease:
+ case MotionNotify:
{
wxEventType eventType = wxEVT_NULL;
+ // FIXME: this is never true I think - MB
+ //
if (xevent->xany.type == LeaveNotify)
{
win->SetButton1(FALSE);
}
else if (xevent->xany.type == ButtonPress)
{
+ wxevent.SetTimestamp(xevent->xbutton.time);
+ int button = 0;
if (xevent->xbutton.button == Button1)
{
eventType = wxEVT_LEFT_DOWN;
win->SetButton1(TRUE);
+ button = 1;
}
else if (xevent->xbutton.button == Button2)
{
eventType = wxEVT_MIDDLE_DOWN;
win->SetButton2(TRUE);
+ button = 2;
}
else if (xevent->xbutton.button == Button3)
{
eventType = wxEVT_RIGHT_DOWN;
win->SetButton3(TRUE);
+ button = 3;
+ }
+
+ // check for a double click
+ //
+ long dclickTime = XtGetMultiClickTime((Display*) wxGetDisplay());
+ long ts = wxevent.GetTimestamp();
+
+ int buttonLast = win->GetLastClickedButton();
+ long lastTS = win->GetLastClickTime();
+ if ( buttonLast && buttonLast == button && (ts - lastTS) < dclickTime )
+ {
+ // I have a dclick
+ win->SetLastClick(0, ts);
+ switch ( eventType )
+ {
+ case wxEVT_LEFT_DOWN:
+ eventType = wxEVT_LEFT_DCLICK;
+ break;
+ case wxEVT_MIDDLE_DOWN:
+ eventType = wxEVT_MIDDLE_DCLICK;
+ break;
+ case wxEVT_RIGHT_DOWN:
+ eventType = wxEVT_RIGHT_DCLICK;
+ break;
+
+ default :
+ break;
+ }
+
+ }
+ else
+ {
+ // not fast enough or different button
+ win->SetLastClick(button, ts);
}
}
else if (xevent->xany.type == ButtonRelease)
wxevent.m_shiftDown = xevent->xbutton.state & ShiftMask;
wxevent.m_controlDown = xevent->xbutton.state & ControlMask;
+ wxevent.m_altDown = xevent->xbutton.state & Mod3Mask;
+ wxevent.m_metaDown = xevent->xbutton.state & Mod1Mask;
+
+ wxevent.SetId(win->GetId());
+ wxevent.SetEventObject(win);
+
return TRUE;
}
}
// ----------------------------------------------------------------------------
int wxNoOptimize::ms_count = 0;
+
+
+
+