Fix build on wayland and no display backend

This commit is contained in:
elkowar 2021-07-23 15:19:16 +02:00
parent cff2f6beb8
commit 186c284a1a
No known key found for this signature in database
GPG key ID: E321AD71B1D1F27F
4 changed files with 118 additions and 98 deletions

View file

@ -348,6 +348,7 @@ fn initialize_window(
}
/// Apply the provided window-positioning rules to the window.
#[cfg(feature = "x11")]
fn apply_window_position(
mut window_geometry: WindowGeometry,
monitor_geometry: gdk::Rectangle,

View file

@ -2,27 +2,27 @@ pub use platform::*;
#[cfg(feature = "no-x11-wayland")]
mod platform {
use crate::config::{EwwWindowDefinition, StrutDefinition, WindowStacking};
use anyhow::*;
use gtk::{self, prelude::*};
use crate::config::EwwWindowDefinition;
pub fn initialize_window(window_def: &EwwWindowDefinition, _monitor: gdk::Rectangle) -> Option<gtk::Window> {
pub fn initialize_window(_window_def: &EwwWindowDefinition, _monitor: gdk::Rectangle) -> Option<gtk::Window> {
Some(gtk::Window::new(gtk::WindowType::Toplevel))
}
}
#[cfg(feature = "wayland")]
mod platform {
use crate::config::{AnchorAlignment, EwwWindowDefinition, WindowStacking};
use gdk;
use gtk::prelude::*;
use yuck::config::{window_definition::WindowStacking, window_geometry::AnchorAlignment};
use crate::config::EwwWindowDefinition;
pub fn initialize_window(window_def: &EwwWindowDefinition, monitor: gdk::Rectangle) -> Option<gtk::Window> {
let window = gtk::Window::new(gtk::WindowType::Toplevel);
// Initialising a layer shell surface
gtk_layer_shell::init_for_window(&window);
// Sets the monitor where the surface is shown
match window_def.screen_number {
match window_def.monitor_number {
Some(index) => {
if let Some(monitor) = gdk::Display::get_default().expect("could not get default display").get_monitor(index) {
gtk_layer_shell::set_monitor(&window, &monitor);

View file

@ -6,6 +6,12 @@ edition = "2018"
build = "build.rs"
[features]
default = ["x11"]
x11 = []
wayland = []
no-x11-wayland = []
[dependencies]
lalrpop-util = "0.19.5"
regex = "1"

View file

@ -12,21 +12,25 @@ use eww_shared_util::Span;
use super::{attributes::Attributes, window_definition::EnumParseError};
pub type BackendWindowOptions = X11WindowOptions;
pub use backend::*;
#[cfg(feature = "x11")]
mod backend {
use super::*;
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize)]
pub struct X11WindowOptions {
pub struct BackendWindowOptions {
pub wm_ignore: bool,
pub sticky: bool,
pub window_type: WindowType,
pub struts: StrutDefinition,
}
impl X11WindowOptions {
impl BackendWindowOptions {
pub fn from_attrs(attrs: &mut Attributes) -> AstResult<Self> {
let struts = attrs.ast_optional("reserve")?;
let window_type = attrs.primitive_optional("windowtype")?;
Ok(X11WindowOptions {
Ok(Self {
wm_ignore: attrs.primitive_optional("wm-ignore")?.unwrap_or(window_type.is_none() && struts.is_none()),
window_type: window_type.unwrap_or_default(),
sticky: attrs.primitive_optional("sticky")?.unwrap_or(true),
@ -97,25 +101,34 @@ impl FromAstElementContent for StrutDefinition {
Ok(StrutDefinition { side: attrs.primitive_required("side")?, dist: attrs.primitive_required("distance")? })
}
}
}
#[cfg(feature = "wayland")]
mod backend {
use super::*;
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize)]
pub struct WaylandWindowOptions {
pub struct BackendWindowOptions {
pub exclusive: bool,
pub focusable: bool,
}
impl WaylandWindowOptions {
impl BackendWindowOptions {
pub fn from_attrs(attrs: &mut Attributes) -> AstResult<Self> {
Ok(WaylandWindowOptions {
Ok(Self {
exclusive: attrs.primitive_optional("exclusive")?.unwrap_or(false),
focusable: attrs.primitive_optional("focusable")?.unwrap_or(false),
})
}
}
}
#[cfg(feature = "no-x11-wayland")]
mod backend {
use super::*;
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize)]
pub struct NoBackendWindowOptions;
impl NoBackendWindowOptions {
pub fn from_attrs(attrs: &mut Attributes) -> Result<Self> {
Ok(NoBackendWindowOptions)
pub struct BackendWindowOptions;
impl BackendWindowOptions {
pub fn from_attrs(attrs: &mut Attributes) -> AstResult<Self> {
Ok(Self)
}
}
}