#pragma implementation "window.h"
#endif
+#ifdef __VMS
+#define XtDisplay XTDISPLAY
+#define XtWindow XTWINDOW
+#define XtScreen XTSCREEN
+#endif
+
#include "wx/setup.h"
#include "wx/menu.h"
#include "wx/dc.h"
// ----------------------------------------------------------------------------
extern wxHashTable *wxWidgetHashTable;
+static wxWindow* g_captureWindow = NULL;
+
// ----------------------------------------------------------------------------
// private functions
// Destructor
wxWindow::~wxWindow()
{
+ if (g_captureWindow == this)
+ g_captureWindow = NULL;
+
m_isBeingDeleted = TRUE;
// Motif-specific actions first
if (m_hScrollBar)
{
wxDeleteWindowFromTable((Widget) m_hScrollBar);
+ XtUnmanageChild((Widget) m_hScrollBar);
}
if (m_vScrollBar)
{
wxDeleteWindowFromTable((Widget) m_vScrollBar);
+ XtUnmanageChild((Widget) m_vScrollBar);
}
- UnmanageAndDestroy(m_hScrollBar);
- UnmanageAndDestroy(m_vScrollBar);
+ if (m_hScrollBar)
+ XtDestroyWidget((Widget) m_hScrollBar);
+ if (m_vScrollBar)
+ XtDestroyWidget((Widget) m_vScrollBar);
+
UnmanageAndDestroy(m_scrolledWindow);
if (m_borderWidget)
m_borderWidget = (WXWidget) 0;
}
}
+ else // Why wasn't this here before? JACS 8/3/2000
+ DestroyChildren();
+
// Destroy the window
if (GetMainWidget())
XtDestroyWidget((Widget) m_vScrollBar);
}
m_vScrollBar = (WXWidget) 0;
- m_vScroll = TRUE;
+ m_vScroll = FALSE;
XtVaSetValues((Widget) m_scrolledWindow,
XmNverticalScrollBar, (Widget) 0,
void wxWindow::CaptureMouse()
{
+ g_captureWindow = this;
if ( m_winCaptured )
return;
void wxWindow::ReleaseMouse()
{
+ g_captureWindow = NULL;
if ( !m_winCaptured )
return;
return FALSE;
}
- wxASSERT_MSG( m_cursor.Ok(),
- wxT("cursor must be valid after call to the base version"));
+ // wxASSERT_MSG( m_cursor.Ok(),
+ // wxT("cursor must be valid after call to the base version"));
+ wxCursor* cursor2 = NULL;
+ if (m_cursor.Ok())
+ cursor2 = & m_cursor;
+ else
+ cursor2 = wxSTANDARD_CURSOR;
WXDisplay *dpy = GetXDisplay();
- WXCursor x_cursor = m_cursor.GetXCursor(dpy);
+ WXCursor x_cursor = cursor2->GetXCursor(dpy);
Widget w = (Widget) GetMainWidget();
Window win = XtWindow(w);
Widget widget = (Widget) GetTopWidget();
Dimension xx, yy;
XtVaGetValues(widget, XmNwidth, &xx, XmNheight, &yy, NULL);
- *x = xx; *y = yy;
+ if(x) *x = xx; if(y) *y = yy;
}
void wxWindow::DoGetPosition(int *x, int *y) const
yy -= pt.y;
}
- *x = xx; *y = yy;
+ if(x) *x = xx; if(y) *y = yy;
}
void wxWindow::DoScreenToClient(int *x, int *y) const
Widget widget = (Widget) GetClientWidget();
Dimension xx, yy;
XtVaGetValues(widget, XmNwidth, &xx, XmNheight, &yy, NULL);
- *x = xx; *y = yy;
+ if(x) *x = xx; if(y) *y = yy;
}
void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
wxAcceleratorEntry* entry = & (entries[i]);
if (entry->MatchesEvent(event))
{
- // Bingo, we have a match. Now find a control that matches the entry
- // command id.
+ // Bingo, we have a match. Now find a control that matches the
+ // entry command id.
// Need to go up to the top of the window hierarchy, since it might
// be e.g. a menu item
{
// I have a dclick
canvas->SetLastClick(0, ts);
- switch ( eventType )
+
+ wxEventType typeDouble;
+ if ( eventType == wxEVT_LEFT_DOWN )
+ typeDouble = wxEVT_LEFT_DCLICK;
+ else if ( eventType == wxEVT_MIDDLE_DOWN )
+ typeDouble = wxEVT_MIDDLE_DCLICK;
+ else if ( eventType == wxEVT_RIGHT_DOWN )
+ typeDouble = wxEVT_RIGHT_DCLICK;
+ else
+ typeDouble = wxEVT_NULL;
+
+ if ( typeDouble != wxEVT_NULL )
{
- case wxEVT_LEFT_DOWN:
- wxevent.SetEventType(wxEVT_LEFT_DCLICK);
- break;
- case wxEVT_MIDDLE_DOWN:
- wxevent.SetEventType(wxEVT_MIDDLE_DCLICK);
- break;
- case wxEVT_RIGHT_DOWN:
- wxevent.SetEventType(wxEVT_RIGHT_DCLICK);
- break;
-
- default :
- break;
+ wxevent.SetEventType(typeDouble);
}
-
}
else
{
{
// 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;
- }
-
+ if ( eventType == wxEVT_LEFT_DOWN )
+ eventType = wxEVT_LEFT_DCLICK;
+ else if ( eventType == wxEVT_MIDDLE_DOWN )
+ eventType = wxEVT_MIDDLE_DCLICK;
+ else if ( eventType == wxEVT_RIGHT_DOWN )
+ eventType = wxEVT_RIGHT_DCLICK;
}
else
{
wxWindow *wxGetActiveWindow()
{
// TODO
+ wxFAIL_MSG("Not implemented");
return NULL;
}
+/* static */
+wxWindow *wxWindowBase::GetCapture()
+{
+ return (wxWindow *)g_captureWindow;
+}
+
+
+// Find the wxWindow at the current mouse position, returning the mouse
+// position.
+wxWindow* wxFindWindowAtPointer(wxPoint& pt)
+{
+ return wxFindWindowAtPoint(wxGetMousePosition());
+}
+
+// Get the current mouse position.
+wxPoint wxGetMousePosition()
+{
+ Display *display = (Display*) wxGetDisplay();
+ Window rootWindow = RootWindowOfScreen (DefaultScreenOfDisplay(display));
+ Window rootReturn, childReturn;
+ int rootX, rootY, winX, winY;
+ unsigned int maskReturn;
+
+ XQueryPointer (display,
+ rootWindow,
+ &rootReturn,
+ &childReturn,
+ &rootX, &rootY, &winX, &winY, &maskReturn);
+ return wxPoint(rootX, rootY);
+}
+
+
// ----------------------------------------------------------------------------
// wxNoOptimize: switch off size optimization
// ----------------------------------------------------------------------------
int wxNoOptimize::ms_count = 0;
-
-
-