diff options
Diffstat (limited to 'kdepasswd/kcm')
44 files changed, 1463 insertions, 0 deletions
diff --git a/kdepasswd/kcm/Makefile.am b/kdepasswd/kcm/Makefile.am new file mode 100644 index 000000000..fee3b3cd2 --- /dev/null +++ b/kdepasswd/kcm/Makefile.am @@ -0,0 +1,20 @@ +SUBDIRS = pics +kde_module_LTLIBRARIES = kcm_useraccount.la +kcm_useraccount_la_SOURCES = main_widget.ui chfnprocess.cpp \ + main.cpp chfacedlg.cpp settings.kcfgc pass.kcfgc +kcm_useraccount_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_useraccount_la_LIBADD = $(top_builddir)/libkonq/libkonq.la + +AM_CPPFLAGS = -I$(top_srcdir)/libkonq $(all_includes) + +kde_kcfg_DATA = kcm_useraccount.kcfg kcm_useraccount_pass.kcfg + +METASOURCES = AUTO + +noinst_HEADERS = main.h chfnprocess.h chfacedlg.h + +xdg_apps_DATA = kcm_useraccount.desktop + + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/useraccount.pot diff --git a/kdepasswd/kcm/README b/kdepasswd/kcm/README new file mode 100644 index 000000000..563ce7e53 --- /dev/null +++ b/kdepasswd/kcm/README @@ -0,0 +1,27 @@ + +Thu Jan 29 00:34:49 CET 2004 +Frans Englich <frans.englich@telia.com> + +KCM useraccount is a merge of the former kdebase/kcontrol/email +and kdeutils/kdepasswd/userinfo/. They existed in KDE 3.1, at least. + +As a bonus, on top of saving the stuff with KEMailSettings it tries +also to save the realname to /etc/passwd. This is done via chfn, wrapped +in ChfnProcess, chfnprocess.h - which is the place to ifdef/modify so +other systems/ychfn/whatever works. +/etc/passwd is not the primary goal, the focus is on KDE's settings. The KCM +tries to hide the implementation differences and play nice with the +user - keep that in mind. + +The "face" term is rather scary.. For example I don't think the user immediately +associate to the login image when a phrase such as this is thrown in the face: +"Your administrator has disallowed changing your face". Keep it in mind.. + +Some information which was available in userinfo is left out - the home +folder and shell info. A typical user is not interested in the info nor +knows what it means. And the advanced users already knows it. + +If further information is added, think twice if it should not be +added in a "Details..." dialog - is it useful for the majority or not? +The SMTP setting as well as UID should be moved to that dialog too, IMO. + diff --git a/kdepasswd/kcm/chfacedlg.cpp b/kdepasswd/kcm/chfacedlg.cpp new file mode 100644 index 000000000..1894ac814 --- /dev/null +++ b/kdepasswd/kcm/chfacedlg.cpp @@ -0,0 +1,188 @@ +/** + * Copyright 2003 Braden MacDonald <bradenm_k@shaw.ca> + * Copyright 2003 Ravikiran Rajagopal <ravi@ee.eng.ohio-state.edu> + * + * 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 General Public License + * along with this program; if not, write to the Free Software + * + * + * Please see the README + * + */ + +/** + * @file UserInfo's Dialog for changing your face. + * @author Braden MacDonald + */ + +#include <qstring.h> +#include <qlayout.h> +#include <qlabel.h> +#include <qpixmap.h> +#include <qimage.h> +#include <qpushbutton.h> +#include <qdir.h> +#include <qcheckbox.h> + +#include <kdialogbase.h> +#include <klocale.h> +#include <kfiledialog.h> +#include <kiconview.h> +#include <kimagefilepreview.h> +#include <kimageio.h> +#include <kmessagebox.h> +#include <konq_operations.h> +#include <kurl.h> + +#include "chfacedlg.h" +#include "settings.h" // KConfigXT + + + +/** + * TODO: It would be nice if the widget were in a .ui + */ +ChFaceDlg::ChFaceDlg(const QString& picsdir, QWidget *parent, const char *name, bool modal) + : KDialogBase( parent, name, modal, i18n("Change your Face"), Ok|Cancel, Ok, true ) +{ + QWidget *page = new QWidget(this); + setMainWidget( page ); + + QVBoxLayout *top = new QVBoxLayout(page, 0, spacingHint()); + + QLabel *header = new QLabel( i18n("Select a new face:"), page ); + top->addWidget( header ); + + m_FacesWidget = new KIconView( page ); + m_FacesWidget->setSelectionMode( QIconView::Single ); + m_FacesWidget->setItemsMovable( false ); + m_FacesWidget->setMinimumSize( 400, 200 ); + + connect( m_FacesWidget, SIGNAL( selectionChanged( QIconViewItem * ) ), SLOT( slotFaceWidgetSelectionChanged( QIconViewItem * ) ) ); + + connect( m_FacesWidget, SIGNAL( doubleClicked( QIconViewItem *, const QPoint & ) ), SLOT( slotOk() ) ); + + top->addWidget( m_FacesWidget ); + + // Buttons to get more pics + QHBoxLayout * morePics = new QHBoxLayout( 0, 0, spacingHint() ); + QPushButton *browseBtn = new QPushButton( i18n("Custom &Image..."), page ); + connect( browseBtn, SIGNAL( clicked() ), SLOT( slotGetCustomImage() ) ); + morePics->addWidget( browseBtn ); +#if 0 + QPushButton *acquireBtn = new QPushButton( i18n("&Acquire Image..."), page ); + acquireBtn->setEnabled( false ); + morePics->addWidget( acquireBtn ); +#endif + morePics->addStretch(); + top->addLayout( morePics ); + + // Filling the icon view + QDir facesDir( picsdir ); + if ( facesDir.exists() ) + { + QStringList picslist = facesDir.entryList( QDir::Files ); + for ( QStringList::Iterator it = picslist.begin(); it != picslist.end(); ++it ) + new QIconViewItem( m_FacesWidget, (*it).section(".",0,0), QPixmap( picsdir + *it ) ); + } + facesDir.setPath( KCFGUserAccount::userFaceDir() ); + if ( facesDir.exists() ) + { + QStringList picslist = facesDir.entryList( QDir::Files ); + for ( QStringList::Iterator it = picslist.begin(); it != picslist.end(); ++it ) + new QIconViewItem( m_FacesWidget, "/"+(*it) == KCFGUserAccount::customFaceFile() ? + i18n("(Custom)") : (*it).section(".",0,0), + QPixmap( KCFGUserAccount::userFaceDir() + *it ) ); + } + + m_FacesWidget->setResizeMode( QIconView::Adjust ); + //m_FacesWidget->setGridX( FACE_PIX_SIZE - 10 ); + m_FacesWidget->arrangeItemsInGrid(); + + enableButtonOK( false ); + //connect( this, SIGNAL( okClicked() ), SLOT( slotSaveCustomImage() ) ); + + resize( 420, 400 ); +} + +void ChFaceDlg::addCustomPixmap( QString imPath, bool saveCopy ) +{ + QImage pix( imPath ); + // TODO: save pix to TMPDIR/userinfo-tmp, + // then scale and copy *that* to ~/.faces + + if (pix.isNull()) + { + KMessageBox::sorry( this, i18n("There was an error loading the image.") ); + return; + } + if ( (pix.width() > KCFGUserAccount::faceSize()) + || (pix.height() > KCFGUserAccount::faceSize()) ) + pix = pix.scale( KCFGUserAccount::faceSize(), KCFGUserAccount::faceSize(), QImage::ScaleMin );// Should be no bigger than certain size. + + if ( saveCopy ) + { + // If we should save a copy: + QDir userfaces( KCFGUserAccount::userFaceDir() ); + if ( !userfaces.exists( ) ) + userfaces.mkdir( userfaces.absPath() ); + + pix.save( userfaces.absPath() + "/.userinfo-tmp" , "PNG" ); + KonqOperations::copy( this, KonqOperations::COPY, KURL::List( KURL( userfaces.absPath() + "/.userinfo-tmp" ) ), KURL( userfaces.absPath() + "/" + QFileInfo(imPath).fileName().section(".",0,0) ) ); +#if 0 + if ( !pix.save( userfaces.absPath() + "/" + imPath , "PNG" ) ) + KMessageBox::sorry(this, i18n("There was an error saving the image:\n%1").arg( userfaces.absPath() ) ); +#endif + } + + QIconViewItem* newface = new QIconViewItem( m_FacesWidget, QFileInfo(imPath).fileName().section(".",0,0) , pix ); + newface->setKey( KCFGUserAccount::customKey() );// Add custom items to end + m_FacesWidget->ensureItemVisible( newface ); + m_FacesWidget->setCurrentItem( newface ); +} + +void ChFaceDlg::slotGetCustomImage( ) +{ + QCheckBox* checkWidget = new QCheckBox( i18n("&Save copy in custom faces folder for future use"), 0 ); + + KFileDialog *dlg = new KFileDialog( QDir::homeDirPath(), KImageIO::pattern( KImageIO::Reading ), + this, 0, true, checkWidget); + + dlg->setOperationMode( KFileDialog::Opening ); + dlg->setCaption( i18n("Choose Image") ); + dlg->setMode( KFile::File | KFile::LocalOnly ); + + KImageFilePreview *ip = new KImageFilePreview( dlg ); + dlg->setPreviewWidget( ip ); + if (dlg->exec() == QDialog::Accepted) + addCustomPixmap( dlg->selectedFile(), checkWidget->isChecked() ); + // Because we give it a parent we have to close it ourselves. + dlg->close(true); +} + +#if 0 +void ChFaceDlg::slotSaveCustomImage() +{ + if ( m_FacesWidget->currentItem()->key() == USER_CUSTOM_KEY) + { + QDir userfaces( QDir::homeDirPath() + USER_FACES_DIR ); + if ( !userfaces.exists( ) ) + userfaces.mkdir( userfaces.absPath() ); + + if ( !m_FacesWidget->currentItem()->pixmap()->save( userfaces.absPath() + USER_CUSTOM_FILE , "PNG" ) ) + KMessageBox::sorry(this, i18n("There was an error saving the image:\n%1").arg( userfaces.absPath() ) ); + } +} +#endif + +#include "chfacedlg.moc" diff --git a/kdepasswd/kcm/chfacedlg.h b/kdepasswd/kcm/chfacedlg.h new file mode 100644 index 000000000..1802ccd92 --- /dev/null +++ b/kdepasswd/kcm/chfacedlg.h @@ -0,0 +1,69 @@ +/** + * Copyright 2003 Braden MacDonald <bradenm_k@shaw.ca> + * Copyright 2003 Ravikiran Rajagopal <ravi@ee.eng.ohio-state.edu> + * + * 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 General Public License + * along with this program; if not, write to the Free Software + * + * + * Please see the README + * + */ + +/** + * @file UserInfo-chface: Dialog for choosing a new face for your user. + * @author Braden MacDonald + */ + +#ifndef CHFACEDLG_H +#define CHFACEDLG_H + +#include <qobject.h> + +#include <kiconview.h> // declaration below + +enum FacePerm { adminOnly = 1, adminFirst = 2, userFirst = 3, userOnly = 4}; + +class KDialogBase; + +class ChFaceDlg : public KDialogBase +{ + Q_OBJECT +public: + + + ChFaceDlg(const QString& picsdirs, QWidget *parent=0, const char *name=0, bool modal=true); + + + QPixmap getFaceImage() const + { + if(m_FacesWidget->currentItem()) + return *(m_FacesWidget->currentItem()->pixmap()); + else + return QPixmap(); + } + +private slots: + void slotFaceWidgetSelectionChanged( QIconViewItem *item ) + { enableButtonOK( !item->pixmap()->isNull() ); } + + void slotGetCustomImage(); + //void slotSaveCustomImage(); + +private: + void addCustomPixmap( QString imPath, bool saveCopy ); + + KIconView *m_FacesWidget; +}; + +#endif // CHFACEDLG_H diff --git a/kdepasswd/kcm/chfnprocess.cpp b/kdepasswd/kcm/chfnprocess.cpp new file mode 100644 index 000000000..ec39a152a --- /dev/null +++ b/kdepasswd/kcm/chfnprocess.cpp @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright 2003 Braden MacDonald <bradenm_k@shaw.ca> * + * Copyright 2003 Ravikiran Rajagopal <ravi@ee.eng.ohio-state.edu> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License (version 2) as * + * published by the Free Software Foundation. * + * * + ***************************************************************************/ + +/** + * @file Change a user's 'finger' information, specifically their full name. + * derived from kdepasswd. + */ + +#include <unistd.h> +#include <stdlib.h> + +#include <qcstring.h> + +#include <kdesu/process.h> +#include <kdebug.h> +#include <kdebug.h> +#include "chfnprocess.h" + + +int ChfnProcess::exec(const char *pass, const char *name) +{ + // Try to set the default locale to make the parsing of the output + // of `chfn' easier. + putenv((char*)"LC_ALL=C"); + + QCStringList args; + args += "-f"; + args += name; + int ret = PtyProcess::exec("chfn", args); + if (ret < 0) + return ChfnNotFound; + + ret = ConverseChfn(pass); + + waitForChild(); + return ret; +} + + +/* + * The actual work. + * Return values: -1 = unknown error, 0 = ok, >0 = error code. + */ +int ChfnProcess::ConverseChfn(const char *pass) +{ + int status=-1; + + QCString line; + while(1) + { + line = readLine(); + + if ( line.isEmpty() ) + continue;// discard line + + if ( line.contains( "Password: " )/*isPrompt( line, "password" )*/ ) + { + WaitSlave(); + write(m_Fd, pass, strlen(pass)); + write(m_Fd, "\n", 1); + } + + line = readLine(); // Let's see what the outcome was + + if ( line.contains( "Changing finger info" ) ) + { + // do nothing + } + else if ( line.contains( "information changed" ) ) + { + status=0; + break; + } + else if ( line.isEmpty() ) + { + status=0; + break; + } + else if ( line.contains( "Password error" ) || line.contains("Incorrect password") ) + { + status=PasswordError; + break; + } + else + { + status=MiscError; + m_Error=line; + break; + } + } + return status; +} + diff --git a/kdepasswd/kcm/chfnprocess.h b/kdepasswd/kcm/chfnprocess.h new file mode 100644 index 000000000..f8bb4e0cf --- /dev/null +++ b/kdepasswd/kcm/chfnprocess.h @@ -0,0 +1,33 @@ +/*************************************************************************** + * Copyright 2003 Braden MacDonald <bradenm_k@shaw.ca> * + * Copyright 2003 Ravikiran Rajagopal <ravi@ee.eng.ohio-state.edu> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License (version 2) as * + * published by the Free Software Foundation. * + * * + ***************************************************************************/ + +#ifndef CHFNPROC_H +#define CHFNPROC_H + +#include <qcstring.h> +#include <kdesu/process.h> + +class ChfnProcess : public PtyProcess +{ +public: + + enum Errors { ChfnNotFound=1, PasswordError=2, MiscError=3 }; + + int exec(const char *pass, const char *name); + + QCString error() { return m_Error; } + +private: + int ConverseChfn(const char *pass); + + QCString m_Error; +}; + +#endif diff --git a/kdepasswd/kcm/kcm_useraccount.desktop b/kdepasswd/kcm/kcm_useraccount.desktop new file mode 100644 index 000000000..cd7064225 --- /dev/null +++ b/kdepasswd/kcm/kcm_useraccount.desktop @@ -0,0 +1,203 @@ +[Desktop Entry] +Icon=personal +Categories=Qt;KDE;X-KDE-settings-security; +X-KDE-ParentApp=kcontrol +X-KDE-Library=useraccount +Type=Application +Exec=kcmshell kcm_useraccount +Name=Password & User Account +Name[af]=Gebruiker rekening en Wagwoord +Name[ar]=كلمة المرور و حساب المستخدم +Name[be]=Пароль і ўліковы запіс карыстальніка +Name[bg]=Потребител +Name[bn]=পাসওয়ার্ড এবং ব্যবহারকারী অ্যাকাউন্ট +Name[br]=Tremenger ha gont an arveriad +Name[bs]=Šifra i korisnički račun +Name[ca]=Contrasenya i compte d'usuari +Name[cs]=Heslo a uživatelský účet +Name[csb]=Parola ë kònto brëkòwnika +Name[cy]=Cyfrinair a Chyfrif Defnyddiwr +Name[da]=Kodeord og brugerkonto +Name[de]=Passwort & Benutzerzugang +Name[el]=Κωδικός πρόσβασης & Πληροφορίες χρήστη +Name[eo]=Pasvorto kaj uzanta konto +Name[es]=Contraseña y cuenta de usuario +Name[et]=Parool ja kasutaja konto +Name[eu]=Pasahitza eta erabiltzaile kontua +Name[fa]=اسم رمز و حساب کاربری +Name[fi]=Salasanat ja käyttäjätilit +Name[fr]=Compte utilisateur et mot de passe +Name[fy]=Wachtwurd en brûkersbehear +Name[ga]=Focal Faire & Cuntas Úsáideora +Name[gl]=Contrasinal e Conta de Usuario +Name[he]=ססמה ומידע על החשבון משתמש +Name[hi]=पासवर्ड तथा उपयोक्ता खाता +Name[hr]=Lozinka i korisnički nalozi +Name[hu]=Név és jelszó +Name[is]=Lykilorð og notandaaðgangur +Name[it]=Password e account utente +Name[ja]=パスワード & ユーザアカウント +Name[ka]=მომხმარებლის ანგარიშები და პაროლები +Name[kk]=Пароль мен тіркелгі +Name[km]=ពាក្យសម្ងាត់ & គណនីអ្នកប្រើ +Name[ko]=비밀번호와 사용자 계정 +Name[lt]=Slaptažodis ir naudotojo paskyra +Name[lv]=Paroles un lietotāju konti +Name[mk]=Лозинка и корисничка сметка +Name[ms]=Kata Laluan & Akaun Pengguna +Name[mt]=Password u kont tal-user +Name[nb]=Passord og brukerkonto +Name[nds]=Passwoort & Brukerkonto +Name[ne]=पासवर्ड र प्रयोगकर्ता खाता +Name[nl]=Wachtwoord en gebruikerbeheer +Name[nn]=Passord og brukarkonto +Name[pa]=ਉਪਭੋਗੀ ਖਾਤਾ ਅਤੇ ਗੁਪਤ-ਕੋਡ +Name[pl]=Hasło i konto użytkownika +Name[pt]=Senha e Conta do Utilizador +Name[pt_BR]=Senha & Conta do Usuário +Name[ro]=Parolă și cont utilizator +Name[ru]=Профиль пользователя +Name[rw]=Ijambobanga & Konti Ukoresha +Name[se]=Beassansánit ja geavaheaddjekontut +Name[sk]=Heslo a účet +Name[sl]=Geslo in uporabniški račun +Name[sr]=Лозинка и кориснички налог +Name[sr@Latn]=Lozinka i korisnički nalog +Name[sv]=Lösenord och användarkonto +Name[ta]=கடவுச்சொல் & பயனர் கணக்கு +Name[te]=పాస్ వర్డ్ & యూజర్ ఖాతా +Name[tg]=Гузарвожа ва номи истифодакунанда +Name[th]=รหัสผ่านและบัญชีผู้ใช้ +Name[tr]=Parola ve Kullanıcı Hesabı +Name[tt]=Sersüz & Qullanuçı Xisabı +Name[uk]=Пароль і рахунок користувача +Name[uz]=Maxfiy soʻz va foydalanuvchi hisobi +Name[uz@cyrillic]=Махфий сўз ва фойдаланувчи ҳисоби +Name[vi]=Mật khẩu & Tài khoản Người dùng +Name[wa]=Sicret et conte uzeu +Name[zh_CN]=密码和用户信息 +Name[zh_TW]=密碼與帳號資訊 +Keywords=password,email,name,organization,realname,login image,face,echo mode +Keywords[ar]=كلمة المرور,البريد الإلكتروني,الإسم,المنظمة/الشركة,الإسم الحقيقي,صورة تسجيل الدخول,الوجه,نمط الصدى +Keywords[be]=Пароль,Электроннай пошта,Імя,Назва,Арганізацыя,Сапраўднае імя,Твар,Малюнак уваходу,password,email,name,organization,realname,login image,face,echo mode +Keywords[bg]=парола, е-поща, организация, сметка, потребител, вход, включване, password, email, name, organization, realname, login image, face, echo mode +Keywords[bs]=password,email,name,organization,realname,login image,face,echo mode,šifra,e-mail,ime,organizacija,pravo ime,stvarno ime,slika,lice +Keywords[ca]=contrasenya,correu,nom,organització,nom real,imatge de connexió,aspecte,mode d'eco +Keywords[cs]=heslo,email,jméno,organizace,přihlašovací obrázek,režim odezvy +Keywords[csb]=parola,e-maila,miono,nôzwëskò,òrganizacëjô,logòwanié,brëkòwnik,miono brëkòwnika,òbrôzk,skarń,gwiôzdczi,wëskrzëniwanié parolów +Keywords[da]=kodeord,email,e-mail,organisation,rigtigt navn,login-billede,hoved, ekkotilstand +Keywords[de]=Passwort,E-Mail,Name,Organisation,Tatsächlicher Name,Login,Anmeldebild,Bild,Echomodus +Keywords[el]=κωδικός πρόσβασης;email;όνομα;οργανισμός;πραγματικό όνομα;εικόνα σύνδεσης;πρόσωπο; τρόπος εμφάνισης +Keywords[en_GB]=password,email,name,organisation,realname,login image,face,echo mode +Keywords[eo]=pasvorto,retpoŝto,nomo,organizaĵo,realnomo,salutbildo,vizaĝo,eĥo moduso +Keywords[es]=contraseña;correo electrónico;nombre;organización;nombre real;imagen de acceso;cara;modo de eco +Keywords[et]=parool;email;nimi;organisatsioon;pärisnimi;kasutaja pilt;nägu; echo režiim +Keywords[eu]=pasahitza;helb-elek;izena;erakundea;benetako izena;sarrerako irudia,aurpegia,echo modua +Keywords[fa]=اسم رمز، رایانامه، نام، سازمان، نام واقعی، تصویر ورود، چهره، حالت پژواک +Keywords[fi]=salasana,sähköposti,nimi,organisaatio,oikea nimi,kirjautumiskuva,naama,kaiutustilanus,kaiutustapa +Keywords[fr]=mot de passe,email,courrier électronique,adresse électronique,organisation,non complet,image d'identification,mode d'affichage,face +Keywords[fy]=wachtwoord,wachtwurd,e-mail,e-post,organisatie,organisaasje,naam,namme,login,aanmelden,oanmelde,afbeelding,ôfbyldings,gezicht,echo,asterisk +Keywords[ga]=focal faire,ríomhphost,ainm,eagras,fíorainm,íomhá logála isteach,aghaidh,mód macalla +Keywords[gl]=contrasinal,correo-e,nome,organización,nome real,imaxe de início,cara, modo eco +Keywords[he]=ססמאות, דוא"ל, שם, ארגון, שם אמתי,תמונת כניסה, מצב echo, password,email,name,organization,realname,login image,face,echo mode +Keywords[hr]=password,email,name,organization,realname,login image,face,echo mode,lozinka,e-pošta,naziv,ime,organizacija,pravo ime,slika prijave,lice,odzivnik +Keywords[hu]=jelszó,e-mail,név,szervezet,valódi név,bejelentkezési kép,arc,kiírási mód +Keywords[it]=password,email,nome,organizzazione,nome vero,immagine login,icona login,immagine accesso,faccia,modo echo +Keywords[ja]=パスワード;Eメール;名前;組織;本名;ログイン画像;顔;エコーモード +Keywords[km]=ពាក្យសម្ងាត់; អ៊ីមែល; ឈ្មោះ; អង្គការ; ឈ្មោះពិត; រូបភាពពេលចូល; មុខ; របៀបបង្ហាញ +Keywords[lt]=password,email,name,organization,realname,login image,face,echo mode,slaptažodis,e. paštas,el.paštas,vardas,organizacija,tikrasis vardas,veidas +Keywords[mk]=password,email,name,organization,realname,login,image,face,echo mode,лозинка,е-пошта,електронска пошта,име,организација,вистинско име,слика за најава,лице +Keywords[nb]=passord,e-post,navn,organisasjon,fullt navn,innloggingsbilde,ansikt,ekkomodus +Keywords[nds]=Passwoort,EMail,Nettpost,Nettbreef,Organisatschoon,Naam,echte Naam,Anmellenbild,Loginbild,Gesicht,Echometood +Keywords[ne]=पासवर्ड, इमेल, नाम, सङ्गठन, वास्तविकनाम, लागइन छवि, मोहडा, प्रतिध्वनि मोड +Keywords[nl]=wachtwoord,e-mail,organisatie,naam,login,aanmelden,afbeelding,gezicht,echo,asterisk +Keywords[nn]=passord;e-post;namn;organisasjon;fullt namn;innloggingsbilete;fjes;ekkomodus +Keywords[pa]=ਗੁਪਤ-ਕੋਡ,ਈ-ਮੇਲ,ਨਾਂ,ਸੰਗਠਨ,ਅਸਲੀ ਨਾਂ,login image,face,echo mode +Keywords[pl]=hasło,e-mail,imię,nazwisko,organizacja,login,użytkownik,nazwa użytkownika,obrazek,twarz,gwiazdki,pokazywanie haseł +Keywords[pt]=senha,e-mail,nome,organização,nome real,imagem de ligação,cara,modo de eco +Keywords[pt_BR]=senha,e-mail,nome,organização,nome real,imagem de login,aparência,modo de ecoar +Keywords[ro]=parolă,email,nume,organizație,nume real,imagine de logare,față,mod ecou +Keywords[ru]=password,email,name,organization,realname,login image,face,echo mode,пароль,имя,организация,электронная почта +Keywords[se]=beassansátni,e-boasta,namma,organisašuvdna,olles namma,sisačálihangovva,amadádju,skájahanmodus +Keywords[sl]=geslo;e-pošta;ime;organizacija;pravo ime;slika prijave;prijavna slika,obraz;način odmeva +Keywords[sr]=password,email,name,organization,realname,login image,face,echo mode,лозинка,е-пошта,име,организација,ехо,режим,лице +Keywords[sr@Latn]=password,email,name,organization,realname,login image,face,echo mode,lozinka,e-pošta,ime,organizacija,eho,režim,lice +Keywords[sv]=lösenord;e-post;namn;organisation;verkligt namn;inloggningsbild;bild;ekoläge +Keywords[th]=รหัสผ่าน, อีเมล,ชื่อ,องค์กร,ชื่อจริง,ภาพสำหรับล็อกอิน,ใบหน้า,โหมดแสดงอักษร +Keywords[tr]=parola,e-posta,isim,gerçek isim,giriş resmi,yüz +Keywords[uk]=пароль,адреса електронної пошти,організація,ім'я,фотографія,зображення +Keywords[uz]=maxfiy soʻz,elektron pochta,foydalanuvchi,haqiqiy ismi,nishoncha,tashkilot, echo mode +Keywords[uz@cyrillic]=махфий сўз,электрон почта,фойдаланувчи,ҳақиқий исми,нишонча,ташкилот, echo mode +Keywords[vi]=mật khẩu,email,tên,cơ quan,tên thật,hình đăng nhập,mặt cười,chế độ báo lại +Keywords[wa]=sicret,motd di passe,emile,no,soce,vray no,imådje d' elodjaedje,face,tiesse,echo mode,mode echo +Keywords[zh_CN]=password,email,name,organization,realname,login image,face,echo mode,密码,电子邮件,姓名,组织,真实姓名,登陆图像,头像,回显 +Keywords[zh_TW]=password,email,name,organization,realname,login image,face,echo mode,密碼,電子郵件,組織,真名,登入圖片,面貌,回音模式 +Comment=User information such as password, name and email +Comment[af]=Gebruiker informasie, soos naam, wagwoord en e-pos +Comment[ar]=معلومات عن المستخدم مثل كلمة المرور ، الإسم و عنوان البريد الإلكتروني +Comment[be]=Інфармацыя аб карыстальніку, напр. пароль, імя і электронны адрас +Comment[bg]=Настройване на потребителската сметка, паролата, името и е-пощата +Comment[bn]=ব্যবহারকারী তথ্য, যথা পাসওয়ার্ড, নাম এবং ই-মেইল +Comment[br]=Titouroù diwar-benn an arveriad (tremenger, anv, chomlec'h postel) +Comment[bs]=Informacije o korisniku kao što su šifra, ime i e-mail +Comment[ca]=Informació de l'usuari com ara contrasenya, nom i correu +Comment[cs]=Informace o uživateli, jako heslo, jméno nebo email +Comment[csb]=Wëdowiédzô ò kònce brëkòwnika: parola, miono ë nôzwëskò, e-maila ëtd. +Comment[cy]=Gwybodaeth ddefnyddiwr fel cyfrinair, enw ac ebost +Comment[da]=Brugerinformation såsom kodeord, navn og e-mail +Comment[de]=Benutzerinformation wie Passwort, Name, E-Mail-Adresse +Comment[el]=Πληροφορίες χρήστη όπως ο κωδικός πρόσβασης, το όνομα και το email +Comment[eo]=Uzantaj informoj kiel pasvorto, nomo kaj retpoŝto +Comment[es]=Información del usuario como la contraseña, el nombre o el correo electrónico +Comment[et]=Kasutajainfo, nt. parool, nimi ja e-posti aadress +Comment[eu]=Erabiltzaileari buruzko informazioa; pasahitza, izena eta posta-helbidea, adibidez. +Comment[fa]=استفاده از اطلاعاتی نظیر اسم رمز، نام و رایانامه +Comment[fi]=Käyttäjien tiedot, kuten salasanat, nimet ja sähköpostiosoite +Comment[fr]=Informations sur l'utilisateur, comme le mot de passe, le nom, et l'adresse électronique +Comment[fy]=Brûkersynformaasje sa as wachtwurd, namme en e-adres +Comment[gl]=Información do usuario como contrasinal, nome e correo-e +Comment[he]=מידע אישי כגון ססמה, שם וכתובת דוא"ל +Comment[hi]=उपयोक्ता जानकारी जैसे कि पासवर्ड, नाम तथा ई-मेल +Comment[hr]=Korisnički podaci poput lozinke, imena i e-pošte +Comment[hu]=A felhasználójellemzők, például az e-mail cím vagy a jelszó beállítása +Comment[is]=Upplýsingar um notandann eins og til dæmis póstfang, lykilorð og nafn +Comment[it]=Informazioni utente come password, nome ed email +Comment[ja]=パスワード、名前、Eメールなどのユーザ情報 +Comment[ka]=ცნობები მომხმარებლების შესახებ, როგორიცაა პაროლი, სახელი და ელ-ფოსტა +Comment[kk]=Паролі, аты және эл.пошта адресі секілді пайдаланушының мәліметі +Comment[km]=ព័ត៌មានអ្នកប្រើដូចជា ពាក្យសម្ងាត់,ឈ្មោះ និងអ៊ីមែល +Comment[ko]=비밀번호, 이름, 전자우편 주소 같은 개인 정보 +Comment[lt]=Naudotojo informacija, tokia, kaip slaptažodis, vardas ir e. pašto adresas +Comment[lv]=Lietotāja informācija kā parole, vārds un e-pasts +Comment[mk]=Кориснички информации како лозинка, име и е-пошта +Comment[ms]=Maklumat pengguna seperti kata laluan, nama dan e-mel +Comment[mt]=Informazzjoni dwar il-user, bħal isem, password u email +Comment[nb]=Brukerinformasjon som passord, navn og e-postadresse +Comment[nds]=Brukerinformatschonen, as t.B. Passwoort, Naam un Nettpostadress +Comment[ne]=पासवर्ड, नाम, र इमेल जस्तो प्रयोगकर्ता सूचना +Comment[nl]=Gebruikerinformatie zoals wachtwoord, naam en e-mailadres +Comment[nn]=Brukarinformasjon som passord, namn og e-postadresse +Comment[pa]=ਉਪਭੋਗੀ ਜਾਣਕਾਰੀ ਜਿਵੇਂ ਕਿ ਗੁਪਤ-ਕੋਡ, ਨਾਂ ਅਤੇ ਈ-ਮੇਲ +Comment[pl]=Informacje o koncie użytkownika: hasło, imię i nazwisko, e-mail itd. +Comment[pt]=Informações do utilizador, como a senha, o nome e o e-mail +Comment[pt_BR]=Informações do usuário tais como senha, nome e e-mail +Comment[ro]=Informații despre utilizator, precum parola, numele și adresa de e-mail +Comment[ru]=Сведения о пользователе, такие как пароль, имя и e-mail +Comment[rw]=Amakuru y'ukoresha nk'ijambobanga,izina na imeli +Comment[se]=Geavaheaddjedieđut nugo beassansátni, namma ja e-boasta +Comment[sk]=Informácie o používateľovi, ako heslo, meno a e-mail +Comment[sl]=Uporabniške informacije, kot so geslo, ime in e-pošta +Comment[sr]=Информације о кориснику као што је лозинка, име и е-пошта +Comment[sr@Latn]=Informacije o korisniku kao što je lozinka, ime i e-pošta +Comment[sv]=Användarinformation som lösenord, namn och e-post +Comment[ta]=பயனர் தகவல் கடவுச்சொல்லைப் போல, பெயர் மற்றும் மிண்ணஞ்சல் +Comment[th]=ข้อมูลของผู้ใช้ เช่น รหัสผ่าน, ชื่อ และอีเมล +Comment[tr]=Parola, isim ve e-posta gibi kullanıcı bilgisi +Comment[tt]=Qullanuçı caylawı: sersüz, isem, email kebek närsälär +Comment[uk]=Інформація про користувача така як: пароль, ім'я та адреса електронної пошти +Comment[uz]=Foydalanuvchining ismi, maxfiy soʻzi va elektron pochtasi kabi maʼlumot +Comment[uz@cyrillic]=Фойдаланувчининг исми, махфий сўзи ва электрон почтаси каби маълумот +Comment[vi]=Thông tin về người dùng như mật khẩu, tên và email +Comment[wa]=Informåcion d' uzeus come les sicrets, nos et emiles +Comment[zh_CN]=像密码、姓名和电子邮件这样的用户信息 +Comment[zh_TW]=使用者資訊如密碼、名稱和電子郵件 diff --git a/kdepasswd/kcm/kcm_useraccount.kcfg b/kdepasswd/kcm/kcm_useraccount.kcfg new file mode 100644 index 000000000..7f52bff9a --- /dev/null +++ b/kdepasswd/kcm/kcm_useraccount.kcfg @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 + http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > + <include>kglobal.h</include> + <include>kstandarddirs.h</include> + <kcfgfile name="kdm/kdmrc"/> + <group name="X-*-Greeter"> + <entry name="faceDir" type="Path"> + <default code="true"> + KGlobal::dirs()->resourceDirs("data").last() + "kdm/faces" + '/' + </default> + </entry> + <entry name="UserFaceDir" type="Path"> + <default>$HOME/.faces/</default> + </entry> + <entry name="FaceSource" type="String"> + <default>PreferAdmin</default> + </entry> + <!-- These entries doesn't "exist" or is used in kdmrc + but this is a nifty way of handling default values ;-) --> + <entry name = "FaceSize" type="Int"> + <label>The size of login images</label> + <default>64</default> + </entry> + <entry name = "DefaultFile" type="Path"> + <label>The default image file</label> + <default>.default.face.icon</default> + </entry> + <entry name="CustomFaceFile" type="Path"> + <label>The filename of the user's custom image file</label> + <default>Custom.png</default> + </entry> + <entry name="FaceFile" type="Path"> + <label>The user's login image</label> + <default>$HOME/.face.icon</default> + </entry> + <entry name="CustomKey" type="String"> + <label>Sort key for KIconViewItems</label> + <default>Zz_custom</default> + </entry> + </group> +</kcfg> diff --git a/kdepasswd/kcm/kcm_useraccount_pass.kcfg b/kdepasswd/kcm/kcm_useraccount_pass.kcfg new file mode 100644 index 000000000..c76e4a657 --- /dev/null +++ b/kdepasswd/kcm/kcm_useraccount_pass.kcfg @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 + http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > + <kcfgfile name="kdeglobals"/> + <group name="Passwords"> + <entry name="EchoMode" type="Enum"> + <label>Password echo type</label> + <choices> + <choice name="OneStar"/> + <choice name="ThreeStars"/> + <choice name="NoEcho"/> + <!-- TODO: We need a ShowPassword and implement it. + We need to prompt for password before + enabling it..--> + </choices> + <default>OneStar</default> + </entry> + </group> +</kcfg> diff --git a/kdepasswd/kcm/main.cpp b/kdepasswd/kcm/main.cpp new file mode 100644 index 000000000..d49304484 --- /dev/null +++ b/kdepasswd/kcm/main.cpp @@ -0,0 +1,344 @@ + +/** + * Copyright (C) 2004 Frans Englich <frans.englich@telia.com> + * + * 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 General Public License + * along with this program; if not, write to the Free Software + * + * + * Please see the README + * + */ + +#include <qlayout.h> +#include <qlabel.h> +#include <qlineedit.h> +#include <qbuttongroup.h> +#include <qevent.h> +#include <qpixmap.h> +#include <qcstring.h> +#include <qstringlist.h> +#include <qlayout.h> + +#include <kpushbutton.h> +#include <kguiitem.h> +#include <kemailsettings.h> +#include <kpassdlg.h> +#include <kuser.h> +#include <kdialog.h> +#include <kimageio.h> +#include <kstandarddirs.h> +#include <kaboutdata.h> +#include <kgenericfactory.h> +#include <kmessagebox.h> +#include <kprocess.h> +#include <kio/netaccess.h> +#include <kurl.h> +#include <kurldrag.h> + +#include "settings.h" +#include "pass.h" +#include "chfnprocess.h" +#include "chfacedlg.h" +#include "main.h" + +typedef KGenericFactory<KCMUserAccount, QWidget> Factory; +K_EXPORT_COMPONENT_FACTORY( kcm_useraccount, Factory("useraccount") ) + +KCMUserAccount::KCMUserAccount( QWidget *parent, const char *name, + const QStringList &) + : KCModule( parent, name) +{ + QVBoxLayout *topLayout = new QVBoxLayout(this); + _mw = new MainWidget(this); + topLayout->addWidget( _mw ); + + connect( _mw->btnChangeFace, SIGNAL(clicked()), SLOT(slotFaceButtonClicked())); + connect( _mw->btnChangePassword, SIGNAL(clicked()), SLOT(slotChangePassword())); + _mw->btnChangePassword->setGuiItem( KGuiItem( i18n("Change &Password..."), "password" )); + + connect( _mw->leRealname, SIGNAL(textChanged(const QString&)), SLOT(changed())); + connect( _mw->leOrganization, SIGNAL(textChanged(const QString&)), SLOT(changed())); + connect( _mw->leEmail, SIGNAL(textChanged(const QString&)), SLOT(changed())); + connect( _mw->leSMTP, SIGNAL(textChanged(const QString&)), SLOT(changed())); + + _ku = new KUser(); + _kes = new KEMailSettings(); + + _mw->lblUsername->setText( _ku->loginName() ); + _mw->lblUID->setText( QString().number(_ku->uid()) ); + + KAboutData *about = new KAboutData(I18N_NOOP("kcm_useraccount"), + I18N_NOOP("Password & User Information"), 0, 0, + KAboutData::License_GPL, + I18N_NOOP("(C) 2002, Braden MacDonald, " + "(C) 2004 Ravikiran Rajagopal")); + + about->addAuthor("Frans Englich", I18N_NOOP("Maintainer"), "frans.englich@telia.com"); + about->addAuthor("Ravikiran Rajagopal", 0, "ravi@kde.org"); + about->addAuthor("Michael H\303\244ckel", "haeckel@kde.org" ); + + about->addAuthor("Braden MacDonald", I18N_NOOP("Face editor"), "bradenm_k@shaw.ca"); + about->addAuthor("Geert Jansen", I18N_NOOP("Password changer"), "jansen@kde.org", + "http://www.stack.nl/~geertj/"); + about->addAuthor("Daniel Molkentin"); + about->addAuthor("Alex Zepeda"); + about->addAuthor("Hans Karlsson", I18N_NOOP("Icons"), "karlsson.h@home.se"); + about->addAuthor("Hermann Thomas", I18N_NOOP("Icons"), "h.thomas@gmx.de"); + setAboutData(about); + + setQuickHelp( i18n("<qt>Here you can change your personal information, which " + "will be used in mail programs and word processors, for example. You can " + "change your login password by clicking <em>Change Password</em>.</qt>") ); + + addConfig( KCFGPassword::self(), this ); + load(); +} + +void KCMUserAccount::slotChangePassword() +{ + KProcess *proc = new KProcess; + QString bin = KGlobal::dirs()->findExe("kdepasswd"); + if ( !bin ) + { + kdDebug() << "kcm_useraccount: kdepasswd was not found." << endl; + KMessageBox::sorry ( this, i18n( "A program error occurred: the internal " + "program 'kdepasswd' could not be found. You will " + "not be able to change your password.")); + + _mw->btnChangePassword->setEnabled(false); + delete proc; + return; + } + + *proc << bin << _ku->loginName() ; + proc->start(KProcess::DontCare); + + delete proc; + +} + + +KCMUserAccount::~KCMUserAccount() +{ + delete _ku; + delete _kes; +} + +void KCMUserAccount::load() +{ + _mw->lblUsername->setText(_ku->loginName()); + + _kes->setProfile(_kes->defaultProfileName()); + + _mw->leRealname->setText( _kes->getSetting( KEMailSettings::RealName )); + _mw->leEmail->setText( _kes->getSetting( KEMailSettings::EmailAddress )); + _mw->leOrganization->setText( _kes->getSetting( KEMailSettings::Organization )); + _mw->leSMTP->setText( _kes->getSetting( KEMailSettings::OutServer )); + + QString _userPicsDir = KCFGUserAccount::faceDir() + + KGlobal::dirs()->resourceDirs("data").last() + "kdm/faces/"; + + QString fs = KCFGUserAccount::faceSource(); + if (fs == QString::fromLatin1("UserOnly")) + _facePerm = userOnly; + else if (fs == QString::fromLatin1("PreferUser")) + _facePerm = userFirst; + else if (fs == QString::fromLatin1("PreferAdmin")) + _facePerm = adminFirst; + else + _facePerm = adminOnly; // Admin Only + + if ( _facePerm == adminFirst ) + { // If the administrator's choice takes preference + _facePixmap = QPixmap( _userPicsDir + _ku->loginName() + ".face.icon" ); + + if ( _facePixmap.isNull() ) + _facePerm = userFirst; + else + _mw->btnChangeFace->setPixmap( _facePixmap ); + } + + if ( _facePerm >= userFirst ) + { + // If the user's choice takes preference + _facePixmap = QPixmap( KCFGUserAccount::faceFile() ); + + // The user has no face, should we check for the admin's setting? + if ( _facePixmap.isNull() && _facePerm == userFirst ) + _facePixmap = QPixmap( _userPicsDir + _ku->loginName() + ".face.icon" ); + + if ( _facePixmap.isNull() ) + _facePixmap = QPixmap( _userPicsDir + KCFGUserAccount::defaultFile() ); + + _mw->btnChangeFace->setPixmap( _facePixmap ); + } + else if ( _facePerm <= adminOnly ) + { + // Admin only + _facePixmap = QPixmap( _userPicsDir + _ku->loginName() + ".face.icon" ); + if ( _facePixmap.isNull() ) + _facePixmap = QPixmap( _userPicsDir + KCFGUserAccount::defaultFile() ); + _mw->btnChangeFace->setPixmap( _facePixmap ); + } + + KCModule::load(); /* KConfigXT */ + +} + +void KCMUserAccount::save() +{ + KCModule::save(); /* KConfigXT */ + + /* Save KDE's homebrewn settings */ + _kes->setSetting( KEMailSettings::RealName, _mw->leRealname->text() ); + _kes->setSetting( KEMailSettings::EmailAddress, _mw->leEmail->text() ); + _kes->setSetting( KEMailSettings::Organization, _mw->leOrganization->text() ); + _kes->setSetting( KEMailSettings::OutServer, _mw->leSMTP->text() ); + + /* Save realname to /etc/passwd */ + if ( _mw->leRealname->isModified() ) + { + QCString password; + int ret = KPasswordDialog::getPassword( password, i18n("Please enter " + "your password in order to save your settings:")); + + if ( !ret ) + { + KMessageBox::sorry( this, i18n("You must enter " + "your password in order to change your information.")); + return; + } + + ChfnProcess *proc = new ChfnProcess(); + ret = proc->exec(password, _mw->leRealname->text().ascii() ); + if ( ret ) + { + if ( ret == ChfnProcess::PasswordError ) + KMessageBox::sorry( this, i18n("You must enter a correct password.")); + + else + { + KMessageBox::sorry( this, i18n("An error occurred and your password has " + "probably not been changed. The error " + "message was:\n%1").arg(proc->error())); + kdDebug() << "ChfnProcess->exec() failed. Error code: " << ret + << "\nOutput:" << proc->error() << endl; + } + } + + delete proc; + } + + /* Save the image */ + if( !_facePixmap.save( KCFGUserAccount::faceFile(), "PNG" )) + KMessageBox::error( this, i18n("There was an error saving the image: %1" ).arg( + KCFGUserAccount::faceFile()) ); + +} + +void KCMUserAccount::changeFace(const QPixmap &pix) +{ + if ( _facePerm < userFirst ) + return; // If the user isn't allowed to change their face, don't! + + if ( pix.isNull() ) { + KMessageBox::sorry( this, i18n("There was an error loading the image.") ); + return; + } + + _facePixmap = pix; + _mw->btnChangeFace->setPixmap( _facePixmap ); + emit changed( true ); +} + +void KCMUserAccount::slotFaceButtonClicked() +{ + if ( _facePerm < userFirst ) + { + KMessageBox::sorry( this, i18n("Your administrator has disallowed changing your image.") ); + return; + } + + ChFaceDlg* pDlg = new ChFaceDlg( KGlobal::dirs()->resourceDirs("data").last() + + "/kdm/pics/users/" ); + + if ( pDlg->exec() == QDialog::Accepted && !pDlg->getFaceImage().isNull() ) + changeFace( pDlg->getFaceImage() ); + + delete pDlg; +} + +/** + * I merged faceButtonDropEvent into this /Frans + * The function was called after checking event type and + * the code is now below that if statement + */ +bool KCMUserAccount::eventFilter(QObject *, QEvent *e) +{ + if (e->type() == QEvent::DragEnter) + { + QDragEnterEvent *ee = (QDragEnterEvent *) e; + ee->accept( KURLDrag::canDecode(ee) ); + return true; + } + + if (e->type() == QEvent::Drop) + { + if ( _facePerm < userFirst ) + { + KMessageBox::sorry( this, i18n("Your administrator " + "has disallowed changing your image.") ); + return true; + } + + KURL *url = decodeImgDrop( (QDropEvent *) e, this); + if (url) + { + QString pixPath; + KIO::NetAccess::download(*url, pixPath, this); + changeFace( QPixmap( pixPath ) ); + KIO::NetAccess::removeTempFile(pixPath); + delete url; + } + return true; + } + return false; +} + +inline KURL *KCMUserAccount::decodeImgDrop(QDropEvent *e, QWidget *wdg) +{ + KURL::List uris; + + if (KURLDrag::decode(e, uris) && (uris.count() > 0)) + { + KURL *url = new KURL(uris.first()); + + KImageIO::registerFormats(); + if( KImageIO::canRead(KImageIO::type(url->fileName())) ) + return url; + + QStringList qs = QStringList::split('\n', KImageIO::pattern()); + qs.remove(qs.begin()); + + QString msg = i18n( "%1 does not appear to be an image file.\n" + "Please use files with these extensions:\n" + "%2").arg(url->fileName()).arg(qs.join("\n")); + KMessageBox::sorry( wdg, msg); + delete url; + } + return 0; +} + +#include "main.moc" + diff --git a/kdepasswd/kcm/main.h b/kdepasswd/kcm/main.h new file mode 100644 index 000000000..2ee475bc9 --- /dev/null +++ b/kdepasswd/kcm/main.h @@ -0,0 +1,79 @@ + +/** + * Copyright (C) 2004 Frans Englich <frans.englich@telia.com> + * + * 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 General Public License + * along with this program; if not, write to the Free Software + */ + +#ifndef MAIN_H +#define MAIN_H + +#include <kcmodule.h> + +#include "main_widget.h" + +class KAboutData; +class KUser; +class KEmailSettings; +class QEvent; +class QObject; +class KURL; +class Config; + +/** + * Please see the README + */ +class KCMUserAccount : public KCModule +{ + Q_OBJECT + +public: + KCMUserAccount(QWidget* parent, const char* name = "KCMUserAccount", + const QStringList& list=QStringList()); + ~KCMUserAccount(); + + /** + * The user data is loaded from chfn(/etc/password) and then + * written back as well as to KDE's own(KEmailSettings). + * The user won't notice this(assuming they change the KDE settings via + * this KCM) and will make KDE play nice with enviroments which uses + * /etc/password. + */ + void load(); + + void save(); + + /** + * For the face button + */ + bool eventFilter(QObject *, QEvent *e); + +private slots: + void slotChangePassword(); + //void configChanged() { emit changed(true); }; + void slotFaceButtonClicked(); + +private: + void changeFace(const QPixmap& pix); + inline KURL* decodeImgDrop(QDropEvent *e, QWidget *wdg); + + KEMailSettings *_kes; + KUser *_ku; + MainWidget *_mw; + FacePerm _facePerm; + QPixmap _facePixmap; + +}; + +#endif // MAIN_H diff --git a/kdepasswd/kcm/main_widget.ui b/kdepasswd/kcm/main_widget.ui new file mode 100644 index 000000000..29adb0835 --- /dev/null +++ b/kdepasswd/kcm/main_widget.ui @@ -0,0 +1,294 @@ +<!DOCTYPE UI><UI version="3.3" stdsetdef="1"> +<class>MainWidget</class> +<author>Frans Englich <frans.englich@telia.com></author> +<widget class="QWidget"> + <property name="name"> + <cstring>MainWidget</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>518</width> + <height>561</height> + </rect> + </property> + <property name="caption"> + <string>KCMUserAccount</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="KPushButton" row="0" column="0"> + <property name="name"> + <cstring>btnChangeFace</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>0</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>74</width> + <height>74</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>74</width> + <height>74</height> + </size> + </property> + <property name="acceptDrops"> + <bool>true</bool> + </property> + <property name="text"> + <string></string> + </property> + </widget> + <widget class="QGroupBox" row="1" column="0" rowspan="1" colspan="4"> + <property name="name"> + <cstring>grpUserInformation</cstring> + </property> + <property name="title"> + <string>User Information</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLabel" row="1" column="0"> + <property name="name"> + <cstring>lblOrganisation</cstring> + </property> + <property name="text"> + <string>&Organization:</string> + </property> + <property name="buddy" stdset="0"> + <cstring>leOrganization</cstring> + </property> + </widget> + <widget class="QLineEdit" row="0" column="1"> + <property name="name"> + <cstring>leRealname</cstring> + </property> + </widget> + <widget class="QLabel" row="0" column="0"> + <property name="name"> + <cstring>lblRealName</cstring> + </property> + <property name="text"> + <string>&Name:</string> + </property> + <property name="buddy" stdset="0"> + <cstring>leRealname</cstring> + </property> + </widget> + <widget class="QLineEdit" row="1" column="1"> + <property name="name"> + <cstring>leOrganization</cstring> + </property> + </widget> + <widget class="QLabel" row="2" column="0"> + <property name="name"> + <cstring>lblEmail</cstring> + </property> + <property name="text"> + <string>&Email address:</string> + </property> + <property name="buddy" stdset="0"> + <cstring>leEmail</cstring> + </property> + </widget> + <widget class="QLineEdit" row="2" column="1"> + <property name="name"> + <cstring>leEmail</cstring> + </property> + </widget> + <widget class="QLabel" row="3" column="0"> + <property name="name"> + <cstring>textLabel3</cstring> + </property> + <property name="text"> + <string>&SMTP server:</string> + </property> + <property name="buddy" stdset="0"> + <cstring>leSMTP</cstring> + </property> + </widget> + <widget class="QLineEdit" row="3" column="1"> + <property name="name"> + <cstring>leSMTP</cstring> + </property> + </widget> + <widget class="QLabel" row="5" column="0"> + <property name="name"> + <cstring>lblUIDTell</cstring> + </property> + <property name="text"> + <string>User ID:</string> + </property> + </widget> + <widget class="QLabel" row="5" column="1"> + <property name="name"> + <cstring>lblUID</cstring> + </property> + <property name="text"> + <string></string> + </property> + </widget> + </grid> + </widget> + <spacer row="4" column="2"> + <property name="name"> + <cstring>spacer3</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>16</height> + </size> + </property> + </spacer> + <widget class="QLayoutWidget" row="0" column="1" rowspan="1" colspan="3"> + <property name="name"> + <cstring>layout1</cstring> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>lblUsername</cstring> + </property> + <property name="font"> + <font> + <family>Bitstream Charter</family> + <pointsize>14</pointsize> + </font> + </property> + <property name="text"> + <string></string> + </property> + <property name="alignment"> + <set>AlignVCenter</set> + </property> + </widget> + <widget class="QLabel"> + <property name="name"> + <cstring>lblClickButtonInfo</cstring> + </property> + <property name="text"> + <string><i>(Click the button to change your image)</i></string> + </property> + <property name="alignment"> + <set>AlignVCenter</set> + </property> + </widget> + </vbox> + </widget> + <widget class="KPushButton" row="3" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>btnChangePassword</cstring> + </property> + <property name="text"> + <string>Change Password...</string> + </property> + </widget> + <spacer row="3" column="3"> + <property name="name"> + <cstring>spacer2</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>111</width> + <height>20</height> + </size> + </property> + </spacer> + <widget class="QButtonGroup" row="2" column="0" rowspan="1" colspan="4"> + <property name="name"> + <cstring>kcfg_EchoMode</cstring> + </property> + <property name="title"> + <string>At Password Prompt</string> + </property> + <property name="flat"> + <bool>false</bool> + </property> + <property name="checkable"> + <bool>false</bool> + </property> + <property name="checked"> + <bool>false</bool> + </property> + <property name="selectedId" stdset="0"> + <number>0</number> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QRadioButton" row="0" column="0"> + <property name="name"> + <cstring>rdbOneStar</cstring> + </property> + <property name="text"> + <string>Show one star for each letter</string> + </property> + </widget> + <widget class="QRadioButton" row="1" column="0"> + <property name="name"> + <cstring>rdbThreeStars</cstring> + </property> + <property name="text"> + <string>Show three stars for each letter</string> + </property> + </widget> + <widget class="QRadioButton" row="2" column="0"> + <property name="name"> + <cstring>rdbShowPassword</cstring> + </property> + <property name="text"> + <string>Show nothing</string> + </property> + </widget> + </grid> + </widget> + </grid> +</widget> +<tabstops> + <tabstop>btnChangeFace</tabstop> + <tabstop>leRealname</tabstop> + <tabstop>leOrganization</tabstop> + <tabstop>leEmail</tabstop> + <tabstop>leSMTP</tabstop> + <tabstop>rdbOneStar</tabstop> + <tabstop>rdbThreeStars</tabstop> + <tabstop>rdbShowPassword</tabstop> + <tabstop>btnChangePassword</tabstop> +</tabstops> +<includes> + <include location="local" impldecl="in implementation">kdialog.h</include> +</includes> +<layoutdefaults spacing="6" margin="11"/> +<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/> +</UI> diff --git a/kdepasswd/kcm/pass.kcfgc b/kdepasswd/kcm/pass.kcfgc new file mode 100644 index 000000000..21b4bb781 --- /dev/null +++ b/kdepasswd/kcm/pass.kcfgc @@ -0,0 +1,5 @@ +File=kcm_useraccount_pass.kcfg +ClassName=KCFGPassword +Singleton=true +Mutators=true + diff --git a/kdepasswd/kcm/pics/Apple.png b/kdepasswd/kcm/pics/Apple.png Binary files differnew file mode 100644 index 000000000..b383578bb --- /dev/null +++ b/kdepasswd/kcm/pics/Apple.png diff --git a/kdepasswd/kcm/pics/BeachBall.png b/kdepasswd/kcm/pics/BeachBall.png Binary files differnew file mode 100644 index 000000000..e8c748332 --- /dev/null +++ b/kdepasswd/kcm/pics/BeachBall.png diff --git a/kdepasswd/kcm/pics/Blowfish.png b/kdepasswd/kcm/pics/Blowfish.png Binary files differnew file mode 100644 index 000000000..51cb16013 --- /dev/null +++ b/kdepasswd/kcm/pics/Blowfish.png diff --git a/kdepasswd/kcm/pics/Bug.png b/kdepasswd/kcm/pics/Bug.png Binary files differnew file mode 100644 index 000000000..b431cc138 --- /dev/null +++ b/kdepasswd/kcm/pics/Bug.png diff --git a/kdepasswd/kcm/pics/Butterfly.png b/kdepasswd/kcm/pics/Butterfly.png Binary files differnew file mode 100644 index 000000000..88012a7ed --- /dev/null +++ b/kdepasswd/kcm/pics/Butterfly.png diff --git a/kdepasswd/kcm/pics/CREDITS b/kdepasswd/kcm/pics/CREDITS new file mode 100644 index 000000000..ccd9126b4 --- /dev/null +++ b/kdepasswd/kcm/pics/CREDITS @@ -0,0 +1,21 @@ +Butterfly.png, Konqui.png: + KDE Graphics Team + +BeachBall.png BlueMarble1.png Flower.png Night.png Star2.png Star3.png +Star4.png Star.png Stars2.png Stars.png: + Braden MacDonald + +Apple.png Cheese.png Ghost.png Pearl.png Skull.png Blowfish.png Cow.png +Guitar.png Penguin.png Smiley.png Bug.png Daemon.png Lion.png Pig.png +Splash.png Burger.png Dog.png Man.png Scream.png Turtle.png Car.png +Elephant.png Monkey.png Shark.png Watch.png Astronaut.png Heart.png +Ring.png Rabbit.png Speakers.png UFO.png : + Hans Karlsson <karlsson.h@home.se> +License: free for commercial and noncommercial usage, distribution and +modification + +Arch.png BeachBall2.png Butterfly2.png Cactus.png Car2.png Clock.png +Dice.png Dog2.png Dragon.png Fish.png Flower2.png Flower3.png Frog.png +Kiwi.png Lava.png Pineapple.png Teddybear.png Tiger.png Tukan.png +Wind.png : + Hermann Thomas <h.thomas@gmx.de> diff --git a/kdepasswd/kcm/pics/Car.png b/kdepasswd/kcm/pics/Car.png Binary files differnew file mode 100644 index 000000000..95ec0278f --- /dev/null +++ b/kdepasswd/kcm/pics/Car.png diff --git a/kdepasswd/kcm/pics/Cow.png b/kdepasswd/kcm/pics/Cow.png Binary files differnew file mode 100644 index 000000000..2f0ced863 --- /dev/null +++ b/kdepasswd/kcm/pics/Cow.png diff --git a/kdepasswd/kcm/pics/Daemon.png b/kdepasswd/kcm/pics/Daemon.png Binary files differnew file mode 100644 index 000000000..4bbc42a55 --- /dev/null +++ b/kdepasswd/kcm/pics/Daemon.png diff --git a/kdepasswd/kcm/pics/Dog.png b/kdepasswd/kcm/pics/Dog.png Binary files differnew file mode 100644 index 000000000..78de93340 --- /dev/null +++ b/kdepasswd/kcm/pics/Dog.png diff --git a/kdepasswd/kcm/pics/Elephant.png b/kdepasswd/kcm/pics/Elephant.png Binary files differnew file mode 100644 index 000000000..8f4b2d2aa --- /dev/null +++ b/kdepasswd/kcm/pics/Elephant.png diff --git a/kdepasswd/kcm/pics/Flower.png b/kdepasswd/kcm/pics/Flower.png Binary files differnew file mode 100644 index 000000000..d414e736c --- /dev/null +++ b/kdepasswd/kcm/pics/Flower.png diff --git a/kdepasswd/kcm/pics/Frog.png b/kdepasswd/kcm/pics/Frog.png Binary files differnew file mode 100644 index 000000000..2186975a9 --- /dev/null +++ b/kdepasswd/kcm/pics/Frog.png diff --git a/kdepasswd/kcm/pics/Ghost.png b/kdepasswd/kcm/pics/Ghost.png Binary files differnew file mode 100644 index 000000000..bf95150da --- /dev/null +++ b/kdepasswd/kcm/pics/Ghost.png diff --git a/kdepasswd/kcm/pics/Guitar.png b/kdepasswd/kcm/pics/Guitar.png Binary files differnew file mode 100644 index 000000000..6a315b0c7 --- /dev/null +++ b/kdepasswd/kcm/pics/Guitar.png diff --git a/kdepasswd/kcm/pics/Heart.png b/kdepasswd/kcm/pics/Heart.png Binary files differnew file mode 100644 index 000000000..b41a027e3 --- /dev/null +++ b/kdepasswd/kcm/pics/Heart.png diff --git a/kdepasswd/kcm/pics/Konqui.png b/kdepasswd/kcm/pics/Konqui.png Binary files differnew file mode 100644 index 000000000..4db7ae5e3 --- /dev/null +++ b/kdepasswd/kcm/pics/Konqui.png diff --git a/kdepasswd/kcm/pics/Lion.png b/kdepasswd/kcm/pics/Lion.png Binary files differnew file mode 100644 index 000000000..373b3f8c8 --- /dev/null +++ b/kdepasswd/kcm/pics/Lion.png diff --git a/kdepasswd/kcm/pics/Makefile.am b/kdepasswd/kcm/pics/Makefile.am new file mode 100644 index 000000000..5c1e95f75 --- /dev/null +++ b/kdepasswd/kcm/pics/Makefile.am @@ -0,0 +1,10 @@ +picsdir = $(kde_datadir)/kdm/pics/users +pics_DATA = Apple.png BeachBall.png Blowfish.png Bug.png \ + Butterfly.png Car.png Cow.png Daemon.png Dog.png Elephant.png \ + Flower.png Frog.png Ghost.png Guitar.png Heart.png Konqui.png \ + Lion.png Monkey.png Penguin.png Pig.png Rabbit.png \ + Ring.png Scream.png Shark.png Splash.png Star.png Teddybear.png \ + Turtle.png + +EXTRA_DIST = $(pics_DATA) + diff --git a/kdepasswd/kcm/pics/Monkey.png b/kdepasswd/kcm/pics/Monkey.png Binary files differnew file mode 100644 index 000000000..72a241006 --- /dev/null +++ b/kdepasswd/kcm/pics/Monkey.png diff --git a/kdepasswd/kcm/pics/Penguin.png b/kdepasswd/kcm/pics/Penguin.png Binary files differnew file mode 100644 index 000000000..33ed3619a --- /dev/null +++ b/kdepasswd/kcm/pics/Penguin.png diff --git a/kdepasswd/kcm/pics/Pig.png b/kdepasswd/kcm/pics/Pig.png Binary files differnew file mode 100644 index 000000000..c10a34c7f --- /dev/null +++ b/kdepasswd/kcm/pics/Pig.png diff --git a/kdepasswd/kcm/pics/Rabbit.png b/kdepasswd/kcm/pics/Rabbit.png Binary files differnew file mode 100644 index 000000000..a7c5f3f10 --- /dev/null +++ b/kdepasswd/kcm/pics/Rabbit.png diff --git a/kdepasswd/kcm/pics/Ring.png b/kdepasswd/kcm/pics/Ring.png Binary files differnew file mode 100644 index 000000000..29daf4c63 --- /dev/null +++ b/kdepasswd/kcm/pics/Ring.png diff --git a/kdepasswd/kcm/pics/Scream.png b/kdepasswd/kcm/pics/Scream.png Binary files differnew file mode 100644 index 000000000..46abbd2f8 --- /dev/null +++ b/kdepasswd/kcm/pics/Scream.png diff --git a/kdepasswd/kcm/pics/Shark.png b/kdepasswd/kcm/pics/Shark.png Binary files differnew file mode 100644 index 000000000..a11a352cb --- /dev/null +++ b/kdepasswd/kcm/pics/Shark.png diff --git a/kdepasswd/kcm/pics/Splash.png b/kdepasswd/kcm/pics/Splash.png Binary files differnew file mode 100644 index 000000000..ec8e68a18 --- /dev/null +++ b/kdepasswd/kcm/pics/Splash.png diff --git a/kdepasswd/kcm/pics/Star.png b/kdepasswd/kcm/pics/Star.png Binary files differnew file mode 100644 index 000000000..2b3988860 --- /dev/null +++ b/kdepasswd/kcm/pics/Star.png diff --git a/kdepasswd/kcm/pics/Teddybear.png b/kdepasswd/kcm/pics/Teddybear.png Binary files differnew file mode 100644 index 000000000..823adb56d --- /dev/null +++ b/kdepasswd/kcm/pics/Teddybear.png diff --git a/kdepasswd/kcm/pics/Turtle.png b/kdepasswd/kcm/pics/Turtle.png Binary files differnew file mode 100644 index 000000000..1eee29591 --- /dev/null +++ b/kdepasswd/kcm/pics/Turtle.png diff --git a/kdepasswd/kcm/settings.kcfgc b/kdepasswd/kcm/settings.kcfgc new file mode 100644 index 000000000..772c87a6b --- /dev/null +++ b/kdepasswd/kcm/settings.kcfgc @@ -0,0 +1,5 @@ +File=kcm_useraccount.kcfg +ClassName=KCFGUserAccount +Singleton=true +Mutators=false + |