Replace all futures::executor::block_on with tokio equivalent

This commit is contained in:
Ottatop 2024-01-25 20:14:20 -06:00
parent e6bdb01757
commit a41517101e
7 changed files with 64 additions and 54 deletions

View file

@ -8,9 +8,7 @@
//! methods for setting key- and mousebinds, changing xkeyboard settings, and more. //! methods for setting key- and mousebinds, changing xkeyboard settings, and more.
//! View the struct's documentation for more information. //! View the struct's documentation for more information.
use futures::{ use futures::{channel::mpsc::UnboundedSender, future::BoxFuture, FutureExt, StreamExt};
channel::mpsc::UnboundedSender, executor::block_on, future::BoxFuture, FutureExt, StreamExt,
};
use num_enum::TryFromPrimitive; use num_enum::TryFromPrimitive;
use pinnacle_api_defs::pinnacle::input::{ use pinnacle_api_defs::pinnacle::input::{
self, self,
@ -24,6 +22,8 @@ use pinnacle_api_defs::pinnacle::input::{
use tonic::transport::Channel; use tonic::transport::Channel;
use xkbcommon::xkb::Keysym; use xkbcommon::xkb::Keysym;
use crate::block_on_tokio;
use self::libinput::LibinputSetting; use self::libinput::LibinputSetting;
pub mod libinput; pub mod libinput;
@ -259,7 +259,7 @@ impl Input {
pub fn set_xkb_config(&self, xkb_config: XkbConfig) { pub fn set_xkb_config(&self, xkb_config: XkbConfig) {
let mut client = self.create_input_client(); let mut client = self.create_input_client();
block_on(client.set_xkb_config(SetXkbConfigRequest { block_on_tokio(client.set_xkb_config(SetXkbConfigRequest {
rules: xkb_config.rules.map(String::from), rules: xkb_config.rules.map(String::from),
variant: xkb_config.variant.map(String::from), variant: xkb_config.variant.map(String::from),
layout: xkb_config.layout.map(String::from), layout: xkb_config.layout.map(String::from),
@ -286,7 +286,7 @@ impl Input {
pub fn set_repeat_rate(&self, rate: i32, delay: i32) { pub fn set_repeat_rate(&self, rate: i32, delay: i32) {
let mut client = self.create_input_client(); let mut client = self.create_input_client();
block_on(client.set_repeat_rate(SetRepeatRateRequest { block_on_tokio(client.set_repeat_rate(SetRepeatRateRequest {
rate: Some(rate), rate: Some(rate),
delay: Some(delay), delay: Some(delay),
})) }))
@ -343,7 +343,7 @@ impl Input {
LibinputSetting::Tap(enable) => Setting::Tap(enable), LibinputSetting::Tap(enable) => Setting::Tap(enable),
}; };
block_on(client.set_libinput_setting(SetLibinputSettingRequest { block_on_tokio(client.set_libinput_setting(SetLibinputSettingRequest {
setting: Some(setting), setting: Some(setting),
})) }))
.unwrap(); .unwrap();

View file

@ -82,7 +82,8 @@
use std::sync::OnceLock; use std::sync::OnceLock;
use futures::{ use futures::{
channel::mpsc::UnboundedReceiver, future::BoxFuture, stream::FuturesUnordered, StreamExt, channel::mpsc::UnboundedReceiver, future::BoxFuture, stream::FuturesUnordered, Future,
StreamExt,
}; };
use input::Input; use input::Input;
use output::Output; use output::Output;
@ -202,3 +203,11 @@ pub async fn listen(fut_recv: UnboundedReceiver<BoxFuture<'static, ()>>) {
} }
} }
} }
/// Block on a future using the current Tokio runtime.
pub(crate) fn block_on_tokio<F: Future>(future: F) -> F::Output {
tokio::task::block_in_place(|| {
let handle = tokio::runtime::Handle::current();
handle.block_on(future)
})
}

View file

@ -9,9 +9,7 @@
//! This module provides [`Output`], which allows you to get [`OutputHandle`]s for different //! This module provides [`Output`], which allows you to get [`OutputHandle`]s for different
//! connected monitors and set them up. //! connected monitors and set them up.
use futures::{ use futures::{channel::mpsc::UnboundedSender, future::BoxFuture, FutureExt, StreamExt};
channel::mpsc::UnboundedSender, executor::block_on, future::BoxFuture, FutureExt, StreamExt,
};
use pinnacle_api_defs::pinnacle::{ use pinnacle_api_defs::pinnacle::{
output::{ output::{
self, self,
@ -23,7 +21,7 @@ use pinnacle_api_defs::pinnacle::{
}; };
use tonic::transport::Channel; use tonic::transport::Channel;
use crate::tag::TagHandle; use crate::{block_on_tokio, tag::TagHandle};
/// A struct that allows you to get handles to connected outputs and set them up. /// A struct that allows you to get handles to connected outputs and set them up.
/// ///
@ -63,7 +61,7 @@ impl Output {
pub fn get_all(&self) -> impl Iterator<Item = OutputHandle> { pub fn get_all(&self) -> impl Iterator<Item = OutputHandle> {
let mut client = self.create_output_client(); let mut client = self.create_output_client();
let tag_client = self.create_tag_client(); let tag_client = self.create_tag_client();
block_on(client.get(output::v0alpha1::GetRequest {})) block_on_tokio(client.get(output::v0alpha1::GetRequest {}))
.unwrap() .unwrap()
.into_inner() .into_inner()
.output_names .output_names
@ -248,7 +246,7 @@ impl OutputHandle {
/// ``` /// ```
pub fn set_location(&self, x: impl Into<Option<i32>>, y: impl Into<Option<i32>>) { pub fn set_location(&self, x: impl Into<Option<i32>>, y: impl Into<Option<i32>>) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_location(SetLocationRequest { block_on_tokio(client.set_location(SetLocationRequest {
output_name: Some(self.name.clone()), output_name: Some(self.name.clone()),
x: x.into(), x: x.into(),
y: y.into(), y: y.into(),
@ -380,11 +378,11 @@ impl OutputHandle {
/// ``` /// ```
pub fn props(&self) -> OutputProperties { pub fn props(&self) -> OutputProperties {
let mut client = self.client.clone(); let mut client = self.client.clone();
let response = block_on( let response = block_on_tokio(client.get_properties(
client.get_properties(output::v0alpha1::GetPropertiesRequest { output::v0alpha1::GetPropertiesRequest {
output_name: Some(self.name.clone()), output_name: Some(self.name.clone()),
}), },
) ))
.unwrap() .unwrap()
.into_inner(); .into_inner();

View file

@ -6,12 +6,13 @@
//! //!
//! This module provides [`Pinnacle`], which allows you to quit the compositor. //! This module provides [`Pinnacle`], which allows you to quit the compositor.
use futures::executor::block_on;
use pinnacle_api_defs::pinnacle::v0alpha1::{ use pinnacle_api_defs::pinnacle::v0alpha1::{
pinnacle_service_client::PinnacleServiceClient, QuitRequest, pinnacle_service_client::PinnacleServiceClient, QuitRequest,
}; };
use tonic::transport::Channel; use tonic::transport::Channel;
use crate::block_on_tokio;
/// A struct that allows you to quit the compositor. /// A struct that allows you to quit the compositor.
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct Pinnacle { pub struct Pinnacle {
@ -37,6 +38,6 @@ impl Pinnacle {
/// ``` /// ```
pub fn quit(&self) { pub fn quit(&self) {
let mut client = self.create_pinnacle_client(); let mut client = self.create_pinnacle_client();
block_on(client.quit(QuitRequest {})).unwrap(); block_on_tokio(client.quit(QuitRequest {})).unwrap();
} }
} }

View file

@ -7,14 +7,14 @@
//! This module provides [`Process`], which allows you to spawn processes and set environment //! This module provides [`Process`], which allows you to spawn processes and set environment
//! variables. //! variables.
use futures::{ use futures::{channel::mpsc::UnboundedSender, future::BoxFuture, FutureExt, StreamExt};
channel::mpsc::UnboundedSender, executor::block_on, future::BoxFuture, FutureExt, StreamExt,
};
use pinnacle_api_defs::pinnacle::process::v0alpha1::{ use pinnacle_api_defs::pinnacle::process::v0alpha1::{
process_service_client::ProcessServiceClient, SetEnvRequest, SpawnRequest, process_service_client::ProcessServiceClient, SetEnvRequest, SpawnRequest,
}; };
use tonic::transport::Channel; use tonic::transport::Channel;
use crate::block_on_tokio;
/// A struct containing methods to spawn processes with optional callbacks and set environment /// A struct containing methods to spawn processes with optional callbacks and set environment
/// variables. /// variables.
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -173,7 +173,7 @@ impl Process {
let mut client = self.create_process_client(); let mut client = self.create_process_client();
block_on(client.set_env(SetEnvRequest { block_on_tokio(client.set_env(SetEnvRequest {
key: Some(key), key: Some(key),
value: Some(value), value: Some(value),
})) }))

View file

@ -34,7 +34,7 @@ use std::{
sync::{Arc, Mutex}, sync::{Arc, Mutex},
}; };
use futures::{channel::mpsc::UnboundedSender, executor::block_on, future::BoxFuture}; use futures::{channel::mpsc::UnboundedSender, future::BoxFuture};
use num_enum::TryFromPrimitive; use num_enum::TryFromPrimitive;
use pinnacle_api_defs::pinnacle::{ use pinnacle_api_defs::pinnacle::{
output::v0alpha1::output_service_client::OutputServiceClient, output::v0alpha1::output_service_client::OutputServiceClient,
@ -48,7 +48,10 @@ use pinnacle_api_defs::pinnacle::{
}; };
use tonic::transport::Channel; use tonic::transport::Channel;
use crate::output::{Output, OutputHandle}; use crate::{
block_on_tokio,
output::{Output, OutputHandle},
};
/// A struct that allows you to add and remove tags and get [`TagHandle`]s. /// A struct that allows you to add and remove tags and get [`TagHandle`]s.
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
@ -99,7 +102,7 @@ impl Tag {
let tag_names = tag_names.into_iter().map(Into::into).collect(); let tag_names = tag_names.into_iter().map(Into::into).collect();
let response = block_on(client.add(AddRequest { let response = block_on_tokio(client.add(AddRequest {
output_name: Some(output.name.clone()), output_name: Some(output.name.clone()),
tag_names, tag_names,
})) }))
@ -124,7 +127,7 @@ impl Tag {
let mut client = self.create_tag_client(); let mut client = self.create_tag_client();
let output_client = self.create_output_client(); let output_client = self.create_output_client();
let response = block_on(client.get(tag::v0alpha1::GetRequest {})) let response = block_on_tokio(client.get(tag::v0alpha1::GetRequest {}))
.unwrap() .unwrap()
.into_inner(); .into_inner();
@ -201,7 +204,7 @@ impl Tag {
let mut client = self.create_tag_client(); let mut client = self.create_tag_client();
block_on(client.remove(RemoveRequest { tag_ids })).unwrap(); block_on_tokio(client.remove(RemoveRequest { tag_ids })).unwrap();
} }
/// Create a [`LayoutCycler`] to cycle layouts on outputs. /// Create a [`LayoutCycler`] to cycle layouts on outputs.
@ -386,7 +389,7 @@ impl TagHandle {
/// ``` /// ```
pub fn switch_to(&self) { pub fn switch_to(&self) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.switch_to(SwitchToRequest { block_on_tokio(client.switch_to(SwitchToRequest {
tag_id: Some(self.id), tag_id: Some(self.id),
})) }))
.unwrap(); .unwrap();
@ -412,7 +415,7 @@ impl TagHandle {
/// ``` /// ```
pub fn set_active(&self, set: bool) { pub fn set_active(&self, set: bool) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_active(SetActiveRequest { block_on_tokio(client.set_active(SetActiveRequest {
tag_id: Some(self.id), tag_id: Some(self.id),
set_or_toggle: Some(tag::v0alpha1::set_active_request::SetOrToggle::Set(set)), set_or_toggle: Some(tag::v0alpha1::set_active_request::SetOrToggle::Set(set)),
})) }))
@ -440,7 +443,7 @@ impl TagHandle {
/// ``` /// ```
pub fn toggle_active(&self) { pub fn toggle_active(&self) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_active(SetActiveRequest { block_on_tokio(client.set_active(SetActiveRequest {
tag_id: Some(self.id), tag_id: Some(self.id),
set_or_toggle: Some(tag::v0alpha1::set_active_request::SetOrToggle::Toggle(())), set_or_toggle: Some(tag::v0alpha1::set_active_request::SetOrToggle::Toggle(())),
})) }))
@ -461,7 +464,7 @@ impl TagHandle {
/// // "DP-1" now only has tags "1" and "Buckle" /// // "DP-1" now only has tags "1" and "Buckle"
/// ``` /// ```
pub fn remove(mut self) { pub fn remove(mut self) {
block_on(self.client.remove(RemoveRequest { block_on_tokio(self.client.remove(RemoveRequest {
tag_ids: vec![self.id], tag_ids: vec![self.id],
})) }))
.unwrap(); .unwrap();
@ -485,7 +488,7 @@ impl TagHandle {
/// ``` /// ```
pub fn set_layout(&self, layout: Layout) { pub fn set_layout(&self, layout: Layout) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_layout(SetLayoutRequest { block_on_tokio(client.set_layout(SetLayoutRequest {
tag_id: Some(self.id), tag_id: Some(self.id),
layout: Some(layout as i32), layout: Some(layout as i32),
})) }))
@ -509,7 +512,7 @@ impl TagHandle {
let mut client = self.client.clone(); let mut client = self.client.clone();
let output_client = self.output_client.clone(); let output_client = self.output_client.clone();
let response = block_on(client.get_properties(tag::v0alpha1::GetPropertiesRequest { let response = block_on_tokio(client.get_properties(tag::v0alpha1::GetPropertiesRequest {
tag_id: Some(self.id), tag_id: Some(self.id),
})) }))
.unwrap() .unwrap()

View file

@ -12,7 +12,6 @@
//! //!
//! This module also allows you to set window rules; see the [rules] module for more information. //! This module also allows you to set window rules; see the [rules] module for more information.
use futures::executor::block_on;
use num_enum::TryFromPrimitive; use num_enum::TryFromPrimitive;
use pinnacle_api_defs::pinnacle::{ use pinnacle_api_defs::pinnacle::{
output::v0alpha1::output_service_client::OutputServiceClient, output::v0alpha1::output_service_client::OutputServiceClient,
@ -31,7 +30,7 @@ use pinnacle_api_defs::pinnacle::{
}; };
use tonic::transport::Channel; use tonic::transport::Channel;
use crate::{input::MouseButton, tag::TagHandle, util::Geometry}; use crate::{block_on_tokio, input::MouseButton, tag::TagHandle, util::Geometry};
use self::rules::{WindowRule, WindowRuleCondition}; use self::rules::{WindowRule, WindowRuleCondition};
@ -81,7 +80,7 @@ impl Window {
/// ``` /// ```
pub fn begin_move(&self, button: MouseButton) { pub fn begin_move(&self, button: MouseButton) {
let mut client = self.create_window_client(); let mut client = self.create_window_client();
block_on(client.move_grab(MoveGrabRequest { block_on_tokio(client.move_grab(MoveGrabRequest {
button: Some(button as u32), button: Some(button as u32),
})) }))
.unwrap(); .unwrap();
@ -106,7 +105,7 @@ impl Window {
/// ``` /// ```
pub fn begin_resize(&self, button: MouseButton) { pub fn begin_resize(&self, button: MouseButton) {
let mut client = self.create_window_client(); let mut client = self.create_window_client();
block_on(client.resize_grab(ResizeGrabRequest { block_on_tokio(client.resize_grab(ResizeGrabRequest {
button: Some(button as u32), button: Some(button as u32),
})) }))
.unwrap(); .unwrap();
@ -123,7 +122,7 @@ impl Window {
let mut client = self.create_window_client(); let mut client = self.create_window_client();
let tag_client = self.create_tag_client(); let tag_client = self.create_tag_client();
let output_client = self.create_output_client(); let output_client = self.create_output_client();
block_on(client.get(GetRequest {})) block_on_tokio(client.get(GetRequest {}))
.unwrap() .unwrap()
.into_inner() .into_inner()
.window_ids .window_ids
@ -157,7 +156,7 @@ impl Window {
pub fn add_window_rule(&self, cond: WindowRuleCondition, rule: WindowRule) { pub fn add_window_rule(&self, cond: WindowRuleCondition, rule: WindowRule) {
let mut client = self.create_window_client(); let mut client = self.create_window_client();
block_on(client.add_window_rule(AddWindowRuleRequest { block_on_tokio(client.add_window_rule(AddWindowRuleRequest {
cond: Some(cond.0), cond: Some(cond.0),
rule: Some(rule.0), rule: Some(rule.0),
})) }))
@ -236,7 +235,7 @@ impl WindowHandle {
/// window.get_focused()?.close() /// window.get_focused()?.close()
/// ``` /// ```
pub fn close(mut self) { pub fn close(mut self) {
block_on(self.client.close(CloseRequest { block_on_tokio(self.client.close(CloseRequest {
window_id: Some(self.id), window_id: Some(self.id),
})) }))
.unwrap(); .unwrap();
@ -254,7 +253,7 @@ impl WindowHandle {
/// ``` /// ```
pub fn set_fullscreen(&self, set: bool) { pub fn set_fullscreen(&self, set: bool) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_fullscreen(SetFullscreenRequest { block_on_tokio(client.set_fullscreen(SetFullscreenRequest {
window_id: Some(self.id), window_id: Some(self.id),
set_or_toggle: Some(window::v0alpha1::set_fullscreen_request::SetOrToggle::Set( set_or_toggle: Some(window::v0alpha1::set_fullscreen_request::SetOrToggle::Set(
set, set,
@ -275,7 +274,7 @@ impl WindowHandle {
/// ``` /// ```
pub fn toggle_fullscreen(&self) { pub fn toggle_fullscreen(&self) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_fullscreen(SetFullscreenRequest { block_on_tokio(client.set_fullscreen(SetFullscreenRequest {
window_id: Some(self.id), window_id: Some(self.id),
set_or_toggle: Some(window::v0alpha1::set_fullscreen_request::SetOrToggle::Toggle(())), set_or_toggle: Some(window::v0alpha1::set_fullscreen_request::SetOrToggle::Toggle(())),
})) }))
@ -294,7 +293,7 @@ impl WindowHandle {
/// ``` /// ```
pub fn set_maximized(&self, set: bool) { pub fn set_maximized(&self, set: bool) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_maximized(SetMaximizedRequest { block_on_tokio(client.set_maximized(SetMaximizedRequest {
window_id: Some(self.id), window_id: Some(self.id),
set_or_toggle: Some(window::v0alpha1::set_maximized_request::SetOrToggle::Set( set_or_toggle: Some(window::v0alpha1::set_maximized_request::SetOrToggle::Set(
set, set,
@ -315,7 +314,7 @@ impl WindowHandle {
/// ``` /// ```
pub fn toggle_maximized(&self) { pub fn toggle_maximized(&self) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_maximized(SetMaximizedRequest { block_on_tokio(client.set_maximized(SetMaximizedRequest {
window_id: Some(self.id), window_id: Some(self.id),
set_or_toggle: Some(window::v0alpha1::set_maximized_request::SetOrToggle::Toggle(())), set_or_toggle: Some(window::v0alpha1::set_maximized_request::SetOrToggle::Toggle(())),
})) }))
@ -337,7 +336,7 @@ impl WindowHandle {
/// ``` /// ```
pub fn set_floating(&self, set: bool) { pub fn set_floating(&self, set: bool) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_floating(SetFloatingRequest { block_on_tokio(client.set_floating(SetFloatingRequest {
window_id: Some(self.id), window_id: Some(self.id),
set_or_toggle: Some(window::v0alpha1::set_floating_request::SetOrToggle::Set( set_or_toggle: Some(window::v0alpha1::set_floating_request::SetOrToggle::Set(
set, set,
@ -361,7 +360,7 @@ impl WindowHandle {
/// ``` /// ```
pub fn toggle_floating(&self) { pub fn toggle_floating(&self) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_floating(SetFloatingRequest { block_on_tokio(client.set_floating(SetFloatingRequest {
window_id: Some(self.id), window_id: Some(self.id),
set_or_toggle: Some(window::v0alpha1::set_floating_request::SetOrToggle::Toggle( set_or_toggle: Some(window::v0alpha1::set_floating_request::SetOrToggle::Toggle(
(), (),
@ -384,7 +383,7 @@ impl WindowHandle {
pub fn move_to_tag(&self, tag: &TagHandle) { pub fn move_to_tag(&self, tag: &TagHandle) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.move_to_tag(MoveToTagRequest { block_on_tokio(client.move_to_tag(MoveToTagRequest {
window_id: Some(self.id), window_id: Some(self.id),
tag_id: Some(tag.id), tag_id: Some(tag.id),
})) }))
@ -405,7 +404,7 @@ impl WindowHandle {
pub fn set_tag(&self, tag: &TagHandle, set: bool) { pub fn set_tag(&self, tag: &TagHandle, set: bool) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_tag(SetTagRequest { block_on_tokio(client.set_tag(SetTagRequest {
window_id: Some(self.id), window_id: Some(self.id),
tag_id: Some(tag.id), tag_id: Some(tag.id),
set_or_toggle: Some(window::v0alpha1::set_tag_request::SetOrToggle::Set(set)), set_or_toggle: Some(window::v0alpha1::set_tag_request::SetOrToggle::Set(set)),
@ -429,7 +428,7 @@ impl WindowHandle {
pub fn toggle_tag(&self, tag: &TagHandle) { pub fn toggle_tag(&self, tag: &TagHandle) {
let mut client = self.client.clone(); let mut client = self.client.clone();
block_on(client.set_tag(SetTagRequest { block_on_tokio(client.set_tag(SetTagRequest {
window_id: Some(self.id), window_id: Some(self.id),
tag_id: Some(tag.id), tag_id: Some(tag.id),
set_or_toggle: Some(window::v0alpha1::set_tag_request::SetOrToggle::Toggle(())), set_or_toggle: Some(window::v0alpha1::set_tag_request::SetOrToggle::Toggle(())),
@ -457,11 +456,11 @@ impl WindowHandle {
pub fn props(&self) -> WindowProperties { pub fn props(&self) -> WindowProperties {
let mut client = self.client.clone(); let mut client = self.client.clone();
let tag_client = self.tag_client.clone(); let tag_client = self.tag_client.clone();
let response = block_on( let response = block_on_tokio(client.get_properties(
client.get_properties(window::v0alpha1::GetPropertiesRequest { window::v0alpha1::GetPropertiesRequest {
window_id: Some(self.id), window_id: Some(self.id),
}), },
) ))
.unwrap() .unwrap()
.into_inner(); .into_inner();