浏览代码

UI: Fix always on top w/ projectors on Linux

Apparently, on Linux, you cannot update the window flags while it is
still open, so just close the projectors and reopen them again when the
setting changes.
Clayton Groeneveld 5 年之前
父节点
当前提交
227f80ac48
共有 3 个文件被更改,包括 14 次插入0 次删除
  1. 9 0
      UI/window-basic-main.cpp
  2. 1 0
      UI/window-basic-main.hpp
  3. 4 0
      UI/window-basic-settings.cpp

+ 9 - 0
UI/window-basic-main.cpp

@@ -8269,6 +8269,15 @@ void OBSBasic::UpdateProjectorAlwaysOnTop(bool top)
 		SetAlwaysOnTop(projectors[i], top);
 }
 
+void OBSBasic::ResetProjectors()
+{
+	obs_data_array_t *savedProjectorList = SaveProjectors();
+	ClearProjectors();
+	LoadSavedProjectors(savedProjectorList);
+	OpenSavedProjectors();
+	obs_data_array_release(savedProjectorList);
+}
+
 void OBSBasic::on_sourcePropertiesButton_clicked()
 {
 	on_actionSourceProperties_triggered();

+ 1 - 0
UI/window-basic-main.hpp

@@ -531,6 +531,7 @@ private:
 
 	void UpdateProjectorHideCursor();
 	void UpdateProjectorAlwaysOnTop(bool top);
+	void ResetProjectors();
 
 	QPointer<QObject> screenshotData;
 

+ 4 - 0
UI/window-basic-settings.cpp

@@ -2958,8 +2958,12 @@ void OBSBasicSettings::SaveGeneralSettings()
 		config_set_bool(GetGlobalConfig(), "BasicWindow",
 				"ProjectorAlwaysOnTop",
 				ui->projectorAlwaysOnTop->isChecked());
+#if defined(_WIN32) || defined(__APPLE__)
 		main->UpdateProjectorAlwaysOnTop(
 			ui->projectorAlwaysOnTop->isChecked());
+#else
+		main->ResetProjectors();
+#endif
 	}
 
 	if (WidgetChanged(ui->recordWhenStreaming))