@@ -160,7 +160,10 @@ module Run
160
160
{% if ! flag?(:release ) % }
161
161
puts " [debug] x11: root_win = #{ @root_win } "
162
162
{% end % }
163
- @_NET_ACTIVE_WINDOW = @display .intern_atom(" _NET_ACTIVE_WINDOW" , false )
163
+ @_NET_ACTIVE_WINDOW = @display .intern_atom(" _NET_ACTIVE_WINDOW" , true )
164
+ {% if ! flag?(:release ) % }
165
+ puts " [debug] x11: _NET_ACTIVE_WINDOW = #{ @_NET_ACTIVE_WINDOW } "
166
+ {% end % }
164
167
root_win_attributes = ::X11 ::SetWindowAttributes .new
165
168
root_win_attributes.event_mask = ::X11 ::PropertyChangeMask
166
169
# So we get notified of active window change
@@ -182,8 +185,18 @@ module Run
182
185
end
183
186
184
187
private def active_window
185
- # TODO: manybe use @x_do.active_window if it's similarly fast?
186
- win = @display .window_property(@root_win , @_NET_ACTIVE_WINDOW , 0 _i64 , 1 _i64 , false , ::X11 ::C ::XA_WINDOW .to_u64)[:prop ].unsafe_as(Pointer (UInt64 )).value
188
+ # TODO: manybe use @x_do.active_window if it's similarly fast? (evdev branch)
189
+ return 0 _u64 if @_NET_ACTIVE_WINDOW < 1
190
+ prop = @display .window_property(@root_win , @_NET_ACTIVE_WINDOW , 0 _i64 , 1 _i64 , false , ::X11 ::C ::XA_WINDOW .to_u64)
191
+ nitems = prop[:nitems ]
192
+ data = prop[:prop ].unsafe_as(Pointer (UInt64 ))
193
+ if data.null? || nitems.nil? || nitems < 1
194
+ {% if ! flag?(:release ) % }
195
+ puts " [debug] x11: active window detection: _NET_ACTIVE_WINDOW returned NULL prop data"
196
+ {% end % }
197
+ return 0 _u64
198
+ end
199
+ win = data.value
187
200
{% if ! flag?(:release ) % }
188
201
puts " [debug] x11: active window detection: #{ win } "
189
202
{% end % }
0 commit comments