Port KCMDesktop to Qt 5

This commit is contained in:
Martin Gräßlin 2013-09-27 13:43:15 +02:00
parent 22f0e62cb8
commit 72c76ce423
5 changed files with 45 additions and 33 deletions

View file

@ -6,7 +6,16 @@ kde4_add_ui_files(kcm_kwindesktop_PART_SRCS main.ui)
kde4_add_plugin(kcm_kwindesktop ${kcm_kwindesktop_PART_SRCS})
target_link_libraries(kcm_kwindesktop ${KDE4_KDEUI_LIBS} ${KDE4_KCMUTILS_LIBS} ${X11_LIBRARIES})
target_link_libraries(kcm_kwindesktop
Qt5::X11Extras
KF5::KCMUtils
KF5::KCompletion
KF5::KI18n
KF5::KWindowSystem
KF5::XmlGui
${KDE4Support_LIBRARIES}
${X11_LIBRARIES}
)
install(TARGETS kcm_kwindesktop DESTINATION ${PLUGIN_INSTALL_DIR} )

View file

@ -3,7 +3,7 @@ Type=Service
X-KDE-ServiceTypes=KCModule
X-DocPath=kcontrol/desktop/index.html
Icon=preferences-desktop
Exec=kcmshell4 desktop
Exec=kcmshell5 desktop
X-KDE-Library=kcm_kwindesktop
X-KDE-ParentApp=kcontrol

View file

@ -44,10 +44,10 @@ public:
void setMaxDesktops(int maxDesktops);
void setDesktopConfig(KWinDesktopConfig *desktopConfig);
signals:
Q_SIGNALS:
void changed();
public slots:
public Q_SLOTS:
void numberChanged(int number);
private:

View file

@ -24,10 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <QDBusConnection>
#include <QDBusInterface>
#include <KAboutData>
#include <KAboutApplicationDialog>
#include <KActionCollection>
#include <KAction>
#include <KCModuleProxy>
#include <KDialog>
#include <KGlobalAccel>
#include <KPluginInfo>
#include <KPluginFactory>
@ -52,7 +54,7 @@ KWinDesktopConfigForm::KWinDesktopConfigForm(QWidget* parent)
}
KWinDesktopConfig::KWinDesktopConfig(QWidget* parent, const QVariantList& args)
: KCModule(KWinDesktopConfigFactory::componentData(), parent, args)
: KCModule(KAboutData::pluginData(QStringLiteral("kcm_kwindesktop")), parent, args)
, m_config(KSharedConfig::openConfig("kwinrc"))
, m_actionCollection(NULL)
, m_switchDesktopCollection(NULL)
@ -79,11 +81,11 @@ void KWinDesktopConfig::init()
setQuickHelp(i18n("<h1>Multiple Desktops</h1>In this module, you can configure how many virtual desktops you want and how these should be labeled."));
// Shortcut config. The shortcut belongs to the component "kwin"!
m_actionCollection = new KActionCollection(this, KComponentData("kwin"));
m_actionCollection = new KActionCollection(this, QStringLiteral("kwin"));
m_actionCollection->setConfigGroup("Desktop Switching");
m_actionCollection->setConfigGlobal(true);
m_switchDesktopCollection = new KActionCollection(this, KComponentData("kwin"));
m_switchDesktopCollection = new KActionCollection(this, QStringLiteral("kwin"));
m_switchDesktopCollection->setConfigGroup("Desktop Switching");
m_switchDesktopCollection->setConfigGlobal(true);
@ -106,10 +108,10 @@ void KWinDesktopConfig::init()
int n = info.numberOfDesktops();
for (int i = 1; i <= n; ++i) {
KAction* a = qobject_cast<KAction*>(m_actionCollection->addAction(QString("Switch to Desktop %1").arg(i)));
QAction* a = m_actionCollection->addAction(QString("Switch to Desktop %1").arg(i));
a->setProperty("isConfigurationAction", true);
a->setText(i18n("Switch to Desktop %1", i));
a->setGlobalShortcut(KShortcut(), KAction::ActiveShortcut);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>());
}
// This should be after the "Switch to Desktop %1" loop. It HAS to be
@ -142,8 +144,8 @@ void KWinDesktopConfig::init()
m_ui->effectComboBox->addItem(fadedesktop);
// effect config and info button
m_ui->effectInfoButton->setIcon(KIcon("dialog-information"));
m_ui->effectConfigButton->setIcon(KIcon("configure"));
m_ui->effectInfoButton->setIcon(QIcon::fromTheme("dialog-information"));
m_ui->effectConfigButton->setIcon(QIcon::fromTheme("configure"));
connect(m_ui->rowsSpinBox, SIGNAL(valueChanged(int)), SLOT(changed()));
connect(m_ui->numberSpinBox, SIGNAL(valueChanged(int)), SLOT(changed()));
@ -197,10 +199,10 @@ KWinDesktopConfig::~KWinDesktopConfig()
void KWinDesktopConfig::addAction(const QString &name, const QString &label)
{
KAction* a = qobject_cast<KAction*>(m_switchDesktopCollection->addAction(name));
QAction* a = m_switchDesktopCollection->addAction(name);
a->setProperty("isConfigurationAction", true);
a->setText(label);
a->setGlobalShortcut(KShortcut(), KAction::ActiveShortcut);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>());
}
void KWinDesktopConfig::defaults()
@ -396,10 +398,15 @@ QString KWinDesktopConfig::extrapolatedShortcut(int desktop) const
if (desktop == 1)
return QString("Ctrl+F1");
KAction *beforeAction = qobject_cast<KAction*>(m_actionCollection->actions().at(qMin(9, desktop - 2)));
QString before = beforeAction->globalShortcut(KAction::ActiveShortcut).toString();
if (before.isEmpty())
before = beforeAction->globalShortcut(KAction::DefaultShortcut).toString();
QAction *beforeAction = m_actionCollection->actions().at(qMin(9, desktop - 2));
auto shortcuts = KGlobalAccel::self()->shortcut(beforeAction);
if (shortcuts.isEmpty()) {
shortcuts = KGlobalAccel::self()->defaultShortcut(beforeAction);
}
QString before;
if (!shortcuts.isEmpty()) {
before = shortcuts.first().toString(QKeySequence::NativeText);
}
QString seq;
if (before.contains(QRegExp("F[0-9]{1,2}"))) {
@ -443,30 +450,26 @@ void KWinDesktopConfig::slotChangeShortcuts(int number)
// Remove the action from the action collection. The action itself
// will still exist because that's the way kwin currently works.
// No need to remove/forget it. See kwinbindings.
KAction *a = qobject_cast<KAction*>(
m_actionCollection->takeAction(m_actionCollection->actions().last()));
QAction *a = m_actionCollection->takeAction(m_actionCollection->actions().last());
// Remove any associated global shortcut. Set it to ""
a->setGlobalShortcut(
KShortcut(),
KAction::ActiveShortcut,
KAction::NoAutoloading);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>(), KGlobalAccel::NoAutoloading);
m_ui->messageLabel->hide();
delete a;
} else {
// add desktop
int desktop = m_actionCollection->count() + 1;
KAction* action = qobject_cast<KAction*>(m_actionCollection->addAction(QString("Switch to Desktop %1").arg(desktop)));
QAction* action = m_actionCollection->addAction(QString("Switch to Desktop %1").arg(desktop));
action->setProperty("isConfigurationAction", true);
action->setText(i18n("Switch to Desktop %1", desktop));
action->setGlobalShortcut(KShortcut(), KAction::ActiveShortcut);
KGlobalAccel::self()->setShortcut(action, QList<QKeySequence>());
QString shortcutString = extrapolatedShortcut(desktop);
if (shortcutString.isEmpty()) {
m_ui->messageLabel->setText(i18n("No suitable Shortcut for Desktop %1 found", desktop));
m_ui->messageLabel->show();
} else {
KShortcut shortcut(shortcutString);
if (!shortcut.primary().isEmpty() || KGlobalAccel::self()->isGlobalShortcutAvailable(shortcut.primary())) {
action->setGlobalShortcut(shortcut, KAction::ActiveShortcut, KAction::NoAutoloading);
QKeySequence shortcut(shortcutString);
if (!shortcut.isEmpty() || KGlobalAccel::self()->isGlobalShortcutAvailable(shortcut)) {
KGlobalAccel::self()->setShortcut(action, QList<QKeySequence>(), KGlobalAccel::NoAutoloading);
m_ui->messageLabel->setText(i18n("Assigned global Shortcut \"%1\" to Desktop %2", shortcutString, desktop));
m_ui->messageLabel->show();
} else {
@ -541,7 +544,7 @@ void KWinDesktopConfig::slotAboutEffectClicked()
const QString license = pluginInfo.license();
const QString icon = pluginInfo.icon();
KAboutData aboutData(name.toUtf8(), name.toUtf8(), ki18n(name.toUtf8()), version.toUtf8(), ki18n(comment.toUtf8()), KAboutLicense::byKeyword(license).key(), ki18n(QByteArray()), ki18n(QByteArray()), website.toLatin1());
KAboutData aboutData(name, name, name, version, comment, KAboutLicense::byKeyword(license).key(), QString(), QString(), website.toLatin1());
aboutData.setProgramIconName(icon);
const QStringList authors = author.split(',');
const QStringList emails = email.split(',');
@ -549,12 +552,12 @@ void KWinDesktopConfig::slotAboutEffectClicked()
if (authors.count() == emails.count()) {
foreach (const QString & author, authors) {
if (!author.isEmpty()) {
aboutData.addAuthor(ki18n(author.toUtf8()), ki18n(QByteArray()), emails[i].toUtf8(), 0);
aboutData.addAuthor(i18n(author.toUtf8()), QString(), emails[i]);
}
i++;
}
}
QPointer<KAboutApplicationDialog> aboutPlugin = new KAboutApplicationDialog(&aboutData, this);
QPointer<KAboutApplicationDialog> aboutPlugin = new KAboutApplicationDialog(aboutData, this);
aboutPlugin->exec();
delete aboutPlugin;
}

View file

@ -55,13 +55,13 @@ public:
// undo all changes
void undo();
public slots:
public Q_SLOTS:
virtual void save();
virtual void load();
virtual void defaults();
private slots:
private Q_SLOTS:
void slotChangeShortcuts(int number);
void slotShowAllShortcuts();
void slotEffectSelectionChanged(int index);