X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fmultilineedit.cpp;h=2c9d5947691131682441efae0055aa946b134d40;hp=68de357883bc1a298cb0e08747544f728dbde24c;hb=ab7ef4d24f62b5848b628482b7762ebfc0b53e1a;hpb=dd711790dddee81442e2138b3917764dac39c487 diff --git a/src/uisupport/multilineedit.cpp b/src/uisupport/multilineedit.cpp index 68de3578..2c9d5947 100644 --- a/src/uisupport/multilineedit.cpp +++ b/src/uisupport/multilineedit.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -22,10 +22,6 @@ #include #include -#ifdef HAVE_SONNET -# include -#endif - #include "actioncollection.h" #include "bufferview.h" #include "graphicalui.h" @@ -54,8 +50,9 @@ MultiLineEdit::MultiLineEdit(QWidget *parent) enableFindReplace(false); #endif -#ifdef HAVE_SONNET - new Sonnet::SpellCheckDecorator(this); +#if defined HAVE_SONNET && !defined HAVE_KDE + _spellCheckDecorator = new Sonnet::SpellCheckDecorator(this); + highlighter()->setActive(highlighter()->checkerEnabledByDefault()); #endif setMode(SingleLine); @@ -90,6 +87,37 @@ MultiLineEdit::~MultiLineEdit() { } +#if defined HAVE_SONNET && !defined HAVE_KDE +Sonnet::Highlighter *MultiLineEdit::highlighter() const +{ + return _spellCheckDecorator->highlighter(); +} + + +void MultiLineEdit::setSpellCheckEnabled(bool enabled) +{ + highlighter()->setActive(enabled); + if (enabled) { + highlighter()->slotRehighlight(); + } +} + +void MultiLineEdit::contextMenuEvent(QContextMenuEvent *event) +{ + QMenu *menu = createStandardContextMenu(); + menu->addSeparator(); + + auto action = menu->addAction(tr("Auto Spell Check")); + action->setCheckable(true); + action->setChecked(highlighter()->isActive()); + connect(action, SIGNAL(toggled(bool)), this, SLOT(setSpellCheckEnabled(bool))); + + menu->exec(event->globalPos()); + delete menu; +} + +#endif + void MultiLineEdit::setCustomFont(const QFont &font) { @@ -177,13 +205,18 @@ void MultiLineEdit::updateSizeHint() // use the style to determine a decent size int h = qMin(qMax((int)document()->size().height() + scrollBarHeight, minPixelHeight), maxPixelHeight) + 2 * frameWidth(); - QStyleOptionFrameV2 opt; + + QStyleOptionFrame opt; opt.initFrom(this); opt.rect = QRect(0, 0, 100, h); opt.lineWidth = lineWidth(); opt.midLineWidth = midLineWidth(); opt.state |= QStyle::State_Sunken; - QSize s = style()->sizeFromContents(QStyle::CT_LineEdit, &opt, QSize(100, h).expandedTo(QApplication::globalStrut()), this); + QWidget *widget = this; +#ifdef Q_OS_MAC + widget = 0; +#endif + QSize s = style()->sizeFromContents(QStyle::CT_LineEdit, &opt, QSize(100, h).expandedTo(QApplication::globalStrut()), widget); if (s != _sizeHint) { _sizeHint = s; updateGeometry(); @@ -213,16 +246,6 @@ void MultiLineEdit::setEmacsMode(bool enable) } -void MultiLineEdit::setSpellCheckEnabled(bool enable) -{ -#ifdef HAVE_KDE - setCheckSpellingEnabled(enable); -#else - Q_UNUSED(enable) -#endif -} - - void MultiLineEdit::setPasteProtectionEnabled(bool enable, QWidget *) { _pasteProtectionEnabled = enable; @@ -718,11 +741,7 @@ void MultiLineEdit::on_textChanged() QString msg = tr("Do you really want to paste %n line(s)?", "", lines.count()); msg += "

"; for (int i = 0; i < 4; i++) { -#if QT_VERSION < 0x050000 - msg += Qt::escape(lines[i].left(40)); -#else msg += lines[i].left(40).toHtmlEscaped(); -#endif if (lines[i].count() > 40) msg += "..."; msg += "
";