Skip to content

Commit

Permalink
Type:feat 紧急需求 增加屏保开关
Browse files Browse the repository at this point in the history
Description:gsetting配置控制是否显示屏保

RootCause:Null

Solution:
  • Loading branch information
zhangwencong committed Jul 20, 2020
1 parent f9f052e commit 189c582
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 55 deletions.
25 changes: 2 additions & 23 deletions dde-desktop/view/canvasgridview.cpp
Expand Up @@ -68,6 +68,7 @@

#include "app/define.h"
#include "controllers/mergeddesktopcontroller.h"
#include "../dde-wallpaper-chooser/screensavercontrol.h"

#define DESKTOP_CAN_SCREENSAVER "DESKTOP_CAN_SCREENSAVER"

Expand Down Expand Up @@ -3333,7 +3334,7 @@ void CanvasGridView::showEmptyAreaMenu(const Qt::ItemFlags &/*indexFlags*/)
#ifdef DISABLE_SCREENSAVER
wallpaper.setText(tr("Set Wallpaper"));
#else
if(existScreensaverService()){
if(needShowScreensaver()){
wallpaper.setText(tr("Wallpaper and Screensaver"));
}else {
wallpaper.setText(tr("Set Wallpaper"));
Expand Down Expand Up @@ -3623,25 +3624,3 @@ void CanvasGridView::startDrag(Qt::DropActions supportedActions)
return;
}

bool CanvasGridView::existScreensaverService()
{
bool result = false;
#ifndef DISABLE_SCREENSAVER

QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "ListActivatableNames");
QDBusPendingCall call = QDBusConnection::sessionBus().asyncCall(msg);
call.waitForFinished();
if(call.isFinished()){
QDBusReply<QStringList> reply = call.reply();
QStringList value = reply.value();

if (value.contains("com.deepin.ScreenSaver")){
qDebug() << "com.deepin.ScreenSaver is ok";
result = true;
}
}

#endif

return result;
}
1 change: 0 additions & 1 deletion dde-desktop/view/canvasgridview.h
Expand Up @@ -197,7 +197,6 @@ public Q_SLOTS:

void setGeometry(int, int, int, int) = delete;
bool fetchDragEventUrlsFromSharedMemory();
bool existScreensaverService();

QScopedPointer<CanvasViewPrivate> d;
double m_dragMoveTime;
Expand Down
6 changes: 4 additions & 2 deletions dde-wallpaper-chooser/dde-wallpaper-chooser.pri
Expand Up @@ -4,7 +4,8 @@ SOURCES += $$PWD/frame.cpp \
$$PWD/thumbnailmanager.cpp \
$$PWD/button.cpp \
$$PWD/dbus/deepin_wm.cpp \
$$PWD/checkbox.cpp
$$PWD/checkbox.cpp \
$$PWD/screensavercontrol.cpp

HEADERS += $$PWD/frame.h \
$$PWD/wallpaperlist.h \
Expand All @@ -13,7 +14,8 @@ HEADERS += $$PWD/frame.h \
$$PWD/thumbnailmanager.h \
$$PWD/button.h \
$$PWD/dbus/deepin_wm.h \
$$PWD/checkbox.h
$$PWD/checkbox.h \
$$PWD/screensavercontrol.h

INCLUDEPATH += $$_PRO_FILE_PWD_/view

Expand Down
31 changes: 3 additions & 28 deletions dde-wallpaper-chooser/frame.cpp
Expand Up @@ -33,6 +33,7 @@
#include "backgroundhelper.h"
#include "screen/screenhelper.h"
#include "dbusinterface/introspectable_interface.h"
#include "screensavercontrol.h"

#ifndef DISABLE_SCREENSAVER
#include "screensaver_interface.h"
Expand All @@ -59,15 +60,13 @@
#define DESKTOP_BUTTON_ID "desktop"
#define LOCK_SCREEN_BUTTON_ID "lock-screen"
#define SCREENSAVER_BUTTON_ID "screensaver"
#define DESKTOP_CAN_SCREENSAVER "DESKTOP_CAN_SCREENSAVER"
#define SessionManagerService "com.deepin.SessionManager"
#define SessionManagerPath "/com/deepin/SessionManager"

DWIDGET_USE_NAMESPACE
DGUI_USE_NAMESPACE
DCORE_USE_NAMESPACE
using namespace com::deepin;

static bool previewBackground()
{
if (DWindowManagerHelper::instance()->windowManagerName() == DWindowManagerHelper::DeepinWM)
Expand Down Expand Up @@ -850,7 +849,6 @@ void Frame::initUI()

//###(zccrs): 直接把switModeControl放到布局中始终无法在两种mos模式下都居中
// 使用anchors使此控件居中
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
DButtonBoxButton *wallpaperBtn = new DButtonBoxButton(tr("Wallpaper"), this);
wallpaperBtn->installEventFilter(this);
wallpaperBtn->setMinimumWidth(40);
Expand All @@ -860,8 +858,8 @@ void Frame::initUI()

if (m_mode == WallpaperMode) wallpaperBtn->setChecked(true);

if ((env.contains(DESKTOP_CAN_SCREENSAVER) && env.value(DESKTOP_CAN_SCREENSAVER).startsWith("N"))
|| !existScreensaverService()) {

if (!needShowScreensaver()) {
m_switchModeControl->setButtonList({wallpaperBtn}, true);
wallpaperBtn->setChecked(true);
wallpaperBtn->installEventFilter(this);
Expand Down Expand Up @@ -1192,26 +1190,3 @@ void Frame::setBackground()
m_dbusAppearance->Set("background", m_desktopWallpaper);
}
}

bool Frame::existScreensaverService()
{
bool result = false;
#ifndef DISABLE_SCREENSAVER

QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "ListActivatableNames");
QDBusPendingCall call = QDBusConnection::sessionBus().asyncCall(msg);
call.waitForFinished();
if(call.isFinished()){
QDBusReply<QStringList> reply = call.reply();
QStringList value = reply.value();

if (value.contains("com.deepin.ScreenSaver")){
qDebug() << "com.deepin.ScreenSaver is ok";
result = true;
}
}

#endif

return result;
}
1 change: 0 additions & 1 deletion dde-wallpaper-chooser/frame.h
Expand Up @@ -147,7 +147,6 @@ public slots:
QString getWallpaperSlideShow();
void setWallpaperSlideShow(QString slideShow);
void setBackground();
bool existScreensaverService();

QString m_screenName;
};
Expand Down
42 changes: 42 additions & 0 deletions dde-wallpaper-chooser/screensavercontrol.cpp
@@ -0,0 +1,42 @@
#include "screensavercontrol.h"

#include <QDebug>
#include <QProcess>
#include <QDBusConnection>
#include <QDBusMessage>
#include <dgiosettings.h>

#define DESKTOP_CAN_SCREENSAVER "DESKTOP_CAN_SCREENSAVER"

bool needShowScreensaver()
{
//1 判断环境变量
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
if ((env.contains(DESKTOP_CAN_SCREENSAVER) && env.value(DESKTOP_CAN_SCREENSAVER).startsWith("N")))
{
qDebug() << "System environment variables do not support screen savers";
return false;
}

#ifndef DISABLE_SCREENSAVER
//2 判断是否安装屏保程序
QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "ListActivatableNames");
QDBusMessage response = QDBusConnection::sessionBus().call(msg);
if(response.type() == QDBusMessage::ReplyMessage
&& response.arguments().takeFirst().toList().contains("com.deepin.ScreenSaver")){
qDebug() << "com.deepin.ScreenSaver is ok";
}else {
qDebug() << "The screen saver is uninstalled";
return false;
}
#endif

//3 Gsetting 判断屏保是否可用...
DGioSettings desktopSettings("com.deepin.dde.filemanager.desktop", "/com/deepin/dde/filemanager/desktop/");
if (desktopSettings.keys().contains("show-screen-saver") && false == desktopSettings.value("show-screen-saver").toBool()) {
qDebug() << "Gsetting show-screen-saver is false";
return false;
}

return true;
}
7 changes: 7 additions & 0 deletions dde-wallpaper-chooser/screensavercontrol.h
@@ -0,0 +1,7 @@
#ifndef SCREENSAVERCONTROL_H
#define SCREENSAVERCONTROL_H


bool needShowScreensaver();

#endif // SCREENSAVERCONTROL_H
9 changes: 9 additions & 0 deletions gschema/com.deepin.dde.filemanager.gschema.xml
Expand Up @@ -61,6 +61,15 @@
</description>
</key>

<key name='show-screen-saver' type='b'>
<default>true</default>
<summary>Wether use screen saver on the desktop</summary>
<description>
If enabled, screen saver will display on the desktop.
If disabled, screen saver will not display on the desktop.s
</description>
</key>

</schema>

</schemalist>

0 comments on commit 189c582

Please sign in to comment.