diff --git a/dev.deedles.Trayscale.metainfo.xml b/dev.deedles.Trayscale.metainfo.xml index cffd3fc..d98127a 100644 --- a/dev.deedles.Trayscale.metainfo.xml +++ b/dev.deedles.Trayscale.metainfo.xml @@ -41,6 +41,14 @@ + + +
    +
  • Update to use new Libadwaita widgets.
  • +
  • Fix a bunch of UI bugs.
  • +
+
+
    diff --git a/internal/ui/app.go b/internal/ui/app.go index 27bf4d5..35d8e10 100644 --- a/internal/ui/app.go +++ b/internal/ui/app.go @@ -316,14 +316,9 @@ func (a *App) onAppActivate(ctx context.Context) { return true }) + contentVariant := glib.NewVariantString("content") a.win.PeersStack.NotifyProperty("visible-child", func() { - if a.win.PeersStack.VisibleChild() != nil { - a.win.Leaflet.Navigate(adw.NavigationDirectionForward) - } - }) - - a.win.BackButton.ConnectClicked(func() { - a.win.Leaflet.Navigate(adw.NavigationDirectionBack) + a.win.SplitView.ActivateAction("navigation.push", contentVariant) }) a.win.ConnectCloseRequest(func() bool { diff --git a/internal/ui/mainwindow.go b/internal/ui/mainwindow.go index e43f1cb..b293dd7 100644 --- a/internal/ui/mainwindow.go +++ b/internal/ui/mainwindow.go @@ -19,10 +19,9 @@ type MainWindow struct { *adw.ApplicationWindow `gtk:"MainWindow"` ToastOverlay *adw.ToastOverlay - Leaflet *adw.Leaflet + SplitView *adw.NavigationSplitView StatusSwitch *gtk.Switch MainMenuButton *gtk.MenuButton - BackButton *gtk.Button PeersStack *gtk.Stack WorkSpinner *gtk.Spinner } diff --git a/internal/ui/mainwindow.ui b/internal/ui/mainwindow.ui index 8f0d486..f95d214 100644 --- a/internal/ui/mainwindow.ui +++ b/internal/ui/mainwindow.ui @@ -1,5 +1,5 @@ - + @@ -8,83 +8,76 @@ ToastOverlay 600 800 + 400 Trayscale + 200 + + + + max-width: 400sp + True + + - - True - - - vertical - 360 - - - False - - - - - - open-menu-symbolic - True - - MainMenu + + + + + + + + slide-up-down + + + + + False + False + + + - - - Leaflet - - - - - PeersStack - True - 270 - - + + content - - - - True - vertical - - - False - - - False - go-previous-symbolic - - - Leaflet - + + 360.0 + 200.0 + + + + + + + PeersStack + + + + + False + + + + + + open-menu-symbolic + True + + MainMenu + + - - - - - - - - - Leaflet - - - - - - slide-up-down - True - + + sidebar + Trayscale - - + diff --git a/internal/ui/page.go b/internal/ui/page.go index 95a61a4..06affd4 100644 --- a/internal/ui/page.go +++ b/internal/ui/page.go @@ -64,9 +64,7 @@ func (a *App) newPeerPage(status tsutil.Status, peer *ipnstate.PeerStatus) *peer if !page.self { page.container.AddController(page.container.DropTarget) page.container.DropTarget.SetGTypes([]glib.Type{gio.GTypeFile}) - // BUG: ConnectDrop() doesn't work. See - // https://github.com/diamondburned/gotk4/issues/107#issuecomment-1685377125 - page.container.DropTarget.Connect("drop", func(val *glib.Value, x, y float64) bool { + page.container.DropTarget.ConnectDrop(func(val *glib.Value, x, y float64) bool { file, ok := val.Object().Cast().(*gio.File) if !ok { return true diff --git a/internal/ui/peerpage.ui b/internal/ui/peerpage.ui index a03c8fe..302588c 100644 --- a/internal/ui/peerpage.ui +++ b/internal/ui/peerpage.ui @@ -1,5 +1,5 @@ - + @@ -20,6 +20,7 @@ Options + AdvertiseExitNodeSwitch Advertise exit node @@ -31,6 +32,7 @@ + AllowLANAccessSwitch Allow LAN access @@ -42,6 +44,7 @@ + AcceptRoutesSwitch Accept routes @@ -64,11 +67,13 @@ peer.sendfile - document-send-symbolic + SendFileButton + Click or drag and drop here Send a file to remote machine False + document-send-symbolic 12 12 @@ -79,6 +84,12 @@ + + + False + list-add-symbolic + + Advertised Routes @@ -194,7 +205,7 @@ Misc. - security-high-symbolic + ExitNodeSwitch Use as exit node @@ -270,8 +281,4 @@ copy - - False - list-add-symbolic - diff --git a/internal/ui/preferences.ui b/internal/ui/preferences.ui index 62af87a..6af7a92 100644 --- a/internal/ui/preferences.ui +++ b/internal/ui/preferences.ui @@ -1,5 +1,5 @@ - + diff --git a/internal/ui/trayscale.cmb b/internal/ui/trayscale.cmb index e98c1aa..2f5ee59 100644 --- a/internal/ui/trayscale.cmb +++ b/internal/ui/trayscale.cmb @@ -1,6 +1,6 @@ - + (1,None,"mainwindow.ui","mainwindow.ui",None,None,None,None,None,None,None), (2,None,None,"peerpage.ui",None,None,None,None,None,None,None), @@ -9,18 +9,19 @@ (1,1,"AdwApplicationWindow","MainWindow",None,None,None,None,None,None), (1,4,"AdwToastOverlay","ToastOverlay",1,None,None,None,2,None), - (1,5,"AdwLeaflet","Leaflet",4,None,None,None,None,""), - (1,6,"GtkBox",None,5,None,None,None,None,None), - (1,7,"AdwHeaderBar",None,6,None,None,None,None,"<binding name=\"show-end-title-buttons\">\n <lookup name=\"folded\">Leaflet</lookup>\n</binding>"), - (1,8,"GtkBox",None,5,None,None,None,2,None), - (1,9,"AdwHeaderBar",None,8,None,None,None,None,"<binding name=\"show-start-title-buttons\">\n <lookup name=\"folded\">Leaflet</lookup>\n</binding>"), - (1,10,"GtkMenuButton","MainMenuButton",7,None,"end",None,1,"<property name=\"menu-model\">MainMenu</property>"), - (1,11,"GtkStackSidebar",None,6,None,None,None,1,None), - (1,16,"GtkStack","PeersStack",8,None,None,None,1,None), - (1,17,"GtkSwitch","StatusSwitch",7,None,"start",None,None,None), - (1,18,"GtkButton","BackButton",9,None,"start",None,None,"<binding name=\"visible\">\n <lookup name=\"folded\">Leaflet</lookup>\n</binding>"), - (1,19,"GtkSpinner","WorkSpinner",9,None,"end",None,1,None), - (1,20,"GtkBox",None,9,None,"title",None,None,None), + (1,21,"AdwNavigationSplitView","SplitView",4,None,None,None,-1,None), + (1,34,"AdwNavigationPage",None,21,None,None,None,-1,None), + (1,35,"AdwNavigationPage",None,21,None,None,None,-1,None), + (1,52,"AdwToolbarView",None,34,None,None,None,-1,None), + (1,57,"AdwHeaderBar",None,52,None,"top",None,1,None), + (1,58,"GtkSpinner","WorkSpinner",57,None,"end",None,None,None), + (1,60,"GtkStack","PeersStack",52,None,None,None,-1,None), + (1,61,"AdwToolbarView",None,35,None,None,None,-1,None), + (1,67,"AdwHeaderBar",None,61,None,"top",None,1,None), + (1,68,"GtkSwitch","StatusSwitch",67,None,"start",None,None,None), + (1,69,"GtkMenuButton","MainMenuButton",67,None,"end",None,1,"<property name=\"menu-model\">MainMenu</property>"), + (1,71,"GtkStackSidebar",None,61,None,None,None,-1,None), + (1,72,"AdwBreakpoint",None,1,None,None,None,1,"<condition>max-width: 400sp</condition><setter object=\"SplitView\" property=\"collapsed\">True</setter>"), (2,3,"AdwStatusPage","PeerPage",None,None,None,None,None,None), (2,73,"AdwClamp",None,3,None,None,None,1,None), (2,74,"GtkBox",None,73,None,None,None,None,None), @@ -78,7 +79,7 @@ (2,137,"AdwActionRow","AcceptRoutesRow",76,None,None,None,2,None), (2,138,"GtkSwitch","AcceptRoutesSwitch",137,None,None,None,None,None), (2,139,"GtkButton","NetCheckButton",87,None,None,None,-1,None), - (2,150,"GtkButton","AdvertiseRouteButton",None,None,None,None,None,None), + (2,142,"GtkButton","AdvertiseRouteButton",85,None,None,None,-1,None), (3,1,"AdwPreferencesWindow","PreferencesWindow",None,None,None,None,None,None), (3,2,"AdwPreferencesPage",None,1,None,None,None,None,None), (3,3,"AdwPreferencesGroup",None,2,None,None,None,None,None), @@ -92,44 +93,48 @@ (1,1,"AdwApplicationWindow","content","4",None,None,None,None,None,None,None,None,None), + (1,1,"GtkWidget","height-request","400",None,None,None,None,None,None,None,None,None), + (1,1,"GtkWidget","width-request","200",None,None,None,None,None,None,None,None,None), (1,1,"GtkWindow","default-height","600",None,None,None,None,None,None,None,None,None), (1,1,"GtkWindow","default-width","800",None,None,None,None,None,None,None,None,None), (1,1,"GtkWindow","title","Trayscale",None,None,None,None,None,None,None,None,None), - (1,5,"AdwLeaflet","can-navigate-back","True",None,None,None,None,None,None,None,None,None), - (1,6,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), - (1,6,"GtkWidget","width-request","360",None,None,None,None,None,None,None,None,None), - (1,7,"AdwHeaderBar","show-end-title-buttons","False",None,None,None,None,None,None,None,None,None), - (1,8,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), - (1,8,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), - (1,9,"AdwHeaderBar","show-start-title-buttons","False",None,None,None,None,None,None,None,None,None), - (1,10,"GtkMenuButton","icon-name","open-menu-symbolic",None,None,None,None,None,None,None,None,None), - (1,10,"GtkMenuButton","primary","True",None,None,None,None,None,None,None,None,None), - (1,11,"GtkStackSidebar","stack","16",None,None,None,None,None,None,None,None,None), - (1,11,"GtkWidget","vexpand","True",None,None,None,None,None,None,None,None,None), - (1,11,"GtkWidget","width-request","270",None,None,None,None,None,None,None,None,None), - (1,16,"GtkStack","transition-type","slide-up-down",None,None,None,None,None,None,None,None,None), - (1,16,"GtkWidget","vexpand","True",None,None,None,None,None,None,None,None,None), - (1,18,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None), - (1,18,"GtkButton","icon-name","go-previous-symbolic",None,None,None,None,None,None,None,None,None), + (1,21,"AdwNavigationSplitView","content",None,None,None,None,None,34,None,None,None,None), + (1,21,"AdwNavigationSplitView","max-sidebar-width","360.0",None,None,None,None,None,None,None,None,None), + (1,21,"AdwNavigationSplitView","min-sidebar-width","200.0",None,None,None,None,None,None,None,None,None), + (1,21,"AdwNavigationSplitView","sidebar",None,None,None,None,None,35,None,None,None,None), + (1,34,"AdwNavigationPage","child",None,None,None,None,None,52,None,None,None,None), + (1,34,"AdwNavigationPage","tag","content",None,None,None,None,None,None,None,None,None), + (1,35,"AdwNavigationPage","child",None,None,None,None,None,61,None,None,None,None), + (1,35,"AdwNavigationPage","tag","sidebar",None,None,None,None,None,None,None,None,None), + (1,35,"AdwNavigationPage","title","Trayscale",None,None,None,None,None,None,None,None,None), + (1,52,"AdwToolbarView","content",None,None,None,None,None,60,None,None,None,None), + (1,57,"AdwHeaderBar","show-start-title-buttons","False",None,None,None,None,None,None,None,None,None), + (1,57,"AdwHeaderBar","show-title","False",None,None,None,None,None,None,None,None,None), + (1,60,"GtkStack","transition-type","slide-up-down",None,None,None,None,None,None,None,None,None), + (1,61,"AdwToolbarView","content",None,None,None,None,None,71,None,None,None,None), + (1,67,"AdwHeaderBar","show-end-title-buttons","False",None,None,None,None,None,None,None,None,None), + (1,69,"GtkMenuButton","icon-name","open-menu-symbolic",None,None,None,None,None,None,None,None,None), + (1,69,"GtkMenuButton","primary","True",None,None,None,None,None,None,None,None,None), + (1,71,"GtkStackSidebar","stack","60",None,None,None,None,None,None,None,None,None), (2,74,"GtkBox","spacing","12",None,None,None,None,None,None,None,None,None), (2,74,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), (2,75,"AdwPreferencesGroup","title","Tailscale IPs",None,None,None,None,None,None,None,None,None), (2,76,"AdwPreferencesGroup","title","Options",None,None,None,None,None,None,None,None,None), - (2,77,"AdwActionRow","activatable-widget","152",None,None,None,None,None,None,None,None,None), + (2,77,"AdwActionRow","activatable-widget","78",None,None,None,None,None,None,None,None,None), (2,77,"AdwPreferencesRow","title","Advertise exit node",None,None,None,None,None,None,None,None,None), (2,78,"GtkWidget","margin-bottom","12",None,None,None,None,None,None,None,None,None), (2,78,"GtkWidget","margin-top","12",None,None,None,None,None,None,None,None,None), - (2,79,"AdwActionRow","activatable-widget","153",None,None,None,None,None,None,None,None,None), + (2,79,"AdwActionRow","activatable-widget","80",None,None,None,None,None,None,None,None,None), (2,79,"AdwPreferencesRow","title","Allow LAN access",None,None,None,None,None,None,None,None,None), (2,80,"GtkWidget","margin-bottom","12",None,None,None,None,None,None,None,None,None), (2,80,"GtkWidget","margin-top","12",None,None,None,None,None,None,None,None,None), (2,81,"AdwPreferencesGroup","title","Files",None,None,None,None,None,None,None,None,None), (2,82,"AdwPreferencesGroup","title","Files",None,None,None,None,None,None,None,None,None), - (2,83,"AdwActionRow","activatable-widget","151",None,None,None,None,None,None,None,None,None), - (2,83,"AdwActionRow","icon-name","document-send-symbolic",None,None,None,None,None,None,None,None,None), + (2,83,"AdwActionRow","activatable-widget","136",None,None,None,None,None,None,None,None,None), + (2,83,"AdwActionRow","subtitle","Click or drag and drop here",None,None,None,None,None,None,None,None,None), (2,83,"AdwPreferencesRow","title","Send a file to remote machine",None,None,None,None,None,None,None,None,None), (2,83,"GtkActionable","action-name","peer.sendfile",None,None,None,None,None,None,None,None,None), - (2,85,"AdwPreferencesGroup","header-suffix","146",None,None,None,None,None,None,None,None,None), + (2,85,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,142,None,None,None,None), (2,85,"AdwPreferencesGroup","title","Advertised Routes",None,None,None,None,None,None,None,None,None), (2,87,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,139,None,None,None,None), (2,87,"AdwPreferencesGroup","title","Network Check",None,None,None,None,None,None,None,None,None), @@ -155,8 +160,7 @@ (2,109,"AdwPreferencesRow","title","DERP Latencies",None,None,None,None,None,None,None,None,None), (2,109,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None), (2,110,"AdwPreferencesGroup","title","Misc.",None,None,None,None,None,None,None,None,None), - (2,111,"AdwActionRow","activatable-widget","148",None,None,None,None,None,None,None,None,None), - (2,111,"AdwActionRow","icon-name","security-high-symbolic",None,None,None,None,None,None,None,None,None), + (2,111,"AdwActionRow","activatable-widget","112",None,None,None,None,None,None,None,None,None), (2,111,"AdwPreferencesRow","title","Use as exit node",None,None,None,None,None,None,None,None,None), (2,112,"GtkWidget","margin-bottom","12",None,None,None,None,None,None,None,None,None), (2,112,"GtkWidget","margin-top","12",None,None,None,None,None,None,None,None,None), @@ -171,16 +175,17 @@ (2,134,"GtkButton","icon-name","list-add-symbolic",None,None,None,None,None,None,None,None,None), (2,135,"GtkDropTarget","actions","copy",None,None,None,None,None,None,None,None,None), (2,136,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None), + (2,136,"GtkButton","icon-name","document-send-symbolic",None,None,None,None,None,None,None,None,None), (2,136,"GtkWidget","margin-bottom","12",None,None,None,None,None,None,None,None,None), (2,136,"GtkWidget","margin-top","12",None,None,None,None,None,None,None,None,None), - (2,137,"AdwActionRow","activatable-widget","147",None,None,None,None,None,None,None,None,None), + (2,137,"AdwActionRow","activatable-widget","138",None,None,None,None,None,None,None,None,None), (2,137,"AdwPreferencesRow","title","Accept routes",None,None,None,None,None,None,None,None,None), (2,138,"GtkWidget","margin-bottom","12",None,None,None,None,None,None,None,None,None), (2,138,"GtkWidget","margin-top","12",None,None,None,None,None,None,None,None,None), (2,139,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None), (2,139,"GtkButton","icon-name","view-refresh-symbolic",None,None,None,None,None,None,None,None,None), - (2,150,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None), - (2,150,"GtkButton","icon-name","list-add-symbolic",None,None,None,None,None,None,None,None,None), + (2,142,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None), + (2,142,"GtkButton","icon-name","list-add-symbolic",None,None,None,None,None,None,None,None,None), (3,3,"AdwPreferencesGroup","title","General",None,None,None,None,None,None,None,None,None), (3,4,"AdwActionRow","activatable-widget","12",None,None,None,None,None,None,None,None,None), (3,4,"AdwActionRow","subtitle","If enabled, an icon will be added to the system tray",None,None,None,None,None,None,None,None,None),