=== modified file 'src/Ubuntu/Components/plugin/uclistitem.cpp'
--- src/Ubuntu/Components/plugin/uclistitem.cpp	2015-07-30 13:27:32 +0000
+++ src/Ubuntu/Components/plugin/uclistitem.cpp	2015-08-31 07:54:47 +0000
@@ -372,23 +372,13 @@
                 (parentItem ? QQuickItemPrivate::get(parentItem)->childItems.indexOf(q) : -1);
 }
 
-// returns true if the highlight is possible
-bool UCListItemPrivate::canHighlight(QMouseEvent *event)
+// returns true if the highlight is possible; the highlight is possible if the
+// list item has at least one action, leading/trailing actions set, onClicked
+// or onPressAndHold signal handlers set
+bool UCListItemPrivate::canHighlight()
 {
-    // if automatic, the highlight should not happen if we clicked on an active component;
-    // localPos is a position relative to ListItem which will give us a child from
-    // from the original coordinates; therefore we must map the position to the contentItem
    Q_Q(UCListItem);
-   QPointF myPos = q->mapToItem(contentItem, event->localPos());
-   QQuickItem *child = contentItem->childAt(myPos.x(), myPos.y());
-   bool activeComponent = child && (child->acceptedMouseButtons() & event->button()) &&
-           child->isEnabled() && !qobject_cast<QQuickText*>(child);
-   // do highlight if not pressed above the active component, and the component has either
-   // action, leading or trailing actions list or at least an active child component declared
-   QQuickMouseArea *ma = q->findChild<QQuickMouseArea*>();
-   bool activeMouseArea = ma && ma->isEnabled();
-   return !activeComponent && (isClickedConnected() || isPressAndHoldConnected() ||
-                               mainAction || leadingActions || trailingActions || activeMouseArea);
+   return (isClickedConnected() || isPressAndHoldConnected() || mainAction || leadingActions || trailingActions);
 }
 
 // set highlighted flag and update contentItem
@@ -1081,7 +1071,7 @@
         // while moving, we cannot select any items
         return;
     }
-    if (d->canHighlight(event) && !d->highlighted && event->button() == Qt::LeftButton) {
+    if (d->canHighlight() && !d->highlighted && event->button() == Qt::LeftButton) {
         d->grabLeftButtonEvents(event);
     }
     // accept the event so we get the rest of the events as well

=== modified file 'src/Ubuntu/Components/plugin/uclistitem_p.h'
--- src/Ubuntu/Components/plugin/uclistitem_p.h	2015-07-30 13:27:32 +0000
+++ src/Ubuntu/Components/plugin/uclistitem_p.h	2015-08-31 07:54:47 +0000
@@ -60,7 +60,7 @@
     void _q_syncSelectMode();
     void _q_syncDragMode();
     int index();
-    bool canHighlight(QMouseEvent *event);
+    bool canHighlight();
     void setHighlighted(bool pressed);
     void listenToRebind(bool listen);
     void lockContentItem(bool lock);

=== modified file 'tests/unit_x11/tst_components/ListItemTestCase.qml'
--- tests/unit_x11/tst_components/ListItemTestCase.qml	2015-07-31 06:55:59 +0000
+++ tests/unit_x11/tst_components/ListItemTestCase.qml	2015-08-31 07:54:47 +0000
@@ -34,6 +34,7 @@
         if (item.hasOwnProperty("leadingActions")) {
             signalSpy.target = item;
             signalSpy.signalName = signalName;
+            signalSpy.clear();
         }
     }
     // wait on the previosuly set up spy

=== modified file 'tests/unit_x11/tst_components/tst_listitem_extras.qml'
--- tests/unit_x11/tst_components/tst_listitem_extras.qml	2015-08-04 20:09:10 +0000
+++ tests/unit_x11/tst_components/tst_listitem_extras.qml	2015-08-31 07:54:47 +0000
@@ -68,10 +68,22 @@
                 anchors.centerIn: parent
             }
         }
+
+        ListItem {
+            id: overlaidMouseArea
+            leadingActions: leading
+            trailingActions: trailing
+            property bool acceptEvent
+            MouseArea {
+                id: overlayArea
+                anchors.fill: parent
+                onPressed: mouse.accepted = overlaidMouseArea.acceptEvent
+            }
+        }
     }
 
     ListItemTestCase {
-
+        name: "ListItemExtras"
         SignalSpy {
             id: clickSpy
             signalName: "clicked"
@@ -79,6 +91,7 @@
 
         function cleanup() {
             rebound(testWithActiveItem);
+            rebound(overlaidMouseArea);
             clickSpy.target = null;
             clickSpy.clear();
         }
@@ -88,5 +101,18 @@
             swipe(activeItem, centerOf(activeItem).x, centerOf(activeItem).y, units.gu(10));
             compare(clickSpy.count, 0, "activeItem was clicked");
         }
+
+        function test_swipe_over_mousearea_not_accepting_press_data() {
+            return [
+                {tag: "Accept events", accept: true},
+                {tag: "Do not accept events", accept: false},
+            ];
+        }
+        function test_swipe_over_mousearea_not_accepting_press(data) {
+            overlaidMouseArea.acceptEvent = data.accept;
+            setupSpy(overlaidMouseArea, "contentMovementEnded");
+            swipeNoWait(overlayArea, centerOf(overlayArea).x, centerOf(overlayArea).y, units.gu(10));
+            spyWait();
+        }
     }
 }

