forked from quickshell/quickshell
hyprland/global_shortcuts: add GlobalShortcut
This commit is contained in:
parent
87a884ca36
commit
bba8cb8a7d
14 changed files with 569 additions and 6 deletions
115
src/wayland/hyprland/global_shortcuts/qml.cpp
Normal file
115
src/wayland/hyprland/global_shortcuts/qml.cpp
Normal file
|
@ -0,0 +1,115 @@
|
|||
#include "qml.hpp"
|
||||
#include <utility>
|
||||
|
||||
#include <qlogging.h>
|
||||
#include <qobject.h>
|
||||
#include <qtmetamacros.h>
|
||||
|
||||
#include "manager.hpp"
|
||||
#include "shortcut.hpp"
|
||||
|
||||
namespace qs::hyprland::global_shortcuts {
|
||||
using impl::GlobalShortcutManager;
|
||||
|
||||
GlobalShortcut::~GlobalShortcut() {
|
||||
auto* manager = GlobalShortcutManager::instance();
|
||||
if (manager != nullptr) {
|
||||
manager->unregisterShortcut(this->mAppid, this->mName);
|
||||
}
|
||||
}
|
||||
|
||||
void GlobalShortcut::onPostReload() {
|
||||
if (this->mName.isEmpty()) {
|
||||
qWarning() << "Unable to create GlobalShortcut with empty name.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto* manager = GlobalShortcutManager::instance();
|
||||
if (manager == nullptr) {
|
||||
qWarning() << "The active compositor does not support hyprland_global_shortcuts_v1.";
|
||||
qWarning() << "GlobalShortcut will not work.";
|
||||
return;
|
||||
}
|
||||
|
||||
this->shortcut = manager->registerShortcut(
|
||||
this->mAppid,
|
||||
this->mName,
|
||||
this->mDescription,
|
||||
this->mTriggerDescription
|
||||
);
|
||||
|
||||
QObject::connect(this->shortcut, &ShortcutImpl::pressed, this, &GlobalShortcut::onPressed);
|
||||
QObject::connect(this->shortcut, &ShortcutImpl::released, this, &GlobalShortcut::onReleased);
|
||||
}
|
||||
|
||||
bool GlobalShortcut::isPressed() const { return this->mPressed; }
|
||||
|
||||
QString GlobalShortcut::appid() const { return this->mAppid; }
|
||||
|
||||
void GlobalShortcut::setAppid(QString appid) {
|
||||
if (this->shortcut != nullptr) {
|
||||
qWarning() << "GlobalShortcut cannot be modified after creation.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (appid == this->mAppid) return;
|
||||
|
||||
this->mAppid = std::move(appid);
|
||||
emit this->appidChanged();
|
||||
}
|
||||
|
||||
QString GlobalShortcut::name() const { return this->mName; }
|
||||
|
||||
void GlobalShortcut::setName(QString name) {
|
||||
if (this->shortcut != nullptr) {
|
||||
qWarning() << "GlobalShortcut cannot be modified after creation.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (name == this->mName) return;
|
||||
|
||||
this->mName = std::move(name);
|
||||
emit this->nameChanged();
|
||||
}
|
||||
|
||||
QString GlobalShortcut::description() const { return this->mDescription; }
|
||||
|
||||
void GlobalShortcut::setDescription(QString description) {
|
||||
if (this->shortcut != nullptr) {
|
||||
qWarning() << "GlobalShortcut cannot be modified after creation.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (description == this->mDescription) return;
|
||||
|
||||
this->mDescription = std::move(description);
|
||||
emit this->descriptionChanged();
|
||||
}
|
||||
|
||||
QString GlobalShortcut::triggerDescription() const { return this->mTriggerDescription; }
|
||||
|
||||
void GlobalShortcut::setTriggerDescription(QString triggerDescription) {
|
||||
if (this->shortcut != nullptr) {
|
||||
qWarning() << "GlobalShortcut cannot be modified after creation.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (triggerDescription == this->mTriggerDescription) return;
|
||||
|
||||
this->mTriggerDescription = std::move(triggerDescription);
|
||||
emit this->triggerDescriptionChanged();
|
||||
}
|
||||
|
||||
void GlobalShortcut::onPressed() {
|
||||
this->mPressed = true;
|
||||
emit this->pressed();
|
||||
emit this->pressedChanged();
|
||||
}
|
||||
|
||||
void GlobalShortcut::onReleased() {
|
||||
this->mPressed = false;
|
||||
emit this->released();
|
||||
emit this->pressedChanged();
|
||||
}
|
||||
|
||||
} // namespace qs::hyprland::global_shortcuts
|
Loading…
Add table
Add a link
Reference in a new issue