[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#784868: korganizer: korgac grabs focus loosing keys and missing notifications



Package: korganizer
Version: 4:4.14.1-1nograb
Severity: important
Tags: patch upstream

Dear Maintainer,

*** Reporter, please consider answering these questions, where appropriate ***

   * What led up to the situation?
   * What exactly did you do (or not do) that was effective (or
     ineffective)?
   * What was the outcome of this action?
   * What outcome did you expect instead?

*** End of the template - remove these template lines ***


While it can make it easier to dismiss (if it grabs focus through the
activateWindow call), it also means if you are typing and a reminder
comes in it will both get those keystrokes and a space or return will
dismiss the reminder before you have a chance to ever see what the
reminder was about, which assumes you are even looking at your screen
to see the reminder box flash up, if you are typing from paper you
might not even know.

This patch will call raiseWindow instead of activateWindow, but adds a
dock menu item to grab focus if someone actually wants that behavior.

While I was add it I added a dock menu item to show the reminder
window, which was useful in debugging, and lets you get at items that
have been suspended, alloing to view or dismiss them.  This might
satisfy "Bug 302865 - Inaccessible reminders"

There is a code comment "Try to keep the dialog small and
non-obtrusive." I've made it smaller by default, and set the minimum
size even smaller than reasonable, but this is better than the
previous which wouldn't let you size it smaller than the default.

I added more points to save the position and improve the logic, now it
will save and restore the position and size, and then show the window
so it will no longer jump.

Patch is against Debian 4.14.1 source tree.  The korgac in the
previous Debian release, 4.4.11 does not grab the keyboard when the
notification dialog appears.

Reproducible: Always

Steps to Reproduce:
1. set korganizer reminder
2. start typing a paragraph
3. continue typing as the notification goes off

Actual Results:  
watch korgac reminder appear grab keyboard focus and vanish at the
next space, depending on the timing you have no chance to stop typing
before it is gone

Expected Results:  
The notifier window to appear at the last location it was dismissed at
and only get focus when the window manager directs focus to it.

I'm flagging the severity at important, because it was so disruptive I
had stopped using it until I fixed it.

>From bb8f84deeefaaf74bc285fc2534111a78a5f12ff Mon Sep 17 00:00:00 2001
From: David Fries <David@Fries.net>
Date: Sat, 9 May 2015 10:48:10 -0500
Subject: [PATCH 1/5] add an option to not grab keyboard focus when a reminder
 is displayed

While it can make it easier to dismiss (if it grabs focus through the
activateWindow call), it also means if you are typing and a reminder
comes in it will both get those keystrokes and a space or return will
dismiss the reminder before you have a chance to ever see what the
reminder was about, which assumes you are even looking at your screen
to see the reminder box flash up, if you are typing in a paper you
might not even know.
---
 korgac/alarmdialog.cpp     | 12 +++++++++++-
 korgac/alarmdialog.h       |  1 +
 korgac/alarmdockwindow.cpp | 15 +++++++++++++++
 korgac/alarmdockwindow.h   |  7 +++++++
 4 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/korgac/alarmdialog.cpp b/korgac/alarmdialog.cpp
index 6bbd867..59c5790 100644
--- a/korgac/alarmdialog.cpp
+++ b/korgac/alarmdialog.cpp
@@ -567,7 +567,11 @@ void AlarmDialog::show()
   KWindowSystem::unminimizeWindow( winId(), false );
   KWindowSystem::setState( winId(), NET::KeepAbove | NET::DemandsAttention );
   KWindowSystem::setOnAllDesktops( winId(), true );
-  KWindowSystem::activateWindow( winId() );
+  if ( grabFocus( ) ) {
+    KWindowSystem::activateWindow( winId() );
+  } else {
+    KWindowSystem::raiseWindow( winId() );
+  }
 
   // Audio, Procedure, and EMail alarms
   eventNotification();
@@ -1036,3 +1040,9 @@ void AlarmDialog::removeFromConfig( const QList<Akonadi::Item::Id> &ids )
   genGroup.sync();
 }
 
+bool AlarmDialog::grabFocus( )
+{
+  KSharedConfig::Ptr config = KGlobal::config();
+  KConfigGroup generalConfig( config, "General" );
+  return generalConfig.readEntry( "GrabFocus", false );
+}
diff --git a/korgac/alarmdialog.h b/korgac/alarmdialog.h
index 41acee6..8f298d4 100644
--- a/korgac/alarmdialog.h
+++ b/korgac/alarmdialog.h
@@ -123,6 +123,7 @@ class AlarmDialog : public KDialog
     void updateButtons();
     void toggleDetails( QTreeWidgetItem *item );
     void showDetails( QTreeWidgetItem *item );
+    static bool grabFocus( );
 
     Akonadi::ETMCalendar::Ptr mCalendar;
     QTreeWidget *mIncidenceTree;
diff --git a/korgac/alarmdockwindow.cpp b/korgac/alarmdockwindow.cpp
index 35343be..8fe6ecf 100644
--- a/korgac/alarmdockwindow.cpp
+++ b/korgac/alarmdockwindow.cpp
@@ -45,6 +45,7 @@ AlarmDockWindow::AlarmDockWindow()
   KConfigGroup config( KGlobal::config(), "General" );
   bool autostartSet = config.hasKey( "Autostart" );
   bool autostart = config.readEntry( "Autostart", true );
+  bool grabfocus = config.readEntry( "GrabFocus", false );
   bool alarmsEnabled = config.readEntry( "Enabled", true );
 
   mName = i18nc( "@title:window", "KOrganizer Reminder Daemon" );
@@ -90,6 +91,12 @@ AlarmDockWindow::AlarmDockWindow()
   connect( mAutostart, SIGNAL(toggled(bool)), SLOT(toggleAutostart(bool)) );
   mAutostart->setCheckable( true );
 
+  mGrabFocus =
+    contextMenu()->addAction( i18nc( "@action:inmenu", "Reminder grabs focus" ) );
+  connect( mGrabFocus, SIGNAL(toggled(bool)), SLOT(toggleGrabFocus(bool)) );
+  mGrabFocus->setCheckable( true );
+  mGrabFocus->setChecked( grabfocus );
+
   mAlarmsEnabled->setChecked( alarmsEnabled );
   mAutostart->setChecked( autostart );
 
@@ -142,6 +149,14 @@ void AlarmDockWindow::toggleAutostart( bool checked )
   enableAutostart( checked );
 }
 
+void AlarmDockWindow::toggleGrabFocus( bool checked )
+{
+  kDebug();
+  KConfigGroup config( KGlobal::config(), "General" );
+  config.writeEntry( "GrabFocus", checked );
+  config.sync();
+}
+
 void AlarmDockWindow::slotSuspendAll()
 {
   emit suspendAllSignal();
diff --git a/korgac/alarmdockwindow.h b/korgac/alarmdockwindow.h
index 68300cc..0ebb977 100644
--- a/korgac/alarmdockwindow.h
+++ b/korgac/alarmdockwindow.h
@@ -42,6 +42,7 @@ class AlarmDockWindow : public KStatusNotifierItem
   public slots:
     void toggleAlarmsEnabled( bool checked );
     void toggleAutostart( bool checked );
+    void toggleGrabFocus( bool checked );
     void slotUpdate( int reminders );
 
   signals:
@@ -63,6 +64,12 @@ class AlarmDockWindow : public KStatusNotifierItem
 
     QAction *mAlarmsEnabled;
     QAction *mAutostart;
+    // True/Enable if the notify daemon should grab focus (activate window) away
+    // from the current application.  This makes it easy to dismiss, but there's
+    // a good chance if the user is typing there's a good chance they will loose
+    // keys and dismiss the notification without having a chance to see what
+    // the notification was about.
+    QAction *mGrabFocus;
     QAction *mSuspendAll;
     QAction *mDismissAll;
 
-- 
2.1.4


>From dd71d4b86debc129ca429fdf2e0b1fa2bf0148c0 Mon Sep 17 00:00:00 2001
From: David Fries <David@Fries.net>
Date: Sat, 9 May 2015 12:11:18 -0500
Subject: [PATCH 2/5] Add a menu option to always get to the reminder dialog.

Otherwise once a notice is suspended you can't get to it again until
it goes off, this way you can.  There is still an interaction problem
in the dialog since the entries are disabled and being able to select
them, but the current item can be dismissed and all can be dismissed.
---
 korgac/alarmdockwindow.cpp |  5 +++++
 korgac/alarmdockwindow.h   |  2 ++
 korgac/koalarmclient.cpp   | 34 ++++++++++++++++++++++++----------
 korgac/koalarmclient.h     |  5 +++--
 4 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/korgac/alarmdockwindow.cpp b/korgac/alarmdockwindow.cpp
index 8fe6ecf..658c068 100644
--- a/korgac/alarmdockwindow.cpp
+++ b/korgac/alarmdockwindow.cpp
@@ -77,8 +77,13 @@ AlarmDockWindow::AlarmDockWindow()
   mDismissAll =
     contextMenu()->addAction( i18nc( "@action:inmenu", "Dismiss All Reminders" ), this,
                               SLOT(slotDismissAll()) );
+  mShow =
+    contextMenu()->addAction( i18nc( "@action:inmenu", "Show Reminders" ), this,
+                              SIGNAL(showReminderSignal()) );
   mSuspendAll->setEnabled( false );
   mDismissAll->setEnabled( false );
+  // leave mShow always enabled that way you can get to alarms that are
+  // suspended and inactive to dismiss them before they go off again
 
   contextMenu()->addSeparator();
   mAlarmsEnabled =
diff --git a/korgac/alarmdockwindow.h b/korgac/alarmdockwindow.h
index 0ebb977..bf79864 100644
--- a/korgac/alarmdockwindow.h
+++ b/korgac/alarmdockwindow.h
@@ -49,6 +49,7 @@ class AlarmDockWindow : public KStatusNotifierItem
     void quitSignal();
     void suspendAllSignal();
     void dismissAllSignal();
+    void showReminderSignal();
 
   protected slots:
     virtual void activate( const QPoint &pos );
@@ -72,6 +73,7 @@ class AlarmDockWindow : public KStatusNotifierItem
     QAction *mGrabFocus;
     QAction *mSuspendAll;
     QAction *mDismissAll;
+    QAction *mShow;
 
     bool mAutostartSet;
 };
diff --git a/korgac/koalarmclient.cpp b/korgac/koalarmclient.cpp
index 22f2746..733b945 100644
--- a/korgac/koalarmclient.cpp
+++ b/korgac/koalarmclient.cpp
@@ -69,6 +69,7 @@ KOAlarmClient::KOAlarmClient( QObject *parent )
     mDocker = new AlarmDockWindow;
     connect( this, SIGNAL(reminderCount(int)), mDocker, SLOT(slotUpdate(int)) );
     connect( mDocker, SIGNAL(quitSignal()), SLOT(slotQuit()) );
+    connect( mDocker, SIGNAL(showReminderSignal()), this, SLOT(showReminder()) );
   }
 #endif
   QStringList mimeTypes;
@@ -145,7 +146,7 @@ void KOAlarmClient::deferredInit()
       const QDateTime dt = incGroup.readEntry( "RemindAt", QDateTime() );
       Akonadi::Item i = mCalendar->item( Akonadi::Item::fromUrl( url ).id() );
       if ( CalendarSupport::hasIncidence( i ) && !CalendarSupport::incidence( i )->alarms().isEmpty() ) {
-        createReminder( mCalendar, i, dt, QString() );
+        createReminder( i, dt, QString() );
       }
     }
   }
@@ -215,22 +216,23 @@ void KOAlarmClient::checkAlarms()
     const Akonadi::Item::Id id = mCalendar->item( uid ).id();
     const Akonadi::Item item = mCalendar->item( id );
 
-    createReminder( mCalendar, item, from, alarm->text() );
+    createReminder( item, from, alarm->text() );
   }
 }
 
-void KOAlarmClient::createReminder( const Akonadi::ETMCalendar::Ptr &calendar,
-                                    const Akonadi::Item &aitem,
-                                    const QDateTime &remindAtDate,
-                                    const QString &displayText )
+void KOAlarmClient::showReminder()
 {
-  if ( !CalendarSupport::hasIncidence( aitem ) ) {
-    return;
+  allocateDialog();
+  if ( mDialog ) {
+    mDialog->show();
   }
+}
 
+void KOAlarmClient::allocateDialog() 
+{
 #if !defined(Q_WS_MAEMO_5) && !defined(KORGAC_AKONADI_AGENT)
   if ( !mDialog ) {
-    mDialog = new AlarmDialog( calendar );
+    mDialog = new AlarmDialog( mCalendar );
     connect( this, SIGNAL(saveAllSignal()), mDialog, SLOT(slotSave()) );
     if ( mDocker ) {
       connect( mDialog, SIGNAL(reminderCount(int)),
@@ -241,12 +243,24 @@ void KOAlarmClient::createReminder( const Akonadi::ETMCalendar::Ptr &calendar,
                mDialog, SLOT(dismissAll()) );
     }
   }
+#endif
+}
+
+void KOAlarmClient::createReminder( const Akonadi::Item &aitem,
+                                    const QDateTime &remindAtDate,
+                                    const QString &displayText )
+{
+  if ( !CalendarSupport::hasIncidence( aitem ) ) {
+    return;
+  }
+
+#if !defined(Q_WS_MAEMO_5) && !defined(KORGAC_AKONADI_AGENT)
+  allocateDialog();
 
   mDialog->addIncidence( aitem, remindAtDate, displayText );
   mDialog->wakeUp();
 #else
   const Incidence::Ptr incidence = CalendarSupport::incidence( aitem );
-  Q_UNUSED( calendar );
   Q_UNUSED( remindAtDate );
   Q_UNUSED( displayText );
 
diff --git a/korgac/koalarmclient.h b/korgac/koalarmclient.h
index bc9c433..80cf8d4 100644
--- a/korgac/koalarmclient.h
+++ b/korgac/koalarmclient.h
@@ -64,6 +64,7 @@ class KOAlarmClient : public QObject, public KSessionManager
   protected slots:
     void deferredInit();
     void checkAlarms();
+    void showReminder();
 
   signals:
     void reminderCount( int );
@@ -72,10 +73,10 @@ class KOAlarmClient : public QObject, public KSessionManager
   private:
     bool dockerEnabled();
     bool collectionsAvailable() const;
-    void createReminder( const Akonadi::ETMCalendar::Ptr &calendar,
-                         const Akonadi::Item &incidence,
+    void createReminder( const Akonadi::Item &incidence,
                          const QDateTime &dt, const QString &displayText );
     void saveLastCheckTime();
+    void allocateDialog();
 
     AlarmDockWindow *mDocker;  // the panel icon
     Akonadi::ETMCalendar::Ptr mCalendar;
-- 
2.1.4


>From d7830ba34a9c568ed4d84eb332023b7a0efb8c7c Mon Sep 17 00:00:00 2001
From: David Fries <David@Fries.net>
Date: Sat, 9 May 2015 12:26:24 -0500
Subject: [PATCH 3/5] make the dialog even smaller

The existing comment was
// Try to keep the dialog small and non-obtrusive.
but it prevented the user form making it even smaller.  This is a
set of changes to make it smaller.
---
 korgac/alarmdialog.cpp | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/korgac/alarmdialog.cpp b/korgac/alarmdialog.cpp
index 59c5790..c765d98 100644
--- a/korgac/alarmdialog.cpp
+++ b/korgac/alarmdialog.cpp
@@ -180,18 +180,27 @@ AlarmDialog::AlarmDialog( const Akonadi::ETMCalendar::Ptr &calendar, QWidget *pa
                                "Suspend the reminders for the selected incidences "
                                "by the specified interval" ) );
 
-  // Try to keep the dialog small and non-obtrusive.
-  setMinimumWidth( 575 );
-  setMinimumHeight( 300 );
+  QVBoxLayout *topLayout = new QVBoxLayout( topBox );
 
-  QVBoxLayout *mTopLayout = new QVBoxLayout( topBox );
+  // Try to keep the dialog small and non-obtrusive.
+  // let the user resize smaller
+  setMinimumWidth( 280 );
+  setMinimumHeight( 160 );
+  // a more useful default size
+  resize( QSize( 424, 187 ) );
+  // take out some padding which makes it larger
+  topLayout->setSpacing( 2 );
+  setStyleSheet( QLatin1String( "* { margin: 0px; padding: 0px; }" ) );
+  QMargins margins( 0, 0, 0, 0 );
+  topLayout->setContentsMargins( margins );
+  setContentsMargins( margins );
 
   QLabel *label = new QLabel(
     i18nc( "@label",
            "Reminders: "
-           "Click on a title to toggle the details viewer for that item" ),
+           "Clicking on the title toggles details for item" ),
     topBox );
-  mTopLayout->addWidget( label );
+  topLayout->addWidget( label );
 
   mIncidenceTree = new ReminderTree( topBox );
   mIncidenceTree->setColumnCount( 3 );
@@ -216,7 +225,7 @@ AlarmDialog::AlarmDialog( const Akonadi::ETMCalendar::Ptr &calendar, QWidget *pa
   mIncidenceTree->setSelectionMode( QAbstractItemView::ExtendedSelection );
   mIncidenceTree->setRootIsDecorated( false );
 
-  mTopLayout->addWidget( mIncidenceTree );
+  topLayout->addWidget( mIncidenceTree );
 
   connect( mIncidenceTree, SIGNAL(itemActivated(QTreeWidgetItem*,int)),
            SLOT(update()) );
@@ -230,13 +239,13 @@ AlarmDialog::AlarmDialog( const Akonadi::ETMCalendar::Ptr &calendar, QWidget *pa
              "<emphasis>Select an event or to-do from the list above "
              "to view its details here.</emphasis>" );
   mDetailView->setDefaultMessage( s );
-  mTopLayout->addWidget( mDetailView );
+  topLayout->addWidget( mDetailView );
   mDetailView->hide();
   mLastItem = 0;
 
   KHBox *suspendBox = new KHBox( topBox );
   suspendBox->setSpacing( spacingHint() );
-  mTopLayout->addWidget( suspendBox );
+  topLayout->addWidget( suspendBox );
 
   QLabel *l = new QLabel( i18nc( "@label:spinbox", "Suspend &duration:" ), suspendBox );
 
-- 
2.1.4


>From 31544816fc4c512106d2420111356f8f900270de Mon Sep 17 00:00:00 2001
From: David Fries <David@Fries.net>
Date: Sat, 9 May 2015 13:08:42 -0500
Subject: [PATCH 4/5] save size and position on dialog hide/close and improve
 restore

Instead of saving position some times (application close, suspend
reminder), save at each point the dialog hides, dismiss reminder,
dismiss all, escape or window close, etc.
In addition to saving the position, save the geometry to get the size
as well, that way if the user wants it bigger (or smaller) the only
have to do it once.
The logic was show, move, which would run in that order, the window
shows, then it moves to the correct location which looks bad, restore
the position & size, then show, so it appears in the final location.
---
 korgac/alarmdialog.cpp | 28 ++++++++++++++++++----------
 korgac/alarmdialog.h   |  3 ++-
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/korgac/alarmdialog.cpp b/korgac/alarmdialog.cpp
index c765d98..bd88f8f 100644
--- a/korgac/alarmdialog.cpp
+++ b/korgac/alarmdialog.cpp
@@ -154,13 +154,12 @@ AlarmDialog::AlarmDialog( const Akonadi::ETMCalendar::Ptr &calendar, QWidget *pa
 
   KSharedConfig::Ptr config = KGlobal::config();
   KConfigGroup generalConfig( config, "General" );
-  QPoint pos = generalConfig.readEntry( "Position", QPoint( 0, 0 ) );
+  mRect = generalConfig.readEntry( "Position", QRect() );
+  if ( !mRect.isNull() ) {
+    setGeometry( mRect );
+  }
 
   QWidget *topBox = new QWidget( this );
-  if ( !pos.isNull() ) {
-    mPos = pos;
-    topBox->move( mPos );
-  }
   setMainWidget( topBox );
   setCaption( i18nc( "@title:window", "Reminders" ) );
   setWindowIcon( KIcon( QLatin1String("korgac") ) );
@@ -569,10 +568,11 @@ void AlarmDialog::show()
 //  mSuspendSpin->setValue( defSuspendVal );
 //  mSuspendUnit->setCurrentIndex( defSuspendUnit );
 
-  KDialog::show();
-  if ( !mPos.isNull() ) {
-    KDialog::move( mPos );
+  // move then show so it appears at the right place (not the other way around)
+  if ( !mRect.isNull() ) {
+    setGeometry( mRect );
   }
+  KDialog::show();
   KWindowSystem::unminimizeWindow( winId(), false );
   KWindowSystem::setState( winId(), NET::KeepAbove | NET::DemandsAttention );
   KWindowSystem::setOnAllDesktops( winId(), true );
@@ -751,7 +751,8 @@ void AlarmDialog::slotSave()
   }
 
   generalConfig.writeEntry( "Reminders", numReminders );
-  generalConfig.writeEntry( "Position", pos() );
+  mRect = geometry();
+  generalConfig.writeEntry( "Position", mRect );
   config->sync();
 }
 
@@ -785,10 +786,17 @@ int AlarmDialog::activeCount()
 
 void AlarmDialog::closeEvent( QCloseEvent * )
 {
+  // application close not window hide
   slotSave();
   accept();
 }
 
+void AlarmDialog::reject ( )
+{
+  slotSave();
+  KDialog::reject( );
+}
+
 void AlarmDialog::updateButtons()
 {
   const int count = selectedItems().count();
@@ -867,7 +875,7 @@ void AlarmDialog::popupItemMenu( const QPoint &point )
 void AlarmDialog::accept()
 {
   if ( activeCount() == 0 ) {
-    mPos = pos();
+    slotSave();
     hide();
   }
 }
diff --git a/korgac/alarmdialog.h b/korgac/alarmdialog.h
index 8f298d4..124ca5c 100644
--- a/korgac/alarmdialog.h
+++ b/korgac/alarmdialog.h
@@ -99,6 +99,7 @@ class AlarmDialog : public KDialog
   protected:
     void keyPressEvent( QKeyEvent *e );
     void closeEvent( QCloseEvent * );
+    void reject ( );
 
   private:
     static KDateTime triggerDateForIncidence( const KCalCore::Incidence::Ptr &inc,
@@ -130,7 +131,7 @@ class AlarmDialog : public KDialog
     CalendarSupport::IncidenceViewer *mDetailView;
     KPIMIdentities::IdentityManager *mIdentityManager;
 
-    QPoint mPos;
+    QRect mRect;
     QSpinBox *mSuspendSpin;
     KComboBox *mSuspendUnit;
     QTimer mSuspendTimer;
-- 
2.1.4


>From f4d5f482d66f9bbc14ed6bd164b2abffcfb20d44 Mon Sep 17 00:00:00 2001
From: David Fries <David@Fries.net>
Date: Sat, 9 May 2015 13:23:25 -0500
Subject: [PATCH 5/5] 4:4.14.1-1nograb changelog for focus, size, changes

---
 debian/changelog | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index f97b712..1e7ab4f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+kdepim (4:4.14.1-1nograb) unstable; urgency=medium
+
+  * don't grab the keyboard focus by default, add as an option
+  * add dock option to get to reminder dialog for suspended events to
+    view/dismiss
+  * make reminder dialog smaller
+  * save reminder dialog size in addition to position, save at each dialog hide,
+    improve restore
+
+ -- David Fries <David@Fries.net>  Sat, 09 May 2015 13:23:19 -0500
+
 kdepim (4:4.14.1-1) unstable; urgency=medium
 
   * Remove old Breaks/Replaces (for versions older than oldstable).
-- 
2.1.4


-- System Information:
Debian Release: 8.0
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.0.0-rc7+ (SMP w/4 CPU cores)
Locale: LANG=C, LC_CTYPE=en_US.ISO-8859-15 (charmap=ISO-8859-15)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages korganizer depends on:
ii  kde-runtime               4:4.14.2-2
ii  kdepim-runtime            4:4.14.2-3
ii  kdepimlibs-kio-plugins    4:4.14.2-2+b1
ii  libakonadi-calendar4      4:4.14.2-2+b1
ii  libakonadi-contact4       4:4.14.2-2+b1
ii  libakonadi-kde4           4:4.14.2-2+b1
ii  libakonadi-kmime4         4:4.14.2-2+b1
ii  libc6                     2.19-18
ii  libcalendarsupport4       4:4.14.1-1nograb
ii  libeventviews4            4:4.14.1-1nograb
ii  libgcc1                   1:4.9.2-10
ii  libincidenceeditorsng4    4:4.14.1-1nograb
ii  libkabc4                  4:4.14.2-2+b1
ii  libkcalcore4              4:4.14.2-2+b1
ii  libkcalutils4             4:4.14.2-2+b1
ii  libkcmutils4              4:4.14.2-5
ii  libkdecore5               4:4.14.2-5
ii  libkdepim4                4:4.14.1-1nograb
ii  libkdepimdbusinterfaces4  4:4.14.1-1nograb
ii  libkdeui5                 4:4.14.2-5
ii  libkholidays4             4:4.14.2-2+b1
ii  libkio5                   4:4.14.2-5
ii  libkmime4                 4:4.14.2-2+b1
ii  libknewstuff3-4           4:4.14.2-5
ii  libkontactinterface4a     4:4.14.2-2+b1
ii  libkparts4                4:4.14.2-5
ii  libkpimidentities4        4:4.14.2-2+b1
ii  libkpimutils4             4:4.14.2-2+b1
ii  libmailtransport4         4:4.14.2-2+b1
ii  libphonon4                4:4.8.0-4
ii  libpimcommon4             4:4.14.1-1nograb
ii  libqt4-dbus               4:4.8.6+git64-g5dc8b2b+dfsg-3
ii  libqt4-xml                4:4.8.6+git64-g5dc8b2b+dfsg-3
ii  libqtcore4                4:4.8.6+git64-g5dc8b2b+dfsg-3
ii  libqtgui4                 4:4.8.6+git64-g5dc8b2b+dfsg-3
ii  libstdc++6                4.9.2-10
ii  perl                      5.20.2-3
ii  phonon                    4:4.8.0-4

Versions of packages korganizer recommends:
ii  kdepim-kresources  4:4.14.1-1nograb

korganizer suggests no packages.

-- no debconf information


Reply to: