merged
authorwenzelm
Sat, 29 Mar 2014 21:26:11 +0100
changeset 56324 f9de5e5b56e6
parent 56320 e84c12d4a886 (current diff)
parent 56323 e925118b1875 (diff)
child 56325 ffbfc92e6508
merged
--- a/src/Tools/jEdit/src/pretty_text_area.scala	Fri Mar 28 18:21:07 2014 -0700
+++ b/src/Tools/jEdit/src/pretty_text_area.scala	Sat Mar 29 21:26:11 2014 +0100
@@ -166,7 +166,8 @@
       {
         evt.getKeyCode match {
           case KeyEvent.VK_C
-          if (evt.getModifiers & Toolkit.getDefaultToolkit.getMenuShortcutKeyMask) != 0 =>
+          if (evt.getModifiers & Toolkit.getDefaultToolkit.getMenuShortcutKeyMask) != 0 &&
+              text_area.getSelectionCount != 0 =>
             Registers.copy(text_area, '$')
             evt.consume
 
--- a/src/Tools/jEdit/src/rich_text_area.scala	Fri Mar 28 18:21:07 2014 -0700
+++ b/src/Tools/jEdit/src/rich_text_area.scala	Sat Mar 29 21:26:11 2014 +0100
@@ -10,10 +10,11 @@
 
 import isabelle._
 
-import java.awt.{Graphics2D, Shape, Color, Point, Toolkit, Cursor}
+import java.awt.{Graphics2D, Shape, Color, Point, Toolkit, Cursor, MouseInfo}
 import java.awt.event.{MouseMotionAdapter, MouseAdapter, MouseEvent,
   FocusAdapter, FocusEvent, WindowEvent, WindowAdapter}
 import java.awt.font.TextAttribute
+import javax.swing.SwingUtilities
 import java.text.AttributedString
 import java.util.ArrayList
 
@@ -180,7 +181,23 @@
     }
   }
 
+  private def mouse_inside_painter(): Boolean =
+    MouseInfo.getPointerInfo match {
+      case null => false
+      case info =>
+        val point = info.getLocation
+        val painter = text_area.getPainter
+        SwingUtilities.convertPointFromScreen(point, painter)
+        painter.contains(point)
+    }
+
   private val mouse_motion_listener = new MouseMotionAdapter {
+    override def mouseDragged(evt: MouseEvent) {
+      robust_body(()) {
+        PIDE.dismissed_popups(view)
+      }
+    }
+
     override def mouseMoved(evt: MouseEvent) {
       robust_body(()) {
         val x = evt.getX
@@ -207,23 +224,25 @@
         if (evt.getSource == text_area.getPainter) {
           Pretty_Tooltip.invoke(() =>
             robust_body(()) {
-              val rendering = get_rendering()
-              val snapshot = rendering.snapshot
-              if (!snapshot.is_outdated) {
-                JEdit_Lib.pixel_range(text_area, x, y) match {
-                  case None =>
-                  case Some(range) =>
-                    val result =
-                      if (control) rendering.tooltip(range)
-                      else rendering.tooltip_message(range)
-                    result match {
-                      case None =>
-                      case Some(tip) =>
-                        val painter = text_area.getPainter
-                        val loc = new Point(x, y + painter.getFontMetrics.getHeight / 2)
-                        val results = rendering.command_results(range)
-                        Pretty_Tooltip(view, painter, loc, rendering, results, tip)
-                    }
+              if (mouse_inside_painter()) {
+                val rendering = get_rendering()
+                val snapshot = rendering.snapshot
+                if (!snapshot.is_outdated) {
+                  JEdit_Lib.pixel_range(text_area, x, y) match {
+                    case None =>
+                    case Some(range) =>
+                      val result =
+                        if (control) rendering.tooltip(range)
+                        else rendering.tooltip_message(range)
+                      result match {
+                        case None =>
+                        case Some(tip) =>
+                          val painter = text_area.getPainter
+                          val loc = new Point(x, y + painter.getFontMetrics.getHeight / 2)
+                          val results = rendering.command_results(range)
+                          Pretty_Tooltip(view, painter, loc, rendering, results, tip)
+                      }
+                  }
                 }
               }
           })