X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7dd8b1ea102a9c25be25ef6ef33630afed1dbc7c..47a8a4d5cc3e8fcb2efee4787cb9d244104beea5:/src/cocoa/toplevel.mm diff --git a/src/cocoa/toplevel.mm b/src/cocoa/toplevel.mm index d87628547c..1a5379ff52 100644 --- a/src/cocoa/toplevel.mm +++ b/src/cocoa/toplevel.mm @@ -1,12 +1,12 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: cocoa/toplevel.mm +// Name: src/cocoa/toplevel.mm // Purpose: implements wxTopLevelWindow for Cocoa -// Author: David Elliott +// Author: David Elliott // Modified by: // Created: 2002/11/27 // RCS-ID: $Id$ // Copyright: (c) 2002 David Elliott -// Licence: wxWindows licence +// Licence: wxWidgets licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -19,9 +19,11 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" + +#include "wx/toplevel.h" + #ifndef WX_PRECOMP #include "wx/window.h" - #include "wx/toplevel.h" #include "wx/menuitem.h" #include "wx/frame.h" #include "wx/log.h" @@ -93,7 +95,7 @@ bool wxTopLevelWindowCocoa::Create(wxWindow *parent, wxTopLevelWindows.Append(this); if(!CreateBase(parent,winid,pos,size,style,wxDefaultValidator,name)) - return FALSE; + return false; if ( parent ) parent->AddChild(this); @@ -102,19 +104,30 @@ bool wxTopLevelWindowCocoa::Create(wxWindow *parent, if(style & wxFRAME_TOOL_WINDOW) cocoaStyle |= NSUtilityWindowMask; - wxPoint realpos = pos; - wxSize realsize = size; - // FIXME: this is lame - if(realpos.x==-1) - realpos.x=100; - if(realpos.y==-1) - realpos.y=100; - if(realsize.x==-1) - realsize.x=200; - if(realsize.y==-1) - realsize.y=200; + // Create frame and check and handle default position and size + int realx, + realy; + + // WX has no set default position - the carbon port caps the low + // end at 20, 50. Here we do the same, except instead of setting + // it to 20 and 50, we set it to 100 and 100 if the values are too low + if (pos.x < 20) + realx = 100; + else + realx = pos.x; + + if (pos.y < 50) + realy = 100; + else + realy = pos.y; + + int realw = WidthDefault(size.x); + int realh = HeightDefault(size.y); + // NOTE: y-origin needs to be flipped. - NSRect cocoaRect = [NSWindow contentRectForFrameRect:NSMakeRect(realpos.x,realpos.y,realsize.x,realsize.y) styleMask:cocoaStyle]; + NSRect cocoaRect = [NSWindow + contentRectForFrameRect:NSMakeRect(realx,realy,realw,realh) + styleMask:cocoaStyle]; m_cocoaNSWindow = NULL; m_cocoaNSView = NULL; @@ -132,7 +145,7 @@ bool wxTopLevelWindowCocoa::Create(wxWindow *parent, if(style & wxSTAY_ON_TOP) [m_cocoaNSWindow setLevel:NSFloatingWindowLevel]; [m_cocoaNSWindow setTitle:wxNSStringWithWxString(title)]; - return TRUE; + return true; } wxTopLevelWindowCocoa::~wxTopLevelWindowCocoa() @@ -140,6 +153,8 @@ wxTopLevelWindowCocoa::~wxTopLevelWindowCocoa() wxASSERT(sm_cocoaDeactivateWindow!=this); wxAutoNSAutoreleasePool pool; DestroyChildren(); + if(m_cocoaNSView) + SendDestroyEvent(); SetNSWindow(NULL); } @@ -198,7 +213,7 @@ void wxTopLevelWindowCocoa::CocoaDelegate_windowDidBecomeKey(void) { DeactivatePendingWindow(); wxLogTrace(wxTRACE_COCOA,wxT("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeKey"),this); - wxActivateEvent event(wxEVT_ACTIVATE, TRUE, GetId()); + wxActivateEvent event(wxEVT_ACTIVATE, true, GetId()); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); } @@ -206,7 +221,7 @@ void wxTopLevelWindowCocoa::CocoaDelegate_windowDidBecomeKey(void) void wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignKey(void) { wxLogTrace(wxTRACE_COCOA,wxT("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidResignKey"),this); - wxActivateEvent event(wxEVT_ACTIVATE, FALSE, GetId()); + wxActivateEvent event(wxEVT_ACTIVATE, false, GetId()); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); } @@ -251,7 +266,7 @@ void wxTopLevelWindowCocoa::Maximize(bool maximize) bool wxTopLevelWindowCocoa::IsMaximized() const { - return false ; + return false ; } void wxTopLevelWindowCocoa::Iconize(bool iconize) @@ -260,7 +275,7 @@ void wxTopLevelWindowCocoa::Iconize(bool iconize) bool wxTopLevelWindowCocoa::IsIconized() const { - return FALSE; + return false; } void wxTopLevelWindowCocoa::Restore() @@ -274,7 +289,7 @@ bool wxTopLevelWindowCocoa::Show(bool show) wxAutoNSAutoreleasePool pool; if(show) { - // Send the window a size event because wxWindows apps expect it + // Send the window a size event because wxWidgets apps expect it // NOTE: This should really only be done the first time a window // is shown. I doubt this will cause any problems though. wxSizeEvent event(GetSize(), GetId()); @@ -317,14 +332,24 @@ void wxTopLevelWindowCocoa::OnCloseWindow(wxCloseEvent& event) // wxTopLevelWindowCocoa misc // ---------------------------------------------------------------------------- +void wxTopLevelWindowCocoa::SetTitle(const wxString& title) +{ + [m_cocoaNSWindow setTitle:wxNSStringWithWxString(title)]; +} + +wxString wxTopLevelWindowCocoa::GetTitle() const +{ + return wxStringWithNSString([m_cocoaNSWindow title]); +} + bool wxTopLevelWindowCocoa::ShowFullScreen(bool show, long style) { - return FALSE; + return false; } bool wxTopLevelWindowCocoa::IsFullScreen() const { - return FALSE; + return false; } void wxTopLevelWindowCocoa::CocoaSetWxWindowSize(int width, int height) @@ -345,7 +370,7 @@ void wxTopLevelWindowCocoa::CocoaSetWxWindowSize(int width, int height) void wxTopLevelWindowCocoa::DoMoveWindow(int x, int y, int width, int height) { - wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,"wxTopLevelWindow=%p::DoMoveWindow(%d,%d,%d,%d)",this,x,y,width,height); + wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,wxT("wxTopLevelWindow=%p::DoMoveWindow(%d,%d,%d,%d)"),this,x,y,width,height); NSRect cocoaRect = NSMakeRect(x,y,width,height); [m_cocoaNSWindow setFrame: cocoaRect display:NO]; @@ -358,7 +383,7 @@ void wxTopLevelWindowCocoa::DoGetSize(int *w, int *h) const *w=(int)cocoaRect.size.width; if(h) *h=(int)cocoaRect.size.height; - wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,"wxTopLevelWindow=%p::DoGetSize = (%d,%d)",this,(int)cocoaRect.size.width,(int)cocoaRect.size.height); + wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,wxT("wxTopLevelWindow=%p::DoGetSize = (%d,%d)"),this,(int)cocoaRect.size.width,(int)cocoaRect.size.height); } void wxTopLevelWindowCocoa::DoGetPosition(int *x, int *y) const @@ -368,6 +393,5 @@ void wxTopLevelWindowCocoa::DoGetPosition(int *x, int *y) const *x=(int)cocoaRect.origin.x; if(y) *y=(int)cocoaRect.origin.y; - wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,"wxTopLevelWindow=%p::DoGetPosition = (%d,%d)",this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y); + wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,wxT("wxTopLevelWindow=%p::DoGetPosition = (%d,%d)"),this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y); } -