Index: workspace/libs/plasma/delegate.cpp
===================================================================
--- workspace/libs/plasma/delegate.cpp	(revisión: 792004)
+++ workspace/libs/plasma/delegate.cpp	(copia de trabajo)
@@ -190,7 +190,7 @@ QRect Delegate::emptyRect(const QStyleOp
 
 void Delegate::paint(QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
 {
-    const bool hover = option.state & (QStyle::State_Selected|QStyle::State_MouseOver|QStyle::State_HasFocus);
+    const bool hover = option.state & (QStyle::State_MouseOver | QStyle::State_Selected);
 
     QRect contentRect = option.rect;
     contentRect.setBottom(contentRect.bottom() - 1);
@@ -233,73 +233,13 @@ void Delegate::paint(QPainter *painter, 
     QFont titleFont(option.font);
 
     if (hover) {
-        painter->save();
-        painter->setRenderHint(QPainter::Antialiasing);
-
-        const int column = index.column();
-        const int columns = index.model()->columnCount();
-        const int roundedRadius = 5;
-
-        // use a slightly translucent version of the palette's highlight color
-        // for the background
-        QColor backgroundColor = option.palette.color(QPalette::Highlight);
-        backgroundColor.setAlphaF(0.2);
-
-        QColor backgroundColor2 = option.palette.color(QPalette::Highlight);
-        backgroundColor.setAlphaF(0.5);
-
-        QRect highlightRect = option.rect.adjusted(2, 2, -2, -2);
-
-        QPen outlinePen(backgroundColor, 2);
-
-        if (column == 0) {
-            //clip right (or left for rtl languages) to make the connection with the next column
-            if (columns > 1) {
-                if (option.direction == Qt::LeftToRight) {
-                    painter->setClipRect(option.rect.adjusted(0, 0, ITEM_RIGHT_MARGIN, 0));
-                    highlightRect.adjust(0, 0, ITEM_RIGHT_MARGIN+roundedRadius, 0);
-                } else {
-                    painter->setClipRect(option.rect.adjusted(-ITEM_LEFT_MARGIN, 0, 0, 0));
-                    highlightRect.adjust(-ITEM_LEFT_MARGIN-roundedRadius, 0, 0, 0);
-                }
-            }
-
-            QLinearGradient gradient(highlightRect.topLeft(), highlightRect.topRight());
-
-            //reverse the gradient
-            if (option.direction == Qt::RightToLeft) {
-                gradient.setStart(highlightRect.topRight());
-                gradient.setFinalStop(highlightRect.topLeft());
-            }
-
-            gradient.setColorAt(0, backgroundColor);
-
-            gradient.setColorAt(((qreal)titleRect.width()/3.0) / (qreal)highlightRect.width(), backgroundColor2);
-
-            gradient.setColorAt(0.7, backgroundColor);
-
-            outlinePen.setBrush(gradient);
-
-        //last column, clip left (right for rtl)
-        } else if (column == columns-1) {
-            if (option.direction == Qt::LeftToRight) {
-                painter->setClipRect(option.rect.adjusted(-ITEM_LEFT_MARGIN, 0, 0, 0));
-                highlightRect.adjust(-ITEM_LEFT_MARGIN-roundedRadius, 0, 0, 0);
-            } else {
-                painter->setClipRect(option.rect.adjusted(0, 0, ITEM_RIGHT_MARGIN, 0));
-                highlightRect.adjust(0, 0, ITEM_RIGHT_MARGIN+roundedRadius, 0);
-            }
-
-        //column < columns-1; clip both ways
-        } else {
-            painter->setClipRect(option.rect.adjusted(-ITEM_LEFT_MARGIN, 0, ITEM_RIGHT_MARGIN, 0));
-            highlightRect.adjust(-ITEM_LEFT_MARGIN-roundedRadius, 0, ITEM_RIGHT_MARGIN+roundedRadius, 0);
-        }
-
-        painter->setPen(outlinePen);
-        painter->drawPath(Plasma::roundedRectangle(highlightRect, roundedRadius));
-
-        painter->restore();
+        QStyleOptionViewItemV4 viewOption(option);
+        viewOption.viewItemPosition = QStyleOptionViewItemV4::OnlyOne;
+#if 0
+not active always !
+        viewOption.state |= QStyle::State_Active;
+#endif
+        QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewOption, painter, 0);
     }
 
     // draw icon
@@ -330,9 +270,17 @@ void Delegate::paint(QPainter *painter, 
     // draw title
     if (hover) {
       titleFont.setBold(true);
+#if 0
+not highlight !
+        painter->setPen(option.palette.highlightedText().color());
+#endif
+        painter->save();
     }
     painter->setFont(titleFont);
     painter->drawText(titleRect, Qt::AlignLeft|Qt::AlignVCenter, titleText);
+    if (hover) {
+        painter->restore();
+    }
 
     if (hover || !uniqueTitle) {
         // draw sub-title, BUT only if:
@@ -347,7 +295,17 @@ void Delegate::paint(QPainter *painter, 
         // required to understand the item itself and that showing all the subtexts in a
         // listing makes the information density very high, impacting both the speed at
         // which one can scan the list visually and the aesthetic qualities of the listing.
+#if 0
+not active always !
+        if (hover) {
+            painter->setPen(QPen(KColorScheme(QPalette::Active).shade(option.palette.highlightedText().color(), KColorScheme::MidlightShade), 1));
+        } else {
+#else
         painter->setPen(QPen(KColorScheme(QPalette::Active).foreground(KColorScheme::InactiveText), 1));
+#endif
+#if 0
+        }
+#endif
         painter->setFont(subTitleFont);
         painter->drawText(subTitleRect, Qt::AlignLeft|Qt::AlignVCenter, "  " + subTitleText);
     }
Index: workspace/plasma/applets/kickoff/core/searchmodel.cpp
===================================================================
--- workspace/plasma/applets/kickoff/core/searchmodel.cpp	(revisión: 792004)
+++ workspace/plasma/applets/kickoff/core/searchmodel.cpp	(copia de trabajo)
@@ -74,6 +74,10 @@ SearchModel::SearchModel(QObject *parent
                 this,SLOT(resultsAvailable(QStringList)));
         connect(iface,SIGNAL(resultsAvailable(ResultList)),
                 this,SLOT(resultsAvailable(ResultList)));
+        connect(iface,SIGNAL(resultsAvailable(QStringList)),
+                this,SIGNAL(resultsAvailable()));
+        connect(iface,SIGNAL(resultsAvailable(ResultList)),
+                this,SIGNAL(resultsAvailable()));
     }
 }
 SearchModel::~SearchModel()
Index: workspace/plasma/applets/kickoff/core/searchmodel.h
===================================================================
--- workspace/plasma/applets/kickoff/core/searchmodel.h	(revisión: 792004)
+++ workspace/plasma/applets/kickoff/core/searchmodel.h	(copia de trabajo)
@@ -50,6 +50,9 @@ private Q_SLOTS:
     void resultsAvailable(const QStringList& results);
     void resultsAvailable(const ResultList& results);
 
+Q_SIGNALS:
+    void resultsAvailable();
+
 private:
     class Private;
     Private * const d;
Index: workspace/plasma/applets/kickoff/ui/launcher.cpp
===================================================================
--- workspace/plasma/applets/kickoff/ui/launcher.cpp	(revisión: 792004)
+++ workspace/plasma/applets/kickoff/ui/launcher.cpp	(copia de trabajo)
@@ -80,6 +80,7 @@ public:
         , applet(0)
         , urlLauncher(new UrlItemLauncher(launcher))
         , resizeHandle(0)
+        , searchModel(0)
         , searchBar(0)
         , footer(0)
         , contentArea(0)
@@ -228,21 +229,23 @@ public:
 
     void setupSearchView()
     {
-        SearchModel *model = new SearchModel(q);
+        searchModel = new SearchModel(q);
         UrlItemView *view = new UrlItemView;
         ItemDelegate *delegate = new ItemDelegate;
         delegate->setRole(Plasma::Delegate::SubTitleRole, SubTitleRole);
         delegate->setRole(Plasma::Delegate::SubTitleMandatoryRole, SubTitleMandatoryRole);
         view->setItemDelegate(delegate);
         view->setItemStateProvider(delegate);
-        view->setModel(model);
+        view->setModel(searchModel);
         view->setFrameStyle(QFrame::NoFrame);
         // prevent view from stealing focus from the search bar
         view->setFocusPolicy(Qt::NoFocus);
         view->setDragEnabled(true);
         setupEventHandler(view);
 
-        connect(searchBar, SIGNAL(queryChanged(QString)), model, SLOT(setQuery(QString)));
+        connect(searchModel, SIGNAL(resultsAvailable()), q, SLOT(resultsAvailable()));
+
+        connect(searchBar, SIGNAL(queryChanged(QString)), searchModel, SLOT(setQuery(QString)));
         connect(searchBar, SIGNAL(queryChanged(QString)), q, SLOT(focusSearchView(QString)));
 
         view->setContextMenuPolicy(Qt::CustomContextMenu);
@@ -410,6 +413,7 @@ public:
     Plasma::Applet *applet;
     UrlItemLauncher *urlLauncher;
     ResizeHandle *resizeHandle;
+    SearchModel *searchModel;
     SearchBar *searchBar;
     QWidget *footer;
     QStackedWidget *contentArea;
@@ -701,7 +705,11 @@ Launcher::~Launcher()
 
 void Launcher::focusSearchView(const QString& query)
 {
-    if (!query.isEmpty()) {
+    bool queryEmpty = query.isEmpty();
+
+    d->contentSwitcher->setVisible(queryEmpty);
+
+    if (!queryEmpty) {
         d->contentArea->setCurrentWidget(d->searchView);
     } else {
         focusFavoritesView();
@@ -862,6 +870,12 @@ void Launcher::openHomepage()
     KToolInvocation::invokeBrowser("http://www.kde.org/");
 }
 
+void Launcher::resultsAvailable()
+{
+    const QModelIndex root = d->searchModel->index(0, 0);
+    d->searchView->setCurrentIndex(d->searchModel->index(0, 0, root));
+}
+
 void Launcher::setLauncherOrigin( QPoint origin, Plasma::Location location )
 {
 /* 8 interesting positions for the menu to popup, depending where
Index: workspace/plasma/applets/kickoff/ui/flipscrollview.cpp
===================================================================
--- workspace/plasma/applets/kickoff/ui/flipscrollview.cpp	(revisión: 792004)
+++ workspace/plasma/applets/kickoff/ui/flipscrollview.cpp	(copia de trabajo)
@@ -180,8 +180,7 @@ public:
     void drawBackArrow(QPainter *painter,QStyle::State state)
     {
         painter->save();
-        if (state & QStyle::State_MouseOver &&
-                state & QStyle::State_Enabled) {
+        if (state & QStyle::State_MouseOver) {
             painter->setBrush(q->palette().highlight());
         } else {
             painter->setBrush(q->palette().mid());
@@ -295,6 +294,7 @@ QModelIndex FlipScrollView::indexAt(cons
     int rowIndex = (point.y() - topOffset) / itemHeight();
 
     QRect itemRect = rect();
+    itemRect.setTop(itemRect.top() + topOffset);
     itemRect.setLeft(d->backArrowRect().right() + ItemDelegate::BACK_ARROW_SPACING);
 
     if (rowIndex < items && itemRect.contains(point)) {
@@ -411,13 +411,17 @@ QModelIndex FlipScrollView::moveCursor(C
    // kDebug() << "Moving cursor with current index" << index.data(Qt::DisplayRole);
     switch (cursorAction) {
         case MoveUp:
-                if (currentIndex().row() > 0) {
+                if (!currentIndex().isValid()) {
+                    index = model()->index(model()->rowCount(d->currentRoot()) - 1, 0, d->currentRoot());
+                } else if (currentIndex().row() > 0) {
                     index = currentIndex().sibling(currentIndex().row()-1,
                                                    currentIndex().column());
                 }
             break;
         case MoveDown:
-                if (currentIndex().row() <
+                if (!currentIndex().isValid()) {
+                    index = model()->index(0, 0, d->currentRoot());
+                } else if (currentIndex().row() <
                         model()->rowCount(currentIndex().parent())-1 ) {
                     index = currentIndex().sibling(currentIndex().row()+1,
                                                    currentIndex().column());
@@ -451,14 +455,6 @@ QModelIndex FlipScrollView::moveCursor(C
     return index;
 }
 
-void FlipScrollView::setModel(QAbstractItemModel *model)
-{
-    QAbstractItemView::setModel(model);
-    if (model) {
-        setCurrentIndex(model->index(0,0));
-    }
-}
-
 void FlipScrollView::setSelection(const QRect& rect , QItemSelectionModel::SelectionFlags flags)
 {
     QItemSelection selection;
@@ -507,7 +503,7 @@ void FlipScrollView::mouseMoveEvent(QMou
         setDirtyRegion(d->backArrowRect());
     } else {
         const QModelIndex itemUnderMouse = indexAt(event->pos());
-        if (itemUnderMouse != d->hoveredIndex && itemUnderMouse.isValid()) {
+        if (itemUnderMouse != d->hoveredIndex) {
             update(itemUnderMouse);
             update(d->hoveredIndex);
 
@@ -538,6 +534,12 @@ void FlipScrollView::keyPressEvent(QKeyE
     QAbstractItemView::keyPressEvent(event);
 }
 
+void FlipScrollView::leaveEvent(QEvent *event)
+{
+    d->hoveredIndex = QModelIndex();
+    setCurrentIndex(QModelIndex());
+}
+
 void FlipScrollView::paintItems(QPainter &painter, QPaintEvent *event, QModelIndex &root)
 {
     const int rows = model()->rowCount(root);
@@ -572,12 +574,11 @@ void FlipScrollView::paintItems(QPainter
         if (model()->hasChildren(index)) {
             painter.save();
             painter.setPen(Qt::NoPen);
-
             // there is an assumption made here that the delegate will fill the background
             // with the selected color or some similar color which contrasts well with the
             // highlighted text color
-            if (option.state & (QStyle::State_Selected|QStyle::State_MouseOver)) {
-                painter.setBrush(palette().highlight());
+            if (option.state & QStyle::State_MouseOver) {
+                painter.setBrush(palette().highlightedText());
             } else {
                 painter.setBrush(palette().text());
             }
Index: workspace/plasma/applets/kickoff/ui/launcher.h
===================================================================
--- workspace/plasma/applets/kickoff/ui/launcher.h	(revisión: 792004)
+++ workspace/plasma/applets/kickoff/ui/launcher.h	(copia de trabajo)
@@ -93,6 +93,7 @@ private Q_SLOTS:
     void showViewContextMenu(const QPoint& pos);
     void focusFavoritesView();
     void openHomepage();
+    void resultsAvailable();
 
 private:
     void init();
Index: workspace/plasma/applets/kickoff/ui/flipscrollview.h
===================================================================
--- workspace/plasma/applets/kickoff/ui/flipscrollview.h	(revisión: 792004)
+++ workspace/plasma/applets/kickoff/ui/flipscrollview.h	(copia de trabajo)
@@ -58,7 +58,6 @@ public:
     virtual void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible);
     virtual QRect visualRect(const QModelIndex& index) const;
 
-    virtual void setModel(QAbstractItemModel *model);
     int itemHeight() const;
 
 protected:
@@ -68,6 +67,7 @@ protected:
     virtual void mouseReleaseEvent(QMouseEvent *event);
     virtual void resizeEvent(QResizeEvent *event);
     virtual void keyPressEvent(QKeyEvent *event);
+    virtual void leaveEvent(QEvent *event);
 
     // reimplemented from QAbstractItemView 
     virtual bool isIndexHidden(const QModelIndex& index) const;
Index: workspace/plasma/applets/kickoff/ui/urlitemview.cpp
===================================================================
--- workspace/plasma/applets/kickoff/ui/urlitemview.cpp	(revisión: 792004)
+++ workspace/plasma/applets/kickoff/ui/urlitemview.cpp	(copia de trabajo)
@@ -301,11 +301,6 @@ void UrlItemView::updateLayout()
 {
     d->doLayout();
 
-    if (!d->visualOrder.contains(currentIndex())) {
-        // select the first valid index
-        setCurrentIndex(moveCursor(MoveDown,0)); 
-    }
-
     if (viewport()->isVisible()) {
         viewport()->update();
     }
@@ -376,24 +371,30 @@ QModelIndex UrlItemView::moveCursor(Curs
 
     switch (cursorAction) {
         case MoveUp:
+                if (!currentIndex().isValid()) {
+                    const QModelIndex root = model()->index(0, 0);
+                    index = model()->index(model()->rowCount(root) - 1, 0, root);
+                } else {
                 visualIndex = qMax(0,visualIndex-1); 
+                }
             break;
         case MoveDown:
+                if (!currentIndex().isValid()) {
+                    const QModelIndex root = model()->index(0, 0);
+                    index = model()->index(0, 0, root);
+                } else {
                 visualIndex = qMin(d->visualOrder.count()-1,visualIndex+1);
-            break;
-        case MoveLeft:
-        case MoveRight:
-                // do nothing
+                }
             break;
         default:
-
+                // Do nothing
             break;
     }
 
-    // when changing the current item with the keyboard, clear the mouse-over item
     d->hoveredIndex = QModelIndex();
 
-    return d->visualOrder.value(visualIndex,QModelIndex());
+    return currentIndex().isValid() ? d->visualOrder.value(visualIndex,QModelIndex())
+                                    : index;
 }
 
 void UrlItemView::setSelection(const QRect& rect,QItemSelectionModel::SelectionFlags flags)
@@ -466,8 +467,7 @@ void UrlItemView::resizeEvent(QResizeEve
 void UrlItemView::mouseMoveEvent(QMouseEvent *event)
 {
     const QModelIndex itemUnderMouse = indexAt(event->pos());
-    if (itemUnderMouse != d->hoveredIndex && itemUnderMouse.isValid() &&
-        state() == NoState) {
+    if (itemUnderMouse != d->hoveredIndex && state() == NoState) {
         update(itemUnderMouse);
         update(d->hoveredIndex);
 
@@ -508,6 +508,12 @@ void UrlItemView::dropEvent(QDropEvent *
     kDebug() << "UrlItemView drop event";
 }
 
+void UrlItemView::leaveEvent(QEvent *event)
+{
+    d->hoveredIndex = QModelIndex();
+    setCurrentIndex(QModelIndex());
+}
+
 ItemStateProvider *UrlItemView::itemStateProvider() const
 {
     return d->itemStateProvider;
Index: workspace/plasma/applets/kickoff/ui/urlitemview.h
===================================================================
--- workspace/plasma/applets/kickoff/ui/urlitemview.h	(revisión: 792004)
+++ workspace/plasma/applets/kickoff/ui/urlitemview.h	(copia de trabajo)
@@ -58,6 +58,7 @@ protected:
     virtual void resizeEvent(QResizeEvent *event);
     virtual void mouseMoveEvent(QMouseEvent *event);
     virtual void dropEvent(QDropEvent *event);
+    virtual void leaveEvent(QEvent *event);
 
 private Q_SLOTS:
     // lays out all items in the view and sets the current index to the first
