1
- ---- -----------------------------------------------------------------------
2
- --- Mouse snapping related functions
3
- --
4
- -- @author Julien Danjou <[email protected] >
5
- -- @copyright 2008 Julien Danjou
6
- -- @copyright 2023 David Kosorin
7
- -- @submodule mouse
8
- ---- -----------------------------------------------------------------------
1
+ ---- ----------------------------------------------------------------------------
2
+ --- Mouse snapping related functions
3
+ --- @author Julien Danjou <[email protected] >
4
+ --- @copyright 2008 Julien Danjou
5
+ --- @copyright 2023 David Kosorin
6
+ --- @submodule mouse
7
+ ---- ----------------------------------------------------------------------------
9
8
10
9
local capi = Capi
11
10
local abs = math.abs
12
11
local alayout = require (" awful.layout" )
13
- local amresize = require (" awful.mouse.resize" )
14
12
local aplacement = require (" awful.placement" )
15
- local gcolor = require (" gears.color" )
16
13
local gshape = require (" gears.shape" )
17
14
local wibox = require (" wibox" )
18
15
local cairo = require (" lgi" ).cairo
19
16
local beautiful = require (" theme.theme" )
20
17
local uui = require (" utils.ui" )
21
- local ucolor = require (" utils.color" )
22
18
19
+ local M = {}
23
20
24
- local placement_context = " edge_snap "
21
+ local stored_geometries = setmetatable ({}, { __mode = " k " })
25
22
26
23
--- @type wibox | nil
27
24
local preview_wibox = nil
28
25
29
- --- @type { edge ?: edge | corner , placement ?: (fun ( client : client , preview ?: boolean ): geometry ) }
26
+ --- @type { edge ?: edge | corner , placement ?: (fun ( client : client ): geometry ) }
30
27
local current_state = {}
31
28
32
29
--- @param geo geometry
@@ -140,11 +137,9 @@ local function update(client)
140
137
local placement = edge and (aplacement .scale
141
138
+ aplacement [edge ]
142
139
+ (axis and aplacement [" maximize_" .. axis ] or nil ))
143
- current_state .placement = function (c , preview )
140
+ current_state .placement = function (c )
144
141
return placement (c , {
145
- pretend = preview ,
146
- store_geometry = not preview ,
147
- context = placement_context ,
142
+ pretend = true ,
148
143
to_percent = 0.5 ,
149
144
honor_workarea = true ,
150
145
honor_padding = true ,
@@ -159,9 +154,8 @@ local function update(client)
159
154
return changed
160
155
end
161
156
162
-
163
157
--- @param client client
164
- local function detect (client )
158
+ function M . detect (client )
165
159
if (not client .floating ) and alayout .get (client .screen ) ~= alayout .suit .floating then
166
160
return
167
161
end
@@ -171,31 +165,39 @@ local function detect(client)
171
165
end
172
166
173
167
local placement = current_state .placement
174
- local geo = placement and placement (client , true )
168
+ local geo = placement and placement (client )
175
169
show_preview (client , geo )
176
170
end
177
171
172
+ --- @param client client
173
+ function M .store (client )
174
+ stored_geometries [client ] = client :geometry ()
175
+ end
176
+
177
+ --- @param client client
178
+ --- @return geometry | nil
179
+ function M .try_restore (client )
180
+ local geo = stored_geometries [client ]
181
+ stored_geometries [client ] = nil
182
+ return geo
183
+ end
184
+
178
185
--- @param client client
179
186
--- @param args awful.placement.args.common
180
187
--- @return geometry | nil
181
- local function apply (client , args )
182
- if not current_state .placement then
183
- return nil
188
+ function M .apply (client , args )
189
+ local placement = current_state .placement
190
+ if not placement then
191
+ return
184
192
end
185
193
186
- -- Remove the move offset
187
194
args .offset = {}
188
195
189
196
preview_wibox .visible = false
190
197
191
- return current_state .placement (client , false )
192
- end
198
+ M .store (client )
193
199
194
- amresize .add_move_callback (function (client , geo , args )
195
- aplacement .restore (client , { context = placement_context , clear_stored_geometry = true })
196
- detect (client )
197
- end , " mouse.move" )
200
+ return placement (client )
201
+ end
198
202
199
- amresize .add_leave_callback (function (client , geo , args )
200
- return apply (client , args )
201
- end , " mouse.move" )
203
+ return M
0 commit comments