diff -p -up kdebase-3.5.8/kcontrol/kdm/kdm-appear.h.orig kdebase-3.5.8/kcontrol/kdm/kdm-appear.h --- kdebase-3.5.8/kcontrol/kdm/kdm-appear.h.orig 2005-09-29 10:24:25.000000000 -0300 +++ kdebase-3.5.8/kcontrol/kdm/kdm-appear.h 2008-01-07 15:03:56.000000000 -0200 @@ -26,6 +26,7 @@ #include <qimage.h> #include <qfileinfo.h> #include <qpushbutton.h> +#include <qgroupbox.h> #include <kcolorbutton.h> #include <kurl.h> @@ -57,6 +58,7 @@ public: void loadColorSchemes(KBackedComboBox *combo); void loadGuiStyles(KBackedComboBox *combo); + void loadThemes(KBackedComboBox *combo); void loadLanguageList(KLanguageButton *combo); bool eventFilter(QObject *, QEvent *); @@ -72,6 +74,8 @@ protected: private slots: void slotAreaRadioClicked(int id); void slotLogoButtonClicked(); + void slotThemeChanged(int id); + void slotUsethemeChanged(bool state); void changed(); private: @@ -85,11 +89,15 @@ private: QRadioButton *logoRadio; QLineEdit *xLineEdit; QLineEdit *yLineEdit; + QCheckBox * themecheck; KBackedComboBox *guicombo; + KBackedComboBox *themecombo; KBackedComboBox *colcombo; KBackedComboBox *echocombo; + QLabel * themeimagelabel; KLanguageButton *langcombo; - + //QHBoxLayout * themehlay; + QGroupBox *themegroup; }; #endif diff -p -up kdebase-3.5.8/kcontrol/kdm/kdm-appear.cpp.orig kdebase-3.5.8/kcontrol/kdm/kdm-appear.cpp --- kdebase-3.5.8/kcontrol/kdm/kdm-appear.cpp.orig 2007-11-16 10:30:07.000000000 -0200 +++ kdebase-3.5.8/kcontrol/kdm/kdm-appear.cpp 2008-01-07 16:53:08.000000000 -0200 @@ -26,6 +26,7 @@ #include <qbuttongroup.h> #include <qlabel.h> #include <qlayout.h> +#include <qcheckbox.h> #include <qradiobutton.h> #include <qwhatsthis.h> #include <qvalidator.h> @@ -56,16 +57,50 @@ KDMAppearanceWidget::KDMAppearanceWidget QVBoxLayout *vbox = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint(), "vbox"); - QGroupBox *group = new QGroupBox(i18n("Appearance"), this); + + // ThemeBox Starts here + + themecheck = new QCheckBox( i18n("Use Theme"), this ); + vbox->addWidget(themecheck); + connect(themecheck, SIGNAL(toggled(bool)), SLOT(changed())); + connect(themecheck, SIGNAL(toggled(bool)), SLOT(slotUsethemeChanged(bool))); + + themegroup = new QGroupBox(0, Vertical, i18n("Theme"), this); + vbox->addWidget(themegroup); + + QGridLayout * grid = new QGridLayout( themegroup->layout(), 4, 3, KDialog::spacingHint() ); + + grid->setColStretch(1, 1); + grid->setColStretch(2, 1); + + themecombo = new KBackedComboBox(themegroup); + loadThemes(themecombo); + themecombo->listBox()->sort(); + + QLabel * label1 = new QLabel(themecombo, i18n("KDM Theme:"),themegroup); + grid->addWidget(label1,1,0); + grid->addWidget(themecombo,1,1); + connect(themecombo, SIGNAL(activated(int)), SLOT(changed())); + connect(themecombo, SIGNAL(activated(int)), SLOT(slotThemeChanged(int))); + + themeimagelabel = new QLabel(themecombo,"",themegroup); + + grid->addMultiCellWidget(themeimagelabel,1,3,2,2,Qt::AlignRight); + + vbox->addStretch(1); + // ENDS HERE + + + QGroupBox * group = new QGroupBox(i18n("Appearance"), this); vbox->addWidget(group); - QGridLayout *grid = new QGridLayout( group, 5, 2, KDialog::marginHint(), + grid = new QGridLayout( group, 5, 2, KDialog::marginHint(), KDialog::spacingHint(), "grid"); grid->addRowSpacing(0, group->fontMetrics().height()); grid->setColStretch(0, 1); grid->setColStretch(1, 1); - QHBoxLayout *hlay = new QHBoxLayout( KDialog::spacingHint() ); + QHBoxLayout * hlay = new QHBoxLayout( KDialog::spacingHint() ); grid->addMultiCellLayout(hlay, 1,1, 0,1); greetstr_lined = new KLineEdit(group); QLabel *label = new QLabel(greetstr_lined, i18n("&Greeting:"), group); @@ -230,10 +265,25 @@ KDMAppearanceWidget::KDMAppearanceWidget } +void KDMAppearanceWidget::slotUsethemeChanged(bool state){ + + //themehlay->setEnabled(state); + //themecombo->setEnabled(state); + //themeimagelabel->setEnabled(state); + themegroup->setEnabled(state); + +} + + void KDMAppearanceWidget::makeReadOnly() { disconnect( logobutton, SIGNAL(clicked()), this, SLOT(slotLogoButtonClicked()) ); + + themecheck->setEnabled(false); + //themegroup->setEnabled(false); + themecombo->setEnabled(false); + themeimagelabel->setEnabled(false); logobutton->setAcceptDrops(false); greetstr_lined->setReadOnly(true); noneRadio->setEnabled(false); @@ -313,6 +363,35 @@ void KDMAppearanceWidget::loadGuiStyles( } } +void KDMAppearanceWidget::loadThemes(KBackedComboBox *combo) +{ + // XXX: Global + local schemes + + // Hardcoded Mandriva's theme + themecombo->insertItem( "/usr/share/mdk/dm/", i18n("<default>") ); + + QStringList list = KGlobal::dirs()-> + findAllResources("data", "kdm/themes/*/KdmGreeterTheme.desktop", false, true); + + for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) + { + KSimpleConfig config(*it, true); + + if (config.hasGroup("KdmGreeterTheme")){ + config.setGroup("KdmGreeterTheme"); + }else{ + config.setGroup("GdmGreeterTheme"); + } + + QString str2 = config.readEntry("Name"); + if (str2.isNull()) + continue; + QString aux = *it; + aux.remove(QRegExp("KdmGreeterTheme.desktop$")); + combo->insertItem( aux, config.readEntry("Name") ); + } +} + bool KDMAppearanceWidget::setLogo(QString logo) { QString flogo = logo.isEmpty() ? @@ -330,6 +409,22 @@ bool KDMAppearanceWidget::setLogo(QStrin return true; } +void KDMAppearanceWidget::slotThemeChanged(int id){ + //kdDebug() << "Teste: " << themecombo->currentId() << "screenshot.png" << endl; + // + KSimpleConfig config(themecombo->currentId() + "KdmGreeterTheme.desktop", true); + + if (config.hasGroup("KdmGreeterTheme")){ + config.setGroup("KdmGreeterTheme"); + }else{ + config.setGroup("GdmGreeterTheme"); + } + + QString fname = config.readEntry("Screenshot"); + QImage qi(themecombo->currentId() + fname); + qi = qi.scale(160,120, QImage::ScaleFree); + themeimagelabel->setPixmap(QPixmap(qi)); +} void KDMAppearanceWidget::slotLogoButtonClicked() { @@ -427,6 +522,8 @@ void KDMAppearanceWidget::save() config->writeEntry("GUIStyle", guicombo->currentId()); + config->writeEntry("Theme", themecombo->currentId()); + config->writeEntry("ColorScheme", colcombo->currentId()); config->writeEntry("EchoMode", echocombo->currentId()); @@ -434,6 +531,8 @@ void KDMAppearanceWidget::save() config->writeEntry("GreeterPos", xLineEdit->text() + ',' + yLineEdit->text()); config->writeEntry("Language", langcombo->current()); + + config->writeEntry("UseTheme", themecheck->isChecked()); } @@ -460,6 +559,9 @@ void KDMAppearanceWidget::load() // See if we use alternate logo setLogo(config->readEntry("LogoPixmap")); + // Check Theme + themecombo->setCurrentId(config->readEntry("Theme")); + slotThemeChanged(0); // Check the GUI type guicombo->setCurrentId(config->readEntry("GUIStyle")); @@ -480,15 +582,22 @@ void KDMAppearanceWidget::load() // get the language langcombo->setCurrentItem(config->readEntry("Language", "C")); + + themecheck->setChecked(config->readBoolEntry("UseTheme",true)); + slotUsethemeChanged(config->readBoolEntry("UseTheme",true)); } void KDMAppearanceWidget::defaults() { + themecheck->setChecked(true); + themecombo->setCurrentId( i18n("<default>") ); + slotThemeChanged(0); greetstr_lined->setText( i18n("Welcome to %s at %n") ); logoRadio->setChecked( true ); slotAreaRadioClicked( KdmLogo ); setLogo( "" ); + themecombo->setCurrentId(""); guicombo->setCurrentId( "" ); colcombo->setCurrentId( "" ); echocombo->setCurrentItem( "OneStar" );