Skip to content

enhance: Add "Move to New Window" and "Copy to New Window" options #1608

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/Resources/Locales/de_DE.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">Andere Tabs schließen</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">Rechte Tabs schließen</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">Kopiere Repository-Pfad</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">In neues Fenster verschieben</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">In neues Fenster kopieren</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">Repositories</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">Einfügen</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">Vor {0} Tagen</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/en_US.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">Close Other Tabs</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">Close Tabs to the Right</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">Copy Repository Path</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">Move into New Window</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">Copy into New Window</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">Repositories</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">Paste</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} days ago</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/es_ES.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">Cerrar Otras Pestañas</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">Cerrar Pestañas a la Derecha</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">Copiar Ruta del Repositorio</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">Mover a Nueva Ventana</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">Copiar a Nueva Ventana</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">Repositorios</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">Pegar</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">Hace {0} días</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/fr_FR.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">Fermer les autres onglets</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">Fermer les onglets à droite</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">Copier le chemin vers le dépôt</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">Déplacer vers une nouvelle fenêtre</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">Copier vers une nouvelle fenêtre</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">Dépôts</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">Coller</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">il y a {0} jours</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/it_IT.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">Chiudi Altri Tab</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">Chiudi i Tab a Destra</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">Copia Percorso Repository</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">Sposta in Nuova Finestra</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">Copia in Nuova Finestra</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">Repository</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">Incolla</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} giorni fa</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/ja_JP.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">他のタブを閉じる</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">右のタブを閉じる</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">リポジトリパスをコピー</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">新しいウィンドウに移動</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">新しいウィンドウにコピー</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">リポジトリ</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">貼り付け</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} 日前</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/pt_BR.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">Fechar Outras Abas</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">Fechar Abas à Direita</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">Copiar Caminho do Repositório</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">Mover para Nova Janela</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">Copiar para Nova Janela</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">Repositórios</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">Colar</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} dias atrás</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/ru_RU.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">Закрыть другие вкладки</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">Закрыть вкладки справа</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">Копировать путь репозитория</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">Переместить в новое окно</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">Копировать в новое окно</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">Репозитории</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">Вставить</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} дней назад</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/ta_IN.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">பிற தாவல்களை மூடு</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">வலதுபுறத்தில் உள்ள தாவல்களை மூடு</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">களஞ்சிய பாதை நகலெடு</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">புதிய சாளரத்திற்கு நகர்த்து</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">புதிய சாளரத்திற்கு நகலெடு</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">களஞ்சியங்கள்</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">ஒட்டு</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} நாட்களுக்கு முன்பு</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/uk_UA.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">Закрити інші вкладки</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">Закрити вкладки праворуч</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">Копіювати шлях до сховища</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">Перемістити в нове вікно</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">Копіювати в нове вікно</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">Сховища</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">Вставити</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} днів тому</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/zh_CN.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">关闭其他标签页</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">关闭右侧标签页</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">复制仓库路径</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">移动到新窗口</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">复制到新窗口</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">新标签页</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">粘贴</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0}天前</x:String>
Expand Down
2 changes: 2 additions & 0 deletions src/Resources/Locales/zh_TW.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,8 @@
<x:String x:Key="Text.PageTabBar.Tab.CloseOther" xml:space="preserve">關閉其他分頁</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CloseRight" xml:space="preserve">關閉右側分頁</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyPath" xml:space="preserve">複製存放庫路徑</x:String>
<x:String x:Key="Text.PageTabBar.Tab.MoveToNewWindow" xml:space="preserve">移動到新視窗</x:String>
<x:String x:Key="Text.PageTabBar.Tab.CopyToNewWindow" xml:space="preserve">複製到新視窗</x:String>
<x:String x:Key="Text.PageTabBar.Welcome.Title" xml:space="preserve">新分頁</x:String>
<x:String x:Key="Text.Paste" xml:space="preserve">貼上</x:String>
<x:String x:Key="Text.Period.DaysAgo" xml:space="preserve">{0} 天前</x:String>
Expand Down
53 changes: 52 additions & 1 deletion src/ViewModels/Launcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,15 @@ public IDisposable Switcher
private set => SetProperty(ref _switcher, value);
}

public Launcher(string startupRepo)
public bool IsSecondaryWindow
{
get => _isSecondaryWindow;
set => SetProperty(ref _isSecondaryWindow, value);
}

public event Action OnRequestClose;

public Launcher(string startupRepo, bool isSecondaryWindow = false)
{
_ignoreIndexChange = true;

Expand Down Expand Up @@ -116,6 +124,8 @@ public Launcher(string startupRepo)

if (string.IsNullOrEmpty(_title))
UpdateTitle();

IsSecondaryWindow = isSecondaryWindow;
}

public void Quit()
Expand Down Expand Up @@ -273,6 +283,13 @@ public void CloseTab(LauncherPage page)
}
else
{
if (IsSecondaryWindow)
{
OnRequestClose?.Invoke();

return;
}

App.Quit(0);
}

Expand Down Expand Up @@ -495,6 +512,24 @@ public ContextMenu CreateContextForPageTab(LauncherPage page)

if (page.Node.IsRepository)
{
var moveToNewWindow = new MenuItem();
moveToNewWindow.Header = App.Text("PageTabBar.Tab.MoveToNewWindow");
moveToNewWindow.Click += (_, e) =>
{
MoveToNewWindow(page);
e.Handled = true;
};
menu.Items.Add(moveToNewWindow);

var copyToNewWindow = new MenuItem();
copyToNewWindow.Header = App.Text("PageTabBar.Tab.CopyToNewWindow");
copyToNewWindow.Click += (_, e) =>
{
CopyToNewWindow(page);
e.Handled = true;
};
menu.Items.Add(copyToNewWindow);

var bookmark = new MenuItem();
bookmark.Header = App.Text("PageTabBar.Tab.Bookmark");
bookmark.Icon = App.CreateMenuIcon("Icons.Bookmark");
Expand Down Expand Up @@ -534,6 +569,21 @@ public ContextMenu CreateContextForPageTab(LauncherPage page)
return menu;
}

public void MoveToNewWindow(LauncherPage page)
{
NewWindow(page);
CloseTab(page);
}

public void CopyToNewWindow(LauncherPage page) => NewWindow(page);

private void NewWindow(LauncherPage page)
{
var newWindow = new Views.Launcher() { DataContext = new Launcher(page.Node.Id, true) };
newWindow.RegisterOnRequestClose();
newWindow.Show();
}

private string GetRepositoryGitDir(string repo)
{
var fullpath = Path.Combine(repo, ".git");
Expand Down Expand Up @@ -611,5 +661,6 @@ private void UpdateTitle()
private bool _ignoreIndexChange = false;
private string _title = string.Empty;
private IDisposable _switcher = null;
private bool _isSecondaryWindow = false;
}
}
7 changes: 7 additions & 0 deletions src/Views/Launcher.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Platform;
using Avalonia.Threading;
using Avalonia.VisualTree;

namespace SourceGit.Views
Expand Down Expand Up @@ -85,6 +86,12 @@ public Launcher()
WindowStartupLocation = WindowStartupLocation.CenterScreen;
}

public void RegisterOnRequestClose()
{
if (DataContext is ViewModels.Launcher vm)
vm.OnRequestClose += () => Dispatcher.UIThread.Post(Close);
}

public void BringToTop()
{
if (WindowState == WindowState.Minimized)
Expand Down
Loading