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/

Reply via email to