Skip to content

Commit

Permalink
Added ability to use custom window title (not supported)
Browse files Browse the repository at this point in the history
  • Loading branch information
Odizinne committed Aug 21, 2024
1 parent b6aebbf commit 764a141
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 42 deletions.
39 changes: 37 additions & 2 deletions src/BigPictureTV/bigpicturetv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ void BigPictureTV::setupConnections()
connect(ui->desktopMonitorComboBox, &QComboBox::currentIndexChanged, this, &BigPictureTV::saveSettings);
connect(ui->gamemodeMonitorComboBox, &QComboBox::currentIndexChanged, this, &BigPictureTV::saveSettings);
connect(ui->installAudioButton, &QPushButton::clicked, this, &BigPictureTV::onAudioButtonClicked);
connect(ui->targetWindowComboBox, &QComboBox::currentIndexChanged, this, &BigPictureTV::onTargetWindowComboBoxIndexChanged);
ui->startupCheckBox->setChecked(isShortcutPresent());
initDiscordAction();
}
Expand Down Expand Up @@ -104,6 +105,9 @@ void BigPictureTV::populateComboboxes()
ui->desktopMonitorComboBox->addItem(tr("Extend"));
ui->gamemodeMonitorComboBox->addItem(tr("External"));
ui->gamemodeMonitorComboBox->addItem(tr("Clone"));

ui->targetWindowComboBox->addItem(tr("Big Picture"));
ui->targetWindowComboBox->addItem(tr("Custom"));
}

void BigPictureTV::createMenubar()
Expand Down Expand Up @@ -220,6 +224,17 @@ void BigPictureTV::onDisableMonitorCheckboxStateChanged(int state)
saveSettings();
}

void BigPictureTV::onTargetWindowComboBoxIndexChanged(int index)
{
if (index == 1) {
toggleCustomWindowTitle(true);
} else {
toggleCustomWindowTitle(false);
}
this->adjustSize();
saveSettings();
}

void BigPictureTV::onAudioButtonClicked()
{
ui->installAudioButton->setEnabled(false);
Expand Down Expand Up @@ -268,11 +283,16 @@ void BigPictureTV::onAudioButtonClicked()

void BigPictureTV::checkWindowTitle()
{
bool isRunning = isBigPictureRunning();
bool isRunning;
if (ui->targetWindowComboBox->currentIndex() == 0) {
isRunning = isBigPictureRunning();
} else if (ui->targetWindowComboBox->currentIndex() == 1) {
isRunning = isCustomWindowRunning(ui->customWindowLineEdit->text());
}
bool disableVideo = ui->disableMonitorCheckBox->isChecked();
bool disableAudio = ui->disableAudioCheckBox->isChecked();

if (isRunning && !gamemodeActive && !isSunshineStreaming()) {
if (isRunning && !gamemodeActive && !isSunshineStreaming() && !ui->customWindowLineEdit->hasFocus() && !ui->customWindowLineEdit->text().isEmpty()) {
gamemodeActive = true;
handleActions(false);
handleMonitorChanges(false, disableVideo);
Expand Down Expand Up @@ -425,8 +445,12 @@ void BigPictureTV::applySettings()
ui->desktopMonitorComboBox->setCurrentIndex(settings.value("desktop_monitor").toInt(0));
ui->disableMonitorCheckBox->setChecked(settings.value("disable_monitor_switch").toBool());
ui->disableNightLightCheckBox->setChecked(settings.value("disable_nightlight").toBool());
ui->targetWindowComboBox->setCurrentIndex(settings.value("target_window").toInt(0));
ui->customWindowLineEdit->setText(settings.value("custom_window").toString());
toggleAudioSettings(!ui->disableAudioCheckBox->isChecked());
toggleMonitorSettings(!ui->disableMonitorCheckBox->isChecked());
ui->customWindowLabel->setVisible(ui->targetWindowComboBox->currentIndex() == 1);
ui->customWindowLineEdit->setVisible(ui->targetWindowComboBox->currentIndex() == 1);
}

void BigPictureTV::saveSettings()
Expand All @@ -441,6 +465,8 @@ void BigPictureTV::saveSettings()
settings["desktop_monitor"] = ui->desktopMonitorComboBox->currentIndex();
settings["disable_monitor_switch"] = ui->disableMonitorCheckBox->isChecked();
settings["disable_nightlight"] = ui->disableNightLightCheckBox->isChecked();
settings["target_window"] = ui->targetWindowComboBox->currentIndex();
settings["custom_window"] = ui->customWindowLineEdit->text();

QFile file(settingsFile);
if (file.open(QIODevice::WriteOnly)) {
Expand All @@ -460,6 +486,15 @@ void BigPictureTV::toggleMonitorSettings(bool state)
ui->monitorsGroupBox->setEnabled(state);
}

void BigPictureTV::toggleCustomWindowTitle(bool state)
{
ui->customWindowLineEdit->setEnabled(state);
ui->customWindowLabel->setEnabled(state);
ui->customWindowLineEdit->setVisible(state);
ui->customWindowLabel->setVisible(state);
this->adjustSize();
}

void BigPictureTV::setFont()
{
QList<QGroupBox*> groupBoxes = {
Expand Down
2 changes: 2 additions & 0 deletions src/BigPictureTV/bigpicturetv.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ private slots:
void onStartupCheckboxStateChanged();
void onDisableAudioCheckboxStateChanged(int state);
void onDisableMonitorCheckboxStateChanged(int state);
void onTargetWindowComboBoxIndexChanged(int index);
void onAudioButtonClicked();
void checkWindowTitle();
void onCheckrateSpinBoxValueChanged();
Expand All @@ -65,6 +66,7 @@ private slots:
void populateComboboxes();
void toggleAudioSettings(bool state);
void toggleMonitorSettings(bool state);
void toggleCustomWindowTitle(bool state);
void setupConnections();
void handleMonitorChanges(bool isDesktopMode, bool disableVideo);
void handleAudioChanges(bool isDesktopMode, bool disableAudio);
Expand Down
126 changes: 86 additions & 40 deletions src/BigPictureTV/bigpicturetv.ui
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>452</width>
<height>463</height>
<height>525</height>
</rect>
</property>
<property name="sizePolicy">
Expand Down Expand Up @@ -195,19 +195,16 @@
<property name="spacing">
<number>6</number>
</property>
<item row="2" column="1" colspan="2">
<widget class="QCheckBox" name="disableAudioCheckBox">
<item row="3" column="0" rowspan="2">
<widget class="QLabel" name="disableMonitorLabel">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="layoutDirection">
<enum>Qt::LayoutDirection::RightToLeft</enum>
</property>
<property name="text">
<string/>
<string>Disable monitor switching</string>
</property>
</widget>
</item>
Expand All @@ -224,42 +221,57 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="disableAudioLabel">
<item row="7" column="0">
<widget class="QLabel" name="checkrateLabel">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Disable audio switching</string>
<string>Window check rate</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="startupLabel">
<item row="1" column="1" colspan="2">
<widget class="QCheckBox" name="startupCheckBox">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="layoutDirection">
<enum>Qt::LayoutDirection::RightToLeft</enum>
</property>
<property name="text">
<string>Run at startup</string>
<string/>
</property>
</widget>
</item>
<item row="3" column="0" rowspan="2">
<widget class="QLabel" name="disableMonitorLabel">
<item row="7" column="2">
<widget class="QSpinBox" name="checkrateSpinBox">
<property name="minimumSize">
<size>
<width>0</width>
<width>90</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Disable monitor switching</string>
<property name="frame">
<bool>true</bool>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
<property name="value">
<number>1000</number>
</property>
</widget>
</item>
Expand All @@ -279,8 +291,21 @@
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QCheckBox" name="startupCheckBox">
<item row="2" column="0">
<widget class="QLabel" name="disableAudioLabel">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Disable audio switching</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QCheckBox" name="disableAudioCheckBox">
<property name="minimumSize">
<size>
<width>0</width>
Expand All @@ -295,45 +320,43 @@
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QSpinBox" name="checkrateSpinBox">
<item row="1" column="0">
<widget class="QLabel" name="startupLabel">
<property name="minimumSize">
<size>
<width>90</width>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="frame">
<bool>true</bool>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
<property name="value">
<number>1000</number>
<property name="text">
<string>Run at startup</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="checkrateLabel">
<widget class="QLabel" name="targetWindowLabel">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Window check rate</string>
<string>Target window</string>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QComboBox" name="targetWindowComboBox">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
</widget>
</item>
<item row="5" column="1">
<item row="7" column="1">
<spacer name="horizontalSpacer">
<property name="minimumSize">
<size>
Expand All @@ -352,6 +375,29 @@
</property>
</spacer>
</item>
<item row="6" column="0">
<widget class="QLabel" name="customWindowLabel">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Custom window title</string>
</property>
</widget>
</item>
<item row="6" column="1" colspan="2">
<widget class="QLineEdit" name="customWindowLineEdit">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
Expand Down
22 changes: 22 additions & 0 deletions src/SteamWindowManager/steamwindowmanager.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "steamwindowmanager.h"
#include "qdebug.h"
#include <QMap>
#include <QStringList>
#include <QVector>
Expand Down Expand Up @@ -116,3 +117,24 @@ bool isBigPictureRunning()
}
return false;
}

bool isCustomWindowRunning(QString windowTitle)
{
windowTitle = cleanString(windowTitle.toLower());
QStringList customWindowTitleWords = windowTitle.split(' ', Qt::SkipEmptyParts);

QVector<QString> currentWindowTitles = getAllWindowTitles();
for (const auto &windowTitle : currentWindowTitles) {
QString cleanedTitle = cleanString(windowTitle.toLower());
QStringList windowWords = cleanedTitle.split(' ', Qt::SkipEmptyParts);

if (std::all_of(customWindowTitleWords.begin(),
customWindowTitleWords.end(),
[&windowWords](const QString &word) {
return windowWords.contains(word);
})) {
return true;
}
}
return false;
}
1 change: 1 addition & 0 deletions src/SteamWindowManager/steamwindowmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
QString getBigPictureWindowTitle();
QString getSteamLanguage();
bool isBigPictureRunning();
bool isCustomWindowRunning(QString windowTitle);

#endif // STEAMWINDOWMANAGER_H

0 comments on commit 764a141

Please sign in to comment.