Merge pull request #55 from Proopai/feature/linux-bash-location-change-for-steam-proton-with-logging
Feature/linux bash location change for steam proton with logging
This commit is contained in:
@@ -152,7 +152,7 @@ Some of the application options are not exposed in the GUI. They can be adjusted
|
|||||||
| **PriorityClients** | <div style="font-size: small">Allows to set a list of clients that are not auto-minimized on inactivity even if the **Minimize inactive EVE clients** option is enabled. Listed clients still can be minimized using Windows hotkeys or via _Ctrl+Click_ on the corresponding thumbnail<br />The default value is empty list **[]**<br />For example: **"PriorityClients": [ "EVE - Phrynohyas Tig-Rah", "EVE - Ondatra Patrouette" ]**</div> |
|
| **PriorityClients** | <div style="font-size: small">Allows to set a list of clients that are not auto-minimized on inactivity even if the **Minimize inactive EVE clients** option is enabled. Listed clients still can be minimized using Windows hotkeys or via _Ctrl+Click_ on the corresponding thumbnail<br />The default value is empty list **[]**<br />For example: **"PriorityClients": [ "EVE - Phrynohyas Tig-Rah", "EVE - Ondatra Patrouette" ]**</div> |
|
||||||
| **ThumbnailMinimumSize** | <div style="font-size: small">Minimum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"<br />The default value is **"100, 80"**.<br />For example: **"ThumbnailMinimumSize": "100, 80"**</div> |
|
| **ThumbnailMinimumSize** | <div style="font-size: small">Minimum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"<br />The default value is **"100, 80"**.<br />For example: **"ThumbnailMinimumSize": "100, 80"**</div> |
|
||||||
| **ThumbnailMaximumSize** | <div style="font-size: small">Maximum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"<br />The default value is **"640, 400"**.<br />For example: **"ThumbnailMaximumSize": "640, 400"**</div> |
|
| **ThumbnailMaximumSize** | <div style="font-size: small">Maximum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"<br />The default value is **"640, 400"**.<br />For example: **"ThumbnailMaximumSize": "640, 400"**</div> |
|
||||||
| **ThumbnailRefreshPeriod** | <div style="font-size: small">Thumbnail refresh period in milliseconds. This option accepts values between **300** and **1000** only.<br />The default value is **500** milliseconds.<br />For example: **"ThumbnailRefreshPeriod": 500**</div> |
|
| **ThumbnailRefreshPeriod** | <div style="font-size: small">Thumbnail refresh period in milliseconds. This option accepts values between **300** and **1000** only.<br />The default value is **500** milliseconds. For LINUX build this can go down to **10**<br />For example: **"ThumbnailRefreshPeriod": 500**</div> |
|
||||||
| **ThumbnailResizeTimeoutPeriod** | <div style="font-size: small">Thumbnail Resize Timeout period in milliseconds. This option accepts values between **200** and **5000** only.<br />The default value is **500** milliseconds.<br />For example: **"ThumbnailResizeTimeoutPeriod": 500**. If you are having the preview windows resize incorrectly on startup increase this value.</div> |
|
| **ThumbnailResizeTimeoutPeriod** | <div style="font-size: small">Thumbnail Resize Timeout period in milliseconds. This option accepts values between **200** and **5000** only.<br />The default value is **500** milliseconds.<br />For example: **"ThumbnailResizeTimeoutPeriod": 500**. If you are having the preview windows resize incorrectly on startup increase this value.</div> |
|
||||||
| **ExecutablesToPreview** | <div style="font-size: small">List of executables to display preview windows for. List of strings.<br />The default value is **"exefile"**.<br />For example: **"ExecutablesToPreview": ["exefile","wow","Diablo IV"]**. If you are having the preview windows resize incorrectly on startup increase this value.</div> |
|
| **ExecutablesToPreview** | <div style="font-size: small">List of executables to display preview windows for. List of strings.<br />The default value is **"exefile"**.<br />For example: **"ExecutablesToPreview": ["exefile","wow","Diablo IV"]**. If you are having the preview windows resize incorrectly on startup increase this value.</div> |
|
||||||
|
|
||||||
|
@@ -403,7 +403,11 @@ namespace EveOPreview.Configuration.Implementation
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void ApplyRestrictions()
|
public void ApplyRestrictions()
|
||||||
{
|
{
|
||||||
|
#if LINUX
|
||||||
|
this.ThumbnailRefreshPeriod = ThumbnailConfiguration.ApplyRestrictions(this.ThumbnailRefreshPeriod, 10, 1000);
|
||||||
|
#else
|
||||||
this.ThumbnailRefreshPeriod = ThumbnailConfiguration.ApplyRestrictions(this.ThumbnailRefreshPeriod, 300, 1000);
|
this.ThumbnailRefreshPeriod = ThumbnailConfiguration.ApplyRestrictions(this.ThumbnailRefreshPeriod, 300, 1000);
|
||||||
|
#endif
|
||||||
this.ThumbnailResizeTimeoutPeriod = ThumbnailConfiguration.ApplyRestrictions(this.ThumbnailResizeTimeoutPeriod, 200, 5000);
|
this.ThumbnailResizeTimeoutPeriod = ThumbnailConfiguration.ApplyRestrictions(this.ThumbnailResizeTimeoutPeriod, 200, 5000);
|
||||||
this.ThumbnailSize = new Size(ThumbnailConfiguration.ApplyRestrictions(this.ThumbnailSize.Width, this.ThumbnailMinimumSize.Width, this.ThumbnailMaximumSize.Width),
|
this.ThumbnailSize = new Size(ThumbnailConfiguration.ApplyRestrictions(this.ThumbnailSize.Width, this.ThumbnailMinimumSize.Width, this.ThumbnailMaximumSize.Width),
|
||||||
ThumbnailConfiguration.ApplyRestrictions(this.ThumbnailSize.Height, this.ThumbnailMinimumSize.Height, this.ThumbnailMaximumSize.Height));
|
ThumbnailConfiguration.ApplyRestrictions(this.ThumbnailSize.Height, this.ThumbnailMinimumSize.Height, this.ThumbnailMaximumSize.Height));
|
||||||
|
@@ -16,6 +16,9 @@ namespace EveOPreview.Services.Implementation
|
|||||||
|
|
||||||
#region Private fields
|
#region Private fields
|
||||||
private readonly bool _enableWineCompatabilityMode;
|
private readonly bool _enableWineCompatabilityMode;
|
||||||
|
private string _bashLocation;
|
||||||
|
private string _wmctrlLocation;
|
||||||
|
private const string EXCEPTION_DUMP_FILE_NAME = "EVE-O-Preview.log";
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
@@ -23,6 +26,8 @@ namespace EveOPreview.Services.Implementation
|
|||||||
{
|
{
|
||||||
#if LINUX
|
#if LINUX
|
||||||
this._enableWineCompatabilityMode = configuration.EnableWineCompatibilityMode;
|
this._enableWineCompatabilityMode = configuration.EnableWineCompatibilityMode;
|
||||||
|
this._bashLocation = FindLinuxBinLocation("bash");
|
||||||
|
this._wmctrlLocation = FindLinuxBinLocation("wmctrl");
|
||||||
#endif
|
#endif
|
||||||
// Composition is always enabled for Windows 8+
|
// Composition is always enabled for Windows 8+
|
||||||
this.IsCompositionEnabled =
|
this.IsCompositionEnabled =
|
||||||
@@ -31,6 +36,39 @@ namespace EveOPreview.Services.Implementation
|
|||||||
|| DwmNativeMethods.DwmIsCompositionEnabled(); // In case of Win 7 an API call is requiredWin 7
|
|| DwmNativeMethods.DwmIsCompositionEnabled(); // In case of Win 7 an API call is requiredWin 7
|
||||||
_animationParam.cbSize = (System.UInt32)Marshal.SizeOf(typeof(ANIMATIONINFO));
|
_animationParam.cbSize = (System.UInt32)Marshal.SizeOf(typeof(ANIMATIONINFO));
|
||||||
}
|
}
|
||||||
|
#if LINUX
|
||||||
|
private string FindLinuxBinLocation(string command)
|
||||||
|
{
|
||||||
|
// Check common paths for command
|
||||||
|
string[] paths = { "/run/host/usr/bin", "/bin", "/usr/bin" };
|
||||||
|
foreach (var path in paths)
|
||||||
|
{
|
||||||
|
string locationToCheck = $"{path}/{command}";
|
||||||
|
if (System.IO.File.Exists(locationToCheck))
|
||||||
|
{
|
||||||
|
string binLocation = System.IO.Path.GetDirectoryName(locationToCheck);
|
||||||
|
string binLocationUnixStyle = binLocation.Replace("\\", "/");
|
||||||
|
|
||||||
|
return binLocationUnixStyle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteToLog($"[{DateTime.Now}] Error: {command} not found in expected locations.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private void WriteToLog(string message)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.IO.File.AppendAllText(EXCEPTION_DUMP_FILE_NAME, message + Environment.NewLine);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Failed to write to log file: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int? _currentAnimationSetting = null;
|
private int? _currentAnimationSetting = null;
|
||||||
private ANIMATIONINFO _animationParam = new ANIMATIONINFO();
|
private ANIMATIONINFO _animationParam = new ANIMATIONINFO();
|
||||||
@@ -95,17 +133,37 @@ namespace EveOPreview.Services.Implementation
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string? cmd = null;
|
string cmd = "";
|
||||||
// If we are in a flatpak, then use flatpak-spawn to run wmctrl outside the sandbox
|
try
|
||||||
if (Environment.GetEnvironmentVariable("container") == "flatpak")
|
{
|
||||||
{
|
// If we are in a flatpak, then use flatpak-spawn to run wmctrl outside the sandbox
|
||||||
cmd = "-c \"flatpak-spawn --host wmctrl -a \"\"" + windowName + "\"\"\"";
|
if (Environment.GetEnvironmentVariable("container") == "flatpak")
|
||||||
}
|
{
|
||||||
else
|
cmd = $"-c \"flatpak-spawn --host {this._wmctrlLocation}/wmctrl -a \"\"" + windowName + "\"\"\"";
|
||||||
{
|
}
|
||||||
cmd = "-c \"wmctrl -a \"\"" + windowName + "\"\"\"";
|
else
|
||||||
}
|
{
|
||||||
System.Diagnostics.Process.Start("bash", cmd);
|
cmd = $"-c \"{this._wmctrlLocation}/wmctrl -a \"\"" + windowName + "\"\"\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure and start the process
|
||||||
|
var processStartInfo = new System.Diagnostics.ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = $"{this._bashLocation}/bash",
|
||||||
|
Arguments = cmd,
|
||||||
|
UseShellExecute = false,
|
||||||
|
CreateNoWindow = false
|
||||||
|
};
|
||||||
|
|
||||||
|
using (var process = System.Diagnostics.Process.Start(processStartInfo))
|
||||||
|
{
|
||||||
|
process.WaitForExit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
WriteToLog($"[{DateTime.Now}] executing wmctrl - Exception: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ActivateWindow(IntPtr handle, string windowName)
|
public void ActivateWindow(IntPtr handle, string windowName)
|
||||||
|
Reference in New Issue
Block a user