mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-05-21 04:04:59 +00:00
enhance: bring window into view after receive IPC message
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
parent
e2da44c8fd
commit
c4c04b8b01
4 changed files with 53 additions and 22 deletions
|
@ -510,19 +510,30 @@ namespace SourceGit
|
||||||
|
|
||||||
private void TryOpenRepository(string repo)
|
private void TryOpenRepository(string repo)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(repo) || !Directory.Exists(repo))
|
if (!string.IsNullOrEmpty(repo) && Directory.Exists(repo))
|
||||||
return;
|
|
||||||
|
|
||||||
var test = new Commands.QueryRepositoryRootPath(repo).ReadToEnd();
|
|
||||||
if (test.IsSuccess && !string.IsNullOrEmpty(test.StdOut))
|
|
||||||
{
|
{
|
||||||
Dispatcher.UIThread.Invoke(() =>
|
var test = new Commands.QueryRepositoryRootPath(repo).ReadToEnd();
|
||||||
|
if (test.IsSuccess && !string.IsNullOrEmpty(test.StdOut))
|
||||||
{
|
{
|
||||||
var node = ViewModels.Preferences.Instance.FindOrAddNodeByRepositoryPath(test.StdOut.Trim(), null, false);
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
ViewModels.Welcome.Instance.Refresh();
|
{
|
||||||
_launcher?.OpenRepositoryInTab(node, null);
|
var node = ViewModels.Preferences.Instance.FindOrAddNodeByRepositoryPath(test.StdOut.Trim(), null, false);
|
||||||
});
|
ViewModels.Welcome.Instance.Refresh();
|
||||||
|
_launcher?.OpenRepositoryInTab(node, null);
|
||||||
|
|
||||||
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime { MainWindow: Views.Launcher wnd })
|
||||||
|
wnd.BringToTop();
|
||||||
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime { MainWindow: Views.Launcher launcher })
|
||||||
|
launcher.BringToTop();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Check4Update(bool manually = false)
|
private void Check4Update(bool manually = false)
|
||||||
|
|
|
@ -46,14 +46,19 @@ namespace SourceGit.Models
|
||||||
using (var client = new NamedPipeClientStream(".", "SourceGitIPCChannel", PipeDirection.Out))
|
using (var client = new NamedPipeClientStream(".", "SourceGitIPCChannel", PipeDirection.Out))
|
||||||
{
|
{
|
||||||
client.Connect(1000);
|
client.Connect(1000);
|
||||||
if (client.IsConnected)
|
if (!client.IsConnected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
using (var writer = new StreamWriter(client))
|
||||||
{
|
{
|
||||||
using (var writer = new StreamWriter(client))
|
writer.WriteLine(cmd);
|
||||||
{
|
writer.Flush();
|
||||||
writer.WriteLine(cmd);
|
|
||||||
writer.Flush();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (OperatingSystem.IsWindows())
|
||||||
|
client.WaitForPipeDrain();
|
||||||
|
else
|
||||||
|
Thread.Sleep(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
@ -78,13 +83,18 @@ namespace SourceGit.Models
|
||||||
{
|
{
|
||||||
await _server.WaitForConnectionAsync(_cancellationTokenSource.Token);
|
await _server.WaitForConnectionAsync(_cancellationTokenSource.Token);
|
||||||
|
|
||||||
var line = (await reader.ReadLineAsync(_cancellationTokenSource.Token))?.Trim();
|
if (!_cancellationTokenSource.IsCancellationRequested)
|
||||||
MessageReceived?.Invoke(line);
|
{
|
||||||
|
var line = await reader.ReadToEndAsync(_cancellationTokenSource.Token);
|
||||||
|
MessageReceived?.Invoke(line?.Trim());
|
||||||
|
}
|
||||||
|
|
||||||
_server.Disconnect();
|
_server.Disconnect();
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
// IGNORE
|
if (!_cancellationTokenSource.IsCancellationRequested && _server.IsConnected)
|
||||||
|
_server.Disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,8 @@ namespace SourceGit.ViewModels
|
||||||
if (_instance != null)
|
if (_instance != null)
|
||||||
return _instance;
|
return _instance;
|
||||||
|
|
||||||
_isLoading = true;
|
|
||||||
_instance = Load();
|
_instance = Load();
|
||||||
_isLoading = false;
|
_instance._isLoading = false;
|
||||||
|
|
||||||
_instance.PrepareGit();
|
_instance.PrepareGit();
|
||||||
_instance.PrepareShellOrTerminal();
|
_instance.PrepareShellOrTerminal();
|
||||||
|
@ -629,8 +628,8 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Preferences _instance = null;
|
private static Preferences _instance = null;
|
||||||
private static bool _isLoading = false;
|
|
||||||
|
|
||||||
|
private bool _isLoading = true;
|
||||||
private bool _isReadonly = true;
|
private bool _isReadonly = true;
|
||||||
private string _locale = "en_US";
|
private string _locale = "en_US";
|
||||||
private string _theme = "Default";
|
private string _theme = "Default";
|
||||||
|
|
|
@ -67,6 +67,14 @@ namespace SourceGit.Views
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void BringToTop()
|
||||||
|
{
|
||||||
|
if (WindowState == WindowState.Minimized)
|
||||||
|
WindowState = _lastWindowState;
|
||||||
|
else
|
||||||
|
Activate();
|
||||||
|
}
|
||||||
|
|
||||||
public bool HasKeyModifier(KeyModifiers modifier)
|
public bool HasKeyModifier(KeyModifiers modifier)
|
||||||
{
|
{
|
||||||
return _unhandledModifiers.HasFlag(modifier);
|
return _unhandledModifiers.HasFlag(modifier);
|
||||||
|
@ -92,6 +100,8 @@ namespace SourceGit.Views
|
||||||
|
|
||||||
if (change.Property == WindowStateProperty)
|
if (change.Property == WindowStateProperty)
|
||||||
{
|
{
|
||||||
|
_lastWindowState = (WindowState)change.OldValue;
|
||||||
|
|
||||||
var state = (WindowState)change.NewValue!;
|
var state = (WindowState)change.NewValue!;
|
||||||
if (!OperatingSystem.IsMacOS() && !UseSystemWindowFrame)
|
if (!OperatingSystem.IsMacOS() && !UseSystemWindowFrame)
|
||||||
CaptionHeight = new GridLength(state == WindowState.Maximized ? 30 : 38);
|
CaptionHeight = new GridLength(state == WindowState.Maximized ? 30 : 38);
|
||||||
|
@ -291,5 +301,6 @@ namespace SourceGit.Views
|
||||||
}
|
}
|
||||||
|
|
||||||
private KeyModifiers _unhandledModifiers = KeyModifiers.None;
|
private KeyModifiers _unhandledModifiers = KeyModifiers.None;
|
||||||
|
private WindowState _lastWindowState = WindowState.Normal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue