[Development] Foreign windows, embedding and transiency
Sletta Gunnar
Gunnar.Sletta at digia.com
Tue Dec 11 12:45:48 CET 2012
On Dec 11, 2012, at 12:33 PM, Samuel Rødal <samuel.rodal at digia.com>
wrote:
> On 12/11/2012 12:03 PM, Alberto Mardegan wrote:
>> Hi all,
>> while digging a bit more deeply into the code of QX11EmbedWidget (in
>> order to port it to Qt5), I started wondering if we really need a
>> special API for embedding, or whether QWindow could already offer most
>> of it:
>>
>> ==========
>> QWindow::QWindow(QWindow * parent)
>>
>> Creates a window as a child of the given parent window.
>>
>> The window will be embedded inside the parent window, its coordinates
>> relative to the parent.
>> ==========
>>
>> What about adding an API to create QWindow objects for foreign windows
>> as well? (by "foreign window" I mean a window created by another process)
>>
>> Then we could provide embedding functionality by using the QWindow
>> constructor or the QWindow::setParent() method. Also, the
>> QWindow::setTransientParent() could be use to set our QWindow as
>> transient for a foreign window.
>> Of course, this might not work in all platforms, but the documentation
>> could explain where it works and where it doesn't.
>>
>> In order to create a QWindow for a foreign window, there might be a
>> special subclass of QWindow (QForeignWindow?) or maybe it could just be
>> a QWindow with a special Qt::ForeignWindow flag (and maybe a constructor
>> like QWindow::QWindow(WinId foreignWindow)).
>>
>> Your opinions on which way foreign windows could be created (and on
>> whether all of this sounds like a good idea to you) are very welcome. :-)
>
> This worked for QWidgets in Qt 4 by passing a native window handle (WId)
> to create(). However, then we also knew at compile time what the native
> windowing system would be.
>
> Is it possible to define a WId type that will work on X11, Wayland, and
> any other theoretical windowing system on Unix platforms?
We already have the WId in the QPlatformWindow::winId() function. It is #define'd as a quintptr. If that is not good enough for this usecase then it won't do much good for QPlatformWindow::winId() either.
cheers,
Gunnar
>
> --
> Samuel
>
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
More information about the Development
mailing list