LipstickCompositor::LipstickCompositor() : QWaylandCompositor(this), m_totalWindowCount(0), m_nextWindowId(1), m_homeActive(true), m_shaderEffect(0), m_fullscreenSurface(0), m_directRenderingActive(false), m_topmostWindowId(0), m_screenOrientation(Qt::PrimaryOrientation), m_displayState(new MeeGo::QmDisplayState(this)), m_retainedSelection(0) { setColor(Qt::black); setRetainedSelectionEnabled(true); if (m_instance) qFatal("LipstickCompositor: Only one compositor instance per process is supported"); m_instance = this; QObject::connect(this, SIGNAL(frameSwapped()), this, SLOT(windowSwapped())); QObject::connect(this, SIGNAL(beforeSynchronizing()), this, SLOT(clearUpdateRequest())); connect(m_displayState, SIGNAL(displayStateChanged(MeeGo::QmDisplayState::DisplayState)), this, SLOT(reactOnDisplayStateChanges(MeeGo::QmDisplayState::DisplayState))); QObject::connect(HomeApplication::instance(), SIGNAL(aboutToDestroy()), this, SLOT(homeApplicationAboutToDestroy())); m_orientationSensor = new QOrientationSensor(this); QObject::connect(m_orientationSensor, SIGNAL(readingChanged()), this, SLOT(setScreenOrientationFromSensor())); if (!m_orientationSensor->connectToBackend()) { qWarning() << "Could not connect to the orientation sensor backend"; } else { if (!m_orientationSensor->start()) qWarning() << "Could not start the orientation sensor"; } emit HomeApplication::instance()->homeActiveChanged(); QDesktopServices::setUrlHandler("http", this, "openUrl"); QDesktopServices::setUrlHandler("https", this, "openUrl"); QDesktopServices::setUrlHandler("mailto", this, "openUrl"); connect(QGuiApplication::clipboard(), SIGNAL(dataChanged()), SLOT(clipboardDataChanged())); }
QWindowCompositor::QWindowCompositor(QOpenGLWindow *window) : QWaylandCompositor(window) , m_window(window) , m_textureBlitter(0) , m_renderScheduler(this) , m_draggingWindow(0) , m_dragKeyIsPressed(false) , m_cursorSurface(0) , m_cursorHotspotX(0) , m_cursorHotspotY(0) , m_modifiers(Qt::NoModifier) { enableSubSurfaceExtension(); m_window->makeCurrent(); m_textureCache = new QOpenGLTextureCache(m_window->context()); m_textureBlitter = new TextureBlitter(); m_backgroundImage = makeBackgroundImage(QLatin1String(":/background.jpg")); m_renderScheduler.setSingleShot(true); connect(&m_renderScheduler,SIGNAL(timeout()),this,SLOT(render())); QOpenGLFunctions *functions = m_window->context()->functions(); functions->glGenFramebuffers(1, &m_surface_fbo); window->installEventFilter(this); setRetainedSelectionEnabled(true); setOutputGeometry(QRect(QPoint(0, 0), window->size())); setOutputRefreshRate(qRound(qGuiApp->primaryScreen()->refreshRate() * 1000.0)); }
void Compositor::create() { setRetainedSelectionEnabled(true); QWaylandCompositor::create(); // Add a valid mode for the output QWaylandOutput *output = defaultOutput(); QWaylandOutputMode defaultMode(QSize(output->window()->size()), 25000); output->addMode(defaultMode, true); output->setCurrentMode(defaultMode); QWaylandXdgShell *xdgShell = new QWaylandXdgShell(this); //xdgShell->setFocusPolicy(QWaylandShell::ManualFocus); // connect(xdgShell, &QWaylandXdgShell::xdgSurfaceCreated, this, &Compositor::onXdgSurfaceCreated); connect(xdgShell, &QWaylandXdgShell::toplevelCreated, this, &Compositor::onXdgToplevelCreated); connect(this, &QWaylandCompositor::surfaceCreated, this, &Compositor::onSurfaceCreated); QQuickWindow *defaultOutputWindow = static_cast<QQuickWindow*>(defaultOutput()->window()); connect(defaultOutputWindow, &QQuickWindow::afterRendering, this, &Compositor::readContent, Qt::DirectConnection); mSurfaceExtension = new QtWayland::SurfaceExtensionGlobal(this); connect(mSurfaceExtension, &QtWayland::SurfaceExtensionGlobal::extendedSurfaceReady, this, &Compositor::onExtendedSurfaceReady); QtWayland::QtKeyExtensionGlobal *pKeyExtension = new QtWayland::QtKeyExtensionGlobal(this); QWaylandXdgDecorationManagerV1 *mXdgDecorationManagerV1 = new QWaylandXdgDecorationManagerV1(); mXdgDecorationManagerV1->setExtensionContainer(this); mXdgDecorationManagerV1->initialize(); mXdgDecorationManagerV1->setPreferredMode(QWaylandXdgToplevel::ServerSideDecoration); mRecorder = new RecorderManager(this); }
LipstickCompositor::LipstickCompositor() : QWaylandQuickCompositor(this, 0, (QWaylandCompositor::ExtensionFlags)QWaylandCompositor::DefaultExtensions & ~QWaylandCompositor::QtKeyExtension) , m_totalWindowCount(0) , m_nextWindowId(1) , m_homeActive(true) , m_shaderEffect(0) , m_fullscreenSurface(0) , m_directRenderingActive(false) , m_topmostWindowId(0) , m_topmostWindowProcessId(0) , m_screenOrientation(Qt::PrimaryOrientation) , m_sensorOrientation(Qt::PrimaryOrientation) , m_displayState(0) , m_retainedSelection(0) , m_currentDisplayState(MeeGo::QmDisplayState::Unknown) , m_updatesEnabled(true) , m_completed(false) , m_onUpdatesDisabledUnfocusedWindowId(0) , m_keymap(0) , m_fakeRepaintTriggered(false) { setColor(Qt::black); setRetainedSelectionEnabled(true); addDefaultShell(); if (m_instance) qFatal("LipstickCompositor: Only one compositor instance per process is supported"); m_instance = this; m_orientationLock = new MGConfItem("/lipstick/orientationLock", this); connect(m_orientationLock, SIGNAL(valueChanged()), SIGNAL(orientationLockChanged())); // Load legacy settings from the config file and delete it from there QSettings legacySettings("nemomobile", "lipstick"); QString legacyOrientationKey("Compositor/orientationLock"); if (legacySettings.contains(legacyOrientationKey)) { m_orientationLock->set(legacySettings.value(legacyOrientationKey)); legacySettings.remove(legacyOrientationKey); } connect(this, SIGNAL(visibleChanged(bool)), this, SLOT(onVisibleChanged(bool))); QObject::connect(this, SIGNAL(afterRendering()), this, SLOT(windowSwapped())); QObject::connect(HomeApplication::instance(), SIGNAL(aboutToDestroy()), this, SLOT(homeApplicationAboutToDestroy())); connect(this, &QQuickWindow::afterRendering, this, &LipstickCompositor::readContent, Qt::DirectConnection); m_orientationSensor = new QOrientationSensor(this); QObject::connect(m_orientationSensor, SIGNAL(readingChanged()), this, SLOT(setScreenOrientationFromSensor())); if (!m_orientationSensor->connectToBackend()) { qWarning() << "Could not connect to the orientation sensor backend"; } else { if (!m_orientationSensor->start()) qWarning() << "Could not start the orientation sensor"; } emit HomeApplication::instance()->homeActiveChanged(); QDesktopServices::setUrlHandler("http", this, "openUrl"); QDesktopServices::setUrlHandler("https", this, "openUrl"); QDesktopServices::setUrlHandler("mailto", this, "openUrl"); connect(QGuiApplication::clipboard(), SIGNAL(dataChanged()), SLOT(clipboardDataChanged())); m_recorder = new LipstickRecorderManager; addGlobalInterface(m_recorder); addGlobalInterface(new AlienManagerGlobal); HwcRenderStage::initialize(this); setUpdatesEnabled(false); QTimer::singleShot(0, this, SLOT(initialize())); }