@@ -170,33 +170,31 @@ DATA contains unmarshalled SelectionRequest event data.
170170
171171Such events would be received when clients query for LOCALES or TRANSPORT."
172172 (exwm--log)
173- (let ((evt (xcb:unmarshal-new 'xcb:SelectionRequest data))
174- value fake-event)
175- (with-slots (time requestor selection target property) evt
176- (setq value (cond ((= target exwm-xim--LOCALES)
177- ; ; Return supported locales.
178- exwm-xim--locales)
179- ((= target exwm-xim--TRANSPORT)
180- ; ; Use XIM over an X connection.
181- " @transport=X/" )))
182- (when value
183- ; ; Change the property.
184- (xcb:+request exwm-xim--conn
185- (make-instance 'xcb:ChangeProperty
186- :mode xcb:PropMode:Replace
187- :window requestor
188- :property property
189- :type target
190- :format 8
191- :data-len (length value)
192- :data value))
193- ; ; Send a SelectionNotify event.
194- (setq fake-event (make-instance 'xcb:SelectionNotify
195- :time time
196- :requestor requestor
197- :selection selection
198- :target target
199- :property property))
173+ (with-slots (time requestor selection target property)
174+ (xcb:unmarshal-new 'xcb:SelectionRequest data)
175+ (when-let* ((value (cond ((= target exwm-xim--LOCALES)
176+ ; ; Return supported locales.
177+ exwm-xim--locales)
178+ ((= target exwm-xim--TRANSPORT)
179+ ; ; Use XIM over an X connection.
180+ " @transport=X/" ))))
181+ ; ; Change the property.
182+ (xcb:+request exwm-xim--conn
183+ (make-instance 'xcb:ChangeProperty
184+ :mode xcb:PropMode:Replace
185+ :window requestor
186+ :property property
187+ :type target
188+ :format 8
189+ :data-len (length value)
190+ :data value))
191+ ; ; Send a SelectionNotify event.
192+ (let ((fake-event (make-instance 'xcb:SelectionNotify
193+ :time time
194+ :requestor requestor
195+ :selection selection
196+ :target target
197+ :property property)))
200198 (xcb:+request exwm-xim--conn
201199 (make-instance 'xcb:SendEvent
202200 :propagate 0
@@ -212,17 +210,17 @@ Such events would be received when clients request for _XIM_XCONNECT.
212210A new X connection and server window would be created to communicate with
213211this client."
214212 (exwm--log)
215- (let ((evt (xcb:unmarshal-new 'xcb:ClientMessage data))
216- conn client-xwin server-xwin )
217- ( with-slots (window type data) evt
218- (unless (= type exwm-xim--_XIM_XCONNECT)
219- ; ; Only handle _XIM_XCONNECT.
220- (exwm--log " Ignore ClientMessage %s" type)
221- (cl-return-from exwm-xim--on-ClientMessage-0))
222- ( setq client-xwin (elt (slot-value data 'data32 ) 0 )
223- ; ; Create a new X connection and a new server window.
224- conn (xcb:connect)
225- server-xwin (xcb:generate-id conn))
213+ (let* ((evt (xcb:unmarshal-new 'xcb:ClientMessage data))
214+ (type ( slot-value evt 'type ) )
215+ (data ( slot-value evt ' data )))
216+ (unless (= type exwm-xim--_XIM_XCONNECT)
217+ ; ; Only handle _XIM_XCONNECT.
218+ (exwm--log " Ignore ClientMessage %s" type)
219+ (cl-return-from exwm-xim--on-ClientMessage-0))
220+ ( let* (( client-xwin (elt (slot-value data 'data32 ) 0 ) )
221+ ; ; Create a new X connection and a new server window.
222+ ( conn (xcb:connect) )
223+ ( server-xwin (xcb:generate-id conn) ))
226224 (set-process-query-on-exit-flag (slot-value conn 'process ) nil )
227225 ; ; Store this client.
228226 (plist-put exwm-xim--server-client-plist server-xwin
@@ -254,7 +252,7 @@ this client."
254252 :override-redirect 1 ))
255253 (xcb:flush conn)
256254 ; ; Send connection establishment ClientMessage.
257- (setf window client-xwin
255+ (setf ( slot-value evt ' window) client-xwin
258256 (slot-value data 'data32 ) `(, server-xwin 0 0 0 0 ))
259257 (slot-makeunbound data 'data8 )
260258 (slot-makeunbound data 'data16 )
@@ -272,16 +270,15 @@ this client."
272270Such events would be received when clients request for _XIM_PROTOCOL.
273271The actual XIM request is in client message data or a property."
274272 (exwm--log)
275- (let ((evt (xcb:unmarshal-new 'xcb:ClientMessage data))
276- conn client-xwin server-xwin)
277- (with-slots (format window type data) evt
278- (unless (= type exwm-xim--_XIM_PROTOCOL)
279- (exwm--log " Ignore ClientMessage %s" type)
280- (cl-return-from exwm-xim--on-ClientMessage))
281- (setq server-xwin window
282- conn (plist-get exwm-xim--server-client-plist server-xwin)
283- client-xwin (elt conn 1 )
284- conn (elt conn 0 ))
273+ (with-slots (format window type data)
274+ (xcb:unmarshal-new 'xcb:ClientMessage data)
275+ (unless (= type exwm-xim--_XIM_PROTOCOL)
276+ (exwm--log " Ignore ClientMessage %s" type)
277+ (cl-return-from exwm-xim--on-ClientMessage))
278+ (let* ((server-xwin window)
279+ (client-conn (plist-get exwm-xim--server-client-plist server-xwin))
280+ (client-xwin (elt client-conn 1 ))
281+ (conn (elt client-conn 0 )))
285282 (cond ((= format 8 )
286283 ; ; Data.
287284 (exwm-xim--on-request (vconcat (slot-value data 'data8 ))
@@ -654,20 +651,19 @@ the request data or where to fetch the data."
654651Such event would be received when the client window is destroyed."
655652 (exwm--log)
656653 (unless synthetic
657- (let ((evt (xcb:unmarshal-new 'xcb:DestroyNotify data))
658- conn client-xwin server-xwin )
659- ( setq client -xwin (slot-value evt 'window )
660- server-xwin ( plist-get exwm-xim--client-server-plist client-xwin))
661- ( when server-xwin
662- ( setq conn ( aref ( plist-get exwm-xim--server-client-plist server-xwin)
663- 0 ))
654+ (when- let* ((evt (xcb:unmarshal-new 'xcb:DestroyNotify data))
655+ ( client-xwin ( slot-value evt 'window ) )
656+ (server -xwin (plist-get exwm-xim--client-server-plist
657+ client-xwin))
658+ (conn ( aref ( plist-get exwm-xim-- server-client-plist
659+ server-xwin)
660+ 0 ) ))
664661 (cl-remf exwm-xim--server-client-plist server-xwin)
665662 (cl-remf exwm-xim--client-server-plist client-xwin)
666663 ; ; Destroy the communication window & connection.
667664 (xcb:+request conn
668- (make-instance 'xcb:DestroyWindow
669- :window server-xwin))
670- (xcb:disconnect conn)))))
665+ (make-instance 'xcb:DestroyWindow :window server-xwin))
666+ (xcb:disconnect conn))))
671667
672668(cl-defun exwm-xim--init ()
673669 " Initialize the XIM module."
0 commit comments