Correctly handle overlapping graphicsitems
authorManuel Nickschas <sputnick@quassel-irc.org>
Thu, 17 Jun 2010 08:25:23 +0000 (10:25 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 17 Jun 2010 08:26:49 +0000 (10:26 +0200)
ChatScene::chatItemAt() didn't cope with overlapping items (since we didn't
have overlapping items before). Now that we introduced the new markerline,
mouse events would be eaten by it.

Fix0red.

src/qtui/chatscene.cpp

index 46cfc3e..d78ee1c 100644 (file)
@@ -187,9 +187,11 @@ ChatLine *ChatScene::chatLine(MsgId msgId, bool matchExact) const {
 }
 
 ChatItem *ChatScene::chatItemAt(const QPointF &scenePos) const {
-  ChatLine *line = qgraphicsitem_cast<ChatLine*>(itemAt(scenePos));
-  if(line)
-    return line->itemAt(line->mapFromScene(scenePos));
+  foreach(QGraphicsItem *item, items(scenePos, Qt::IntersectsItemBoundingRect, Qt::AscendingOrder)) {
+    ChatLine *line = qgraphicsitem_cast<ChatLine*>(item);
+    if(line)
+      return line->itemAt(line->mapFromScene(scenePos));
+  }
   return 0;
 }