#include "wx/dcclient.h"
#include "wx/nonownedwnd.h"
#include "wx/log.h"
+ #include "wx/textctrl.h"
#endif
#ifdef __WXMAC__
#include "wx/dnd.h"
#endif
+#if wxUSE_TOOLTIPS
+ #include "wx/tooltip.h"
+#endif
+
#include <objc/objc-runtime.h>
// Get the window with the focus
NSView* view = nil;
if ( [responder isKindOfClass:[NSTextView class]] )
{
- NSView* delegate = [(NSTextView*)responder delegate];
+ NSView* delegate = (NSView*) [(NSTextView*)responder delegate];
if ( [delegate isKindOfClass:[NSTextField class] ] )
view = delegate;
else
wxString chars;
if ( eventType != NSFlagsChanged )
{
- NSString* nschars = (wxevent.GetEventType() != wxEVT_CHAR) ? [nsEvent charactersIgnoringModifiers] : [nsEvent characters];
+ NSString* nschars = [nsEvent charactersIgnoringModifiers];
if ( charString )
{
// if charString is set, it did not come from key up / key down
UInt32 g_lastButton = 0 ;
bool g_lastButtonWasFakeRight = false ;
+// better scroll wheel support
+// see http://lists.apple.com/archives/cocoa-dev/2007/Feb/msg00050.html
+
+@interface NSEvent (DeviceDelta)
+- (float)deviceDeltaX;
+- (float)deviceDeltaY;
+@end
+
void wxWidgetCocoaImpl::SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEvent )
{
int eventType = [nsEvent type];
case NSScrollWheel :
{
+ float deltaX = 0.0;
+ float deltaY = 0.0;
+
wxevent.SetEventType( wxEVT_MOUSEWHEEL ) ;
+
+ // see http://developer.apple.com/qa/qa2005/qa1453.html
+ // for more details on why we have to look for the exact type
+
+ const EventRef cEvent = (EventRef) [nsEvent eventRef];
+ bool isMouseScrollEvent = false;
+ if ( cEvent )
+ isMouseScrollEvent = ::GetEventKind(cEvent) == kEventMouseScroll;
+
+ if ( isMouseScrollEvent )
+ {
+ deltaX = [nsEvent deviceDeltaX];
+ deltaY = [nsEvent deviceDeltaY];
+ }
+ else
+ {
+ deltaX = ([nsEvent deltaX] * 10);
+ deltaY = ([nsEvent deltaY] * 10);
+ }
+
wxevent.m_wheelDelta = 10;
wxevent.m_linesPerAction = 1;
-
- if ( fabs([nsEvent deltaX]) > fabs([nsEvent deltaY]) )
+
+ if ( fabs(deltaX) > fabs(deltaY) )
{
wxevent.m_wheelAxis = 1;
- wxevent.m_wheelRotation = (int)([nsEvent deltaX] * 10);
+ wxevent.m_wheelRotation = (int)deltaX;
}
else
{
- wxevent.m_wheelRotation = (int)([nsEvent deltaY] * 10);
+ wxevent.m_wheelRotation = (int)deltaY;
}
+
}
break ;
result = wxDragCopy;
else if ( sourceDragMask & NSDragOperationMove )
result = wxDragMove;
-
+
PasteboardRef pboardRef;
PasteboardCreate((CFStringRef)[pboard name], &pboardRef);
target->SetCurrentDragPasteboard(pboardRef);
{
}
+void wxWidgetCocoaImpl::controlTextDidChange()
+{
+ wxWindow* wxpeer = (wxWindow*)GetWXPeer();
+ if ( wxpeer )
+ {
+ wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, wxpeer->GetId());
+ event.SetEventObject( wxpeer );
+ event.SetString( static_cast<wxTextCtrl*>(wxpeer)->GetValue() );
+ wxpeer->HandleWindowEvent( event );
+ }
+}
+
//
#if OBJC_API_VERSION >= 2
[m_osxView setFont: font.OSXGetNSFont()];
}
+void wxWidgetCocoaImpl::SetToolTip(wxToolTip* tooltip)
+{
+ if (tooltip)
+ {
+ wxCFStringRef cf( tooltip->GetTip() , m_wxPeer->GetFont().GetEncoding() );
+ [m_osxView setToolTip: cf.AsNSString()];
+ }
+ else
+ [m_osxView setToolTip: nil];
+
+}
+
void wxWidgetCocoaImpl::InstallEventHandler( WXWidget control )
{
WXWidget c = control ? control : (WXWidget) m_osxView;