Dear all,
a recent bugfix commit gives unexpected behaviour wrt the tab key &
autocompletion in krunner (due to a long-standing issue in handling of the TAB
key in krunner)
This is possibly a very visible bug, although I won't call it critical.
I attach here a patch to revert the commit, the issue needs more testing and a
better overall approach.
I am unsure if there ever will be a patch-release for 4.2.3, but if so please
consider applying this patch.
Thanks all
Jacopo De Simoi
Index: interface.cpp
===================================================================
--- interface.cpp (revision 961314)
+++ interface.cpp (working copy)
@@ -120,13 +120,13 @@
KLineEdit *lineEdit = new KLineEdit(m_searchTerm);
QAction *focusEdit = new QAction(this);
focusEdit->setShortcut(Qt::Key_F6);
-
+
// in therory, the widget should detect the direction from the content
// but this is not available in Qt4.4/KDE 4.2, so the best default for this widget
// is LTR: as it's more or less a "command line interface"
// FIXME remove this code when KLineEdit has automatic direction detection of the "paragraph"
m_searchTerm->setLayoutDirection( Qt::LeftToRight );
-
+
connect(focusEdit, SIGNAL(triggered(bool)), lineEdit, SLOT(setFocus()));
addAction(focusEdit);
@@ -179,7 +179,7 @@
m_resultsView->setAlignment(Qt::AlignLeft | Qt::AlignTop);
//kDebug() << "size:" << m_resultsView->size() << m_resultsView->minimumSize();
- m_resultsScene = new ResultScene(runnerManager, m_searchTerm, this);
+ m_resultsScene = new ResultScene(runnerManager, this);
m_resultsView->setScene(m_resultsScene);
m_resultsView->setMinimumSize(m_resultsScene->minimumSizeHint());
connect(m_resultsScene, SIGNAL(matchCountChanged(int)), this, SLOT(matchCountChanged(int)));
Index: resultscene.h
===================================================================
--- resultscene.h (revision 961314)
+++ resultscene.h (working copy)
@@ -45,7 +45,7 @@
Q_OBJECT
public:
- explicit ResultScene(Plasma::RunnerManager *runnerManager, QWidget * focusBase, QObject *parent = 0);
+ explicit ResultScene(Plasma::RunnerManager *runnerManager, QObject *parent = 0);
~ResultScene();
void resize(int width, int height);
@@ -80,7 +80,6 @@
private:
ResultItem* addQueryMatch(const Plasma::QueryMatch &match, bool useAnyId);
void performResize(int width, int height);
- bool canMoveItemFocus() const;
Plasma::RunnerManager *m_runnerManager;
@@ -106,8 +105,6 @@
uint m_currentPage;
Plasma::FrameSvg *m_frame;
- QWidget *m_focusBase;
-
private slots:
void layoutIcons();
void slotArrowResultItemPressed();
Index: resultscene.cpp
===================================================================
--- resultscene.cpp (revision 961314)
+++ resultscene.cpp (working copy)
@@ -41,15 +41,14 @@
#include "resultitem.h"
-ResultScene::ResultScene(Plasma::RunnerManager *manager, QWidget * focusBase, QObject *parent)
+ResultScene::ResultScene(Plasma::RunnerManager *manager, QObject *parent)
: QGraphicsScene(parent),
m_runnerManager(manager),
m_cIndex(0),
m_rowStride(0),
m_pageStride(0),
m_pageCount(0),
- m_currentPage(0),
- m_focusBase(focusBase)
+ m_currentPage(0)
{
setItemIndexMethod(NoIndex);
@@ -123,15 +122,6 @@
emit matchCountChanged(0);
}
-bool ResultScene::canMoveItemFocus() const
-{
- // We prevent a late query result from stealing the item focus from the user
- // The item focus can be moved only if the focusBase widget (the khistorycombobox)
- // has focus (i.e. the user is still typing or waiting) or if there is no item currently focused
-
- return m_focusBase->hasFocus() || (!focusItem());
-}
-
void ResultScene::setQueryMatches(const QList<Plasma::QueryMatch> &m)
{
// kDebug() << "============================" << endl << "matches retrieved: " << m.count();
@@ -194,15 +184,15 @@
item->setIndex(i);
// it is vital that focus is set *after* the index
- if (i == 0 && canMoveItemFocus()) {
+ if (i == 0) {
setFocusItem(item);
- emit itemHoverEnter(item);
}
++i;
tab = item;
}
+ emit itemHoverEnter(m_items.at(0));
}
ResultItem* ResultScene::addQueryMatch(const Plasma::QueryMatch &match, bool useAnyId)
_______________________________________________
release-team mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/release-team