add virtualkey action for modular button
This commit is contained in:
@@ -17,6 +17,7 @@ use crate::{
|
|||||||
task::{ColorChannel, SystemTask, TaskType},
|
task::{ColorChannel, SystemTask, TaskType},
|
||||||
},
|
},
|
||||||
config::{save_layout, save_settings, AStrSetExt},
|
config::{save_layout, save_settings, AStrSetExt},
|
||||||
|
hid::VirtualKey,
|
||||||
overlays::{
|
overlays::{
|
||||||
toast::{Toast, ToastTopic},
|
toast::{Toast, ToastTopic},
|
||||||
watch::WATCH_NAME,
|
watch::WATCH_NAME,
|
||||||
@@ -26,6 +27,12 @@ use crate::{
|
|||||||
|
|
||||||
use super::{ExecArgs, ModularControl, ModularData};
|
use super::{ExecArgs, ModularControl, ModularData};
|
||||||
|
|
||||||
|
#[derive(Deserialize, Clone)]
|
||||||
|
pub enum PressRelease {
|
||||||
|
Release,
|
||||||
|
Press,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Clone, Copy)]
|
#[derive(Deserialize, Clone, Copy)]
|
||||||
pub enum ViewAngleKind {
|
pub enum ViewAngleKind {
|
||||||
/// The cosine of the angle at which the watch becomes fully transparent
|
/// The cosine of the angle at which the watch becomes fully transparent
|
||||||
@@ -116,6 +123,10 @@ pub enum ButtonAction {
|
|||||||
command: ExecArgs,
|
command: ExecArgs,
|
||||||
toast: Option<Arc<str>>,
|
toast: Option<Arc<str>>,
|
||||||
},
|
},
|
||||||
|
VirtualKey {
|
||||||
|
keycode: VirtualKey,
|
||||||
|
action: PressRelease,
|
||||||
|
},
|
||||||
Watch {
|
Watch {
|
||||||
action: WatchAction,
|
action: WatchAction,
|
||||||
},
|
},
|
||||||
@@ -316,6 +327,9 @@ fn handle_action(action: &ButtonAction, press: &mut PressData, app: &mut AppStat
|
|||||||
ButtonAction::Watch { action } => run_watch(action, app),
|
ButtonAction::Watch { action } => run_watch(action, app),
|
||||||
ButtonAction::Overlay { target, action } => run_overlay(target, action, app),
|
ButtonAction::Overlay { target, action } => run_overlay(target, action, app),
|
||||||
ButtonAction::Window { target, action } => run_window(target, action, app),
|
ButtonAction::Window { target, action } => run_window(target, action, app),
|
||||||
|
ButtonAction::VirtualKey { keycode, action } => app
|
||||||
|
.hid_provider
|
||||||
|
.send_key(*keycode, matches!(*action, PressRelease::Press)),
|
||||||
ButtonAction::Toast {
|
ButtonAction::Toast {
|
||||||
message,
|
message,
|
||||||
body,
|
body,
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use input_linux::{
|
|||||||
};
|
};
|
||||||
use libc::{input_event, timeval};
|
use libc::{input_event, timeval};
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
|
use serde::Deserialize;
|
||||||
use std::mem::transmute;
|
use std::mem::transmute;
|
||||||
use std::{fs::File, sync::atomic::AtomicBool};
|
use std::{fs::File, sync::atomic::AtomicBool};
|
||||||
use strum::{EnumIter, EnumString, IntoEnumIterator};
|
use strum::{EnumIter, EnumString, IntoEnumIterator};
|
||||||
@@ -316,7 +317,7 @@ pub const META: KeyModifier = 0x80;
|
|||||||
|
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
#[repr(u16)]
|
#[repr(u16)]
|
||||||
#[derive(Debug, PartialEq, Clone, Copy, IntegerId, EnumString, EnumIter)]
|
#[derive(Debug, Deserialize, PartialEq, Clone, Copy, IntegerId, EnumString, EnumIter)]
|
||||||
pub enum VirtualKey {
|
pub enum VirtualKey {
|
||||||
Escape = 9,
|
Escape = 9,
|
||||||
N1, // number row
|
N1, // number row
|
||||||
|
|||||||
Reference in New Issue
Block a user