File indexing completed on 2024-05-05 05:56:58

0001 /*
0002   SPDX-FileCopyrightText: 2008-2009 Eike Hein <hein@kde.org>
0003 
0004   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #include "firstrundialog.h"
0008 #include "mainwindow.h"
0009 #include "ui_firstrundialog.h"
0010 
0011 #include <KActionCollection>
0012 #include <KGlobalAccel>
0013 #include <KLocalizedString>
0014 #include <QDialogButtonBox>
0015 #include <QPushButton>
0016 
0017 FirstRunDialog::FirstRunDialog(MainWindow *mainWindow)
0018     : QDialog(mainWindow)
0019 {
0020     m_mainWindow = mainWindow;
0021 
0022     setWindowTitle(xi18nc("@title:window", "First Run"));
0023     QVBoxLayout *mainLayout = new QVBoxLayout;
0024     setLayout(mainLayout);
0025     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0026     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
0027     okButton->setDefault(true);
0028     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0029     connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
0030     connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
0031 
0032     QWidget *widget = new QWidget(this);
0033     mainLayout->addWidget(widget);
0034     mainLayout->addWidget(buttonBox);
0035 
0036     m_ui = new Ui::FirstRunDialog();
0037     m_ui->setupUi(widget);
0038     m_ui->titleWidget->setIcon(QIcon::fromTheme(QStringLiteral("yakuake")));
0039 
0040     widget->setMinimumSize(widget->sizeHint());
0041 
0042     initKeyButton();
0043 
0044     connect(m_ui->keyButton, SIGNAL(keySequenceChanged(QKeySequence)), this, SLOT(validateKeySequence(QKeySequence)));
0045 }
0046 
0047 FirstRunDialog::~FirstRunDialog()
0048 {
0049     delete m_ui;
0050 }
0051 
0052 void FirstRunDialog::initKeyButton()
0053 {
0054     m_ui->keyButton->setMultiKeyShortcutsAllowed(false);
0055 
0056     m_ui->keyButton->blockSignals(true);
0057 
0058     QAction *action = static_cast<QAction *>(m_mainWindow->actionCollection()->action(QStringLiteral("toggle-window-state")));
0059 
0060     m_keySequence = KGlobalAccel::self()->shortcut(action).first();
0061 
0062     m_ui->keyButton->setKeySequence(m_keySequence);
0063 
0064     m_ui->keyButton->blockSignals(false);
0065 }
0066 
0067 void FirstRunDialog::validateKeySequence(const QKeySequence &keySequence)
0068 {
0069     if (!KGlobalAccel::isGlobalShortcutAvailable(keySequence)) {
0070         bool steal = KGlobalAccel::promptStealShortcutSystemwide(this, KGlobalAccel::globalShortcutsByKey(keySequence), keySequence);
0071 
0072         if (!steal)
0073             initKeyButton();
0074         else {
0075             KGlobalAccel::stealShortcutSystemwide(keySequence);
0076             m_keySequence = m_ui->keyButton->keySequence();
0077         }
0078     } else
0079         m_keySequence = m_ui->keyButton->keySequence();
0080 }
0081 
0082 #include "moc_firstrundialog.cpp"