/* Copyright (C) 2000,2002 Carsten Pfeiffer Copyright (C) 2005,2006 Olivier Goffart This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "knotify.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static const int COL_FILENAME = 1; K_PLUGIN_FACTORY( NotifyFactory, registerPlugin(); ) K_EXPORT_PLUGIN( NotifyFactory("kcmnotify") ) KCMKNotify::KCMKNotify(QWidget *parent, const QVariantList & ) : KCModule(parent) { setButtons( Help | Default | Apply ); setQuickHelp( i18n("

System Notifications

" "KDE allows for a great deal of control over how you " "will be notified when certain events occur. There are " "several choices as to how you are notified:" "
  • As the application was originally designed.
  • " "
  • With a beep or other noise.
  • " "
  • Via a popup dialog box with additional information.
  • " "
  • By recording the event in a logfile without " "any additional visual or audible alert.
  • " "
")); QVBoxLayout *layout = new QVBoxLayout( this ); layout->setMargin( 0 ); QLabel *label = new QLabel( i18n( "Event source:" ), this ); m_appCombo = new KComboBox( false, this ); m_appCombo->setSizeAdjustPolicy( QComboBox::AdjustToContents ); m_appCombo->setObjectName( QStringLiteral( "app combo" ) ); connect( m_appCombo, SIGNAL(activated(int)), SLOT(slotAppActivated(int)) ); QHBoxLayout *hbox = new QHBoxLayout(); layout->addLayout( hbox ); hbox->addWidget( label ); hbox->addWidget( m_appCombo, 10 ); m_notifyWidget = new KNotifyConfigWidget( this ); layout->addWidget( m_notifyWidget ); connect( m_notifyWidget, SIGNAL(changed(bool)), this, SIGNAL(changed(bool))); // This button isn't part of KNotifyConfigWidget so that one day we could have // another button next to it, for "Disable all sounds for all event sources" QHBoxLayout *buttonHLayout = new QHBoxLayout(); layout->addLayout(buttonHLayout); QPushButton *pushButton = new QPushButton(i18n("Disable sounds for all of these events"), this); pushButton->setFocusPolicy(Qt::TabFocus); // don't focus the button when clicking on it, so we can quickly select another app with the keyboard buttonHLayout->addWidget(pushButton); buttonHLayout->addStretch(); connect(pushButton, &QPushButton::clicked, this, &KCMKNotify::slotDisableAllSounds); m_appCombo->setFocus(); KAboutData* ab = new KAboutData( QStringLiteral("kcmknotify"), i18n("KNotify"), QStringLiteral("4.0"), i18n("System Notification Control Panel Module"), KAboutLicense::GPL, i18n("(c) 2002-2006 KDE Team")); ab->addAuthor( i18n("Olivier Goffart"), QString(), QStringLiteral("ogoffart@kde.org") ); ab->addAuthor( i18n("Carsten Pfeiffer"), QString(), QStringLiteral("pfeiffer@kde.org") ); ab->addCredit( i18n("Charles Samuels"), i18n("Original implementation"), QStringLiteral("charles@altair.dhs.org") ); setAboutData( ab ); } KCMKNotify::~KCMKNotify() { KConfig _config(QStringLiteral("knotifyrc"), KConfig::NoGlobals); KConfigGroup config(&_config, "Misc" ); config.writeEntry( "LastConfiguredApp", m_appCombo->currentText() ); config.sync(); } void KCMKNotify::slotAppActivated(const int &index) { QString text( m_appCombo->itemData(index).toString() ); m_notifyWidget->save(); m_notifyWidget->setApplication( text ); } void KCMKNotify::defaults() { // m_notifyWidget->resetDefaults( true ); // ask user } void KCMKNotify::load() { //setEnabled( false ); // setCursor( KCursor::waitCursor() ); m_appCombo->clear(); // m_notifyWidget->clear(); QStringList fullpaths = KGlobal::dirs()->findAllResources("data", QStringLiteral("*/*.notifyrc"), KStandardDirs::NoDuplicates ); foreach (const QString &fullPath, fullpaths ) { int slash = fullPath.lastIndexOf( '/' ); int dot = fullPath.lastIndexOf( '.' ) - 1; QString appname = slash < 0 ? QString() : fullPath.mid( slash + 1, dot - slash); if ( !appname.isEmpty() ) { KConfig config(fullPath, KConfig::NoGlobals, QStandardPaths::DataLocation); KConfigGroup globalConfig( &config, QLatin1String("Global") ); QString icon = globalConfig.readEntry(QStringLiteral("IconName"), QStringLiteral("misc")); QString description = globalConfig.readEntry( QStringLiteral("Comment"), appname ); m_appCombo->addItem( QIcon::fromTheme( icon ), description, appname ); } } m_appCombo->model()->sort(0); /* KConfig config( "knotifyrc", true, false ); config.setGroup( "Misc" ); QString appDesc = config.readEntry( "LastConfiguredApp", "KDE System Notifications" ); if this code gets enabled again, make sure to apply r494965 if ( !appDesc.isEmpty() ) m_appCombo->setCurrentItem( appDesc ); // sets the applicationEvents for KNotifyWidget slotAppActivated( m_appCombo->currentText() ); // unsetCursor(); // unsetting doesn't work. sigh. setEnabled( true ); emit changed( false ); */ if ( m_appCombo->count() > 0 ) { m_appCombo->setCurrentIndex(0); m_notifyWidget->setApplication( m_appCombo->itemData( 0 ).toString() ); } emit changed(false); } void KCMKNotify::slotDisableAllSounds() { m_notifyWidget->disableAllSounds(); } void KCMKNotify::save() { m_notifyWidget->save(); // will dcop knotify about its new config emit changed( true ); } #include "knotify.moc"