TerminalDisplay::TerminalDisplay(QWidget* parent)
: QWidget(parent)
, _screenWindow(nullptr)
, _bellMasked(false)
, _verticalLayout(new QVBoxLayout(this))
, _fixedFont(true)
, _fontHeight(1)
, _fontWidth(1)
, _fontAscent(1)
, _boldIntense(true)
, _lines(1)
, _columns(1)
, _usedLines(1)
, _usedColumns(1)
, _contentRect(QRect())
, _image(nullptr)
, _imageSize(0)
, _lineProperties(QVector<LineProperty>())
, _randomSeed(0)
, _resizing(false)
, _showTerminalSizeHint(true)
, _bidiEnabled(false)
, _usesMouseTracking(false)
, _alternateScrolling(true)
, _bracketedPasteMode(false)
, _iPntSel(QPoint())
, _pntSel(QPoint())
, _tripleSelBegin(QPoint())
, _actSel(0)
, _wordSelectionMode(false)
, _lineSelectionMode(false)
, _preserveLineBreaks(true)
, _columnSelectionMode(false)
, _autoCopySelectedText(false)
, _copyTextAsHTML(true)
, _middleClickPasteMode(Enum::PasteFromX11Selection)
, _scrollBar(nullptr)
, _scrollbarLocation(Enum::ScrollBarRight)
, _scrollFullPage(false)
, _wordCharacters(QStringLiteral(":@-./_~"))
, _bellMode(Enum::NotifyBell)
, _allowBlinkingText(true)
, _allowBlinkingCursor(false)
, _textBlinking(false)
, _cursorBlinking(false)
, _hasTextBlinker(false)
, _urlHintsModifiers(Qt::NoModifier)
, _showUrlHint(false)
, _reverseUrlHints(false)
, _openLinksByDirectClick(false)
, _ctrlRequiredForDrag(true)
, _dropUrlsAsText(false)
, _tripleClickMode(Enum::SelectWholeLine)
, _possibleTripleClick(false)
, _resizeWidget(nullptr)
, _resizeTimer(nullptr)
, _flowControlWarningEnabled(false)
, _outputSuspendedMessageWidget(nullptr)
, _lineSpacing(0)
, _size(QSize())
, _blendColor(qRgba(0, 0, 0, 0xff))
, _wallpaper(nullptr)
, _filterChain(new TerminalImageFilterChain())
, _mouseOverHotspotArea(QRegion())
, _filterUpdateRequired(true)
, _cursorShape(Enum::BlockCursor)
, _cursorColor(QColor())
, _antialiasText(true)
, _useFontLineCharacters(false)
, _printerFriendly(false)
, _sessionController(nullptr)
, _trimLeadingSpaces(false)
, _trimTrailingSpaces(false)
, _mouseWheelZoom(false)
, _margin(1)
, _centerContents(false)
, _readOnlyMessageWidget(nullptr)
, _readOnly(false)
, _opacity(1.0)
, _dimWhenInactive(false)
, _scrollWheelState(ScrollState())
, _searchBar(new IncrementalSearchBar(this))
, _headerBar(new TerminalHeaderBar(this))
, _searchResultRect(QRect())
, _drawOverlay(false)
{
setLayoutDirection(Qt::LeftToRight);
_contentRect = QRect(_margin, _margin, 1, 1);
_scrollBar = new QScrollBar(this);
_scrollBar->setAutoFillBackground(false);
setScroll(0, 0);
_scrollBar->setCursor(Qt::ArrowCursor);
_headerBar->setCursor(Qt::ArrowCursor);
connect(_headerBar, &TerminalHeaderBar::requestToggleExpansion, this, &Konsole::TerminalDisplay::requestToggleExpansion);
connect(_scrollBar, &QScrollBar::valueChanged, this, &Konsole::TerminalDisplay::scrollBarPositionChanged);
connect(_scrollBar, &QScrollBar::sliderMoved, this, &Konsole::TerminalDisplay::viewScrolledByUser);
_blinkTextTimer = new QTimer(this);
_blinkTextTimer->setInterval(TEXT_BLINK_DELAY);
connect(_blinkTextTimer, &QTimer::timeout, this, &Konsole::TerminalDisplay::blinkTextEvent);
_blinkCursorTimer = new QTimer(this);
_blinkCursorTimer->setInterval(QApplication::cursorFlashTime() / 2);
connect(_blinkCursorTimer, &QTimer::timeout, this, &Konsole::TerminalDisplay::blinkCursorEvent);
KCursor::setAutoHideCursor(this, true);
setMouseTracking(true);
setUsesMouseTracking(false);
setBracketedPasteMode(false);
setColorTable(ColorScheme::defaultTable);
setAcceptDrops(true);
_dragInfo.state = diNone;
setFocusPolicy(Qt::WheelFocus);
setAttribute(Qt::WA_InputMethodEnabled, true);
// this is an important optimization, it tells Qt
// that TerminalDisplay will handle repainting its entire area.
setAttribute(Qt::WA_OpaquePaintEvent);
_verticalLayout->addWidget(_headerBar);
_verticalLayout->addStretch();
_verticalLayout->setSpacing(0);
_verticalLayout->setContentsMargins(0, 0, 0, 0);
setLayout(_verticalLayout);
new AutoScrollHandler(this);
}
TerminalDisplay::~TerminalDisplay()
{
disconnect(_blinkTextTimer);
disconnect(_blinkCursorTimer);
delete _readOnlyMessageWidget;
delete _outputSuspendedMessageWidget;
delete[] _image;
delete _filterChain;
_readOnlyMessageWidget = nullptr;
_outputSuspendedMessageWidget = nullptr;
}