@@ -255,7 +255,7 @@ pub enum Decorations {
}
/// What window controls this platform supports
-#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Default)]
+#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
pub struct WindowControls {
/// Whether this platform supports fullscreen
pub fullscreen: bool,
@@ -267,6 +267,18 @@ pub struct WindowControls {
pub window_menu: bool,
}
+impl Default for WindowControls {
+ fn default() -> Self {
+ // Assume that we can do anything, unless told otherwise
+ Self {
+ fullscreen: true,
+ maximize: true,
+ minimize: true,
+ window_menu: true,
+ }
+ }
+}
+
/// A type to describe which sides of the window are currently tiled in some way
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Default)]
pub struct Tiling {
@@ -355,12 +367,7 @@ pub(crate) trait PlatformWindow: HasWindowHandle + HasDisplayHandle {
}
fn set_app_id(&mut self, _app_id: &str) {}
fn window_controls(&self) -> WindowControls {
- WindowControls {
- fullscreen: true,
- maximize: true,
- minimize: true,
- window_menu: false,
- }
+ WindowControls::default()
}
fn set_client_inset(&self, _inset: Pixels) {}
fn gpu_specs(&self) -> Option<GPUSpecs>;
@@ -185,13 +185,7 @@ impl WaylandWindowState {
active: false,
hovered: false,
in_progress_window_controls: None,
- // Assume that we can do anything, unless told otherwise
- window_controls: WindowControls {
- fullscreen: true,
- maximize: true,
- minimize: true,
- window_menu: true,
- },
+ window_controls: WindowControls::default(),
inset: None,
})
}
@@ -1230,6 +1230,14 @@ impl PlatformWindow for X11Window {
fn show_window_menu(&self, position: Point<Pixels>) {
let state = self.0.state.borrow();
+
+ self.0
+ .xcb_connection
+ .ungrab_pointer(x11rb::CURRENT_TIME)
+ .unwrap()
+ .check()
+ .unwrap();
+
let coords = self.get_root_position(position);
let message = ClientMessageEvent::new(
32,