]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/frame.cpp
[#1577388] - fix for scaling in wxImage.
[wxWidgets.git] / src / motif / frame.cpp
index 7b325f41da6f8e4c12d93e87c6500e3d0318187c..e734afa91021740aead0fb02b10cd80aa7c820a3 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        motif/frame.cpp
+// Name:        src/motif/frame.cpp
 // Purpose:     wxFrame
 // Author:      Julian Smart
 // Modified by:
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "frame.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #endif
 
 #include "wx/frame.h"
-#include "wx/statusbr.h"
-#include "wx/toolbar.h"
-#include "wx/menu.h"
-#include "wx/settings.h"
-#include "wx/utils.h"
-#include "wx/log.h"
-#include "wx/app.h"
-#include "wx/icon.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/log.h"
+    #include "wx/app.h"
+    #include "wx/utils.h"
+    #include "wx/menu.h"
+    #include "wx/icon.h"
+    #include "wx/settings.h"
+    #include "wx/toolbar.h"
+    #include "wx/statusbr.h"
+#endif
 
 #ifdef __VMS__
     #pragma message disable nosimpint
@@ -88,7 +87,6 @@ static void wxFrameMapProc(Widget frameShell, XtPointer clientData,
 // ----------------------------------------------------------------------------
 
 extern wxList wxModelessWindows;
-extern wxList wxPendingDelete;
 
 // ----------------------------------------------------------------------------
 // wxWin macros
@@ -111,13 +109,13 @@ IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow)
 
 void wxFrame::Init()
 {
-    m_iconized = FALSE;
+    m_iconized = false;
 
     //// Motif-specific
     m_frameShell = (WXWidget) NULL;
-    m_mainWidget = (WXWidget) NULL;;
-    m_workArea = (WXWidget) NULL;;
-    m_clientArea = (WXWidget) NULL;;
+    m_mainWidget = (WXWidget) NULL;
+    m_workArea = (WXWidget) NULL;
+    m_clientArea = (WXWidget) NULL;
 }
 
 bool wxFrame::Create(wxWindow *parent,
@@ -130,9 +128,9 @@ bool wxFrame::Create(wxWindow *parent,
 {
     if( !wxTopLevelWindow::Create( parent, id, title, pos, size, style,
                                    name ) )
-        return FALSE;
+        return false;
 
-    m_backgroundColour = 
+    m_backgroundColour =
         wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
     m_foregroundColour = *wxBLACK;
     m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
@@ -170,7 +168,7 @@ bool wxFrame::Create(wxWindow *parent,
                "Created frame (0x%p) with work area 0x%p and client "
                "area 0x%p", m_mainWidget, m_workArea, m_clientArea);
 
-    XtAddEventHandler((Widget) m_clientArea, ExposureMask,FALSE,
+    XtAddEventHandler((Widget) m_clientArea, ExposureMask,False,
         wxUniversalRepaintProc, (XtPointer) this);
 
     if (x > -1)
@@ -182,26 +180,28 @@ bool wxFrame::Create(wxWindow *parent,
     if (height > -1)
         XtVaSetValues((Widget) m_frameShell, XmNheight, height, NULL);
 
-    ChangeFont(FALSE);
+    ChangeFont(false);
 
     ChangeBackgroundColour();
 
     PreResize();
 
-    wxSizeEvent sizeEvent(wxSize(width, height), GetId());
+    wxSize newSize(width, height);
+    wxSizeEvent sizeEvent(newSize, GetId());
     sizeEvent.SetEventObject(this);
 
     GetEventHandler()->ProcessEvent(sizeEvent);
 
-    return TRUE;
+    return true;
 }
 
-bool wxFrame::DoCreate( wxWindow* parent, wxWindowID id,
-                        const wxString& title,
-                        const wxPoint& pos,
-                        const wxSize& size,
-                        long style,
-                        const wxString& name )
+bool wxFrame::XmDoCreateTLW(wxWindow* WXUNUSED(parent),
+                            wxWindowID WXUNUSED(id),
+                            const wxString& WXUNUSED(title),
+                            const wxPoint& WXUNUSED(pos),
+                            const wxSize& WXUNUSED(size),
+                            long style,
+                            const wxString& name)
 {
     Widget frameShell;
 
@@ -214,7 +214,7 @@ bool wxFrame::DoCreate( wxWindow* parent, wxWindowID id,
         XmNallowShellResize, True,
         XmNdeleteResponse, XmDO_NOTHING,
         XmNmappedWhenManaged, False,
-        XmNiconic, (style & wxICONIZE) ? TRUE : FALSE,
+        XmNiconic, (style & wxICONIZE) ? True : False,
         NULL);
 
     m_frameShell = (WXWidget)frameShell;
@@ -262,30 +262,25 @@ bool wxFrame::DoCreate( wxWindow* parent, wxWindowID id,
 
     wxModelessWindows.Append( this );
 
-    return TRUE;
+    return true;
 }
 
 wxFrame::~wxFrame()
 {
-    m_isBeingDeleted = TRUE;
+    m_isBeingDeleted = true;
 
     if (m_clientArea)
     {
-      XtRemoveEventHandler((Widget) m_clientArea, ExposureMask, FALSE,
+      XtRemoveEventHandler((Widget) m_clientArea, ExposureMask, False,
           wxUniversalRepaintProc, (XtPointer) this);
     }
 
     if (GetMainWidget())
-        Show(FALSE);
+        Show(false);
 
     if (m_frameMenuBar)
     {
         m_frameMenuBar->DestroyMenuBar();
-
-        // Hack to stop core dump on Ultrix, OSF, for some strange reason.
-#if MOTIF_MENUBAR_DELETE_FIX
-        GetMenuBar()->SetMainWidget((WXWidget) NULL);
-#endif
         delete m_frameMenuBar;
         m_frameMenuBar = NULL;
     }
@@ -297,11 +292,7 @@ wxFrame::~wxFrame()
     }
 
     PreDestroy();
-    DoDestroy();
-}
 
-void wxFrame::DoDestroy()
-{
     Widget frameShell = (Widget)GetShellWidget();
 
     if( frameShell )
@@ -342,7 +333,7 @@ void wxFrame::DoGetClientSize(int *x, int *y) const
     {
         int sbw, sbh;
         m_frameStatusBar->GetSize(& sbw, & sbh);
-        yy -= sbh;
+        yy = (Dimension)(yy - sbh);
     }
 #if wxUSE_TOOLBAR
     if (m_frameToolBar)
@@ -350,21 +341,21 @@ void wxFrame::DoGetClientSize(int *x, int *y) const
         int tbw, tbh;
         m_frameToolBar->GetSize(& tbw, & tbh);
         if (m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL)
-            xx -= tbw;
+            xx = (Dimension)(xx - tbw);
         else
-            yy -= tbh;
+            yy = (Dimension)(yy - tbh);
     }
 #endif // wxUSE_TOOLBAR
 
 //CE found a call here with NULL y pointer
     if (x)
-        *x = xx; 
+        *x = xx;
     if (y)
         *y = yy;
 }
 
 // Set the client size (i.e. leave the calculation of borders etc.
-// to wxWindows)
+// to wxWidgets)
 void wxFrame::DoSetClientSize(int width, int height)
 {
     // Calculate how large the new main window should be
@@ -397,7 +388,8 @@ void wxFrame::DoSetClientSize(int width, int height)
     }
     PreResize();
 
-    wxSizeEvent sizeEvent(wxSize(width, height), GetId());
+    wxSize newSize(width, height);
+    wxSizeEvent sizeEvent(newSize, GetId());
     sizeEvent.SetEventObject(this);
 
     GetEventHandler()->ProcessEvent(sizeEvent);
@@ -430,8 +422,8 @@ void wxFrame::DoSetSize(int x, int y, int width, int height, int WXUNUSED(sizeFl
 
 bool wxFrame::Show( bool show )
 {
-    if( !wxTopLevelWindowMotif::Show( show ) )
-        return FALSE;
+    if( !wxWindowBase::Show( show ) )
+        return false;
 
     m_isShown = show;
 
@@ -442,15 +434,14 @@ bool wxFrame::Show( bool show )
     SetVisibleStatus(show);
     if (show)
     {
-        XtMapWidget (shell);
-        XRaiseWindow (XtDisplay(shell), XtWindow(shell));
+        XtPopup(shell, XtGrabNone);
     }
     else
     {
-        XtUnmapWidget(shell);
+        XtPopdown(shell);
     }
 
-    return TRUE;
+    return true;
 }
 
 void wxFrame::SetTitle(const wxString& title)
@@ -646,7 +637,7 @@ bool wxFrame::PreResize()
     PositionStatusBar();
 #endif // wxUSE_STATUSBAR
 
-    return TRUE;
+    return true;
 }
 
 WXWidget wxFrame::GetClientWidget() const