Go to file
江川朗月 56ebbbf92b
!22 wayland :custom shortcut key
Merge pull request !22 from 爱老虎油/openkylin/yangtze
2022-08-11 02:47:46 +00:00
common It can run in X environment. 2022-06-19 17:22:11 +08:00
daemon Import Upstream version 3.14.0.0~0512 2022-06-02 16:27:52 +08:00
data It can run in X environment. 2022-06-19 17:22:11 +08:00
debian update changelog 2022-08-11 10:45:43 +08:00
doc Import Upstream version 3.14.0.0~0512 2022-06-02 16:27:52 +08:00
man Import Upstream version 3.14.0.0~0512 2022-06-02 16:27:52 +08:00
plugins wayland custom shortcut key 2022-08-02 14:29:00 +08:00
projectDir Import Upstream version 3.14.0.0~0512 2022-06-02 16:27:52 +08:00
LICENSE Import Upstream version 3.14.0.0~0512 2022-06-02 16:27:52 +08:00
README.md Import Upstream version 3.14.0.0~0512 2022-06-02 16:27:52 +08:00
gen_project.sh Import Upstream version 3.14.0.0~0512 2022-06-02 16:27:52 +08:00
translate_generation.sh translate kds file when qmake 2022-07-19 19:16:02 +08:00
ukui-settings-daemon.pro Block a11y-keyboard、a11y-settings 2022-06-19 17:30:23 +08:00

README.md

ukui-settings-daemon

1 引言

ukui-settings-daemonUKUI桌面环境下的底层守护程序; 负责设置UKUI会话的各种参数以及运行的应用程序。 本文档为用户配置服务的介绍,针对组件的结构,模块设计,程序接口进行介绍。

项目安装依赖

  1. 执行: sudo mk-build-deps -ir debian/control 会安装项目所有依赖

项目运行

  1. 项目打包
  • 根目录下执行如下命令,在上层目录生成 deb 文件
debuild -D
  1. 项目安装

上层目录生成 deb 二进制文件后,进入上层目录,执行 sudo dpkg -i ./ukui-settings-daemon_xxxx.deb

  1. 项目运行

安装后运行:ukui-settings-daemon --replace

模块介绍

模块 功能 插件名称
磁盘监控 实现系统中磁盘空间的监听报警功能。并提醒用户清空回收站 housekeeping
远程服务 开启、关闭本地远程服务 sharing
光标提醒 在登录系统后根据设置按下ctrl时以圆圈的方式提醒光标位置 usd-locate-pointer
系统快捷键 实现系统快捷键、自定义快捷键 media-key
用户自定义快捷键 实现用户自定义快捷键 keybindings
媒体按键 向多媒体播放器传递播放信号 mpris
定位器参数管理 实时设置鼠标、触摸板的参数,并在用户登录时恢复至用户使用的参数 mouse
键盘参数管理 实时设置键盘的参数,并在用户登录时恢复至用户使用的参数 keyboard
显示模式切换模块 通过ui交互获取用户选择的显示模式并进行显示 kds
显示器管理模块 登录或者插拔显示器时,恢复用户配置 xrandr
色温管理 依据参数在特定时刻调整显示器色温值 color

接口介绍

控制面板后台部分使用的接口分为gsettings与DBus提供给内外部进行使用。

gsettings

应用程序可以使用gsettings来保存用户配置信息并且确保用户隔离。程序在运行中进行设置、修改gsettings的已有的键值但是不能通过程序代码创建新的键值gsettings在一个叫做schema的规范文件中创建schema主题文档其实是一个规范的xml文档。 应用程序通过信号槽来监视文件改动并根据改动的key处理对应事件。

控制面板后台使用到如下schema

  • org.ukui.peripherals-keyboard
  • org.ukui.peripherals-mouse
  • org.ukui.peripherals-touchpad
  • org.ukui.SettingsDaemon.plugins.color
  • org.ukui.SettingsDaemon.plugins.housekeeping
  • org.ukui.SettingsDaemon.plugins.media-keys

org.ukui.peripherals-keyboard

repeat

取值范围truefalse。 用户打开控制面板设置按键重复设置时即设置此值。值为true时长按按键重复输出按键值为false时长按按键不重复输出按键。

rate

取值范围10-110。 repeat为true时此值为连续输出字符的速度。

delay

取值范围200-2100 当repeat为true时延迟此值时间后按照rate设置的速度连续输出字符。

capslock-state

实时记录用户设置的大写锁定按键,在开机时恢复为该值的设置。

numlock-state

实时记录用户设置的数字按键,在开机时恢复为该值的设置。

org.ukui.peripherals-mouse

left-handed

设置鼠标主按键位置,当用户设置为左键时,左键为选择按键,当用户设置为右键时,右键为选择按键。

wheel-speed

实时响应该键值的数值,提取键值设置为鼠标滚轮速度。

double-click

实时响应该键值的数值,提取键值设置为双击间隔时长。

motion-acceleration

实时响应该键值的数值,提取键值设置为指针速速度。

mouse-accel

实时响应该键值的数值,提取键值设置为指针加速度。

locate-pointer

实时响应该键值的数值并根据该键值具体情况按下ctrl显示鼠标具体位置。

org.ukui.peripherals-touchpad

disable-on-external-mouse

取值范围truefalse。 功能: 当用户开启插入鼠标时禁用触摸板,则在鼠标接入时,触摸板将不会生效。

disable-while-typing

取值范围truefalse。 功能:当用户开启打字时禁用触摸板,则打字期间触摸板将不会有任何影响。

vertical-two-finger-scrolling

取值范围truefalse。 功能用户开选择垂直双指滑动时该键值为ture双指在触摸板滑动时滚动条可根据情况进行滑动。

horizontal-two-finger-scrolling

取值范围truefalse。 功能用户开选择水平双指滑动时该键值为ture双指在触摸板滑动时滚动条可根据情况进行滑动。

horizontal-edge-scrolling

取值范围truefalse。 功能用户开选择水平边际滑动时该键值为ture手指在触摸板边缘滑动时滚动条可根据情况进行滑动。

vertical-edge-scrolling

取值范围truefalse。 功能用户开选择水平垂直滑动时设置该键值为ture手指在触摸板边缘滑动时滚动条可根据情况进行滑动。

org.ukui.SettingsDaemon.plugins.color

night-light-enabled

取值范围truefalse。 夜间模式打开时该值设置为true夜间模式关闭时此值为false。

night-light-allday

取值范围truefalse。 时间选择全天时该键值为true跟随日出日落或者自定义时该值为false。

night-light-temperature

取值范围1100~6500k(暖->冷) 设置根据该键值,在特定时间依据该键值设置色温。

night-light-schedule-automatic

取值范围truefalse。 设置为true时根据night-light-schedule-automatic-fromnight-light-schedule-automatic-to自动计算出时间段进入夜间模式。

night-light-schedule-automatic-from**

取值范围00~23.98 夜间模式开始时间。

night-light-schedule-automatic-to**

取值范围00~23.98 夜间模式结束时间。

**night-light-**schedule-from

取值范围00~23.98 自定义夜间模式开始时间。

night-light-schedule-to

取值范围00~23.98 自定义夜间模式结束时间。

DBus

D-BUS是一种消息总线系统是进程相互通信IPC的一种简单方式。除了进程间通信D-BUS还有助于协调进程生命周期它使编写“单实例”应用程序或守护程序变得简单而可靠并在需要应用程序和守护程序的服务时按需启动它们。 BUS同时提供系统守护进程用于“添加新硬件设备”或“打印机队列更改”等事件和每个用户登录会话守护进程用于用户应用程序之间的一般IPC需求。此外消息总线构建在通用的一对一消息传递框架之上任何两个应用程序都可以使用该框架直接通信无需通过消息总线守护进程。目前通信应用程序位于一台计算机上或者通过适合在防火墙后与共享NFS主目录一起使用的未加密TCP/IP进行通信。需要更好的远程传输方面的帮助-传输机制具有良好的抽象性和可扩展性)。

接口

/org/ukui/SettingsDaemon/MediaKeys

方法

mediaKeyForOtherApp(int32 action, String appName)

信号

/org/ukui/SettingsDaemon/Sharing

方法

DisableService(String serviceName)

EnableService(String serviceName)

信号

/org/ukui/SettingsDaemon/xrandr

方法

getScreenMode(String appName)

参数:使用此接口的进程名称

返回值类型int

0第一屏模式

1镜像屏幕模式

2拓展屏幕模式

3其他屏幕模式

功能:获取当前屏幕模式

getScreenParam(String appName)

参数:使用此接口的进程名称

返回值json格式的字符串

功能:获取当前屏幕参数

setScreenMode(String modeName, String appName)

参数:

modeName模式名称

“firstScreenMode”第一屏模式

“cloneScreenMode”镜像屏幕模式

“extendScreenMode”拓展屏幕模式

“secondScreenMode”其他屏幕模式

appName调用此接口的程序名后续考虑加密

返回值:

功能:设置当前屏幕模式

setScreensParam(String screensParam, String appName)

参数:

screensParamJson格式的屏幕参数

appName调用此接口的进程名称后续考虑加密

返回值:无

功能:设置当前屏幕参数 参数示例

[
{
"enabled": true,
"id": "e2add05191c5c70db7824c9cd76e19f5",
"metadata": {
"fullname": "xrandr-LEN LI2224A-U5619HB8",
"name": "DP-2"
},
"mode": {
"refresh": 59.93387985229492,
"size": {
"height": 1080,
"width": 1920
}
},
"pos": {
"x": 0,
"y": 0
},
"primary": false,
"rotation": 1,
"scale": 1
}
]
信号
screenModeChanged(int32)

参数

  • 0第一屏模式
  • 1镜像屏幕模式
  • 2拓展屏幕模式
  • 3其他屏幕模式 屏幕模式发生改变时发送信号
screensParamChanged(String)

屏幕信息发生改变时发送信号

参数 Json格式的屏幕参数

详细设计

加载流程

main函数启动后通过遍历包含settings-daemon关键字段的gsettings并找出后缀名称并根据后缀名称加载对应的so文件。

函数说明

main.cpp

int main (int argc, char* argv[]) 参数

argc 参数个数,

argv 参数地址

返回值int

功能:程序入口,调用PluginManager类激活各个功能。

void handler(int no)

参数

no 异常代码

返回值:无

功能捕获kill信号释放资源

plugin-manager.cpp

功能:遍历加载控制面板后台所有功能组件,并逐个初始化,激活。

PluginManager::PluginManager

参数:无

功能:构造函数,初始化资源

PluginManager::~PluginManager

参数:无

功能:析构函数,释放资源

PluginManager* PluginManager::getInstance

参数:无 返回值PluginManager*

功能:获取实例

bool PluginManager::managerStart

参数:无

功能:用于初始化后,开始装载模块插件,并进行激活各个功能模块。

void PluginManager::managerStop

参数:无

功能:程序退出时释放插件资源。

static bool register_manager

参数:PluginManager

功能检查dbus服务中是否有org.ukui.settingsdaemon服务并以此判断ukui-settings-daemon是否已经启动。

plugin-interface.h

所有模块基于此类暴露出activate接口与deactivate接口。功能模块通过实现activate执行自身业务逻辑通过实现deactivate 退出模块并主动释放资源。

virtual ~PluginInterface_() {};

虚析构函数

void activate () = 0;

纯虚函数,需要功能模块自己实现功能,实现自身业务逻辑。

deactivate () = 0;

纯虚函数,需要功能模块自己实现功能,退出模块,并主动释放资源

磁盘容量监控housekeeping设计说明

程序模块说明

磁盘容量监控根据用户设置的报警阈值,在登录后,以及每隔两分钟检测磁盘剩余,当满足设置阈值时弹窗告知用户当前剩余容量,用户可选择清空回收站释放一定资源空间

函数说明

housekeeping-plugin.cpp

PluginInterface *createSettingsPlugin

参数:无

返回值PluginInterface *

功能:创建插件接口

PluginInterface *HousekeepingPlugin::getInstance

参数:无

返回值PluginInterface *

功能:获取实例

HousekeepingPlugin::activate

参数:无

返回值:无

功能激活插件功能由main加载参数时遍历处理

HousekeepingPlugin::deactivate

参数:无

返回值:无

功能:注销插件,释放资源

housekeeping-manager.cpp

HousekeepingManager::HousekeepingManager 参数:无

返回值:无

功能:构造方法,初始化资源

HousekeepingManager::~HousekeepingManager 参数:无

返回值:无

功能:注销插件,释放资源

HousekeepingManager::HousekeepingManagerStart

参数:无

返回值:无

功能:检测当前容量,开启定时器固定时间触发功能。

HousekeepingManager::HousekeepingManagerStop

参数:无

返回值:无

功能:注销插件,释放资源

ldsm-trash-empty.cpp

实现容量监控报警弹窗,并根据功能清空回收站。 LdsmTrashEmpty::LdsmTrashEmpty(QWidget *parent) : QDialog(parent), ui(new Ui::LdsmTrashEmpty) LdsmTrashEmpty::~LdsmTrashEmpty() void LdsmTrashEmpty::checkButtonCancel() 执行取消按钮 void LdsmTrashEmpty::checkButtonTrashEmpty() 执行清空回收站 void LdsmTrashEmpty::deleteContents(const QString path) void LdsmTrashEmpty::connectEvent() 建立信号槽绑定按钮与事件的关系 void LdsmTrashEmpty::usdLdsmTrashEmpty() 功能:判断回收站是否为空,不为空则显示清空回收站按钮。 void LdsmTrashEmpty::windowLayoutInit() 容量监控弹窗初始化

模式切换kds)设计说明

模块说明

从显示器参数管理提供的DBus接口中获取当前屏幕数量并将用户设置的模式通过DBus发送到显示器参数管理模块。

函数说明

main.cpp

main()

widget.cpp

Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)

参数parent父窗口

返回值:无

功能:构造函数

Widget::~Widget()

参数:无

返回值:无

功能:析构函数

void Widget::screensParamChangedSignal(QString screensParam)

参数:显示器模式

返回值:无

功能该方法为链接xrandr提供的屏幕模式改变信号的槽函数当接收到该信号后关闭页面并退出。

void Widget::beginSetup()

参数:无

返回值:无

功能:初始化窗口参数,窗口资源,并建立信号的链接。

void Widget::setupComponent()

参数:无

返回值:无

功能调用xrandr提供的DBus接口查询当前屏幕参数查询当前屏幕模式并设置初始值。

void Widget::setupConnect()

参数:无

返回值:无

功能链接界面按钮的click事件并实现具体选项的功能

QString Widget::getScreensParam()

参数:无

返回值:无

功能:获取屏幕参数,被setupComponent()使用

int Widget::getCurrentStatus()

参数:无

返回值:无

功能:获取当前屏幕所处模式,传递给initCurrentStatus使用

void Widget::initCurrentStatus(int id)

参数:初始屏幕模式

返回值:无

功能:窗口打开标记当前所处的模式,

void Widget::setScreenModeByDbus(QString modeName)

参数:需要设置的屏幕模式

返回值:无

功能当用户选需要设置的显示模式时调用xrandr提供的DBus接口setScreenMode将用户选择的模式传递给xrandr组件由xrandr组件实现具体功能。

键盘参数管理**keyboard)设计说明**

模块说明

针对控制面板的键盘设置项:按键重复,延迟,速度,按键提示提供接口,当用户操作控制面板时,由控制面板设置对应的参数,后台监控到参数改动时设置对应参数。

并且记录用户对与大小写,数字键的操作,当用户按下按键时,记录状态,重启后恢复用户的操作习惯。

算法及流程

keyboard-manager.cpp

static KeyboardManager *KeyboardManagerNew()

参数:无

返回值:无

功能工厂模式实例化一个mKeyboardManager对象调用其他所需函数接口。

bool KeyboardManager::KeyboardManagerStart()

参数:无

返回值:无

功能keyboard的启动函数调用相关初始化函数进行启动项设置。

void KeyboardManager::numlock_install_xkb_callback ()

参数:无

返回值:无

功能keyboard键盘大小写设置开机检测是否开启大小写键回调其函数调用x事件进行相关设定。

void KeyboardManager::start_keyboard_idle_cb ()

参数:无

返回值:无

功能键盘设置的初始化函数启动监盘时从此处开始进行调用gsettings的相关配置文件进行读取初始化。

void apply_settings (QString);

参数str

返回值:无

功能读取系统下的gsettings配置文件进行读取设置相关参数与键盘功能是否开启如大小写等。

void XkbEventsFilter(int keyCode);

参数int

返回值:无

功能在x服务事件下的一些键值事件的处理。

void KeyboardManager::KeyboardManagerStop()

参数:无

返回值:无

功能keyboard组件的disactive之前的操作通过KeyboardManagerStop函数对其相关功能的关闭。

keybindings-plugin.cpp

PluginInterface *createSettingsPlugin

参数:无

返回值PluginInterface *

功能:创建插件接口

PluginInterface *KeyboardPlugin::getInstance

参数:无

返回值PluginInterface *

功能获取实例交于main.cpp的方法使用

KeyboardPlugin::activate

参数:无

返回值:无

功能激活插件功能由main加载参数时遍历处理

KeyboardPlugin::deactivate

参数:无

返回值:无

功能:注销插件,释放资源

KeyboardManager::KeyboardManager(QObject * parent)

参数父窗口指针当父窗口被delete时会自动释放其关联的子窗口。

返回值:无

功能:构造函数

KeyboardManager::~KeyboardManager()

参数:无

返回值:无

功能:析构函数

KeyboardManager *KeyboardManager::KeyboardManagerNew()

参数:无

返回值:无

功能:实例化键盘管理

bool KeyboardManager::KeyboardManagerStart()

参数:无

返回值:无

功能开启定时器并绑定超时信号到槽方法start_keyboard_idle_cb。

void KeyboardManager::KeyboardManagerStop()

参数:无

返回值:无

功能:释放资源。

void KeyboardManager::start_keyboard_idle_cb ()

参数:无

返回值:无

功能依次调用usd_keyboar_manager_apply_settings应用当前参数配置并针对org.ukui.peripherals-keyboard的改变信号与槽函数apply_settings建立关联。

void KeyboardXkb::usd_keyboard_xkb_init(KeyboardManager* kbd_manager)

参数:无

返回值:无

功能针对org.mate.peripherals-keyboard-xkb.general、org.mate.peripherals-keyboard-xkb.kbd建立相关槽函数当发生改变时借由mate进行实现。

void numlock_xkb_init (KeyboardManager *manager)

参数:无

返回值:无

功能:字母灯状态初始化

usd_keyboard_manager_apply_settings (this);

参数:无

返回值:无

功能:应用当前所有配置

void KeyboardManager::apply_settings (QString keys)

参数:无

返回值:无

功能并针对org.ukui.peripherals-keyboard的改变信号的槽函数当产生改变信号后由此方法实现改变的键值。

系统快捷键**media-keys)设计说明**

模块说明

快捷键,又叫快速键或热键,指通过某些特定的按键、按键顺序或按键组合来完成一个操作,很多快捷键往往与如 Ctrl 键、Shift 键、Alt 键、Fn 键、 Enter键等配合使用。利用快捷键可以代替鼠标做一些工作,用户可以方便快速的完成一些操作。

算法及流程

mediakey-manager.cpp

bool MediaKeysManager::mediaKeysStart(GError*)

参数GError

返回值:无

功能mediakey激活之后的启动函数此处开始调用相关的快捷键初始化接口对其相关功能与配置进行初始化操作。

void mediaKeysStop();

参数:无

返回值:无

功能mediakey组件相关功能的注销函数此时相关功能处理挂起失效状态还未注销其后台进程。

void initScreens();

参数:无

返回值:无

功能初始化screen调用函数gdk_display_get_default与gdk_display_get_default_screen(display)接口。

void MediaKeysManager::initXeventMonitor()

参数:无

返回值:无

功能x服务下对keypress的监控响应与keyrelease事件的释放功能。

bool MediaKeysManager::getScreenLockState()

参数:无

返回值:无

功能函数内部写有dbus接口通过调用回调的mDbusScreensaveMessage获取当前的ScreenLockState的状态。

void doMicSoundAction()

参数:无

返回值:无

功能键盘中声音快捷键设置的函数入口通过键盘音量键设置音量的大小与提示框的ui可视化显示。

void doBrightAction(int)

参数int

返回值:无

功能键盘中可视化亮度快捷键设置的函数入口键盘的亮度调节功能设置亮度的变化与可视化ui窗口的显示。

void doPowerOffAction();

参数:无

返回值:无

功能对屏幕键盘的快捷键函数接口按下电源power键对屏幕的息屏相关操作的处理。

void doTouchpadAction(int);

参数int

返回值:无

功能对笔记本触摸板的相关设置通过控制面板调用读取触摸板的gesttings的配置文件org.ukui.peripherals-touchpad接口进行读与属性的设置。

keybindings-plugin.cpp

PluginInterface *createSettingsPlugin

参数:无

返回值PluginInterface *

功能:创建插件接口

PluginInterface *HousekeepingPlugin::getInstance

参数:无

返回值PluginInterface *

功能:获取实例

KeybindingsPlugin::activate

参数:无

返回值:无

功能激活插件功能由main加载参数时遍历处理

KeybindingsPlugin::deactivate

参数:无

返回值:无

功能:注销插件,释放资源

定位器参数管理**mouse)设计说明**

模块说明

鼠标设置,对鼠标的相关的设置,设置一些鼠标相关的属性,如鼠标速度的响应,鼠标的左右手操作,与前进后退的鼠标快捷键功能等。

算法及流程

图 12 mouse设置流程

mouse-manager.cpp

void MouseManager::MouseManagerIdleCb( )

参数:无

返回值:无

功能鼠标事件的初始化函数接口函数的开始入口初始化其相关功能与读取设置个gsettings的配置文件属性。

void MouseCallback(QString keys)

参数str

返回值:无

功能mouse的回调函数设置一些鼠标相关的事件功能如鼠标的点击回调鼠标滚轮的速度等。

void SetLeftHandedAll (bool mouse_left_handed, bool touchpad_left_handed)

参数bool

返回值:无

功能打开控制面板控制面板此功能的ui按钮通过信号监控调用相关联的函数接口设置鼠标的左右手操作。

void SetMouseWheelSpeed (int speed)

参数int

返回值:无

功能对鼠标滚轮功能设置的函数接口对滚轮速度的设置与限制不能小于0对鼠标前进后退功能的设置。

void SetMouseSettings()

参数int

返回值:无

功能获取配置文件的gesttings设置的KEY_LEFT_HANDED鼠标的值并传值给其他功能接口作为参数调用。

void SetMotionLibinput (XDeviceInfo *device_info)

参数XDeviceInfo *device_info

返回值:无

功能x事件对输入设备的监控通过传入设备的id号与name名称对其进行属性的挂载。

keybindings-plugin.cpp

PluginInterface *createSettingsPlugin

参数:无

返回值PluginInterface *

功能:创建插件接口

PluginInterface *HousekeepingPlugin::getInstance

参数:无

返回值PluginInterface *

功能:获取实例

KeybindingsPlugin::activate

参数:无

返回值:无

功能激活插件功能由main加载参数时遍历处理

KeybindingsPlugin::deactivate

参数:无

返回值:无

功能:注销插件,释放资源

多媒体快捷键**mpris)设计说明**

模块说明

特殊媒体快捷按键,可以控制一些媒体播放器的快捷键,如: 播放、暂停、停止等。

mpris-manager.cpp

bool MprisManagerStart(GError **error)

参数GError

返回值:无

功能媒体快捷键的函数启动初始化入口实现了对dbus信号等的接收对象的实例化与回调的过程。

void MprisManagerStop()

参数:无

返回值:无

功能mpris快捷键功能资源的释放与stop过程。

void MprisManager::serviceRegisteredSlot(const QString& service)

参数const str

返回值:无

功能A media player was just run and should be added to the head of @mPlayerQuque.。

void MprisManager::serviceUnregisteredSlot(const QString& service)

参数const str

返回值:无

功能if anyone dbus service that from @busNames quit,this func will be called。

void keyPressed(QString,QString)

参数str

返回值:无

功能after catch MediaPlayerKeyPressed() signal, this function will be called。

声音提醒**sound)设计说明**

模块说明

提示音设置listen for org.mate.sound。

sound-manager.cpp

bool SoundManagerStart(GError **error)

参数GError

返回值:无

功能Starting sound manager beginuse gsettings that We listen for change of the selected theme。

void SoundManagerStop()

参数:无

返回值:无

功能Stopping sound manager释放了一些所需要的object资源。

void SoundManager::trigger_flush ()

参数:无

返回值:无

功能We delay the flushing a bit so that we can coalesce multiple changes into a single cache flush 。

bool SoundManager::register_directory_callback (const QString path, GError **error)

参数const strGError

返回值bool

功能对注册服务之后收到事件的回调并建立其对file_monitor_changed_cb接口的connect。

keybindings-plugin.cpp

PluginInterface *createSettingsPlugin

参数:无

返回值PluginInterface *

功能:创建插件接口

PluginInterface *HousekeepingPlugin::getInstance

参数:无

返回值PluginInterface *

功能:获取实例

KeybindingsPlugin::activate

参数:无

返回值:无

功能激活插件功能由main加载参数时遍历处理

KeybindingsPlugin::deactivate

参数:无

返回值:无

功能:注销插件,释放资源

光标提醒**usd-locate-pointer)设计说明**

模块说明

对光标事件的设置使用gdk的应用对光标的start、pause、rewind、fps、duration、running等可视化事件的处理配置。

参数:无

返回值PluginInterface *

功能:创建插件接口

PluginInterface *HousekeepingPlugin::getInstance

参数:无

返回值PluginInterface *

功能:获取实例

KeybindingsPlugin::activate

参数:无

返回值:无

功能激活插件功能由main加载参数时遍历处理

KeybindingsPlugin::deactivate

参数:无

返回值:无

功能:注销插件,释放资源

热插拔设备管理**xinput)设计说明**

模块说明

xinput对输入设备的管理主要通过预定设计的配置文件去管理与驱动一些input设备可以降低出现问题的概率与多次热插拔之后响应速率延时的问题。

算法及流程

xinputmanager.cpp

void updateButtonMap()

参数:无

返回值:无

功能:更新触控笔映射

void XinputManager::SetPenRotation(int device_id)

参数int

返回值:无

功能触控笔函数的处理接口通过对输入设备id的获取与识别对其进行相关的屏幕触控映射处理。

int EventSift(XIHierarchyEvent *event, int flag)

参数XIHierarchyEvent int

返回值int

功能筛选出发生事件的设备ID所有设备的事件信息与当前发生的事件若失败返回-1成功则返回获取到的id值。

void ListeningToInputEvent()

参数:无

返回值:无

功能ListeningToInputEvent此函数主要对其所有输入设备的事件进行监控。

keybindings-plugin.cpp

PluginInterface *createSettingsPlugin

参数:无

返回值PluginInterface *

功能:创建插件接口

PluginInterface *HousekeepingPlugin::getInstance

参数:无

返回值PluginInterface *

功能:获取实例

KeybindingsPlugin::activate

参数:无

返回值:无

功能激活插件功能由main加载参数时遍历处理

KeybindingsPlugin::deactivate

参数:无

返回值:无

功能:注销插件,释放资源

显示器参数管理**xrandr)设计说明**

模块说明

该模块记录用户设置的每组显示器参数当接入已配置过的显示器时通过《显示参数恢复功能》恢复用户设置的参数当显示器从未接入过或者配置文件损坏时按照《缺省显示规则_》_进行设置参数设置成功后按照触摸设备映射规则进行重新映射触摸屏、触控笔与显示器的关系。

显示参数恢复功能

该功能将接入过的显示器参数保存至唯一码命名的配置文件,并根据当前的显示模式保存至:实时参数文件夹,第一屏参数文件夹,其他屏幕参数文件夹,镜像屏参数文件夹,通过此种方法可恢复用户在任意模式下的屏幕参数并进行恢复,无需用户再次针对特定屏幕组合进行设置,从而达到一次设置终身使用的效果。

唯一码生成方式

根据显示器的edid信息生成MD5-hash编码当有多个显示器接入时采用多个显示器的信息生成显示器组MD5-hash编码。

缺省显示规则

第一屏 最大分辨率显示首个识别到的屏幕,设置为主屏并放置到(0,0)点坐标进行显示。

其他屏 最大分辨率显示器最后一个识别到的屏幕,设置为主屏并放置到(0,0)点坐标进行显示。

镜像屏幕 取出多个屏幕中共同存在的最大分辨率并同时设置到00点进行显示。

拓展屏幕 将第一个识别到的屏幕设置为主屏并放到00剩余的屏幕放到第一个屏幕宽0坐标进行显示。

触摸设备映射规则

当插件启动以及显示参数(分辨率、角度)发生变化时会触发此功能,对触摸设备进行重新映射。

映射规则:

首先读取控制面板生成的触摸配置文件,按照配置内取到的映射关系进行映射。

当配置文件内的映射关系全部处理完毕后,仍有部分设备没有映射时则按照如下规则进行映射:

按照屏幕绝对尺寸和触摸设备尺寸误差2%进行匹配映射先进行映射。对于剩余设备直接映射。

触摸屏与触控笔可映射到同一显示器。

启动流程

软件启动时,获取当前的屏幕唯一码然后根据配置文件存在情况进行设置:如存在则读取恢复,如不存在则设置为缺省参数进行设置。

事件循环流程

当用户修改屏幕参数时,根据当前屏幕模式将参数实时保存至对应的文件夹内。

当用户切换模式时,取出该模式下的对应参数进行设置,如对应参数文件夹的配置不存在时,则按照缺省规则进行显示,并将参数文件复制一份到实时参数文件夹。

当接入屏幕时,首先识别出唯一码,而后读取实时参数文件夹下以唯一码命名的参数文件并设置显示器,如文件不存在则按照缺省规则进行显示。

xrandr-manager.cpp

void XrandrManager::StartXrandrIdleCb()

参数:无

返回值:无

功能屏幕事件相关的初始化回调函数对screen设备的读取配置信息模式的设置等相关入口。

void XrandrManager::applyConfig()

参数:无

返回值:无

功能函数apply的入口设置了autoRemapTouchscreen的功能与sendScreenModeToDbus的信号发送。

void XrandrManager::outputConnectedWithoutConfigFile(KScreen::Output *newOutput, char outputCount)

参数KScreen::Output *newOutput, char outputCount

返回值:无

功能:接入时没有配置文件的处理函数,即处理预定设置,单屏位最优分辨率,多屏幕为镜像模式。

void XrandrManager::setScreenModeToFirst(bool isFirstMode)

参数bool

返回值:无

功能设置屏幕为第一屏的函数入口通过遍历input设备找到第一个屏幕默认为内屏

void XrandrManager::RotationChangedEvent(const QString &rotation)

参数const str

返回值:无

功能获取status-manager发来的信号的dbus值通过对pc与rotation信号的解析设置屏幕旋转的角度与模式。

void XrandrManager::SaveConfigTimerHandle()

参数:无

返回值:无

功能处理来自控制面板操作的接口获取控制面板中对screen参数的设定写入相应的配置文件进行保存映射。

void XrandrManager::autoRemapTouchscreen()

参数:无

返回值:无

功能:处理触摸屏的配置映射关系,读取配置文件映射关系映射,配置文件不满足所有设备时,进行按照设备物理尺寸匹配进行自动映射。

keybindings-plugin.cpp

PluginInterface *createSettingsPlugin

参数:无

返回值PluginInterface *

功能:创建插件接口

PluginInterface *HousekeepingPlugin::getInstance

参数:无

返回值PluginInterface *

功能:获取实例

KeybindingsPlugin::activate

参数:无

返回值:无

功能激活插件功能由main加载参数时遍历处理

KeybindingsPlugin::deactivate

参数:无

返回值:无

功能:注销插件,释放资源

GDK参数设置xsettings)设计说明**

模块说明

设置底层系统主题变量设定了一些光标等ui事件的gdk主题。

代码统计

wc -l find ./ -name "*.c";find -name "*.h";find -name "*.cpp" 整理前39196 wc -c find ./ -name "*.c";find -name "*.h";find -name "*.cpp" 整理前1242208