From 64ffd414d6bbe05be33e7a6a1cf6028d5d883be6 Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Wed, 28 Jan 2015 17:05:29 +0000 Subject: Stop using dynamic_cast when performing text drag (Mac OS only). git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10536 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- FL/mac.H | 1 + src/Fl_Input.cxx | 7 ++++++- src/Fl_Text_Display.cxx | 4 ++++ src/Fl_cocoa.mm | 9 +++++++-- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/FL/mac.H b/FL/mac.H index 1bfd77a47..9a5e193a5 100644 --- a/FL/mac.H +++ b/FL/mac.H @@ -186,6 +186,7 @@ public: static int insertion_point_location(int *px, int *py, int *pheight); // computes window coordinates & height of insertion point static const int CoreText_threshold; // Mac OS version from which the Core Text API is used to display text static Fl_Fontdesc* calc_fl_fonts(void); // computes the fl_fonts global variable + static int dnd(int use_selection); // call Fl_X::dnd(1) to support text dragging private: #if FLTK_ABI_VERSION >= 10304 CGRect* subRect_; // makes sure subwindow remains inside its parent window diff --git a/src/Fl_Input.cxx b/src/Fl_Input.cxx index 9dcc0eed8..a7232117e 100644 --- a/src/Fl_Input.cxx +++ b/src/Fl_Input.cxx @@ -678,7 +678,12 @@ int Fl_Input::handle(int event) { dnd_save_mark = mark(); dnd_save_focus = this; // drag the data: - copy(0); Fl::dnd(); + copy(0); +#ifdef __APPLE__ + Fl_X::dnd(1); +#else + Fl::dnd(); +#endif return 1; } } diff --git a/src/Fl_Text_Display.cxx b/src/Fl_Text_Display.cxx index 613481da0..7159a036d 100644 --- a/src/Fl_Text_Display.cxx +++ b/src/Fl_Text_Display.cxx @@ -3863,7 +3863,11 @@ int Fl_Text_Display::handle(int event) { if (dragType==DRAG_START_DND) { if (!Fl::event_is_click() && Fl::dnd_text_ops()) { const char* copy = buffer()->selection_text(); +#ifdef __APPLE__ + Fl_X::dnd(1); +#else Fl::dnd(); +#endif free((void*)copy); } return 1; diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 495806c97..0c1736a86 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -4001,7 +4001,12 @@ static NSImage *defaultDragImage(int *pwidth, int *pheight) return image; } -int Fl::dnd(void) +int Fl::dnd() +{ + return Fl_X::dnd(0); +} + +int Fl_X::dnd(int use_selection) { CFDataRef text = CFDataCreate(kCFAllocatorDefault, (UInt8*)fl_selection_buffer[0], fl_selection_length[0]); if (text==NULL) return false; @@ -4018,7 +4023,7 @@ int Fl::dnd(void) int width, height; NSImage *image; - if ( dynamic_cast(w) != NULL || dynamic_cast(w) != NULL) { + if (use_selection) { fl_selection_buffer[0][ fl_selection_length[0] ] = 0; image = imageFromText(fl_selection_buffer[0], &width, &height); } else { -- cgit v1.2.3