diff --git a/lib/controllers/workspaces_controller.dart b/lib/controllers/workspaces_controller.dart index a53d67e..3a9b145 100644 --- a/lib/controllers/workspaces_controller.dart +++ b/lib/controllers/workspaces_controller.dart @@ -1,12 +1,12 @@ import "package:flight/src/rust/api/workspace_api.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; -class WorkspacesController extends StreamNotifier>> { +class WorkspacesController extends StreamNotifier>> { @override - Stream>> build() => listenWorkspaces(); + Stream>> build() => listenWorkspaces(); static final provider = - StreamNotifierProvider>>( + StreamNotifierProvider>>( WorkspacesController.new, ); } diff --git a/rust/src/api/workspace_api.rs b/rust/src/api/workspace_api.rs index f5668c3..4ddf2f7 100644 --- a/rust/src/api/workspace_api.rs +++ b/rust/src/api/workspace_api.rs @@ -8,21 +8,22 @@ use wayland_protocols::ext::workspace::v1::client::{ }; #[derive(Clone)] -pub struct WorkspaceDto { +pub struct Workspace { pub activated: bool, pub id: u32, + pub coords: Option<(u8, u8)>, pub handle: RustAutoOpaqueNom, pub manager_handle: RustAutoOpaqueNom, } -impl WorkspaceDto { +impl Workspace { pub fn activate(&self) { self.handle.try_read().unwrap().clone().activate(); self.manager_handle.try_read().unwrap().clone().commit(); } } -pub fn listen_workspaces(sink: StreamSink>>) -> Result<()> { +pub fn listen_workspaces(sink: StreamSink>>) -> Result<()> { std::thread::spawn(move || { let conn = Connection::connect_to_env().expect("Failed to connect to Wayland"); @@ -44,5 +45,5 @@ pub fn listen_workspaces(sink: StreamSink>>) -> Result<()> } }); - Ok(()) // Return struct with stream?bb + Ok(()) } diff --git a/rust/src/internal/wayland.rs b/rust/src/internal/wayland.rs index e297d55..3871180 100644 --- a/rust/src/internal/wayland.rs +++ b/rust/src/internal/wayland.rs @@ -1,4 +1,4 @@ -use crate::{frb_generated::StreamSink, workspace_api::WorkspaceDto}; +use crate::{frb_generated::StreamSink, workspace_api::Workspace}; use std::collections::HashMap; use flutter_rust_bridge::RustAutoOpaqueNom; @@ -10,15 +10,10 @@ use wayland_protocols::ext::workspace::v1::client::{ ext_workspace_group_handle_v1, ext_workspace_handle_v1, ext_workspace_manager_v1, }; -pub struct Workspace { - pub dto: WorkspaceDto, - pub coords: Option<(u8, u8)>, -} - pub struct AppState { pub workspaces: HashMap, pub workspace_group: HashMap, - pub sink: StreamSink>>, + pub sink: StreamSink>>, } impl AppState { @@ -43,11 +38,11 @@ impl AppState { .map(|(_, mut entries)| { entries.sort_by_key(|(_, value)| value.coords); - entries.into_iter().map(|(_, ws)| ws.dto.clone()).collect() + entries.into_iter().map(|(_, ws)| ws.clone()).collect() }) .collect(); - let _ = self.sink.add(result); + self.sink.add(result).expect("Updating stream failed"); } } @@ -92,12 +87,10 @@ impl Dispatch for AppState state.workspaces.insert( workspace.id().protocol_id().clone(), Workspace { - dto: WorkspaceDto { - activated: false, - id: workspace.id().protocol_id(), - handle: RustAutoOpaqueNom::new(workspace.clone()), - manager_handle: RustAutoOpaqueNom::new(proxy.clone()), - }, + activated: false, + id: workspace.id().protocol_id(), + handle: RustAutoOpaqueNom::new(workspace.clone()), + manager_handle: RustAutoOpaqueNom::new(proxy.clone()), coords: None, }, ); @@ -155,7 +148,7 @@ impl Dispatch for AppState { ); if let Some(ws) = state.workspaces.get_mut(&id.protocol_id()) { - ws.dto.activated = active; + ws.activated = active; } state.emit();