diff --git a/build-aux/dev.geopjr.Tuba.Stack.json b/build-aux/dev.geopjr.Tuba.Stack.json
new file mode 100644
index 000000000..da5bc7252
--- /dev/null
+++ b/build-aux/dev.geopjr.Tuba.Stack.json
@@ -0,0 +1,115 @@
+{
+ "app-id": "dev.geopjr.Tuba",
+ "runtime": "org.gnome.Platform",
+ "runtime-version": "master",
+ "sdk": "org.gnome.Sdk",
+ "command": "dev.geopjr.Tuba",
+ "finish-args": [
+ "--device=dri",
+ "--share=ipc",
+ "--share=network",
+ "--socket=fallback-x11",
+ "--socket=wayland",
+ "--socket=pulseaudio"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "/man",
+ "/share/doc",
+ "/share/gtk-doc",
+ "/share/man",
+ "/share/pkgconfig",
+ "/share/vala",
+ "*.la",
+ "*.a"
+ ],
+ "modules": [
+ {
+ "name": "libsass",
+ "buildsystem": "meson",
+ "cleanup": [
+ "*"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/lazka/libsass.git",
+ "commit": "302397c0c8ae2d7ab02f45ea461c2c3d768f248e"
+ }
+ ]
+ },
+ {
+ "name": "sassc",
+ "buildsystem": "meson",
+ "cleanup": [
+ "*"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/lazka/sassc.git",
+ "commit": "82803377c33247265d779af034eceb5949e78354"
+ }
+ ]
+ },
+ {
+ "name": "gtk",
+ "buildsystem": "meson",
+ "config-opts": [
+ "-Dbuildtype=release",
+ "-Dprint-cups=disabled",
+ "-Dbuild-demos=false",
+ "-Dbuild-testsuite=false",
+ "-Dbuild-examples=false",
+ "-Dbuild-tests=false"
+ ],
+ "cleanup": [
+ "/bin/gtk*"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://gitlab.gnome.org/GNOME/gtk.git",
+ "tag": "4.17.2"
+ },
+ {
+ "type": "patch",
+ "path": "listview_lower_min_recycler.patch"
+ }
+ ]
+ },
+ {
+ "name": "libspelling",
+ "buildsystem": "meson",
+ "config-opts": [
+ "-Ddocs=false"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://gitlab.gnome.org/GNOME/libspelling.git",
+ "tag": "0.4.5"
+ }
+ ]
+ },
+ {
+ "name": "tuba",
+ "builddir": true,
+ "buildsystem": "meson",
+ "config-opts": [
+ "-Ddevel=true",
+ "--libdir=lib"
+ ],
+ "sources": [
+ {
+ "type": "dir",
+ "path": "../"
+ }
+ ]
+ }
+ ],
+ "build-options": {
+ "env": {}
+ }
+}
diff --git a/build-aux/listview_lower_min_recycler.patch b/build-aux/listview_lower_min_recycler.patch
new file mode 100644
index 000000000..983ebfd35
--- /dev/null
+++ b/build-aux/listview_lower_min_recycler.patch
@@ -0,0 +1,14 @@
+diff --git a/gtk/gtklistview.c b/gtk/gtklistview.c
+--- gtk/gtklistview.c
++++ gtk/gtklistview.c
+@@ -33,9 +33,9 @@
+ /* Maximum number of list items created by the listview.
+ * For debugging, you can set this to G_MAXUINT to ensure
+ * there's always a list item for every row.
+ */
+-#define GTK_LIST_VIEW_MAX_LIST_ITEMS 200
++#define GTK_LIST_VIEW_MAX_LIST_ITEMS 20
+
+ /* Extra items to keep above + below every tracker */
+ #define GTK_LIST_VIEW_EXTRA_ITEMS 2
+
diff --git a/data/style.css b/data/style.css
index 5246e941b..5fd229441 100644
--- a/data/style.css
+++ b/data/style.css
@@ -208,8 +208,7 @@ headerbar.flat.no-title .title {
}
.small .ttl-profile-cover>.content {
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
+ border-radius: 0px;
}
.ttl-box-no-shadow>revealer>box {
@@ -523,67 +522,70 @@ video > overlay > revealer > controls, .audio-controls {
box-shadow: none;
}
-/* .ttl-view .content row:first-child { */
-.ttl-view .fake-content row:first-child {
+.ttl-view .contentbase row:first-child {
+/* .ttl-view .fake-content row:first-child { */
margin-top: 0px;
}
-/* .ttl-view .content row:last-child { */
-.ttl-view .fake-content row:last-child {
+.ttl-view .contentbase row:last-child {
+/* .ttl-view .fake-content row:last-child { */
margin-bottom: 0px;
}
-/* .ttl-view:not(.large-view) .content .card { */
-.ttl-view:not(.large-view) .fake-content .card,
-.ttl-view:not(.large-view) .fake-content .toggle-group-17 {
+.ttl-view:not(.large-view) .contentbase .card,
+.ttl-view:not(.large-view) .contentbase .toggle-group-17 {
+/* .ttl-view:not(.large-view) .fake-content .card,
+.ttl-view:not(.large-view) .fake-content .toggle-group-17 { */
border-left: none;
border-right: none;
border-radius: 0px;
}
-/* .ttl-view:not(.large-view) .content { */
-.ttl-view:not(.large-view) .fake-content {
+.ttl-view:not(.large-view) .contentbase {
+/* .ttl-view:not(.large-view) .fake-content { */
padding: 0px;
}
-/* .ttl-view .content row:not(.ttl-post) { */
-.ttl-view .fake-content row:not(.ttl-post):not(.toggle-group-17) {
+.ttl-view .contentbase row:not(.ttl-post):not(.toggle-group-17) {
+/* .ttl-view .fake-content row:not(.ttl-post):not(.toggle-group-17) { */
padding: 0px;
}
-.card-spacing {
+/* .card-spacing {
background-color: var(--card-bg-color);
-}
+} */
-.ttl-profile-cover > .content {
+.ttl-profile-cover > .contentbase {
background: none;
}
-/* .ttl-view .content { */
-.ttl-view .fake-content {
+.ttl-view .contentbase {
+/* .ttl-view .fake-content { */
transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
-.ttl-view.large-view .fake-content:first-child {
+.ttl-view.large-view .contentbase:first-child {
+/* .ttl-view.large-view .fake-content:first-child { */
padding-top: 32px;
}
-.ttl-view.large-view .fake-content:last-child {
+.ttl-view.large-view .contentbase:last-child {
+/* .ttl-view.large-view .fake-content:last-child { */
padding-bottom: 32px;
}
-/* .ttl-view:not(.large-view) .content .card { */
-.ttl-view:not(.large-view) .fake-content .card {
+.ttl-view:not(.large-view) .contentbase .card {
+/* .ttl-view:not(.large-view) .fake-content .card { */
border-bottom: 1px var(--border-color) solid;
}
-/* .ttl-view:not(.large-view) .content .card:first-child { */
-.ttl-view:not(.large-view) .fake-content .card:first-child {
+.ttl-view:not(.large-view) .contentbase .card:first-child {
+/* .ttl-view:not(.large-view) .fake-content .card:first-child { */
border-top: 1px var(--border-color) solid;
}
-/* .ttl-view:not(.large-view) .content .card { */
-.ttl-view:not(.large-view) .fake-content .card {
+.ttl-view:not(.large-view) .contentbase .card {
+/* .ttl-view:not(.large-view) .fake-content .card { */
box-shadow: none;
}
@@ -599,8 +601,8 @@ video > overlay > revealer > controls, .audio-controls {
border-radius: 12px;
}
-/* .ttl-view:not(.large-view) .content .card.card-spacing { */
-.ttl-view:not(.large-view) .fake-content .card.card-spacing {
+.ttl-view:not(.large-view) .contentbase .card-spacing:not(.keep-margin) {
+/* .ttl-view:not(.large-view) .fake-content .card.card-spacing { */
margin: 0px;
}
@@ -612,7 +614,7 @@ video > overlay > revealer > controls, .audio-controls {
padding: 3px 14px;
}
-.ttl-view.large-view .fake-content {
+.ttl-view.large-view .contentbase {
padding-left: 0;
padding-right: 0;
margin-left: 18px;
diff --git a/data/ui/views/base.ui b/data/ui/views/base.ui
index e715278d5..f56075a5e 100644
--- a/data/ui/views/base.ui
+++ b/data/ui/views/base.ui
@@ -159,8 +159,8 @@
1
never
-
-