src/eric7/Snapshot/SnapshotWaylandGrabber.py

Fri, 04 Nov 2022 13:52:26 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 04 Nov 2022 13:52:26 +0100
branch
eric7
changeset 9473
3f23dbf37dbe
parent 9413
80c06d472826
child 9482
a2bc06a54d9d
permissions
-rw-r--r--

Resorted the import statements using isort.

6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
8881
54e42bc2437a Updated copyright for 2022.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8358
diff changeset
3 # Copyright (c) 2019 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a grabber object for non-Wayland desktops.
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
10 import contextlib
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import os
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import uuid
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
14 from PyQt6.QtCore import QObject, QTimer, pyqtSignal
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
15 from PyQt6.QtGui import QCursor, QPixmap
8318
962bce857696 Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
16 from PyQt6.QtWidgets import QApplication
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 try:
8318
962bce857696 Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
19 from PyQt6.QtDBus import QDBusInterface, QDBusMessage
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
20
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 DBusAvailable = True
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 except ImportError:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 DBusAvailable = False
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
25 from eric7 import Globals
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
26 from eric7.EricWidgets import EricMessageBox
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 from .SnapshotModes import SnapshotModes
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 class SnapshotWaylandGrabber(QObject):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 Class implementing a grabber object for non-Wayland desktops.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
34
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @signal grabbed(QPixmap) emitted after the grab operation is finished
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
37
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 grabbed = pyqtSignal(QPixmap)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
39
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 def __init__(self, parent=None):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
43
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @param parent reference to the parent object
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @type QObject
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
47 super().__init__(parent)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
48
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 from .SnapshotTimer import SnapshotTimer
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
50
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.__grabTimer = SnapshotTimer()
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.__grabTimer.timeout.connect(self.__performGrab)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
53
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 def supportedModes(self):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 Public method to get the supported screenshot modes.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
57
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @return tuple of supported screenshot modes
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @rtype tuple of SnapshotModes
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 if DBusAvailable and Globals.isKdeDesktop():
8228
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
62 # __IGNORE_WARNING_Y114__
7957
7bdfa13bc3f5 Snapshot Widget: fixed the modified snapshot function for multiple screens.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7945
diff changeset
63 return (
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
64 SnapshotModes.FULLSCREEN,
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
65 SnapshotModes.SELECTEDSCREEN,
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
66 SnapshotModes.SELECTEDWINDOW,
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 )
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 elif DBusAvailable and Globals.isGnomeDesktop():
7957
7bdfa13bc3f5 Snapshot Widget: fixed the modified snapshot function for multiple screens.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7945
diff changeset
69 return (
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
70 SnapshotModes.FULLSCREEN,
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
71 SnapshotModes.SELECTEDSCREEN,
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
72 SnapshotModes.SELECTEDWINDOW,
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
73 SnapshotModes.RECTANGLE,
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 )
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 else:
7957
7bdfa13bc3f5 Snapshot Widget: fixed the modified snapshot function for multiple screens.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7945
diff changeset
76 return ()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
77
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78 def grab(self, mode, delay=0, captureCursor=False, captureDecorations=False):
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 Public method to perform a grab operation potentially after a delay.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
81
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 @param mode screenshot mode
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 @type ScreenshotModes
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 @param delay delay in seconds
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 @type int
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 @param captureCursor flag indicating to include the mouse cursor
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 @type bool
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 @param captureDecorations flag indicating to include the window
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
89 decorations (only used for mode SnapshotModes.SELECTEDWINDOW)
6917
7075ede48c2f Snapshot: fixed some issues and implemented support for the two include options (decorations, mouse cursor) on Wayland.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6916
diff changeset
90 @type bool
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 if not DBusAvailable:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 # just to play it safe
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.grabbed.emit(QPixmap())
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
96
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.__mode = mode
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.__captureCursor = captureCursor
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 self.__captureDecorations = captureDecorations
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 if delay:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.__grabTimer.start(delay)
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 else:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 QTimer.singleShot(200, self.__performGrab)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
104
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 def __performGrab(self):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 Private method to perform the grab operations.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
108
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 @exception RuntimeError raised to indicate an unsupported grab mode
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 """
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
111 if self.__mode not in (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
112 SnapshotModes.FULLSCREEN,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
113 SnapshotModes.SELECTEDSCREEN,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
114 SnapshotModes.SELECTEDWINDOW,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
115 SnapshotModes.RECTANGLE,
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
116 ):
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
117 raise RuntimeError("unsupported grab mode given")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
118
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
119 if self.__mode == SnapshotModes.FULLSCREEN:
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.__grabFullscreen()
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
121 elif self.__mode == SnapshotModes.SELECTEDSCREEN:
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.__grabSelectedScreen()
8265
0090cfa83159 Converted enum names to use all uppercase letters (except for E5PathPickerModes to keep plug-ins using this compatible with previous eric releases).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
123 elif self.__mode == SnapshotModes.SELECTEDWINDOW:
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 self.__grabSelectedWindow()
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8143
diff changeset
125 else:
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 self.__grabRectangle()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
127
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 def __grabFullscreen(self):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 Private method to grab the complete desktop.
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 snapshot = QPixmap()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
133
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 if Globals.isKdeDesktop():
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 interface = QDBusInterface(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
136 "org.kde.KWin", "/Screenshot", "org.kde.kwin.Screenshot"
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
138 reply = interface.call("screenshotFullscreen", self.__captureCursor)
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 if self.__checkReply(reply, 1):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 filename = reply.arguments()[0]
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 if filename:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 snapshot = QPixmap(filename)
8240
93b8a353c4bf Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
143 with contextlib.suppress(OSError):
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 os.remove(filename)
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 elif Globals.isGnomeDesktop():
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 path = self.__temporaryFilename()
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 interface = QDBusInterface(
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 "org.gnome.Shell",
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 "/org/gnome/Shell/Screenshot",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
150 "org.gnome.Shell.Screenshot",
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
152 reply = interface.call("Screenshot", self.__captureCursor, False, path)
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 if self.__checkReply(reply, 2):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 filename = reply.arguments()[1]
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 if filename:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 snapshot = QPixmap(filename)
8240
93b8a353c4bf Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
157 with contextlib.suppress(OSError):
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 os.remove(filename)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
159
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 self.grabbed.emit(snapshot)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
161
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 def __grabSelectedScreen(self):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 Private method to grab a selected screen.
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 snapshot = QPixmap()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
167
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 if Globals.isKdeDesktop():
7945
76daafe10009 Removed code dealing with Qt versions less than the required one and removed use of QDesktopWidget or QApplication.desktop().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
169 screen = QApplication.screenAt(QCursor.pos())
76daafe10009 Removed code dealing with Qt versions less than the required one and removed use of QDesktopWidget or QApplication.desktop().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
170 try:
76daafe10009 Removed code dealing with Qt versions less than the required one and removed use of QDesktopWidget or QApplication.desktop().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
171 screenId = QApplication.screens().index(screen)
76daafe10009 Removed code dealing with Qt versions less than the required one and removed use of QDesktopWidget or QApplication.desktop().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
172 except ValueError:
76daafe10009 Removed code dealing with Qt versions less than the required one and removed use of QDesktopWidget or QApplication.desktop().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
173 # default to screen 0
76daafe10009 Removed code dealing with Qt versions less than the required one and removed use of QDesktopWidget or QApplication.desktop().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
174 screenId = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
175
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 # Step 2: grab the screen
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 interface = QDBusInterface(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
178 "org.kde.KWin", "/Screenshot", "org.kde.kwin.Screenshot"
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
180 reply = interface.call("screenshotScreen", screenId, self.__captureCursor)
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 if self.__checkReply(reply, 1):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 filename = reply.arguments()[0]
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 if filename:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 snapshot = QPixmap(filename)
8240
93b8a353c4bf Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
185 with contextlib.suppress(OSError):
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 os.remove(filename)
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 elif Globals.isGnomeDesktop():
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 # Step 1: grab entire desktop
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 path = self.__temporaryFilename()
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 interface = QDBusInterface(
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 "org.gnome.Shell",
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 "/org/gnome/Shell/Screenshot",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
193 "org.gnome.Shell.Screenshot",
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 )
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 reply = interface.call(
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 "ScreenshotWindow",
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 self.__captureDecorations,
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 self.__captureCursor,
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 False,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
200 path,
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 )
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 if self.__checkReply(reply, 2):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 filename = reply.arguments()[1]
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 if filename:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 snapshot = QPixmap(filename)
8240
93b8a353c4bf Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
206 with contextlib.suppress(OSError):
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 os.remove(filename)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
208
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 # Step 2: extract the area of the screen containing
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 # the cursor
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 if not snapshot.isNull():
7945
76daafe10009 Removed code dealing with Qt versions less than the required one and removed use of QDesktopWidget or QApplication.desktop().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
212 screen = QApplication.screenAt(QCursor.pos())
76daafe10009 Removed code dealing with Qt versions less than the required one and removed use of QDesktopWidget or QApplication.desktop().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
213 geom = screen.geometry()
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 snapshot = snapshot.copy(geom)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
215
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 self.grabbed.emit(snapshot)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
217
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 def __grabSelectedWindow(self):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 Private method to grab a selected window.
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 snapshot = QPixmap()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
223
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 if Globals.isKdeDesktop():
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 mask = 0
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 if self.__captureDecorations:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 mask |= 1
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 if self.__captureCursor:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 mask |= 2
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 interface = QDBusInterface(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
231 "org.kde.KWin", "/Screenshot", "org.kde.kwin.Screenshot"
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
233 reply = interface.call("interactive", mask)
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 if self.__checkReply(reply, 1):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 filename = reply.arguments()[0]
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 if filename:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 snapshot = QPixmap(filename)
8240
93b8a353c4bf Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
238 with contextlib.suppress(OSError):
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 os.remove(filename)
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 elif Globals.isGnomeDesktop():
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 path = self.__temporaryFilename()
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 interface = QDBusInterface(
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 "org.gnome.Shell",
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 "/org/gnome/Shell/Screenshot",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
245 "org.gnome.Shell.Screenshot",
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 )
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 reply = interface.call(
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 "ScreenshotWindow",
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 self.__captureDecorations,
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 self.__captureCursor,
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 False,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
252 path,
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 )
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 if self.__checkReply(reply, 2):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 filename = reply.arguments()[1]
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 if filename:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 snapshot = QPixmap(filename)
8240
93b8a353c4bf Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
258 with contextlib.suppress(OSError):
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 os.remove(filename)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
260
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 self.grabbed.emit(snapshot)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
262
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 def __grabRectangle(self):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 Private method to grab a rectangular desktop area.
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 snapshot = QPixmap()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
268
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 if Globals.isGnomeDesktop():
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 # Step 1: let the user select the area
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 interface = QDBusInterface(
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 "org.gnome.Shell",
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 "/org/gnome/Shell/Screenshot",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
274 "org.gnome.Shell.Screenshot",
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 )
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 reply = interface.call("SelectArea")
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 if self.__checkReply(reply, 4):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 x, y, width, height = reply.arguments()[:4]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
279
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 # Step 2: grab the selected area
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 path = self.__temporaryFilename()
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 reply = interface.call(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
283 "ScreenshotArea", x, y, width, height, False, path
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 )
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 if self.__checkReply(reply, 2):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 filename = reply.arguments()[1]
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 if filename:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 snapshot = QPixmap(filename)
8240
93b8a353c4bf Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
289 with contextlib.suppress(OSError):
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 os.remove(filename)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
291
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 self.grabbed.emit(snapshot)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
293
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 def __checkReply(self, reply, argumentsCount):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 Private method to check, if a reply is valid.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
297
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @param reply reference to the reply message
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 @type QDBusMessage
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 @param argumentsCount number of expected arguments
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 @type int
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 @return flag indicating validity
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 @rtype bool
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 """
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7960
diff changeset
305 if reply.type() == QDBusMessage.MessageType.ReplyMessage:
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 if len(reply.arguments()) == argumentsCount:
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
308
8356
68ec9c3d4de5 Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8318
diff changeset
309 EricMessageBox.warning(
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 None,
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 self.tr("Screenshot Error"),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
312 self.tr(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
313 "<p>Received an unexpected number of reply arguments."
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
314 " Expected {0} but got {1}</p>"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
315 ).format(
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 argumentsCount,
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 len(reply.arguments()),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
318 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
319 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
320
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7960
diff changeset
321 elif reply.type() == QDBusMessage.MessageType.ErrorMessage:
8356
68ec9c3d4de5 Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8318
diff changeset
322 EricMessageBox.warning(
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 None,
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 self.tr("Screenshot Error"),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
325 self.tr(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
326 "<p>Received error <b>{0}</b> from DBus while"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
327 " performing screenshot.</p><p>{1}</p>"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
328 ).format(
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 reply.errorName(),
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 reply.errorMessage(),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
331 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
332 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
333
8143
2c730d5fd177 Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7960
diff changeset
334 elif reply.type() == QDBusMessage.MessageType.InvalidMessage:
8356
68ec9c3d4de5 Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8318
diff changeset
335 EricMessageBox.warning(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
336 None, self.tr("Screenshot Error"), self.tr("Received an invalid reply.")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
337 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
338
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 else:
8356
68ec9c3d4de5 Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8318
diff changeset
340 EricMessageBox.warning(
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 None,
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 self.tr("Screenshot Error"),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
343 self.tr("Received an unexpected reply."),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
344 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
345
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
347
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 def __temporaryFilename(self):
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 """
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 Private method to generate a temporary filename.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
351
6916
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 @return path name for a unique, temporary file
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 @rtype str
76810bef8425 Snapshot: implemented preliminary support for Wayland (needs some more testing).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
355 return "/tmp/eric-snap-{0}.png".format(uuid.uuid4().hex) # secok

eric ide

mercurial