diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e4e1eb8..b67c08c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,6 +21,8 @@ Fixed * Fixed a bug where the binary data of deleted images would still hang around in the bee file. +* Fixed: The shortcut to move the BeeRef window (Ctrl + Alt + Drag) + not working on an empty scene 0.3.0 - 2023-11-23 diff --git a/beeref/main_controls.py b/beeref/main_controls.py index 4626e34..122936e 100644 --- a/beeref/main_controls.py +++ b/beeref/main_controls.py @@ -33,12 +33,14 @@ class MainControlsMixin: * Dropping files """ - def init_main_controls(self): + def init_main_controls(self, main_window): + self.main_window = main_window self.setContextMenuPolicy( Qt.ContextMenuPolicy.CustomContextMenu) self.customContextMenuRequested.connect( self.control_target.on_context_menu) self.setAcceptDrops(True) + self.movewin_active = False def dragEnterEvent(self, event): mimedata = event.mimeData() @@ -76,3 +78,28 @@ def dropEvent(self, event): commands.InsertItems(self.control_target.scene, [item], pos)) else: logger.info('Drop not an image') + + def mousePressEventMainControls(self, event): + if (event.button() == Qt.MouseButton.LeftButton + and event.modifiers() == (Qt.KeyboardModifier.ControlModifier + | Qt.KeyboardModifier.AltModifier)): + self.movewin_active = True + self.event_start = self.mapToGlobal(event.position()) + event.accept() + return True + + def mouseMoveEventMainControls(self, event): + if self.movewin_active: + pos = self.mapToGlobal(event.position()) + delta = pos - self.event_start + self.event_start = pos + self.main_window.move(self.main_window.x() + int(delta.x()), + self.main_window.y() + int(delta.y())) + event.accept() + return True + + def mouseReleaseEventMainControls(self, event): + if self.movewin_active: + self.movewin_active = False + event.accept() + return True diff --git a/beeref/view.py b/beeref/view.py index 4d995e7..bed8e0a 100644 --- a/beeref/view.py +++ b/beeref/view.py @@ -61,7 +61,6 @@ def __init__(self, app, parent=None): self.previous_transform = None self.pan_active = False self.zoom_active = False - self.movewin_active = False self.scene = BeeGraphicsScene(self.undo_stack) self.scene.changed.connect(self.on_scene_changed) @@ -71,7 +70,7 @@ def __init__(self, app, parent=None): # Context menu and actions self.build_menu_and_actions() self.control_target = self - self.init_main_controls() + self.init_main_controls(main_window=parent) # Load file given via command line if commandline_args.filename: @@ -646,14 +645,8 @@ def mousePressEvent(self, event): event.accept() return - if (event.button() == Qt.MouseButton.LeftButton - and event.modifiers() == (Qt.KeyboardModifier.ControlModifier - | Qt.KeyboardModifier.AltModifier)): - self.movewin_active = True - self.event_start = self.mapToGlobal(event.position()) - event.accept() + if self.mousePressEventMainControls(event): return - super().mousePressEvent(event) def mouseMoveEvent(self, event): @@ -674,15 +667,8 @@ def mouseMoveEvent(self, event): event.accept() return - if self.movewin_active: - pos = self.mapToGlobal(event.position()) - delta = pos - self.event_start - self.event_start = pos - self.parent.move(self.parent.x() + int(delta.x()), - self.parent.y() + int(delta.y())) - event.accept() + if self.mouseMoveEventMainControls(event): return - super().mouseMoveEvent(event) def mouseReleaseEvent(self, event): @@ -695,11 +681,8 @@ def mouseReleaseEvent(self, event): self.zoom_active = False event.accept() return - if self.movewin_active: - self.movewin_active = False - event.accept() + if self.mouseReleaseEventMainControls(event): return - super().mouseReleaseEvent(event) def resizeEvent(self, event): diff --git a/beeref/widgets/__init__.py b/beeref/widgets/__init__.py index d609b87..ff1402d 100644 --- a/beeref/widgets/__init__.py +++ b/beeref/widgets/__init__.py @@ -95,7 +95,7 @@ def __init__(self, parent): super().__init__(parent) self.control_target = parent self.setAttribute(Qt.WidgetAttribute.WA_NoSystemBackground) - self.init_main_controls() + self.init_main_controls(main_window=parent.parent) # Recent files self.files_layout = QtWidgets.QVBoxLayout() @@ -123,6 +123,21 @@ def show(self): self.layout.insertLayout(0, self.files_layout) super().show() + def mousePressEvent(self, event): + if self.mousePressEventMainControls(event): + return + super().mousePressEvent(event) + + def mouseMoveEvent(self, event): + if self.mouseMoveEventMainControls(event): + return + super().mouseMoveEvent(event) + + def mouseReleaseEvent(self, event): + if self.mouseReleaseEventMainControls(event): + return + super().mouseReleaseEvent(event) + class BeeProgressDialog(QtWidgets.QProgressDialog):