add wayland target and rename gnome target
It should be possible to build both Wayland (sans D-Bus) and GNOME versions simultaneously. Add a Wayland target, and, for consistency, rename the GNOME target.
This commit is contained in:
parent
379ac88a5a
commit
57c9d39293
3 changed files with 74 additions and 0 deletions
|
|
@ -24,3 +24,11 @@ zbus = { version = "4.4.0", default-features = false, features = ["tokio"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
bindgen = "0.69.4"
|
bindgen = "0.69.4"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "ufkbd-gnome"
|
||||||
|
path = "src/ufkbd_gnome.rs"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "ufkbd-wl"
|
||||||
|
path = "src/ufkbd_wl.rs"
|
||||||
|
|
|
||||||
66
src/ufkbd_wl.rs
Normal file
66
src/ufkbd_wl.rs
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024, Richard Acayan. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
mod core;
|
||||||
|
mod wayland;
|
||||||
|
|
||||||
|
use crate::core::Layout;
|
||||||
|
use crate::wayland::Dispatcher;
|
||||||
|
use polling::Event;
|
||||||
|
use polling::Events;
|
||||||
|
use polling::Poller;
|
||||||
|
use std::path::Path;
|
||||||
|
use std::time::Instant;
|
||||||
|
use wayland_client::globals;
|
||||||
|
|
||||||
|
pub struct VisibilityManager();
|
||||||
|
|
||||||
|
impl VisibilityManager {
|
||||||
|
pub fn set_visible(&self, _visible: bool)
|
||||||
|
{
|
||||||
|
unreachable!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main()
|
||||||
|
{
|
||||||
|
let conn = wayland_client::Connection::connect_to_env().unwrap();
|
||||||
|
|
||||||
|
let (globals, mut queue) = globals::registry_queue_init::<Dispatcher>(&conn)
|
||||||
|
.expect("Registry required");
|
||||||
|
|
||||||
|
let layouts = Path::new("/usr/share/unfettered-keyboard/layouts");
|
||||||
|
let layout = Layout::load(layouts, "latn_qwerty_us.xml")
|
||||||
|
.expect("Layout should be loadable");
|
||||||
|
let mut dispatcher = Dispatcher::new(layout, queue.handle(), &globals).unwrap();
|
||||||
|
|
||||||
|
let wl_evt = Event::readable(0);
|
||||||
|
|
||||||
|
let mut events = Events::new();
|
||||||
|
let poller = Poller::new().unwrap();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
conn.flush().unwrap();
|
||||||
|
|
||||||
|
let guard = queue.prepare_read().unwrap();
|
||||||
|
let fd = guard.connection_fd();
|
||||||
|
let timer = dispatcher.button().next_time().map(|t| t - Instant::now());
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
poller.add(&fd, wl_evt).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
events.clear();
|
||||||
|
poller.wait(&mut events, timer).unwrap();
|
||||||
|
poller.delete(fd).unwrap();
|
||||||
|
|
||||||
|
if !events.is_empty() {
|
||||||
|
guard.read().unwrap();
|
||||||
|
queue.dispatch_pending(&mut dispatcher).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatcher.dispatch_timers();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue