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
|