fixed get_atom_property()
This commit is contained in:
parent
e49fdfa5be
commit
b1895bdd07
|
@ -1,10 +1,10 @@
|
||||||
use log::{error, warn};
|
use log::{debug, error, warn};
|
||||||
use num_traits::Zero;
|
use num_traits::Zero;
|
||||||
use std::{ffi::CString, rc::Rc};
|
use std::{ffi::CString, rc::Rc};
|
||||||
|
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
use x11::xlib::{self, Atom, Window, XEvent, XInternAtom, XKeyEvent};
|
use x11::xlib::{self, Atom, Success, Window, XEvent, XInternAtom, XKeyEvent};
|
||||||
|
|
||||||
use crate::backends::{
|
use crate::backends::{
|
||||||
keycodes::KeyOrButton, xlib::keysym::mouse_button_to_xbutton,
|
keycodes::KeyOrButton, xlib::keysym::mouse_button_to_xbutton,
|
||||||
|
@ -290,9 +290,9 @@ impl XLib {
|
||||||
xlib::PropertyNotify => {
|
xlib::PropertyNotify => {
|
||||||
let ev = unsafe { &event.property };
|
let ev = unsafe { &event.property };
|
||||||
|
|
||||||
(ev.atom == self.atoms.net_wm_window_type)
|
match ev.atom {
|
||||||
.then(|| {
|
atom if atom == self.atoms.net_wm_window_type => {
|
||||||
(self
|
if self
|
||||||
.get_atom_property(
|
.get_atom_property(
|
||||||
ev.window,
|
ev.window,
|
||||||
self.atoms.net_wm_state,
|
self.atoms.net_wm_state,
|
||||||
|
@ -300,29 +300,34 @@ impl XLib {
|
||||||
.map(|atom| {
|
.map(|atom| {
|
||||||
*atom == self.atoms.net_wm_state_fullscreen
|
*atom == self.atoms.net_wm_state_fullscreen
|
||||||
})
|
})
|
||||||
== Some(true))
|
.unwrap_or(false)
|
||||||
.then(|| {
|
{
|
||||||
XLibWindowEvent::FullscreenEvent(
|
debug!("fullscreen event");
|
||||||
|
Some(XLibWindowEvent::FullscreenEvent(
|
||||||
FullscreenEvent::new(
|
FullscreenEvent::new(
|
||||||
ev.window,
|
ev.window,
|
||||||
FullscreenState::On,
|
FullscreenState::On,
|
||||||
),
|
),
|
||||||
)
|
))
|
||||||
})
|
} else {
|
||||||
})
|
None
|
||||||
.flatten()
|
}
|
||||||
|
}
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
xlib::ClientMessage => {
|
xlib::ClientMessage => {
|
||||||
let ev = unsafe { &event.client_message };
|
let ev = unsafe { &event.client_message };
|
||||||
|
|
||||||
(ev.message_type == self.atoms.net_wm_state)
|
match ev.message_type {
|
||||||
.then(|| {
|
message_type if message_type == self.atoms.net_wm_state => {
|
||||||
let data = ev.data.as_longs();
|
let data = ev.data.as_longs();
|
||||||
(data[1] as u64 == self.atoms.net_wm_state_fullscreen
|
if data[1] as u64 == self.atoms.net_wm_state_fullscreen
|
||||||
|| data[2] as u64
|
|| data[2] as u64
|
||||||
== self.atoms.net_wm_state_fullscreen)
|
== self.atoms.net_wm_state_fullscreen
|
||||||
.then(|| {
|
{
|
||||||
XLibWindowEvent::FullscreenEvent(
|
debug!("fullscreen event");
|
||||||
|
Some(XLibWindowEvent::FullscreenEvent(
|
||||||
FullscreenEvent::new(
|
FullscreenEvent::new(
|
||||||
ev.window,
|
ev.window,
|
||||||
match data[0] /* as u64 */ {
|
match data[0] /* as u64 */ {
|
||||||
|
@ -334,10 +339,13 @@ impl XLib {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
))
|
||||||
})
|
} else {
|
||||||
})
|
None
|
||||||
.flatten()
|
}
|
||||||
|
}
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
|
@ -387,9 +395,11 @@ impl XLib {
|
||||||
&mut dl0,
|
&mut dl0,
|
||||||
&mut dl1,
|
&mut dl1,
|
||||||
ptr as *mut _ as *mut _,
|
ptr as *mut _ as *mut _,
|
||||||
) != 0
|
) == Success.into()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
debug!("get_atom_property: {} {:?}", success, atom_out);
|
||||||
|
|
||||||
success.then(|| atom_out).flatten()
|
success.then(|| atom_out).flatten()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1071,6 +1081,7 @@ pub mod xpointer {
|
||||||
use x11::xlib::XFree;
|
use x11::xlib::XFree;
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct XPointer<T>(NonNull<T>);
|
pub struct XPointer<T>(NonNull<T>);
|
||||||
|
|
||||||
impl<T> XPointer<T> {
|
impl<T> XPointer<T> {
|
||||||
|
|
|
@ -31,7 +31,7 @@ fn init_logger() {
|
||||||
Root::builder()
|
Root::builder()
|
||||||
.appender("stdout")
|
.appender("stdout")
|
||||||
//.appender("logfile")
|
//.appender("logfile")
|
||||||
.build(log::LevelFilter::Info),
|
.build(log::LevelFilter::Debug),
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue