355 }
356 }
357
358 /**
359 * Called when the component containing the caret loses
360 * focus. This is implemented to set the caret to visibility
361 * to false.
362 *
363 * @param e the focus event
364 * @see FocusListener#focusLost
365 */
366 public void focusLost(FocusEvent e) {
367 setVisible(false);
368 setSelectionVisible(ownsSelection || e.isTemporary());
369 }
370
371
372 /**
373 * Selects word based on the MouseEvent
374 */
375 private void selectWord(MouseEvent e) {
376 if (selectedWordEvent != null
377 && selectedWordEvent.getX() == e.getX()
378 && selectedWordEvent.getY() == e.getY()) {
379 //we already done selection for this
380 return;
381 }
382 Action a = null;
383 ActionMap map = getComponent().getActionMap();
384 if (map != null) {
385 a = map.get(DefaultEditorKit.selectWordAction);
386 }
387 if (a == null) {
388 if (selectWord == null) {
389 selectWord = new DefaultEditorKit.SelectWordAction();
390 }
391 a = selectWord;
392 }
393 a.actionPerformed(new ActionEvent(getComponent(),
394 ActionEvent.ACTION_PERFORMED, null, e.getWhen(), e.getModifiers()));
395 selectedWordEvent = e;
396 }
397
398 // --- MouseListener methods -----------------------------------
399
400 /**
401 * Called when the mouse is clicked. If the click was generated
402 * from button1, a double click selects a word,
403 * and a triple click the current line.
404 *
405 * @param e the mouse event
406 * @see MouseListener#mouseClicked
407 */
408 public void mouseClicked(MouseEvent e) {
409 if (getComponent() == null) {
410 return;
411 }
412
413 int nclicks = SwingUtilities2.getAdjustedClickCount(getComponent(), e);
414
415 if (! e.isConsumed()) {
416 if (SwingUtilities.isLeftMouseButton(e)) {
417 // mouse 1 behavior
418 if(nclicks == 1) {
419 selectedWordEvent = null;
420 } else if(nclicks == 2
421 && SwingUtilities2.canEventAccessSystemClipboard(e)) {
422 selectWord(e);
423 selectedWordEvent = null;
424 } else if(nclicks == 3
425 && SwingUtilities2.canEventAccessSystemClipboard(e)) {
426 Action a = null;
427 ActionMap map = getComponent().getActionMap();
496 shouldHandleRelease = true;
497 } else {
498 shouldHandleRelease = false;
499 adjustCaretAndFocus(e);
500 if (nclicks == 2
501 && SwingUtilities2.canEventAccessSystemClipboard(e)) {
502 selectWord(e);
503 }
504 }
505 }
506 }
507
508 void adjustCaretAndFocus(MouseEvent e) {
509 adjustCaret(e);
510 adjustFocus(false);
511 }
512
513 /**
514 * Adjusts the caret location based on the MouseEvent.
515 */
516 private void adjustCaret(MouseEvent e) {
517 if ((e.getModifiers() & ActionEvent.SHIFT_MASK) != 0 &&
518 getDot() != -1) {
519 moveCaret(e);
520 } else if (!e.isPopupTrigger()) {
521 positionCaret(e);
522 }
523 }
524
525 /**
526 * Adjusts the focus, if necessary.
527 *
528 * @param inWindow if true indicates requestFocusInWindow should be used
529 */
530 private void adjustFocus(boolean inWindow) {
531 if ((component != null) && component.isEnabled() &&
532 component.isRequestFocusEnabled()) {
533 if (inWindow) {
534 component.requestFocusInWindow();
535 }
|
355 }
356 }
357
358 /**
359 * Called when the component containing the caret loses
360 * focus. This is implemented to set the caret to visibility
361 * to false.
362 *
363 * @param e the focus event
364 * @see FocusListener#focusLost
365 */
366 public void focusLost(FocusEvent e) {
367 setVisible(false);
368 setSelectionVisible(ownsSelection || e.isTemporary());
369 }
370
371
372 /**
373 * Selects word based on the MouseEvent
374 */
375 @SuppressWarnings("deprecation")
376 private void selectWord(MouseEvent e) {
377 if (selectedWordEvent != null
378 && selectedWordEvent.getX() == e.getX()
379 && selectedWordEvent.getY() == e.getY()) {
380 //we already done selection for this
381 return;
382 }
383 Action a = null;
384 ActionMap map = getComponent().getActionMap();
385 if (map != null) {
386 a = map.get(DefaultEditorKit.selectWordAction);
387 }
388 if (a == null) {
389 if (selectWord == null) {
390 selectWord = new DefaultEditorKit.SelectWordAction();
391 }
392 a = selectWord;
393 }
394 a.actionPerformed(new ActionEvent(getComponent(),
395 ActionEvent.ACTION_PERFORMED, null, e.getWhen(), e.getModifiers()));
396 selectedWordEvent = e;
397 }
398
399 // --- MouseListener methods -----------------------------------
400
401 /**
402 * Called when the mouse is clicked. If the click was generated
403 * from button1, a double click selects a word,
404 * and a triple click the current line.
405 *
406 * @param e the mouse event
407 * @see MouseListener#mouseClicked
408 */
409 @SuppressWarnings("deprecation")
410 public void mouseClicked(MouseEvent e) {
411 if (getComponent() == null) {
412 return;
413 }
414
415 int nclicks = SwingUtilities2.getAdjustedClickCount(getComponent(), e);
416
417 if (! e.isConsumed()) {
418 if (SwingUtilities.isLeftMouseButton(e)) {
419 // mouse 1 behavior
420 if(nclicks == 1) {
421 selectedWordEvent = null;
422 } else if(nclicks == 2
423 && SwingUtilities2.canEventAccessSystemClipboard(e)) {
424 selectWord(e);
425 selectedWordEvent = null;
426 } else if(nclicks == 3
427 && SwingUtilities2.canEventAccessSystemClipboard(e)) {
428 Action a = null;
429 ActionMap map = getComponent().getActionMap();
498 shouldHandleRelease = true;
499 } else {
500 shouldHandleRelease = false;
501 adjustCaretAndFocus(e);
502 if (nclicks == 2
503 && SwingUtilities2.canEventAccessSystemClipboard(e)) {
504 selectWord(e);
505 }
506 }
507 }
508 }
509
510 void adjustCaretAndFocus(MouseEvent e) {
511 adjustCaret(e);
512 adjustFocus(false);
513 }
514
515 /**
516 * Adjusts the caret location based on the MouseEvent.
517 */
518 @SuppressWarnings("deprecation")
519 private void adjustCaret(MouseEvent e) {
520 if ((e.getModifiers() & ActionEvent.SHIFT_MASK) != 0 &&
521 getDot() != -1) {
522 moveCaret(e);
523 } else if (!e.isPopupTrigger()) {
524 positionCaret(e);
525 }
526 }
527
528 /**
529 * Adjusts the focus, if necessary.
530 *
531 * @param inWindow if true indicates requestFocusInWindow should be used
532 */
533 private void adjustFocus(boolean inWindow) {
534 if ((component != null) && component.isEnabled() &&
535 component.isRequestFocusEnabled()) {
536 if (inWindow) {
537 component.requestFocusInWindow();
538 }
|