Hello list,
I am trying to solve this problem:
In root-only environment (Anaconda installer) we are running very simple
C window manager (only taking care of setting focus of windows), Anaconda
pygtk GUI, and on demand nm-connection-editor (C Gtk+ application) can
be run.
In Anaconda (the pygtk app) I have class (constructor is taking Xid of
window)
for embedding nm-c-e foreign window using gtk.Socket. What I need now is
a mechanism
for notifying about appearing nm-c-e windows (providing their Xid), idally
it would allow to set a callback on event/notification.
My last idea was:
- catch CreateNotify events in the C window manager
- 'forward' them via ClientMessage to Anaconda pygtk app
(to a window W specified/found in window manager by its wmname),
sending Xid of created window
- in Anaconda pygtk app set client-event callback on the window W
which will use Xid to (eventually) embed the created window
Does it sound like it could work?
Especially, is X ClientMessage received in pyGtk app generating
client-event Gtk signal?
I made an example but it doesn't work - base.py doesn't call the ce-cb
callback when
I seem to send ClientMessage to its window.
I run two python processes (in my environment, metacity wm is running).
base.py:
#!/usr/bin/python
import pygtk
import gtk
def ce_cb(widget, event):
print "Got client event!"
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
# This doesn't help
#window.add_events(gtk.gdk.CLIENT_EVENT)
window.connect("client-event", ce_cb)
window.show()
gtk.main()
send_event.py:
#!/usr/bin/python
import sys
import Xlib
from Xlib import display
from Xlib.protocol import event
d = display.Display()
s = d.screen()
children = s.root.query_tree().children
for c in children:
if c.get_wm_name() == "base.py":
break
else:
print "ERROR: base.py not found"
sys.exit(1)
# here I don't know exactly what I am doing to be honest
atom = d.intern_atom('WINDOW')
cm = event.ClientMessage(window = c,
client_type = atom,
data = (8, "01234567890123456789"))
c.send_event(cm)
d.flush()
What I am doing wrong?
Or is my whole concept wrong?
Thanks,
Radek
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/