merge workspace and workspaceDTO
This commit is contained in:
parent
58ef623f7c
commit
d37ef516f3
3 changed files with 17 additions and 23 deletions
|
|
@ -1,12 +1,12 @@
|
||||||
import "package:flight/src/rust/api/workspace_api.dart";
|
import "package:flight/src/rust/api/workspace_api.dart";
|
||||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
|
|
||||||
class WorkspacesController extends StreamNotifier<List<List<WorkspaceDto>>> {
|
class WorkspacesController extends StreamNotifier<List<List<Workspace>>> {
|
||||||
@override
|
@override
|
||||||
Stream<List<List<WorkspaceDto>>> build() => listenWorkspaces();
|
Stream<List<List<Workspace>>> build() => listenWorkspaces();
|
||||||
|
|
||||||
static final provider =
|
static final provider =
|
||||||
StreamNotifierProvider<WorkspacesController, List<List<WorkspaceDto>>>(
|
StreamNotifierProvider<WorkspacesController, List<List<Workspace>>>(
|
||||||
WorkspacesController.new,
|
WorkspacesController.new,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,21 +8,22 @@ use wayland_protocols::ext::workspace::v1::client::{
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct WorkspaceDto {
|
pub struct Workspace {
|
||||||
pub activated: bool,
|
pub activated: bool,
|
||||||
pub id: u32,
|
pub id: u32,
|
||||||
|
pub coords: Option<(u8, u8)>,
|
||||||
pub handle: RustAutoOpaqueNom<ExtWorkspaceHandleV1>,
|
pub handle: RustAutoOpaqueNom<ExtWorkspaceHandleV1>,
|
||||||
pub manager_handle: RustAutoOpaqueNom<ExtWorkspaceManagerV1>,
|
pub manager_handle: RustAutoOpaqueNom<ExtWorkspaceManagerV1>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WorkspaceDto {
|
impl Workspace {
|
||||||
pub fn activate(&self) {
|
pub fn activate(&self) {
|
||||||
self.handle.try_read().unwrap().clone().activate();
|
self.handle.try_read().unwrap().clone().activate();
|
||||||
self.manager_handle.try_read().unwrap().clone().commit();
|
self.manager_handle.try_read().unwrap().clone().commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn listen_workspaces(sink: StreamSink<Vec<Vec<WorkspaceDto>>>) -> Result<()> {
|
pub fn listen_workspaces(sink: StreamSink<Vec<Vec<Workspace>>>) -> Result<()> {
|
||||||
std::thread::spawn(move || {
|
std::thread::spawn(move || {
|
||||||
let conn = Connection::connect_to_env().expect("Failed to connect to Wayland");
|
let conn = Connection::connect_to_env().expect("Failed to connect to Wayland");
|
||||||
|
|
||||||
|
|
@ -44,5 +45,5 @@ pub fn listen_workspaces(sink: StreamSink<Vec<Vec<WorkspaceDto>>>) -> Result<()>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(()) // Return struct with stream?bb
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 std::collections::HashMap;
|
||||||
|
|
||||||
use flutter_rust_bridge::RustAutoOpaqueNom;
|
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,
|
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 struct AppState {
|
||||||
pub workspaces: HashMap<u32, Workspace>,
|
pub workspaces: HashMap<u32, Workspace>,
|
||||||
pub workspace_group: HashMap<u32, u32>,
|
pub workspace_group: HashMap<u32, u32>,
|
||||||
pub sink: StreamSink<Vec<Vec<WorkspaceDto>>>,
|
pub sink: StreamSink<Vec<Vec<Workspace>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AppState {
|
impl AppState {
|
||||||
|
|
@ -43,11 +38,11 @@ impl AppState {
|
||||||
.map(|(_, mut entries)| {
|
.map(|(_, mut entries)| {
|
||||||
entries.sort_by_key(|(_, value)| value.coords);
|
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();
|
.collect();
|
||||||
|
|
||||||
let _ = self.sink.add(result);
|
self.sink.add(result).expect("Updating stream failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,12 +87,10 @@ impl Dispatch<ext_workspace_manager_v1::ExtWorkspaceManagerV1, ()> for AppState
|
||||||
state.workspaces.insert(
|
state.workspaces.insert(
|
||||||
workspace.id().protocol_id().clone(),
|
workspace.id().protocol_id().clone(),
|
||||||
Workspace {
|
Workspace {
|
||||||
dto: WorkspaceDto {
|
activated: false,
|
||||||
activated: false,
|
id: workspace.id().protocol_id(),
|
||||||
id: workspace.id().protocol_id(),
|
handle: RustAutoOpaqueNom::new(workspace.clone()),
|
||||||
handle: RustAutoOpaqueNom::new(workspace.clone()),
|
manager_handle: RustAutoOpaqueNom::new(proxy.clone()),
|
||||||
manager_handle: RustAutoOpaqueNom::new(proxy.clone()),
|
|
||||||
},
|
|
||||||
coords: None,
|
coords: None,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -155,7 +148,7 @@ impl Dispatch<ext_workspace_handle_v1::ExtWorkspaceHandleV1, ()> for AppState {
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Some(ws) = state.workspaces.get_mut(&id.protocol_id()) {
|
if let Some(ws) = state.workspaces.get_mut(&id.protocol_id()) {
|
||||||
ws.dto.activated = active;
|
ws.activated = active;
|
||||||
}
|
}
|
||||||
|
|
||||||
state.emit();
|
state.emit();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue