[KDE/Mac] Review Request 120931: [OS X] improvements to KWindowSystem
René J.V. Bertin
rjvbertin at gmail.com
Sat Nov 15 20:53:27 UTC 2014
> On Nov. 15, 2014, 3:43 p.m., Thomas Lübking wrote:
> > kdeui/windowmanagement/kwindowsystem_mac.cpp, line 418
> > <https://git.reviewboard.kde.org/r/120931/diff/2/?file=328516#file328516line418>
> >
> > anything that hinders from making kwindowsystem_mac.cpp kwindowsystem_mac.mm directly?
>
> René J.V. Bertin wrote:
> Yes, whatever it is that determines whether a header must be processed by moc doesn't pick up that fact in a .mm file.
> I admit I haven't even tried to figure out where this logic lives because it's obviously incomplete (but also something I don't feel confident to start tweaking with the risk of breaking everything).
>
> Thomas Lübking wrote:
> set(kwindowsystem_mac_MOC_HDRS kwindowsystem_mac_p.h)
> qt4_wrap_cpp(kwindowsystem_mac_MOC_SRCS ${kwindowsystem_mac_MOC_HDRS})
>
> then add ${kwindowsystem_mac_MOC_SRCS} to kdeui_LIB_SRCS
that'd be kwindowsystem.h, actually. kwindowsystem_mac_p.h will disappear if/when we can do with a single file.
> On Nov. 15, 2014, 3:43 p.m., Thomas Lübking wrote:
> > kdeui/windowmanagement/kwindowsystem_mac.cpp, line 556
> > <https://git.reviewboard.kde.org/r/120931/diff/2/?file=328516#file328516line556>
> >
> > Does this *really* cut it on OSX?
> > The function is not supposed to be an extra superfluous wrapper around QWidget, but typically used to control windows IN ANOTHER PROCESS.
> >
> > This raises the question whether that's possible on OSX at all.
> > If not, testing for an in-process window (search toplevels only?) is ok, but the failure should cause a big fat warning to the developer that this code isn't portable.
>
> René J.V. Bertin wrote:
> It works for in-process windows, obviously, but no it won't work for windows from another process. I highly doubt that one could meddle with those, and as I must have written in the comments somewhere, you cannot convert the WId to a pointer to an actual window object if it's not owned by ourselves.
>
> What exactly are you proposing concerning that big fat warning?
> Do you know of code that uses this kind of functionality cross-process, apart from kwin and maybe a couple of goodies that aren't relevent outside of a Plasma workspace?
>
> Thomas Lübking wrote:
> Well, how does the OSX docker etc. raise/activate a window?
> Does this imply that activating won't work either for other PID windows? (The comments actually seem to suggest so)
> In case: why mess with the cocoa API itfp? You could just as well wrap around Qt (w/ a //TODO or similar)
>
> > What exactly are you proposing concerning that big fat warning?
> qWarning("BlahFooBar does not work on OSX, please fix your stuff");
> if (m_DebugClient)
> abort();
>
> m_DebugClient could be set in a header inline, depending on whether QT_DEBUG is defined (or QT_NO_DEBUG is not defined)
The OS X Dock is a case apart. It's system software, and probably interacts with the window manager.
But I should rephrase, maybe: "it won't work" means there's no documented way to achieve raising and the like across process boundaries. As long as you don't want to or cannot use AppleScript, and in this case we cannot because we cannot use the WId.
I do think that the Cocoa API gives a bit more functionality than wrapping Qt calls would, but I can have another look at that.
- René J.V.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/120931/#review70399
-----------------------------------------------------------
On Nov. 15, 2014, 12:04 a.m., René J.V. Bertin wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/120931/
> -----------------------------------------------------------
>
> (Updated Nov. 15, 2014, 12:04 a.m.)
>
>
> Review request for KDE Software on Mac OS X and kdelibs.
>
>
> Repository: kdelibs
>
>
> Description
> -------
>
> This is an attempt to improve the Mac-specific implementation of the `KWindowSystem` class.
> For convenience and future-proofness (and also because I like the language) I converted `kwindowsystem_mac.cpp` to ObjC++, i.e. `kwindowsystem_mac.mm`, and added the AppKit framework in the CMakeFile.
>
> Much of the code in this file is hardly better than gentle hacking, but that probably concerns the functions that are of least interest on a platform where KDE doesn't do session management.
>
> I should probably update the "not yet implemented" debug statements (to "unsupported"), and I might have another look at kwindowinfo_mac.cpp too.
>
>
> Diffs
> -----
>
> kdeui/CMakeLists.txt 1454790
> kdeui/tests/kwindowtest.cpp b4012d7
> kdeui/windowmanagement/kwindowsystem_mac.cpp 4200237
> kdeui/windowmanagement/kwindowsystem_mac_p.h PRE-CREATION
> kdeui/windowmanagement/kwindowsystem_macobjc.mm PRE-CREATION
>
> Diff: https://git.reviewboard.kde.org/r/120931/diff/
>
>
> Testing
> -------
>
> On OS X 10.6.8, mostly with the updated kwindowtest utility (which calls KWindowSystem functions when clicking the Open button in its toolbar).
> Also tested on Mac OS X 10.9.4 rebuilding kdelibs from scratch.
>
>
> Thanks,
>
> René J.V. Bertin
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-mac/attachments/20141115/b5621868/attachment-0001.html>
More information about the kde-mac
mailing list