void TaskManager::windowAdded(WId w ) { NETWinInfo info(qt_xdisplay(), w, qt_xrootwin(), NET::WMWindowType | NET::WMPid | NET::WMState ); #ifdef KDE_3_2 NET::WindowType windowType = info.windowType(NET_ALL_TYPES_MASK); #else NET::WindowType windowType = info.windowType(); #endif // ignore NET::Tool and other special window types if (windowType != NET::Normal && windowType != NET::Override && windowType != NET::Unknown && windowType != NET::Dialog) return; // ignore windows that want to be ignored by the taskbar if ((info.state() & NET::SkipTaskbar) != 0) { _skiptaskbar_windows.push_front( w ); // remember them though return; } Window transient_for_tmp; if (XGetTransientForHint(qt_xdisplay(), (Window) w, &transient_for_tmp)) { WId transient_for = (WId) transient_for_tmp; // check if it's transient for a skiptaskbar window if (_skiptaskbar_windows.contains(transient_for)) return; // lets see if this is a transient for an existing task if (transient_for != qt_xrootwin() && transient_for != 0 ) { Task* t = findTask(transient_for); if (t) { if (t->window() != w) { t->addTransient(w); // kdDebug() << "TM: Transient " << w << " added for Task: " << t->window() << endl; } return; } } } Task* t = new Task(w, this); _tasks.append(t); // kdDebug() << "TM: Task added for WId: " << w << endl; emit taskAdded(t); }