using System;
using UnityEditor;
using UnityEngine;
namespace FullscreenEditor.Linux {
/// wmctrl is a tool to interact with an X Window manager available on Linux platforms.
public static class wmctrl {
static wmctrl() {
try {
var stdout = string.Empty;
var stderr = string.Empty;
var exitCode = Cmd.Run("which wmctrl", false, out stdout, out stderr);
IsInstalled = exitCode == 0;
} catch (Exception e) {
Logger.Debug("Could not run command 'which wmctrl': {0}", e);
IsInstalled = false;
}
}
public static readonly bool IsInstalled;
private static string Run(string format, params object[] args) {
if (!FullscreenUtility.IsLinux)
throw new PlatformNotSupportedException("wmctrl is only available on Linux based platforms");
if (FullscreenPreferences.DoNotUseWmctrl.Value) {
Logger.Debug("wmctrl being invoked while DoNotUseWmctrl is enabled");
}
var result = Cmd.Run("wmctrl " + format, args);
Logger.Debug("wmctrl exited with stdio: {0}", result);
return result;
}
/// Enable or disable native fullscreen for a given window.
/// Should the window be fullscreen or not.
/// The window to changed. If null the active window will be fullscreened.
public static void SetNativeFullscreen(bool fullscreen, EditorWindow window) {
if (window)
window.Focus();
Run("-r ':ACTIVE:' -b {0},fullscreen", fullscreen ? "add" : "remove");
}
/// Enable or disable native fullscreen for a given view.
/// Should the view be fullscreen or not.
/// The view to changed. If null the active view will be fullscreened.
public static void SetNativeFullscreen(bool fullscreen, ScriptableObject view) {
if (view)
FullscreenUtility.FocusView(view);
Run("-r ':ACTIVE:' -b {0},fullscreen", fullscreen ? "add" : "remove");
}
/// Toggles native fullscreen for a given window.
/// The window to be toggled fullscreen.
public static void ToggleNativeFullscreen(EditorWindow window) {
if (window)
window.Focus();
Run("-r ':ACTIVE:' -b toggle,fullscreen");
}
/// Toggles native fullscreen for a given view.
/// The view to be toggled fullscreen.
public static void ToggleNativeFullscreen(ScriptableObject view) {
if (view)
FullscreenUtility.FocusView(view);
Run("-r ':ACTIVE:' -b toggle,fullscreen");
}
}
}