diff --git a/src/utils/screengrabber.cpp b/src/utils/screengrabber.cpp
index 49ee6317..37f12ea3 100644
--- a/src/utils/screengrabber.cpp
+++ b/src/utils/screengrabber.cpp
@@ -16,11 +16,14 @@
// along with Flameshot. If not, see .
#include "screengrabber.h"
+#include "src/utils/filenamehandler.h"
#include
#include
#include
#include
#include
+#include
+#include
ScreenGrabber::ScreenGrabber(QObject *parent) : QObject(parent) {
@@ -29,23 +32,34 @@ ScreenGrabber::ScreenGrabber(QObject *parent) : QObject(parent) {
QPixmap ScreenGrabber::grabEntireDesktop(bool &ok) {
ok = true; // revisit later
if(m_info.waylandDectected()) {
- ok = false;
QPixmap res;
- /*
- habdle screenshot based on DE
-
+ // handle screenshot based on DE
switch (m_info.windowManager()) {
- case m_info.GNOME:
+ case m_info.GNOME: {
// https://github.com/GNOME/gnome-shell/blob/695bfb96160033be55cfb5ac41c121998f98c328/data/org.gnome.Shell.Screenshot.xml
+ QString path = FileNameHandler().generateAbsolutePath("/tmp") + ".png";
+ QDBusInterface gnomeInterface(QStringLiteral("org.gnome.Shell"),
+ QStringLiteral("/org/gnome/Shell/Screenshot"),
+ QStringLiteral("org.gnome.Shell.Screenshot"));
+ QDBusReply reply = gnomeInterface.call("Screenshot", false, false, path);
+ if (reply.value()) {
+ res = QPixmap(path);
+ } else {
+ ok = false;
+ }
break;
- case m_info.KDE:
+ } case m_info.KDE: {
// https://github.com/KDE/spectacle/blob/517a7baf46a4ca0a45f32fd3f2b1b7210b180134/src/PlatformBackends/KWinWaylandImageGrabber.cpp#L145
- break;
- default:
+ QDBusInterface kwinInterface(QStringLiteral("org.kde.KWin"),
+ QStringLiteral("/Screenshot"),
+ QStringLiteral("org.kde.kwin.Screenshot"));
+ QDBusReply reply = kwinInterface.call("screenshotFullscreen");
+ res = QPixmap(reply.value());
+ break;
+ } default:
ok = false;
break;
}
- */
return res;
}
QRect geometry;