@@ -5,12 +5,15 @@ use crate::shell::xdg::window::inner::{
55 determine_decoration_mode, determine_window_state, determine_wm_capabilities, WindowInner ,
66} ;
77use crate :: shell:: xdg:: window:: WindowConfigure ;
8+ use crate :: shell:: xdg:: window:: ToplevelDecorationData ;
89use crate :: shell:: xdg:: Dispatch2 ;
910use crate :: shell:: xdg:: WindowDecorations ;
11+ use crate :: shell:: xdg:: WindowHandler ;
1012use crate :: shell:: WaylandSurface ;
1113use crate :: {
12- compositor:: { Surface , SurfaceData } ,
14+ compositor:: { CompositorHandler , Surface , SurfaceData } ,
1315 globals:: ProvidesBoundGlobal ,
16+ output:: OutputHandler ,
1417} ;
1518use crate :: { error:: GlobalError , shell:: xdg:: XdgShellSurface } ;
1619use std:: num:: NonZeroU32 ;
@@ -77,12 +80,7 @@ impl Dialog {
7780 decorations : WindowDecorations ,
7881 ) -> Result < Self , GlobalError >
7982 where
80- D : Dispatch < wl_surface:: WlSurface , SurfaceData < ( ) > >
81- + Dispatch < xdg_surface:: XdgSurface , DialogData >
82- + Dispatch < xdg_dialog_v1:: XdgDialogV1 , DialogData >
83- + Dispatch < xdg_toplevel:: XdgToplevel , DialogData >
84- + Dispatch < zxdg_toplevel_decoration_v1:: ZxdgToplevelDecorationV1 , DialogData >
85- + ' static ,
83+ D : CompositorHandler + DialogHandler + OutputHandler + WindowHandler + ' static ,
8684 GLOBAL : ProvidesBoundGlobal < xdg_wm_dialog_v1:: XdgWmDialogV1 , 1 >
8785 + ProvidesBoundGlobal < xdg_wm_base:: XdgWmBase , 5 > ,
8886 {
@@ -101,11 +99,7 @@ impl Dialog {
10199 decorations : WindowDecorations ,
102100 ) -> Result < Self , GlobalError >
103101 where
104- D : Dispatch < xdg_surface:: XdgSurface , DialogData >
105- + Dispatch < xdg_dialog_v1:: XdgDialogV1 , DialogData >
106- + Dispatch < xdg_toplevel:: XdgToplevel , DialogData >
107- + Dispatch < zxdg_toplevel_decoration_v1:: ZxdgToplevelDecorationV1 , DialogData >
108- + ' static ,
102+ D : DialogHandler + WindowHandler + ' static ,
109103 GLOBAL : ProvidesBoundGlobal < xdg_wm_dialog_v1:: XdgWmDialogV1 , 1 >
110104 + ProvidesBoundGlobal < xdg_wm_base:: XdgWmBase , 5 > ,
111105 {
@@ -159,7 +153,7 @@ impl Dialog {
159153 pub fn from_toplevel_decoration (
160154 decoration : & zxdg_toplevel_decoration_v1:: ZxdgToplevelDecorationV1 ,
161155 ) -> Option < Dialog > {
162- decoration. data :: < DialogData > ( ) . and_then ( |data| data. dialog ( ) )
156+ decoration. data :: < ToplevelDecorationData < DialogData > > ( ) . and_then ( |data| data. 0 . dialog ( ) )
163157 }
164158
165159 pub fn xdg_dialog ( & self ) -> & XdgDialogV1 {
@@ -315,18 +309,14 @@ where
315309 ) {
316310 if let Some ( dialog) = Dialog :: from_toplevel_decoration ( decoration) {
317311 match event {
318- zxdg_toplevel_decoration_v1:: Event :: Configure { mode } => match mode {
319- wayland_client :: WEnum :: Value ( mode) => {
312+ zxdg_toplevel_decoration_v1:: Event :: Configure { mode } =>
313+ if mode. available_since ( ) . is_some_and ( |v| v <= decoration . version ( ) ) {
320314 let mode = determine_decoration_mode ( mode) ;
321315 dialog. inner . window . pending_configure . lock ( ) . unwrap ( ) . decoration_mode =
322316 mode;
323- }
324-
325- wayland_client:: WEnum :: Unknown ( unknown) => {
326- log:: error!( target: "sctk" , "unknown decoration mode 0x{:x}" , unknown) ;
327- }
328- } ,
329-
317+ } else {
318+ log:: error!( target: "sctk" , "unknown decoration mode 0x{:?}" , mode) ;
319+ } ,
330320 _ => unreachable ! ( ) ,
331321 }
332322 }
0 commit comments