diff --git a/src/apps/terminal/TermView.cpp b/src/apps/terminal/TermView.cpp index 6565dceb22..eee6356af6 100644 --- a/src/apps/terminal/TermView.cpp +++ b/src/apps/terminal/TermView.cpp @@ -774,7 +774,8 @@ TermView::SetTermFont(const BFont *font) fCursorStyle = PrefHandler::Default() == NULL ? BLOCK_CURSOR : PrefHandler::Default()->getCursor(PREF_CURSOR_STYLE); - fCursorBlinking = PrefHandler::Default()->getBool(PREF_BLINK_CURSOR); + bool blinking = PrefHandler::Default()->getBool(PREF_BLINK_CURSOR); + SwitchCursorBlinking(blinking); fEmulateBold = PrefHandler::Default() == NULL ? false : PrefHandler::Default()->getBool(PREF_EMULATE_BOLD); @@ -797,6 +798,26 @@ TermView::SetScrollBar(BScrollBar *scrollBar) } +void +TermView::SwitchCursorBlinking(bool blinkingOn) +{ + fCursorBlinking = blinkingOn; + if (blinkingOn) { + if (fCursorBlinkRunner == NULL) { + BMessage blinkMessage(kBlinkCursor); + fCursorBlinkRunner = new (std::nothrow) BMessageRunner( + BMessenger(this), &blinkMessage, kCursorBlinkInterval); + } + } else { + // make sure the cursor becomes visible + fCursorState = 0; + _InvalidateTextRect(fCursor.x, fCursor.y, fCursor.x, fCursor.y); + delete fCursorBlinkRunner; + fCursorBlinkRunner = NULL; + } +} + + void TermView::Copy(BClipboard *clipboard) { @@ -914,30 +935,11 @@ TermView::_DetachShell() } -void -TermView::_SwitchCursorBlinking(bool blinkingOn) -{ - if (blinkingOn) { - if (fCursorBlinkRunner == NULL) { - BMessage blinkMessage(kBlinkCursor); - fCursorBlinkRunner = new (std::nothrow) BMessageRunner( - BMessenger(this), &blinkMessage, kCursorBlinkInterval); - } - } else { - // make sure the cursor becomes visible - fCursorState = 0; - _InvalidateTextRect(fCursor.x, fCursor.y, fCursor.x, fCursor.y); - delete fCursorBlinkRunner; - fCursorBlinkRunner = NULL; - } -} - - void TermView::_Activate() { fActive = true; - _SwitchCursorBlinking(fCursorBlinking); + SwitchCursorBlinking(fCursorBlinking); } @@ -948,7 +950,7 @@ TermView::_Deactivate() fCursorState = 0; _InvalidateTextRect(fCursor.x, fCursor.y, fCursor.x, fCursor.y); - _SwitchCursorBlinking(false); + SwitchCursorBlinking(false); fActive = false; } @@ -1792,10 +1794,8 @@ TermView::MessageReceived(BMessage *msg) fCursorStyle = style; bool blinking = fCursorBlinking; - if (msg->FindBool("blinking", &blinking) == B_OK) { - fCursorBlinking = blinking; - _SwitchCursorBlinking(fCursorBlinking); - } + if (msg->FindBool("blinking", &blinking) == B_OK) + SwitchCursorBlinking(blinking); bool hidden = fCursorHidden; if (msg->FindBool("hidden", &hidden) == B_OK) diff --git a/src/apps/terminal/TermView.h b/src/apps/terminal/TermView.h index 10b42862a7..88006077b2 100644 --- a/src/apps/terminal/TermView.h +++ b/src/apps/terminal/TermView.h @@ -103,6 +103,8 @@ public: void MakeDebugSnapshots(); void StartStopDebugCapture(); + void SwitchCursorBlinking(bool blinkingOn); + // edit functions void Copy(BClipboard* clipboard); void Paste(BClipboard* clipboard); @@ -191,7 +193,6 @@ private: void _Activate(); void _Deactivate(); - void _SwitchCursorBlinking(bool blinkingOn); void _DrawLinePart(int32 x1, int32 y1, uint32 attr, char* buffer, int32 width, diff --git a/src/apps/terminal/TermWindow.cpp b/src/apps/terminal/TermWindow.cpp index 81896f7aaa..0791e77c8c 100644 --- a/src/apps/terminal/TermWindow.cpp +++ b/src/apps/terminal/TermWindow.cpp @@ -838,6 +838,18 @@ TermWindow::MessageReceived(BMessage *message) break; } + case MSG_BLINK_CURSOR_CHANGED: + { + bool blinkingCursor + = PrefHandler::Default()->getBool(PREF_BLINK_CURSOR); + + for (int32 i = 0; i < fTabView->CountTabs(); i++) { + TermView* view = _TermViewAt(i); + view->SwitchCursorBlinking(blinkingCursor); + } + break; + } + case MSG_HALF_FONT_CHANGED: case MSG_FULL_FONT_CHANGED: case MSG_ALLOW_BOLD_CHANGED: