diff --git a/.gitignore b/.gitignore index cb47fc7..2822adc 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,9 @@ linuxdeploy-plugin-* *.swo *~ +# Trash +.trash/ + # OS .DS_Store Thumbs.db diff --git a/data/screenshots/01.png b/data/screenshots/01.png new file mode 100644 index 0000000..0a0eb97 Binary files /dev/null and b/data/screenshots/01.png differ diff --git a/data/screenshots/02.png b/data/screenshots/02.png new file mode 100644 index 0000000..e26b8aa Binary files /dev/null and b/data/screenshots/02.png differ diff --git a/data/screenshots/03.png b/data/screenshots/03.png new file mode 100644 index 0000000..4851fb3 Binary files /dev/null and b/data/screenshots/03.png differ diff --git a/data/screenshots/04.png b/data/screenshots/04.png new file mode 100644 index 0000000..b92279d Binary files /dev/null and b/data/screenshots/04.png differ diff --git a/data/screenshots/05.png b/data/screenshots/05.png new file mode 100644 index 0000000..f5e3a0c Binary files /dev/null and b/data/screenshots/05.png differ diff --git a/data/screenshots/06.png b/data/screenshots/06.png new file mode 100644 index 0000000..fd04463 Binary files /dev/null and b/data/screenshots/06.png differ diff --git a/data/screenshots/07.png b/data/screenshots/07.png new file mode 100644 index 0000000..a20e86b Binary files /dev/null and b/data/screenshots/07.png differ diff --git a/data/screenshots/08.png b/data/screenshots/08.png new file mode 100644 index 0000000..be3e8fe Binary files /dev/null and b/data/screenshots/08.png differ diff --git a/data/screenshots/09.png b/data/screenshots/09.png new file mode 100644 index 0000000..65de02e Binary files /dev/null and b/data/screenshots/09.png differ diff --git a/data/screenshots/10.png b/data/screenshots/10.png new file mode 100644 index 0000000..4ee82d6 Binary files /dev/null and b/data/screenshots/10.png differ diff --git a/data/screenshots/11.png b/data/screenshots/11.png new file mode 100644 index 0000000..b524fef Binary files /dev/null and b/data/screenshots/11.png differ diff --git a/data/screenshots/12.png b/data/screenshots/12.png new file mode 100644 index 0000000..6877f9c Binary files /dev/null and b/data/screenshots/12.png differ diff --git a/data/screenshots/13.png b/data/screenshots/13.png new file mode 100644 index 0000000..0112d71 Binary files /dev/null and b/data/screenshots/13.png differ diff --git a/data/screenshots/14.png b/data/screenshots/14.png new file mode 100644 index 0000000..146571b Binary files /dev/null and b/data/screenshots/14.png differ diff --git a/data/screenshots/15.png b/data/screenshots/15.png new file mode 100644 index 0000000..c74a499 Binary files /dev/null and b/data/screenshots/15.png differ diff --git a/data/screenshots/16.png b/data/screenshots/16.png new file mode 100644 index 0000000..8a8cd1b Binary files /dev/null and b/data/screenshots/16.png differ diff --git a/outlay-gtk/data/com.outlay.app.desktop b/outlay-gtk/data/com.outlay.app.desktop new file mode 100644 index 0000000..9e0d8d8 --- /dev/null +++ b/outlay-gtk/data/com.outlay.app.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Outlay +Comment=Personal income and expense tracker with budgets, charts, and multi-currency support +Exec=outlay-gtk +Icon=com.outlay.app +Terminal=false +Type=Application +Categories=Office;Finance;GTK; +Keywords=expense;budget;money;finance;income;tracker;currency;receipt; +StartupNotify=true +SingleMainWindow=true diff --git a/outlay-gtk/data/com.outlay.app.gschema.xml b/outlay-gtk/data/com.outlay.app.gschema.xml new file mode 100644 index 0000000..2c159ba --- /dev/null +++ b/outlay-gtk/data/com.outlay.app.gschema.xml @@ -0,0 +1,20 @@ + + + + + 900 + Window width + The width of the main application window. + + + 600 + Window height + The height of the main application window. + + + false + Window maximized + Whether the main application window is maximized. + + + diff --git a/outlay-gtk/data/com.outlay.app.metainfo.xml b/outlay-gtk/data/com.outlay.app.metainfo.xml new file mode 100644 index 0000000..b38e008 --- /dev/null +++ b/outlay-gtk/data/com.outlay.app.metainfo.xml @@ -0,0 +1,196 @@ + + + com.outlay.app + CC0-1.0 + CC0-1.0 + + Outlay + Personal income and expense tracker with budgets, charts, and multi-currency support + + +

+ Outlay is a native GTK4/libadwaita personal finance application for + tracking income and expenses, managing budgets, and visualizing spending + patterns. It stores everything locally in SQLite with no cloud dependency. +

+

Key features:

+ +
+ + com.outlay.app + + com.outlay.app.desktop + + + Outlay Contributors + + + https://git.lashman.live/lashman/outlay + https://git.lashman.live/lashman/outlay/issues + https://git.lashman.live/lashman/outlay + https://ko-fi.com/lashman + https://git.lashman.live/lashman/outlay/issues + https://git.lashman.live/lashman/outlay + + lashman@robotbrush.com + + + + Log view with numpad calculator for quick expense entry + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/01.png + + + Transaction history with search, category filters, and daily totals + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/02.png + + + Charts with donut category breakdown and monthly income vs expenses + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/03.png + + + Budget tracking with sparkline trends, spending pace, and insights + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/04.png + + + Savings goals with progress bars and monthly contribution targets + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/05.png + + + Cash flow forecast with projected monthly balances + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/06.png + + + Recurring transactions with next due dates and amounts + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/07.png + + + Subscription management with monthly and yearly cost overview + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/08.png + + + Wishlist with wanted items, prices, and purchase tracking + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/09.png + + + Credit card tracking with balances, utilization, and payment details + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/10.png + + + Insights with streaks, achievements, and monthly spending recap + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/11.png + + + Settings for currency, appearance, and budget notifications + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/12.png + + + Category management, auto-categorization rules, and transaction templates + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/13.png + + + Export and import in CSV, JSON, QIF, OFX, and PDF formats + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/14.png + + + Backup and restore with automatic scheduled backups + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/15.png + + + Quick Add popup for fast expense logging from the system tray + https://git.lashman.live/lashman/outlay/raw/branch/main/data/screenshots/16.png + + + + + #62a0ea + #1a5fb4 + + + + Office + Finance + GTK + + + + Expense + Income + Budget + Finance + Money + Currency + Receipt + Tracker + Chart + Subscription + + + + mild + + + + 360 + + + + keyboard + pointing + + + + first-run + + + + outlay-gtk + + + com.outlay.app + + + + +

Initial release of Outlay with core features:

+
    +
  • Expense and income logging with multi-currency support
  • +
  • Category-based budgets with alerts and sparkline trends
  • +
  • Recurring transactions and subscription management
  • +
  • Interactive donut, bar, and net trend charts
  • +
  • Calendar heatmap, forecast, goals, and wishlist views
  • +
  • Credit card tracking with payment schedules
  • +
  • Natural language input and receipt OCR
  • +
  • Export to CSV, JSON, PDF, OFX, and QIF
  • +
  • Import from CSV, JSON, OFX, QIF, and PDF statements
  • +
  • Spending anomaly detection and monthly insights
  • +
  • System tray integration with quick-add actions
  • +
  • Automatic backup scheduling and restore
  • +
  • Achievement system for financial habit building
  • +
+
+
+
+
diff --git a/outlay-gtk/data/icons/app-icon-preview.html b/outlay-gtk/data/icons/app-icon-preview.html deleted file mode 100644 index 3f96337..0000000 --- a/outlay-gtk/data/icons/app-icon-preview.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - -
-
- -
-
- - diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-192.png b/outlay-gtk/data/icons/com.outlay.Outlay-192.png deleted file mode 100644 index 10cbe7e..0000000 Binary files a/outlay-gtk/data/icons/com.outlay.Outlay-192.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-512-shadow.png b/outlay-gtk/data/icons/com.outlay.Outlay-512-shadow.png deleted file mode 100644 index 4b0b117..0000000 Binary files a/outlay-gtk/data/icons/com.outlay.Outlay-512-shadow.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay.ico b/outlay-gtk/data/icons/com.outlay.Outlay.ico deleted file mode 100644 index 1ccbb9e..0000000 Binary files a/outlay-gtk/data/icons/com.outlay.Outlay.ico and /dev/null differ diff --git a/outlay-gtk/data/icons/hicolor/128x128/apps/com.outlay.Outlay.png b/outlay-gtk/data/icons/hicolor/128x128/apps/com.outlay.Outlay.png deleted file mode 100644 index fc9d765..0000000 Binary files a/outlay-gtk/data/icons/hicolor/128x128/apps/com.outlay.Outlay.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-128.png b/outlay-gtk/data/icons/hicolor/128x128/apps/com.outlay.app.png similarity index 100% rename from outlay-gtk/data/icons/com.outlay.Outlay-128.png rename to outlay-gtk/data/icons/hicolor/128x128/apps/com.outlay.app.png diff --git a/outlay-gtk/data/icons/hicolor/16x16/apps/com.outlay.Outlay.png b/outlay-gtk/data/icons/hicolor/16x16/apps/com.outlay.Outlay.png deleted file mode 100644 index 42456e5..0000000 Binary files a/outlay-gtk/data/icons/hicolor/16x16/apps/com.outlay.Outlay.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-16.png b/outlay-gtk/data/icons/hicolor/16x16/apps/com.outlay.app.png similarity index 100% rename from outlay-gtk/data/icons/com.outlay.Outlay-16.png rename to outlay-gtk/data/icons/hicolor/16x16/apps/com.outlay.app.png diff --git a/outlay-gtk/data/icons/hicolor/24x24/apps/com.outlay.Outlay.png b/outlay-gtk/data/icons/hicolor/24x24/apps/com.outlay.Outlay.png deleted file mode 100644 index 62e5fa9..0000000 Binary files a/outlay-gtk/data/icons/hicolor/24x24/apps/com.outlay.Outlay.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-24.png b/outlay-gtk/data/icons/hicolor/24x24/apps/com.outlay.app.png similarity index 100% rename from outlay-gtk/data/icons/com.outlay.Outlay-24.png rename to outlay-gtk/data/icons/hicolor/24x24/apps/com.outlay.app.png diff --git a/outlay-gtk/data/icons/hicolor/256x256/apps/com.outlay.Outlay.png b/outlay-gtk/data/icons/hicolor/256x256/apps/com.outlay.Outlay.png deleted file mode 100644 index 4822331..0000000 Binary files a/outlay-gtk/data/icons/hicolor/256x256/apps/com.outlay.Outlay.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-256.png b/outlay-gtk/data/icons/hicolor/256x256/apps/com.outlay.app.png similarity index 100% rename from outlay-gtk/data/icons/com.outlay.Outlay-256.png rename to outlay-gtk/data/icons/hicolor/256x256/apps/com.outlay.app.png diff --git a/outlay-gtk/data/icons/hicolor/32x32/apps/com.outlay.Outlay.png b/outlay-gtk/data/icons/hicolor/32x32/apps/com.outlay.Outlay.png deleted file mode 100644 index 0c493f7..0000000 Binary files a/outlay-gtk/data/icons/hicolor/32x32/apps/com.outlay.Outlay.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-32.png b/outlay-gtk/data/icons/hicolor/32x32/apps/com.outlay.app.png similarity index 100% rename from outlay-gtk/data/icons/com.outlay.Outlay-32.png rename to outlay-gtk/data/icons/hicolor/32x32/apps/com.outlay.app.png diff --git a/outlay-gtk/data/icons/hicolor/48x48/apps/com.outlay.Outlay.png b/outlay-gtk/data/icons/hicolor/48x48/apps/com.outlay.Outlay.png deleted file mode 100644 index 01b598f..0000000 Binary files a/outlay-gtk/data/icons/hicolor/48x48/apps/com.outlay.Outlay.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-48.png b/outlay-gtk/data/icons/hicolor/48x48/apps/com.outlay.app.png similarity index 100% rename from outlay-gtk/data/icons/com.outlay.Outlay-48.png rename to outlay-gtk/data/icons/hicolor/48x48/apps/com.outlay.app.png diff --git a/outlay-gtk/data/icons/hicolor/512x512/apps/com.outlay.Outlay.png b/outlay-gtk/data/icons/hicolor/512x512/apps/com.outlay.Outlay.png deleted file mode 100644 index 93acdba..0000000 Binary files a/outlay-gtk/data/icons/hicolor/512x512/apps/com.outlay.Outlay.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-512.png b/outlay-gtk/data/icons/hicolor/512x512/apps/com.outlay.app.png similarity index 100% rename from outlay-gtk/data/icons/com.outlay.Outlay-512.png rename to outlay-gtk/data/icons/hicolor/512x512/apps/com.outlay.app.png diff --git a/outlay-gtk/data/icons/hicolor/64x64/apps/com.outlay.Outlay.png b/outlay-gtk/data/icons/hicolor/64x64/apps/com.outlay.Outlay.png deleted file mode 100644 index 742f82a..0000000 Binary files a/outlay-gtk/data/icons/hicolor/64x64/apps/com.outlay.Outlay.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-64.png b/outlay-gtk/data/icons/hicolor/64x64/apps/com.outlay.app.png similarity index 100% rename from outlay-gtk/data/icons/com.outlay.Outlay-64.png rename to outlay-gtk/data/icons/hicolor/64x64/apps/com.outlay.app.png diff --git a/outlay-gtk/data/icons/hicolor/96x96/apps/com.outlay.Outlay.png b/outlay-gtk/data/icons/hicolor/96x96/apps/com.outlay.Outlay.png deleted file mode 100644 index c02d0b3..0000000 Binary files a/outlay-gtk/data/icons/hicolor/96x96/apps/com.outlay.Outlay.png and /dev/null differ diff --git a/outlay-gtk/data/icons/com.outlay.Outlay-96.png b/outlay-gtk/data/icons/hicolor/96x96/apps/com.outlay.app.png similarity index 100% rename from outlay-gtk/data/icons/com.outlay.Outlay-96.png rename to outlay-gtk/data/icons/hicolor/96x96/apps/com.outlay.app.png diff --git a/outlay-gtk/data/icons/hicolor/scalable/apps/io.github.outlay.svg b/outlay-gtk/data/icons/hicolor/scalable/apps/io.github.outlay.svg deleted file mode 100644 index 17953ba..0000000 --- a/outlay-gtk/data/icons/hicolor/scalable/apps/io.github.outlay.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - $ - - - diff --git a/outlay-gtk/data/icons/tray-icon-32x32.argb b/outlay-gtk/data/icons/tray-icon-32x32.argb new file mode 100644 index 0000000..5624bc4 Binary files /dev/null and b/outlay-gtk/data/icons/tray-icon-32x32.argb differ diff --git a/outlay-gtk/data/icons/tray-icon-48x48.argb b/outlay-gtk/data/icons/tray-icon-48x48.argb new file mode 100644 index 0000000..9256e9c Binary files /dev/null and b/outlay-gtk/data/icons/tray-icon-48x48.argb differ diff --git a/outlay-gtk/data/icons/web/apple-touch-icon.png b/outlay-gtk/data/icons/web/apple-touch-icon.png deleted file mode 100644 index 0c03847..0000000 Binary files a/outlay-gtk/data/icons/web/apple-touch-icon.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-120x120.png b/outlay-gtk/data/icons/web/favicon-120x120.png deleted file mode 100644 index 55b8c82..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-120x120.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-144x144.png b/outlay-gtk/data/icons/web/favicon-144x144.png deleted file mode 100644 index 13f6183..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-144x144.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-152x152.png b/outlay-gtk/data/icons/web/favicon-152x152.png deleted file mode 100644 index b89e5a7..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-152x152.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-16x16.png b/outlay-gtk/data/icons/web/favicon-16x16.png deleted file mode 100644 index a3783d9..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-16x16.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-180x180.png b/outlay-gtk/data/icons/web/favicon-180x180.png deleted file mode 100644 index 0c03847..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-180x180.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-192x192.png b/outlay-gtk/data/icons/web/favicon-192x192.png deleted file mode 100644 index 787592a..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-192x192.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-32x32.png b/outlay-gtk/data/icons/web/favicon-32x32.png deleted file mode 100644 index d02520d..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-32x32.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-48x48.png b/outlay-gtk/data/icons/web/favicon-48x48.png deleted file mode 100644 index 7cc0db4..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-48x48.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-72x72.png b/outlay-gtk/data/icons/web/favicon-72x72.png deleted file mode 100644 index 6743705..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-72x72.png and /dev/null differ diff --git a/outlay-gtk/data/icons/web/favicon-96x96.png b/outlay-gtk/data/icons/web/favicon-96x96.png deleted file mode 100644 index 34aaa23..0000000 Binary files a/outlay-gtk/data/icons/web/favicon-96x96.png and /dev/null differ diff --git a/outlay-gtk/data/io.github.outlay.desktop b/outlay-gtk/data/io.github.outlay.desktop deleted file mode 100644 index d3332d1..0000000 --- a/outlay-gtk/data/io.github.outlay.desktop +++ /dev/null @@ -1,9 +0,0 @@ -[Desktop Entry] -Name=Outlay -Comment=Personal income and expense logger -Exec=outlay-gtk -Icon=io.github.outlay -Terminal=false -Type=Application -Categories=Office;Finance; -Keywords=expense;budget;money;finance;income; diff --git a/outlay-gtk/data/io.github.outlay.gschema.xml b/outlay-gtk/data/io.github.outlay.gschema.xml deleted file mode 100644 index 3de6dd9..0000000 --- a/outlay-gtk/data/io.github.outlay.gschema.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - 900 - - - 600 - - - false - - - diff --git a/outlay-gtk/src/log_view.rs b/outlay-gtk/src/log_view.rs index ee6ceb1..043c60a 100644 --- a/outlay-gtk/src/log_view.rs +++ b/outlay-gtk/src/log_view.rs @@ -1634,8 +1634,7 @@ impl LogView { inner.append(&recent_group); clamp.set_child(Some(&inner)); - toast_overlay.set_child(Some(&clamp)); - container.append(&toast_overlay); + container.append(&clamp); LogView { container, diff --git a/outlay-gtk/src/main.rs b/outlay-gtk/src/main.rs index afa0d41..154d4ff 100644 --- a/outlay-gtk/src/main.rs +++ b/outlay-gtk/src/main.rs @@ -28,7 +28,7 @@ use gtk::glib; use outlay_core::db::Database; use std::rc::Rc; -const APP_ID: &str = "io.github.outlay"; +const APP_ID: &str = "com.outlay.app"; fn main() { let app = Application::builder() @@ -100,6 +100,25 @@ fn build_ui(app: &Application) { load_css(); icon_theme::setup_themed_icons(); + // Register app icon for the hicolor theme so it works for window + tray + { + let display = gtk::gdk::Display::default().expect("Could not get display"); + let theme = gtk::IconTheme::for_display(&display); + let exe_path = std::env::current_exe().unwrap_or_default(); + let exe_dir = exe_path.parent().unwrap_or(std::path::Path::new(".")); + let candidates = [ + exe_dir.join("../../outlay-gtk/data/icons"), + exe_dir.join("../share/icons"), + ]; + for candidate in &candidates { + if candidate.exists() { + theme.add_search_path(candidate); + break; + } + } + } + gtk::Window::set_default_icon_name("com.outlay.app"); + let data_dir = glib::user_data_dir().join("outlay"); std::fs::create_dir_all(&data_dir).expect("Failed to create data directory"); let db_path = data_dir.join("outlay.db"); diff --git a/outlay-gtk/src/tray.rs b/outlay-gtk/src/tray.rs index 308db1b..368151a 100644 --- a/outlay-gtk/src/tray.rs +++ b/outlay-gtk/src/tray.rs @@ -1,6 +1,5 @@ use ksni::menu::StandardItem; -use ksni::{Category, ToolTip, Tray, TrayMethods}; -use std::path::PathBuf; +use ksni::{Category, Icon, ToolTip, Tray, TrayMethods}; use std::sync::mpsc; pub enum TrayCommand { @@ -11,9 +10,11 @@ pub enum TrayCommand { Quit, } +static TRAY_ICON_32: &[u8] = include_bytes!("../data/icons/tray-icon-32x32.argb"); +static TRAY_ICON_48: &[u8] = include_bytes!("../data/icons/tray-icon-48x48.argb"); + struct OutlayTray { sender: mpsc::Sender, - icon_theme_path: String, } impl Tray for OutlayTray { @@ -26,11 +27,22 @@ impl Tray for OutlayTray { } fn icon_name(&self) -> String { - "io.github.outlay".into() + String::new() } - fn icon_theme_path(&self) -> String { - self.icon_theme_path.clone() + fn icon_pixmap(&self) -> Vec { + vec![ + Icon { + width: 32, + height: 32, + data: TRAY_ICON_32.to_vec(), + }, + Icon { + width: 48, + height: 48, + data: TRAY_ICON_48.to_vec(), + }, + ] } fn category(&self) -> Category { @@ -98,34 +110,8 @@ impl Tray for OutlayTray { } } -fn find_icon_theme_path() -> String { - let exe_path = std::env::current_exe().unwrap_or_default(); - let exe_dir = exe_path.parent().unwrap_or(std::path::Path::new(".")); - - let candidates = [ - exe_dir.join("../../outlay-gtk/data/icons"), - exe_dir.join("../share/icons"), - PathBuf::from("/usr/share/icons"), - ]; - - for candidate in &candidates { - if candidate.exists() { - if let Ok(resolved) = candidate.canonicalize() { - return resolved.to_string_lossy().into_owned(); - } - } - } - - String::new() -} - pub fn spawn_tray(sender: mpsc::Sender) { - let icon_theme_path = find_icon_theme_path(); - - let tray = OutlayTray { - sender, - icon_theme_path, - }; + let tray = OutlayTray { sender }; std::thread::spawn(move || { let rt = tokio::runtime::Builder::new_current_thread() diff --git a/outlay-gtk/src/window.rs b/outlay-gtk/src/window.rs index df988a0..89c4094 100644 --- a/outlay-gtk/src/window.rs +++ b/outlay-gtk/src/window.rs @@ -89,7 +89,8 @@ impl MainWindow { .hscrollbar_policy(gtk::PolicyType::Never) .child(&log_view.container) .build(); - content_stack.add_named(&log_scroll, Some("log")); + log_view.toast_overlay.set_child(Some(&log_scroll)); + content_stack.add_named(&log_view.toast_overlay, Some("log")); // History view let history_view = HistoryView::new(db.clone()); diff --git a/scripts/build-appimage.sh b/scripts/build-appimage.sh index b304e91..13c742a 100755 --- a/scripts/build-appimage.sh +++ b/scripts/build-appimage.sh @@ -13,7 +13,6 @@ echo "==> Creating AppDir structure..." rm -rf AppDir mkdir -p AppDir/usr/bin mkdir -p AppDir/usr/share/applications -mkdir -p AppDir/usr/share/icons/hicolor/scalable/apps mkdir -p AppDir/usr/share/glib-2.0/schemas mkdir -p AppDir/usr/share/fonts/truetype/liberation @@ -21,19 +20,29 @@ mkdir -p AppDir/usr/share/fonts/truetype/liberation cp target/release/outlay-gtk AppDir/usr/bin/ # Copy desktop file -cp outlay-gtk/data/io.github.outlay.desktop AppDir/ -cp outlay-gtk/data/io.github.outlay.desktop AppDir/usr/share/applications/ +cp outlay-gtk/data/com.outlay.app.desktop AppDir/ +cp outlay-gtk/data/com.outlay.app.desktop AppDir/usr/share/applications/ -# Copy app icon -cp outlay-gtk/data/icons/hicolor/scalable/apps/io.github.outlay.svg AppDir/usr/share/icons/hicolor/scalable/apps/ +# Copy app icons (all hicolor sizes) +for size_dir in outlay-gtk/data/icons/hicolor/*/apps; do + size=$(basename "$(dirname "$size_dir")") + mkdir -p "AppDir/usr/share/icons/hicolor/$size/apps" + cp "$size_dir"/com.outlay.app.* "AppDir/usr/share/icons/hicolor/$size/apps/" 2>/dev/null || true +done # Copy Tabler action icons mkdir -p AppDir/usr/share/icons/hicolor/scalable/actions cp outlay-gtk/data/icons/hicolor/scalable/actions/outlay-*.svg AppDir/usr/share/icons/hicolor/scalable/actions/ cp outlay-gtk/data/icons/hicolor/scalable/actions/tabler-*.svg AppDir/usr/share/icons/hicolor/scalable/actions/ +# Copy metainfo and screenshots +mkdir -p AppDir/usr/share/metainfo +cp outlay-gtk/data/com.outlay.app.metainfo.xml AppDir/usr/share/metainfo/ +mkdir -p AppDir/usr/share/screenshots +cp data/screenshots/*.png AppDir/usr/share/screenshots/ + # Copy GSettings schema -cp outlay-gtk/data/io.github.outlay.gschema.xml AppDir/usr/share/glib-2.0/schemas/ +cp outlay-gtk/data/com.outlay.app.gschema.xml AppDir/usr/share/glib-2.0/schemas/ glib-compile-schemas AppDir/usr/share/glib-2.0/schemas/ # Bundle Liberation Sans fonts (needed for PDF report generation) @@ -102,8 +111,8 @@ export DEPLOY_GTK_VERSION=4 --appdir AppDir \ --plugin gtk \ --output appimage \ - --desktop-file AppDir/io.github.outlay.desktop \ - --icon-file AppDir/usr/share/icons/hicolor/scalable/apps/io.github.outlay.svg + --desktop-file AppDir/com.outlay.app.desktop \ + --icon-file AppDir/usr/share/icons/hicolor/256x256/apps/com.outlay.app.png echo "==> Done! AppImage created." ls -lh Outlay-*.AppImage 2>/dev/null || echo "Note: Output filename may vary."