static void ManagerEventHandler(ClientData clientData, XEvent *eventPtr) { Ttk_Manager *mgr = clientData; int i; switch (eventPtr->type) { case ConfigureNotify: RecomputeLayout(mgr); break; case MapNotify: for (i = 0; i < mgr->nSlaves; ++i) { Ttk_Slave *slave = mgr->slaves[i]; if (slave->flags & SLAVE_MAPPED) { Tk_MapWindow(slave->slaveWindow); } } break; case UnmapNotify: for (i = 0; i < mgr->nSlaves; ++i) { Ttk_Slave *slave = mgr->slaves[i]; Tk_UnmapWindow(slave->slaveWindow); } break; } }
////////////////// // Remove tab at given index. // BOOL CFolderTabCtrl::RemoveItem(int iPos) { POSITION pos = m_lsTabs.FindIndex(iPos); if (pos) { CFolderTab* pTab = (CFolderTab*)m_lsTabs.GetAt(pos); m_lsTabs.RemoveAt(pos); delete pTab; } if (m_lsTabs.GetCount() > 0) { RecomputeLayout(); } return pos!=NULL; }
/* ++ ManagerIdleProc -- * DoWhenIdle procedure for deferred updates. */ static void ManagerIdleProc(ClientData clientData) { Ttk_Manager *mgr = clientData; mgr->flags &= ~MGR_UPDATE_PENDING; if (mgr->flags & MGR_RESIZE_REQUIRED) { RecomputeSize(mgr); } if (mgr->flags & MGR_RELAYOUT_REQUIRED) { if (mgr->flags & MGR_UPDATE_PENDING) { /* RecomputeSize has scheduled another update; relayout later */ return; } RecomputeLayout(mgr); } }
////////////////// // Add a tab. // int CFolderTabCtrl::AddItem(LPCTSTR lpszText) { m_lsTabs.AddTail(new CFolderTab(lpszText)); RecomputeLayout(); return m_lsTabs.GetCount() - 1; }