Properly determine if mouse cursor is over selection in all cases
authorManuel Nickschas <sputnick@quassel-irc.org>
Mon, 17 Nov 2008 01:09:11 +0000 (02:09 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 20 Nov 2008 14:35:37 +0000 (15:35 +0100)
src/qtui/chatscene.cpp
src/qtui/chatscene.h

index 9d1e04a..af6ddc3 100644 (file)
@@ -555,7 +555,7 @@ bool ChatScene::isPosOverSelection(const QPointF &pos) const {
   if(hasGlobalSelection()) {
     int row = chatItem->row();
     if(row >= qMin(_selectionStart, _selectionEnd) && row <= qMax(_selectionStart, _selectionEnd))
-      return true;
+      return columnByScenePos(pos) >= _selectionMinCol;
   } else {
     return chatItem->isPosOverSelection(chatItem->mapFromScene(pos));
   }
@@ -766,7 +766,7 @@ void ChatScene::requestBacklog() {
   return;
 }
 
-ChatLineModel::ColumnType ChatScene::columnByScenePos(qreal x) {
+ChatLineModel::ColumnType ChatScene::columnByScenePos(qreal x) const {
   if(x < _firstColHandle->x())
     return ChatLineModel::TimestampColumn;
   if(x < _secondColHandle->x())
@@ -775,7 +775,7 @@ ChatLineModel::ColumnType ChatScene::columnByScenePos(qreal x) {
   return ChatLineModel::ContentsColumn;
 }
 
-int ChatScene::rowByScenePos(qreal y) {
+int ChatScene::rowByScenePos(qreal y) const {
   // This is somewhat hacky... we look at the contents item that is at the given y position, since
   // it has the full height. From this item, we can then determine the row index and hence the ChatLine.
   // ChatItems cover their ChatLine, so we won't get to the latter directly.
index 1c64109..12fc8c0 100644 (file)
@@ -74,10 +74,10 @@ public:
   inline QAbstractItemModel *model() const { return _model; }
   inline QString idString() const { return _idString; }
 
-  int rowByScenePos(qreal y);
-  inline int rowByScenePos(const QPointF &pos) { return rowByScenePos(pos.y()); }
-  ChatLineModel::ColumnType columnByScenePos(qreal x);
-  inline ChatLineModel::ColumnType columnByScenePos(const QPointF &pos) { return columnByScenePos(pos.x()); }
+  int rowByScenePos(qreal y) const;
+  inline int rowByScenePos(const QPointF &pos) const { return rowByScenePos(pos.y()); }
+  ChatLineModel::ColumnType columnByScenePos(qreal x) const ;
+  inline ChatLineModel::ColumnType columnByScenePos(const QPointF &pos) const { return columnByScenePos(pos.x()); }
 
   ChatView *chatView() const;
   ChatItem *chatItemAt(const QPointF &pos) const;