bool DockContainer::x11Event( XEvent *e ) { switch( e->type ) { case DestroyNotify: if( e->xdestroywindow.window == _embeddedWinId || _embeddedWinId == 0) { _embeddedWinId = 0; emit embeddedWindowDestroyed(this); } break; case UnmapNotify: if ( e->xunmap.window == _embeddedWinId ) { kdDebug() << "Unmap Notify !!! I hate smart dockapps as wmpinboard " << command() << endl; _embeddedWinId = 0; } break; case ReparentNotify: if( _embeddedWinId && (e->xreparent.window == _embeddedWinId) && (e->xreparent.parent != winId()) ) { _embeddedWinId = 0; } else if( e->xreparent.parent == winId() ) { _embeddedWinId = e->xreparent.window; embed( _embeddedWinId ); } break; } return false; }
void DockContainer::kill() { if ( _embeddedWinId ) { XKillClient( qt_xdisplay(), _embeddedWinId ); _embeddedWinId = 0; // in case the window does not exist anymore.. } else emit embeddedWindowDestroyed(this); /* enable killing of empty windows.. */ }
void Systemtray::systemTrayWindowAdded( WId w ) { //bool content = false; QXEmbed *emb; no_of_systray_windows++; emit updated(); emb = new QXEmbed(this); emb->setAutoDelete(false); //emb->setBackgroundMode(X11ParentRelative); emb->setBackgroundMode(FixedPixmap); connect(emb, TQT_SIGNAL(embeddedWindowDestroyed()), TQT_SLOT(updateTrayWindows())); m_Wins.append(emb); emb->embed(w); emb->resize(24, 24); emb->show(); layoutSystray(); }
void Systemtray::initSystray( void ) { bool existing = false; //bool content = false; Display *display = tqt_xdisplay(); no_of_systray_windows = 0; twin_module = new KWinModule(); systemTrayWindows = twin_module->systemTrayWindows(); TQValueList<WId>::ConstIterator end(systemTrayWindows.end()); for (TQValueList<WId>::ConstIterator it = systemTrayWindows.begin(); it!=end; ++it) { no_of_systray_windows++; QXEmbed *emb; emb = new QXEmbed(this); emb->setBackgroundMode(FixedPixmap); emb->setAutoDelete(false); connect(emb, TQT_SIGNAL(embeddedWindowDestroyed()), TQT_SLOT(updateTrayWindows())); m_Wins.append(emb); emb->embed(*it); emb->resize(24, 24); emb->show(); existing = true; } updateTrayWindows(); connect(twin_module, TQT_SIGNAL(systemTrayWindowAdded(WId)), TQT_SLOT(systemTrayWindowAdded(WId))); connect(twin_module, TQT_SIGNAL(systemTrayWindowRemoved(WId)), TQT_SLOT(systemTrayWindowRemoved(WId))); TQCString screenstr; screenstr.setNum(tqt_xscreen()); TQCString trayatom = "_NET_SYSTEM_TRAY_S" + screenstr; net_system_tray_selection = XInternAtom( display, trayatom, false ); net_system_tray_opcode = XInternAtom( display, "_NET_SYSTEM_TRAY_OPCODE", false ); // Acquire system tray XSetSelectionOwner( display, net_system_tray_selection, winId(), CurrentTime ); WId root = tqt_xrootwin(); if (XGetSelectionOwner(display, net_system_tray_selection) == winId()) { XClientMessageEvent xev; xev.type = ClientMessage; xev.window = root; xev.message_type = XInternAtom(display, "MANAGER", false); xev.format = 32; xev.data.l[0] = CurrentTime; xev.data.l[1] = net_system_tray_selection; xev.data.l[2] = winId(); xev.data.l[3] = 0; /* Manager specific data */ xev.data.l[4] = 0; /* Manager specific data */ XSendEvent( display, root, false, StructureNotifyMask, (XEvent *)&xev ); } }