aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ViewStyle.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/ViewStyle.cxx')
-rw-r--r--src/ViewStyle.cxx18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx
index 5273841ed..1458ea96f 100644
--- a/src/ViewStyle.cxx
+++ b/src/ViewStyle.cxx
@@ -661,11 +661,14 @@ bool ViewStyle::SetWrapIndentMode(WrapIndentMode wrapIndentMode_) noexcept {
bool ViewStyle::IsBlockCaretStyle() const noexcept {
return ((caret.style & CaretStyle::InsMask) == CaretStyle::Block) ||
- FlagSet(caret.style, CaretStyle::OverstrikeBlock);
+ FlagSet(caret.style, CaretStyle::OverstrikeBlock) ||
+ FlagSet(caret.style, CaretStyle::Curses);
}
-bool ViewStyle::IsCaretVisible() const noexcept {
- return caret.width > 0 && caret.style != CaretStyle::Invisible;
+bool ViewStyle::IsCaretVisible(bool isMainSelection) const noexcept {
+ return caret.width > 0 &&
+ ((caret.style & CaretStyle::InsMask) != CaretStyle::Invisible ||
+ (FlagSet(caret.style, CaretStyle::Curses) && !isMainSelection)); // only draw additional selections in curses mode
}
bool ViewStyle::DrawCaretInsideSelection(bool inOverstrike, bool imeCaretBlockOverride) const noexcept {
@@ -673,14 +676,19 @@ bool ViewStyle::DrawCaretInsideSelection(bool inOverstrike, bool imeCaretBlockOv
return false;
return ((caret.style & CaretStyle::InsMask) == CaretStyle::Block) ||
(inOverstrike && FlagSet(caret.style, CaretStyle::OverstrikeBlock)) ||
- imeCaretBlockOverride;
+ imeCaretBlockOverride ||
+ FlagSet(caret.style, CaretStyle::Curses);
}
-ViewStyle::CaretShape ViewStyle::CaretShapeForMode(bool inOverstrike) const noexcept {
+ViewStyle::CaretShape ViewStyle::CaretShapeForMode(bool inOverstrike, bool isMainSelection) const noexcept {
if (inOverstrike) {
return (FlagSet(caret.style, CaretStyle::OverstrikeBlock)) ? CaretShape::block : CaretShape::bar;
}
+ if (FlagSet(caret.style, CaretStyle::Curses) && !isMainSelection) {
+ return CaretShape::block;
+ }
+
const CaretStyle caretStyle = caret.style & CaretStyle::InsMask;
return (caretStyle <= CaretStyle::Block) ? static_cast<CaretShape>(caretStyle) : CaretShape::line;
}