Skip to content

Commit

Permalink
Use Qt5LinguistTools in CMake
Browse files Browse the repository at this point in the history
  • Loading branch information
zty199 committed Apr 18, 2021
1 parent c2e0133 commit 5ae2a83
Show file tree
Hide file tree
Showing 19 changed files with 164 additions and 163 deletions.
41 changes: 22 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@

## 功能介绍

由论坛大佬 chanforever 的插件修改得来,在 dde-dock 添加插件实现快速切换显卡的操作。

原贴地址:[切换显卡插件](https://bbs.deepin.org/forum.php?mod=viewthread&tid=197280)
原贴地址:[切换显卡插件](https://bbs.deepin.org/zh/post/197280)

github 原项目地址:[mywhat/DDESwitchCard](https://github.com/mywhat/DDESwitchCard/)

<br/>

由论坛大佬 chanforever 的插件修改得来,在 dde-dock 添加插件实现快速切换显卡的操作。

<br/>

修改了整个代码结构,优化函数调用逻辑,取消了外部储存配置文件,避免被修改而影响插件显示。

自动检测是否安装 NVIDIA 显卡驱动,避免切换后因为没有驱动导致无法进入图形界面。
Expand All @@ -34,20 +38,17 @@ qtcreator(推荐使用 Qt Creator 直接打开 CMakeLists.txt 编译运行)

cmake, gcc, g++

libqt5core5a

libqt5gui5

libqt5widgets5
qt5-default

libqt5dbus5
qttools5-dev

libdtkcore-dev

libdtkwidget-dev

dde-dock-dev

<br/>

mesa-utils(运行时依赖)

Expand All @@ -73,22 +74,24 @@ libnotify4(运行时依赖)

## 感谢

linuxdeepin 官方的 dde-dock 项目仓库 https://github.com/linuxdeepin/dde-dock
linuxdeepin 官方的 [dde-dock](https://github.com/linuxdeepin/dde-dock) 项目仓库

linuxdeepin 官方的 [dde-file-manager](https://github.com/linuxdeepin/dde-file-manager) 项目仓库

linuxdeepin 官方的 dde-file-manager 项目仓库 https://github.com/linuxdeepin/dde-file-manager
GitHub 开源项目 [dde-appknitter](https://github.com/Dziban-dev/dde-appknitter) 的脚本翻译方式

GitHub 开源项目 dde-appknitter 的脚本翻译方式 https://github.com/Dziban-dev/dde-appknitter
Github 开源项目 [dde-store](https://github.com/dekzi/dde-store) 的系统通知发送方式

Github 开源项目 dde-store 的系统通知发送方式 https://github.com/dekzi/dde-store
GitHub 大佬 [xmuli](https://github.com/xmuli)[Qt 项目(Cmake)设置国际化支持](https://ifmet.cn/posts/9644ed82/) 方法

论坛大佬 chanforever 的插件 https://bbs.deepin.org/forum.php?mod=viewthread&tid=197280
论坛大佬 chanforever [DDESwitchCard](https://github.com/mywhat/DDESwitchCard) 插件 https://bbs.deepin.org/zh/post/197280

论坛大佬 jfy_99 的显卡切换脚本 https://bbs.deepin.org/forum.php?mod=viewthread&tid=192750
论坛大佬 jfy_99 的显卡切换脚本 https://bbs.deepin.org/zh/post/192750

论坛大佬 risez 的 nvidia-prime 方案 https://bbs.deepin.org/forum.php?mod=viewthread&tid=191741
论坛大佬 risez 的 nvidia-prime 方案 https://bbs.deepin.org/zh/post/191741

论坛大佬 q77190858 的 dde-dock系统监控小插件 https://bbs.deepin.org/forum.php?mod=viewthread&tid=179425
论坛大佬 q77190858 的 [dde-sys-monitor-plugin](https://github.com/q77190858/dde-sys-monitor-plugin) 插件 https://bbs.deepin.org/zh/post/179425

论坛大佬 shenmo,lenke,mmlmonkey,xuey 等提供的修改建议 https://bbs.deepin.org/forum.php?mod=viewthread&tid=197367
论坛大佬 shenmo,lenke,mmlmonkey,xuey 等提供的修改建议 https://bbs.deepin.org/zh/post/197367

码云组织 开源应用 提供的 UOS 打包规范和方法 https://gitee.com/deepin-opensource
码云组织 [开源应用](https://gitee.com/deepin-opensource) 提供的 UOS 打包规范和方法
2 changes: 1 addition & 1 deletion deb_uos/DEBIAN/control
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Package: dde-dock-graphics-plugin
Version: 1.8.2spark0
Version: 1.8.3
Maintainer: zty199 <[email protected]>
Section: utils
Source: https://github.com/mywhat/DDESwitchCard
Expand Down
2 changes: 1 addition & 1 deletion deb_uos/opt/apps/dde-dock-graphics-plugin/info
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"appid": "dde-dock-graphics-plugin",
"name": "SwitchGraphicsCardPlugin",
"version": "1.8.2spark0",
"version": "1.8.3",
"arch": ["amd64"],
"permissions": {
"autostart": false,
Expand Down
1 change: 1 addition & 0 deletions scripts/Initialize.sh
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ Section "Screen"
SubSection "Display"
Depth 24
EndSubSection
Option "Coolbits" "28"
EndSection' | sudo tee /etc/X11/xorg.conf.bak > /dev/null

# 生成 nvidia-graphics-drivers.conf | Generate nvidia-graphics-drivers.conf
Expand Down
14 changes: 4 additions & 10 deletions scripts/Intel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,13 @@ readonly TEXT1_zh="未检测到 NVIDIA 显卡驱动,建议安装 NVIDIA 闭源
readonly TEXT1_en="NVIDIA X driver not detected, suggest installing nvidia-driver first"
readonly TEXT2_zh="已经是 Intel 显卡了"
readonly TEXT2_en="Intel graphics is already in use"
readonly TIP1_zh="即将切换显卡并注销登录,请及时保存您的工作进度"
readonly TIP1_en="Preparing to switch graphics card and logout, please save your work in progress in time"
readonly TIP2_zh="正在刷新内核参数,请稍后..."
readonly TIP2_en="Updating initramfs, please wait..."
readonly TIP_zh="即将切换显卡并注销登录,请及时保存您的工作进度"
readonly TIP_en="Preparing to switch graphics card and logout, please save your work in progress in time"

eval "TITLE=\$TITLE_${LANG}"
eval "TEXT1=\$TEXT1_${LANG}"
eval "TEXT2=\$TEXT2_${LANG}"
eval "TIP1=\$TIP1_${LANG}"
eval "TIP2=\$TIP2_${LANG}"
eval "TIP=\$TIP_${LANG}"

# 判断 NVIDIA 闭源驱动 是否安装 | Judge whether nvidia-driver is installed
lshw -c video | grep "driver=nvidia" > /dev/null
Expand All @@ -47,7 +44,7 @@ then
fi

# 提示文本 | Tip
echo $TIP1
echo $TIP

# 初始化 nvidia-prime 相关配置文件 | Initialize
sh /opt/apps/dde-dock-graphics-plugin/files/bin/Initialize.sh
Expand All @@ -62,9 +59,6 @@ sudo sed -i 's$Screen 0 "Screen0" 0 0$Screen 0 "IGPU" 0 0$g' /etc/X1

# 移除 nvidia-graphics-drivers.conf | Remove nvidia-graphics-drivers.conf
sudo mv /etc/modprobe.d/nvidia-graphics-driver.conf /etc/modprobe.d/nvidia-graphics-driver.conf.bak
echo $TIP2
notify-send -t 5000 -a dde-dock-graphics-plugin -i deepin-graphics-driver-manager "$TIP2"
sudo update-initramfs -u

# 恢复 lightdm.conf | Restore lightdm.conf
sudo sed -i 's$display-setup-script=/etc/lightdm/display_setup.sh$#display-setup-script=$g' /etc/lightdm/lightdm.conf
Expand Down
14 changes: 4 additions & 10 deletions scripts/NVIDIA.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,13 @@ readonly TEXT1_zh="未检测到 NVIDIA 显卡驱动,建议安装 NVIDIA 闭源
readonly TEXT1_en="NVIDIA X driver not detected, suggest installing nvidia-driver first"
readonly TEXT2_zh="已经是 NVIDIA 显卡了"
readonly TEXT2_en="NVIDIA graphics is already in use"
readonly TIP1_zh="即将切换显卡并注销登录,请及时保存您的工作进度"
readonly TIP1_en="Preparing to switch graphics card and logout, please save your work in progress in time"
readonly TIP2_zh="正在刷新内核参数,请稍后..."
readonly TIP2_en="Updating initramfs, please wait..."
readonly TIP_zh="即将切换显卡并注销登录,请及时保存您的工作进度"
readonly TIP_en="Preparing to switch graphics card and logout, please save your work in progress in time"

eval "TITLE=\$TITLE_${LANG}"
eval "TEXT1=\$TEXT1_${LANG}"
eval "TEXT2=\$TEXT2_${LANG}"
eval "TIP1=\$TIP1_${LANG}"
eval "TIP2=\$TIP2_${LANG}"
eval "TIP=\$TIP_${LANG}"

# 判断 NVIDIA 闭源驱动 是否安装 | Judge whether nvidia-driver is installed
lshw -c video | grep "driver=nvidia" > /dev/null
Expand All @@ -47,7 +44,7 @@ then
fi

# 提示文本 | Tip
echo $TIP1
echo $TIP

# 初始化 NVIDIA 相关配置文件 | Initialize
sh /opt/apps/dde-dock-graphics-plugin/files/bin/Initialize.sh
Expand All @@ -63,9 +60,6 @@ sudo sed -i 's$\n Option "AllowNVIDIAGPUScreens"$$g' /etc/X11/xorg.co

# 启用 nvidia-graphics-drivers.conf | Enable nvidia-graphics-drivers.conf
sudo mv /etc/modprobe.d/nvidia-graphics-driver.conf.bak /etc/modprobe.d/nvidia-graphics-driver.conf
echo $TIP2
notify-send -t 5000 -a dde-dock-graphics-plugin -i deepin-graphics-driver-manager "$TIP2"
sudo update-initramfs -u

# 修改 lightdm.conf | Modify lightdm.conf
sudo sed -i 's$#display-setup-script=$display-setup-script=/etc/lightdm/display_setup.sh$g' /etc/lightdm/lightdm.conf
Expand Down
8 changes: 4 additions & 4 deletions scripts/prime-run.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#!/bin/sh

file=$1
FILE=$1

if [ "${file##*.}"x = "desktop"x ]
if [ "${FILE##*.}"x = "desktop"x ]
then
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia $(cat $file | grep "Exec=" | sed "s/^Exec=//" | sed "s/%.//" | sed "s/^\"//g" | sed "s/\" *$//g" | head -n 1)
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia $(cat $FILE | grep "Exec=" | sed "s/^Exec=//" | sed "s/%.//" | sed "s/^\"//g" | sed "s/\" *$//g" | head -n 1)
else
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia $file
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia $FILE
fi
15 changes: 12 additions & 3 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,13 @@ file(GLOB_RECURSE SRCS "*.h" "*.cpp")
# <库名>_LIBRARIES 有哪些库文件(Qt5Widgets_LIBRARIES)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5DBus REQUIRED)
find_package(Qt5LinguistTools REQUIRED)

# .ts 翻译文件
set(TS_FILES ${CMAKE_SOURCE_DIR}/translations/zh_CN.ts)
# 生成 .qm 翻译文件
qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
qt5_add_translation(QM_FILES ${TS_FILES})

find_package(DtkCore REQUIRED)
find_package(DtkWidget REQUIRED)
Expand Down Expand Up @@ -73,7 +80,7 @@ add_definitions("${QT_DEFINITIONS} -DQT_PLUGIN")
# SHARED 表示生成的库应该是动态库,
# 变量 ${PLUGIN_NAME} 和 ${SRCS} 都是前面处理好的,
# 另外 qrc 资源文件也应该追加在后面以编译进目标中。
add_library(${PLUGIN_NAME} SHARED ${SRCS} switch-graphics-card.qrc)
add_library(${PLUGIN_NAME} SHARED ${SRCS} ${TS_FILES} switch-graphics-card.qrc)

# 设置目标的生成位置,这里表示生成在执行 make 的目录,
# 另外还有很多可用于设置的属性,可查阅 cmake 文档。
Expand All @@ -85,6 +92,7 @@ set_target_properties(${PLUGIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ./)
target_include_directories(${PLUGIN_NAME} PUBLIC
${Qt5Widgets_INCLUDE_DIRS}
${Qt5DBus_INCLUDE_DIRS}
${Qt5LinguistTools_INCLUDE_DIRS}
${DtkCore_INCLUDE_DIRS}
${DtkWidget_INCLUDE_DIRS}
${DdeDockInterface_INCLUDE_DIRS}
Expand All @@ -96,13 +104,14 @@ target_include_directories(${PLUGIN_NAME} PUBLIC
target_link_libraries(${PLUGIN_NAME} PRIVATE
${Qt5Widgets_LIBRARIES}
${Qt5DBus_LIBRARIES}
${Qt5LinguistTools_LIBRARIES}
${DtkCore_LIBRARIES}
${DtkWidget_LIBRARIES}
${DdeDockInterface_LIBRARIES}
)

# 设置安装路径的前缀(默认为"/usr/local")
#set(CMAKE_INSTALL_PREFIX "/usr")
# set(CMAKE_INSTALL_PREFIX "/usr")

# 设置执行 make install 时哪个目标应该被 install 到哪个位置
#install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins)
# install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins)
1 change: 1 addition & 0 deletions src/ddeUtil.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <QLabel>
#include <QPushButton>
#include <QLocale>
#include <QTranslator>
#include <QProcess>

#endif
72 changes: 24 additions & 48 deletions src/switch-graphics-card-plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,11 @@

SwitchGraphicsCardPlugin::SwitchGraphicsCardPlugin(QObject *parent)
: QObject(parent)
, m_tipsWidget(new Dock::TipsWidget)
, m_appletWidget(new SwitchGraphicsCardAppletWidget)
, process(new QProcess)
, m_pluginLoaded(false)
, ts(new QTranslator)
{
// 设置 tipsWidget 中的信息
m_tipsWidget->setVisible(false);
m_tipsWidget->setAccessibleName("Switch Graphics Card");
if(m_appletWidget->getLocale() == "zh")
{
m_tipsWidget->setText("当前显卡:" + m_appletWidget->getCardName());
}
else
{
m_tipsWidget->setText("Current: " + m_appletWidget->getCardName());
}
updateTranslator();
}

const QString SwitchGraphicsCardPlugin::pluginName() const
Expand All @@ -31,14 +20,7 @@ const QString SwitchGraphicsCardPlugin::pluginName() const

const QString SwitchGraphicsCardPlugin::pluginDisplayName() const
{
if(m_appletWidget->getLocale() == "zh")
{
return QString("显卡切换");
}
else
{
return QString("Switch Graphics Card");
}
return QString(tr("Switch Graphics Card"));
}

void SwitchGraphicsCardPlugin::init(PluginProxyInterface *proxyInter)
Expand Down Expand Up @@ -107,40 +89,19 @@ const QString SwitchGraphicsCardPlugin::itemContextMenu(const QString &itemKey)

QMap<QString, QVariant> graphicsRefresh;
graphicsRefresh["itemId"] = "graphics-refresh";
if(m_appletWidget->getLocale() == "zh")
{
graphicsRefresh["itemText"] = "刷新";
}
else
{
graphicsRefresh["itemText"] = "Refresh";
}
graphicsRefresh["itemText"] = tr("Refresh");
graphicsRefresh["isActive"] = true;
items.push_back(graphicsRefresh);

QMap<QString, QVariant> displaySettings;
displaySettings["itemId"] = "display-settings";
if(m_appletWidget->getLocale() == "zh")
{
displaySettings["itemText"] = "显示器设置";
}
else
{
displaySettings["itemText"] = "Display Settings";
}
displaySettings["itemText"] = tr("Display Settings");
displaySettings["isActive"] = true;
items.push_back(displaySettings);

QMap<QString, QVariant> nvidiaSettings;
nvidiaSettings["itemId"] = "nvidia-settings";
if(m_appletWidget->getLocale() == "zh")
{
nvidiaSettings["itemText"] = "NVIDIA 显卡设置";
}
else
{
nvidiaSettings["itemText"] = "Run nvidia-settings";
}
nvidiaSettings["itemText"] = tr("Run nvidia-settings");
nvidiaSettings["isActive"] = true;
items.push_back(nvidiaSettings);

Expand All @@ -161,9 +122,8 @@ void SwitchGraphicsCardPlugin::invokedMenuItem(const QString &itemKey, const QSt
// 根据上面接口设置的 id 执行不同的操作
if(menuId == "graphics-refresh")
{
// 刷新显卡信息和系统语言环境
// 刷新显卡信息
m_appletWidget->setCardName();
m_appletWidget->setLocale();
m_appletWidget->refreshButton();
m_pluginWidget->getInfo(m_appletWidget);
}
Expand Down Expand Up @@ -225,10 +185,17 @@ void SwitchGraphicsCardPlugin::loadPlugin()
m_pluginLoaded = true;

m_pluginWidget = new SwitchGraphicsCardWidget;
m_tipsWidget = new Dock::TipsWidget;
m_appletWidget = new SwitchGraphicsCardAppletWidget;

// 初始化显卡信息和系统语言环境
// 初始化显卡信息
m_pluginWidget->getInfo(m_appletWidget);

// 初始化 tipsWidget 信息
m_tipsWidget->setVisible(false);
m_tipsWidget->setAccessibleName("Switch Graphics Card");
m_tipsWidget->setText(tr("Current: ") + m_appletWidget->getCardName());

m_proxyInter->itemAdded(this, pluginName());
displayModeChanged(displayMode());
}
Expand All @@ -249,3 +216,12 @@ void SwitchGraphicsCardPlugin::refreshPluginItemsVisible()
m_proxyInter->itemAdded(this, pluginName());
}
}

void SwitchGraphicsCardPlugin::updateTranslator()
{
if(QLocale::system().name().split("_").at(0) == "zh")
{
ts->load("zh_CN.qm", ":/translations/translations");
QCoreApplication::installTranslator(ts);
}
}
Loading

0 comments on commit 5ae2a83

Please sign in to comment.