[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/4.0/kdelibs/kdeui/widgets
From: David Faure <faure () kde ! org>
Date: 2008-05-27 12:15:09
Message-ID: 1211890509.932092.20009.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 813320 by dfaure:
Shortcut handling should be done in event() using QEvent::ShortcutOverride, just like in KLineEdit,
so that it has priority over (window-global) QActions. To test this one I had to add this to kdeglobals (*) though:
[Shortcuts]
Undo=Ctrl+Shift+_
and a QAction with action->setShortcut(Qt::CTRL | Qt::Key_Underscore) in ktextedittest.cpp.
Otherwise the standard-shortcut handling in QTextEdit kicks in, since all our default keybindings
match those QTextEdit handles. Without the fix it would trigger the action, with the fix it calls undo.
(*) where did the standard-shortcuts-config module go???
M +72 -67 ktextedit.cpp
M +6 -1 ktextedit.h
--- branches/KDE/4.0/kdelibs/kdeui/widgets/ktextedit.cpp #813319:813320
@@ -55,6 +55,12 @@
delete highlighter;
}
+ /**
+ * Checks whether we should/should not consume a key used as
+ * an accelerator.
+ */
+ bool overrideShortcut (const QKeyEvent* e);
+
void slotSpellCheckDone( const QString &s );
void spellCheckerMisspelling( const QString &text, int pos );
@@ -164,109 +170,103 @@
d->spellChechingConfigFileName = _fileName;
}
-void KTextEdit::keyPressEvent( QKeyEvent *event )
+bool KTextEdit::event(QEvent* ev)
{
- int key = event->key() | event->modifiers();
+ if (ev->type() == QEvent::KeyPress /*ShortcutOverride*/) {
+ QKeyEvent *e = static_cast<QKeyEvent *>( ev );
+ if (d->overrideShortcut(e)) {
+ e->accept();
+ return true;
+ }
+ }
+ return QTextEdit::event(ev);
+}
+bool KTextEdit::Private::overrideShortcut(const QKeyEvent* event)
+{
+ const int key = event->key() | event->modifiers();
+
if ( KStandardShortcut::copy().contains( key ) ) {
- copy();
- event->accept();
- return;
+ parent->copy();
+ return true;
} else if ( KStandardShortcut::paste().contains( key ) ) {
- paste();
- event->accept();
- return;
+ parent->paste();
+ return true;
} else if ( KStandardShortcut::cut().contains( key ) ) {
- cut();
- event->accept();
- return;
+ parent->cut();
+ return true;
} else if ( KStandardShortcut::undo().contains( key ) ) {
- document()->undo();
- event->accept();
- return;
+ parent->document()->undo();
+ return true;
} else if ( KStandardShortcut::redo().contains( key ) ) {
- document()->redo();
- event->accept();
- return;
+ parent->document()->redo();
+ return true;
} else if ( KStandardShortcut::deleteWordBack().contains( key ) ) {
- deleteWordBack();
- event->accept();
- return;
+ parent->deleteWordBack();
+ return true;
} else if ( KStandardShortcut::deleteWordForward().contains( key ) ) {
- deleteWordForward();
- event->accept();
- return;
+ parent->deleteWordForward();
+ return true;
} else if ( KStandardShortcut::backwardWord().contains( key ) ) {
- QTextCursor cursor = textCursor();
+ QTextCursor cursor = parent->textCursor();
cursor.movePosition( QTextCursor::PreviousWord );
- setTextCursor( cursor );
- event->accept();
- return;
+ parent->setTextCursor( cursor );
+ return true;
} else if ( KStandardShortcut::forwardWord().contains( key ) ) {
- QTextCursor cursor = textCursor();
+ QTextCursor cursor = parent->textCursor();
cursor.movePosition( QTextCursor::NextWord );
- setTextCursor( cursor );
- event->accept();
- return;
+ parent->setTextCursor( cursor );
+ return true;
} else if ( KStandardShortcut::next().contains( key ) ) {
- QTextCursor cursor = textCursor();
- int targetY = verticalScrollBar()->value() + viewport()->height();
+ QTextCursor cursor = parent->textCursor();
+ int targetY = parent->verticalScrollBar()->value() + parent->viewport()->height();
bool moved = false;
do {
moved = cursor.movePosition( QTextCursor::Down );
- setTextCursor( cursor );
- } while ( moved && verticalScrollBar()->value() < targetY );
- event->accept();
- return;
+ parent->setTextCursor( cursor );
+ } while ( moved && parent->verticalScrollBar()->value() < targetY );
+ return true;
} else if ( KStandardShortcut::prior().contains( key ) ) {
- QTextCursor cursor = textCursor();
- int targetY = verticalScrollBar()->value() - viewport()->height();
+ QTextCursor cursor = parent->textCursor();
+ int targetY = parent->verticalScrollBar()->value() - parent->viewport()->height();
bool moved = false;
do {
moved = cursor.movePosition( QTextCursor::Up );
- setTextCursor( cursor );
- } while ( moved && verticalScrollBar()->value() > targetY );
- event->accept();
- return;
+ parent->setTextCursor( cursor );
+ } while ( moved && parent->verticalScrollBar()->value() > targetY );
+ return true;
} else if ( KStandardShortcut::begin().contains( key ) ) {
- QTextCursor cursor = textCursor();
+ QTextCursor cursor = parent->textCursor();
cursor.movePosition( QTextCursor::Start );
- setTextCursor( cursor );
- event->accept();
- return;
+ parent->setTextCursor( cursor );
+ return true;
} else if ( KStandardShortcut::end().contains( key ) ) {
- QTextCursor cursor = textCursor();
+ QTextCursor cursor = parent->textCursor();
cursor.movePosition( QTextCursor::End );
- setTextCursor( cursor );
- event->accept();
- return;
+ parent->setTextCursor( cursor );
+ return true;
} else if ( KStandardShortcut::beginningOfLine().contains( key ) ) {
- QTextCursor cursor = textCursor();
+ QTextCursor cursor = parent->textCursor();
cursor.movePosition( QTextCursor::StartOfLine );
- setTextCursor( cursor );
- event->accept();
- return;
+ parent->setTextCursor( cursor );
+ return true;
} else if ( KStandardShortcut::endOfLine().contains( key ) ) {
- QTextCursor cursor = textCursor();
+ QTextCursor cursor = parent->textCursor();
cursor.movePosition( QTextCursor::EndOfLine );
- setTextCursor( cursor );
- event->accept();
- return;
+ parent->setTextCursor( cursor );
+ return true;
} else if ( KStandardShortcut::pasteSelection().contains( key ) ) {
QString text = QApplication::clipboard()->text( QClipboard::Selection );
if ( !text.isEmpty() )
- insertPlainText( text ); // TODO: check if this is html? (MiB)
- event->accept();
- return;
+ parent->insertPlainText( text ); // TODO: check if this is html? (MiB)
+ return true;
} else if ( event->modifiers() == Qt::ControlModifier &&
(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) &&
- qobject_cast<KDialog*>( topLevelWidget() ) ) {
+ qobject_cast<KDialog*>( parent->topLevelWidget() ) ) {
// ignore Ctrl-Return so that KDialogs can close the dialog
- event->ignore();
- return;
+ return true;
}
-
- QTextEdit::keyPressEvent( event );
+ return false;
}
void KTextEdit::deleteWordBack()
@@ -457,4 +457,9 @@
setTextCursor (cursor);
}
+void KTextEdit::keyPressEvent( QKeyEvent *event )
+{
+ QTextEdit::keyPressEvent(event);
+}
+
#include "ktextedit.moc"
--- branches/KDE/4.0/kdelibs/kdeui/widgets/ktextedit.h #813319:813320
@@ -166,8 +166,13 @@
protected:
/**
- * Reimplemented to catch "delete word" key events.
+ * Reimplemented to catch "delete word" shortcut events.
*/
+ virtual bool event(QEvent*);
+
+ /**
+ * Reimplemented for internal reasons
+ */
virtual void keyPressEvent( QKeyEvent* );
/**
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic