Terminal: Make blinking cursor settings live

Change-Id: I51b2f4753c4c331c075293a7d531b26a2fbdc457
Reviewed-on: https://review.haiku-os.org/479
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
Humdinger
2018-08-25 18:51:29 +00:00
committed by waddlesplash
parent 8f30879b98
commit c0bbce07c8
3 changed files with 40 additions and 27 deletions
+26 -26
View File
@@ -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)
+2 -1
View File
@@ -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,
+12
View File
@@ -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: