cargo fmt

This commit is contained in:
Shawn Wallace 2026-01-18 14:43:48 -05:00
parent 1979beaa39
commit 64c70be855
11 changed files with 110 additions and 75 deletions

View file

@ -4,7 +4,7 @@ pub mod xstate;
use crate::server::{NoConnection, PendingSurfaceState, ServerState}; use crate::server::{NoConnection, PendingSurfaceState, ServerState};
use crate::xstate::{RealConnection, XState}; use crate::xstate::{RealConnection, XState};
use log::{error, info}; use log::{error, info};
use rustix::event::{poll, PollFd, PollFlags, Timespec}; use rustix::event::{PollFd, PollFlags, Timespec, poll};
use server::selection::{Clipboard, Primary}; use server::selection::{Clipboard, Primary};
use smithay_client_toolkit::data_device_manager::WritePipe; use smithay_client_toolkit::data_device_manager::WritePipe;
use std::io::{BufRead, BufReader, Read, Write}; use std::io::{BufRead, BufReader, Read, Write};

View file

@ -16,7 +16,7 @@ use smithay_client_toolkit::{
selection::PrimarySelectionSourceHandler, selection::PrimarySelectionSourceHandler,
}, },
}; };
use std::sync::{mpsc, Mutex, OnceLock}; use std::sync::{Mutex, OnceLock, mpsc};
use wayland_client::protocol::{ use wayland_client::protocol::{
wl_buffer::WlBuffer, wl_callback::WlCallback, wl_compositor::WlCompositor, wl_buffer::WlBuffer, wl_callback::WlCallback, wl_compositor::WlCompositor,
wl_keyboard::WlKeyboard, wl_output::WlOutput, wl_pointer::WlPointer, wl_region::WlRegion, wl_keyboard::WlKeyboard, wl_output::WlOutput, wl_pointer::WlPointer, wl_region::WlRegion,
@ -25,15 +25,10 @@ use wayland_client::protocol::{
wl_touch::WlTouch, wl_touch::WlTouch,
}; };
use wayland_client::{ use wayland_client::{
delegate_noop, event_created_child, Connection, Dispatch, Proxy, QueueHandle, delegate_noop, event_created_child,
globals::{Global, GlobalList, GlobalListContents}, globals::{Global, GlobalList, GlobalListContents},
Connection, Dispatch, Proxy, QueueHandle,
}; };
use wayland_protocols::{ use wayland_protocols::{
wp::relative_pointer::zv1::client::{
zwp_relative_pointer_manager_v1::ZwpRelativePointerManagerV1,
zwp_relative_pointer_v1::ZwpRelativePointerV1,
},
wp::{ wp::{
fractional_scale::v1::client::{ fractional_scale::v1::client::{
wp_fractional_scale_manager_v1::WpFractionalScaleManagerV1, wp_fractional_scale_manager_v1::WpFractionalScaleManagerV1,
@ -44,6 +39,11 @@ use wayland_protocols::{
zwp_linux_dmabuf_feedback_v1::ZwpLinuxDmabufFeedbackV1 as DmabufFeedback, zwp_linux_dmabuf_feedback_v1::ZwpLinuxDmabufFeedbackV1 as DmabufFeedback,
zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1, zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1,
}, },
linux_drm_syncobj::v1::client::{
wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1,
wp_linux_drm_syncobj_surface_v1::WpLinuxDrmSyncobjSurfaceV1,
wp_linux_drm_syncobj_timeline_v1::WpLinuxDrmSyncobjTimelineV1,
},
pointer_constraints::zv1::client::{ pointer_constraints::zv1::client::{
zwp_confined_pointer_v1::ZwpConfinedPointerV1, zwp_confined_pointer_v1::ZwpConfinedPointerV1,
zwp_locked_pointer_v1::ZwpLockedPointerV1, zwp_locked_pointer_v1::ZwpLockedPointerV1,
@ -54,25 +54,31 @@ use wayland_protocols::{
zwp_primary_selection_device_v1::ZwpPrimarySelectionDeviceV1, zwp_primary_selection_device_v1::ZwpPrimarySelectionDeviceV1,
zwp_primary_selection_source_v1::ZwpPrimarySelectionSourceV1, zwp_primary_selection_source_v1::ZwpPrimarySelectionSourceV1,
}, },
relative_pointer::zv1::client::{
zwp_relative_pointer_manager_v1::ZwpRelativePointerManagerV1,
zwp_relative_pointer_v1::ZwpRelativePointerV1,
},
tablet::zv2::client::{ tablet::zv2::client::{
zwp_tablet_manager_v2::ZwpTabletManagerV2, zwp_tablet_manager_v2::ZwpTabletManagerV2,
zwp_tablet_pad_group_v2::{ZwpTabletPadGroupV2, EVT_RING_OPCODE, EVT_STRIP_OPCODE}, zwp_tablet_pad_group_v2::{EVT_RING_OPCODE, EVT_STRIP_OPCODE, ZwpTabletPadGroupV2},
zwp_tablet_pad_ring_v2::ZwpTabletPadRingV2, zwp_tablet_pad_ring_v2::ZwpTabletPadRingV2,
zwp_tablet_pad_strip_v2::ZwpTabletPadStripV2, zwp_tablet_pad_strip_v2::ZwpTabletPadStripV2,
zwp_tablet_pad_v2::{ZwpTabletPadV2, EVT_GROUP_OPCODE}, zwp_tablet_pad_v2::{EVT_GROUP_OPCODE, ZwpTabletPadV2},
zwp_tablet_seat_v2::{ zwp_tablet_seat_v2::{
ZwpTabletSeatV2, EVT_PAD_ADDED_OPCODE, EVT_TABLET_ADDED_OPCODE, EVT_PAD_ADDED_OPCODE, EVT_TABLET_ADDED_OPCODE, EVT_TOOL_ADDED_OPCODE,
EVT_TOOL_ADDED_OPCODE, ZwpTabletSeatV2,
}, },
zwp_tablet_tool_v2::ZwpTabletToolV2, zwp_tablet_tool_v2::ZwpTabletToolV2,
zwp_tablet_v2::ZwpTabletV2, zwp_tablet_v2::ZwpTabletV2,
}, },
viewporter::client::{wp_viewport::WpViewport, wp_viewporter::WpViewporter}, viewporter::client::{wp_viewport::WpViewport, wp_viewporter::WpViewporter},
}, },
xdg::decoration::zv1::client::zxdg_decoration_manager_v1::ZxdgDecorationManagerV1,
xdg::decoration::zv1::client::zxdg_toplevel_decoration_v1::ZxdgToplevelDecorationV1,
xdg::{ xdg::{
activation::v1::client::xdg_activation_v1::XdgActivationV1, activation::v1::client::xdg_activation_v1::XdgActivationV1,
decoration::zv1::client::{
zxdg_decoration_manager_v1::ZxdgDecorationManagerV1,
zxdg_toplevel_decoration_v1::ZxdgToplevelDecorationV1,
},
shell::client::{ shell::client::{
xdg_popup::XdgPopup, xdg_positioner::XdgPositioner, xdg_surface::XdgSurface, xdg_popup::XdgPopup, xdg_positioner::XdgPositioner, xdg_surface::XdgSurface,
xdg_toplevel::XdgToplevel, xdg_wm_base::XdgWmBase, xdg_toplevel::XdgToplevel, xdg_wm_base::XdgWmBase,
@ -185,6 +191,9 @@ delegate_noop!(MyWorld: ZxdgDecorationManagerV1);
delegate_noop!(MyWorld: WpFractionalScaleManagerV1); delegate_noop!(MyWorld: WpFractionalScaleManagerV1);
delegate_noop!(MyWorld: ZwpPrimarySelectionDeviceManagerV1); delegate_noop!(MyWorld: ZwpPrimarySelectionDeviceManagerV1);
delegate_noop!(MyWorld: WlSubsurface); delegate_noop!(MyWorld: WlSubsurface);
delegate_noop!(MyWorld: WpLinuxDrmSyncobjManagerV1);
delegate_noop!(MyWorld: WpLinuxDrmSyncobjSurfaceV1);
delegate_noop!(MyWorld: WpLinuxDrmSyncobjTimelineV1);
impl Dispatch<WlRegistry, GlobalListContents> for MyWorld { impl Dispatch<WlRegistry, GlobalListContents> for MyWorld {
fn event( fn event(

View file

@ -10,11 +10,11 @@ use std::borrow::Cow;
use std::sync::LazyLock; use std::sync::LazyLock;
use tiny_skia::{Color, Paint, PathBuilder, Pixmap, Stroke, Transform}; use tiny_skia::{Color, Paint, PathBuilder, Pixmap, Stroke, Transform};
use tiny_skia::{ColorU8, Rect}; use tiny_skia::{ColorU8, Rect};
use wayland_client::Proxy;
use wayland_client::protocol::wl_seat::WlSeat; use wayland_client::protocol::wl_seat::WlSeat;
use wayland_client::protocol::wl_shm; use wayland_client::protocol::wl_shm;
use wayland_client::protocol::wl_subsurface::WlSubsurface; use wayland_client::protocol::wl_subsurface::WlSubsurface;
use wayland_client::protocol::wl_surface::WlSurface; use wayland_client::protocol::wl_surface::WlSurface;
use wayland_client::Proxy;
use wayland_protocols::wp::viewporter::client::wp_viewport::WpViewport; use wayland_protocols::wp::viewporter::client::wp_viewport::WpViewport;
use wayland_protocols::xdg::decoration::zv1::client::zxdg_toplevel_decoration_v1::ZxdgToplevelDecorationV1; use wayland_protocols::xdg::decoration::zv1::client::zxdg_toplevel_decoration_v1::ZxdgToplevelDecorationV1;
use wayland_protocols::xdg::shell::client::xdg_toplevel::XdgToplevel; use wayland_protocols::xdg::shell::client::xdg_toplevel::XdgToplevel;

View file

@ -47,6 +47,7 @@ use wayland_protocols::{
}, },
}; };
use wayland_server::{ use wayland_server::{
Dispatch, DisplayHandle, GlobalDispatch, Resource,
protocol::{ protocol::{
wl_buffer::WlBuffer, wl_buffer::WlBuffer,
wl_callback::WlCallback, wl_callback::WlCallback,
@ -61,7 +62,6 @@ use wayland_server::{
wl_surface::WlSurface, wl_surface::WlSurface,
wl_touch::WlTouch, wl_touch::WlTouch,
}, },
Dispatch, DisplayHandle, GlobalDispatch, Resource,
}; };
// noop // noop
@ -1458,7 +1458,9 @@ impl<S: X11Selection> Dispatch<XwaylandSurfaceV1, Entity> for InnerServerState<S
if let Some(win_entity) = win_entity { if let Some(win_entity) = win_entity {
let bundle = state.world.take(win_entity).unwrap(); let bundle = state.world.take(win_entity).unwrap();
if !bundle.has::<x::Window>() { if !bundle.has::<x::Window>() {
warn!("Window with same serial ({serial:?}) as {surface_id} has been destroyed?"); warn!(
"Window with same serial ({serial:?}) as {surface_id} has been destroyed?"
);
return; return;
} }
let mut builder = hecs::EntityBuilder::new(); let mut builder = hecs::EntityBuilder::new();

View file

@ -5,7 +5,7 @@ use hecs::{CommandBuffer, World};
use log::{debug, error, trace, warn}; use log::{debug, error, trace, warn};
use macros::simple_event_shunt; use macros::simple_event_shunt;
use std::os::fd::AsFd; use std::os::fd::AsFd;
use wayland_client::{protocol as client, Proxy}; use wayland_client::{Proxy, protocol as client};
use wayland_protocols::{ use wayland_protocols::{
wp::{ wp::{
fractional_scale::v1::client::wp_fractional_scale_v1, fractional_scale::v1::client::wp_fractional_scale_v1,

View file

@ -8,12 +8,12 @@ mod tests;
use self::event::*; use self::event::*;
use crate::xstate::{Decorations, MoveResizeDirection, WindowDims, WmHints, WmName, WmNormalHints}; use crate::xstate::{Decorations, MoveResizeDirection, WindowDims, WmHints, WmName, WmNormalHints};
use crate::{timespec_from_millis, X11Selection, XConnection}; use crate::{X11Selection, XConnection, timespec_from_millis};
use clientside::MyWorld; use clientside::MyWorld;
use decoration::{DecorationsData, DecorationsDataSatellite}; use decoration::{DecorationsData, DecorationsDataSatellite};
use hecs::Entity; use hecs::Entity;
use log::{debug, error, warn}; use log::{debug, error, warn};
use rustix::event::{poll, PollFd, PollFlags}; use rustix::event::{PollFd, PollFlags, poll};
use rustix::fs::Timespec; use rustix::fs::Timespec;
use smithay_client_toolkit::activation::ActivationState; use smithay_client_toolkit::activation::ActivationState;
use std::collections::{HashMap, HashSet}; use std::collections::{HashMap, HashSet};
@ -23,8 +23,9 @@ use std::os::unix::net::UnixStream;
use std::time::Duration; use std::time::Duration;
use wayland_client::protocol::wl_subcompositor::WlSubcompositor; use wayland_client::protocol::wl_subcompositor::WlSubcompositor;
use wayland_client::{ use wayland_client::{
globals::{registry_queue_init, Global}, Connection, EventQueue, Proxy, QueueHandle,
protocol as client, Connection, EventQueue, Proxy, QueueHandle, globals::{Global, registry_queue_init},
protocol as client,
}; };
use wayland_protocols::xdg::decoration::zv1::client::zxdg_decoration_manager_v1::ZxdgDecorationManagerV1; use wayland_protocols::xdg::decoration::zv1::client::zxdg_decoration_manager_v1::ZxdgDecorationManagerV1;
use wayland_protocols::xdg::decoration::zv1::client::zxdg_toplevel_decoration_v1::{self}; use wayland_protocols::xdg::decoration::zv1::client::zxdg_toplevel_decoration_v1::{self};
@ -62,11 +63,11 @@ use wayland_protocols::{
}; };
use wayland_server::protocol::wl_seat::WlSeat; use wayland_server::protocol::wl_seat::WlSeat;
use wayland_server::{ use wayland_server::{
Client, DisplayHandle, Resource, WEnum,
protocol::{ protocol::{
wl_callback::WlCallback, wl_compositor::WlCompositor, wl_output::WlOutput, wl_shm::WlShm, wl_callback::WlCallback, wl_compositor::WlCompositor, wl_output::WlOutput, wl_shm::WlShm,
wl_surface::WlSurface, wl_surface::WlSurface,
}, },
Client, DisplayHandle, Resource, WEnum,
}; };
use wl_drm::{client::wl_drm::WlDrm as WlDrmClient, server::wl_drm::WlDrm as WlDrmServer}; use wl_drm::{client::wl_drm::WlDrm as WlDrmClient, server::wl_drm::WlDrm as WlDrmServer};
use xcb::x; use xcb::x;
@ -485,7 +486,9 @@ impl<S: X11Selection> ServerState<NoConnection<S>> {
.expect("Could not bind xdg_wm_base"); .expect("Could not bind xdg_wm_base");
if xdg_wm_base.version() < 3 { if xdg_wm_base.version() < 3 {
warn!("xdg_wm_base version 2 detected. Popup repositioning will not work, and some popups may not work correctly."); warn!(
"xdg_wm_base version 2 detected. Popup repositioning will not work, and some popups may not work correctly."
);
} }
let compositor = global_list let compositor = global_list
@ -504,8 +507,13 @@ impl<S: X11Selection> ServerState<NoConnection<S>> {
.bind::<WpViewporter, _, _>(&qh, 1..=1, ()) .bind::<WpViewporter, _, _>(&qh, 1..=1, ())
.expect("Could not bind wp_viewporter"); .expect("Could not bind wp_viewporter");
let fractional_scale = global_list.bind::<WpFractionalScaleManagerV1, _, _>(&qh, 1..=1, ()) let fractional_scale = global_list
.inspect_err(|e| warn!("Couldn't bind fractional scale manager: {e}. Fractional scaling will not work.")) .bind::<WpFractionalScaleManagerV1, _, _>(&qh, 1..=1, ())
.inspect_err(|e| {
warn!(
"Couldn't bind fractional scale manager: {e}. Fractional scaling will not work."
)
})
.ok(); .ok();
let activation_state = ActivationState::bind(&global_list, &qh) let activation_state = ActivationState::bind(&global_list, &qh)
@ -692,7 +700,9 @@ impl<C: XConnection> ServerState<C> {
} }
if mixed_scale { if mixed_scale {
warn!("Mixed output scales detected, choosing to give apps the smallest detected scale ({scale}x)"); warn!(
"Mixed output scales detected, choosing to give apps the smallest detected scale ({scale}x)"
);
} }
debug!("Using new scale {scale}"); debug!("Using new scale {scale}");
@ -730,7 +740,9 @@ impl<C: XConnection> ServerState<C> {
}), }),
) { ) {
Ok(0) => { Ok(0) => {
error!("Failed to flush clientside events (timeout)! Will try again later."); error!(
"Failed to flush clientside events (timeout)! Will try again later."
);
} }
Ok(_) => { Ok(_) => {
self.queue.flush().unwrap(); self.queue.flush().unwrap();
@ -825,7 +837,9 @@ impl<S: X11Selection + 'static> InnerServerState<S> {
let new_title = match &mut win.attrs.title { let new_title = match &mut win.attrs.title {
Some(w) => { Some(w) => {
if matches!(w, WmName::NetWmName(_)) && matches!(name, WmName::WmName(_)) { if matches!(w, WmName::NetWmName(_)) && matches!(name, WmName::WmName(_)) {
debug!("skipping setting window name to {name:?} because a _NET_WM_NAME title is already set"); debug!(
"skipping setting window name to {name:?} because a _NET_WM_NAME title is already set"
);
None None
} else { } else {
debug!("setting {window:?} title to {name:?}"); debug!("setting {window:?} title to {name:?}");

View file

@ -8,13 +8,13 @@ use wayland_client::protocol::wl_seat::WlSeat;
use wayland_client::{Proxy, QueueHandle}; use wayland_client::{Proxy, QueueHandle};
use smithay_client_toolkit::data_device_manager::{ use smithay_client_toolkit::data_device_manager::{
data_device::DataDevice, data_offer::SelectionOffer as WlSelectionOffer, DataDeviceManagerState, data_device::DataDevice,
data_source::CopyPasteSource, DataDeviceManagerState, data_offer::SelectionOffer as WlSelectionOffer, data_source::CopyPasteSource,
}; };
use smithay_client_toolkit::primary_selection::PrimarySelectionManagerState;
use smithay_client_toolkit::primary_selection::device::PrimarySelectionDevice; use smithay_client_toolkit::primary_selection::device::PrimarySelectionDevice;
use smithay_client_toolkit::primary_selection::offer::PrimarySelectionOffer; use smithay_client_toolkit::primary_selection::offer::PrimarySelectionOffer;
use smithay_client_toolkit::primary_selection::selection::PrimarySelectionSource; use smithay_client_toolkit::primary_selection::selection::PrimarySelectionSource;
use smithay_client_toolkit::primary_selection::PrimarySelectionManagerState;
use std::io::Read; use std::io::Read;
use std::rc::{Rc, Weak}; use std::rc::{Rc, Weak};

View file

@ -1,8 +1,8 @@
use super::{selection::Clipboard, InnerServerState, NoConnection, ServerState, WindowDims}; use super::{InnerServerState, NoConnection, ServerState, WindowDims, selection::Clipboard};
use crate::server::selection::{Primary, SelectionType}; use crate::server::selection::{Primary, SelectionType};
use crate::xstate::{SetState, WinSize, WmName}; use crate::xstate::{SetState, WinSize, WmName};
use crate::{timespec_from_millis, XConnection}; use crate::{XConnection, timespec_from_millis};
use rustix::event::{poll, PollFd, PollFlags}; use rustix::event::{PollFd, PollFlags, poll};
use std::collections::HashMap; use std::collections::HashMap;
use std::io::Write; use std::io::Write;
use std::os::fd::{AsRawFd, BorrowedFd}; use std::os::fd::{AsRawFd, BorrowedFd};
@ -10,7 +10,8 @@ use std::os::unix::net::UnixStream;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use testwl::{SendDataForMimeFn, SurfaceRole}; use testwl::{SendDataForMimeFn, SurfaceRole};
use wayland_client::{ use wayland_client::{
backend::{protocol::Message, Backend, ObjectData, ObjectId, WaylandError}, Connection, Proxy, WEnum,
backend::{Backend, ObjectData, ObjectId, WaylandError, protocol::Message},
protocol::{ protocol::{
wl_buffer::WlBuffer, wl_buffer::WlBuffer,
wl_compositor::WlCompositor, wl_compositor::WlCompositor,
@ -25,8 +26,8 @@ use wayland_client::{
wl_surface::WlSurface, wl_surface::WlSurface,
wl_touch::{self, WlTouch}, wl_touch::{self, WlTouch},
}, },
Connection, Proxy, WEnum,
}; };
use wayland_protocols::wp::linux_drm_syncobj::v1::client::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1;
use wayland_protocols::xdg::decoration::zv1::server::zxdg_toplevel_decoration_v1; use wayland_protocols::xdg::decoration::zv1::server::zxdg_toplevel_decoration_v1;
use wayland_protocols::{ use wayland_protocols::{
wp::{ wp::{
@ -39,14 +40,14 @@ use wayland_protocols::{
tablet::zv2::client::{ tablet::zv2::client::{
zwp_tablet_manager_v2::{self, ZwpTabletManagerV2}, zwp_tablet_manager_v2::{self, ZwpTabletManagerV2},
zwp_tablet_pad_group_v2::{ zwp_tablet_pad_group_v2::{
self, ZwpTabletPadGroupV2, EVT_RING_OPCODE, EVT_STRIP_OPCODE, self, EVT_RING_OPCODE, EVT_STRIP_OPCODE, ZwpTabletPadGroupV2,
}, },
zwp_tablet_pad_ring_v2::ZwpTabletPadRingV2, zwp_tablet_pad_ring_v2::ZwpTabletPadRingV2,
zwp_tablet_pad_strip_v2::ZwpTabletPadStripV2, zwp_tablet_pad_strip_v2::ZwpTabletPadStripV2,
zwp_tablet_pad_v2::{self, ZwpTabletPadV2, EVT_GROUP_OPCODE}, zwp_tablet_pad_v2::{self, EVT_GROUP_OPCODE, ZwpTabletPadV2},
zwp_tablet_seat_v2::{ zwp_tablet_seat_v2::{
self, ZwpTabletSeatV2, EVT_PAD_ADDED_OPCODE, EVT_TABLET_ADDED_OPCODE, self, EVT_PAD_ADDED_OPCODE, EVT_TABLET_ADDED_OPCODE, EVT_TOOL_ADDED_OPCODE,
EVT_TOOL_ADDED_OPCODE, ZwpTabletSeatV2,
}, },
zwp_tablet_tool_v2::{self, ZwpTabletToolV2}, zwp_tablet_tool_v2::{self, ZwpTabletToolV2},
zwp_tablet_v2::{self, ZwpTabletV2}, zwp_tablet_v2::{self, ZwpTabletV2},
@ -63,7 +64,7 @@ use wayland_protocols::{
xwayland_shell_v1::XwaylandShellV1, xwayland_surface_v1::XwaylandSurfaceV1, xwayland_shell_v1::XwaylandShellV1, xwayland_surface_v1::XwaylandSurfaceV1,
}, },
}; };
use wayland_server::{protocol as s_proto, Display, Resource}; use wayland_server::{Display, Resource, protocol as s_proto};
use wl_drm::client::wl_drm::WlDrm; use wl_drm::client::wl_drm::WlDrm;
use xcb::x::{self, Window}; use xcb::x::{self, Window};
@ -1097,7 +1098,8 @@ fn pass_through_globals() {
WlDrm, WlDrm,
ZwpPointerConstraintsV1, ZwpPointerConstraintsV1,
XwaylandShellV1, XwaylandShellV1,
ZwpTabletManagerV2 ZwpTabletManagerV2,
WpLinuxDrmSyncobjManagerV1
} }
let mut globals = SupportedGlobals::default(); let mut globals = SupportedGlobals::default();
@ -1222,40 +1224,46 @@ fn fullscreen() {
f.run(); f.run();
let data = f.testwl.get_surface_data(id).unwrap(); let data = f.testwl.get_surface_data(id).unwrap();
assert!(data assert!(
.toplevel() data.toplevel()
.states .states
.contains(&xdg_toplevel::State::Fullscreen)); .contains(&xdg_toplevel::State::Fullscreen)
);
f.satellite.set_fullscreen(win, SetState::Remove); f.satellite.set_fullscreen(win, SetState::Remove);
f.run(); f.run();
f.run(); f.run();
let data = f.testwl.get_surface_data(id).unwrap(); let data = f.testwl.get_surface_data(id).unwrap();
assert!(!data assert!(
!data
.toplevel() .toplevel()
.states .states
.contains(&xdg_toplevel::State::Fullscreen)); .contains(&xdg_toplevel::State::Fullscreen)
);
f.satellite.set_fullscreen(win, SetState::Toggle); f.satellite.set_fullscreen(win, SetState::Toggle);
f.run(); f.run();
f.run(); f.run();
let data = f.testwl.get_surface_data(id).unwrap(); let data = f.testwl.get_surface_data(id).unwrap();
assert!(data assert!(
.toplevel() data.toplevel()
.states .states
.contains(&xdg_toplevel::State::Fullscreen)); .contains(&xdg_toplevel::State::Fullscreen)
);
f.satellite.set_fullscreen(win, SetState::Toggle); f.satellite.set_fullscreen(win, SetState::Toggle);
f.run(); f.run();
f.run(); f.run();
let data = f.testwl.get_surface_data(id).unwrap(); let data = f.testwl.get_surface_data(id).unwrap();
assert!(!data assert!(
!data
.toplevel() .toplevel()
.states .states
.contains(&xdg_toplevel::State::Fullscreen)); .contains(&xdg_toplevel::State::Fullscreen)
);
} }
#[test] #[test]

View file

@ -11,7 +11,7 @@ use std::collections::HashMap;
use std::ffi::CString; use std::ffi::CString;
use std::os::fd::BorrowedFd; use std::os::fd::BorrowedFd;
use std::rc::Rc; use std::rc::Rc;
use xcb::{x, Xid, XidNew}; use xcb::{Xid, XidNew, x};
use xcb_util_cursor::{Cursor, CursorContext}; use xcb_util_cursor::{Cursor, CursorContext};
// Sometimes we'll get events on windows that have already been destroyed // Sometimes we'll get events on windows that have already been destroyed
@ -369,9 +369,9 @@ impl XState {
let attrs = self let attrs = self
.connection .connection
.send_request(&x::GetWindowAttributes { window: e.window() }); .send_request(&x::GetWindowAttributes { window: e.window() });
let geometry = unwrap_or_skip_bad_window_cont!(self let geometry = unwrap_or_skip_bad_window_cont!(
.connection self.connection.wait_for_reply(geometry)
.wait_for_reply(geometry)); );
let attrs = let attrs =
unwrap_or_skip_bad_window_cont!(self.connection.wait_for_reply(attrs)); unwrap_or_skip_bad_window_cont!(self.connection.wait_for_reply(attrs));
@ -400,9 +400,10 @@ impl XState {
value_list: &[x::ConfigWindow::StackMode(x::StackMode::Below)] value_list: &[x::ConfigWindow::StackMode(x::StackMode::Below)]
} }
)); ));
unwrap_or_skip_bad_window_cont!(self unwrap_or_skip_bad_window_cont!(
.connection self.connection
.send_and_check_request(&x::MapWindow { window: e.window() })); .send_and_check_request(&x::MapWindow { window: e.window() })
);
} }
xcb::Event::X(x::Event::MapNotify(e)) => { xcb::Event::X(x::Event::MapNotify(e)) => {
unwrap_or_skip_bad_window_cont!(self.connection.send_and_check_request( unwrap_or_skip_bad_window_cont!(self.connection.send_and_check_request(
@ -1472,9 +1473,10 @@ impl XConnection for RealConnection {
} }
fn unmap_window(&mut self, window: x::Window) { fn unmap_window(&mut self, window: x::Window) {
unwrap_or_skip_bad_window_ret!(self unwrap_or_skip_bad_window_ret!(
.connection self.connection
.send_and_check_request(&x::UnmapWindow { window })); .send_and_check_request(&x::UnmapWindow { window })
);
} }
fn raise_to_top(&mut self, window: x::Window) { fn raise_to_top(&mut self, window: x::Window) {

View file

@ -1,8 +1,8 @@
use super::{get_atom_name, XState}; use super::{XState, get_atom_name};
use crate::server::selection::{Clipboard, ForeignSelection, Primary, SelectionType}; use crate::server::selection::{Clipboard, ForeignSelection, Primary, SelectionType};
use crate::{RealServerState, X11Selection}; use crate::{RealServerState, X11Selection};
use log::{debug, error, warn}; use log::{debug, error, warn};
use rustix::event::{poll, PollFd, PollFlags}; use rustix::event::{PollFd, PollFlags, poll};
use smithay_client_toolkit::data_device_manager::WritePipe; use smithay_client_toolkit::data_device_manager::WritePipe;
use std::cell::RefCell; use std::cell::RefCell;
use std::collections::VecDeque; use std::collections::VecDeque;

View file

@ -1,4 +1,4 @@
use rustix::event::{poll, PollFd, PollFlags}; use rustix::event::{PollFd, PollFlags, poll};
use rustix::process::{Pid, Signal, WaitOptions}; use rustix::process::{Pid, Signal, WaitOptions};
use std::collections::HashMap; use std::collections::HashMap;
use std::io::Write; use std::io::Write;
@ -6,17 +6,17 @@ use std::mem::ManuallyDrop;
use std::os::fd::{AsRawFd, BorrowedFd, OwnedFd}; use std::os::fd::{AsRawFd, BorrowedFd, OwnedFd};
use std::os::unix::net::UnixStream; use std::os::unix::net::UnixStream;
use std::sync::{ use std::sync::{
atomic::{AtomicBool, Ordering},
Arc, Mutex, Once, Arc, Mutex, Once,
atomic::{AtomicBool, Ordering},
}; };
use std::thread::JoinHandle; use std::thread::JoinHandle;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use wayland_protocols::xdg::{ use wayland_protocols::xdg::{
decoration::zv1::server::zxdg_toplevel_decoration_v1, shell::server::xdg_toplevel, decoration::zv1::server::zxdg_toplevel_decoration_v1, shell::server::xdg_toplevel,
}; };
use wayland_server::protocol::{wl_output, wl_pointer};
use wayland_server::Resource; use wayland_server::Resource;
use xcb::{x, Xid}; use wayland_server::protocol::{wl_output, wl_pointer};
use xcb::{Xid, x};
use xwayland_satellite as xwls; use xwayland_satellite as xwls;
use xwayland_satellite::xstate::{MoveResizeDirection, WmSizeHintsFlags, WmState}; use xwayland_satellite::xstate::{MoveResizeDirection, WmSizeHintsFlags, WmState};
use xwls::timespec_from_millis; use xwls::timespec_from_millis;