@@ -131,7 +131,21 @@ export default class OverriddenWindowMenu extends GObject.Object {
131
131
if ( vacantTiles . length > 0 ) {
132
132
vacantTiles . sort ( ( a , b ) => a . x - b . x ) ;
133
133
134
- const middleTileIndex = Math . floor ( vacantTiles . length / 2 ) ;
134
+ let bestTileIndex = 0 ;
135
+ let bestDistance = Math . abs (
136
+ 0.5 -
137
+ vacantTiles [ bestTileIndex ] . x +
138
+ vacantTiles [ bestTileIndex ] . width / 2 ,
139
+ ) ;
140
+ for ( let index = 1 ; index < vacantTiles . length ; index ++ ) {
141
+ const distance = Math . abs (
142
+ 0.5 - ( vacantTiles [ index ] . x + vacantTiles [ index ] . width / 2 ) ,
143
+ ) ;
144
+ if ( bestDistance > distance ) {
145
+ bestTileIndex = index ;
146
+ bestDistance = distance ;
147
+ }
148
+ }
135
149
136
150
// @ts -expect-error "this is not an instance of OverriddenWindowMenu, but it is the WindowMenu itself"
137
151
this . addMenuItem ( new PopupMenu . PopupSeparatorMenuItem ( ) ) ;
@@ -142,14 +156,14 @@ export default class OverriddenWindowMenu extends GObject.Object {
142
156
buildMenuWithLayoutIcon (
143
157
'Move to best tile' ,
144
158
vacantPopupMenu ,
145
- [ vacantTiles [ middleTileIndex ] ] ,
159
+ [ vacantTiles [ bestTileIndex ] ] ,
146
160
tiles ,
147
161
hasGaps ? 2 : 0 ,
148
162
) ;
149
163
vacantPopupMenu . connect ( 'activate' , ( ) => {
150
164
OverriddenWindowMenu . get ( ) . emit (
151
165
'tile-clicked' ,
152
- vacantTiles [ middleTileIndex ] ,
166
+ vacantTiles [ bestTileIndex ] ,
153
167
window ,
154
168
) ;
155
169
} ) ;
0 commit comments