From kdevelop-devel Sun Sep 16 09:34:59 2001 From: Bernd Gehrmann Date: Sun, 16 Sep 2001 09:34:59 +0000 To: kdevelop-devel Subject: Re: emacs part and QXEmbed X-MARC-Message: https://marc.info/?l=kdevelop-devel&m=100063310231345 On Sat, 15 Sep 2001, Marcus Gruendler wrote: > Whenever a document is opened, emacs starts up and when it gets embedded into > the qxembed widget it disappears and no emacs is visible anymore. Why? As you not saying what you did, that's hard to tell... One way to use it is to run emacs with a specific caption and listen for a window with that caption to appear on the screen. Then you can find out its window id and embed that. In order to avoid flicker, you create the window outside of the screen. The following code snippet works with kwin: XEmacs::XEmacs(QWidget *parent, const char *name) : QXEmbed(parent, name) { kwm = new KWinModule(this); connect( kwm, SIGNAL(windowAdded(WId)), this, SLOT(windowAdded(WId)) ); swallowedName = KApplication::randomString(8); kwm->doNotManage(swallowedName); KProcess *proc = new KProcess(); *proc << "emacs"; *proc << "-geometry"; *proc << "-2000-2000"; *proc << "-title"; *proc << swallowedName; proc->start(KProcess::DontCare); delete proc; } void XEmacs::windowAdded(WId id) { KWin::Info info = KWin::info(id); if (info.name == swallowedName) { disconnect( kwm, SIGNAL(windowAdded(WId)), this, SLOT(windowAdded(WId)) ); embed(id); } } You won't be happy with this though, because focus doesn't work. QXEmbed use a protocol based on X client messages in order to guarantee that focus changes inside the composite application only happen on mouse press events, not already when you move the mouse cursor. Of course, this protocol (XEMBED) requires the cooperation of the embedded program. AFAIK, Gtk 2.0 implements it for the plug and socket classes. So maybe once XEmacs is ported to Gtk2, you have more luck :-) BTW, William Perry, the author of the Gtk XEmacs port, is also a Qt programmer, so maybe you could ask him for help. Bernd. - to unsubscribe from this list send an email to kdevelop-devel-request@kdevelop.org with the following body: unsubscribe »your-email-address«