ソースを参照

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))