diff --git a/krunner/CMakeLists.txt b/krunner/CMakeLists.txt --- a/krunner/CMakeLists.txt +++ b/krunner/CMakeLists.txt @@ -33,6 +33,9 @@ configure_file(krunner.desktop.cmake ${CMAKE_CURRENT_BINARY_DIR}/krunner.desktop @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/krunner.desktop DESTINATION ${DATA_INSTALL_DIR}/kglobalaccel) +configure_file(krunner-daemon.desktop.cmake ${CMAKE_CURRENT_BINARY_DIR}/krunner-daemon.desktop @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/krunner-daemon.desktop DESTINATION ${AUTOSTART_INSTALL_DIR}) + set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KRunnerAppDBusInterface") configure_package_config_file(KRunnerAppDBusInterfaceConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/KRunnerAppDBusInterfaceConfig.cmake" diff --git a/krunner/dbus/org.kde.krunner.service.in b/krunner/dbus/org.kde.krunner.service.in --- a/krunner/dbus/org.kde.krunner.service.in +++ b/krunner/dbus/org.kde.krunner.service.in @@ -1,3 +1,3 @@ [D-BUS Service] Name=org.kde.krunner -Exec=@KDE_INSTALL_FULL_BINDIR@/krunner +Exec=@KDE_INSTALL_FULL_BINDIR@/krunner --daemon diff --git a/krunner/krunner-daemon.desktop.cmake b/krunner/krunner-daemon.desktop.cmake new file mode 100644 --- /dev/null +++ b/krunner/krunner-daemon.desktop.cmake @@ -0,0 +1,55 @@ +[Desktop Entry] +Exec=@CMAKE_INSTALL_PREFIX@/bin/krunner --daemon +Name=KRunner +Name[ar]=مشغّل.ك +Name[ast]=KRunner +Name[bs]=KPokretač +Name[ca]=KRunner +Name[ca@valencia]=KRunner +Name[cs]=KRunner +Name[da]=KRunner +Name[de]=KRunner +Name[el]=KRunner +Name[en_GB]=KRunner +Name[es]=KRunner +Name[et]=KRunner +Name[eu]=KRunner +Name[fi]=KRunner +Name[fr]=KRunner +Name[gl]=KRunner +Name[hu]=KRunner +Name[id]=KRunner +Name[is]=KRunner +Name[it]=KRunner +Name[ja]=KRunner +Name[ko]=KRunner +Name[lt]=KRunner +Name[nb]=KRunner +Name[nds]=KRunner +Name[nl]=KRunner +Name[nn]=KRunner +Name[pa]=ਕੇਰਨਰ +Name[pl]=KRunner +Name[pt]=KRunner +Name[pt_BR]=KRunner +Name[ru]=KRunner +Name[sk]=KRunner +Name[sl]=KRunner +Name[sr]=К‑извођач +Name[sr@ijekavian]=К‑извођач +Name[sr@ijekavianlatin]=K‑izvođač +Name[sr@latin]=K‑izvođač +Name[sv]=Kör program +Name[tr]=KRunner +Name[uk]=KRunner +Name[x-test]=xxKRunnerxx +Name[zh_CN]=KRunner +Name[zh_TW]=KRunner +OnlyShowIn=KDE; +Type=Application +X-DBUS-StartupType=Unique +X-DBUS-ServiceName=org.kde.krunner +X-KDE-StartupNotify=false +X-KDE-autostart-phase=2 +X-KDE-autostart-after=plasmashell +X-KDE-autostart-condition=krunnerrc:General:AutoStart:true diff --git a/shell/desktopview.h b/shell/desktopview.h --- a/shell/desktopview.h +++ b/shell/desktopview.h @@ -107,6 +107,7 @@ QPointer m_screenToFollow; WindowType m_windowType; KWayland::Client::PlasmaShellSurface *m_shellSurface; + QString m_krunnerText; }; #endif // DESKTOPVIEW_H diff --git a/shell/desktopview.cpp b/shell/desktopview.cpp --- a/shell/desktopview.cpp +++ b/shell/desktopview.cpp @@ -236,6 +236,8 @@ m_shellSurface = nullptr; break; } + } else if (e->type() == QEvent::FocusOut) { + m_krunnerText.clear(); } return PlasmaQuick::ContainmentView::event(e); @@ -259,12 +261,13 @@ if (!e->modifiers() || e->modifiers() == Qt::ShiftModifier) { const QString text = e->text().trimmed(); if (!text.isEmpty() && text[0].isPrint()) { + m_krunnerText += text; const QString interface(QStringLiteral("org.kde.krunner")); if (!KAuthorized::authorize(QStringLiteral("run_command"))) { return; } org::kde::krunner::App krunner(interface, QStringLiteral("/App"), QDBusConnection::sessionBus()); - krunner.query(text); + krunner.query(m_krunnerText); e->accept(); return; } diff --git a/shell/main.cpp b/shell/main.cpp --- a/shell/main.cpp +++ b/shell/main.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -225,5 +226,10 @@ SoftwareRendererNotifier::notifyIfRelevant(); + auto krunnerPeer = new QDBusInterface(QStringLiteral("org.kde.krunner"), QStringLiteral("/MainApplication"), QStringLiteral("org.freedesktop.DBus.Peer")); + if (krunnerPeer->isValid()) { + krunnerPeer->asyncCall(QStringLiteral("Ping")); + } + return app.exec(); }