#pragma implementation "frame.h"
#endif
-#include "wx/frame.h"
+
+#ifdef __VMS
+#define XtDisplay XTDISPLAY
+#define XtWindow XTWINDOW
+#define XtScreen XTSCREEN
+#endif
+
+# include "wx/frame.h"
#include "wx/statusbr.h"
#include "wx/toolbar.h"
#include "wx/menuitem.h"
#include "wx/settings.h"
#include "wx/app.h"
#include "wx/utils.h"
+#include "wx/log.h"
#ifdef __VMS__
#pragma message disable nosimpint
// private functions
// ----------------------------------------------------------------------------
+static void wxFrameEventHandler(Widget wid,
+ XtPointer WXUNUSED(client_data),
+ XEvent* event,
+ Boolean* continueToDispatch);
static void wxCloseFrameCallback(Widget, XtPointer, XmAnyCallbackStruct *cbs);
static void wxFrameFocusProc(Widget workArea, XtPointer clientData,
XmAnyCallbackStruct *cbs);
// wxWin macros
// ----------------------------------------------------------------------------
-#if !USE_SHARED_LIBRARY
BEGIN_EVENT_TABLE(wxFrame, wxFrameBase)
EVT_ACTIVATE(wxFrame::OnActivate)
EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged)
END_EVENT_TABLE()
IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
-#endif
// ============================================================================
// implementation
const wxString& name)
{
if ( parent )
- AddChild(this);
+ parent->AddChild(this);
else
wxTopLevelWindows.Append(this);
XtAddEventHandler((Widget) m_clientArea, ExposureMask,FALSE,
wxUniversalRepaintProc, (XtPointer) this);
+ XtAddEventHandler((Widget) m_clientArea,
+ ButtonPressMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask,
+ FALSE,
+ wxFrameEventHandler,
+ (XtPointer)this);
+
XtVaSetValues((Widget) m_frameWidget,
XmNworkWindow, (Widget) m_workArea,
NULL);
XtManageChild((Widget) m_workArea);
wxAddWindowToTable((Widget) m_workArea, this);
+ wxAddWindowToTable((Widget) m_clientArea, this);
XtTranslations ptr;
m_isBeingDeleted = TRUE;
if (m_clientArea)
+ {
XtRemoveEventHandler((Widget) m_clientArea, ExposureMask, FALSE,
wxUniversalRepaintProc, (XtPointer) this);
+ XtRemoveEventHandler((Widget) m_clientArea, ButtonPressMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask,
+ FALSE,
+ wxFrameEventHandler, (XtPointer) this);
+ wxDeleteWindowFromTable((Widget) m_clientArea);
+ }
if (GetMainWidget())
Show(FALSE);
frame->GetEventHandler()->ProcessEvent(closeEvent);
}
+static void wxFrameEventHandler(Widget wid,
+ XtPointer WXUNUSED(client_data),
+ XEvent* event,
+ Boolean* continueToDispatch)
+{
+ wxFrame *frame = (wxFrame *)wxGetWindowFromTable(wid);
+ if (frame)
+ {
+ wxMouseEvent wxevent(wxEVT_NULL);
+ if (wxTranslateMouseEvent(wxevent, frame, wid, event))
+ {
+ wxevent.SetEventObject(frame);
+ wxevent.SetId(frame->GetId());
+ frame->GetEventHandler()->ProcessEvent(wxevent);
+ }
+ else
+ {
+ // An attempt to implement OnCharHook by calling OnCharHook first;
+ // if this returns TRUE, set continueToDispatch to False
+ // (don't continue processing).
+ // Otherwise set it to True and call OnChar.
+ wxKeyEvent keyEvent(wxEVT_CHAR);
+ if (wxTranslateKeyEvent(keyEvent, frame, wid, event))
+ {
+ keyEvent.SetEventObject(frame);
+ keyEvent.SetId(frame->GetId());
+ keyEvent.SetEventType(wxEVT_CHAR_HOOK);
+ if (frame->GetEventHandler()->ProcessEvent(keyEvent))
+ {
+ *continueToDispatch = False;
+ return;
+ }
+ else
+ {
+ // For simplicity, OnKeyDown is the same as OnChar
+ // TODO: filter modifier key presses from OnChar
+ keyEvent.SetEventType(wxEVT_KEY_DOWN);
+
+ // Only process OnChar if OnKeyDown didn't swallow it
+ if (!frame->GetEventHandler()->ProcessEvent (keyEvent))
+ {
+ keyEvent.SetEventType(wxEVT_CHAR);
+ frame->GetEventHandler()->ProcessEvent(keyEvent);
+ }
+ }
+ }
+ }
+ }
+ *continueToDispatch = True;
+}