void ProgressFloatItem::handleProgress( int current, int queued ) { m_jobMutex.lock(); if ( current < 1 ) { m_totalJobs = 0; m_completedJobs = 0; } else { m_totalJobs = qMax<int>( m_totalJobs, queued + current ); } m_jobMutex.unlock(); if ( enabled() ) { if ( !active() && !m_progressShowTimer.isActive() && m_totalJobs > 0 ) { m_progressShowTimer.start(); m_progressHideTimer.stop(); } else if ( active() ) { if ( m_totalJobs < 1 || m_completedJobs == m_totalJobs ) { m_progressShowTimer.stop(); m_progressHideTimer.start(); } update(); scheduleRepaint(); } m_completed = 1.0; if ( m_totalJobs && m_completedJobs <= m_totalJobs ) { m_completed = (qreal) m_completedJobs / (qreal) m_totalJobs; } } }
void Compositor::startupWithWorkspace() { if (!m_starting) { return; } Q_ASSERT(m_scene); connect(workspace(), &Workspace::destroyed, this, [this] { compositeTimer.stop(); }); claimCompositorSelection(); m_xrrRefreshRate = KWin::currentRefreshRate(); fpsInterval = options->maxFpsInterval(); if (m_scene->syncsToVBlank()) { // if we do vsync, set the fps to the next multiple of the vblank rate vBlankInterval = milliToNano(1000) / m_xrrRefreshRate; fpsInterval = qMax((fpsInterval / vBlankInterval) * vBlankInterval, vBlankInterval); } else vBlankInterval = milliToNano(1); // no sync - DO NOT set "0", would cause div-by-zero segfaults. m_timeSinceLastVBlank = fpsInterval - (options->vBlankTime() + 1); // means "start now" - we don't have even a slight idea when the first vsync will occur scheduleRepaint(); xcb_composite_redirect_subwindows(connection(), rootWindow(), XCB_COMPOSITE_REDIRECT_MANUAL); new EffectsHandlerImpl(this, m_scene); // sets also the 'effects' pointer connect(Workspace::self(), &Workspace::deletedRemoved, m_scene, &Scene::windowDeleted); connect(effects, SIGNAL(screenGeometryChanged(QSize)), SLOT(addRepaintFull())); addRepaintFull(); foreach (Client * c, Workspace::self()->clientList()) { c->setupCompositing(); c->getShadow(); }
void ProgressFloatItem::removeProgressItem() { m_jobMutex.lock(); ++m_completedJobs; m_jobMutex.unlock(); if ( enabled() ) { if ( !active() && !m_progressShowTimer.isActive() ) { m_progressShowTimer.start(); m_progressHideTimer.stop(); } else if ( active() ) { update(); scheduleRepaint(); } } }