@@ -74,78 +74,83 @@ impl WaylandState {
7474 pub ( in crate :: backend:: wayland:: state:: toolbar) fn apply_toolbar_offsets (
7575 & mut self ,
7676 snapshot : & ToolbarSnapshot ,
77- ) {
77+ ) -> ( bool , bool ) {
7878 if self . surface . width ( ) == 0 || self . surface . height ( ) == 0 {
7979 drag_log ( format ! (
8080 "skip apply_toolbar_offsets: surface not configured (width={}, height={})" ,
8181 self . surface. width( ) ,
8282 self . surface. height( )
8383 ) ) ;
84- return ;
84+ return ( false , false ) ;
8585 }
8686 let _ = self . clamp_toolbar_offsets ( snapshot) ;
87- if self . layer_shell . is_some ( ) {
88- let top_base_x = self . inline_top_base_x ( snapshot) ;
89- let ( top_margin_left, top_margin_top, side_margin_top, side_margin_left) =
90- geometry:: compute_layer_margins (
91- top_base_x,
92- Self :: TOP_BASE_MARGIN_TOP ,
93- Self :: SIDE_BASE_MARGIN_LEFT ,
94- Self :: SIDE_BASE_MARGIN_TOP ,
95- geometry:: ToolbarOffsets {
96- top_x : self . data . toolbar_top_offset ,
97- top_y : self . data . toolbar_top_offset_y ,
98- side_x : self . data . toolbar_side_offset_x ,
99- side_y : self . data . toolbar_side_offset ,
100- } ,
101- ) ;
102- drag_log ( format ! (
103- "apply_toolbar_offsets: top_margin_left={}, top_margin_top={}, side_margin_top={}, side_margin_left={}, offsets=({}, {})/({}, {}), scale={}, top_base_x={}" ,
87+ if self . layer_shell . is_none ( ) {
88+ return ( false , false ) ;
89+ }
90+ let top_base_x = self . inline_top_base_x ( snapshot) ;
91+ let ( top_margin_left, top_margin_top, side_margin_top, side_margin_left) =
92+ geometry:: compute_layer_margins (
93+ top_base_x,
94+ Self :: TOP_BASE_MARGIN_TOP ,
95+ Self :: SIDE_BASE_MARGIN_LEFT ,
96+ Self :: SIDE_BASE_MARGIN_TOP ,
97+ geometry:: ToolbarOffsets {
98+ top_x : self . data . toolbar_top_offset ,
99+ top_y : self . data . toolbar_top_offset_y ,
100+ side_x : self . data . toolbar_side_offset_x ,
101+ side_y : self . data . toolbar_side_offset ,
102+ } ,
103+ ) ;
104+ drag_log ( format ! (
105+ "apply_toolbar_offsets: top_margin_left={}, top_margin_top={}, side_margin_top={}, side_margin_left={}, offsets=({}, {})/({}, {}), scale={}, top_base_x={}" ,
106+ top_margin_left,
107+ top_margin_top,
108+ side_margin_top,
109+ side_margin_left,
110+ self . data. toolbar_top_offset,
111+ self . data. toolbar_top_offset_y,
112+ self . data. toolbar_side_offset_x,
113+ self . data. toolbar_side_offset,
114+ self . surface. scale( ) ,
115+ top_base_x
116+ ) ) ;
117+ if debug_toolbar_drag_logging_enabled ( ) {
118+ debug ! (
119+ "apply_toolbar_offsets: top_margin_left={} (last={:?}), top_margin_top={} (last={:?}), side_margin_top={} (last={:?}), side_margin_left={} (last={:?}), offsets=({}, {})/({}, {}), top_base_x={}" ,
104120 top_margin_left,
121+ self . data. last_applied_top_margin,
105122 top_margin_top,
123+ self . data. last_applied_top_margin_top,
106124 side_margin_top,
125+ self . data. last_applied_side_margin,
107126 side_margin_left,
127+ self . data. last_applied_side_margin_left,
108128 self . data. toolbar_top_offset,
109129 self . data. toolbar_top_offset_y,
110130 self . data. toolbar_side_offset_x,
111131 self . data. toolbar_side_offset,
112- self . surface. scale( ) ,
113132 top_base_x
114- ) ) ;
115- if debug_toolbar_drag_logging_enabled ( ) {
116- debug ! (
117- "apply_toolbar_offsets: top_margin_left={} (last={:?}), top_margin_top={} (last={:?}), side_margin_top={} (last={:?}), side_margin_left={} (last={:?}), offsets=({}, {})/({}, {}), top_base_x={}" ,
118- top_margin_left,
119- self . data. last_applied_top_margin,
120- top_margin_top,
121- self . data. last_applied_top_margin_top,
122- side_margin_top,
123- self . data. last_applied_side_margin,
124- side_margin_left,
125- self . data. last_applied_side_margin_left,
126- self . data. toolbar_top_offset,
127- self . data. toolbar_top_offset_y,
128- self . data. toolbar_side_offset_x,
129- self . data. toolbar_side_offset,
130- top_base_x
131- ) ;
132- }
133- let margins_changed = self . data . last_applied_top_margin != Some ( top_margin_left)
134- || self . data . last_applied_top_margin_top != Some ( top_margin_top)
135- || self . data . last_applied_side_margin != Some ( side_margin_top)
136- || self . data . last_applied_side_margin_left != Some ( side_margin_left) ;
137- if !margins_changed {
138- return ;
139- }
140- self . data . last_applied_top_margin = Some ( top_margin_left) ;
141- self . data . last_applied_side_margin = Some ( side_margin_top) ;
142- self . data . last_applied_top_margin_top = Some ( top_margin_top) ;
143- self . data . last_applied_side_margin_left = Some ( side_margin_left) ;
133+ ) ;
134+ }
135+ let top_changed = self . data . last_applied_top_margin != Some ( top_margin_left)
136+ || self . data . last_applied_top_margin_top != Some ( top_margin_top) ;
137+ let side_changed = self . data . last_applied_side_margin != Some ( side_margin_top)
138+ || self . data . last_applied_side_margin_left != Some ( side_margin_left) ;
139+ if !top_changed && !side_changed {
140+ return ( false , false ) ;
141+ }
142+ self . data . last_applied_top_margin = Some ( top_margin_left) ;
143+ self . data . last_applied_side_margin = Some ( side_margin_top) ;
144+ self . data . last_applied_top_margin_top = Some ( top_margin_top) ;
145+ self . data . last_applied_side_margin_left = Some ( side_margin_left) ;
146+ if top_changed {
144147 self . toolbar
145148 . set_top_margins ( top_margin_top, top_margin_left) ;
149+ }
150+ if side_changed {
146151 self . toolbar
147152 . set_side_margins ( side_margin_top, side_margin_left) ;
148- self . toolbar . mark_dirty ( ) ;
149153 }
154+ ( top_changed, side_changed)
150155 }
151156}
0 commit comments