コード例 #1
0
ファイル: ServerConfig.cpp プロジェクト: Wkryst/synergy
void::ServerConfig::addToFirstEmptyGrid(const QString &clientName)
{
	for (int i = 0; i < screens().size(); i++) {
		if (screens()[i].isNull()) {
			m_Screens[i].setName(clientName);
			break;
		}
	}
}
コード例 #2
0
ファイル: ServerConfig.cpp プロジェクト: Wkryst/synergy
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;
}
コード例 #3
0
ファイル: toplevel.cpp プロジェクト: CyberShadow/kwin
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();
    }
}
コード例 #4
0
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());
}
コード例 #5
0
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();
    }
}
コード例 #6
0
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);
    }
コード例 #7
0
ファイル: ServerConfig.cpp プロジェクト: Wkryst/synergy
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;
}
コード例 #8
0
ファイル: ServerConfig.cpp プロジェクト: Wkryst/synergy
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();
}
コード例 #9
0
ファイル: glxbackend.cpp プロジェクト: CyberShadow/kwin
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)
コード例 #10
0
ファイル: ServerConfig.cpp プロジェクト: Wkryst/synergy
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;
}
コード例 #11
0
ファイル: ServerConfig.cpp プロジェクト: Wkryst/synergy
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();
}
コード例 #12
0
ファイル: ServerConfig.cpp プロジェクト: Wkryst/synergy
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());
}
コード例 #13
0
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);
    }
}
コード例 #14
0
ファイル: toplevel.cpp プロジェクト: aarontc/kde-workspace
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();
}
コード例 #15
0
ファイル: splashapp.cpp プロジェクト: cmacq2/plasma-workspace
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"));

}
コード例 #16
0
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);
}
コード例 #17
0
ファイル: glxbackend.cpp プロジェクト: CyberShadow/kwin
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;
}
コード例 #18
0
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();
}
コード例 #19
0
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();
}
コード例 #20
0
ファイル: focuschain.cpp プロジェクト: fluxer/kde-workspace
Client *FocusChain::getForActivation(uint desktop) const
{
    return getForActivation(desktop, screens()->current());
}
コード例 #21
0
ファイル: focuschain.cpp プロジェクト: fluxer/kde-workspace
// 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()));
}
コード例 #22
0
ファイル: ServerConfig.cpp プロジェクト: Wkryst/synergy
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;
}