void CMediaManager::AddAutoSource(const CMediaSource &share, bool bAutorun) { CMediaSourceSettings::GetInstance().AddShare("files", share); CMediaSourceSettings::GetInstance().AddShare("video", share); CMediaSourceSettings::GetInstance().AddShare("pictures", share); CMediaSourceSettings::GetInstance().AddShare("music", share); CMediaSourceSettings::GetInstance().AddShare("programs", share); CGUIMessage msg(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_UPDATE_SOURCES); CGUIComponent *gui = CServiceBroker::GetGUI(); if (gui) gui->GetWindowManager().SendThreadMessage( msg ); #ifdef HAS_DVD_DRIVE if(bAutorun) MEDIA_DETECT::CAutorun::ExecuteAutorun(share.strPath); #endif }
void CWinSystemRpiGLESContext::PresentRenderImpl(bool rendered) { CGUIComponent *gui = CServiceBroker::GetGUI(); if (gui) CWinSystemRpi::SetVisible(gui->GetWindowManager().HasVisibleControls() || g_application.GetAppPlayer().IsRenderingGuiLayer()); if (m_delayDispReset && m_dispResetTimer.IsTimePast()) { m_delayDispReset = false; CSingleLock lock(m_resourceSection); // tell any shared resources for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i) (*i)->OnResetDisplay(); } if (!rendered) return; if (!m_pGLContext.TrySwapBuffers()) { CEGLUtils::LogError("eglSwapBuffers failed"); throw std::runtime_error("eglSwapBuffers failed"); } }
void CGraphicContext::SetVideoResolutionInternal(RESOLUTION res, bool forceUpdate) { RESOLUTION lastRes = m_Resolution; // If the user asked us to guess, go with desktop if (!IsValidResolution(res)) { res = RES_DESKTOP; } // If we are switching to the same resolution and same window/full-screen, no need to do anything if (!forceUpdate && res == lastRes && m_bFullScreenRoot == CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_fullScreen) { return; } if (res >= RES_DESKTOP) { CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_fullScreen = true; m_bFullScreenRoot = true; } else { CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_fullScreen = false; m_bFullScreenRoot = false; } CSingleLock lock(*this); // FIXME Wayland windowing needs some way to "deny" resolution updates since what Kodi // requests might not get actually set by the compositor. // So in theory, m_iScreenWidth etc. would not need to be updated at all before the // change is confirmed. // But other windowing code expects these variables to be already set when // SetFullScreen() is called, so set them anyway and remember the old values. int origScreenWidth = m_iScreenWidth; int origScreenHeight = m_iScreenHeight; float origFPSOverride = m_fFPSOverride; UpdateInternalStateWithResolution(res); RESOLUTION_INFO info_org = CDisplaySettings::GetInstance().GetResolutionInfo(res); bool switched = false; if (CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_fullScreen) { #if defined (TARGET_DARWIN) || defined (TARGET_WINDOWS) bool blankOtherDisplays = CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool(CSettings::SETTING_VIDEOSCREEN_BLANKDISPLAYS); switched = CServiceBroker::GetWinSystem()->SetFullScreen(true, info_org, blankOtherDisplays); #else switched = CServiceBroker::GetWinSystem()->SetFullScreen(true, info_org, false); #endif } else if (lastRes >= RES_DESKTOP ) switched = CServiceBroker::GetWinSystem()->SetFullScreen(false, info_org, false); else switched = CServiceBroker::GetWinSystem()->ResizeWindow(info_org.iWidth, info_org.iHeight, -1, -1); if (switched) { m_scissors.SetRect(0, 0, (float)m_iScreenWidth, (float)m_iScreenHeight); // make sure all stereo stuff are correctly setup SetStereoView(RENDER_STEREO_VIEW_OFF); // update anyone that relies on sizing information CServiceBroker::GetInputManager().SetMouseResolution(info_org.iWidth, info_org.iHeight, 1, 1); CGUIComponent *gui = CServiceBroker::GetGUI(); if (gui) gui->GetWindowManager().SendMessage(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_WINDOW_RESIZE); } else { // Reset old state m_iScreenWidth = origScreenWidth; m_iScreenHeight = origScreenHeight; m_fFPSOverride = origFPSOverride; if (IsValidResolution(lastRes)) { m_Resolution = lastRes; } else { // FIXME Resolution has become invalid // This happens e.g. when switching monitors and the new monitor has fewer // resolutions than the old one. Fall back to RES_DESKTOP and hope that // the real resolution is set soon. // Again, must be fixed as part of a greater refactor. m_Resolution = RES_DESKTOP; } } }