Skip to content

Commit 832a73f

Browse files
yixinsharkdeepin-bot[bot]
authored andcommitted
feat(keyboard): wire custom shortcut CRUD on Wayland
Wire the control center's add/modify/delete custom shortcut flows to the new dde-services Keybinding1 custom CRUD methods on Wayland, replacing the previous early-return stubs. Each Wayland call is observed with a QDBusPendingCallWatcher so failures trigger refreshShortcut()/onAdded/ onShortcutChanged instead of mutating the local model optimistically. Fetch a custom shortcut's command via the new GetShortcutCommand D-Bus method: requestShortcutCommand fires one async call per custom shortcut after ListAllShortcuts/SearchShortcuts/GetShortcut/ShortcutChanged, and onGetShortcutCommandFinished overlays the Exec field onto the already- built JSON object and re-emits shortcutQueried. The whole ShortcutInfo JSON is stashed on the watcher so the handler needs no field-by-field reconstruction. ShortcutModel::onKeyBindingChanged now handles insert-on-change for new ids arriving via ShortcutChanged: section-bearing configs are grouped into m_groupInfos, sectionless Custom configs get the legacy "Custom" group, and a dead unreachable tail (invalidateSystemShortcutNamesCache + addCustomInfo after two returning branches) is removed. Extract KeyboardWorker::callModifyCustomShortcut() so the Wayland modify path (modifyCustomShortcut and setNewCustomShortcut) shares one watcher/id/type/connect setup. setNewCustomShortcut keeps the X11 fallback calling ModifyCustomShortcut directly, since on X11 it is also invoked from onCustomConflictCleanFinished after conflict cleanup. 将控制中心自定义快捷键的增删改流程在 Wayland 下接入新的 dde-services Keybinding1 自定义增删改方法,替换原先的提前 return 桩。每次 Wayland 调用 均用 QDBusPendingCallWatcher 观察结果,失败时触发 refreshShortcut()/ onAdded/onShortcutChanged,而不再乐观地修改本地模型。 通过新增的 GetShortcutCommand D-Bus 方法获取自定义快捷键命令: requestShortcutCommand 在 ListAllShortcuts/SearchShortcuts/GetShortcut/ ShortcutChanged 之后对每个自定义快捷键发起一次异步调用, onGetShortcutCommandFinished 将 Exec 字段叠加到已构建好的 JSON 对象上并 重新发射 shortcutQueried。整个 ShortcutInfo JSON 暂存在 watcher 上,处理 函数无需逐字段重建。 ShortcutModel::onKeyBindingChanged 现支持通过 ShortcutChanged 到达的新 id 的"变更即插入":带 Section 的配置归入 m_groupInfos,无 Section 的 Custom 配置归入传统"Custom"分组,并删除了两个 return 分支之后不可达的死代码尾段。 抽取 KeyboardWorker::callModifyCustomShortcut(),让 Wayland 修改路径 (modifyCustomShortcut 与 setNewCustomShortcut)共用一份 watcher/id/type/ connect 设置。setNewCustomShortcut 保留 X11 直接调用 ModifyCustomShortcut 的兜底,因为 X11 下它也会在冲突清理完成后由 onCustomConflictCleanFinished 调用。 Log: feat(keyboard): wire custom shortcut CRUD on Wayland Change-Id: I793aa520968c92d03bb603721f00b1c7ac252fa5
1 parent 4537dae commit 832a73f

9 files changed

Lines changed: 315 additions & 55 deletions

src/plugin-keyboard/operation/keyboardcontroller.cpp

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ KeyboardController::KeyboardController(QObject *parent)
4545
connect(m_model, &KeyboardModel::userLayoutChanged, this, &KeyboardController::layoutCountChanged);
4646
connect(m_model, &KeyboardModel::curLayoutChanged, this, &KeyboardController::currentLayoutChanged);
4747
connect(m_model, &KeyboardModel::keyboardEnabledChanged, this, &KeyboardController::keyboardEnabledChanged);
48+
connect(m_worker, &KeyboardWorker::shortcutCommandReady,
49+
this, &KeyboardController::shortcutCommandReady);
4850

4951
connect(m_shortcutModel, &ShortcutModel::keyEvent, this, [this](bool press, const QString &shortcut){
5052
ShortcutInfo *current = m_shortcutModel->currentInfo();
@@ -282,12 +284,7 @@ QString KeyboardController::checkDesktopCmd(const QString &cmd)
282284
void KeyboardController::addCustomShortcut(const QString &name, const QString &cmd, const QString &accels)
283285
{
284286
if (m_worker->isWayland()) {
285-
// dde-services' Keybinding1 has no AddCustomShortcut yet (the service's
286-
// own CONTROL_CENTER_INTEGRATION.md marks custom-shortcut CRUD as 服务侧需补齐).
287-
// Bail out before any side effect (the conflict Disable below, the
288-
// optimistic model insert in the worker) so the row doesn't flicker.
289-
// TODO: wire up once AddCustomShortcut/ModifyCustomShortcut/DeleteCustomShortcut land.
290-
qWarning() << "[Wayland] addCustomShortcut not yet supported by dde-services; ignoring";
287+
m_worker->addCustomShortcut(name, checkDesktopCmd(cmd), accels);
291288
return;
292289
}
293290

@@ -303,21 +300,21 @@ void KeyboardController::addCustomShortcut(const QString &name, const QString &c
303300

304301
void KeyboardController::modifyCustomShortcut(const QString &id, const QString &name, const QString &cmd, const QString &accels)
305302
{
306-
if (m_worker->isWayland()) {
307-
// No ModifyCustomShortcut on the Wayland service yet — return before
308-
// mutating the local model or triggering the conflict Disable below,
309-
// so the UI is unchanged rather than showing an edit that won't persist.
310-
// TODO: wire up once dde-services implements custom-shortcut CRUD.
311-
qWarning() << "[Wayland] modifyCustomShortcut not yet supported by dde-services; ignoring";
312-
return;
313-
}
314-
315303
ShortcutInfo *shortcut = m_shortcutModel->findInfoIf([id](ShortcutInfo *info){ return id == info->id; });
316304
if (!shortcut) {
317305
qWarning() << "shortcut not found..." << id << name;
318306
return;
319307
}
320308

309+
if (m_worker->isWayland()) {
310+
ShortcutInfo updated = *shortcut;
311+
updated.name = name;
312+
updated.command = checkDesktopCmd(cmd);
313+
updated.accels = accels;
314+
m_worker->modifyCustomShortcut(&updated);
315+
return;
316+
}
317+
321318
// Clear conflicting shortcuts when modifying
322319
if (auto conflict = m_shortcutModel->getInfo(accels)) {
323320
m_worker->onDisableShortcut(conflict);
@@ -330,17 +327,14 @@ void KeyboardController::modifyCustomShortcut(const QString &id, const QString &
330327
m_worker->modifyCustomShortcut(shortcut);
331328
}
332329

333-
void KeyboardController::deleteCustomShortcut(const QString &id)
330+
void KeyboardController::requestShortcutCommand(const QString &id)
334331
{
335-
if (m_worker->isWayland()) {
336-
// No DeleteCustomShortcut on the Wayland service yet. Return before
337-
// delShortcut's optimistic delInfo() (which removes + deletes the row);
338-
// otherwise the row would vanish then reappear on the next refresh.
339-
// TODO: wire up once dde-services implements custom-shortcut CRUD.
340-
qWarning() << "[Wayland] deleteCustomShortcut not yet supported by dde-services; ignoring";
341-
return;
342-
}
332+
if (m_worker)
333+
m_worker->requestShortcutCommand(id);
334+
}
343335

336+
void KeyboardController::deleteCustomShortcut(const QString &id)
337+
{
344338
ShortcutInfo *shortcut = m_shortcutModel->findInfoIf([id](ShortcutInfo *info){ return id == info->id; });
345339
if (!shortcut) {
346340
qWarning() << "shortcut not found..." << id;

src/plugin-keyboard/operation/keyboardcontroller.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public Q_SLOTS:
9696

9797
void addCustomShortcut(const QString &name, const QString &cmd, const QString &accels);
9898
void modifyCustomShortcut(const QString &id, const QString &name, const QString &cmd, const QString &accels);
99+
Q_INVOKABLE void requestShortcutCommand(const QString &id);
99100
void modifyShortcut(const QString &id, const QString &accels, const int &type);
100101
void deleteCustomShortcut(const QString &id);
101102
void clearShortcut(const QString &id, const int &type);
@@ -130,6 +131,7 @@ public Q_SLOTS:
130131

131132
void waylandKeyCaptureFinished(const QString &id, int type, const QString &accels);
132133
void waylandKeyCaptureFailed(const QString &id, int type, int reason);
134+
void shortcutCommandReady(const QString &id, const QString &command, bool available);
133135

134136
void conflictTextChanged();
135137
void keyboardEnabledChanged();

src/plugin-keyboard/operation/keyboarddbusproxy.cpp

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,8 @@ void KeyboardDBusProxy::onListAllShortcutsNewFinished(QDBusPendingCallWatcher *w
293293
{
294294
QDBusPendingReply<QList<ShortcutInfoNew>> reply = *w;
295295
if (!reply.isError()) {
296-
QString json = convertShortcutListToJson(reply.value());
296+
const QList<ShortcutInfoNew> shortcuts = reply.value();
297+
QString json = convertShortcutListToJson(shortcuts);
297298
Q_EMIT AllShortcutsReady(json);
298299
} else {
299300
qWarning() << "Wayland ListAllShortcuts failed:" << reply.error();
@@ -354,7 +355,8 @@ void KeyboardDBusProxy::onGetShortcutNewFinished(QDBusPendingCallWatcher *w)
354355
{
355356
QDBusPendingReply<ShortcutInfoNew> reply = *w;
356357
if (!reply.isError()) {
357-
QString json = convertShortcutToJson(reply.value());
358+
const ShortcutInfoNew info = reply.value();
359+
QString json = convertShortcutToJson(info);
358360
Q_EMIT shortcutQueried(json);
359361
}
360362
w->deleteLater();
@@ -462,27 +464,34 @@ QDBusPendingReply<> KeyboardDBusProxy::AddShortcutKeystroke(const QString &in0,
462464
return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("AddShortcutKeystroke"), argumentList);
463465
}
464466

465-
QDBusPendingReply<> KeyboardDBusProxy::AddCustomShortcut(const QString &in0, const QString &in1, const QString &in2)
467+
QDBusPendingReply<QString> KeyboardDBusProxy::AddCustomShortcut(const QString &in0, const QString &in1, const QString &in2)
466468
{
467469
QList<QVariant> argumentList;
468470
argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2);
469471
return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("AddCustomShortcut"), argumentList);
470472
}
471473

472-
QDBusPendingReply<> KeyboardDBusProxy::ModifyCustomShortcut(const QString &in0, const QString &in1, const QString &in2, const QString &in3)
474+
QDBusPendingReply<bool> KeyboardDBusProxy::ModifyCustomShortcut(const QString &in0, const QString &in1, const QString &in2, const QString &in3)
473475
{
474476
QList<QVariant> argumentList;
475477
argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2) << QVariant::fromValue(in3);
476478
return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("ModifyCustomShortcut"), argumentList);
477479
}
478480

479-
QDBusPendingReply<> KeyboardDBusProxy::DeleteCustomShortcut(const QString &in0)
481+
QDBusPendingReply<bool> KeyboardDBusProxy::DeleteCustomShortcut(const QString &in0)
480482
{
481483
QList<QVariant> argumentList;
482484
argumentList << QVariant::fromValue(in0);
483485
return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("DeleteCustomShortcut"), argumentList);
484486
}
485487

488+
QDBusPendingReply<QString> KeyboardDBusProxy::GetShortcutCommand(const QString &in0)
489+
{
490+
QList<QVariant> argumentList;
491+
argumentList << QVariant::fromValue(in0);
492+
return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("GetShortcutCommand"), argumentList);
493+
}
494+
486495
QDBusPendingReply<> KeyboardDBusProxy::GrabScreen()
487496
{
488497
QList<QVariant> argumentList;
@@ -505,7 +514,8 @@ void KeyboardDBusProxy::onSearchShortcutsNewFinished(QDBusPendingCallWatcher *w)
505514
{
506515
QDBusPendingReply<QList<ShortcutInfoNew>> reply = *w;
507516
if (!reply.isError()) {
508-
QString json = convertShortcutListToJson(reply.value());
517+
const QList<ShortcutInfoNew> shortcuts = reply.value();
518+
QString json = convertShortcutListToJson(shortcuts);
509519
Q_EMIT searchShortcutsReady(json);
510520
}
511521
w->deleteLater();

src/plugin-keyboard/operation/keyboarddbusproxy.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,10 @@ public slots:
248248
QDBusPendingReply<bool> callModifyHotkeys(const QString &id, const QStringList &hotkeys);
249249
// Wayland: replace hotkey — remove newHotkey from conflictId, add to targetId.
250250
QDBusPendingReply<bool> callReplaceHotkey(const QString &targetId, const QString &newHotkey, const QString &conflictId);
251-
QDBusPendingReply<> AddCustomShortcut(const QString &in0, const QString &in1, const QString &in2);
252-
QDBusPendingReply<> ModifyCustomShortcut(const QString &in0, const QString &in1, const QString &in2, const QString &in3);
253-
QDBusPendingReply<> DeleteCustomShortcut(const QString &in0);
251+
QDBusPendingReply<QString> AddCustomShortcut(const QString &in0, const QString &in1, const QString &in2);
252+
QDBusPendingReply<bool> ModifyCustomShortcut(const QString &in0, const QString &in1, const QString &in2, const QString &in3);
253+
QDBusPendingReply<bool> DeleteCustomShortcut(const QString &in0);
254+
QDBusPendingReply<QString> GetShortcutCommand(const QString &in0);
254255
QDBusPendingReply<> GrabScreen();
255256
void SetNumLockState(int in0);
256257
QDBusPendingReply<QString> GetShortcut(const QString &in0, int in1);

src/plugin-keyboard/operation/keyboardwork.cpp

Lines changed: 125 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -350,21 +350,63 @@ void KeyboardWorker::modifyShortcutEdit(ShortcutInfo *info) {
350350

351351
void KeyboardWorker::addCustomShortcut(const QString &name, const QString &command, const QString &accels)
352352
{
353-
m_keyboardDBusProxy->AddCustomShortcut(name, command, accels);
353+
if (!m_keyboardDBusProxy->isWayland()) {
354+
m_keyboardDBusProxy->AddCustomShortcut(name, command, accels);
355+
return;
356+
}
357+
358+
QDBusPendingReply<QString> reply = m_keyboardDBusProxy->AddCustomShortcut(name, command, accels);
359+
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
360+
connect(watcher, &QDBusPendingCallWatcher::finished,
361+
this, &KeyboardWorker::onAddCustomShortcutFinished);
362+
}
363+
364+
void KeyboardWorker::callModifyCustomShortcut(const QString &id, const QString &name,
365+
const QString &command, const QString &accels,
366+
int type)
367+
{
368+
QDBusPendingReply<bool> reply = m_keyboardDBusProxy->ModifyCustomShortcut(id, name, command, accels);
369+
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
370+
watcher->setProperty("id", id);
371+
watcher->setProperty("type", type);
372+
connect(watcher, &QDBusPendingCallWatcher::finished,
373+
this, &KeyboardWorker::onModifyCustomShortcutFinished);
374+
}
375+
376+
void KeyboardWorker::requestShortcutCommand(const QString &id)
377+
{
378+
ShortcutInfo *shortcut = m_shortcutModel ? m_shortcutModel->findInfoIf([&id](ShortcutInfo *info) {
379+
return info->id == id;
380+
}) : nullptr;
381+
const QString fallbackCommand = shortcut ? shortcut->command : QString();
382+
383+
if (id.isEmpty() || !m_keyboardDBusProxy->isWayland()) {
384+
Q_EMIT shortcutCommandReady(id, fallbackCommand, !id.isEmpty());
385+
return;
386+
}
387+
388+
QDBusPendingReply<QString> reply = m_keyboardDBusProxy->GetShortcutCommand(id);
389+
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
390+
watcher->setProperty("id", id);
391+
watcher->setProperty("fallbackCommand", fallbackCommand);
392+
connect(watcher, &QDBusPendingCallWatcher::finished,
393+
this, &KeyboardWorker::onGetShortcutCommandFinished);
354394
}
355395

356396
void KeyboardWorker::modifyCustomShortcut(ShortcutInfo *info)
357397
{
398+
if (m_keyboardDBusProxy->isWayland()) {
399+
callModifyCustomShortcut(info->id, info->name, info->command, info->accels, info->type);
400+
return;
401+
}
402+
358403
if (info->replace) {
359404
onDisableShortcut(info->replace);
360405
}
361406

362407
// reset replace shortcut
363408
info->replace = nullptr;
364409

365-
// Wayland custom-shortcut CRUD is stubbed at the controller layer
366-
// (KeyboardController::modifyCustomShortcut early-returns) until
367-
// dde-services implements ModifyCustomShortcut, so this body is X11-only.
368410
const QString &result = m_keyboardDBusProxy->LookupConflictingShortcut(info->accels);
369411

370412
if (!result.isEmpty()) {
@@ -408,9 +450,19 @@ QString KeyboardWorker::lookupConflictingShortcut(const QString &key)
408450

409451
void KeyboardWorker::delShortcut(ShortcutInfo* info)
410452
{
411-
m_keyboardDBusProxy->DeleteCustomShortcut(info->id);
412-
if (m_shortcutModel)
413-
m_shortcutModel->delInfo(info);
453+
if (!m_keyboardDBusProxy->isWayland()) {
454+
m_keyboardDBusProxy->DeleteCustomShortcut(info->id);
455+
if (m_shortcutModel)
456+
m_shortcutModel->delInfo(info);
457+
return;
458+
}
459+
460+
QDBusPendingReply<bool> reply = m_keyboardDBusProxy->DeleteCustomShortcut(info->id);
461+
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
462+
watcher->setProperty("id", info->id);
463+
watcher->setProperty("type", info->type);
464+
connect(watcher, &QDBusPendingCallWatcher::finished,
465+
this, &KeyboardWorker::onDeleteCustomShortcutFinished);
414466
}
415467

416468
void KeyboardWorker::setRepeatDelay(uint value)
@@ -931,6 +983,11 @@ void KeyboardWorker::cleanShortcutSlef(const QString &id, const int type, const
931983

932984
void KeyboardWorker::setNewCustomShortcut(const QString &id, const QString &name, const QString &command, const QString &accles)
933985
{
986+
if (m_keyboardDBusProxy->isWayland()) {
987+
callModifyCustomShortcut(id, name, command, accles, ShortcutModel::Custom);
988+
return;
989+
}
990+
934991
m_keyboardDBusProxy->ModifyCustomShortcut(id, name, command, accles);
935992
}
936993

@@ -1092,6 +1149,67 @@ void KeyboardWorker::onCustomConflictCleanFinished(QDBusPendingCallWatcher *w)
10921149
w->deleteLater();
10931150
}
10941151

1152+
void KeyboardWorker::onAddCustomShortcutFinished(QDBusPendingCallWatcher *watch)
1153+
{
1154+
QDBusPendingReply<QString> reply = *watch;
1155+
if (reply.isError() || reply.value().isEmpty()) {
1156+
qWarning() << "AddCustomShortcut failed:"
1157+
<< (reply.isError() ? reply.error().message() : QStringLiteral("server returned empty id"));
1158+
refreshShortcut();
1159+
} else {
1160+
onAdded(reply.value(), ShortcutModel::Custom);
1161+
}
1162+
1163+
watch->deleteLater();
1164+
}
1165+
1166+
void KeyboardWorker::onModifyCustomShortcutFinished(QDBusPendingCallWatcher *watch)
1167+
{
1168+
QDBusPendingReply<bool> reply = *watch;
1169+
const QString id = watch->property("id").toString();
1170+
const int type = watch->property("type").toInt();
1171+
const bool success = (!reply.isError() && reply.value());
1172+
if (!success) {
1173+
qWarning() << "ModifyCustomShortcut failed for" << id
1174+
<< (reply.isError() ? reply.error().message() : QStringLiteral("server returned false"));
1175+
refreshShortcut();
1176+
} else if (!id.isEmpty()) {
1177+
onShortcutChanged(id, type);
1178+
}
1179+
1180+
watch->deleteLater();
1181+
}
1182+
1183+
void KeyboardWorker::onDeleteCustomShortcutFinished(QDBusPendingCallWatcher *watch)
1184+
{
1185+
QDBusPendingReply<bool> reply = *watch;
1186+
const QString id = watch->property("id").toString();
1187+
const bool success = (!reply.isError() && reply.value());
1188+
if (!success) {
1189+
qWarning() << "DeleteCustomShortcut failed for" << id
1190+
<< (reply.isError() ? reply.error().message() : QStringLiteral("server returned false"));
1191+
}
1192+
refreshShortcut();
1193+
1194+
watch->deleteLater();
1195+
}
1196+
1197+
void KeyboardWorker::onGetShortcutCommandFinished(QDBusPendingCallWatcher *watch)
1198+
{
1199+
QDBusPendingReply<QString> reply = *watch;
1200+
const QString id = watch->property("id").toString();
1201+
QString command = watch->property("fallbackCommand").toString();
1202+
1203+
if (reply.isError()) {
1204+
qWarning() << "GetShortcutCommand failed for" << id << reply.error().message();
1205+
} else {
1206+
command = reply.value();
1207+
}
1208+
1209+
Q_EMIT shortcutCommandReady(id, command, !reply.isError() || !command.isEmpty());
1210+
watch->deleteLater();
1211+
}
1212+
10951213
QString KeyboardWorker::makeShortcutKey(const QString &id, int type)
10961214
{
10971215
return id + "_" + QString::number(type);

src/plugin-keyboard/operation/keyboardwork.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ class KeyboardWorker : public QObject
4949
void modifyShortcutEdit(ShortcutInfo* info);
5050
void addCustomShortcut(const QString& name, const QString& command, const QString& accels);
5151
void modifyCustomShortcut(ShortcutInfo *info);
52+
void requestShortcutCommand(const QString &id);
53+
// Fire ModifyCustomShortcut on the Wayland service and wire the reply to
54+
// onModifyCustomShortcutFinished. Shared by modifyCustomShortcut (Wayland
55+
// branch) and setNewCustomShortcut so the watcher/id/type setup stays in
56+
// one place.
57+
void callModifyCustomShortcut(const QString &id, const QString &name,
58+
const QString &command, const QString &accels,
59+
int type);
5260

5361
void grabScreen();
5462
bool checkAvaliable(const QString& key);
@@ -85,6 +93,7 @@ class KeyboardWorker : public QObject
8593
void onLettersChanged(QList<QString> letters);
8694
// 快捷键恢复默认完成
8795
void onResetFinished();
96+
void shortcutCommandReady(const QString &id, const QString &command, bool available);
8897

8998
public Q_SLOTS:
9099
void setLang(const QString &value);
@@ -122,6 +131,10 @@ public Q_SLOTS:
122131
void onLookupConflictForShortcutFinished(QDBusPendingCallWatcher *watch);
123132
void onShortcutCleanFinished(QDBusPendingCallWatcher *watch);
124133
void onCustomConflictCleanFinished(QDBusPendingCallWatcher *w);
134+
void onAddCustomShortcutFinished(QDBusPendingCallWatcher *watch);
135+
void onModifyCustomShortcutFinished(QDBusPendingCallWatcher *watch);
136+
void onDeleteCustomShortcutFinished(QDBusPendingCallWatcher *watch);
137+
void onGetShortcutCommandFinished(QDBusPendingCallWatcher *watch);
125138

126139
private:
127140
static QString makeShortcutKey(const QString &id, int type);

0 commit comments

Comments
 (0)