Gmane
Favicon
From: Benjamin Reed <ranger <at> befunk.com>
Subject: KDE's implementation of various GUI bits, problems with MacOSX
Newsgroups: gmane.comp.kde.darwin, gmane.comp.kde.devel.general
Date: 2004-01-19 21:51:16 GMT (5 years, 23 weeks, 6 days, 15 hours and 21 minutes ago)
So we're running into issues in the Qt/Mac port revolving around process 
handling and GUIs.

 From what I can tell, there are a number of places where kde exec's new 
processes for things like dialog boxes and other gui elements. 
(kcmshell is the most common of them).  The problem I'm running into is 
that the Mac OS X gui loses it's ability to talk to the display server 
across a fork.  What happens is, Mac OS X's kernel is a hybrid of mach 
and a BSD kernel, but there's a number of places where their resources 
are separate.  All GUI stuff is communicated through mach ports, and 
fork doesn't preserve mach port resources in the child process, so 
essentially children can't be GUI apps.

As far as I can tell, what happens is something like this:

1. I start konqueror.
2. kdeinit spawns, and in turn spawns kded and dcopserver (and other 
things as necessary)
3. I try to go to konq's settings
4. konq says "I want to open konqueror_config.desktop", it talks through 
dcop to kdeinit (is this right?)
5. kdeinit spawns kcmshell konqfoo konqbar, which in turn calls kcmodule 
stuff, which uses kapplication or kuniqueapplication to display stuff (I 
forget which)

At #5, though, kdeinit has never had a graphics context, so it's unable 
to display stuff properly.  It seems like a lot of this design comes 
from X11 being decoupled, where you can make windows modal children of 
other windows at will, whether Qt thinks it's a child or not.

Am I getting this right?  The path between clicking on a menu option and 
the executable coming up is very convoluted.

I'm looking for suggestions on how to even consider fixing this.  I'm 
having a difficult time wrapping my head around the way such things get 
executed, but it seems like the "fix" is to have a way for konqueror 
itself to call the kcmodule code, so that it becomes a child widget of 
konqueror, no extra forking and execing is happening, and things get 
inherited properly through Qt.

Does this seem right?  Where do I even begin?  =)

-- 
Benjamin Reed a.k.a. Ranger Rick -- http://ranger.befunk.com/
gpg: 6401 D02A A35F 55E9 D7DD  71C5 52EF A366 D3F6 65FE
You had me at HELO.