mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-29 12:45:28 -05:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2ad1ced77 |
@@ -3107,3 +3107,4 @@ AdvSceneSwitcher.sceneGroupTab.defaultname="Scene Group %1"
|
|||||||
AdvSceneSwitcher.sceneGroupTab.exists="Scene Group or Scene name exists already"
|
AdvSceneSwitcher.sceneGroupTab.exists="Scene Group or Scene name exists already"
|
||||||
AdvSceneSwitcher.sceneGroupTab.help="Scene Groups can be selected as a target just like a regular scene.\n\nAs the name suggests a scene group is a collection of multiple scenes.\nThe scene group will advance through the list of its assigned scenes depending on the configured settings, which can be found on the right side.\n\nYou can configure the scene group to advance to the next scene in the list:\nAfter a number of times the scene group is selected as a target.\nAfter a certain amount of time has passed.\nOr randomly.\n\nFor example, a scene group containing the scenes ...\nScene 1\nScene 2\nScene 3 \n... will activate \"Scene 1\" the first time it is selected as a target.\nThe second time it will activate \"Scene 2\".\nThe remaining times \"Scene 3\" will be activated.\n\nClick the highlighted plus symbol below to add a new scene group."
|
AdvSceneSwitcher.sceneGroupTab.help="Scene Groups can be selected as a target just like a regular scene.\n\nAs the name suggests a scene group is a collection of multiple scenes.\nThe scene group will advance through the list of its assigned scenes depending on the configured settings, which can be found on the right side.\n\nYou can configure the scene group to advance to the next scene in the list:\nAfter a number of times the scene group is selected as a target.\nAfter a certain amount of time has passed.\nOr randomly.\n\nFor example, a scene group containing the scenes ...\nScene 1\nScene 2\nScene 3 \n... will activate \"Scene 1\" the first time it is selected as a target.\nThe second time it will activate \"Scene 2\".\nThe remaining times \"Scene 3\" will be activated.\n\nClick the highlighted plus symbol below to add a new scene group."
|
||||||
AdvSceneSwitcher.sceneGroupTab.scenes.help="Select the scene group you want to modify on the left.\n\nSelect a scene to add to this scene group by selecting the scene above and clicking the plus symbol below.\n\nA scene can be added multiple times to the same scene group."
|
AdvSceneSwitcher.sceneGroupTab.scenes.help="Select the scene group you want to modify on the left.\n\nSelect a scene to add to this scene group by selecting the scene above and clicking the plus symbol below.\n\nA scene can be added multiple times to the same scene group."
|
||||||
|
AdvSceneSwitcher.kwin.flatpakPermissionWarning="Window detection via KWin is unavailable.\nThe OBS Studio Flatpak requires additional permissions to enable this feature.\nSee the Advanced Scene Switcher wiki for details."
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
#include "platform-funcs.hpp"
|
#include "platform-funcs.hpp"
|
||||||
|
|
||||||
#include "log-helper.hpp"
|
#include "log-helper.hpp"
|
||||||
|
#include "obs-module-helper.hpp"
|
||||||
|
#include "plugin-state-helpers.hpp"
|
||||||
|
#include "ui-helpers.hpp"
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
@@ -628,27 +632,39 @@ int ignoreXerror(Display *d, XErrorEvent *e)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handleKWinInitFailure(bool kwinAvailable)
|
||||||
|
{
|
||||||
|
blog(LOG_INFO, "not using KWin compat");
|
||||||
|
const bool onKDE = qEnvironmentVariable("XDG_CURRENT_DESKTOP")
|
||||||
|
.contains("KDE", Qt::CaseInsensitive);
|
||||||
|
const bool inFlatpak = qEnvironmentVariableIsSet("FLATPAK_ID");
|
||||||
|
if (!kwinAvailable && onKDE && inFlatpak)
|
||||||
|
AddFinishedLoadingStep([]() {
|
||||||
|
DisplayTrayMessage(
|
||||||
|
obs_module_text("AdvSceneSwitcher.pluginName"),
|
||||||
|
obs_module_text("AdvSceneSwitcher.kwin.flatpakPermissionWarning"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void PlatformInit()
|
void PlatformInit()
|
||||||
{
|
{
|
||||||
|
const bool kwinAvailable = isKWinAvailable();
|
||||||
|
KWin = kwinAvailable && registerKWinDBusListener(¬ifier) &&
|
||||||
|
startKWinScript(KWinScriptObjectPath);
|
||||||
|
if (KWin)
|
||||||
|
blog(LOG_INFO, "using KWin compat");
|
||||||
|
else
|
||||||
|
handleKWinInitFailure(kwinAvailable);
|
||||||
|
|
||||||
|
initProcps();
|
||||||
|
initProc2();
|
||||||
|
|
||||||
auto display = disp();
|
auto display = disp();
|
||||||
if (!display) {
|
if (!display) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
KWin = isKWinAvailable();
|
|
||||||
if (!(KWin && startKWinScript(KWinScriptObjectPath) &&
|
|
||||||
registerKWinDBusListener(¬ifier))) {
|
|
||||||
// something bad happened while trying to initialize
|
|
||||||
// the KWin script/dbus so disable it
|
|
||||||
KWin = false;
|
|
||||||
blog(LOG_INFO, "not using KWin compat");
|
|
||||||
} else {
|
|
||||||
blog(LOG_INFO, "using KWin compat");
|
|
||||||
}
|
|
||||||
|
|
||||||
initXss();
|
initXss();
|
||||||
initProcps();
|
|
||||||
initProc2();
|
|
||||||
XSetErrorHandler(ignoreXerror);
|
XSetErrorHandler(ignoreXerror);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QFileDevice>
|
#include <QFileDevice>
|
||||||
|
#include <QStandardPaths>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QtDBus/QDBusConnectionInterface>
|
#include <QtDBus/QDBusConnectionInterface>
|
||||||
#include <QtDBus/QDBusInterface>
|
#include <QtDBus/QDBusInterface>
|
||||||
@@ -97,11 +98,13 @@ bool isKWinAvailable()
|
|||||||
bool startKWinScript(QString &scriptObjectPath)
|
bool startKWinScript(QString &scriptObjectPath)
|
||||||
{
|
{
|
||||||
const QString scriptPath =
|
const QString scriptPath =
|
||||||
"/tmp/AdvancedSceneSwitcher/KWinFocusNotifier.js";
|
QStandardPaths::writableLocation(
|
||||||
|
QStandardPaths::RuntimeLocation) +
|
||||||
|
"/AdvancedSceneSwitcher/KWinFocusNotifier.js";
|
||||||
|
|
||||||
const QString script =
|
const QString script =
|
||||||
R"(var adss = "com.github.AdvancedSceneSwitcher";
|
R"(var adss = "com.obsproject.Studio.Plugin.SceneSwitcher";
|
||||||
var adssPath = "/com/github/AdvancedSceneSwitcher";
|
var adssPath = "/com/obsproject/Studio/Plugin/SceneSwitcher";
|
||||||
|
|
||||||
function trackWindow(window) {
|
function trackWindow(window) {
|
||||||
var id = window.internalId.toString();
|
var id = window.internalId.toString();
|
||||||
@@ -129,7 +132,8 @@ workspace.windowActivated.connect(function(client) {
|
|||||||
}))";
|
}))";
|
||||||
|
|
||||||
if (const QDir dir; !dir.mkpath(QFileInfo(scriptPath).absolutePath())) {
|
if (const QDir dir; !dir.mkpath(QFileInfo(scriptPath).absolutePath())) {
|
||||||
blog(LOG_ERROR, "error creating /tmp/AdvancedSceneSwitcher");
|
blog(LOG_ERROR,
|
||||||
|
"error creating KWinFocusNotifier script directory");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,8 +202,8 @@ bool stopKWinScript(const QString &scriptObjectPath)
|
|||||||
|
|
||||||
bool registerKWinDBusListener(FocusNotifier *notifier)
|
bool registerKWinDBusListener(FocusNotifier *notifier)
|
||||||
{
|
{
|
||||||
static const QString serviceName = "com.github.AdvancedSceneSwitcher";
|
static const QString serviceName = "com.obsproject.Studio.Plugin.SceneSwitcher";
|
||||||
static const QString objectPath = "/com/github/AdvancedSceneSwitcher";
|
static const QString objectPath = "/com/obsproject/Studio/Plugin/SceneSwitcher";
|
||||||
auto bus = QDBusConnection::sessionBus();
|
auto bus = QDBusConnection::sessionBus();
|
||||||
|
|
||||||
if (bus.objectRegisteredAt(objectPath)) {
|
if (bus.objectRegisteredAt(objectPath)) {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace advss {
|
|||||||
|
|
||||||
class FocusNotifier final : public QObject {
|
class FocusNotifier final : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_CLASSINFO("D-Bus Interface", "com.github.AdvancedSceneSwitcher")
|
Q_CLASSINFO("D-Bus Interface", "com.obsproject.Studio.Plugin.SceneSwitcher")
|
||||||
|
|
||||||
static std::mutex _mutex;
|
static std::mutex _mutex;
|
||||||
static int activePID;
|
static int activePID;
|
||||||
|
|||||||
Reference in New Issue
Block a user