X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0fe0275981e662b56d9df1e5847932326f04cf0b..12ff82219926e8b513ec1424891e7e12ffbecf78:/src/cocoa/window.mm diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm index a1e06db23e..630b14bd65 100644 --- a/src/cocoa/window.mm +++ b/src/cocoa/window.mm @@ -12,10 +12,12 @@ #include "wx/wxprec.h" #ifndef WX_PRECOMP #include "wx/log.h" + #include "wx/tooltip.h" #include "wx/window.h" #endif //WX_PRECOMP #include "wx/cocoa/autorelease.h" +#include "wx/cocoa/string.h" #import #import @@ -118,6 +120,7 @@ void wxWindowCocoaHider::Cocoa_FrameChanged(void) [m_owner->GetNSViewForHiding() setFrame:[m_dummyNSView frame]]; } + #ifdef WXCOCOA_FILL_DUMMY_VIEW bool wxWindowCocoaHider::Cocoa_drawRect(const NSRect& rect) { @@ -354,10 +357,9 @@ bool wxWindowCocoa::Cocoa_drawRect(const NSRect &rect) int countRects = 1; // Try replacing the larger rectangle with a list of smaller ones: NS_DURING - // This only works on Panther -// [GetNSView() getRectsBeingDrawn:&rects count:&countRects]; - // This compiles everywhere (and still only works on Panther) - objc_msgSend(GetNSView(),@selector(getRectsBeingDrawn:count:),&rects,&countRects); + //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 m_updateRegion = wxRegion(rects,countRects); @@ -479,6 +481,16 @@ void wxWindowCocoa::Cocoa_FrameChanged(void) GetEventHandler()->ProcessEvent(event); } +bool wxWindowCocoa::Cocoa_resetCursorRects() +{ + if(!m_cursor.GetNSCursor()) + return false; + + [GetNSView() addCursorRect: [GetNSView() visibleRect] cursor: m_cursor.GetNSCursor()]; + + return true; +} + bool wxWindow::Close(bool force) { // The only reason this function exists is that it is virtual and @@ -598,6 +610,20 @@ void wxWindowCocoa::DoSetSize(int x, int y, int width, int height, int sizeFlags DoMoveWindow(x,y,width,height); } +#if wxUSE_TOOLTIPS + +void wxWindowCocoa::DoSetToolTip( wxToolTip *tip ) +{ + wxWindowBase::DoSetToolTip(tip); + + if ( m_tooltip ) + { + m_tooltip->SetWindow((wxWindow *)this); + } +} + +#endif + void wxWindowCocoa::DoMoveWindow(int x, int y, int width, int height) { wxAutoNSAutoreleasePool pool; @@ -669,6 +695,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]; @@ -676,7 +707,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() @@ -857,8 +895,12 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y) // Get the window with the focus wxWindow *wxWindowBase::DoFindFocus() { - // TODO - return NULL; + wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa([NSView focusView]); + + if (!win) + return NULL; + + return win->GetWxWindow(); } /* static */ wxWindow *wxWindowBase::GetCapture()