File indexing completed on 2024-11-10 04:57:11
0001 /* 0002 SPDX-FileCopyrightText: 2022 Marco Martin <mart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "tileseditoreffect.h" 0007 #include "effect/effecthandler.h" 0008 0009 #include <QAction> 0010 #include <QQuickItem> 0011 #include <QTimer> 0012 0013 #include <KGlobalAccel> 0014 #include <KLocalizedString> 0015 0016 namespace KWin 0017 { 0018 0019 TilesEditorEffect::TilesEditorEffect() 0020 : m_shutdownTimer(std::make_unique<QTimer>()) 0021 { 0022 m_shutdownTimer->setSingleShot(true); 0023 connect(m_shutdownTimer.get(), &QTimer::timeout, this, &TilesEditorEffect::realDeactivate); 0024 connect(effects, &EffectsHandler::screenAboutToLock, this, &TilesEditorEffect::realDeactivate); 0025 0026 const QKeySequence defaultToggleShortcut = Qt::META | Qt::Key_T; 0027 m_toggleAction = std::make_unique<QAction>(); 0028 connect(m_toggleAction.get(), &QAction::triggered, this, &TilesEditorEffect::toggle); 0029 m_toggleAction->setObjectName(QStringLiteral("Edit Tiles")); 0030 m_toggleAction->setText(i18n("Toggle Tiles Editor")); 0031 KGlobalAccel::self()->setDefaultShortcut(m_toggleAction.get(), {defaultToggleShortcut}); 0032 KGlobalAccel::self()->setShortcut(m_toggleAction.get(), {defaultToggleShortcut}); 0033 m_toggleShortcut = KGlobalAccel::self()->shortcut(m_toggleAction.get()); 0034 0035 setSource(QUrl::fromLocalFile(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kwin/effects/tileseditor/qml/main.qml")))); 0036 } 0037 0038 TilesEditorEffect::~TilesEditorEffect() 0039 { 0040 } 0041 0042 QVariantMap TilesEditorEffect::initialProperties(Output *screen) 0043 { 0044 return QVariantMap{ 0045 {QStringLiteral("effect"), QVariant::fromValue(this)}, 0046 {QStringLiteral("targetScreen"), QVariant::fromValue(screen)}, 0047 }; 0048 } 0049 0050 void TilesEditorEffect::reconfigure(ReconfigureFlags) 0051 { 0052 setAnimationDuration(animationTime(200)); 0053 } 0054 0055 void TilesEditorEffect::toggle() 0056 { 0057 if (!isRunning()) { 0058 activate(); 0059 } else { 0060 deactivate(0); 0061 } 0062 } 0063 0064 void TilesEditorEffect::activate() 0065 { 0066 setRunning(true); 0067 } 0068 0069 void TilesEditorEffect::deactivate(int timeout) 0070 { 0071 const auto screens = effects->screens(); 0072 for (const auto screen : screens) { 0073 if (QuickSceneView *view = viewForScreen(screen)) { 0074 QMetaObject::invokeMethod(view->rootItem(), "stop"); 0075 } 0076 } 0077 0078 m_shutdownTimer->start(timeout); 0079 } 0080 0081 void TilesEditorEffect::realDeactivate() 0082 { 0083 setRunning(false); 0084 } 0085 0086 int TilesEditorEffect::animationDuration() const 0087 { 0088 return m_animationDuration; 0089 } 0090 0091 void TilesEditorEffect::setAnimationDuration(int duration) 0092 { 0093 if (m_animationDuration != duration) { 0094 m_animationDuration = duration; 0095 Q_EMIT animationDurationChanged(); 0096 } 0097 } 0098 0099 int TilesEditorEffect::requestedEffectChainPosition() const 0100 { 0101 return 70; 0102 } 0103 0104 void TilesEditorEffect::grabbedKeyboardEvent(QKeyEvent *keyEvent) 0105 { 0106 if (m_toggleShortcut.contains(keyEvent->key() | keyEvent->modifiers())) { 0107 if (keyEvent->type() == QEvent::KeyPress) { 0108 toggle(); 0109 } 0110 return; 0111 } 0112 QuickSceneEffect::grabbedKeyboardEvent(keyEvent); 0113 } 0114 0115 } // namespace KWin 0116 0117 #include "moc_tileseditoreffect.cpp"