void::ServerConfig::addToFirstEmptyGrid(const QString &clientName) { for (int i = 0; i < screens().size(); i++) { if (screens()[i].isNull()) { m_Screens[i].setName(clientName); break; } } }
bool ServerConfig::findScreenName(const QString& name, int& index) { bool found = false; for (int i = 0; i < screens().size(); i++) { if (!screens()[i].isNull() && screens()[i].name().compare(name) == 0) { index = i; found = true; break; } } return found; }
void Toplevel::checkScreen() { if (screens()->count() == 1) { if (m_screen != 0) { m_screen = 0; emit screenChanged(); } return; } const int s = screens()->number(geometry().center()); if (s != m_screen) { m_screen = s; emit screenChanged(); } }
SimpleConfig::SimpleConfig(const vector<string> &other_tabs, const vector<SG_Alignment *> &other_screens) { vector<string> items(4 + other_tabs.size()); vector<SG_Alignment *> screens(4 + other_tabs.size()); items[0] = "Video"; items[1] = "Audio"; items[2] = "Mouse"; items[3] = "Keyboard"; screens[0] = BuildVideoScreen(); screens[1] = BuildAudioScreen(); screens[2] = BuildMouseScreen(); screens[3] = BuildKeyboardScreen(); copy(other_tabs.begin(), other_tabs.end(), items.begin() + 4); copy(other_screens.begin(), other_screens.end(), screens.begin() + 4); Resize(1, 16); SetItems(items); SetAreas(screens); mode = 0; oldmode = 0; timeleft = 0; disptime = 0; setback = false; confirm = true; rescue_thread = NULL; SetBackground(new SG_Panel()); }
void OSDIface::apply(void *d) { OSDUserData *data = (OSDUserData*)d; data->Position = cmbPos->currentItem(); data->Offset = atol(spnOffs->text().latin1()); data->Timeout = atol(spnTimeout->text().latin1()); data->Color = btnColor->color().rgb(); string f = edtFont->getFont(); string base = FontEdit::font2str(font(), false).latin1(); if (f == base) f = ""; set_str(&data->Font, f.c_str()); data->Shadow = chkShadow->isChecked(); data->Background = chkBackground->isChecked(); if (data->Background){ data->BgColor = btnBgColor->color().rgb(); }else{ data->BgColor = 0; } unsigned nScreens = screens(); if (nScreens <= 1){ data->Screen = 0; }else{ data->Screen = cmbScreen->currentItem(); } }
LxQtPanelApplication::LxQtPanelApplication(int& argc, char** argv) : LxQt::Application(argc, argv, true) { QCoreApplication::setApplicationName(QStringLiteral("lxqt-panel")); QCoreApplication::setApplicationVersion(LXQT_VERSION); QCommandLineParser parser; parser.setApplicationDescription(QStringLiteral("LXQt panel")); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption configFileOption(QStringList() << QStringLiteral("c") << QStringLiteral("config") << QStringLiteral("configfile"), QCoreApplication::translate("main", "Use alternate configuration file."), QCoreApplication::translate("main", "Configuration file")); parser.addOption(configFileOption); parser.process(*this); const QString configFile = parser.value(configFileOption); if (configFile.isEmpty()) mSettings = new LxQt::Settings(QStringLiteral("panel"), this); else mSettings = new LxQt::Settings(configFile, QSettings::IniFormat, this); // This is a workaround for Qt 5 bug #40681. Q_FOREACH(QScreen* screen, screens()) { connect(screen, &QScreen::destroyed, this, &LxQtPanelApplication::screenDestroyed); }
int ServerConfig::adjacentScreenIndex(int idx, int deltaColumn, int deltaRow) const { if (screens()[idx].isNull()) return -1; // if we're at the left or right end of the table, don't find results going further left or right if ((deltaColumn > 0 && (idx+1) % numColumns() == 0) || (deltaColumn < 0 && idx % numColumns() == 0)) return -1; int arrayPos = idx + deltaColumn + deltaRow * numColumns(); if (arrayPos >= screens().size() || arrayPos < 0) return -1; return arrayPos; }
void ServerConfig::loadSettings() { settings().beginGroup("internalConfig"); setNumColumns(settings().value("numColumns", 5).toInt()); setNumRows(settings().value("numRows", 3).toInt()); // we need to know the number of columns and rows before we can set up ourselves init(); haveHeartbeat(settings().value("hasHeartbeat", false).toBool()); setHeartbeat(settings().value("heartbeat", 5000).toInt()); setRelativeMouseMoves(settings().value("relativeMouseMoves", false).toBool()); setScreenSaverSync(settings().value("screenSaverSync", true).toBool()); setWin32KeepForeground(settings().value("win32KeepForeground", false).toBool()); haveSwitchDelay(settings().value("hasSwitchDelay", false).toBool()); setSwitchDelay(settings().value("switchDelay", 250).toInt()); haveSwitchDoubleTap(settings().value("hasSwitchDoubleTap", false).toBool()); setSwitchDoubleTap(settings().value("switchDoubleTap", 250).toInt()); setSwitchCornerSize(settings().value("switchCornerSize").toInt()); setIgnoreAutoConnectClient(settings().value("ignoreAutoConnectClient").toBool()); readSettings(settings(), switchCorners(), "switchCorner", false, NumSwitchCorners); int numScreens = settings().beginReadArray("screens"); Q_ASSERT(numScreens <= screens().size()); for (int i = 0; i < numScreens; i++) { settings().setArrayIndex(i); screens()[i].loadSettings(settings()); } settings().endArray(); int numHotkeys = settings().beginReadArray("hotkeys"); for (int i = 0; i < numHotkeys; i++) { settings().setArrayIndex(i); Hotkey h; h.loadSettings(settings()); hotkeys().append(h); } settings().endArray(); settings().endGroup(); }
void GlxBackend::present() { if (lastDamage().isEmpty()) return; const QSize &screenSize = screens()->size(); const QRegion displayRegion(0, 0, screenSize.width(), screenSize.height()); const bool fullRepaint = supportsBufferAge() || (lastDamage() == displayRegion); if (fullRepaint) { if (m_haveINTELSwapEvent) Compositor::self()->aboutToSwapBuffers(); if (haveSwapInterval) { if (gs_tripleBufferNeedsDetection) { glXWaitGL(); m_swapProfiler.begin(); } glXSwapBuffers(display(), glxWindow); if (gs_tripleBufferNeedsDetection) { glXWaitGL(); if (char result = m_swapProfiler.end()) { gs_tripleBufferUndetected = gs_tripleBufferNeedsDetection = false; if (result == 'd' && GLPlatform::instance()->driver() == Driver_NVidia) { // TODO this is a workaround, we should get __GL_YIELD set before libGL checks it if (qstrcmp(qgetenv("__GL_YIELD"), "USLEEP")) { options->setGlPreferBufferSwap(0); setSwapInterval(0); result = 0; // hint proper behavior qCWarning(KWIN_CORE) << "\nIt seems you are using the nvidia driver without triple buffering\n" "You must export __GL_YIELD=\"USLEEP\" to prevent large CPU overhead on synced swaps\n" "Preferably, enable the TripleBuffer Option in the xorg.conf Device\n" "For this reason, the tearing prevention has been disabled.\n" "See https://bugs.kde.org/show_bug.cgi?id=322060\n"; } } setBlocksForRetrace(result == 'd'); } } else if (blocksForRetrace()) { // at least the nvidia blob manages to swap async, ie. return immediately on double // buffering - what messes our timing calculation and leads to laggy behavior #346275 glXWaitGL(); } } else { waitSync(); glXSwapBuffers(display(), glxWindow); } if (supportsBufferAge()) { glXQueryDrawable(display(), glxWindow, GLX_BACK_BUFFER_AGE_EXT, (GLuint *) &m_bufferAge); } } else if (m_haveMESACopySubBuffer) { foreach (const QRect & r, lastDamage().rects()) { // convert to OpenGL coordinates int y = screenSize.height() - r.y() - r.height(); glXCopySubBufferMESA(display(), glxWindow, r.x(), y, r.width(), r.height()); } } else { // Copy Pixels (horribly slow on Mesa)
bool ServerConfig::fixNoServer(const QString& name, int& index) { bool fixed = false; if (screens()[serverDefaultIndex].isNull()) { m_Screens[serverDefaultIndex].setName(name); index = serverDefaultIndex; fixed = true; } return fixed; }
void ServerConfig::saveSettings() { settings().beginGroup("internalConfig"); settings().remove(""); settings().setValue("numColumns", numColumns()); settings().setValue("numRows", numRows()); settings().setValue("hasHeartbeat", hasHeartbeat()); settings().setValue("heartbeat", heartbeat()); settings().setValue("relativeMouseMoves", relativeMouseMoves()); settings().setValue("screenSaverSync", screenSaverSync()); settings().setValue("win32KeepForeground", win32KeepForeground()); settings().setValue("hasSwitchDelay", hasSwitchDelay()); settings().setValue("switchDelay", switchDelay()); settings().setValue("hasSwitchDoubleTap", hasSwitchDoubleTap()); settings().setValue("switchDoubleTap", switchDoubleTap()); settings().setValue("switchCornerSize", switchCornerSize()); settings().setValue("ignoreAutoConnectClient", ignoreAutoConnectClient()); writeSettings(settings(), switchCorners(), "switchCorner"); settings().beginWriteArray("screens"); for (int i = 0; i < screens().size(); i++) { settings().setArrayIndex(i); screens()[i].saveSettings(settings()); } settings().endArray(); settings().beginWriteArray("hotkeys"); for (int i = 0; i < hotkeys().size(); i++) { settings().setArrayIndex(i); hotkeys()[i].saveSettings(settings()); } settings().endArray(); settings().endGroup(); }
void ServerConfig::init() { switchCorners().clear(); screens().clear(); // m_NumSwitchCorners is used as a fixed size array. See Screen::init() for (int i = 0; i < NumSwitchCorners; i++) switchCorners() << false; // There must always be screen objects for each cell in the screens QList. Unused screens // are identified by having an empty name. for (int i = 0; i < numColumns() * numRows(); i++) addScreen(Screen()); }
OSDIface::OSDIface(QWidget *parent, void *d, OSDPlugin *plugin) : OSDIfaceBase(parent) { m_plugin = plugin; OSDUserData *data = (OSDUserData*)d; cmbPos->insertItem(i18n("Left-bottom")); cmbPos->insertItem(i18n("Left-top")); cmbPos->insertItem(i18n("Right-bottom")); cmbPos->insertItem(i18n("Right-top")); cmbPos->insertItem(i18n("Center-bottom")); cmbPos->insertItem(i18n("Center-top")); cmbPos->insertItem(i18n("Center")); cmbPos->setCurrentItem(data->Position); spnOffs->setMinValue(0); spnOffs->setMaxValue(500); spnOffs->setValue(data->Offset); spnTimeout->setMinValue(1); spnTimeout->setMaxValue(60); spnTimeout->setValue(data->Timeout); btnColor->setColor(data->Color); edtFont->setFont(data->Font); chkShadow->setChecked(data->Shadow != 0); if (data->Background){ chkBackground->setChecked(true); btnBgColor->setColor(data->BgColor); }else{ chkBackground->setChecked(false); } bgToggled(data->Background != 0); connect(chkBackground, SIGNAL(toggled(bool)), this, SLOT(bgToggled(bool))); unsigned nScreens = screens(); if (nScreens <= 1){ lblScreen->hide(); cmbScreen->hide(); }else{ for (unsigned i = 0; i < nScreens; i++) cmbScreen->insertItem(QString::number(i)); unsigned curScreen = data->Screen; if (curScreen >= nScreens) curScreen = 0; cmbScreen->setCurrentItem(curScreen); } }
Toplevel::Toplevel() : vis(NULL) , info(NULL) , ready_for_painting(true) , m_isDamaged(false) , m_client() , damage_handle(None) , is_shape(false) , effect_window(NULL) , m_clientMachine(new ClientMachine(this)) , wmClientLeaderWin(0) , unredirect(false) , unredirectSuspend(false) , m_damageReplyPending(false) , m_screen(0) { connect(this, SIGNAL(damaged(KWin::Toplevel*,QRect)), SIGNAL(needsRepaint())); connect(screens(), SIGNAL(changed()), SLOT(checkScreen())); connect(screens(), SIGNAL(countChanged(int,int)), SLOT(checkScreen())); setupCheckScreenConnection(); }
SplashApp::SplashApp(int &argc, char ** argv) : QGuiApplication(argc, argv), m_stage(0), m_testing(false), m_window(false), m_startTime(QDateTime::currentDateTime()) { QCommandLineParser parser; parser.addOption(QCommandLineOption(QStringLiteral("test"), QStringLiteral("Run in test mode"))); parser.addOption(QCommandLineOption(QStringLiteral("window"), QStringLiteral("Run in windowed mode"))); parser.addOption(QCommandLineOption(QStringLiteral("nofork"), QStringLiteral("Don't fork"))); parser.addOption(QCommandLineOption(QStringLiteral("pid"), QStringLiteral("Print the pid of the child process"))); parser.addHelpOption(); parser.process(*this); m_testing = parser.isSet(QStringLiteral("test")); m_window = parser.isSet(QStringLiteral("window")); foreach(QScreen* screen, screens()) adoptScreen(screen); setStage(QStringLiteral("initial")); QPixmap cursor(32, 32); cursor.fill(Qt::transparent); setOverrideCursor(QCursor(cursor)); if (m_testing) { m_timer.start(TEST_STEP_INTERVAL, this); } connect(this, &QGuiApplication::screenAdded, this, &SplashApp::adoptScreen); QDBusConnection dbus = QDBusConnection::sessionBus(); dbus.registerObject(QStringLiteral("/KSplash"), this, QDBusConnection::ExportScriptableSlots); dbus.registerService(QStringLiteral("org.kde.KSplash")); }
void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uint32_t version) { Q_UNUSED(version); struct ::wl_registry *registry = object(); if (interface == "wl_output") { mScreens.append(new QWaylandScreen(this, id)); } else if (interface == "wl_compositor") { mCompositor.init(registry, id); } else if (interface == "wl_shm") { mShm = static_cast<struct wl_shm *>(wl_registry_bind(registry, id, &wl_shm_interface,1)); } else if (interface == "wl_shell"){ mShell = new QtWayland::wl_shell(registry, id); } else if (interface == "wl_seat") { QWaylandInputDevice *inputDevice = new QWaylandInputDevice(this, id); mInputDevices.append(inputDevice); } else if (interface == "wl_data_device_manager") { mDndSelectionHandler = new QWaylandDataDeviceManager(this, id); } else if (interface == "qt_output_extension") { mOutputExtension = new QtWayland::qt_output_extension(registry, id); foreach (QPlatformScreen *screen, screens()) static_cast<QWaylandScreen *>(screen)->createExtendedOutput(); } else if (interface == "qt_surface_extension") { mWindowExtension = new QtWayland::qt_surface_extension(registry, id); } else if (interface == "qt_sub_surface_extension") { mSubSurfaceExtension = new QtWayland::qt_sub_surface_extension(registry, id); } else if (interface == "qt_touch_extension") { mTouchExtension = new QWaylandTouchExtension(this, id); } else if (interface == "qt_qtkey_extension") { mQtKeyExtension = new QWaylandQtKeyExtension(this, id); } foreach (Listener l, mRegistryListeners) (*l.listener)(l.data, registry, id, interface, version); }
bool GlxBackend::initBuffer() { if (!initFbConfig()) return false; if (overlayWindow()->create()) { xcb_connection_t * const c = connection(); // Try to create double-buffered window in the overlay xcb_visualid_t visual; glXGetFBConfigAttrib(display(), fbconfig, GLX_VISUAL_ID, (int *) &visual); if (!visual) { qCCritical(KWIN_CORE) << "The GLXFBConfig does not have an associated X visual"; return false; } xcb_colormap_t colormap = xcb_generate_id(c); xcb_create_colormap(c, false, colormap, rootWindow(), visual); const QSize size = screens()->size(); window = xcb_generate_id(c); xcb_create_window(c, visualDepth(visual), window, overlayWindow()->window(), 0, 0, size.width(), size.height(), 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, visual, XCB_CW_COLORMAP, &colormap); glxWindow = glXCreateWindow(display(), fbconfig, window, NULL); overlayWindow()->setup(window); } else { qCCritical(KWIN_CORE) << "Failed to create overlay window"; return false; } return true; }
void OSDWidget::showOSD(const QString &str, OSDUserData *data) { setFont(FontEdit::str2font(data->Font.ptr, baseFont)); QPainter p(this); p.setFont(font()); unsigned nScreen = data->Screen.value; unsigned nScreens = screens(); if (nScreen >= nScreens) nScreen = 0; QRect rcScreen = screenGeometry(nScreen); rcScreen = QRect(0, 0, rcScreen.width() - SHADOW_OFFS - XOSD_MARGIN * 2 - data->Offset.value, rcScreen.height() - SHADOW_OFFS - XOSD_MARGIN * 2 - data->Offset.value); QRect rc = p.boundingRect(rcScreen, AlignLeft | AlignTop | WordBreak, str); p.end(); int x = rcScreen.left(); int y = rcScreen.top(); int w = rc.width() + 1; int h = rc.height() + 1; if (data->Shadow.bValue){ w += SHADOW_OFFS; h += SHADOW_OFFS; } if (data->Background.bValue){ w += XOSD_MARGIN * 2; h += XOSD_MARGIN * 2; } resize(QSize(w, h)); switch (data->Position.value){ case 1: move(x + data->Offset.value, y + data->Offset.value); break; case 2: move(x + rcScreen.width() - data->Offset.value - w, y + rcScreen.height() - data->Offset.value - h); break; case 3: move(x + rcScreen.width() - data->Offset.value - w, y + data->Offset.value); break; case 4: move(x + (rcScreen.width() - w) / 2, y + rcScreen.height() - data->Offset.value - h); break; case 5: move(x + (rcScreen.width() - w) / 2, y + data->Offset.value); break; case 6: move(x + (rcScreen.width() - w) / 2, y + (rcScreen.height() - h) /2); break; default: move(x + data->Offset.value, y + rcScreen.height() - data->Offset.value - h); } if (!data->Background.bValue || data->Shadow.bValue){ QBitmap mask(w, h); p.begin(&mask); #ifdef WIN32 QColor bg(255, 255, 255); QColor fg(0, 0, 0); #else QColor bg(0, 0, 0); QColor fg(255, 255, 255); #endif p.fillRect(0, 0, w, h, bg); if (data->Background.bValue){ p.fillRect(0, 0, w - SHADOW_OFFS, h - SHADOW_OFFS, fg); p.fillRect(SHADOW_OFFS, SHADOW_OFFS, w - SHADOW_OFFS, h - SHADOW_OFFS, fg); }else{ p.setPen(fg); p.setFont(font()); if (data->Shadow.bValue){ rc = QRect(SHADOW_OFFS, SHADOW_OFFS, w - SHADOW_OFFS, h - SHADOW_OFFS); p.drawText(rc, AlignLeft | AlignTop | WordBreak, str); rc = QRect(0, 0, w - SHADOW_OFFS, h - SHADOW_OFFS); p.drawText(rc, AlignLeft | AlignTop | WordBreak, str); }else{ rc = QRect(0, 0, w, h); p.drawText(rc, AlignLeft | AlignTop | WordBreak, str); } } p.end(); setMask(mask); } qApp->syncX(); QPixmap pict = QPixmap::grabWindow(QApplication::desktop()->winId(), this->x(), this->y(), width(), height()); intensity(pict, -0.50f); p.begin(&pict); rc = QRect(0, 0, w, h); if (data->Background.bValue){ if (data->Shadow.bValue){ w -= SHADOW_OFFS; h -= SHADOW_OFFS; rc = QRect(0, 0, w, h); } QBrush bg(data->BgColor.value); p.fillRect(rc, bg); #if QT_VERSION < 300 style().drawPopupPanel(&p, 0, 0, w, h, colorGroup(), 2, &bg); #else style().drawPrimitive(QStyle::PE_PanelPopup, &p, rc, colorGroup()); #endif rc = QRect(XOSD_MARGIN, XOSD_MARGIN, w - XOSD_MARGIN * 2, h - XOSD_MARGIN * 2); } p.setFont(font()); p.setPen(QColor(data->Color.value)); p.drawText(rc, AlignLeft | AlignTop | WordBreak, str); p.end(); bgPict = pict; QWidget::show(); raise(); }
void OSDWidget::showOSD(const QString &str, OSDUserData *data) { if (isScreenSaverActive()){ hide(); return; } setFont(FontEdit::str2font(data->Font.ptr, baseFont)); QPainter p(this); p.setFont(font()); unsigned nScreen = data->Screen.value; unsigned nScreens = screens(); if (nScreen >= nScreens) nScreen = 0; QRect rcScreen = screenGeometry(nScreen); rcScreen = QRect(0, 0, rcScreen.width() - SHADOW_OFFS - XOSD_MARGIN * 2 - data->Offset.value, rcScreen.height() - SHADOW_OFFS - XOSD_MARGIN * 2 - data->Offset.value); QRect rc = p.boundingRect(rcScreen, AlignLeft | AlignTop | WordBreak, str); p.end(); if (data->EnableMessageShowContent.bValue && data->ContentLines.value){ QFontMetrics fm(font()); int maxHeight = fm.height() * (data->ContentLines.value + 1); if (rc.height() > maxHeight) rc.setHeight(maxHeight); } int x = rcScreen.left(); int y = rcScreen.top(); int w = rc.width() + 1; int h = rc.height() + 1; int text_y = 0; if (data->Background.bValue){ w += XOSD_MARGIN * 2; h += XOSD_MARGIN * 2; if (m_button == NULL){ m_button = new QPushButton("", this); m_button->setPixmap(QPixmap((const char **)close_h_xpm)); connect(m_button, SIGNAL(clicked()), this, SLOT(slotCloseClick())); } QSize s = m_button->sizeHint(); m_button->resize(s.height() - 4, s.height() - 4); m_button->move(w - m_button->width() - 3, 2); text_y = m_button->height() + 4; h += text_y; m_button->show(); }else{ if (m_button){ delete m_button; m_button = NULL; } } if (data->Shadow.bValue){ w += SHADOW_OFFS; h += SHADOW_OFFS; } resize(QSize(w, h)); switch (data->Position.value){ case 1: move(x + data->Offset.value, y + data->Offset.value); break; case 2: move(x + rcScreen.width() - data->Offset.value - w, y + rcScreen.height() - data->Offset.value - h); break; case 3: move(x + rcScreen.width() - data->Offset.value - w, y + data->Offset.value); break; case 4: move(x + (rcScreen.width() - w) / 2, y + rcScreen.height() - data->Offset.value - h); break; case 5: move(x + (rcScreen.width() - w) / 2, y + data->Offset.value); break; case 6: move(x + (rcScreen.width() - w) / 2, y + (rcScreen.height() - h) /2); break; default: move(x + data->Offset.value, y + rcScreen.height() - data->Offset.value - h); } if (!data->Background.bValue || data->Shadow.bValue){ QBitmap mask(w, h); p.begin(&mask); #ifdef WIN32 QColor bg(255, 255, 255); QColor fg(0, 0, 0); #else QColor bg(0, 0, 0); QColor fg(255, 255, 255); #endif p.fillRect(0, 0, w, h, bg); if (data->Background.bValue){ p.fillRect(0, 0, w - SHADOW_OFFS, h - SHADOW_OFFS, fg); p.fillRect(SHADOW_OFFS, SHADOW_OFFS, w - SHADOW_OFFS, h - SHADOW_OFFS, fg); }else{ p.setPen(fg); p.setFont(font()); if (data->Shadow.bValue){ rc = QRect(SHADOW_OFFS, SHADOW_OFFS, w - SHADOW_OFFS, h - SHADOW_OFFS); p.drawText(rc, AlignLeft | AlignTop | WordBreak, str); rc = QRect(0, 0, w - SHADOW_OFFS, h - SHADOW_OFFS); p.drawText(rc, AlignLeft | AlignTop | WordBreak, str); }else{ rc = QRect(0, 0, w, h); p.drawText(rc, AlignLeft | AlignTop | WordBreak, str); } } p.end(); setMask(mask); } qApp->syncX(); QPixmap pict = QPixmap::grabWindow(QApplication::desktop()->winId(), this->x(), this->y(), width(), height()); intensity(pict, -0.50f); p.begin(&pict); rc = QRect(0, 0, w, h); if (data->Background.bValue){ if (data->Shadow.bValue){ w -= SHADOW_OFFS; h -= SHADOW_OFFS; rc = QRect(0, 0, w, h); } QBrush bg(data->BgColor.value); p.fillRect(rc, bg); #if COMPAT_QT_VERSION < 0x030000 style().drawPopupPanel(&p, 0, 0, w, h, colorGroup(), 2, &bg); #else style().drawPrimitive(QStyle::PE_PanelPopup, &p, rc, colorGroup()); #endif rc = QRect(XOSD_MARGIN, XOSD_MARGIN, w - XOSD_MARGIN * 2, h - XOSD_MARGIN * 2); } p.setFont(font()); p.setPen(QColor(data->Color.value)); rc.setTop(text_y); p.drawText(rc, AlignLeft | AlignTop | WordBreak, str); p.end(); bgPict = pict; QWidget::show(); raise(); }
Client *FocusChain::getForActivation(uint desktop) const { return getForActivation(desktop, screens()->current()); }
// copied from activation.cpp bool FocusChain::isUsableFocusCandidate(Client *c, Client *prev) const { return c != prev && c->isShown(false) && c->isOnCurrentDesktop() && (!m_separateScreenFocus || c->isOnScreen(prev ? prev->screen() : screens()->current())); }
int ServerConfig::autoAddScreen(const QString name) { int serverIndex = -1; int targetIndex = -1; if (!findScreenName(m_ServerName, serverIndex)) { if (!fixNoServer(m_ServerName, serverIndex)) { return kAutoAddScreenManualServer; } } if (findScreenName(name, targetIndex)) { // already exists. return kAutoAddScreenIgnore; } int result = showAddClientDialog(name); if (result == kAddClientIgnore) { return kAutoAddScreenIgnore; } if (result == kAddClientOther) { addToFirstEmptyGrid(name); return kAutoAddScreenManualClient; } bool success = false; int startIndex = serverIndex; int offset = 1; int dirIndex = 0; if (result == kAddClientLeft) { offset = -1; dirIndex = 1; } else if (result == kAddClientUp) { offset = -5; dirIndex = 2; } else if (result == kAddClientDown) { offset = 5; dirIndex = 3; } int idx = adjacentScreenIndex(startIndex, neighbourDirs[dirIndex].x, neighbourDirs[dirIndex].y); while (idx != -1) { if (screens()[idx].isNull()) { m_Screens[idx].setName(name); success = true; break; } startIndex += offset; idx = adjacentScreenIndex(startIndex, neighbourDirs[dirIndex].x, neighbourDirs[dirIndex].y); } if (!success) { addToFirstEmptyGrid(name); return kAutoAddScreenManualClient; } saveSettings(); return kAutoAddScreenOk; }