コード例 #1
0
void RandRConfig::load(void)
{
	if (!m_display->isValid()) {
		kDebug() << "Invalid display! Aborting config load.";
		return;
	}

	m_scene->clear();
	qDeleteAll(m_outputList);
	m_outputList.clear();
	m_configs.clear(); // objects deleted above
	
	OutputMap outputs = m_display->currentScreen()->outputs();
#ifdef HAS_RANDR_1_3
	RandROutput *primary = m_display->currentScreen()->primaryOutput();
	if (RandR::has_1_3)
	{
		// disconnect while we repopulate the combo box
		disconnect(primaryDisplayBox, SIGNAL(currentIndexChanged(int)), this, SIGNAL(changed()));
		disconnect(primaryDisplayBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updatePrimaryDisplay()));
		primaryDisplayBox->clear();
		primaryDisplayBox->addItem(i18nc("No display selected", "None"));
	}
#endif //HAS_RANDR_1_3

	// FIXME: adjust it to run on a multi screen system
	CollapsibleWidget *w;
	OutputGraphicsItem *o;
	OutputConfigList preceding;
	foreach(RandROutput *output, outputs)
	{
		OutputConfig *config = new OutputConfig(this, output, preceding, unifyOutputs->isChecked());
		m_configs.append( config );
		preceding.append( config );
		
		QString description = output->isConnected()
			? i18n("%1 (Connected)", output->name())
			: output->name();
		w = m_container->insertWidget(config, description);
		if(output->isConnected()) {
			w->setExpanded(true);
			kDebug() << "Output rect:" << output->rect();
		}
		connect(config, SIGNAL(connectedChanged(bool)), this, SLOT(outputConnectedChanged(bool)));
		m_outputList.append(w);
		
		o = new OutputGraphicsItem(config);
		m_scene->addItem(o);
		
		connect(o,    SIGNAL(itemChanged(OutputGraphicsItem*)), 
		        this, SLOT(slotAdjustOutput(OutputGraphicsItem*)));

		connect(config, SIGNAL(updateView()), this, SLOT(slotUpdateView()));
		connect(config, SIGNAL(optionChanged()), this, SIGNAL(changed()));

#ifdef HAS_RANDR_1_3
		if (RandR::has_1_3 && output->isConnected())
		{
			primaryDisplayBox->addItem(output->name(), QVariant::fromValue(output->id()));
			if (primary == output)
			{
				primaryDisplayBox->setCurrentIndex(primaryDisplayBox->count()-1);
			}
		}
#endif //HAS_RANDR_1_3
	}
コード例 #2
0
void OutputConfig::updatePositionListDelayed()
{
    positionLabel->setVisible(true);
    positionCombo->setVisible(true);
    positionOutputCombo->setVisible(true);
    absolutePosX->setVisible(true);
    absolutePosY->setVisible(true);

    disconnect(positionCombo,    SIGNAL(currentIndexChanged(int)), this, SLOT(setConfigDirty()));
    disconnect(positionOutputCombo,    SIGNAL(currentIndexChanged(int)), this, SLOT(setConfigDirty()));
    disconnect(absolutePosX, SIGNAL(valueChanged(int)), this, SLOT(setConfigDirty()));
    disconnect(absolutePosY, SIGNAL(valueChanged(int)), this, SLOT(setConfigDirty()));

    bool enable = !resolution().isEmpty();
    positionCombo->setEnabled( enable );
    positionLabel->setEnabled( enable );
    positionOutputCombo->setEnabled( enable );
    absolutePosX->setEnabled( enable );
    absolutePosY->setEnabled( enable );

    positionCombo->clear();
    positionOutputCombo->clear();

    OutputConfigList cleanList;
    foreach(OutputConfig *config, precedingOutputConfigs)
    {
        if( config->resolution().isEmpty())
        {
            continue; // ignore disabled outputs
        }
        cleanList.append(config);

    }
    Relation rel = Absolute;
    // FIXME: get default value from KConfig
    if (m_unified && !cleanList.isEmpty()) {
        positionCombo->addItem(OutputConfig::positionName(OutputConfig::SameAs), OutputConfig::SameAs);
    } else {
        for(int i = -1; i < 5; i++)
            positionCombo->addItem(OutputConfig::positionName((Relation)i), i);
    }

    int index = positionCombo->findData((int)rel);
    if(index != -1) {
        positionCombo->setCurrentIndex(index);
    } else {
        positionCombo->setCurrentIndex(positionCombo->findData((int)OutputConfig::SameAs));
    }

    /* Relative Output Name Configuration */
    foreach(OutputConfig *config, cleanList) {
        RandROutput* output = config->output();
        positionOutputCombo->addItem(QIcon(output->icon()), output->name(), (int)output->id());
        if (!m_unified) {
            for( int rel = -1; rel < 5; ++rel ) {
                if( isRelativeTo( m_output->rect(), QRect( config->position(), config->resolution()), (Relation) rel )) {
                    positionCombo->setCurrentIndex( positionCombo->findData( rel ));
                }
            }
        }
    }