tkormann    01/10/08 08:01:25

  Modified:    sources/org/apache/batik/gvt/renderer BasicTextPainter.java
               sources/org/apache/batik/gvt/text ConcreteTextSelector.java
  Log:
  * bug fix in text selection.
  
  * work around for the deadlock generated by the copyToClipboard method on linux
    I still have to send a bug report to SUN :)
  
  Revision  Changes    Path
  1.11      +6 -2      
xml-batik/sources/org/apache/batik/gvt/renderer/BasicTextPainter.java
  
  Index: BasicTextPainter.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/gvt/renderer/BasicTextPainter.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- BasicTextPainter.java     2001/09/27 20:09:11     1.10
  +++ BasicTextPainter.java     2001/10/08 15:01:25     1.11
  @@ -44,7 +44,7 @@
    *
    * @author <a href="[EMAIL PROTECTED]>Bill Haneman</a>
    * @author <a href="[EMAIL PROTECTED]>Vincent Hardy</a>
  - * @version $Id: BasicTextPainter.java,v 1.10 2001/09/27 20:09:11 deweese Exp $
  + * @version $Id: BasicTextPainter.java,v 1.11 2001/10/08 15:01:25 tkormann Exp $
    */
   public abstract class BasicTextPainter implements TextPainter {
   
  @@ -78,7 +78,11 @@
        * selectAt(); [selectTo(),...], selectTo(); getSelection().
        */
       public Mark selectTo(double x, double y, Mark beginMark) {
  -        return hitTest(x, y, beginMark.getTextNode());
  +     if (beginMark == null) {
  +         return null;
  +     } else {
  +         return hitTest(x, y, beginMark.getTextNode());
  +     }
       }
   
       /**
  
  
  
  1.10      +37 -29    
xml-batik/sources/org/apache/batik/gvt/text/ConcreteTextSelector.java
  
  Index: ConcreteTextSelector.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/gvt/text/ConcreteTextSelector.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ConcreteTextSelector.java 2001/10/04 17:03:43     1.9
  +++ ConcreteTextSelector.java 2001/10/08 15:01:25     1.10
  @@ -39,7 +39,7 @@
    * A simple implementation of GraphicsNodeMouseListener for text selection.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Bill Haneman</a>
  - * @version $Id: ConcreteTextSelector.java,v 1.9 2001/10/04 17:03:43 tkormann Exp $
  + * @version $Id: ConcreteTextSelector.java,v 1.10 2001/10/08 15:01:25 tkormann Exp $
    */
   
   public class ConcreteTextSelector implements Selector {
  @@ -311,34 +311,42 @@
           }
       }
   
  -    private void copyToClipboard(Object o) {
  -        // first see if we can access the clipboard
  -        SecurityManager securityManager = System.getSecurityManager();
  -        boolean canAccessClipboard = true;
  -        if (securityManager != null) {
  -            try {
  -                securityManager.checkSystemClipboardAccess();
  -            } catch (SecurityException e) {
  -                canAccessClipboard = false;
  -            }
  -        }
  -        if (canAccessClipboard) {
  -            String label = "";
  -            if (o instanceof CharacterIterator) {
  -                CharacterIterator iter = (CharacterIterator) o;
  -                char[] cbuff = new char[iter.getEndIndex()-iter.getBeginIndex()];
  -                if (cbuff.length > 0) {
  -                    cbuff[0] = iter.first();
  -                }
  -                for (int i=1; i<cbuff.length;++i) {
  -                    cbuff[i] = iter.next();
  -                }
  -                label = new String(cbuff);
  -            }
  -            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  -            StringSelection selection = new StringSelection(label);
  -            clipboard.setContents(selection, selection);
  -        }
  +    private void copyToClipboard(final Object o) {
  +     //
  +     // HACK: getSystemClipboard sometimes deadlocks on linux when called
  +     // from the AWT Thread. The Thread creation prevents that.
  +     //
  +     new Thread() {
  +         public void run() {
  +             // first see if we can access the clipboard
  +             SecurityManager securityManager = System.getSecurityManager();
  +             boolean canAccessClipboard = true;
  +             if (securityManager != null) {
  +                 try {
  +                     securityManager.checkSystemClipboardAccess();
  +                 } catch (SecurityException e) {
  +                     canAccessClipboard = false;
  +                 }
  +             }
  +             if (canAccessClipboard) {
  +                 String label = "";
  +                 if (o instanceof CharacterIterator) {
  +                     CharacterIterator iter = (CharacterIterator) o;
  +                     char[] cbuff = new 
char[iter.getEndIndex()-iter.getBeginIndex()];
  +                     if (cbuff.length > 0) {
  +                         cbuff[0] = iter.first();
  +                     }
  +                     for (int i=1; i<cbuff.length;++i) {
  +                         cbuff[i] = iter.next();
  +                     }
  +                     label = new String(cbuff);
  +                 }
  +                 Clipboard clipboard = 
Toolkit.getDefaultToolkit().getSystemClipboard();
  +                 StringSelection selection = new StringSelection(label);
  +                 clipboard.setContents(selection, selection);
  +             }
  +         }
  +     }.start();
       }
   
       private void report(GraphicsNodeEvent evt, String message) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to