From 1ac913d5c45d27db6e6510dec4704a7d2cde21f4 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 25 Jan 2022 20:47:32 +0100 Subject: [PATCH] feat!(ccs): Replace `run` function with `AppRunner` trait --- .../component-system/examples/basic/main.rs | 10 +++++---- crates/component-system/src/app_runner.rs | 22 +++++++++++++++++++ crates/component-system/src/lib.rs | 12 ++-------- 3 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 crates/component-system/src/app_runner.rs diff --git a/crates/component-system/examples/basic/main.rs b/crates/component-system/examples/basic/main.rs index b551cabe..ca8582f7 100644 --- a/crates/component-system/examples/basic/main.rs +++ b/crates/component-system/examples/basic/main.rs @@ -6,10 +6,12 @@ extern crate cosmic_component_system as ccs; mod components; use self::components::App; -use ccs::Component; +use ccs::{AppRunner, Component}; fn main() { - ccs::run(|app| { - App::default().register(app); - }); + gtk4::builders::ApplicationBuilder::new() + .application_id("org.pop.CosmicComponentExample") + .cosmic_run(|app| { + App::default().register(app); + }); } diff --git a/crates/component-system/src/app_runner.rs b/crates/component-system/src/app_runner.rs new file mode 100644 index 00000000..7b75a2ad --- /dev/null +++ b/crates/component-system/src/app_runner.rs @@ -0,0 +1,22 @@ +// Copyright 2022 System76 +// SPDX-License-Identifier: MPL-2.0 + +use gtk4::prelude::{ApplicationExt, ApplicationExtManual}; + +pub trait AppRunner { + /// Convenience method to activates and run a GTK4 application. + fn cosmic_run(self, func: F); +} + +impl AppRunner for gtk4::Application { + fn cosmic_run(self, func: F) { + self.connect_activate(move |app| func(app.clone())); + self.run(); + } +} + +impl AppRunner for gtk4::builders::ApplicationBuilder { + fn cosmic_run(self, func: F) { + self.build().cosmic_run(func); + } +} diff --git a/crates/component-system/src/lib.rs b/crates/component-system/src/lib.rs index 86d97e5a..3cbc4696 100644 --- a/crates/component-system/src/lib.rs +++ b/crates/component-system/src/lib.rs @@ -1,11 +1,13 @@ // Copyright 2022 System76 // SPDX-License-Identifier: MPL-2.0 +mod app_runner; mod macros; use gtk4::prelude::*; use tokio::sync::mpsc; +pub use self::app_runner::AppRunner; pub use gtk4 as gtk; pub use relm4_macros::view; @@ -198,16 +200,6 @@ pub fn forward O) + 'static>( }) } -/// Convenience function for launching an application. -pub fn run(func: F) { - use gtk4::prelude::*; - let app = gtk4::Application::new(None, Default::default()); - - app.connect_activate(move |app| func(app.clone())); - - app.run(); -} - /// Convenience function for spawning tasks on the local executor pub fn spawn_local + 'static>(func: F) { gtk4::glib::MainContext::default().spawn_local(func);