[Qt-interest] gui disabled issue with PACE copy protection dialogsinside Qt (OSX/Carbon)
Ross Bencina
rossb-lists at audiomulch.com
Mon Jul 19 18:20:19 CEST 2010
Replying to my own message for the benefit of the next unfortunate soul who
comes accross this bug...
Apparently Qt/Carbon's QApplicationPrivate::globalEventProcessor() function
was implemented with the assumption that the only windows in the application
would be created by Qt. As a result, it eats kEventWindowActivated and
kEventWindowDeactivated events for non-Qt windows, which the PACE iLok
dialog (naturally) expects to recieve. This is a pretty bad bug in Qt, I was
lead to believe it would leave events alone which were destined for non-Qt
Windows.
In any case, here's a patch if anyone ever needs it. It sets handled_event
to false if the event is not associated with a QWidget:
-- qapplication_mac.4.6.3.mm 2010-06-02 12:00:19.000000000 +1000
+++ qapplication_mac.mm 2010-07-20 08:04:33.000000000 +1000
@@ -2327,9 +2327,16 @@
}
QMenuBar::macUpdateMenuBar();
}
+
+ if( !widget )
+ handled_event = false;
+
} else if(ekind == kEventWindowDeactivated) {
if(widget && QApplicationPrivate::active_window == widget)
app->setActiveWindow(0);
+
+ if( !widget )
+ handled_event = false;
} else {
handled_event = false;
}
Now my plugin's PACE dialog's activate correctly.
Would be nice to hear from someone who can explain why this wasn't done
right in the first place.
I now suspect that it's also eating mouse (and perhaps other) events under
some conditions since I have some plugin windows which don't respond to
mouse events, and some that don't always redraw. If anyone is working on
more patches/fixes for this kind of thing I'd love to hear about it.
Thanks
Ross.
----- Original Message -----
From: "Ross Bencina" <rossb-lists at audiomulch.com>
To: "Qt-Interest" <qt-interest at trolltech.com>
Sent: Wednesday, July 14, 2010 9:21 PM
Subject: [Qt-interest] gui disabled issue with PACE copy protection
dialogsinside Qt (OSX)
> Hi Everyone
>
> My Qt app hosts plugins developed by 3rd party developers. Some plugins
> use
> PACE copy protection (paceap.com). The problem is, when they get loaded
> they
> display an iLok or PACE dialog and then hang with all of the buttons on
> the
> PACE dialog disabled. This is a non-Qt dialog that the copy protection
> code
> displays. As far as I can tell, the dialog is running its own nested event
> loop, although a few things in my Qt UI are still active (hover, some
> clicks, tooltips). This is on OSX.
>
> I have only tested this with demo versions of plugins but my users are
> reporting similar problems with their licenced versions. If I try to use
> gdb
> naturally PACE exits immediatly so it's hard to even give info about
> threads
> etc.
>
> I am guessing that Qt might be doing something (or not doing something)
> with
> event processing that is causing this but I wonder whether anyone has
> encountered this before and has any ideas how I might solve it. I guess
> there would be similar issues in displaying any 3rd party dialog inside a
> Qt
> GUI.
>
> Any and all thoughts and help appreciated.
>
> Many thanks
>
> Ross.
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
More information about the Qt-interest-old
mailing list