Mercurial > hg > octave-nkf
changeset 16609:6f7940e36322
improve handling of cursor blinking for unix GUI terminal window
* QUnixTerminalImpl.h, QUnixTerminalImpl.cpp
(QUnixTerminalImpl::focusInEvent): Delete.
* TerminalView.h, TerminalView.cpp (TerminalView::drawCursor):
Don't check focus.
(TerminalView::setBlinkingCursorState): New function.
(TerminalView::setBlinkingCursor): Use it.
(TerminalView::focusInEvent, TerminalView::focusOutEvent):
New functions.
(TerminalView::blinkCursorEvent): Only toggle state if
_hasBlinkingCursor is true.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 04 May 2013 01:01:44 -0400 |
parents | 739d7eb97b85 |
children | a1f613e5066d |
files | libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h libgui/qterminal/libqterminal/unix/TerminalView.cpp libgui/qterminal/libqterminal/unix/TerminalView.h |
diffstat | 4 files changed, 33 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp @@ -135,14 +135,6 @@ m_terminalView->setBlinkingCursor(blinking); } -void QUnixTerminalImpl::focusInEvent(QFocusEvent *focusEvent) -{ - Q_UNUSED(focusEvent); - m_terminalView->updateImage(); - m_terminalView->repaint(); - m_terminalView->update(); -} - void QUnixTerminalImpl::showEvent(QShowEvent *) { m_terminalView->updateImage();
--- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h @@ -48,7 +48,6 @@ void pasteClipboard(); protected: - void focusInEvent(QFocusEvent *focusEvent); void showEvent(QShowEvent *); virtual void resizeEvent(QResizeEvent *);
--- a/libgui/qterminal/libqterminal/unix/TerminalView.cpp +++ b/libgui/qterminal/libqterminal/unix/TerminalView.cpp @@ -530,7 +530,7 @@ QRect cursorRect = rect; cursorRect.setHeight(_fontHeight - _lineSpacing - 1); - if (!_cursorBlinking || !hasFocus()) + if (!_cursorBlinking) { if ( _cursorColor.isValid() ) painter.setPen(_cursorColor); @@ -1021,6 +1021,11 @@ { _hasBlinkingCursor=blink; + setBlinkingCursorState(blink); +} + +void TerminalView::setBlinkingCursorState(bool blink) +{ if (blink && !_blinkCursorTimer->isActive()) _blinkCursorTimer->start(BLINK_DELAY); @@ -1029,8 +1034,6 @@ _blinkCursorTimer->stop(); if (_cursorBlinking) blinkCursorEvent(); - else - _cursorBlinking = false; } } @@ -1053,6 +1056,25 @@ paint.end(); } +void TerminalView::focusInEvent(QFocusEvent *focusEvent) +{ + setBlinkingCursorState(true); + updateImage(); + repaint(); + update(); + + QWidget::focusInEvent(focusEvent); +} + +void TerminalView::focusOutEvent(QFocusEvent *focusEvent) +{ + // Force the cursor to be redrawn. + _cursorBlinking = true; + setBlinkingCursorState(false); + + QWidget::focusOutEvent(focusEvent); +} + QPoint TerminalView::cursorPosition() const { if (_screenWindow) @@ -1343,7 +1365,10 @@ void TerminalView::blinkCursorEvent() { - _cursorBlinking = !_cursorBlinking; + if (_hasBlinkingCursor) + _cursorBlinking = !_cursorBlinking; + else + _cursorBlinking = false; QRect cursorRect = imageToWidget( QRect(cursorPosition(),QSize(1,1)) );
--- a/libgui/qterminal/libqterminal/unix/TerminalView.h +++ b/libgui/qterminal/libqterminal/unix/TerminalView.h @@ -150,6 +150,7 @@ bool blinkingCursor() { return _hasBlinkingCursor; } /** Specifies whether or not the cursor blinks. */ void setBlinkingCursor(bool blink); + void setBlinkingCursorState(bool blink); void setCtrlDrag(bool enable) { _ctrlDrag=enable; } bool ctrlDrag() { return _ctrlDrag; } @@ -478,6 +479,9 @@ virtual void paintEvent( QPaintEvent * ); + void focusInEvent(QFocusEvent *focusEvent); + void focusOutEvent(QFocusEvent *focusEvent); + virtual void showEvent(QShowEvent*); virtual void hideEvent(QHideEvent*); virtual void resizeEvent(QResizeEvent*);