[SCM] ktp-accounts-kcm packaging branch, master, updated. debian/15.12.1-1-1157-gc4589c5

Maximiliano Curia maxy at moszumanska.debian.org
Fri May 27 23:59:40 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-accounts-kcm.git;a=commitdiff;h=dab90df

The following commit has been merged in the master branch:
commit dab90df7395c24f32840d4ed4b1fd7363f2ee4b0
Author: Dario Freddi <drf at kde.org>
Date:   Fri Jun 3 10:08:17 2011 +0200

    If Tp::AccountManager failed to become ready (because of missing Mission Control), warn the user and "disable" the KCM UI with nice overlay effect.
    
    Reviewed-by: Martin Klapetek
---
 src/kcm-telepathy-accounts.cpp | 102 +++++++++++++++++++++++++++++++++++++++--
 src/kcm-telepathy-accounts.h   |  18 +++++++-
 2 files changed, 114 insertions(+), 6 deletions(-)

diff --git a/src/kcm-telepathy-accounts.cpp b/src/kcm-telepathy-accounts.cpp
index b75ed22..3959dbc 100644
--- a/src/kcm-telepathy-accounts.cpp
+++ b/src/kcm-telepathy-accounts.cpp
@@ -27,6 +27,8 @@
 #include "edit-account-dialog.h"
 #include "accounts-list-delegate.h"
 
+#include <QLabel>
+
 #include <KGenericFactory>
 #include <KIcon>
 #include <KLocale>
@@ -88,7 +90,7 @@ KCMTelepathyAccounts::KCMTelepathyAccounts(QWidget *parent, const QVariantList&
     m_ui->addAccountButton->setIcon(KIcon("list-add"));
     m_ui->editAccountButton->setIcon(KIcon("configure"));
     m_ui->removeAccountButton->setIcon(KIcon("edit-delete"));
-  
+
     AccountsListDelegate* delegate = new AccountsListDelegate(m_ui->accountsListView, this);
     m_ui->accountsListView->setItemDelegate(delegate);
 
@@ -147,6 +149,7 @@ void KCMTelepathyAccounts::onAccountManagerReady(Tp::PendingOperation *op)
     // Check the pending operation completed successfully.
     if (op->isError()) {
         kDebug() << "becomeReady() failed:" << op->errorName() << op->errorMessage();
+        new ErrorOverlay(this, op->errorMessage(), this);
         return;
     }
 
@@ -212,13 +215,102 @@ void KCMTelepathyAccounts::onRemoveAccountClicked()
     kDebug();
     QModelIndex index = m_ui->accountsListView->currentIndex();
 
-     if ( KMessageBox::warningContinueCancel( this, i18n( "Are you sure you want to remove the account \"%1\"?", m_accountsListModel->data(index, Qt::DisplayRole).toString()),
-                                        i18n( "Remove Account" ), KGuiItem(i18n( "Remove Account" ), "edit-delete"), KStandardGuiItem::cancel(),
-                                        QString(), KMessageBox::Notify | KMessageBox::Dangerous ) == KMessageBox::Continue )
+     if ( KMessageBox::warningContinueCancel(this, i18n("Are you sure you want to remove the account \"%1\"?", m_accountsListModel->data(index, Qt::DisplayRole).toString()),
+                                        i18n("Remove Account"), KGuiItem(i18n("Remove Account"), "edit-delete"), KStandardGuiItem::cancel(),
+                                        QString(), KMessageBox::Notify | KMessageBox::Dangerous) == KMessageBox::Continue)
     {
         m_accountsListModel->removeAccount(index);
     }
 }
 
-#include "kcm-telepathy-accounts.moc"
+/////
+
+ErrorOverlay::ErrorOverlay(QWidget *baseWidget, const QString &details, QWidget *parent) :
+    QWidget(parent ? parent : baseWidget->window()),
+    mBaseWidget(baseWidget)
+{
+    // Build the UI
+    QVBoxLayout *layout = new QVBoxLayout;
+    layout->setSpacing(10);
+
+    QLabel *pixmap = new QLabel();
+    pixmap->setPixmap(KIcon("dialog-error").pixmap(64));
+
+    QLabel *message = new QLabel(i18n("Something went terribly wrong and the IM system could not be initialized"));
+
+    QLabel *detailsLabel = new QLabel(details);
+    QFont font = detailsLabel->font();
+    font.setItalic(true);
+    detailsLabel->setFont(font);
+
+    pixmap->setAlignment(Qt::AlignHCenter);
+    message->setAlignment(Qt::AlignHCenter);
+    detailsLabel->setAlignment(Qt::AlignHCenter);
+
+    layout->addStretch();
+    layout->addWidget(pixmap);
+    layout->addWidget(message);
+    layout->addWidget(detailsLabel);
+    layout->addStretch();
+
+    setLayout(layout);
+
+    // Draw the transparent overlay background
+    QPalette p = palette();
+    p.setColor(backgroundRole(), QColor(0, 0, 0, 128));
+    p.setColor(foregroundRole(), Qt::white);
+    setPalette(p);
+    setAutoFillBackground(true);
+
+    mBaseWidget->installEventFilter(this);
+
+    reposition();
+}
+
+ErrorOverlay::~ErrorOverlay()
+{
+}
 
+void ErrorOverlay::reposition()
+{
+    if (!mBaseWidget) {
+        return;
+    }
+
+    // reparent to the current top level widget of the base widget if needed
+    // needed eg. in dock widgets
+    if (parentWidget() != mBaseWidget->window()) {
+        setParent(mBaseWidget->window());
+    }
+
+    // follow base widget visibility
+    // needed eg. in tab widgets
+    if (!mBaseWidget->isVisible()) {
+        hide();
+        return;
+    }
+
+    show();
+
+    // follow position changes
+    const QPoint topLevelPos = mBaseWidget->mapTo(window(), QPoint(0, 0));
+    const QPoint parentPos = parentWidget()->mapFrom(window(), topLevelPos);
+    move(parentPos);
+
+    // follow size changes
+    // TODO: hide/scale icon if we don't have enough space
+    resize(mBaseWidget->size());
+}
+
+bool ErrorOverlay::eventFilter(QObject * object, QEvent * event)
+{
+    if (object == mBaseWidget &&
+        (event->type() == QEvent::Move || event->type() == QEvent::Resize ||
+        event->type() == QEvent::Show || event->type() == QEvent::Hide ||
+        event->type() == QEvent::ParentChange)) {
+        reposition();
+    }
+    return QWidget::eventFilter(object, event);
+}
+
+#include "kcm-telepathy-accounts.moc"
diff --git a/src/kcm-telepathy-accounts.h b/src/kcm-telepathy-accounts.h
index 82ef151..11b45cc 100644
--- a/src/kcm-telepathy-accounts.h
+++ b/src/kcm-telepathy-accounts.h
@@ -68,6 +68,22 @@ private:
     AccountsListModel *m_accountsListModel;
 };
 
+// Helper class for drawing error overlays
+class ErrorOverlay : public QWidget
+{
+    Q_OBJECT
+public:
+    explicit ErrorOverlay(QWidget *baseWidget, const QString &details, QWidget *parent = 0);
+    ~ErrorOverlay();
 
-#endif // header guard
+protected:
+    bool eventFilter(QObject *object, QEvent *event);
+
+private:
+    void reposition();
 
+private:
+    QWidget *mBaseWidget;
+};
+
+#endif // header guard

-- 
ktp-accounts-kcm packaging



More information about the pkg-kde-commits mailing list