16 Commits

Author SHA1 Message Date
e9beaf3d80 correctly load terminal selection settings 2024-08-04 21:07:11 +02:00
56acda7aae add actual settings that get saved (not yet loaded) 2024-08-04 19:50:00 +02:00
308374396b add settings loading 2024-07-28 14:53:38 +02:00
d036368dd0 Add basic ui implementation for settings to select terminal 2024-07-23 14:24:22 +02:00
3b9efb6963 change setting global css to remove deprication warning 2024-07-23 12:18:35 +02:00
81a0099663 bump relm version to 0.9.0 2024-07-23 12:14:44 +02:00
Hannes Kuchelmeister
dc44d223b2 Merge pull request #50 from 13hannes11/49-add-multi-architecture-build
Add multiarchitecutre build
2024-07-16 23:34:41 +02:00
5e28d5cb6a only do one arch build 2024-07-16 23:02:41 +02:00
a1c22fa714 update cache key 2024-07-16 22:33:34 +02:00
14d948cfa3 change artifact names based on matrix 2024-07-16 22:32:02 +02:00
Hannes Kuchelmeister
ce85300e1c Update pre-release.yml 2024-07-16 22:25:04 +02:00
112cc6607c add arch64 architecture 2024-07-16 22:20:34 +02:00
Hannes Kuchelmeister
7fa5e2bf03 Merge pull request #46 from 13hannes11/feature/update-llvm-version
Update llvm version in flatak manifest files
2024-07-16 08:34:09 +02:00
Hannes Kuchelmeister
e9a1428084 Add building of all flatpak manifest targets (closes #48) 2024-07-16 08:18:08 +02:00
Hannes Kuchelmeister
0412bcd0f8 align build options in with flathub manifest and remove env options and other parameters causing issues 2024-07-16 08:03:15 +02:00
7987aeed8f update llvm version in flatak manifest files 2024-07-14 01:17:22 +02:00
12 changed files with 400 additions and 314 deletions

View File

@@ -8,25 +8,46 @@ name: build-and-prerelease
jobs:
flatpak:
name: Flatpak-prerelease
name: "Flatpak"
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-46
options: --privileged
strategy:
matrix:
target: [ToolboxTuner, ToolboxTuner.Devel, ToolboxTuner.Screenshot]
arch: [x86_64]
include:
- target: ToolboxTuner.Devel
arch: aarch64
# Don't fail the whole workflow if one architecture fails
fail-fast: false
steps:
- uses: actions/checkout@v4
with:
lfs: true
# Docker is required by the docker/setup-qemu-action which enables emulation
- name: Install deps
if: ${{ matrix.arch != 'x86_64' }}
run: |
dnf -y install docker
- name: Set up QEMU
if: ${{ matrix.arch != 'x86_64' }}
id: qemu
uses: docker/setup-qemu-action@v2
with:
platforms: arm64
- uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v6.3
with:
bundle: toolboxtuner.flatpak
manifest-path: build-aux/org.kuchelmeister.ToolboxTuner.Devel.json
bundle: ${{ matrix.target }}.${{ matrix.arch }}.flatpak
manifest-path: build-aux/org.kuchelmeister.${{ matrix.target }}.json
run-tests: true
cache-key: flatpak-builder-${{ github.sha }}
upload-artifact: false
arch: ${{ matrix.arch }}
- uses: actions/upload-artifact@v4
with:
name: flatpak
name: flatpak-release-${{ matrix.target }}-${{ matrix.arch }}
path: |
*.flatpak
vendor:
@@ -61,7 +82,7 @@ jobs:
automatic_release_tag: dev
title: 'Latest Development Build'
files: |
**/*.flatpak
**/*.Devel.*.flatpak
**/*.tar.gz
**/*.sha256sum

490
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -12,7 +12,7 @@ lto = true
gettext-rs = { version = "0.7", features = ["gettext-system"] }
tracing = "0.1"
tracing-subscriber = "0.3"
relm4 = { version = "0.8.1", features = ["libadwaita", "gnome_46", "macros"] }
relm4-icons = { version = "0.8.1" }
relm4 = { version = "0.9", features = ["libadwaita", "gnome_46", "macros"] }
relm4-icons = { version = "0.9" }
serde = { version = "1.0.199", features = ["derive"] }
serde_json = "1.0.116"

View File

@@ -5,7 +5,7 @@
"sdk" : "org.gnome.Sdk",
"sdk-extensions" : [
"org.freedesktop.Sdk.Extension.rust-stable",
"org.freedesktop.Sdk.Extension.llvm15"
"org.freedesktop.Sdk.Extension.llvm18"
],
"command" : "toolbox-tuner",
"finish-args" : [
@@ -19,18 +19,10 @@
"--share=ipc"
],
"build-options" : {
"append-path" : "/usr/lib/sdk/rust-stable/bin:/usr/lib/sdk/llvm15/bin",
"prepend-ld-library-path" : "/usr/lib/sdk/llvm15/lib",
"append-path" : "/usr/lib/sdk/rust-stable/bin",
"build-args" : [
"--share=network"
],
"env" : {
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER" : "clang",
"CARGO_REGISTRIES_CRATES_IO_PROTOCOL" : "sparse",
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS" : "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold",
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER" : "clang",
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS" : "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold"
},
"test-args" : [
"--socket=x11",
"--share=network"

View File

@@ -5,7 +5,7 @@
"sdk" : "org.gnome.Sdk",
"sdk-extensions" : [
"org.freedesktop.Sdk.Extension.rust-stable",
"org.freedesktop.Sdk.Extension.llvm15"
"org.freedesktop.Sdk.Extension.llvm18"
],
"command" : "toolbox-tuner",
"finish-args" : [
@@ -19,18 +19,10 @@
"--share=ipc"
],
"build-options" : {
"append-path" : "/usr/lib/sdk/rust-stable/bin:/usr/lib/sdk/llvm15/bin",
"prepend-ld-library-path" : "/usr/lib/sdk/llvm15/lib",
"append-path" : "/usr/lib/sdk/rust-stable/bin",
"build-args" : [
"--share=network"
],
"env" : {
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER" : "clang",
"CARGO_REGISTRIES_CRATES_IO_PROTOCOL" : "sparse",
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS" : "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold",
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER" : "clang",
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS" : "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold"
},
"test-args" : [
"--socket=x11",
"--share=network"

View File

@@ -5,7 +5,7 @@
"sdk" : "org.gnome.Sdk",
"sdk-extensions" : [
"org.freedesktop.Sdk.Extension.rust-stable",
"org.freedesktop.Sdk.Extension.llvm15"
"org.freedesktop.Sdk.Extension.llvm18"
],
"command" : "toolbox-tuner",
"finish-args" : [
@@ -16,18 +16,10 @@
"--talk-name=org.freedesktop.Flatpak"
],
"build-options" : {
"append-path" : "/usr/lib/sdk/rust-stable/bin:/usr/lib/sdk/llvm15/bin",
"prepend-ld-library-path" : "/usr/lib/sdk/llvm15/lib",
"append-path" : "/usr/lib/sdk/rust-stable/bin",
"build-args" : [
"--share=network"
],
"env" : {
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER" : "clang",
"CARGO_REGISTRIES_CRATES_IO_PROTOCOL" : "sparse",
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS" : "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold",
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER" : "clang",
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS" : "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold"
},
"test-args" : [
"--socket=x11",
"--share=network"

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
<schema path="/org/kuchelmeister/ToolboxTuner/" id="@app-id@" gettext-domain="@gettext-package@">
<key name="window-width" type="i">
@@ -13,5 +13,10 @@
<default>false</default>
<summary>Window maximized state</summary>
</key>
<key name="terminal" type="s">
<default>""</default>
<summary>Terminal to use</summary>
</key>
</schema>
</schemalist>

View File

@@ -2,6 +2,7 @@ use crate::gtk::Align;
use crate::util::prerequisit::get_installed_terminals;
use crate::util::prerequisit::is_toolbox_installed;
use crate::modals::settings::SettingsMsg;
use crate::util::toolbox::ToolbxContainer;
use relm4::adw::prelude::PreferencesGroupExt;
use relm4::factory::FactoryHashMap;
@@ -20,6 +21,7 @@ use crate::config::{APP_ID, PROFILE};
use crate::factories::container_list::Container;
use crate::factories::container_list::ContainerStatus;
use crate::modals::about::AboutDialog;
use crate::modals::settings::SettingsDialog;
use crate::modals::unsupported::UnsupportedDialog;
use crate::modals::unsupported::UnsupportedDialogOutput;
use crate::util::toolbox::ToolbxStatus;
@@ -29,6 +31,7 @@ use gtk::prelude::{
use gtk::{gio, glib};
pub(super) struct App {
settings_dialog: Controller<SettingsDialog>,
unsupported_dialog: Controller<UnsupportedDialog>,
about_dialog: Controller<AboutDialog>,
containers: FactoryHashMap<String, Container>,
@@ -48,7 +51,7 @@ pub(super) enum AppCommandMsg {
}
relm4::new_action_group!(pub(super) WindowActionGroup, "win");
//relm4::new_stateless_action!(PreferencesAction, WindowActionGroup, "preferences");
relm4::new_stateless_action!(PreferencesAction, WindowActionGroup, "preferences");
relm4::new_stateless_action!(pub(super) ShortcutsAction, WindowActionGroup, "show-help-overlay");
relm4::new_stateless_action!(AboutAction, WindowActionGroup, "about");
use crate::factories::container_list::ContainerInit;
@@ -64,7 +67,7 @@ impl Component for App {
menu! {
primary_menu: {
section! {
//"_Preferences" => PreferencesAction,
"_Preferences" => PreferencesAction,
"_Keyboard" => ShortcutsAction,
"_About Toolbox Tuner" => AboutAction,
}
@@ -148,6 +151,11 @@ impl Component for App {
.launch(())
.detach();
let settings_dialog = SettingsDialog::builder()
.transient_for(&root)
.launch(())
.detach();
let unsupported_dialog = UnsupportedDialog::builder()
.transient_for(&root)
.launch(())
@@ -158,6 +166,7 @@ impl Component for App {
let containers = FactoryHashMap::builder().launch_default().detach();
let model = Self {
settings_dialog,
about_dialog,
unsupported_dialog,
containers,
@@ -169,6 +178,13 @@ impl Component for App {
let mut actions = RelmActionGroup::<WindowActionGroup>::new();
let preference_action = {
let settings = model.settings_dialog.sender().clone();
RelmAction::<PreferencesAction>::new_stateless(move |_| {
settings.send(SettingsMsg::OpenSettings).unwrap();
})
};
let shortcuts_action = {
let shortcuts = widgets.shortcuts.clone();
RelmAction::<ShortcutsAction>::new_stateless(move |_| {
@@ -189,12 +205,12 @@ impl Component for App {
AppCommandMsg::PrerequisitsInstalled(terminals.len() > 0 && toolbox_installed)
});
actions.add_action(preference_action);
actions.add_action(shortcuts_action);
actions.add_action(about_action);
actions.register_for_widget(&widgets.main_window);
widgets.load_window_size();
ComponentParts { model, widgets }
}

View File

@@ -63,6 +63,6 @@ fn main() {
gio::ResourceLookupFlags::NONE,
)
.unwrap();
app.set_global_css(&glib::GString::from_utf8_checked(data.to_vec()).unwrap());
relm4::set_global_css(&glib::GString::from_utf8_checked(data.to_vec()).unwrap());
app.visible_on_activate(false).run::<App>(());
}

View File

@@ -1,2 +1,3 @@
pub mod about;
pub mod settings;
pub mod unsupported;

117
src/modals/settings.rs Normal file
View File

@@ -0,0 +1,117 @@
use crate::util::prerequisit::get_installed_terminals;
use relm4::adw::prelude::{
ComboRowExt, PreferencesGroupExt, PreferencesPageExt, PreferencesRowExt, PreferencesWindowExt,
};
use relm4::gtk::prelude::Cast;
use relm4::gtk::prelude::GtkWindowExt;
use relm4::gtk::prelude::ListModelExt;
use relm4::gtk::prelude::WidgetExt;
use relm4::view;
use relm4::{adw, gtk, ComponentParts, ComponentSender, SimpleComponent};
pub struct SettingsDialog {
hidden: bool,
terminal: String,
}
use crate::APP_ID;
use gtk::gio;
use relm4::gtk::prelude::CastNone;
use relm4::gtk::prelude::SettingsExt;
#[derive(Debug)]
pub enum SettingsMsg {
OpenSettings,
TerminalSelectionChanged(String),
}
impl SimpleComponent for SettingsDialog {
type Init = ();
type Widgets = adw::PreferencesWindow;
type Input = SettingsMsg;
type Output = ();
type Root = adw::PreferencesWindow;
fn init_root() -> Self::Root {
adw::PreferencesWindow::new()
}
fn init(
_: Self::Init,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let model = Self {
hidden: true,
terminal: "".to_string(),
};
let terminal_selection_model = gtk::gio::ListStore::new::<gtk::StringObject>();
let sort_function = |to_insert: &gtk::glib::Object,
existing: &gtk::glib::Object|
-> std::cmp::Ordering { to_insert.cmp(existing) };
let terminals = get_installed_terminals().unwrap_or_default();
terminals.iter().for_each(|t| {
terminal_selection_model.insert_sorted(
&gtk::StringObject::new(format!("{:?}", t).as_str()),
&sort_function,
);
});
let settings = gio::Settings::new(APP_ID);
let terminal = settings.string("terminal");
println!("{}", terminal);
let terminal_selection = terminal_selection_model
.find_with_equal_func(|obj| {
gtk::StringObject::new(terminal.as_str()).string()
== obj.downcast_ref::<gtk::StringObject>().unwrap().string()
})
.unwrap_or(0);
println!("{}", terminal_selection);
let str_object: String = terminal_selection_model
.item(terminal_selection)
.and_downcast::<gtk::StringObject>()
.expect("The item has to be an `StringObject`.")
.into();
sender.input(SettingsMsg::TerminalSelectionChanged(str_object));
view! {
widgets = root.clone() {
add = &adw::PreferencesPage::new() {
add = &adw::PreferencesGroup::new() {
set_title: "Terminal settings",
add = &adw::ComboRow::new() {
set_title: "Terminal",
#[wrap(Some)]
set_model = &gtk::SingleSelection::new(Some(terminal_selection_model)),
#[watch]
set_selected: terminal_selection,
connect_selected_item_notify[sender] => move |combo_row| {
let str_object: String = combo_row.selected_item().and_downcast::<gtk::StringObject>().expect("The item has to be an `StringObject`.").into();
sender.input(SettingsMsg::TerminalSelectionChanged(str_object));
},
},
},
},
}
}
ComponentParts { model, widgets }
}
fn update_view(&self, dialog: &mut Self::Widgets, _sender: ComponentSender<Self>) {
dialog.show();
}
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
match msg {
SettingsMsg::OpenSettings => {}
SettingsMsg::TerminalSelectionChanged(terminal) => {
let settings = gio::Settings::new(APP_ID);
settings.set_string("terminal", &terminal);
}
}
}
}

View File

@@ -1,8 +1,10 @@
use crate::util::toolbox::ToolbxError;
use std::process::Command;
#[derive(Debug)]
pub enum TerminalType {
GnomeTerminal,
Konsole,
}
pub fn get_installed_terminals() -> Result<Vec<TerminalType>, ToolbxError> {
@@ -20,7 +22,7 @@ pub fn get_installed_terminals() -> Result<Vec<TerminalType>, ToolbxError> {
let output = output.unwrap();
if output.status.code() == Some(0) {
Ok(vec![TerminalType::GnomeTerminal])
Ok(vec![TerminalType::GnomeTerminal, TerminalType::Konsole])
} else {
Err(ToolbxError::CommandUnsuccessfulError(
String::from_utf8_lossy(&output.stderr).into_owned(),