#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 <Xm/Xm.h>
#include <X11/Shell.h>
+#include <X11/Core.h>
#if XmVersion >= 1002
#include <Xm/XmAll.h>
#else
#endif
#include "wx/motif/private.h"
+#include "wx/unix/utilsx11.h"
// ----------------------------------------------------------------------------
// 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);
const wxString& name)
{
if ( parent )
- AddChild(this);
+ parent->AddChild(this);
else
wxTopLevelWindows.Append(this);
m_windowStyle = style;
- m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE);
+ m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
m_foregroundColour = *wxBLACK;
- m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
+ m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
if ( id > -1 )
m_windowId = id;
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;
decor |= MWM_DECOR_TITLE;
if (style & wxTHICK_FRAME)
decor |= MWM_DECOR_BORDER;
- if (style & wxTHICK_FRAME)
- decor |= MWM_DECOR_BORDER;
if (style & wxMINIMIZE_BOX)
decor |= MWM_DECOR_MINIMIZE;
if (style & wxMAXIMIZE_BOX)
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);
NULL);
}
-void wxFrame::SetIcon(const wxIcon& icon)
+void wxFrame::DoSetIcon(const wxIcon& icon)
{
- m_icon = icon;
-
if (!m_frameShell)
return;
XtVaSetValues((Widget) m_frameShell, XtNiconPixmap, icon.GetPixmap(), NULL);
}
+void wxFrame::SetIcon(const wxIcon& icon)
+{
+ SetIcons( wxIconBundle( icon ) );
+}
+
+void wxFrame::SetIcons(const wxIconBundle& icons)
+{
+ wxFrameBase::SetIcons( icons );
+
+ if (!m_frameShell)
+ return;
+
+ DoSetIcon( m_icons.GetIcon( -1 ) );
+ wxSetIconsX11(GetXDisplay(),
+ (WXWindow) XtWindow( (Widget) m_frameShell ), icons);
+}
+
void wxFrame::PositionStatusBar()
{
if (!m_frameStatusBar)
// Responds to colour changes, and passes event on to children.
void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event)
{
- SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE));
+ SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE));
Refresh();
if ( m_frameStatusBar )
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;
+}