Xlib sync on different instance of Xlib.display.Display()?

Ferry Boender f.boenderSP at Melectricmonk.nl
Tue Dec 13 23:25:30 CET 2005


I'm relatively new to Xlib programming, and I ran into a little problem.

I'm trying to insert keypress events into a X window. The following code 


import Xlib.display
import Xlib.X
import Xlib.XK

import time

display = Xlib.display.Display()
screen = display.screen()
root = screen.root
input_focus = display.get_input_focus()
window = input_focus._data["focus"];

ev = Xlib.protocol.event.KeyPress(
	time = int(time.time()), root = root, window = window,
	same_screen = 0, child = Xlib.X.NONE, root_x = 0,
	root_y = 0, event_x = 0, event_y = 0, state = 0,
	detail = 104
window.send_event(ev, propagate = True)
#display = Xlib.display.Display()

But when I comment out the "#display = Xlib.display.Display()" line, it 
stops working. (Naturally doing this in this situation is stupid, but in 
the real code I tried to pass the window as a parameter to a object 
which had its own instance of display)

My guess is that any events that get sent to a window are cached by the 
display the window was gotten from. Since I'm sync()-ing on a different 
instance of display() the events aren't there. I initially thought this 
caching would've been handled on a lower level (somewhere in the X 
internals; not in python) so that the instance wouldn't matter.

Is there any way around this, or will I be forced to pass the correct 
display instance as a param?

Thanks for any help,


Ferry Boender

More information about the Python-list mailing list