[PyKDE] sip SIGNAL/proxy problem

Jim Bublitz jbublitz at nwinternet.com
Sun Dec 21 22:35:00 GMT 2003


There appears to be a sip problem as described in the following 
PyKDE list thread:

    [PyKDE] un-connectable signals (probably sip bug)

Basically the situation is this (WId is just an example of the 
general problem):

WId is defined in qwindowdefs_x11.sip as:

    typedef unsigned long WId;

In kdecore/KWinModule, the *signal*:

    void windowAdded (WId);

is defined.

kdecore proxies unsigned long, so the following should work :

    wm = KWinModule ()
    wm.connect (wm, SIGNAL ("windowAdded (unsigned long)"),   
        someSlot)

However, when sip looks, it doesn't find windowAdded (unsigned 
long) in KWinModule (I assume it's a text search). kdecore has 
no proxy slot using WId, so replacing unsigned long in the 
connect stmt above causes a failure on that end. As was pointed 
out in the original thread, it wouldn't be possible to have two 
proxy slots that vary only by base type vs derived type either.

Is this a sip problem, or am I missing something? Can it be fixed 
(on the signal lookup side?) ? There are other places in PyKDE 
where this occurs as well. The generated sipEmit code parses the 
arg as unsigned long already. It would be preferable to be able 
to use WId in the connect stmt, but I could "patch" that in the 
docs if unsigned long was necessary.

A temporary workaround would be to modify kwinmodule.sip:

class KWinModule
{
%HeaderCode
#define WId unsigned long
#include <kwinmodule.h>
%End
    

I can also modify presip to build in a workaround by substituting 
the base type for a derived type if that's more desireable (not 
looking forward to doing that though, but I imagine it's no more 
difficult there than in sip).

Jim




More information about the PyQt mailing list