add virtualkey action for modular button

This commit is contained in:
galister
2024-09-27 02:23:13 +09:00
parent bdbdbea20b
commit 83ae798215
2 changed files with 16 additions and 1 deletions

View File

@@ -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,

View File

@@ -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