diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 6bb67c03aaf7a7386c59cb560c9af2bcb12cb558..aa4e64312f6810697bc79b4196425cdf975c3ff0 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -474,7 +474,7 @@ void FakeVimHandler::Private::updateSelection() } } } - EDITOR(setExtraSelections(selections)); + emit q->selectionChanged(editor(), selections); } void FakeVimHandler::Private::updateMiniBuffer() diff --git a/src/plugins/fakevim/fakevimhandler.h b/src/plugins/fakevim/fakevimhandler.h index 69bb363015f1b8b483db3904f22e087453d7bf6c..d1712b0c934f75a94d7fc0163769dc9b510351e1 100644 --- a/src/plugins/fakevim/fakevimhandler.h +++ b/src/plugins/fakevim/fakevimhandler.h @@ -34,7 +34,8 @@ #ifndef FAKEVIM_HANDLER_H #define FAKEVIM_HANDLER_H -#include <QObject> +#include <QtCore/QObject> +#include <QtGui/QTextEdit> QT_BEGIN_NAMESPACE class QString; @@ -69,6 +70,8 @@ signals: void statusDataChanged(const QString &msg); void extraInformationChanged(const QString &msg); void quitRequested(QWidget *); + void selectionChanged(QWidget *widget, + const QList<QTextEdit::ExtraSelection> &selection); private: bool eventFilter(QObject *ob, QEvent *ev); diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index 5836d2258ea0349ab589cca98b090d8628b167e7..3ee96e97c7bde8365dbf0562b9b4f28b70c1bab7 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -165,14 +165,17 @@ void FakeVimPlugin::installHandler(QWidget *widget) this, SLOT(showCommandBuffer(QString))); connect(m_handler, SIGNAL(quitRequested(QWidget *)), this, SLOT(removeHandler(QWidget *))); + connect(m_handler, + SIGNAL(selectionChanged(QWidget*,QList<QTextEdit::ExtraSelection>)), + this, SLOT(changeSelection(QWidget*,QList<QTextEdit::ExtraSelection>))); m_handler->addWidget(widget); - BaseTextEditor *baseTextEditor = qobject_cast<BaseTextEditor *>(widget); - if (baseTextEditor) { + BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(widget); + if (bt) { using namespace TextEditor; using namespace FakeVim::Constants; - TabSettings settings = baseTextEditor->tabSettings(); + TabSettings settings = bt->tabSettings(); m_handler->setConfigValue(ConfigTabStop, QString::number(settings.m_tabSize)); m_handler->setConfigValue(ConfigShiftWidth, @@ -219,6 +222,13 @@ void FakeVimPlugin::showExtraInformation(const QString &text) QMessageBox::information(0, tr("FakeVim Information"), text); } +void FakeVimPlugin::changeSelection(QWidget *widget, + const QList<QTextEdit::ExtraSelection> &selection) +{ + if (BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(widget)) + bt->setExtraSelections(BaseTextEditor::FakeVimSelection, selection); +} + //#include "fakevimplugin.moc" Q_EXPORT_PLUGIN(FakeVimPlugin) diff --git a/src/plugins/fakevim/fakevimplugin.h b/src/plugins/fakevim/fakevimplugin.h index 793c2264d0086b59e9b17c44275fe63b397b506f..bbd934281ff0009d5075852cfd80199c2f725cc3 100644 --- a/src/plugins/fakevim/fakevimplugin.h +++ b/src/plugins/fakevim/fakevimplugin.h @@ -37,6 +37,8 @@ #include <extensionsystem/iplugin.h> #include <QtCore/QObject> +#include <QtCore/QList> +#include <QtGui/QTextEdit> QT_BEGIN_NAMESPACE class QAction; @@ -84,6 +86,8 @@ private slots: void showExtraInformation(const QString &msg); void editorOpened(Core::IEditor *); void editorAboutToClose(Core::IEditor *); + void changeSelection(QWidget *widget, + const QList<QTextEdit::ExtraSelection> &selections); private: FakeVimHandler *m_handler; diff --git a/tests/manual/fakevim/main.cpp b/tests/manual/fakevim/main.cpp index 8c504a62a81b353fe92683f375e9e909ba4909dd..c668601e78dd108d6ba20ef4a9668496050de1cb 100644 --- a/tests/manual/fakevim/main.cpp +++ b/tests/manual/fakevim/main.cpp @@ -1,5 +1,5 @@ -#include "handler.h" +#include "fakevimhandler.h" #include <QtCore/QDebug> @@ -11,6 +11,25 @@ using namespace FakeVim::Internal; +class Proxy : public QObject +{ + Q_OBJECT + +public: + Proxy(QWidget *widget) : QObject(0), m_widget(widget) {} + +public slots: + void changeSelection(QWidget *w, const QList<QTextEdit::ExtraSelection> &s) + { + if (QPlainTextEdit *ed = qobject_cast<QPlainTextEdit *>(w)) + ed->setExtraSelections(s); + else if (QTextEdit *ed = qobject_cast<QTextEdit *>(w)) + ed->setExtraSelections(s); + } +private: + QWidget *m_widget; +}; + int main(int argc, char *argv[]) { QApplication app(argc, argv); @@ -31,8 +50,10 @@ int main(int argc, char *argv[]) widget->resize(450, 350); widget->setFocus(); + Proxy proxy(widget); + - FakeVimHandler fakeVim; + FakeVimHandler handler; QMainWindow mw; mw.setWindowTitle("Fakevim (" + title + ")"); @@ -50,14 +71,19 @@ int main(int argc, char *argv[]) widget->setFont(font); mw.statusBar()->setFont(font); - QObject::connect(&fakeVim, SIGNAL(commandBufferChanged(QString)), + QObject::connect(&handler, SIGNAL(commandBufferChanged(QString)), mw.statusBar(), SLOT(showMessage(QString))); - QObject::connect(&fakeVim, SIGNAL(quitRequested(QWidget *)), + QObject::connect(&handler, SIGNAL(quitRequested(QWidget *)), &app, SLOT(quit())); + QObject::connect(&handler, + SIGNAL(selectionChanged(QWidget*,QList<QTextEdit::ExtraSelection>)), + &proxy, SLOT(changeSelection(QWidget*,QList<QTextEdit::ExtraSelection>))); - fakeVim.addWidget(widget); + handler.addWidget(widget); if (args.size() >= 1) - fakeVim.handleCommand(widget, "r " + args.at(0)); + handler.handleCommand(widget, "r " + args.at(0)); return app.exec(); } + +#include "main.moc"