diff --git a/beeref/scene.py b/beeref/scene.py index 9957b5f..959bdb4 100644 --- a/beeref/scene.py +++ b/beeref/scene.py @@ -125,7 +125,7 @@ class BeeGraphicsScene(QtWidgets.QGraphicsScene): self.event_start = event.scenePos() if self.itemAt(event.scenePos(), self.views()[0].transform()): self.move_active = True - else: + elif self.items(): self.rubberband_active = True super().mousePressEvent(event) diff --git a/tests/test_scene.py b/tests/test_scene.py index b7f7121..90fd652 100644 --- a/tests/test_scene.py +++ b/tests/test_scene.py @@ -186,6 +186,8 @@ class BeeGraphicsSceneTestCase(BeeTestCase): @patch('PyQt6.QtWidgets.QGraphicsScene.mousePressEvent') def test_mouse_press_event_when_left_click_not_over_item(self, mouse_mock): + item = BeePixmapItem(QtGui.QImage()) + self.scene.addItem(item) self.scene.itemAt = MagicMock(return_value=None) event = MagicMock( button=MagicMock(return_value=Qt.MouseButtons.LeftButton), @@ -198,6 +200,20 @@ class BeeGraphicsSceneTestCase(BeeTestCase): assert self.scene.rubberband_active is True assert self.scene.event_start == QtCore.QPointF(10, 20) + @patch('PyQt6.QtWidgets.QGraphicsScene.mousePressEvent') + def test_mouse_press_event_when_no_items(self, mouse_mock): + self.scene.itemAt = MagicMock(return_value=None) + event = MagicMock( + button=MagicMock(return_value=Qt.MouseButtons.LeftButton), + scenePos=MagicMock(return_value=QtCore.QPointF(10, 20)), + ) + self.scene.mousePressEvent(event) + event.accept.assert_not_called() + mouse_mock.assert_called_once_with(event) + assert self.scene.move_active is False + assert self.scene.rubberband_active is False + mouse_mock.assert_called_once_with(event) + @patch('PyQt6.QtWidgets.QGraphicsScene.mouseDoubleClickEvent') def test_mouse_doubleclick_event_when_over_item(self, mouse_mock): event = MagicMock()