X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5558135c4894ec39d39d46a3586df2bb0e89da09..2461cfa0d9b786a26a783237bca38c920efecb51:/src/cocoa/window.mm diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm index 666f6ba6a4..1e4fd289db 100644 --- a/src/cocoa/window.mm +++ b/src/cocoa/window.mm @@ -12,9 +12,9 @@ #include "wx/wxprec.h" #ifndef WX_PRECOMP #include "wx/log.h" - #include "wx/tooltip.h" #include "wx/window.h" #endif //WX_PRECOMP +#include "wx/tooltip.h" #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" @@ -25,9 +25,6 @@ #import #import #import -#import - -#include // Turn this on to paint green over the dummy views for debugging #undef WXCOCOA_FILL_DUMMY_VIEW @@ -36,6 +33,11 @@ #import #endif //def WXCOCOA_FILL_DUMMY_VIEW +// A category for methods that are only present in Panther's SDK +@interface NSView(wxNSViewPrePantherCompatibility) +- (void)getRectsBeingDrawn:(const NSRect **)rects count:(int *)count; +@end + // ======================================================================== // wxWindowCocoaHider // ======================================================================== @@ -357,12 +359,8 @@ bool wxWindowCocoa::Cocoa_drawRect(const NSRect &rect) const NSRect *rects = ▭ // The bounding box of the region int countRects = 1; // Try replacing the larger rectangle with a list of smaller ones: -NS_DURING - //getRectsBeingDrawn:count: is a optimization that is only available on - //Panthar (10.3) and higher. Check to see if it supports it - - if ( [GetNSView() respondsToSelector:@selector(getRectsBeingDrawn:count:)] ) objc_msgSend(GetNSView(),@selector(getRectsBeingDrawn:count:),&rects,&countRects); -NS_HANDLER -NS_ENDHANDLER + if ([GetNSView() respondsToSelector:@selector(getRectsBeingDrawn:count:)]) + [GetNSView() getRectsBeingDrawn:&rects count:&countRects]; m_updateRegion = wxRegion(rects,countRects); wxPaintEvent event(m_windowId); @@ -611,22 +609,20 @@ void wxWindowCocoa::DoSetSize(int x, int y, int width, int height, int sizeFlags DoMoveWindow(x,y,width,height); } -//We should really get rid of wxToolTip :) -IMPLEMENT_ABSTRACT_CLASS(wxToolTip, wxObject) +#if wxUSE_TOOLTIPS void wxWindowCocoa::DoSetToolTip( wxToolTip *tip ) { wxWindowBase::DoSetToolTip(tip); - wxAutoNSAutoreleasePool pool; - if ( m_tooltip ) { m_tooltip->SetWindow((wxWindow *)this); - [GetNSView() setToolTip:wxNSStringWithWxString(m_tooltip->GetTip())]; } } +#endif + void wxWindowCocoa::DoMoveWindow(int x, int y, int width, int height) { wxAutoNSAutoreleasePool pool; @@ -698,6 +694,11 @@ WXWidget wxWindow::GetHandle() const return m_cocoaNSView; } +wxWindow* wxWindow::GetWxWindow() const +{ + return (wxWindow*) this; +} + void wxWindow::Refresh(bool eraseBack, const wxRect *rect) { [m_cocoaNSView setNeedsDisplay:YES]; @@ -705,7 +706,14 @@ void wxWindow::Refresh(bool eraseBack, const wxRect *rect) void wxWindow::SetFocus() { - // TODO +#ifdef __WXDEBUG__ + bool bOK = +#endif + [GetNSView() lockFocusIfCanDraw]; + + //Note that the normal lockFocus works on hidden and minimized windows + //and has no return value - which probably isn't what we want + wxASSERT(bOK); } void wxWindow::DoCaptureMouse() @@ -884,10 +892,14 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y) } // Get the window with the focus -wxWindow *wxWindowBase::FindFocus() +wxWindow *wxWindowBase::DoFindFocus() { - // TODO - return NULL; + wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa([NSView focusView]); + + if (!win) + return NULL; + + return win->GetWxWindow(); } /* static */ wxWindow *wxWindowBase::GetCapture()