mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-24 10:52:51 +00:00
255 lines
7.8 KiB
C++
255 lines
7.8 KiB
C++
/*
|
|
Copyright 2007 Robert Knight <robertknight@gmail.com>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library 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
|
|
Library 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.
|
|
*/
|
|
|
|
// Own
|
|
#include "applet/applet.h"
|
|
|
|
// Qt
|
|
#include <QtCore/QProcess>
|
|
#include <QtGui/QAction>
|
|
#include <QtGui/QApplication>
|
|
#include <QtGui/QGraphicsView>
|
|
#include <QtGui/QVBoxLayout>
|
|
#include <QtGui/QLabel>
|
|
#include <QtGui/QGraphicsLinearLayout>
|
|
|
|
// KDE
|
|
#include <KIcon>
|
|
#include <KDebug>
|
|
#include <KConfigDialog>
|
|
|
|
// Plasma
|
|
#include <Plasma/IconWidget>
|
|
#include <Plasma/Containment>
|
|
#include <Plasma/View>
|
|
#include <Plasma/ToolTipManager>
|
|
|
|
// Local
|
|
#include "ui_kickoffConfig.h"
|
|
#include "ui/launcher.h"
|
|
#include "core/recentapplications.h"
|
|
|
|
class LauncherApplet::Private
|
|
{
|
|
public:
|
|
Private(LauncherApplet *lApplet) : launcher(0), switcher(0), q(lApplet) { }
|
|
~Private() {
|
|
delete launcher;
|
|
}
|
|
void createLauncher();
|
|
void initToolTip();
|
|
|
|
Kickoff::Launcher *launcher;
|
|
|
|
QList<QAction*> actions;
|
|
QAction* switcher;
|
|
LauncherApplet *q;
|
|
Ui::kickoffConfig ui;
|
|
};
|
|
|
|
void LauncherApplet::Private::createLauncher()
|
|
{
|
|
if (launcher) {
|
|
return;
|
|
}
|
|
|
|
launcher = new Kickoff::Launcher(q);
|
|
launcher->setAttribute(Qt::WA_NoSystemBackground);
|
|
launcher->setAutoHide(true);
|
|
QObject::connect(launcher, SIGNAL(aboutToHide()), q, SLOT(hidePopup()));
|
|
QObject::connect(launcher, SIGNAL(configNeedsSaving()), q, SIGNAL(configNeedsSaving()));
|
|
//launcher->resize(launcher->sizeHint());
|
|
//QObject::connect(launcher, SIGNAL(aboutToHide()), icon, SLOT(setUnpressed()));
|
|
}
|
|
|
|
void LauncherApplet::Private::initToolTip()
|
|
{
|
|
Plasma::ToolTipContent data(i18n("Kickoff Application Launcher"),
|
|
i18n("Favorites, applications, computer places, "
|
|
"recently used items and desktop sessions"),
|
|
q->popupIcon().pixmap(IconSize(KIconLoader::Desktop)));
|
|
Plasma::ToolTipManager::self()->setContent(q, data);
|
|
}
|
|
|
|
LauncherApplet::LauncherApplet(QObject *parent, const QVariantList &args)
|
|
: Plasma::PopupApplet(parent, args),
|
|
d(new Private(this))
|
|
{
|
|
KGlobal::locale()->insertCatalog("plasma_applet_launcher");
|
|
setAspectRatioMode(Plasma::IgnoreAspectRatio);
|
|
setHasConfigurationInterface(true);
|
|
}
|
|
|
|
LauncherApplet::~LauncherApplet()
|
|
{
|
|
delete d;
|
|
}
|
|
|
|
void LauncherApplet::init()
|
|
{
|
|
if (KService::serviceByStorageId("kde4-kmenuedit.desktop")) {
|
|
QAction* menueditor = new QAction(i18n("Edit Applications..."), this);
|
|
d->actions.append(menueditor);
|
|
connect(menueditor, SIGNAL(triggered(bool)), this, SLOT(startMenuEditor()));
|
|
}
|
|
|
|
Q_ASSERT(! d->switcher);
|
|
d->switcher = new QAction(i18n("Switch to Classic Menu Style"), this);
|
|
d->actions.append(d->switcher);
|
|
connect(d->switcher, SIGNAL(triggered(bool)), this, SLOT(switchMenuStyle()));
|
|
|
|
configChanged();
|
|
Plasma::ToolTipManager::self()->registerWidget(this);
|
|
}
|
|
|
|
void LauncherApplet::constraintsEvent(Plasma::Constraints constraints)
|
|
{
|
|
if ((constraints & Plasma::ImmutableConstraint) && d->switcher) {
|
|
d->switcher->setVisible(immutability() == Plasma::Mutable);
|
|
}
|
|
}
|
|
|
|
void LauncherApplet::switchMenuStyle()
|
|
{
|
|
if (containment()) {
|
|
Plasma::Applet * simpleLauncher =
|
|
containment()->addApplet("simplelauncher", QVariantList() << true, geometry());
|
|
|
|
//Copy all the config items to the simple launcher
|
|
QMetaObject::invokeMethod(simpleLauncher, "saveConfigurationFromKickoff",
|
|
Qt::DirectConnection, Q_ARG(KConfigGroup, config()),
|
|
Q_ARG(KConfigGroup, globalConfig()));
|
|
|
|
//Switch shortcuts with the new launcher to avoid losing it
|
|
KShortcut currentShortcut = globalShortcut();
|
|
setGlobalShortcut(KShortcut());
|
|
simpleLauncher->setGlobalShortcut(currentShortcut);
|
|
|
|
//Destroy this widget
|
|
destroy();
|
|
}
|
|
}
|
|
|
|
void LauncherApplet::startMenuEditor()
|
|
{
|
|
QProcess::execute("kmenuedit");
|
|
}
|
|
|
|
void LauncherApplet::createConfigurationInterface(KConfigDialog *parent)
|
|
{
|
|
QWidget *widget = new QWidget();
|
|
d->ui.setupUi(widget);
|
|
parent->addPage(widget, i18nc("General configuration page", "General"), icon());
|
|
|
|
connect(parent, SIGNAL(applyClicked()), this, SLOT(configAccepted()));
|
|
connect(parent, SIGNAL(okClicked()), this, SLOT(configAccepted()));
|
|
|
|
d->createLauncher();
|
|
d->ui.iconButton->setIcon(popupIcon());
|
|
d->ui.switchOnHoverCheckBox->setChecked(d->launcher->switchTabsOnHover());
|
|
d->ui.appsByNameCheckBox->setChecked(d->launcher->showAppsByName());
|
|
d->ui.showRecentlyInstalledCheckBox->setChecked(d->launcher->showRecentlyInstalled());
|
|
connect(d->ui.iconButton, SIGNAL(iconChanged(QString)), parent, SLOT(settingsModified()));
|
|
connect(d->ui.switchOnHoverCheckBox, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
connect(d->ui.appsByNameCheckBox, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
connect(d->ui.showRecentlyInstalledCheckBox, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
}
|
|
|
|
void LauncherApplet::popupEvent(bool show)
|
|
{
|
|
if (show) {
|
|
Plasma::ToolTipManager::self()->clearContent(this);
|
|
d->createLauncher();
|
|
d->launcher->setLauncherOrigin(popupPlacement(), location());
|
|
}
|
|
}
|
|
|
|
void LauncherApplet::toolTipAboutToShow()
|
|
{
|
|
if (d->launcher->isVisible()) {
|
|
Plasma::ToolTipManager::self()->clearContent(this);
|
|
} else {
|
|
d->initToolTip();
|
|
}
|
|
}
|
|
|
|
void LauncherApplet::configChanged()
|
|
{
|
|
KConfigGroup cg = config();
|
|
setPopupIcon(cg.readEntry("icon", "start-here-kde"));
|
|
constraintsEvent(Plasma::ImmutableConstraint);
|
|
|
|
if (d->launcher) {
|
|
d->launcher->setApplet(this);
|
|
}
|
|
}
|
|
|
|
void LauncherApplet::configAccepted()
|
|
{
|
|
bool switchTabsOnHover = d->ui.switchOnHoverCheckBox->isChecked();
|
|
bool showAppsByName = d->ui.appsByNameCheckBox->isChecked();
|
|
bool showRecentlyInstalled = d->ui.showRecentlyInstalledCheckBox->isChecked();
|
|
|
|
const QString iconname = d->ui.iconButton->icon();
|
|
|
|
// TODO: should this be moved into Launcher as well? perhaps even the config itself?
|
|
d->createLauncher();
|
|
|
|
KConfigGroup cg = config();
|
|
const QString oldIcon = cg.readEntry("icon", "start-here-kde");
|
|
if (!iconname.isEmpty() && iconname != oldIcon) {
|
|
cg.writeEntry("icon", iconname);
|
|
|
|
if (!iconname.isEmpty()) {
|
|
setPopupIcon(iconname);
|
|
}
|
|
|
|
emit configNeedsSaving();
|
|
}
|
|
|
|
d->launcher->setSwitchTabsOnHover(switchTabsOnHover);
|
|
d->launcher->setShowAppsByName(showAppsByName);
|
|
d->launcher->setShowRecentlyInstalled(showRecentlyInstalled);
|
|
}
|
|
|
|
QList<QAction*> LauncherApplet::contextualActions()
|
|
{
|
|
return d->actions;
|
|
}
|
|
|
|
QWidget *LauncherApplet::widget()
|
|
{
|
|
d->createLauncher();
|
|
return d->launcher;
|
|
}
|
|
|
|
void LauncherApplet::saveConfigurationFromSimpleLauncher(const KConfigGroup & configGroup, const KConfigGroup & globalConfigGroup)
|
|
{
|
|
//Copy configuration values
|
|
KConfigGroup cg = config();
|
|
configGroup.copyTo(&cg);
|
|
|
|
KConfigGroup gcg = globalConfig();
|
|
globalConfigGroup.copyTo(&gcg);
|
|
|
|
configChanged();
|
|
emit configNeedsSaving();
|
|
}
|
|
|
|
#include "moc_applet.cpp"
|