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 }
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 )); } } } }