summaryrefslogtreecommitdiff
path: root/src/Fl_cutpaste_mac.cxx
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2001-11-27 17:44:08 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2001-11-27 17:44:08 +0000
commit2b85bf81680e2243ef5a5daf85d9eb04321c7278 (patch)
treedc7d3e1cdbd44ed10b358412098b73d24b64d143 /src/Fl_cutpaste_mac.cxx
parent4dc5732a3e0f376786d1d6b788e5cf601439e890 (diff)
Preliminary commit of my MacOS X work.
**** THIS CODE COMPILES BUT DOES NOT WORK. **** TODO: fix event handling - getting blank windows, etc. TODO: re-port OpenGL code. TODO: add support for images with alpha. TODO: add support for more then just beeps in fl_beep(). TODO: other stuff I'm sure... git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1765 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_cutpaste_mac.cxx')
-rw-r--r--src/Fl_cutpaste_mac.cxx148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/Fl_cutpaste_mac.cxx b/src/Fl_cutpaste_mac.cxx
new file mode 100644
index 000000000..98c7be24e
--- /dev/null
+++ b/src/Fl_cutpaste_mac.cxx
@@ -0,0 +1,148 @@
+//
+// "$Id: Fl_cutpaste_mac.cxx,v 1.1.2.1 2001/11/27 17:44:06 easysw Exp $"
+//
+// MacOS cut/paste code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2001 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+// Implementation of cut and paste for MacOS.
+
+#include <FL/Fl.H>
+#include <FL/mac.H>
+#include <FL/Fl_Window.H>
+#include <string.h>
+/*
+static char *selection_buffer;
+static int selection_length;
+static int selection_buffer_length;
+static char beenhere;
+
+extern Fl_Widget *fl_selection_requestor; // widget doing request_paste()
+
+static int selection_xevent_handler(int) {
+
+ switch (fl_xevent->type) {
+
+ case SelectionNotify: {
+ if (!fl_selection_requestor) return 0;
+ static char *pastebuffer;
+ if (pastebuffer) {XFree(pastebuffer); pastebuffer = 0;}
+ if (fl_xevent->xselection.property != 0) {
+ Atom a; int f; unsigned long n,b;
+ if (!XGetWindowProperty(fl_display,
+ fl_xevent->xselection.requestor,
+ fl_xevent->xselection.property,
+ 0,100000,1,0,&a,&f,&n,&b,
+ (unsigned char**)&pastebuffer)) {
+ Fl::e_text = pastebuffer;
+ Fl::e_length = int(n);
+ fl_selection_requestor->handle(FL_PASTE);
+ }
+ }}
+ return 1;
+
+ case SelectionClear:
+ Fl::selection_owner(0);
+ return 1;
+
+ case SelectionRequest: {
+ XSelectionEvent e;
+ e.type = SelectionNotify;
+ e.display = fl_display;
+ e.requestor = fl_xevent->xselectionrequest.requestor;
+ e.selection = fl_xevent->xselectionrequest.selection;
+ e.target = fl_xevent->xselectionrequest.target;
+ e.time = fl_xevent->xselectionrequest.time;
+ if (fl_xevent->xselectionrequest.target != XA_STRING || !selection_length) {
+ e.property = 0;
+ } else {
+ e.property = fl_xevent->xselectionrequest.property;
+ }
+ if (e.property) {
+ XChangeProperty(fl_display, e.requestor, e.property,
+ XA_STRING, 8, 0, (unsigned char *)selection_buffer,
+ selection_length);
+ }
+ XSendEvent(fl_display, e.requestor, 0, 0, (XEvent *)&e);}
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+*/
+////////////////////////////////////////////////////////////////
+
+// Call this when a "paste" operation happens:
+void Fl::paste(Fl_Widget &/*receiver*/) {
+/* //++
+ if (selection_owner()) {
+ // We already have it, do it quickly without window server.
+ // Notice that the text is clobbered if set_selection is
+ // called in response to FL_PASTE!
+ Fl::e_text = selection_buffer;
+ Fl::e_length = selection_length;
+ receiver.handle(FL_PASTE);
+ return;
+ }
+ // otherwise get the window server to return it:
+ fl_selection_requestor = &receiver;
+ XConvertSelection(fl_display, XA_PRIMARY, XA_STRING, XA_PRIMARY,
+ fl_xid(Fl::first_window()), fl_event_time);
+ if (!beenhere) {
+ Fl::add_handler(selection_xevent_handler);
+ beenhere = 1;
+ }
+ */
+}
+
+////////////////////////////////////////////////////////////////
+
+// call this when you create a selection:
+void Fl::selection(Fl_Widget &/*owner*/, const char */*stuff*/, int /*len*/) {
+/* //++
+ if (!stuff || len<0) return;
+ if (len+1 > selection_buffer_length) {
+ delete[] selection_buffer;
+ selection_buffer = new char[len+100];
+ selection_buffer_length = len+100;
+ }
+ memcpy(selection_buffer, stuff, len);
+ selection_buffer[len] = 0; // needed for direct paste
+ selection_length = len;
+ selection_owner(&owner);
+ static Window selxid; // window X thinks selection belongs to
+ if (!selxid) selxid =
+ XCreateSimpleWindow(fl_display,
+ RootWindow(fl_display, fl_screen),
+ 0,0,1,1,0,0,0);
+ XSetSelectionOwner(fl_display, XA_PRIMARY, selxid, fl_event_time);
+ if (!beenhere) {
+ Fl::add_handler(selection_xevent_handler);
+ beenhere = 1;
+ }
+ */
+}
+
+
+//
+// End of "$Id: Fl_cutpaste_mac.cxx,v 1.1.2.1 2001/11/27 17:44:06 easysw Exp $".
+//