mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-24 23:31:36 +08:00
UI: Add option to make projectors always on top
Closes jp9000/obs-studio#563
This commit is contained in:
@@ -376,6 +376,7 @@ Basic.Settings.General.Language="Language"
|
||||
Basic.Settings.General.WarnBeforeStartingStream="Show confirmation dialog when starting streams"
|
||||
Basic.Settings.General.WarnBeforeStoppingStream="Show confirmation dialog when stopping streams"
|
||||
Basic.Settings.General.HideProjectorCursor="Hide cursor over projectors"
|
||||
Basic.Settings.General.ProjectorAlwaysOnTop="Make projectors always on top"
|
||||
Basic.Settings.General.Snapping="Source Alignment Snapping"
|
||||
Basic.Settings.General.ScreenSnapping="Snap Sources to edge of screen"
|
||||
Basic.Settings.General.CenterSnapping="Snap Sources to horizontal and vertical center"
|
||||
|
||||
@@ -185,21 +185,21 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<item row="7" column="1">
|
||||
<widget class="QCheckBox" name="recordWhenStreaming">
|
||||
<property name="text">
|
||||
<string>Basic.Settings.General.RecordWhenStreaming</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<item row="9" column="1">
|
||||
<widget class="QCheckBox" name="systemTrayEnabled">
|
||||
<property name="text">
|
||||
<string>Basic.Settings.General.SysTrayEnabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="1">
|
||||
<item row="10" column="1">
|
||||
<widget class="QCheckBox" name="systemTrayWhenStarted">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
@@ -209,14 +209,14 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0" colspan="2">
|
||||
<item row="11" column="0" colspan="2">
|
||||
<widget class="Line" name="line_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0" colspan="2">
|
||||
<item row="12" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox_10">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
@@ -316,7 +316,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="8" column="1">
|
||||
<widget class="QCheckBox" name="keepRecordStreamStops">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
@@ -326,6 +326,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QCheckBox" name="projectorAlwaysOnTop">
|
||||
<property name="text">
|
||||
<string>Basic.Settings.General.ProjectorAlwaysOnTop</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="streamPage">
|
||||
@@ -2538,8 +2545,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>98</width>
|
||||
<height>28</height>
|
||||
<width>80</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
@@ -2903,9 +2910,9 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>-206</y>
|
||||
<width>803</width>
|
||||
<height>820</height>
|
||||
<y>0</y>
|
||||
<width>559</width>
|
||||
<height>681</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_16">
|
||||
|
||||
+2
-2
@@ -132,12 +132,12 @@ vector<string> GetPreferredLocales()
|
||||
return result;
|
||||
}
|
||||
|
||||
bool IsAlwaysOnTop(QMainWindow *window)
|
||||
bool IsAlwaysOnTop(QWidget *window)
|
||||
{
|
||||
return (window->windowFlags() & Qt::WindowStaysOnTopHint) != 0;
|
||||
}
|
||||
|
||||
void SetAlwaysOnTop(QMainWindow *window, bool enable)
|
||||
void SetAlwaysOnTop(QWidget *window, bool enable)
|
||||
{
|
||||
Qt::WindowFlags flags = window->windowFlags();
|
||||
|
||||
|
||||
@@ -203,13 +203,13 @@ void SetAeroEnabled(bool enable)
|
||||
func(enable ? DWM_EC_ENABLECOMPOSITION : DWM_EC_DISABLECOMPOSITION);
|
||||
}
|
||||
|
||||
bool IsAlwaysOnTop(QMainWindow *window)
|
||||
bool IsAlwaysOnTop(QWidget *window)
|
||||
{
|
||||
DWORD exStyle = GetWindowLong((HWND)window->winId(), GWL_EXSTYLE);
|
||||
return (exStyle & WS_EX_TOPMOST) != 0;
|
||||
}
|
||||
|
||||
void SetAlwaysOnTop(QMainWindow *window, bool enable)
|
||||
void SetAlwaysOnTop(QWidget *window, bool enable)
|
||||
{
|
||||
HWND hwnd = (HWND)window->winId();
|
||||
SetWindowPos(hwnd, enable ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0,
|
||||
|
||||
@@ -148,12 +148,12 @@ vector<string> GetPreferredLocales()
|
||||
return {};
|
||||
}
|
||||
|
||||
bool IsAlwaysOnTop(QMainWindow *window)
|
||||
bool IsAlwaysOnTop(QWidget *window)
|
||||
{
|
||||
return (window->windowFlags() & Qt::WindowStaysOnTopHint) != 0;
|
||||
}
|
||||
|
||||
void SetAlwaysOnTop(QMainWindow *window, bool enable)
|
||||
void SetAlwaysOnTop(QWidget *window, bool enable)
|
||||
{
|
||||
Qt::WindowFlags flags = window->windowFlags();
|
||||
|
||||
|
||||
+3
-3
@@ -22,7 +22,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class QMainWindow;
|
||||
class QWidget;
|
||||
|
||||
struct MonitorInfo {
|
||||
int32_t x, y;
|
||||
@@ -45,8 +45,8 @@ std::string GetDefaultVideoSavePath();
|
||||
|
||||
std::vector<std::string> GetPreferredLocales();
|
||||
|
||||
bool IsAlwaysOnTop(QMainWindow *window);
|
||||
void SetAlwaysOnTop(QMainWindow *window, bool enable);
|
||||
bool IsAlwaysOnTop(QWidget *window);
|
||||
void SetAlwaysOnTop(QWidget *window, bool enable);
|
||||
|
||||
#ifdef _WIN32
|
||||
uint32_t GetWindowsVersion();
|
||||
|
||||
@@ -272,6 +272,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
||||
HookWidget(ui->warnBeforeStreamStart,CHECK_CHANGED, GENERAL_CHANGED);
|
||||
HookWidget(ui->warnBeforeStreamStop, CHECK_CHANGED, GENERAL_CHANGED);
|
||||
HookWidget(ui->hideProjectorCursor, CHECK_CHANGED, GENERAL_CHANGED);
|
||||
HookWidget(ui->projectorAlwaysOnTop, CHECK_CHANGED, GENERAL_CHANGED);
|
||||
HookWidget(ui->recordWhenStreaming, CHECK_CHANGED, GENERAL_CHANGED);
|
||||
HookWidget(ui->keepRecordStreamStops,CHECK_CHANGED, GENERAL_CHANGED);
|
||||
HookWidget(ui->systemTrayEnabled, CHECK_CHANGED, GENERAL_CHANGED);
|
||||
@@ -887,6 +888,10 @@ void OBSBasicSettings::LoadGeneralSettings()
|
||||
"BasicWindow", "HideProjectorCursor");
|
||||
ui->hideProjectorCursor->setChecked(hideProjectorCursor);
|
||||
|
||||
bool projectorAlwaysOnTop = config_get_bool(GetGlobalConfig(),
|
||||
"BasicWindow", "ProjectorAlwaysOnTop");
|
||||
ui->projectorAlwaysOnTop->setChecked(projectorAlwaysOnTop);
|
||||
|
||||
loading = false;
|
||||
}
|
||||
|
||||
@@ -2236,6 +2241,9 @@ void OBSBasicSettings::SaveGeneralSettings()
|
||||
config_set_bool(GetGlobalConfig(), "BasicWindow",
|
||||
"HideProjectorCursor",
|
||||
ui->hideProjectorCursor->isChecked());
|
||||
config_set_bool(GetGlobalConfig(), "BasicWindow",
|
||||
"ProjectorAlwaysOnTop",
|
||||
ui->projectorAlwaysOnTop->isChecked());
|
||||
|
||||
if (WidgetChanged(ui->recordWhenStreaming))
|
||||
config_set_bool(GetGlobalConfig(), "BasicWindow",
|
||||
|
||||
@@ -53,6 +53,11 @@ void OBSProjector::Init(int monitor)
|
||||
|
||||
setGeometry(mi.x, mi.y, mi.cx, mi.cy);
|
||||
|
||||
bool alwaysOnTop = config_get_bool(GetGlobalConfig(),
|
||||
"BasicWindow", "ProjectorAlwaysOnTop");
|
||||
if (alwaysOnTop)
|
||||
SetAlwaysOnTop(this, true);
|
||||
|
||||
show();
|
||||
|
||||
if (source)
|
||||
|
||||
Reference in New Issue
Block a user