diff options
author | Slávek Banko <[email protected]> | 2013-07-28 02:30:20 +0200 |
---|---|---|
committer | Slávek Banko <[email protected]> | 2013-07-28 02:30:20 +0200 |
commit | 48a589b8c526b34e79e8cdddc4cb7f5fc7b76815 (patch) | |
tree | 0f30d90998669b60a0aa840f824cc3d4ea7ddc66 /kshutdownlockout | |
download | kshutdown-48a589b8c526b34e79e8cdddc4cb7f5fc7b76815.tar.gz kshutdown-48a589b8c526b34e79e8cdddc4cb7f5fc7b76815.zip |
Initial import of kshutdown 1.0.4
Diffstat (limited to 'kshutdownlockout')
-rw-r--r-- | kshutdownlockout/Makefile.am | 15 | ||||
-rw-r--r-- | kshutdownlockout/kshutdownlockout.desktop | 71 | ||||
-rw-r--r-- | kshutdownlockout/lockout.cpp | 236 | ||||
-rw-r--r-- | kshutdownlockout/lockout.h | 59 |
4 files changed, 381 insertions, 0 deletions
diff --git a/kshutdownlockout/Makefile.am b/kshutdownlockout/Makefile.am new file mode 100644 index 0000000..7fd6b25 --- /dev/null +++ b/kshutdownlockout/Makefile.am @@ -0,0 +1,15 @@ +INCLUDES = $(all_includes) +METASOURCES = AUTO + +kde_module_LTLIBRARIES = kshutdownlockout_panelapplet.la + +kshutdownlockout_panelapplet_la_SOURCES = lockout.cpp +kshutdownlockout_panelapplet_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) +kshutdownlockout_panelapplet_la_LIBADD = $(LIB_KSYCOCA) + +noinst_HEADERS = lockout.h + +lnkdir = $(kde_datadir)/kicker/applets +lnk_DATA = kshutdownlockout.desktop + +EXTRA_DIST = $(lnk_DATA) diff --git a/kshutdownlockout/kshutdownlockout.desktop b/kshutdownlockout/kshutdownlockout.desktop new file mode 100644 index 0000000..7cdc247 --- /dev/null +++ b/kshutdownlockout/kshutdownlockout.desktop @@ -0,0 +1,71 @@ +[Desktop Entry] +Type=Plugin +# Encoding: UTF-8 +Name=KShutDown +Comment=Lock/Logout buttons for the panel +Comment[af]=Sluit/Teken af knoppies vir die paneel +Comment[ar]=أزرار اقفال/خروج للوحة المهام +Comment[az]=Panel appletlərini bağla/ayır +Comment[bg]=Системен аплет за заключване на екрана и изход от системата +Comment[bn]=প্যানেল-এর জন্য লক এবং লগ-আউট বাটন +Comment[bs]=Dugmad za zaključavanje i odjavu za panel +Comment[ca]=Botons al plafó per a bloquejar/sortir +Comment[cs]=Umožňuje snadné odhlášení/uzamčení z panelu +Comment[cy]=Botymau cloi/allgofnodi i'r panel +Comment[da]=Lås/Logaf-knapper til panelet +Comment[de]=Bildschirmsperr- und Abmeldeknöpfe für die Kontrollleiste +Comment[el]=Κουμπιά Κλειδώματος/Αποσύνδεσης για τον πίνακα +Comment[eo]=Butonoj por ekranŝloso kaj adiaŭo en Panelo +Comment[es]=Botones de bloqueo y salida del panel +Comment[et]=Lukustamise ja väljalogimise nupud paneelil +Comment[eu]=Lock/Logout botoiak panelerako +Comment[fa]=دکمهی خروج/قفل صفحهی کنترل +Comment[fi]=Lukitse/Kirjaudu ulos napit paneeliin +Comment[fr]=Des boutons sur le tableau de bord pour verrouiller le bureau ou se déconnecter +Comment[gl]=Botóns de Bloqueo/Saída no panel +Comment[he]=כפתורי נעילה\יציאה ללוח +Comment[hi]=फलक के लिए ताला/लॉगआउट बटन +Comment[hr]=Tipke za zaključavanje/odjavu na ploči +Comment[hu]=A panelba illeszkedő nyomógomok az asztal zárolásához és a kijelentkezéshez +Comment[is]=Stimpla út/Læsa skjáborði hnappar fyrir spjaldið +Comment[it]=Pulsanti sul pannello per il blocco dello schermo o il termine della sessione +Comment[ja]=パネルからロック/ログアウトができます +Comment[lo]=ປຸ່ມລອກ/ລອກອິນສຳລັບຖາດພາເນລ +Comment[lt]=Užrakinimo/išsiregistravimo mygtukai pultui +Comment[lv]=Slēgt/Atteikties pogas panelim +Comment[mk]=Копчиња Заклучи/Одјави се за панелот +Comment[mn]=Удирдах цонхон дээрх дэлгэц түгжих- ба гарах товч +Comment[mt]=Applet għall-pannell biex ittemm is-sessjoni jew issakkar l-iskrin +Comment[nb]=Lås/Loggut-knapp for panelet +Comment[nds]=Paneelknööp för't Schirm afsluten / Afmellen +Comment[nl]=Paneelknoppen om af te melden of het scherm te vergrendelen +Comment[nn]=Panelknappar for skjermlås/utlogging +Comment[nso]=Ditobetswa tsa Notlelo/Etswa tsa panel +Comment[pa]=ਪੈਨਲ ਲਈ ਤਾਲਾ/ਬਾਹਰੀ ਦਰ ਐਪਲਿਟ +Comment[pl]=Przyciski blokowania i wylogowania dla panelu +Comment[pt]=Os botões para trancar o ecrã e sair do KDE para o painel +Comment[pt_BR]=Botões de Travar/Sair para o Painel +Comment[ro]=Butoane de ieşire şi de blocare ecran, pentru panou +Comment[ru]=Кнопки выхода/запирания экрана на панели +Comment[se]=Lohkadan-/olggosčálihanboalut panela várás +Comment[sk]=Tlačidlá panelu pre odhlásenie alebo uzamknutie obrazovky +Comment[sl]=Gumba za zaklenitev in odjavo na pultu +Comment[sr]=Дугмад за закључавање/одјављивање за панел +Comment[sr@Latn]=Dugmad za zaključavanje/odjavljivanje za panel +Comment[sv]=Lås/Logga ut-knappar för panelen +Comment[ta]=பூட்டு/பலகத்திற்கான வெளிச்செல் பட்டன்கள் +Comment[tg]=Кнопкаҳои баромад/қуфли экран дар панел +Comment[th]=ปุ่มล็อค/ล็อกอินสำหรับถาดพาเนล +Comment[tr]=Panel için Kilitle/Çık düğmeleri +Comment[uk]=Кнопки "Замкнути" та "Завершити" для панелі +Comment[uz]=Панел учун қулфлаш/чиқиш тугмалари +Comment[ven]=Khiela/bathene dzau litsha dza phanele +Comment[vi]=Nút Lock/Logout cho khung +Comment[xh]=Tshixa/Amaqhosa ophumo ngaphandle lwe window eneenkcukacha +Comment[xx]=xxLock/Logout buttons for the panelxx +Comment[zh_CN]=面板的锁定/注销按钮 +Comment[zh_TW]=在面板上顯示「螢幕鎖定/登出」按鈕 +Comment[zu]=Izinkinobho Zokukhiya/Ukuphumela ngaphandle zewindi lemininingwane +# DUPLICATE: Comment[el]=Κουμπιά κλειδώματος/αποσύνδεσης για τον πίνακα +Icon=kshutdown +X-KDE-Library=kshutdownlockout_panelapplet diff --git a/kshutdownlockout/lockout.cpp b/kshutdownlockout/lockout.cpp new file mode 100644 index 0000000..6fd7085 --- /dev/null +++ b/kshutdownlockout/lockout.cpp @@ -0,0 +1,236 @@ +/***************************************************************** + +Copyright (c) 2001 Carsten Pfeiffer <[email protected]> + 2001 Matthias Elter <[email protected]> + 2001 Martijn Klingens <[email protected]> + + KShutDown Branch: + 2005 Stephen Ellwood + 2005 Konrad Twardowski <[email protected]> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +******************************************************************/ + +// TODO: 2.0: update handbook + +#include <sys/types.h> + +#include "lockout.h" + +#include <qlayout.h> +#include <qtoolbutton.h> +#include <qtooltip.h> + +#include <dcopclient.h> +#include <kaction.h> +#include <kapplication.h> +#include <kglobal.h> +#include <kiconloader.h> +#include <klocale.h> +#include <kmessagebox.h> +#include <kpopupmenu.h> +#include <kprocess.h> +#include <krun.h> + +// plugin + +#if !KDE_IS_VERSION(3,3,2) +#undef KDE_EXPORT +#define KDE_EXPORT +#endif + +extern "C" +{ + KDE_EXPORT KPanelApplet *init(QWidget *parent, const QString& configFile) + { + // share i18n with KShutDown + KGlobal::locale()->insertCatalogue("kshutdown"); + + return new Lockout(configFile, parent); + } +} + +// public + +Lockout::Lockout(const QString& configFile, QWidget *parent) + : KPanelApplet( + configFile, + KPanelApplet::Normal, + 0, // no standard actions + parent, + "kshutdownlockout" + ) +{ + setBackgroundOrigin(AncestorOrigin); + setFrameStyle(Panel | Sunken); + + initActions(); + + KPopupMenu *pm_actions = new KPopupMenu(this); + pm_actions->insertTitle(SmallIcon("messagebox_warning"), i18n("No Delay")); + _shutDownAction->plug(pm_actions); + _rebootAction->plug(pm_actions); + _lockScreenAction->plug(pm_actions); + _logoutAction->plug(pm_actions); + pm_actions->insertSeparator(); + _configureKShutDownAction->plug(pm_actions); + + QVBoxLayout *layout = new QVBoxLayout(this); + QToolButton *button = new QToolButton(this); + button->setAutoRaise(true); + button->setBackgroundMode(X11ParentRelative); + button->setPixmap(SmallIcon("exit")); + button->setPopupDelay(100); + button->setMinimumSize(button->pixmap()->size()); + button->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); + connect(button, SIGNAL(clicked()), this, SLOT(slotShowKShutDown())); + + button->setPopup(pm_actions); + layout->addWidget(button); + +/* // read configuration + KConfig *config = this->config(); + config->setGroup("kshutdownlockout"); + _transparent = config->readBoolEntry("Transparent", true); +*/ + if (!kapp->dcopClient()->isAttached()) + kapp->dcopClient()->attach(); + connect(kapp, SIGNAL(iconChanged(int)), SLOT(slotIconChanged())); + + QToolTip::add( + this, + "<qt>" \ + "<b>KShutDown</b><br><br>" + + i18n("Click for KShutDown main window<br>Click and hold for menu") + + "</qt>" + ); +} + +Lockout::~Lockout() +{ + KGlobal::locale()->removeCatalogue("kshutdown"); +} + +int Lockout::heightForWidth(int/* width*/) const +{ + return sizeHint().height(); +} + +int Lockout::widthForHeight(int/* height*/) const +{ + return sizeHint().width(); +} + +// private + +void Lockout::callKShutDown(const QCString &function) { + DCOPClient *client = kapp->dcopClient(); + if (!client->isApplicationRegistered("kshutdown")) { + // run KShutDown + KProcess *p = new KProcess(); + if (!p) { + KMessageBox::error(0, i18n("Could not run KShutDown!")); + + return; + } + *p << "kshutdown"; + *p << "--init"; + if (!p->start(KProcess::Block)) + KMessageBox::error(0, i18n("Could not run KShutDown!")); + delete p; + } + client->send("kshutdown", "KShutdownIface", function, ""); +} + +void Lockout::initActions() { + KActionCollection *ac_shutDown = new KActionCollection(this, this); + + _lockScreenAction = new KAction( + i18n("Lock Screen"), "lock", KShortcut(), + this, SLOT(slotLockScreen()), + ac_shutDown, "kshutdown_lockscreen" + ); + + _logoutAction = new KAction( + i18n("End Current Session"), "undo", KShortcut(), + this, SLOT(slotLogout()), + ac_shutDown, "kshutdown_logout" + ); + + _rebootAction = new KAction( + i18n("Restart Computer"), "reload", KShortcut(), + this, SLOT(slotReboot()), + ac_shutDown, "kshutdown_reboot" + ); + + _shutDownAction = new KAction( + i18n("Turn Off Computer"), "exit", KShortcut(), + this, SLOT(slotShutDown()), + ac_shutDown, "kshutdown_shutdown" + ); + + // standard actions + + _configureKShutDownAction = new KAction( + i18n("&Configure KShutDown..."), "configure", KShortcut(), + this, SLOT(slotConfigureKShutDown()), + ac_shutDown, "options_configure" + ); +} + +void Lockout::runCommand(const QString &command) { + pid_t pid = KRun::run(command, KURL::List()); + if (!pid) + KMessageBox::error(0, i18n("Could not run KShutDown!")); +} + +// private slots + +void Lockout::slotCancel() { + callKShutDown("cancel()"); +} + +void Lockout::slotConfigureKShutDown() { + callKShutDown("configure()"); +} + +void Lockout::slotIconChanged() { +// FIXME: 2.0: update action icons + setIcon(SmallIcon("exit")); +} + +void Lockout::slotLockScreen() { + callKShutDown("lockScreen()"); +} + +void Lockout::slotLogout() { + runCommand("kshutdown --init --confirm --logout"); +} + +void Lockout::slotReboot() { + runCommand("kshutdown --init --confirm --reboot"); +} + +void Lockout::slotShowKShutDown() { + callKShutDown("makeVisible()"); +} + +void Lockout::slotShutDown() { + runCommand("kshutdown --init --confirm --shutdown"); +} diff --git a/kshutdownlockout/lockout.h b/kshutdownlockout/lockout.h new file mode 100644 index 0000000..faecd58 --- /dev/null +++ b/kshutdownlockout/lockout.h @@ -0,0 +1,59 @@ +#ifndef __LOCKOUT_H__ +#define __LOCKOUT_H__ + +#include <kpanelapplet.h> + +class KAction; + +/** + * @short A KShutDown panel applet. + * Based on the Lockout applet. + */ +class Lockout: public KPanelApplet +{ + Q_OBJECT +public: + /** + * Constructs a new applet. + * @param configFile A configuration file (provided by the Kicker) + * @param parent A parent widget + */ + Lockout(const QString& configFile, QWidget *parent = 0); + + /** + * Destructor. + */ + ~Lockout(); + + /** + * Returns a suggested height for a given @p width. + */ + int heightForWidth(int width) const; + + /** + * Returns a suggested width for a given @p height. + */ + int widthForHeight(int height) const; +private: + bool _transparent; + KAction + *_configureKShutDownAction, + *_lockScreenAction, + *_logoutAction, + *_rebootAction, + *_shutDownAction; + void callKShutDown(const QCString &function); + void initActions(); + void runCommand(const QString &command); +private slots: + void slotCancel(); + void slotConfigureKShutDown(); + void slotIconChanged(); + void slotLockScreen(); + void slotLogout(); + void slotReboot(); + void slotShowKShutDown(); + void slotShutDown(); +}; + +#endif // __LOCKOUT_H__ |