Code refactoring
This commit is contained in:
parent
e5b9fdd8c8
commit
ec3ce9caeb
@ -30,229 +30,61 @@ namespace ShareX.HelpersLib
|
||||
{
|
||||
public class DarkColorTable : ProfessionalColorTable
|
||||
{
|
||||
public override Color ButtonSelectedHighlight
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color ButtonSelectedHighlightBorder
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
|
||||
}
|
||||
public override Color ButtonPressedHighlight
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color ButtonPressedHighlightBorder
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
|
||||
}
|
||||
public override Color ButtonCheckedHighlight
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
|
||||
}
|
||||
public override Color ButtonCheckedHighlightBorder
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
|
||||
}
|
||||
public override Color ButtonPressedBorder
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
|
||||
}
|
||||
public override Color ButtonSelectedBorder
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightBorderColor; }
|
||||
}
|
||||
public override Color ButtonCheckedGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
|
||||
}
|
||||
public override Color ButtonCheckedGradientMiddle
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
|
||||
}
|
||||
public override Color ButtonCheckedGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
|
||||
}
|
||||
public override Color ButtonSelectedGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color ButtonSelectedGradientMiddle
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color ButtonSelectedGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color ButtonPressedGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color ButtonPressedGradientMiddle
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color ButtonPressedGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color CheckBackground
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
|
||||
}
|
||||
public override Color CheckSelectedBackground
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
|
||||
}
|
||||
public override Color CheckPressedBackground
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuCheckBackgroundColor; }
|
||||
}
|
||||
public override Color GripDark
|
||||
{
|
||||
get { return ShareXResources.Theme.SeparatorDarkColor; }
|
||||
}
|
||||
public override Color GripLight
|
||||
{
|
||||
get { return ShareXResources.Theme.SeparatorLightColor; }
|
||||
}
|
||||
public override Color ImageMarginGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ImageMarginGradientMiddle
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ImageMarginGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ImageMarginRevealedGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ImageMarginRevealedGradientMiddle
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ImageMarginRevealedGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color MenuStripGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color MenuStripGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color MenuItemSelected
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color MenuItemBorder
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuBorderColor; }
|
||||
}
|
||||
public override Color MenuBorder
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuBorderColor; }
|
||||
}
|
||||
public override Color MenuItemSelectedGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color MenuItemSelectedGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color MenuItemPressedGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color MenuItemPressedGradientMiddle
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color MenuItemPressedGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.MenuHighlightColor; }
|
||||
}
|
||||
public override Color RaftingContainerGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color RaftingContainerGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color SeparatorDark
|
||||
{
|
||||
get { return ShareXResources.Theme.SeparatorDarkColor; }
|
||||
}
|
||||
public override Color SeparatorLight
|
||||
{
|
||||
get { return ShareXResources.Theme.SeparatorLightColor; }
|
||||
}
|
||||
public override Color StatusStripGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color StatusStripGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ToolStripBorder
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ToolStripDropDownBackground
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ToolStripGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ToolStripGradientMiddle
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ToolStripGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ToolStripContentPanelGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ToolStripContentPanelGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ToolStripPanelGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ToolStripPanelGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color OverflowButtonGradientBegin
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color OverflowButtonGradientMiddle
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color OverflowButtonGradientEnd
|
||||
{
|
||||
get { return ShareXResources.Theme.BackgroundColor; }
|
||||
}
|
||||
public override Color ButtonSelectedHighlight => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color ButtonSelectedHighlightBorder => ShareXResources.Theme.MenuHighlightBorderColor;
|
||||
public override Color ButtonPressedHighlight => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color ButtonPressedHighlightBorder => ShareXResources.Theme.MenuHighlightBorderColor;
|
||||
public override Color ButtonCheckedHighlight => ShareXResources.Theme.MenuCheckBackgroundColor;
|
||||
public override Color ButtonCheckedHighlightBorder => ShareXResources.Theme.MenuHighlightBorderColor;
|
||||
public override Color ButtonPressedBorder => ShareXResources.Theme.MenuHighlightBorderColor;
|
||||
public override Color ButtonSelectedBorder => ShareXResources.Theme.MenuHighlightBorderColor;
|
||||
public override Color ButtonCheckedGradientBegin => ShareXResources.Theme.MenuCheckBackgroundColor;
|
||||
public override Color ButtonCheckedGradientMiddle => ShareXResources.Theme.MenuCheckBackgroundColor;
|
||||
public override Color ButtonCheckedGradientEnd => ShareXResources.Theme.MenuCheckBackgroundColor;
|
||||
public override Color ButtonSelectedGradientBegin => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color ButtonSelectedGradientMiddle => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color ButtonSelectedGradientEnd => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color ButtonPressedGradientBegin => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color ButtonPressedGradientMiddle => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color ButtonPressedGradientEnd => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color CheckBackground => ShareXResources.Theme.MenuCheckBackgroundColor;
|
||||
public override Color CheckSelectedBackground => ShareXResources.Theme.MenuCheckBackgroundColor;
|
||||
public override Color CheckPressedBackground => ShareXResources.Theme.MenuCheckBackgroundColor;
|
||||
public override Color GripDark => ShareXResources.Theme.SeparatorDarkColor;
|
||||
public override Color GripLight => ShareXResources.Theme.SeparatorLightColor;
|
||||
public override Color ImageMarginGradientBegin => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ImageMarginGradientMiddle => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ImageMarginGradientEnd => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ImageMarginRevealedGradientBegin => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ImageMarginRevealedGradientMiddle => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ImageMarginRevealedGradientEnd => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color MenuStripGradientBegin => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color MenuStripGradientEnd => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color MenuItemSelected => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color MenuItemBorder => ShareXResources.Theme.MenuBorderColor;
|
||||
public override Color MenuBorder => ShareXResources.Theme.MenuBorderColor;
|
||||
public override Color MenuItemSelectedGradientBegin => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color MenuItemSelectedGradientEnd => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color MenuItemPressedGradientBegin => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color MenuItemPressedGradientMiddle => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color MenuItemPressedGradientEnd => ShareXResources.Theme.MenuHighlightColor;
|
||||
public override Color RaftingContainerGradientBegin => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color RaftingContainerGradientEnd => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color SeparatorDark => ShareXResources.Theme.SeparatorDarkColor;
|
||||
public override Color SeparatorLight => ShareXResources.Theme.SeparatorLightColor;
|
||||
public override Color StatusStripGradientBegin => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color StatusStripGradientEnd => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ToolStripBorder => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ToolStripDropDownBackground => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ToolStripGradientBegin => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ToolStripGradientMiddle => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ToolStripGradientEnd => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ToolStripContentPanelGradientBegin => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ToolStripContentPanelGradientEnd => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ToolStripPanelGradientBegin => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color ToolStripPanelGradientEnd => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color OverflowButtonGradientBegin => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color OverflowButtonGradientMiddle => ShareXResources.Theme.BackgroundColor;
|
||||
public override Color OverflowButtonGradientEnd => ShareXResources.Theme.BackgroundColor;
|
||||
}
|
||||
}
|
@ -625,21 +625,6 @@ namespace ShareX.HelpersLib
|
||||
return result;
|
||||
}
|
||||
|
||||
public static bool IsRunning(string name)
|
||||
{
|
||||
try
|
||||
{
|
||||
Mutex mutex = Mutex.OpenExisting(name);
|
||||
mutex.ReleaseMutex();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static T ByteArrayToStructure<T>(byte[] bytes) where T : struct
|
||||
{
|
||||
GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
|
||||
|
84
ShareX.HelpersLib/MutexManager.cs
Normal file
84
ShareX.HelpersLib/MutexManager.cs
Normal file
@ -0,0 +1,84 @@
|
||||
#region License Information (GPL v3)
|
||||
|
||||
/*
|
||||
ShareX - A program that allows you to take screenshots and share any file type
|
||||
Copyright (c) 2007-2024 ShareX Team
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#endregion License Information (GPL v3)
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
||||
namespace ShareX.HelpersLib
|
||||
{
|
||||
public class MutexManager : IDisposable
|
||||
{
|
||||
public bool HasHandle { get; private set; }
|
||||
|
||||
private Mutex mutex;
|
||||
|
||||
public MutexManager(string mutexName) : this(mutexName, Timeout.Infinite)
|
||||
{
|
||||
}
|
||||
|
||||
public MutexManager(string mutexName, int timeout)
|
||||
{
|
||||
mutex = new Mutex(false, mutexName);
|
||||
|
||||
try
|
||||
{
|
||||
HasHandle = mutex.WaitOne(timeout, false);
|
||||
}
|
||||
catch (AbandonedMutexException)
|
||||
{
|
||||
HasHandle = true;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsRunning(string mutexName)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (Mutex mutex = new Mutex(false, mutexName, out bool createdNew))
|
||||
{
|
||||
return !createdNew;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (mutex != null)
|
||||
{
|
||||
if (HasHandle)
|
||||
{
|
||||
mutex.ReleaseMutex();
|
||||
}
|
||||
|
||||
mutex.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -44,7 +44,7 @@ namespace ShareX.HelpersLib
|
||||
private const int MaxArgumentsLength = 100;
|
||||
private const int ConnectTimeout = 5000;
|
||||
|
||||
private readonly Mutex mutex;
|
||||
private readonly MutexManager mutex;
|
||||
private CancellationTokenSource cts;
|
||||
|
||||
public SingleInstanceManager(string mutexName, string pipeName, string[] args) : this(mutexName, pipeName, true, args)
|
||||
@ -57,31 +57,21 @@ namespace ShareX.HelpersLib
|
||||
PipeName = pipeName;
|
||||
IsSingleInstance = isSingleInstance;
|
||||
|
||||
mutex = new Mutex(false, MutexName);
|
||||
mutex = new MutexManager(MutexName, 0);
|
||||
IsFirstInstance = mutex.HasHandle;
|
||||
|
||||
try
|
||||
if (IsSingleInstance)
|
||||
{
|
||||
IsFirstInstance = mutex.WaitOne(100, false);
|
||||
|
||||
if (IsSingleInstance)
|
||||
if (IsFirstInstance)
|
||||
{
|
||||
if (IsFirstInstance)
|
||||
{
|
||||
cts = new CancellationTokenSource();
|
||||
cts = new CancellationTokenSource();
|
||||
|
||||
Task.Run(ListenForConnectionsAsync, cts.Token);
|
||||
}
|
||||
else
|
||||
{
|
||||
RedirectArgumentsToFirstInstance(args);
|
||||
}
|
||||
Task.Run(ListenForConnectionsAsync, cts.Token);
|
||||
}
|
||||
else
|
||||
{
|
||||
RedirectArgumentsToFirstInstance(args);
|
||||
}
|
||||
}
|
||||
catch (AbandonedMutexException)
|
||||
{
|
||||
DebugHelper.WriteLine("Single instance mutex found abandoned from another process.");
|
||||
|
||||
IsFirstInstance = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -175,15 +165,7 @@ namespace ShareX.HelpersLib
|
||||
cts.Dispose();
|
||||
}
|
||||
|
||||
if (mutex != null)
|
||||
{
|
||||
if (IsFirstInstance)
|
||||
{
|
||||
mutex.ReleaseMutex();
|
||||
}
|
||||
|
||||
mutex.Dispose();
|
||||
}
|
||||
mutex?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
@ -47,21 +47,20 @@ namespace ShareX.Steam
|
||||
return Path.GetFullPath(path);
|
||||
}
|
||||
|
||||
public static bool IsRunning(string name)
|
||||
public static bool IsRunning(string mutexName)
|
||||
{
|
||||
bool createdNew = true;
|
||||
|
||||
try
|
||||
{
|
||||
using (Mutex mutex = new Mutex(false, name, out createdNew))
|
||||
using (Mutex mutex = new Mutex(false, mutexName, out bool createdNew))
|
||||
{
|
||||
return !createdNew;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
return !createdNew;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -34,7 +34,7 @@ namespace ShareX.Steam
|
||||
{
|
||||
public static class Launcher
|
||||
{
|
||||
private static string ContentFolderPath = GetContentFolderPath();
|
||||
private static string ContentFolderPath = Helpers.GetAbsolutePath("ShareX");
|
||||
private static string ContentExecutablePath = Path.Combine(ContentFolderPath, "ShareX.exe");
|
||||
private static string ContentSteamFilePath = Path.Combine(ContentFolderPath, "Steam");
|
||||
private static string UpdatingTempFilePath = Path.Combine(ContentFolderPath, "Updating");
|
||||
@ -55,11 +55,7 @@ namespace ShareX.Steam
|
||||
|
||||
IsStartupRun = Helpers.IsCommandExist(args, "-silent");
|
||||
|
||||
#if DEBUG
|
||||
ShowInApp = true;
|
||||
#else
|
||||
ShowInApp = File.Exists(ContentSteamFilePath);
|
||||
#endif
|
||||
|
||||
if (!IsShareXRunning())
|
||||
{
|
||||
@ -136,20 +132,6 @@ namespace ShareX.Steam
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetContentFolderPath()
|
||||
{
|
||||
#if DEBUG
|
||||
string path = Helpers.GetAbsolutePath(@"..\..\..\ShareX\bin\Debug");
|
||||
|
||||
if (Directory.Exists(path))
|
||||
{
|
||||
return path;
|
||||
}
|
||||
#endif
|
||||
|
||||
return Helpers.GetAbsolutePath("ShareX");
|
||||
}
|
||||
|
||||
private static bool IsShareXRunning()
|
||||
{
|
||||
// Check ShareX mutex.
|
||||
|
Loading…
x
Reference in New Issue
Block a user