Skip to content

Commit f201626

Browse files
committed
feat: Recently closed sites
1 parent 801c46a commit f201626

File tree

3 files changed

+84
-2
lines changed

3 files changed

+84
-2
lines changed

src/MainPage.xaml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,49 @@
8181
</ListView>
8282
</Grid>
8383
</Flyout>
84+
<Flyout x:Name="RecentlyClosedTabsFlyout">
85+
<Grid Margin="-5">
86+
<Grid.RowDefinitions>
87+
<RowDefinition Height="Auto" />
88+
<RowDefinition Height="Auto" />
89+
<RowDefinition Height="*" />
90+
</Grid.RowDefinitions>
91+
<muxc:InfoBar
92+
Title="Warning"
93+
Grid.Row="0"
94+
IsClosable="False"
95+
IsOpen="True"
96+
Message="This feature is in beta"
97+
Severity="Warning" />
98+
<TextBlock
99+
Grid.Row="1"
100+
FontSize="20"
101+
Text="Recently closed tabs" />
102+
<ListView
103+
x:Name="RecentlyClosedTabsListView"
104+
Grid.Row="2"
105+
Width="300"
106+
MaxHeight="350"
107+
ItemsSource="{x:Bind viewmodels:SettingsViewModel.SettingsVM.RecentlyClosedTabsList, Mode=TwoWay}"
108+
SelectionChanged="RecentlyClosedTabsListView_SelectionChanged">
109+
<ListView.ItemTemplate>
110+
<DataTemplate x:DataType="favorites:FavoriteItem">
111+
<StackPanel Margin="0,10,0,10" ToolTipService.ToolTip="{x:Bind Url}">
112+
<TextBlock
113+
FontSize="18"
114+
Text="{x:Bind Title}"
115+
TextTrimming="CharacterEllipsis" />
116+
<TextBlock
117+
FontSize="12"
118+
Foreground="{ThemeResource SystemAccentColorDark1}"
119+
Text="{x:Bind Url}"
120+
TextTrimming="CharacterEllipsis" />
121+
</StackPanel>
122+
</DataTemplate>
123+
</ListView.ItemTemplate>
124+
</ListView>
125+
</Grid>
126+
</Flyout>
84127
</Page.Resources>
85128
<muxc:TabView
86129
x:Name="Tabs"
@@ -101,6 +144,14 @@
101144
<FontIcon Glyph="&#xE10C;" />
102145
<Button.Flyout>
103146
<MenuFlyout Placement="Bottom">
147+
<MenuFlyoutItem
148+
Click="BrowserMenuFlyoutItem_Click"
149+
Tag="RecentlyClosedFlyout"
150+
Text="Recently closed">
151+
<MenuFlyoutItem.Icon>
152+
<FontIcon Glyph="&#xE81C;" />
153+
</MenuFlyoutItem.Icon>
154+
</MenuFlyoutItem>
104155
<MenuFlyoutItem
105156
x:Uid="Downloads"
106157
Click="BrowserMenuFlyoutItem_Click"

src/MainPage.xaml.cs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ private void BrowserMenuFlyoutItem_Click(object sender, RoutedEventArgs e)
5050
{
5151
switch ((sender as MenuFlyoutItem).Tag)
5252
{
53+
case "RecentlyClosedFlyout":
54+
RecentlyClosedTabsListView.SelectedItem = null;
55+
RecentlyClosedTabsFlyout.ShowAt(BrowserMenuBtn);
56+
break;
5357
case "Downloads":
5458
CreateTab("Downloads", "\uE896", typeof(WebViewPage), "edge://downloads");
5559
break;
@@ -145,8 +149,23 @@ private void Tabs_TabCloseRequested(muxc.TabView sender, muxc.TabViewTabCloseReq
145149
{
146150
muxc.TabViewItem tab = args.Tab;
147151
var tabcontent = (Frame)tab.Content;
148-
if (tabcontent.Content is WebViewPage) (tabcontent.Content as WebViewPage).WebViewControl.Close();
149-
if (tabcontent.Content is SplitTabPage) (tabcontent.Content as SplitTabPage).CloseWebViews();
152+
if (tabcontent.Content is WebViewPage)
153+
{
154+
WebViewPage content = tabcontent.Content as WebViewPage;
155+
string title = content.WebViewControl.CoreWebView2.DocumentTitle;
156+
string url = content.WebViewControl.CoreWebView2.Source;
157+
content.WebViewControl.Close();
158+
FavoriteItem newItem = new()
159+
{
160+
Title = title,
161+
Url = url
162+
};
163+
SettingsViewModel.SettingsVM.RecentlyClosedTabsList.Insert(0, newItem);
164+
}
165+
if (tabcontent.Content is SplitTabPage)
166+
{
167+
(tabcontent.Content as SplitTabPage).CloseWebViews();
168+
}
150169
Tabs.TabItems.Remove(tab);
151170
// Workaround for memory leak in TabView
152171
// microsoft-ui-xaml issue #3597
@@ -180,6 +199,17 @@ private void FavoritesList_SelectionChanged(object sender, SelectionChangedEvent
180199
}
181200
}
182201

202+
private void RecentlyClosedTabsListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
203+
{
204+
ListView listView = sender as ListView;
205+
if (listView.SelectedItem != null)
206+
{
207+
FavoriteItem item = (FavoriteItem)listView.SelectedItem;
208+
CreateWebTab(item.Url);
209+
RecentlyClosedTabsFlyout.Hide();
210+
}
211+
}
212+
183213
FavoriteItem selectedItem;
184214
private void FavoritesListView_RightTapped(object sender, RightTappedRoutedEventArgs e)
185215
{

src/ViewModels/SettingsViewModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ public class SettingsViewModel : INotifyPropertyChanged
44
{
55
public static SettingsViewModel SettingsVM = new();
66
public ObservableCollection<FavoriteItem> FavoritesList { get; set; } = new ObservableCollection<FavoriteItem>();
7+
public ObservableCollection<FavoriteItem> RecentlyClosedTabsList { get; set; } = new ObservableCollection<FavoriteItem>();
78

89
// General
910
private bool forcedarkenabled;

0 commit comments

Comments
 (0)