[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