~ubuntu-branches/ubuntu/karmic/kdepim/karmic-backports

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
From 2ccae3d9d2ac947a3883cc719a5d4ea456fe5c88 Mon Sep 17 00:00:00 2001
From: Aurelien Gateau <aurelien.gateau@canonical.com>
Date: Wed, 16 Sep 2009 11:35:47 +0200
Subject: [PATCH 2/8] Click on folder: show folder. Click on server: show mainwindow.

---
 kmail/kmfolder.cpp |    8 ++++++++
 kmail/kmfolder.h   |    2 ++
 kmail/kmkernel.cpp |   14 ++++++++++++++
 kmail/kmkernel.h   |    6 ++++++
 4 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/kmail/kmfolder.cpp b/kmail/kmfolder.cpp
index ad3d32f..2905012 100644
--- a/kmail/kmfolder.cpp
+++ b/kmail/kmfolder.cpp
@@ -928,6 +928,8 @@ void KMFolder::setIgnoreNewMail( bool b )
     mIndicator = 0;
   } else if ( !b && !mIndicator ) {
     mIndicator = new QIndicate::Indicator( this );
+    connect( mIndicator, SIGNAL( display( QIndicate::Indicator* ) ),
+      SLOT( slotIndicatorClicked() ) );
     connect( mStorage, SIGNAL( numUnreadMsgsChanged( KMFolder* ) ),
       SLOT( updateIndicator() ) );
     QImage image( mUnreadIconPath );
@@ -966,6 +968,12 @@ void KMFolder::updateIndicator()
   }
 }
 
+void KMFolder::slotIndicatorClicked()
+{
+  kmkernel->activateMainWin();
+  kmkernel->selectFolder( this );
+}
+
 void KMFolder::slotContentsTypeChanged( KMail::FolderContentsType type )
 {
   kmkernel->iCalIface().folderContentsTypeChanged( this, type );
diff --git a/kmail/kmfolder.h b/kmail/kmfolder.h
index 1b3717c..bae3bbc 100644
--- a/kmail/kmfolder.h
+++ b/kmail/kmfolder.h
@@ -674,6 +674,8 @@ private slots:
 
   void updateIndicator();
 
+  void slotIndicatorClicked();
+
 private:
   FolderStorage* mStorage;
   KMFolderDir* mChild;
diff --git a/kmail/kmkernel.cpp b/kmail/kmkernel.cpp
index 3d271cd..53d585c 100644
--- a/kmail/kmkernel.cpp
+++ b/kmail/kmkernel.cpp
@@ -1471,6 +1471,8 @@ void KMKernel::init()
   } else {
     kWarning() << "Could not find desktop file for application";
   }
+  connect( the_indicateServer, SIGNAL( serverDisplay() ),
+           SLOT( activateMainWin() ) );
   the_indicateServer->show();
 
   the_undoStack     = new UndoStack(20);
@@ -2133,6 +2135,13 @@ KMainWindow* KMKernel::mainWin()
   return mWin;
 }
 
+void KMKernel::activateMainWin()
+{
+  // We use forceActiveWindow here because this function is called from
+  // indicators, which act as part of the user desktop
+  KWindowSystem::forceActiveWindow( mainWin()->winId() );
+}
+
 
 /**
  * Empties all trash folders
@@ -2196,6 +2205,11 @@ void KMKernel::selectFolder( const QString &folderPath )
   if ( !folder )
     folder = kmkernel->dimapFolderMgr()->getFolderByURL( folderPath );
 
+  selectFolder( folder );
+}
+
+void KMKernel::selectFolder( KMFolder *folder )
+{
   KMMainWidget *widget = getKMMainWidget();
   Q_ASSERT( widget );
   if ( !widget )
diff --git a/kmail/kmkernel.h b/kmail/kmkernel.h
index f3f129b..60ef548 100644
--- a/kmail/kmkernel.h
+++ b/kmail/kmkernel.h
@@ -243,6 +243,10 @@ Q_SIGNALS:
  */
 
 
+public Q_SLOTS:
+  /** Bring the first main window to front (as returned by mainWin()) */
+  void activateMainWin();
+
 public:
 
   /** A static helper function that asks the user
@@ -413,6 +417,8 @@ public:
       to regenerate their menus */
   void updatedTemplates();
 
+  void selectFolder( KMFolder *folder );
+
 public slots:
 
   /// Save contents of all open composer widnows to ~/dead.letter
-- 
1.6.3.3