#pragma implementation "window.h"
#endif
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
#ifdef __VMS
#define XtDisplay XTDISPLAY
#define XtWindow XTWINDOW
void wxWindow::Init()
{
- // generic initializations first
- InitBase();
-
// Motif-specific
m_needsRefresh = TRUE;
m_mainWidget = (WXWidget) 0;
m_winCaptured = FALSE;
m_isShown = TRUE;
- m_isBeingDeleted = FALSE;
m_hScrollBar =
m_vScrollBar =
DetachWidget(wMain);
}
- if ( m_parent )
- m_parent->RemoveChild( this );
-
// If m_drawingArea, we're a fully-fledged window with drawing area,
// scrollbars etc. (what wxCanvas used to be)
if ( m_drawingArea )
}
// Get the window with the focus
-wxWindow *wxWindowBase::FindFocus()
+wxWindow *wxWindowBase::DoFindFocus()
{
// TODO Problems:
// (1) Can there be multiple focussed widgets in an application?
int wxWindow::GetScrollRange(int orient) const
{
Widget scrollBar = (Widget)GetScrollbar((wxOrientation)orient);
- wxCHECK_MSG( scrollBar, 0, "no such scrollbar" );
+ // CE scintilla windows don't always have these scrollbars
+ // and it tends to pile up a whole bunch of asserts
+ //wxCHECK_MSG( scrollBar, 0, "no such scrollbar" );
int range = 0;
if (scrollBar)
int wxWindow::GetScrollThumb(int orient) const
{
Widget scrollBar = (Widget)GetScrollbar((wxOrientation)orient);
- wxCHECK_MSG( scrollBar, 0, "no such scrollbar" );
+ //wxCHECK_MSG( scrollBar, 0, "no such scrollbar" );
- int thumb;
- XtVaGetValues(scrollBar, XmNsliderSize, &thumb, NULL);
+ int thumb = 0;
+ if (scrollBar)
+ XtVaGetValues(scrollBar, XmNsliderSize, &thumb, NULL);
return thumb;
}
bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
{
+ if ( x == -1 && y == -1 )
+ {
+ wxPoint mouse = ScreenToClient(wxGetMousePosition());
+ x = mouse.x; y = mouse.y;
+ }
+
Widget widget = (Widget) GetMainWidget();
/* The menuId field seems to be usused, so we'll use it to
// otherwise we don't know how many pixels have been scrolled. We might
// solve this in the future by defining virtual wxWindow functions to get
// the scroll position in pixels. Or, each kind of scrolled window has to
- // implement backing stores itself, using generic wxWindows code.
+ // implement backing stores itself, using generic wxWidgets code.
wxScrolledWindow* scrolledWindow = wxDynamicCast(this, wxScrolledWindow);
if ( scrolledWindow )
{
// ============================================================================
// ----------------------------------------------------------------------------
-// function which maintain the global hash table mapping Widgets to wxWindows
+// function which maintain the global hash table mapping Widgets to wxWidgets
// ----------------------------------------------------------------------------
bool wxAddWindowToTable(Widget w, wxWindow *win)
XmDrawingAreaCallbackStruct * cbs)
{
wxWindow *canvas = wxGetWindowFromTable(drawingArea);
- XEvent local_event;
+ XEvent* xevent = cbs->event;
if (canvas==NULL)
return;
if (cbs->reason != XmCR_INPUT)
return;
- local_event = *(cbs->event); // We must keep a copy!
-
- switch (local_event.xany.type)
+ switch (xevent->xany.type)
{
case EnterNotify:
case LeaveNotify:
case ButtonPress:
case ButtonRelease:
case MotionNotify:
- {
- wxMouseEvent wxevent;
- if(wxTranslateMouseEvent(wxevent, canvas, drawingArea, &local_event))
{
- canvas->GetEventHandler()->ProcessEvent(wxevent);
+ wxMouseEvent wxevent(0);
+ if (wxTranslateMouseEvent(wxevent, canvas, drawingArea, xevent))
+ {
+ canvas->GetEventHandler()->ProcessEvent(wxevent);
+ }
+ break;
}
- break;
- }
case KeyPress:
{
wxKeyEvent event (wxEVT_CHAR);
- if (wxTranslateKeyEvent (event, canvas, (Widget) 0, &local_event))
+ if (wxTranslateKeyEvent (event, canvas, (Widget) 0, xevent))
{
// Implement wxFrame::OnCharHook by checking ancestor.
wxWindow *parent = canvas;
case KeyRelease:
{
wxKeyEvent event (wxEVT_KEY_UP);
- if (wxTranslateKeyEvent (event, canvas, (Widget) 0, &local_event))
+ if (wxTranslateKeyEvent (event, canvas, (Widget) 0, xevent))
{
canvas->GetEventHandler()->ProcessEvent (event);
}
}
case FocusIn:
{
- if (local_event.xfocus.detail != NotifyPointer)
+ if (xevent->xfocus.detail != NotifyPointer)
{
wxFocusEvent event(wxEVT_SET_FOCUS, canvas->GetId());
event.SetEventObject(canvas);
}
case FocusOut:
{
- if (local_event.xfocus.detail != NotifyPointer)
+ if (xevent->xfocus.detail != NotifyPointer)
{
wxFocusEvent event(wxEVT_KILL_FOCUS, canvas->GetId());
event.SetEventObject(canvas);
// ----------------------------------------------------------------------------
bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
- Widget widget, XEvent *xevent)
+ Widget widget, const XEvent *xevent)
{
switch (xevent->xany.type)
{
case ButtonRelease:
case MotionNotify:
{
+ int eventx = xevent->xbutton.x, eventy = xevent->xbutton.y;
+
wxEventType eventType = wxEVT_NULL;
if (xevent->xany.type == LeaveNotify)
else if (xevent->xany.type == MotionNotify)
{
eventType = wxEVT_MOTION;
+
+ if (xevent->xmotion.is_hint == NotifyHint)
+ {
+ Window root, child;
+ int x_root, y_root;
+ unsigned int state;
+ Display *dpy = XtDisplay (widget);
+
+ XQueryPointer (dpy, XtWindow (widget),
+ &root, &child,
+ &x_root, &y_root, &eventx, &eventy, &state);
+ }
}
else if (xevent->xany.type == ButtonPress)
{
int x2, y2;
win->GetPosition(&x2, &y2);
- // The button x/y must be translated to wxWindows
+ // The button x/y must be translated to wxWidgets
// window space - the widget might be a label or button,
// within a form.
int dx = 0;
dy = y1;
}
- wxevent.m_x = xevent->xbutton.x + dx;
- wxevent.m_y = xevent->xbutton.y + dy;
+ wxevent.m_x = eventx + dx;
+ wxevent.m_y = eventy + dy;
wxevent.m_leftDown = ((eventType == wxEVT_LEFT_DOWN)
|| (event_left_is_down (xevent)
}
bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win,
- Widget WXUNUSED(widget), XEvent *xevent)
+ Widget WXUNUSED(widget), const XEvent *xevent)
{
switch (xevent->xany.type)
{