[xmonad] More trouble with KDE apps
John Goerzen
jgoerzen at complete.org
Tue Jun 9 15:54:58 EDT 2009
To follow up a bit more, I also saw over at
http://src.gnu-darwin.org/ports/x11-wm/ede/work/ede/eworkpanel/dock.cpp.html
this code:
// Helper for Dock::embed_window()
// Kopied from kdelibs/kdeui/qxembed.cpp
static int get_parent(Window winid, Window *out_parent)
{
Window root, *children=0;
unsigned int nchildren;
int st = XQueryTree(fl_display, winid, &root, out_parent, &children,
&nchildren);
if (st && children)
XFree(children);
return st;
}
void Dock::embed_window(Window id)
{
if (id==0) return;
// Store window id in a linked list structure
struct straydata *p=traydata;
struct straydata *p1;
while (p!=0) {
// Sometimes the app will reuse the same id on next start?
// if (p->id == id)
// return;
p1=p;
p=p->next;
}
p = new straydata;
if (traydata == 0) { traydata=p; } else { p1->next = p; }
p->id = id;
p->next = 0;
Fl_Window *win = new Fl_Window(24, 24);
win->end();
this->add_to_tray(win);
win->show();
p->win = win;
// printf("id: %ld -> %ld\n", id, fl_xid(win));
XReparentWindow(fl_display, id, fl_xid(win), 0, 0);
// Hack to get KDE icons working...
Window parent = 0;
get_parent(id, &parent);
// printf(" ++ parent: %ld\n", parent);
XMapWindow(fl_display, id);
//Need to know when child dies
XSelectInput(fl_display, fl_xid(win), SubstructureNotifyMask);
Again, I don't know how that would impact xmonad.
-- John
More information about the xmonad
mailing list