Author: matt
Date: 2011-08-24 16:55:27 -0700 (Wed, 24 Aug 2011)
New Revision: 9005
Log:
fltk3::Input_, improved cut/copy/paste menu

Modified:
   branches/branch-3.0/src/core/Fl_Input_.cxx

Modified: branches/branch-3.0/src/core/Fl_Input_.cxx
===================================================================
--- branches/branch-3.0/src/core/Fl_Input_.cxx  2011-08-24 23:34:13 UTC (rev 
9004)
+++ branches/branch-3.0/src/core/Fl_Input_.cxx  2011-08-24 23:55:27 UTC (rev 
9005)
@@ -519,27 +519,34 @@
  Handles right mouse button clicks.
  */
 void fltk3::Input_::handle_menu_event() {
-  int ex = fltk3::event_x(), ey = fltk3::event_y();
-  if (mark()!=position() && (input_type()!=fltk3::SECRET_INPUT)) {
+  int m = mark(), p = position();
+  if (m<p) { int x=p; p=m; m=x; }
+  handle_mouse(x()+fltk3::box_dx(box()), y()+fltk3::box_dy(box()), 0, 0, 0);
+  if ( ( (p==m && p!=position()) || position()<p || position()>m ) && 
(input_type()!=fltk3::SECRET_INPUT)) {
+    handle_mouse(x()+fltk3::box_dx(box()), y()+fltk3::box_dy(box()), 0, 0, 0); 
+    p = word_start(position()); 
+    m = word_end(position());
+  }
+  position(p, m);
+  if (p!=m && (input_type()!=fltk3::SECRET_INPUT)) {
     ccp_menu[0].activate();
     ccp_menu[1].activate();
   } else {
-    // TODO: if nothing is selected, try to select the word under the cursor
     ccp_menu[0].deactivate();
     ccp_menu[1].deactivate();
   }
   if (!readonly() /*&& paste_buffer && *paste_buffer*/ ) // TODO: provide a 
function that can check if data is in the paste buffer
     ccp_menu[2].activate();
   else 
-    ccp_menu[2].deactivate();        
+    ccp_menu[2].deactivate();
+  redraw();
+  fltk3::flush();
   const fltk3::MenuItem *mi = ccp_menu->popup(fltk3::event_x(), 
fltk3::event_y());
   if (mi) {
     switch (mi->argument()) {
       case 1: copy(1); cut(); break;
       case 2: copy(1); break;
       case 3: 
-        fltk3::e_x = ex; fltk3::e_y = ey; // coordinates were messed up by 
popup menu!as c
-        handle_mouse(x()+fltk3::box_dx(box()), y()+fltk3::box_dy(box()), 0, 0, 
0); 
         paste(*this, 1); 
         break;
     }

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to