]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/frame.cpp
drawing optimization fix
[wxWidgets.git] / src / motif / frame.cpp
index 1de5a6a5cdb9f32e4530c83b8a816688fcb3cf94..c95fc09b97353c153d3e030a58e63afa943d7cd5 100644 (file)
@@ -287,6 +287,8 @@ wxFrame::~wxFrame()
 
   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);
@@ -477,15 +479,20 @@ void wxFrame::SetSize(int x, int y, int width, int height, int sizeFlags)
   if (!(height == -1 && width == -1))
   {
     PreResize();
+ /* JACS: not sure if this is necessary
     wxSizeEvent sizeEvent(wxSize(width, height), GetId());
     sizeEvent.SetEventObject(this);
 
     GetEventHandler()->ProcessEvent(sizeEvent);
+  */
   }
 }
 
 bool wxFrame::Show(bool show)
 {
+  if (!m_frameShell)
+    return wxWindow::Show(show);
+
   m_visibleStatus = show; /* show-&-hide fix */
 
   m_isShown = show;
@@ -504,7 +511,8 @@ void wxFrame::Iconize(bool iconize)
   if (!iconize)
     Show(TRUE);
 
-  XtVaSetValues((Widget) m_frameShell, XmNiconic, (Boolean)iconize, NULL);
+  if (m_frameShell)
+    XtVaSetValues((Widget) m_frameShell, XmNiconic, (Boolean)iconize, NULL);
 }
 
 // Equivalent to maximize/restore in Windows
@@ -512,12 +520,15 @@ void wxFrame::Maximize(bool maximize)
 {
   Show(TRUE);
 
-  if (maximize)
+  if (maximize && m_frameShell)
     XtVaSetValues((Widget) m_frameShell, XmNiconic, FALSE, NULL);
 }
 
 bool wxFrame::IsIconized() const
 {
+  if (!m_frameShell)
+    return FALSE;
+
   Boolean iconic;
   XtVaGetValues((Widget) m_frameShell, XmNiconic, &iconic, NULL);
   return iconic;
@@ -541,13 +552,13 @@ void wxFrame::SetIcon(const wxIcon& icon)
 {
   m_icon = icon;
 
-  // TODO
-  /*
+  if (!m_frameShell)
+    return;
+
   if (!icon.Ok() || !icon.GetPixmap())
     return;
 
-  XtVaSetValues((Widget) m_frameShell, XtNiconPixmap, icon->.GetPixmap(), NULL);
-  */
+  XtVaSetValues((Widget) m_frameShell, XtNiconPixmap, icon.GetPixmap(), NULL);
 }
 
 wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, wxWindowID id,
@@ -638,32 +649,16 @@ void wxFrame::SetMenuBar(wxMenuBar *menuBar)
     }
 
     // Currently can't set it twice
-    wxASSERT_MSG( (m_frameMenuBar == (wxMenuBar*) NULL), "Cannot set the menubar more than once");
-  
-    m_frameMenuBar = menuBar;
-
-  Widget menuBarW = XmCreateMenuBar ((Widget) m_frameWidget, "MenuBar", NULL, 0);
-  m_frameMenuBar->SetMainWidget( (WXWidget) menuBarW);
+//    wxASSERT_MSG( (m_frameMenuBar == (wxMenuBar*) NULL), "Cannot set the menubar more than once");
 
-  int i;
-  for (i = 0; i < menuBar->GetMenuCount(); i++)
+    if (m_frameMenuBar)
     {
-      wxMenu *menu = menuBar->GetMenu(i);
-      wxString title(menuBar->m_titles[i]);
-      menu->SetButtonWidget(menu->CreateMenu (menuBar, menuBarW, menu, title, TRUE));
-
-      /*
-       * COMMENT THIS OUT IF YOU DON'T LIKE A RIGHT-JUSTIFIED HELP MENU
-       */
-      wxStripMenuCodes ((char*) (const char*) title, wxBuffer);
-
-      if (strcmp (wxBuffer, "Help") == 0)
-       XtVaSetValues ((Widget) menuBarW, XmNmenuHelpWidget, (Widget) menu->GetButtonWidget(), NULL);
+        m_frameMenuBar->DestroyMenuBar();
+        delete m_frameMenuBar;
     }
 
-  XtRealizeWidget ((Widget) menuBarW);
-  XtManageChild ((Widget) menuBarW);
-  menuBar->SetMenuBarFrame(this);
+    m_frameMenuBar = menuBar;
+    m_frameMenuBar->CreateMenuBar(this);
 }
 
 void wxFrame::Fit()
@@ -763,9 +758,6 @@ void wxFrame::OnActivate(wxActivateEvent& event)
     if (!child->IsKindOf(CLASSINFO(wxFrame)) &&
          !child->IsKindOf(CLASSINFO(wxDialog)))
     {
-#if WXDEBUG > 1
-      wxDebugMsg("wxFrame::OnActivate: about to set the child's focus.\n");
-#endif
       child->SetFocus();
       return;
     }
@@ -1074,12 +1066,14 @@ void wxFrame::ChangeFont(bool keepOriginalSize)
 
 void wxFrame::ChangeBackgroundColour()
 {
-    // TODO
+    if (GetClientWidget())
+        DoChangeBackgroundColour(GetClientWidget(), m_backgroundColour);
 }
 
 void wxFrame::ChangeForegroundColour()
 {
-    // TODO
+    if (GetClientWidget())
+        DoChangeForegroundColour(GetClientWidget(), m_foregroundColour);
 }
 
 void wxCloseFrameCallback(Widget widget, XtPointer client_data, XmAnyCallbackStruct *cbs)