Browse Source

* Massive set of changes to bring in all fixes and enhancements from the Enterprise PIM branch

* Ensured that the Trinity changes were applied on top of those enhancements, and any redundancy removed
* Added journal read support to the CalDAV resource
* Fixed CalDAV resource to use events URL for tasks and journals when separate URL checkbox unchecked


git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1170461 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
tags/v3.5.13
tpearson 9 years ago
parent
commit
cc29364f06
100 changed files with 3517 additions and 410 deletions
  1. 1
    0
      LAST_ENTERPRISE_SYNC
  2. 1
    1
      Makefile.am.in
  3. 2147
    0
      NewsLog.txt
  4. 2
    6
      akregator/src/akregator.desktop
  5. 1
    3
      akregator/src/akregator_plugin.desktop
  6. 29
    21
      akregator/src/akregator_view.cpp
  7. 3
    10
      akregator/src/eventsrc
  8. 1
    4
      akregator/src/mk4storage/akregator_mk4storage_plugin.desktop
  9. 6
    3
      certmanager/certmanager.cpp
  10. 1
    5
      certmanager/conf/kleopatra_config_appear.desktop
  11. 4
    7
      certmanager/conf/kleopatra_config_dirserv.desktop
  12. 0
    3
      certmanager/conf/kleopatra_config_dnorder.desktop
  13. 14
    2
      certmanager/lib/backends/qgpgme/qgpgmecryptoconfig.cpp
  14. 4
    1
      certmanager/lib/backends/qgpgme/qgpgmedecryptjob.cpp
  15. 5
    3
      certmanager/lib/backends/qgpgme/qgpgmedecryptverifyjob.cpp
  16. 1
    0
      certmanager/lib/backends/qgpgme/qgpgmedeletejob.cpp
  17. 3
    1
      certmanager/lib/backends/qgpgme/qgpgmedownloadjob.cpp
  18. 4
    1
      certmanager/lib/backends/qgpgme/qgpgmeencryptjob.cpp
  19. 3
    1
      certmanager/lib/backends/qgpgme/qgpgmeexportjob.cpp
  20. 6
    2
      certmanager/lib/backends/qgpgme/qgpgmeimportjob.cpp
  21. 8
    8
      certmanager/lib/backends/qgpgme/qgpgmejob.cpp
  22. 4
    3
      certmanager/lib/backends/qgpgme/qgpgmejob.h
  23. 4
    1
      certmanager/lib/backends/qgpgme/qgpgmekeygenerationjob.cpp
  24. 16
    0
      certmanager/lib/backends/qgpgme/qgpgmekeylistjob.cpp
  25. 1
    0
      certmanager/lib/backends/qgpgme/qgpgmekeylistjob.h
  26. 3
    1
      certmanager/lib/backends/qgpgme/qgpgmesignencryptjob.cpp
  27. 4
    1
      certmanager/lib/backends/qgpgme/qgpgmesignjob.cpp
  28. 3
    1
      certmanager/lib/backends/qgpgme/qgpgmeverifydetachedjob.cpp
  29. 4
    1
      certmanager/lib/backends/qgpgme/qgpgmeverifyopaquejob.cpp
  30. 14
    0
      certmanager/lib/kleo/job.cpp
  31. 6
    0
      certmanager/lib/kleo/job.h
  32. 1
    8
      certmanager/lib/libkleopatrarc.desktop
  33. 1
    0
      certmanager/lib/tests/test_verify.cpp
  34. 6
    0
      certmanager/lib/ui/cryptoconfigdialog.cpp
  35. 29
    1
      certmanager/lib/ui/cryptoconfigmodule.cpp
  36. 2
    0
      certmanager/lib/ui/cryptoconfigmodule.h
  37. 52
    5
      certmanager/lib/ui/keyselectiondialog.cpp
  38. 14
    1
      certmanager/lib/ui/keyselectiondialog.h
  39. 64
    5
      certmanager/lib/ui/messagebox.cpp
  40. 3
    0
      certmanager/lib/ui/messagebox.h
  41. 13
    0
      cvs.sh.diff
  42. 3
    3
      doc/kleopatra/index.docbook
  43. 178
    27
      doc/kmail/configure.docbook
  44. 2
    0
      doc/kmail/index.docbook
  45. 158
    0
      doc/kmail/using-chiasmus.docbook
  46. 21
    2
      doc/kmail/using-kmail.docbook
  47. 82
    3
      doc/kontact/index.docbook
  48. 87
    80
      doc/korganizer/index.docbook
  49. 0
    10
      kabc/kabcdistlistupdater/kabcdistlistupdater.desktop
  50. 9
    3
      kaddressbook/addresseeeditorextension.cpp
  51. 3
    1
      kaddressbook/addresseeeditorextension.h
  52. 16
    0
      kaddressbook/addresseeutil.cpp
  53. 10
    1
      kaddressbook/addresseeutil.h
  54. 1
    1
      kaddressbook/common/kaddressbook.kcfg
  55. 0
    1
      kaddressbook/csv-templates/kaddressbook.desktop
  56. 1
    3
      kaddressbook/csv-templates/yahoo.desktop
  57. 28
    0
      kaddressbook/customfieldswidget.cpp
  58. 1
    3
      kaddressbook/dcopaddressbook.desktop
  59. 35
    14
      kaddressbook/distributionlisteditor.cpp
  60. 0
    1
      kaddressbook/editors/cryptosettings.desktop
  61. 1
    4
      kaddressbook/editors/imaddresseditor.desktop
  62. 2
    0
      kaddressbook/editors/imeditorwidget.cpp
  63. 0
    1
      kaddressbook/editors/kaddressbookimprotocol.desktop
  64. 0
    1
      kaddressbook/editors/protocols/aimprotocol.desktop
  65. 0
    1
      kaddressbook/editors/protocols/gaduprotocol.desktop
  66. 0
    1
      kaddressbook/editors/protocols/groupwiseprotocol.desktop
  67. 0
    1
      kaddressbook/editors/protocols/icqprotocol.desktop
  68. 0
    1
      kaddressbook/editors/protocols/ircprotocol.desktop
  69. 0
    1
      kaddressbook/editors/protocols/jabberprotocol.desktop
  70. 0
    1
      kaddressbook/editors/protocols/meanwhileprotocol.desktop
  71. 0
    2
      kaddressbook/editors/protocols/msnprotocol.desktop
  72. 0
    1
      kaddressbook/editors/protocols/skypeprotocol.desktop
  73. 0
    1
      kaddressbook/editors/protocols/smsprotocol.desktop
  74. 0
    1
      kaddressbook/editors/protocols/yahooprotocol.desktop
  75. 2
    6
      kaddressbook/features/distributionlist.desktop
  76. 1
    9
      kaddressbook/features/distributionlistng.desktop
  77. 5
    5
      kaddressbook/features/distributionlistngwidget.cpp
  78. 2
    1
      kaddressbook/features/resourceselection.cpp
  79. 0
    2
      kaddressbook/features/resourceselection.desktop
  80. 5
    0
      kaddressbook/freebusywidget.cpp
  81. 2
    0
      kaddressbook/imagewidget.cpp
  82. 0
    1
      kaddressbook/interfaces/kaddressbook_contacteditorwidget.desktop
  83. 0
    1
      kaddressbook/interfaces/kaddressbook_extension.desktop
  84. 1
    3
      kaddressbook/interfaces/kaddressbook_xxport.desktop
  85. 129
    44
      kaddressbook/kabcore.cpp
  86. 9
    4
      kaddressbook/kabcore.h
  87. 5
    2
      kaddressbook/kabtools.cpp
  88. 0
    1
      kaddressbook/kaddressbook.desktop
  89. 0
    1
      kaddressbook/kaddressbook_view.desktop
  90. 3
    9
      kaddressbook/kcmconfigs/kabconfig.desktop
  91. 0
    3
      kaddressbook/kcmconfigs/kabcustomfields.desktop
  92. 2
    7
      kaddressbook/kcmconfigs/kabldapconfig.desktop
  93. 14
    4
      kaddressbook/ldapsearchdialog.cpp
  94. 1
    0
      kaddressbook/searchmanager.cpp
  95. 10
    0
      kaddressbook/thumbnailcreator/ldifvcardcreator.cpp
  96. 1
    0
      kaddressbook/thumbnailcreator/ldifvcardcreator.h
  97. 0
    1
      kaddressbook/thumbnailcreator/ldifvcardthumbnail.desktop
  98. 158
    24
      kaddressbook/undocmds.cpp
  99. 41
    2
      kaddressbook/undocmds.h
  100. 0
    0
      kaddressbook/viewmanager.cpp

+ 1
- 0
LAST_ENTERPRISE_SYNC View File

@@ -0,0 +1 @@
Revision 1170137

+ 1
- 1
Makefile.am.in View File

@@ -23,7 +23,7 @@ COMPILE_BEFORE_certmanager = libkdenetwork libkpgp
COMPILE_BEFORE_korganizer = libkdepim libkpimidentities libkpimexchange kgantt
COMPILE_BEFORE_kaddressbook = libkdepim certmanager akregator
COMPILE_BEFORE_kandy = libkdepim
COMPILE_BEFORE_kmail= libkdepim libkpimidentities certmanager libkpgp libkmime indexlib
COMPILE_BEFORE_kmail= libkdepim libkpimidentities certmanager libkpgp libkmime
COMPILE_BEFORE_knode= libkdepim libkpgp libkmime
COMPILE_BEFORE_karm = libkdepim kresources
COMPILE_BEFORE_plugins = kmail libkdepim libkcal

+ 2147
- 0
NewsLog.txt
File diff suppressed because it is too large
View File


+ 2
- 6
akregator/src/akregator.desktop View File

@@ -28,7 +28,6 @@ GenericName[hu]=RSS hírolvasó
GenericName[is]=RSS fréttaforrit
GenericName[it]=Lettore Fonti RSS
GenericName[ja]=RSS ニュースリーダー
GenericName[ka]=RSS კვების წამკითხველი
GenericName[kk]=RSS жаңалықтарын оқу
GenericName[km]=កម្មវិធី​អាន​មតិព័ត៌មាន RSS
GenericName[ko]=RSS 피드 리더
@@ -53,8 +52,7 @@ GenericName[sv]=Läsare av RSS-kanaler
GenericName[ta]=RSS பீஃட் வாசிப்பான்
GenericName[tr]=RSS Haber Kaynağı Okuyucu
GenericName[uk]=Програма для читання подач RSS
GenericName[uz]=RSS yangiliklarni oʻquvchi
GenericName[uz@cyrillic]=RSS янгиликларни ўқувчи
GenericName[uz]=RSS янгиликларни ўқувчи
GenericName[zh_CN]=RSS 种子阅读器
GenericName[zh_TW]=RSS Feed 閱讀器
Comment=An RSS Aggregator for KDE
@@ -79,7 +77,6 @@ Comment[hu]=KDE-s hírolvasó RSS hírcsatornákhoz
Comment[is]=RSS fréttaforrit fyrir KDE
Comment[it]=Un concentratore KDE per RSS
Comment[ja]=KDE 用 RSS アグリゲータ
Comment[ka]= RSS აგრეგატი KDE-სთვის
Comment[kk]=KDE-нің RSS жаңалық агрегаторы
Comment[km]=កម្មវិធី​អាន RSS សម្រាប់ KDE
Comment[ko]=KDE용 RSS 리더
@@ -102,8 +99,7 @@ Comment[sv]=En RSS-samlare för KDE
Comment[ta]=கேடியிக்கான ஒரு RSS சேர்ப்பான்
Comment[tr]=Bir KDE RSS Okuyucusu
Comment[uk]=Агрегатор RSS для KDE
Comment[uz]=KDE uchun RSS yangiliklarni oʻquvchi
Comment[uz@cyrillic]=KDE учун RSS янгиликларни ўқувчи
Comment[uz]=KDE учун RSS янгиликларни ўқувчи
Comment[zh_CN]=KDE RSS 新闻收集器
Comment[zh_TW]=KDE 的 RSS 收集器
Terminal=false

+ 1
- 3
akregator/src/akregator_plugin.desktop View File

@@ -25,7 +25,6 @@ Comment[hu]=Akregator bővítőmodul
Comment[is]=Íforrit fyrir Akregator
Comment[it]=Plugin per Akregator
Comment[ja]=Akregator 用プラグイン
Comment[ka]=Akregator-ის მოდული
Comment[kk]=Akregator-дың плагин модулі
Comment[km]=កម្មវិធី​ជំនួយ Akregator
Comment[ko]=Akregator 플러그인
@@ -49,8 +48,7 @@ Comment[sr@Latn]=Priključak za Akregator
Comment[sv]=Insticksprogram för Akregator
Comment[tr]=Akregator Eklentisi
Comment[uk]=Втулок для Akregator
Comment[uz]=Akregator uchun plagin
Comment[uz@cyrillic]=Akregator учун плагин
Comment[uz]=Akregator учун плагин
Comment[zh_CN]=Akregator 插件
Comment[zh_TW]=Akregator 外掛程式


+ 29
- 21
akregator/src/akregator_view.cpp View File

@@ -225,7 +225,7 @@ View::View( Part *part, TQWidget *parent, ActionManagerImpl* actionManager, cons
setFocusPolicy(TQWidget::StrongFocus);

TQVBoxLayout *lt = new TQVBoxLayout( this );
m_horizontalSplitter = new TQSplitter(TQSplitter::Horizontal, this);

m_horizontalSplitter->setOpaqueResize(true);
@@ -260,7 +260,7 @@ View::View( Part *part, TQWidget *parent, ActionManagerImpl* actionManager, cons

connect(m_tagNodeListView, TQT_SIGNAL(signalContextMenu(KListView*, TreeNode*, const TQPoint&)), this, TQT_SLOT(slotFeedTreeContextMenu(KListView*, TreeNode*, const TQPoint&)));

ProgressManager::self()->setFeedList(m_feedList);

m_tabs = new TabWidget(m_horizontalSplitter);
@@ -321,8 +321,12 @@ View::View( Part *part, TQWidget *parent, ActionManagerImpl* actionManager, cons
connectFrame(m_mainFrame);
m_tabs->addFrame(m_mainFrame);

m_horizontalSplitter->setSizes( Settings::splitter1Sizes() );
m_articleSplitter->setSizes( Settings::splitter2Sizes() );
const TQValueList<int> sp1sizes = Settings::splitter1Sizes();
if ( sp1sizes.count() >= m_horizontalSplitter->sizes().count() )
m_horizontalSplitter->setSizes( sp1sizes );
const TQValueList<int> sp2sizes = Settings::splitter2Sizes();
if ( sp2sizes.count() >= m_articleSplitter->sizes().count() )
m_articleSplitter->setSizes( sp2sizes );

KConfig *conf = Settings::self()->config();
conf->setGroup("General");
@@ -374,7 +378,7 @@ void View::slotSettingsChanged()
{
// if tagging is hidden, show only feed list
m_listTabWidget->setViewMode(Settings::showTaggingGUI() ? ListTabWidget::verticalTabs : ListTabWidget::single);
}

void View::slotOnShutdown()
@@ -406,8 +410,12 @@ void View::slotOnShutdown()

void View::saveSettings()
{
Settings::setSplitter1Sizes( m_horizontalSplitter->sizes() );
Settings::setSplitter2Sizes( m_articleSplitter->sizes() );
const TQValueList<int> spl1 = m_horizontalSplitter->sizes();
if ( spl1.contains( 0 ) == 0 )
Settings::setSplitter1Sizes( spl1 );
const TQValueList<int> spl2 = m_articleSplitter->sizes();
if ( spl2.contains( 0 ) == 0 )
Settings::setSplitter2Sizes( spl2 );
Settings::setViewMode( m_viewMode );
Settings::writeConfig();
}
@@ -415,7 +423,7 @@ void View::saveSettings()
void View::slotOpenNewTab(const KURL& url, bool background)
{
PageViewer* page = new PageViewer(this, "page");
connect( m_part, TQT_SIGNAL(signalSettingsChanged()), page, TQT_SLOT(slotPaletteOrFontChanged()));

connect( page, TQT_SIGNAL(setTabIcon(const TQPixmap&)),
@@ -822,7 +830,7 @@ void View::slotOpenURL(const KURL& url, Viewer* currentViewer, BrowserRun::Openi
else
{
KParts::URLArgs args = currentViewer ? currentViewer->browserExtension()->urlArgs() : KParts::URLArgs();
BrowserRun* r = new BrowserRun(this, currentViewer, url, args, mode);
connect(r, TQT_SIGNAL(signalOpenInViewer(const KURL&, Akregator::Viewer*, Akregator::BrowserRun::OpeningMode)),
this, TQT_SLOT(slotOpenURLReply(const KURL&, Akregator::Viewer*, Akregator::BrowserRun::OpeningMode)));
@@ -832,7 +840,7 @@ void View::slotOpenURL(const KURL& url, Viewer* currentViewer, BrowserRun::Openi
//TODO: KDE4 remove this ugly ugly hack
void View::slotUrlClickedInViewer(const KURL& url, Viewer* viewer, bool newTab, bool background)
{
if (!newTab)
{
slotOpenURL(url, viewer, BrowserRun::CURRENT_TAB);
@@ -983,7 +991,7 @@ void View::slotNextUnreadArticle()
{
if (m_viewMode == CombinedView)
m_listTabWidget->activeView()->slotNextUnreadFeed();
TreeNode* sel = m_listTabWidget->activeView()->selectedNode();
if (sel && sel->unread() > 0)
m_articleList->slotNextUnreadArticle();
@@ -995,7 +1003,7 @@ void View::slotPrevUnreadArticle()
{
if (m_viewMode == CombinedView)
m_listTabWidget->activeView()->slotPrevUnreadFeed();
TreeNode* sel = m_listTabWidget->activeView()->selectedNode();
if (sel && sel->unread() > 0)
m_articleList->slotPreviousUnreadArticle();
@@ -1211,8 +1219,8 @@ void View::slotOpenCurrentArticle()
link = article.link();
else if (article.guidIsPermaLink())
link = KURL(article.guid());
if (link.isValid())
if (link.isValid())
{
slotOpenURL(link, 0L, BrowserRun::NEW_TAB_FOREGROUND);
}
@@ -1236,8 +1244,8 @@ void View::slotOpenCurrentArticleBackgroundTab()
link = article.link();
else if (article.guidIsPermaLink())
link = KURL(article.guid());
if (link.isValid())
if (link.isValid())
{
slotOpenURL(link, 0L, BrowserRun::NEW_TAB_BACKGROUND);
}
@@ -1307,7 +1315,7 @@ void View::slotArticleDelete()
msg = i18n("<qt>Are you sure you want to delete article <b>%1</b>?</qt>").arg(TQStyleSheet::escape(articles.first().title()));
break;
default:
msg = i18n("<qt>Are you sure you want to delete the selected article?</qt>",
msg = i18n("<qt>Are you sure you want to delete the selected article?</qt>",
"<qt>Are you sure you want to delete the %n selected articles?</qt>",
articles.count());
}
@@ -1386,7 +1394,7 @@ void View::slotTextToSpeechRequest()
else
{
TQString selectedText = static_cast<PageViewer *>(m_currentFrame->part())->selectedText();
if (!selectedText.isEmpty())
SpeechClient::self()->slotSpeak(selectedText, "en");
}
@@ -1439,7 +1447,7 @@ void View::slotMouseOverInfo(const KFileItem *kifi)

void View::readProperties(KConfig* config)
{
if (!Settings::resetQuickFilterOnNodeChange())
{
m_searchBar->slotSetText(config->readEntry("searchLine"));
@@ -1447,7 +1455,7 @@ void View::readProperties(KConfig* config)
if (statusfilter != -1)
m_searchBar->slotSetStatus(statusfilter);
}
int selectedID = config->readNumEntry("selectedNodeID", -1);
if (selectedID != -1)
{
@@ -1471,7 +1479,7 @@ void View::saveProperties(KConfig* config)
// save filter settings
config->writeEntry("searchLine", m_searchBar->text());
config->writeEntry("searchCombo", m_searchBar->status());
TreeNode* sel = m_listTabWidget->activeView()->selectedNode();

if (sel)

+ 3
- 10
akregator/src/eventsrc View File

@@ -29,7 +29,6 @@ Name[hu]=Hírforrás felvéve
Name[is]=Straum bætt við
Name[it]=Aggiunta fonte
Name[ja]=フィード追加
Name[ka]=დამატებულია კვება
Name[kk]=Қор қосылды
Name[km]=បាន​បន្ថែម​មតិព័ត៌មាន
Name[ko]=피드 추가됨
@@ -53,8 +52,7 @@ Name[sv]=Kanal tillagd
Name[ta]=பீஃட் சேர்க்கப்பட்டது
Name[tr]=Haber kaynağı eklendi
Name[uk]=Подачу додано
Name[uz]=Yangiliklar tasmasi qoʻshildi
Name[uz@cyrillic]=Янгиликлар тасмаси қўшилди
Name[uz]=Янгиликлар тасмаси қўшилди
Name[zh_CN]=添加了新闻源
Name[zh_TW]=已加入 Feed
Comment=A new feed was remotely added to Akregator
@@ -78,7 +76,6 @@ Comment[hu]=Egy hírforrást távolról felvettek az Akregatorba
Comment[is]=Nýjum straum var bætt við Akregator
Comment[it]=Una nuova fonte è stata aggiunta ad Akregator da remoto
Comment[ja]=新規フィードがリモートで Akregator に追加されました
Comment[ka]=Akregator-ის სიას დისტანციურად ახალი კვება დაემატა
Comment[kk]=Akregator-ға қашықтан жаңа қор қосылды
Comment[km]=បាន​បន្ថែម​មតិព័ត៌មាន​ថ្មី​មួយ​ពី​ចម្ងាយ​ទៅ Akregator
Comment[ko]=Akregator에 피드가 원격으로 추가됨
@@ -102,8 +99,7 @@ Comment[sv]=En ny kanal har lagts till i aKregator utifrån
Comment[ta]=Akregatorக்கு ஒரு புதிய உள்ளீடு சேர்க்கப்பட்டது
Comment[tr]=Akregator'a yeni bir haber kaynağı eklendi
Comment[uk]=Нову подачу було віддалено додано до Akregator
Comment[uz]=Akregator dasturiga yangi yangiliklar tasmasi qoʻshildi
Comment[uz@cyrillic]=Akregator дастурига янги янгиликлар тасмаси қўшилди
Comment[uz]=Akregator дастурига янги янгиликлар тасмаси қўшилди
Comment[zh_CN]=新闻源远程添加进了 Akregator
Comment[zh_TW]=已從遠端加入新的 feed 到 Akregator
default_presentation=4
@@ -135,7 +131,6 @@ Name[hu]=Hírekk
Name[is]=Nýjar greinar
Name[it]=Nuovi articoli
Name[ja]=新規記事
Name[ka]=ახალი სტატიები
Name[kk]=Жаңа мақалалар
Name[km]=អត្ថបទ​ថ្មី
Name[ko]=새 글
@@ -160,8 +155,7 @@ Name[sv]=Nya artiklar
Name[ta]= புதிய செய்திகள்
Name[tr]=Yeni Haberler
Name[uk]=Нові статті
Name[uz]=Yangi maqolalar
Name[uz@cyrillic]=Янги мақолалар
Name[uz]=Янги мақолалар
Name[zh_CN]=新闻文章
Name[zh_TW]=新文章
Comment=New articles were fetched
@@ -188,7 +182,6 @@ Comment[hu]=Új hírek lettek letöltve
Comment[is]=Nýjar greinar voru sóttar
Comment[it]=I nuovi articoli sono stati recuperati
Comment[ja]=新規記事を取得しました
Comment[ka]=მიღებულია ახალი სტატიები
Comment[kk]=Жаңа мақалалар қабылданды
Comment[km]=បាន​ប្រមូល​អត្ថបទ​ថ្មី
Comment[ko]=새 글을 가져옴

+ 1
- 4
akregator/src/mk4storage/akregator_mk4storage_plugin.desktop View File

@@ -21,7 +21,6 @@ Name[hu]=Metakit tároló
Name[is]=Metakit geymslu bakendi
Name[it]=Backend archiviazione metakit
Name[ja]=メタキットストレージバックエンド
Name[ka]=Metakit მეხსიერების ბუფერი
Name[kk]=Metakit архивтеу бағдарламасы
Name[km]=កម្មវិធី​ខាង​ក្រោយ​សម្រាប់​រក្សាទុក (Metakit)
Name[ko]=Metakit 저장소 백엔드
@@ -69,7 +68,6 @@ Comment[hu]=Akregator bővítőmodul
Comment[is]=Íforrit fyrir Akregator
Comment[it]=Plugin per Akregator
Comment[ja]=Akregator 用プラグイン
Comment[ka]=Akregator-ის მოდული
Comment[kk]=Akregator-дың плагин модулі
Comment[km]=កម្មវិធី​ជំនួយ Akregator
Comment[ko]=Akregator 플러그인
@@ -93,8 +91,7 @@ Comment[sr@Latn]=Priključak za Akregator
Comment[sv]=Insticksprogram för Akregator
Comment[tr]=Akregator Eklentisi
Comment[uk]=Втулок для Akregator
Comment[uz]=Akregator uchun plagin
Comment[uz@cyrillic]=Akregator учун плагин
Comment[uz]=Akregator учун плагин
Comment[zh_CN]=Akregator 插件
Comment[zh_TW]=Akregator 外掛程式
ServiceTypes=Akregator/Plugin

+ 6
- 3
certmanager/certmanager.cpp View File

@@ -889,7 +889,8 @@ void CertManager::slotDirmngrExited() {
This slot will import CRLs from a file.
*/
void CertManager::importCRLFromFile() {
TQString filter = TQString("*.crl *.arl *-crl.der *-arl.der|") + i18n("Certificate Revocation List (*.crl *.arl *-crl.der *-arl.der)");
// loadcrl can only work with DER encoded files (verified with dirmngr 1.0.3)
TQString filter = TQString("*.crl *.arl *-crl.der *-arl.der|") + i18n("Certificate Revocation List, DER encoded (*.crl *.arl *-crl.der *-arl.der)");
KURL url = KFileDialog::getOpenURL( TQString::null,
filter,
this,
@@ -1277,9 +1278,11 @@ void CertManager::slotCertificateExportResult( const GpgME::Error & err, const T

void CertManager::slotExportSecretKey() {
Kleo::KeySelectionDialog dlg( i18n("Secret Key Export"),
i18n("Select the secret key to export "
"<qt>" +
i18n("Select the secret key to export "
"(<b>Warning: The PKCS#12 format is insecure; "
"exporting secret keys is discouraged</b>):"),
"exporting secret keys is discouraged</b>):") +
"</qt>",
std::vector<GpgME::Key>(),
Kleo::KeySelectionDialog::SecretKeys|Kleo::KeySelectionDialog::SMIMEKeys,
false /* no multiple selection */,

+ 1
- 5
certmanager/conf/kleopatra_config_appear.desktop View File

@@ -40,7 +40,6 @@ Name[hu]=Megjelenés
Name[is]=Útlit
Name[it]=Aspetto
Name[ja]=外観
Name[ka]=იერსახე
Name[kk]=Сыртқы көрінісі
Name[km]=រូបរាង
Name[ko]=모양
@@ -67,8 +66,7 @@ Name[ta]=தோற்றம்
Name[tg]=Намуди зоҳирӣ
Name[tr]=Görünüm
Name[uk]=Вигляд
Name[uz]=Koʻrinishi
Name[uz@cyrillic]=Кўриниши
Name[uz]=Кўриниши
Name[zh_CN]=外观
Comment=Colors & Fonts Configuration
Comment[af]=Kleur en skrif tipe opstelling
@@ -97,7 +95,6 @@ Comment[hu]=A színek és betűtípusok beállítása
Comment[is]=Stilling lita & leturgerða
Comment[it]=Configurazione tipi di carattere e colori
Comment[ja]=色とフォントの設定
Comment[ka]=ფერთა და შრიფტთა კონფიგურაცია
Comment[kk]=Түс & Қаріп параметрлері
Comment[km]=ការ​កំណត់​រចនាសម្ព័ន្ធ​ពណ៌ & ពុម្ពអក្សរ
Comment[ko]=색과 글꼴 설정
@@ -153,7 +150,6 @@ Keywords[hu]=szín,betűtípus,beállítások
Keywords[is]=litir,letur, stillingar
Keywords[it]=colori, font, caratteri, configurazione
Keywords[ja]=色,フォント,設定
Keywords[ka]=ფერები,შრიფტები, კონფიგურაცია
Keywords[km]=ពណ៌,ពុម្ពអក្សរ,ការ​កំណត់​រចនាសម្ព័ន្ធ
Keywords[ko]=색,글꼴,설정
Keywords[lt]=color,font, configuration, spalvų, šriftų konfigūravimas

+ 4
- 7
certmanager/conf/kleopatra_config_dirserv.desktop View File

@@ -27,7 +27,7 @@ Name[et]=Kataloogiteenused
Name[eu]=Direktorio zerbitzuak
Name[fa]=خدمات فهرست راهنما
Name[fi]=Hakemistopalvelut
Name[fr]=Services d'annuaire
Name[fr]=Services de répertoires
Name[fy]=Maptsjinsten
Name[ga]=Seirbhísí Eolaire
Name[gl]=Servicios de Directorio
@@ -36,7 +36,6 @@ Name[hu]=Címtárszolgáltatások
Name[is]=Nafnaþjónustur
Name[it]=Servizi Directory
Name[ja]=ディレクトリサービス
Name[ka]=საცნობარო მომსახურება
Name[kk]=Каталог қызметтері
Name[km]=សេវា​ថត
Name[ko]=디렉터리 서비스
@@ -80,7 +79,7 @@ Comment[et]=LDAP kataloogiteenuste seadistused
Comment[eu]=LDAP direktorio zerbitzuen konfigurazioa
Comment[fa]=پیکربندی خدمات فهرست راهنمای LDAP
Comment[fi]=Hakemistopalveluiden asetukset
Comment[fr]=Configuration des services d'annuaire LDAP
Comment[fr]=Configuration des répertoires LDAP
Comment[fy]=Konfiguraasje foar LDAP-tsjinsten
Comment[gl]=Configuración dos servicios de directorio LDAP
Comment[he]=תצורה של שירותי ספרייה עבור LDAP
@@ -88,7 +87,6 @@ Comment[hu]=Az LDAP címtárszolgáltatások beállításai
Comment[is]=Stillingar LDAP uppflettingaþjónustunnar
Comment[it]=Configurazione servizi LDAP
Comment[ja]=LDAP ディレクトリサービスの設定
Comment[ka]=LDAP საცნობარო მომსახურების კონფიგურაცია
Comment[kk]=LDAP каталог қызметтер параметрлері
Comment[km]=ការ​កំណត់​រចនាសម្ព័ន្ធ​របស់​សេវា​ថត LDAP
Comment[ko]=LDAP 디렉터리 서비스 설정
@@ -133,7 +131,7 @@ Keywords[et]=ldap,kataloog,teenused
Keywords[eu]=Idap, direktorio, zerbitzuak
Keywords[fa]=ldap، فهرست راهنما، خدمات
Keywords[fi]=ldap,hakemisto,palvelut
Keywords[fr]=ldap,annuaire,annuaires,service,services
Keywords[fr]=ldap,dossier,dossiers,service,services
Keywords[fy]=ldap,directory,services,triemtafel,tsjinsten
Keywords[ga]=ldap,eolaire,seirbhísí
Keywords[gl]=ldap,directorio,servicios
@@ -142,7 +140,6 @@ Keywords[hu]=ldap,címtár,szolgáltatások
Keywords[is]=ldap,directory,services,nafnaþjónusta
Keywords[it]=ldap, servizi, directory
Keywords[ja]=ldap,ディレクトリ,サービス
Keywords[ka]=ldap,ცნობარი,მომსახურება
Keywords[km]=ldap,ថត,សេវា
Keywords[ko]=ldap,디렉터리,서비스
Keywords[lt]=ldap,directory,services,aplankai,tarnybos
@@ -152,7 +149,7 @@ Keywords[nb]=ldap,mappe,tjenester
Keywords[nds]=LDAP,Verteken,Deensten
Keywords[ne]=ldap,डाइरेक्टरी,कार्य
Keywords[nn]=ldap,katalog,tenester
Keywords[pl]=katalog,usługi katalogowe,usługi,LDAP
Keywords[pl]=ldap,katalog,usługi katalogowe,usługi,LDAP
Keywords[pt]=ldap,directório,serviços
Keywords[pt_BR]=ldap,diretório,serviços
Keywords[ru]=LDAP,службы каталогов

+ 0
- 3
certmanager/conf/kleopatra_config_dnorder.desktop View File

@@ -34,7 +34,6 @@ Name[hu]=DN-attribútumsorrend
Name[is]=DN eiginleikaröðun
Name[it]=Attributi DN, ordine
Name[ja]=DN 属性順位
Name[ka]=DN ატრიბუტთა რიგი
Name[kk]=DN-атрибуттер реті
Name[km]=លំដាប់​គុណលក្ខណៈ DN
Name[ko]=DN 분배 순서
@@ -85,7 +84,6 @@ Comment[hu]=A DN-attribútumok megjelenítési sorrendjének beállítása
Comment[is]=Stilla röð DN eiginleikanna
Comment[it]=Configura l'ordine in cui sono mostrati gli attributi DN
Comment[ja]=DN 属性を表示する順位を設定
Comment[ka]=DN ატრიბუტთა ჩვენების რიგის კონფიგურაცია
Comment[kk]=DN атрибуттерді көрсету ретін баптау
Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​លំដាប់ ដែល​ត្រូវ​បង្ហាញ​គុណលក្ខណៈ DN
Comment[lt]=Konfigūruoti DN savybių rodymo tvarką
@@ -137,7 +135,6 @@ Keywords[hu]=DN,sorrend,RDN,attribútum
Keywords[is]=DN,röð,order,RDN,attribute
Keywords[it]=DN,ordine,RDN,attributi
Keywords[ja]=DN,順位,RDN,属性
Keywords[ka]=DN,რიგი,RDN,ატრიბუტი
Keywords[km]=DN,លំដាប់,RDN,គុណលក្ខណៈ
Keywords[lt]=DN,order,RDN,attribute,savybė,tvarka
Keywords[mk]=DN,order,RDN,attribute,редослед,атрибут

+ 14
- 2
certmanager/lib/backends/qgpgme/qgpgmecryptoconfig.cpp View File

@@ -447,6 +447,13 @@ TQVariant QGpgMECryptoConfigEntry::stringToValue( const TQString& str, bool unes
bool isString = isStringType();

if ( isList() ) {
if ( argType() == ArgType_None ) {
bool ok = true;
const TQVariant v = str.isEmpty() ? 0U : str.toUInt( &ok ) ;
if ( !ok )
kdWarning(5150) << "list-of-none should have an unsigned int as value:" << str << endl;
return v;
}
TQValueList<TQVariant> lst;
TQStringList items = TQStringList::split( ',', str );
for( TQStringList::const_iterator valit = items.begin(); valit != items.end(); ++valit ) {
@@ -657,7 +664,10 @@ void QGpgMECryptoConfigEntry::resetToDefault()
if ( mFlags & GPGCONF_FLAG_DEFAULT )
mValue = mDefaultValue;
else if ( mArgType == ArgType_None )
mValue = false;
if ( isList() )
mValue = 0U;
else
mValue = false;
}

void QGpgMECryptoConfigEntry::setBoolValue( bool b )
@@ -715,7 +725,9 @@ void QGpgMECryptoConfigEntry::setNumberOfTimesSet( unsigned int i )
{
Q_ASSERT( mArgType == ArgType_None );
Q_ASSERT( isList() );
setUIntValue( i );
mValue = i;
mSet = i > 0;
mDirty = true;
}

void QGpgMECryptoConfigEntry::setStringValueList( const TQStringList& lst )

+ 4
- 1
certmanager/lib/backends/qgpgme/qgpgmedecryptjob.cpp View File

@@ -85,7 +85,10 @@ GpgME::DecryptionResult Kleo::QGpgMEDecryptJob::exec( const TQByteArray & cipher
}

void Kleo::QGpgMEDecryptJob::doOperationDoneEvent( const GpgME::Error & ) {
emit result( mCtx->decryptionResult(), mOutDataDataProvider->data() );
const GpgME::DecryptionResult res = mCtx->decrypt( *mInData, *mOutData );
const TQByteArray plainText = mOutDataDataProvider->data();
getAuditLog();
emit result( res, plainText );
}

#include "qgpgmedecryptjob.moc"

+ 5
- 3
certmanager/lib/backends/qgpgme/qgpgmedecryptverifyjob.cpp View File

@@ -87,9 +87,11 @@ Kleo::QGpgMEDecryptVerifyJob::exec( const TQByteArray & cipherText, TQByteArray
}

void Kleo::QGpgMEDecryptVerifyJob::doOperationDoneEvent( const GpgME::Error & ) {
emit result( mCtx->decryptionResult(),
mCtx->verificationResult(),
mOutDataDataProvider->data() );
const GpgME::DecryptionResult dr = mCtx->decryptionResult();
const GpgME::VerificationResult vr = mCtx->verificationResult();
const TQByteArray plainText = mOutDataDataProvider->data();
getAuditLog();
emit result( dr, vr, plainText );
}

#include "qgpgmedecryptverifyjob.moc"

+ 1
- 0
certmanager/lib/backends/qgpgme/qgpgmedeletejob.cpp View File

@@ -64,6 +64,7 @@ GpgME::Error Kleo::QGpgMEDeleteJob::start( const GpgME::Key & key, bool allowSec
}

void Kleo::QGpgMEDeleteJob::doOperationDoneEvent( const GpgME::Error & error ) {
getAuditLog();
emit result( error );
}


+ 3
- 1
certmanager/lib/backends/qgpgme/qgpgmedownloadjob.cpp View File

@@ -72,7 +72,9 @@ GpgME::Error Kleo::QGpgMEDownloadJob::start( const TQStringList & pats ) {
}

void Kleo::QGpgMEDownloadJob::doOperationDoneEvent( const GpgME::Error & error ) {
emit result( error, mOutDataDataProvider->data() );
const TQByteArray data = mOutDataDataProvider->data();
getAuditLog();
emit result( error, data );
}

#include "qgpgmedownloadjob.moc"

+ 4
- 1
certmanager/lib/backends/qgpgme/qgpgmeencryptjob.cpp View File

@@ -97,7 +97,10 @@ GpgME::EncryptionResult Kleo::QGpgMEEncryptJob::exec( const std::vector<GpgME::K
}

void Kleo::QGpgMEEncryptJob::doOperationDoneEvent( const GpgME::Error & ) {
emit result( mResult = mCtx->encryptionResult(), mOutDataDataProvider->data() );
mResult = mCtx->encryptionResult();
const TQByteArray ciphertext = mOutDataDataProvider->data();
getAuditLog();
emit result( mResult, ciphertext );
}

void Kleo::QGpgMEEncryptJob::showErrorDialog( TQWidget * parent, const TQString & caption ) const {

+ 3
- 1
certmanager/lib/backends/qgpgme/qgpgmeexportjob.cpp View File

@@ -72,7 +72,9 @@ GpgME::Error Kleo::QGpgMEExportJob::start( const TQStringList & pats ) {
}

void Kleo::QGpgMEExportJob::doOperationDoneEvent( const GpgME::Error & error ) {
emit result( error, mOutDataDataProvider->data() );
const TQByteArray data = mOutDataDataProvider->data();
getAuditLog();
emit result( error, data );
}

#include "qgpgmeexportjob.moc"

+ 6
- 2
certmanager/lib/backends/qgpgme/qgpgmeimportjob.cpp View File

@@ -75,11 +75,15 @@ GpgME::Error Kleo::QGpgMEImportJob::start( const TQByteArray & keyData ) {

GpgME::ImportResult Kleo::QGpgMEImportJob::exec( const TQByteArray & keyData ) {
setup( keyData );
return mCtx->importKeys( *mInData );
const GpgME::ImportResult res = mCtx->importKeys( *mInData );
getAuditLog();
return res;
}

void Kleo::QGpgMEImportJob::doOperationDoneEvent( const GpgME::Error & ) {
emit result( mCtx->importResult() );
const GpgME::ImportResult res = mCtx->importResult();
getAuditLog();
emit result( res );
}



+ 8
- 8
certmanager/lib/backends/qgpgme/qgpgmejob.cpp View File

@@ -236,21 +236,19 @@ void Kleo::QGpgMEJob::createOutData() {

static const unsigned int GetAuditLogFlags = GpgME::Context::AuditLogWithHelp|GpgME::Context::HtmlAuditLog;

static TQString audit_log_as_html( GpgME::Context * ctx ) {
if ( !ctx )
return TQString();
static TQString audit_log_as_html( GpgME::Context * ctx, GpgME::Error & err ) {
assert( ctx );
QGpgME::QByteArrayDataProvider dp;
GpgME::Data data( &dp );
assert( !data.isNull() );
if ( const GpgME::Error err = ctx->getAuditLog( data, GetAuditLogFlags ) )
if ( ( err = ctx->getAuditLog( data, GetAuditLogFlags ) ) )
return TQString();
else
return TQString::fromUtf8( dp.data().data() );
const TQByteArray ba = dp.data();
return TQString::fromUtf8( ba.data(), ba.size() );
}

void Kleo::QGpgMEJob::doSlotOperationDoneEvent( GpgME::Context * context, const GpgME::Error & e ) {
if ( context == mCtx ) {
getAuditLog();
doEmitDoneSignal();
doOperationDoneEvent( e );
mThis->deleteLater();
@@ -258,7 +256,9 @@ void Kleo::QGpgMEJob::doSlotOperationDoneEvent( GpgME::Context * context, const
}

void Kleo::QGpgMEJob::getAuditLog() {
mAuditLogAsHtml = audit_log_as_html( mCtx );
if ( !mCtx )
return;
mAuditLogAsHtml = audit_log_as_html( mCtx, mAuditLogError );
}

void Kleo::QGpgMEJob::doSlotCancel() {

+ 4
- 3
certmanager/lib/backends/qgpgme/qgpgmejob.h View File

@@ -37,6 +37,7 @@
#include <gpgmepp/interfaces/passphraseprovider.h>

#include <gpgmepp/key.h>
#include <gpgmepp/context.h>

#include <tqcstring.h>
#include <tqstring.h>
@@ -45,8 +46,6 @@
#include <kdepimmacros.h>

namespace GpgME {
class Error;
class Context;
class Data;
}

@@ -120,6 +119,7 @@ namespace Kleo {
virtual void doEmitDoneSignal() = 0;
void doSlotCancel();
TQString auditLogAsHtml() const { return mAuditLogAsHtml; }
GpgME::Error auditLogError() const { return mAuditLogError; }

private:
/*! \reimp from GpgME::ProgressProvider */
@@ -146,6 +146,7 @@ namespace Kleo {
unsigned int mNumPatterns;
unsigned int mChunkSize;
unsigned int mPatternStartIndex, mPatternEndIndex;
GpgME::Error mAuditLogError;
TQString mAuditLogAsHtml;
};

@@ -154,7 +155,7 @@ namespace Kleo {
#define make_slot_cancel private: void slotCancel() { QGpgMEJob::doSlotCancel(); }
#define make_progress_emitter private: void doEmitProgressSignal( const TQString & what, int cur, int tot ) { emit progress( what, cur, tot ); }
#define make_done_emitter private: void doEmitDoneSignal() { emit done(); }
#define make_auditLogAsHtml private: TQString auditLogAsHtml() const { return QGpgMEJob::auditLogAsHtml(); }
#define make_auditLogAsHtml private: TQString auditLogAsHtml() const { return QGpgMEJob::auditLogAsHtml(); } GpgME::Error auditLogError() const { return QGpgMEJob::auditLogError(); }
#define QGPGME_JOB make_slot_cancel make_progress_emitter make_done_emitter make_auditLogAsHtml

#endif // __KLEO_QGPGMEJOB_H__

+ 4
- 1
certmanager/lib/backends/qgpgme/qgpgmekeygenerationjob.cpp View File

@@ -80,7 +80,10 @@ GpgME::Error Kleo::QGpgMEKeyGenerationJob::start( const TQString & parameters )
}

void Kleo::QGpgMEKeyGenerationJob::doOperationDoneEvent( const GpgME::Error & ) {
emit result( mCtx->keyGenerationResult(), mPubKeyDataProvider ? mPubKeyDataProvider->data() : TQByteArray() );
const GpgME::KeyGenerationResult res = mCtx->keyGenerationResult();
const TQByteArray data = mPubKeyDataProvider ? mPubKeyDataProvider->data() : TQByteArray() ;
getAuditLog();
emit result( res, data );
}

#include "qgpgmekeygenerationjob.moc"

+ 16
- 0
certmanager/lib/backends/qgpgme/qgpgmekeylistjob.cpp View File

@@ -48,6 +48,7 @@
#include <kdebug.h>

#include <tqstringlist.h>
#include <tqtimer.h>

#include <algorithm>

@@ -97,6 +98,10 @@ GpgME::Error Kleo::QGpgMEKeyListJob::start( const TQStringList & pats, bool secr
kdDebug(5150) << "QGpgMEKeyListJob::start(): retrying keylisting with chunksize " << chunkSize() << endl;
continue;
}
} else if ( err.code() == GPG_ERR_EOF ) {
kdDebug(5150) << "QGpgMEKeyListJob::start(): early end of keylisting, trying to fake an empty result" << endl;
TQTimer::singleShot( 10, this, TQT_SLOT(slotFakeOperationDoneEvent()) );
return GpgME::Error();
}
deleteLater();
mResult = GpgME::KeyListResult( 0, err );
@@ -158,6 +163,17 @@ void Kleo::QGpgMEKeyListJob::slotNextKeyEvent( GpgME::Context * context, const G
emit nextKey( key );
}

void Kleo::QGpgMEKeyListJob::slotFakeOperationDoneEvent() {
const GpgME::KeyListResult res = mCtx->keyListResult();
if ( !res.error().code() == GPG_ERR_EOF )
kdDebug(5150) << "QGpgMEKeyListJob::slotFakeOperationDoneEvent: expected EOF, got "
<< res.error().asString() << endl;
mResult = GpgME::KeyListResult();
emit done();
emit result( mResult );
deleteLater();
}

void Kleo::QGpgMEKeyListJob::slotOperationDoneEvent( GpgME::Context * context, const GpgME::Error & ) {
if ( context != mCtx )
return;

+ 1
- 0
certmanager/lib/backends/qgpgme/qgpgmekeylistjob.h View File

@@ -65,6 +65,7 @@ namespace Kleo {
private slots:
void slotNextKeyEvent( GpgME::Context * context, const GpgME::Key & key );
void slotOperationDoneEvent( GpgME::Context * context, const GpgME::Error & e );
void slotFakeOperationDoneEvent();

private:
void doOperationDoneEvent( const GpgME::Error &) {} // unused, we implement slotOperationDoneEvent ourselves.

+ 3
- 1
certmanager/lib/backends/qgpgme/qgpgmesignencryptjob.cpp View File

@@ -109,7 +109,9 @@ Kleo::QGpgMESignEncryptJob::exec( const std::vector<GpgME::Key> & signers,
void Kleo::QGpgMESignEncryptJob::doOperationDoneEvent( const GpgME::Error & ) {
mResult.first = mCtx->signingResult();
mResult.second = mCtx->encryptionResult();
emit result( mResult.first, mResult.second, mOutDataDataProvider->data() );
const TQByteArray cipherText = mOutDataDataProvider->data();
getAuditLog();
emit result( mResult.first, mResult.second, cipherText );
}

void Kleo::QGpgMESignEncryptJob::showErrorDialog( TQWidget * parent, const TQString & caption ) const {

+ 4
- 1
certmanager/lib/backends/qgpgme/qgpgmesignjob.cpp View File

@@ -102,7 +102,10 @@ GpgME::SigningResult Kleo::QGpgMESignJob::exec( const std::vector<GpgME::Key> &
}

void Kleo::QGpgMESignJob::doOperationDoneEvent( const GpgME::Error & ) {
emit result( mResult = mCtx->signingResult(), mOutDataDataProvider->data() );
mResult = mCtx->signingResult();
const TQByteArray signature = mOutDataDataProvider->data();
getAuditLog();
emit result( mResult, signature );
}

void Kleo::QGpgMESignJob::showErrorDialog( TQWidget * parent, const TQString & caption ) const {

+ 3
- 1
certmanager/lib/backends/qgpgme/qgpgmeverifydetachedjob.cpp View File

@@ -89,7 +89,9 @@ GpgME::VerificationResult Kleo::QGpgMEVerifyDetachedJob::exec( const TQByteArray
}

void Kleo::QGpgMEVerifyDetachedJob::doOperationDoneEvent( const GpgME::Error & ) {
emit result( mCtx->verificationResult() );
const GpgME::VerificationResult res = mCtx->verificationResult();
getAuditLog();
emit result( res );
}



+ 4
- 1
certmanager/lib/backends/qgpgme/qgpgmeverifyopaquejob.cpp View File

@@ -84,7 +84,10 @@ GpgME::VerificationResult Kleo::QGpgMEVerifyOpaqueJob::exec( const TQByteArray &
}

void Kleo::QGpgMEVerifyOpaqueJob::doOperationDoneEvent( const GpgME::Error & ) {
emit result( mCtx->verificationResult(), mOutDataDataProvider->data() );
const GpgME::VerificationResult res = mCtx->verificationResult();
const TQByteArray plainText = mOutDataDataProvider->data();
getAuditLog();
emit result( res, plainText );
}



+ 14
- 0
certmanager/lib/kleo/job.cpp View File

@@ -52,9 +52,13 @@
#include "refreshkeysjob.h"
#include "specialjob.h"

#include <gpgmepp/context.h>

#include <tqapplication.h>
#include <kdebug.h>

#include <gpg-error.h>

Kleo::Job::Job( TQObject * parent, const char * name )
: TQObject( parent, name )
{
@@ -75,6 +79,16 @@ TQString Kleo::Job::auditLogAsHtml() const {
return TQString();
}

GpgME::Error Kleo::Job::auditLogError() const {
kdDebug() << "Kleo::Job::auditLogError() should be reimplemented in Kleo::Job subclasses!" << endl;
return GpgME::Error( gpg_error( GPG_ERR_NOT_IMPLEMENTED ) );
}

bool Kleo::Job::isAuditLogSupported() const {
const GpgME::Error err = auditLogError();
return err.code() != GPG_ERR_NOT_IMPLEMENTED ;
}

#define make_job_subclass(x) \
Kleo::x::x( TQObject * parent, const char * name ) : Job( parent, name ) {} \
Kleo::x::~x() {}

+ 6
- 0
certmanager/lib/kleo/job.h View File

@@ -38,6 +38,10 @@

class TQWidget;

namespace GpgME {
class Error;
}

namespace Kleo {

/**
@@ -67,6 +71,8 @@ namespace Kleo {
virtual void showErrorDialog( TQWidget * parent=0, const TQString & caption=TQString::null ) const;

virtual TQString auditLogAsHtml() const;
virtual GpgME::Error auditLogError() const;
bool isAuditLogSupported() const;

public slots:
virtual void slotCancel() = 0;

+ 1
- 8
certmanager/lib/libkleopatrarc.desktop View File

@@ -22,7 +22,6 @@ Name[hu]=Nem ellenőrzött kulcs
Name[is]=Ekki staðfestur lykill
Name[it]=Chiave non convalidata
Name[ja]=認証されていない鍵
Name[ka]=დაუმოწმებელი გასაღები
Name[kk]=Тексерілмеген кілт
Name[km]=កូនសោ​គ្មាន​សុពលភាព
Name[ko]=검증되지 않은 키
@@ -77,7 +76,6 @@ Name[hu]=Lejárt kulcs
Name[is]=Útrunninn lykill
Name[it]=Chiave scaduta
Name[ja]=期限切れの鍵
Name[ka]=ვადაგასული გასაღები
Name[kk]=Ескірген кілт
Name[km]=កូនសោ​បាន​ផុតកំណត់
Name[ko]=만료된 키
@@ -130,7 +128,6 @@ Name[hu]=Visszavont kulcs
Name[is]=Afturkallaður lykill
Name[it]=Chiave revocata
Name[ja]=破棄された鍵
Name[ka]=ანულირებული გასაღები
Name[kk]=Күші жойылған кілт
Name[km]=កូនសោ​ត្រូវ​បាន​ដកហូត
Name[ko]=거부된 키
@@ -183,7 +180,6 @@ Name[hu]=Megbízható gyökértanúsítvány
Name[is]=Treyst rótarskilríki
Name[it]=Certificato radice affidabile
Name[ja]=信頼されたルート証明書
Name[ka]= რუტის სანდო სერთიფიკატი
Name[kk]=Сенім артылған түбір куәлігі
Name[km]=វិញ្ញាបនបត្រ Root ដែល​អាច​ជឿទុកចិត្ត
Name[lt]=Patikimas root sertifikatas
@@ -236,7 +232,6 @@ Name[hu]=Nem megbízható gyökértanúsítvány
Name[is]=Ekki traust rótarskilríki
Name[it]=Certificato radice non affidabile
Name[ja]=信頼されてないルート証明書
Name[ka]=რუტის არასანდო სერტიფიკატი
Name[kk]=Сенім артылмаған түбір куәлігі
Name[km]=វិញ្ញាបនបត្រ Root ដែល​មិន​អាច​ជឿទុកចិត្ត
Name[lt]=Nepatikimas root sertifikatas
@@ -290,7 +285,6 @@ Name[hu]=Egyéb kulcsok
Name[is]=Aðrir lyklar
Name[it]=Altre chiavi
Name[ja]=他の鍵
Name[ka]=სხვა გასაღებები
Name[kk]=Басқа кілттер
Name[km]=កូនសោ​ផ្សេង​ទៀត
Name[ko]=기타 키
@@ -316,8 +310,7 @@ Name[sv]=Andra nycklar
Name[ta]=மற்ற விசைகள்
Name[tr]=Diğer Anahtarlar
Name[uk]=Інші ключі
Name[uz]=Boshqa kalitlar
Name[uz@cyrillic]=Бошқа калитлар
Name[uz]=Бошқа калитлар
Name[zh_CN]=其它密钥
Name[zh_TW]=其他金鑰


+ 1
- 0
certmanager/lib/tests/test_verify.cpp View File

@@ -29,6 +29,7 @@
*/

#include <config.h>
#include <cstdlib>

#include <kleo/cryptobackendfactory.h>
#include <kleo/verifydetachedjob.h>

+ 6
- 0
certmanager/lib/ui/cryptoconfigdialog.cpp View File

@@ -46,6 +46,12 @@ Kleo::CryptoConfigDialog::CryptoConfigDialog( Kleo::CryptoConfig* config, TQWidg
setMainWidget( mMainWidget );
connect( mMainWidget, TQT_SIGNAL( changed() ), TQT_SLOT( slotChanged() ) );
enableButton( Apply, false );
if ( mMainWidget->hasError() ) {
showButton( Default, false );
showButton( User1, false );
showButton( Apply, false );
showButton( Ok, false );
}

// Automatically assign accelerators
KAcceleratorManager::manage( this );

+ 29
- 1
certmanager/lib/ui/cryptoconfigmodule.cpp View File

@@ -62,8 +62,20 @@ static inline TQPixmap loadIcon( TQString s ) {
->loadIcon( s.replace( TQRegExp( "[^a-zA-Z0-9_]" ), "_" ), KIcon::NoGroup, KIcon::SizeMedium );
}

static unsigned int num_components_with_options( const Kleo::CryptoConfig * config ) {
if ( !config )
return 0;
const TQStringList components = config->componentList();
unsigned int result = 0;
for ( TQStringList::const_iterator it = components.begin() ; it != components.end() ; ++it )
if ( const Kleo::CryptoConfigComponent * const comp = config->component( *it ) )
if ( !comp->groupList().empty() )
++result;
return result;
}

static const KJanusWidget::Face determineJanusFace( const Kleo::CryptoConfig * config ) {
return config && config->componentList().size() < 2
return num_components_with_options( config ) < 2
? KJanusWidget::Plain
: KJanusWidget::IconList ;
}
@@ -115,6 +127,22 @@ Kleo::CryptoConfigModule::CryptoConfigModule( Kleo::CryptoConfig* config, TQWidg
+ scrollView->style().pixelMetric(TQStyle::PM_ScrollBarExtent),
QMIN( compGUI->sizeHint().height(), dialogHeight ) );
}
if ( mComponentGUIs.empty() ) {
Q_ASSERT( face() == Plain );
const TQString msg = i18n("The gpgconf tool used to provide the information "
"for this dialog does not seem to be installed "
"properly. It did not return any components. "
"Try running \"%1\" on the command line for more "
"information.")
.arg( components.empty() ? "gpgconf --list-components" : "gpgconf --list-options gpg" );
TQLabel * label = new TQLabel( msg, vbox );
label->setAlignment( TQt::WordBreak );
label->setMinimumHeight( fontMetrics().lineSpacing() * 5 );
}
}

bool Kleo::CryptoConfigModule::hasError() const {
return mComponentGUIs.empty();
}

void Kleo::CryptoConfigModule::save()

+ 2
- 0
certmanager/lib/ui/cryptoconfigmodule.h View File

@@ -50,6 +50,8 @@ namespace Kleo {
public:
CryptoConfigModule( Kleo::CryptoConfig* config, TQWidget * parent=0, const char * name=0 );

bool hasError() const;

void save();
void reset(); // i.e. reload current settings, discarding user input
void defaults();

+ 52
- 5
certmanager/lib/ui/keyselectiondialog.cpp View File

@@ -61,6 +61,8 @@
#include <kconfig.h>
#include <kmessagebox.h>
#include <kprocess.h>
#include <kactivelabel.h>
#include <kurl.h>

// Qt
#include <tqcheckbox.h>
@@ -85,7 +87,12 @@ static bool checkKeyUsage( const GpgME::Key & key, unsigned int keyUsage ) {

if ( keyUsage & Kleo::KeySelectionDialog::ValidKeys ) {
if ( key.isInvalid() )
kdDebug() << "key is invalid - ignoring" << endl;
if ( key.keyListMode() & GpgME::Context::Validate ) {
kdDebug() << "key is invalid" << endl;
return false;
} else {
kdDebug() << "key is invalid - ignoring" << endl;
}
if ( key.isExpired() ) {
kdDebug() << "key is expired" << endl;
return false;
@@ -309,6 +316,28 @@ Kleo::KeySelectionDialog::KeySelectionDialog( const TQString & title,

Kleo::KeySelectionDialog::KeySelectionDialog( const TQString & title,
const TQString & text,
const TQString & initialQuery,
const std::vector<GpgME::Key> & selectedKeys,
unsigned int keyUsage,
bool extendedSelection,
bool rememberChoice,
TQWidget * parent, const char * name,
bool modal )
: KDialogBase( parent, name, modal, title, Default|Ok|Cancel|Help, Ok ),
mOpenPGPBackend( 0 ),
mSMIMEBackend( 0 ),
mRememberCB( 0 ),
mSelectedKeys( selectedKeys ),
mKeyUsage( keyUsage ),
mSearchText( initialQuery ),
mInitialQuery( initialQuery ),
mCurrentContextMenuItem( 0 )
{
init( rememberChoice, extendedSelection, text, initialQuery );
}

Kleo::KeySelectionDialog::KeySelectionDialog( const TQString & title,
const TQString & text,
const TQString & initialQuery,
unsigned int keyUsage,
bool extendedSelection,
@@ -321,6 +350,7 @@ Kleo::KeySelectionDialog::KeySelectionDialog( const TQString & title,
mRememberCB( 0 ),
mKeyUsage( keyUsage ),
mSearchText( initialQuery ),
mInitialQuery( initialQuery ),
mCurrentContextMenuItem( 0 )
{
init( rememberChoice, extendedSelection, text, initialQuery );
@@ -340,11 +370,26 @@ void Kleo::KeySelectionDialog::init( bool rememberChoice, bool extendedSelection
mTopLayout = new TQVBoxLayout( page, 0, spacingHint() );

if ( !text.isEmpty() ) {
TQLabel* textLabel = new TQLabel( text, page );
textLabel->setAlignment( textLabel->alignment() | Qt::WordBreak );
mTopLayout->addWidget( textLabel );
if ( text.startsWith( "<qt>" ) ) {
KActiveLabel *textLabel = new KActiveLabel( text, page );
disconnect( textLabel, TQT_SIGNAL(linkClicked(const TQString&)), textLabel, TQT_SLOT(openLink(const TQString&)) );
connect( textLabel, TQT_SIGNAL(linkClicked(const TQString&)), TQT_SLOT(slotStartCertificateManager(const TQString&)) );
textLabel->setAlignment( textLabel->alignment() | TQt::WordBreak );
mTopLayout->addWidget( textLabel );
} else {
KActiveLabel *textLabel = new KActiveLabel( text, page );
textLabel->setAlignment( textLabel->alignment() | TQt::WordBreak );
mTopLayout->addWidget( textLabel );
}
}

TQPushButton * const searchExternalPB
= new TQPushButton( i18n("Search for &External Certificates"), page );
mTopLayout->addWidget( searchExternalPB, 0, TQt::AlignLeft );
connect( searchExternalPB, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotStartSearchForExternalCertificates()) );
if ( initialQuery.isEmpty() )
searchExternalPB->hide();

TQHBoxLayout * hlay = new TQHBoxLayout( mTopLayout ); // inherits spacing
TQLineEdit * le = new TQLineEdit( page );
le->setText( initialQuery );
@@ -500,10 +545,12 @@ void Kleo::KeySelectionDialog::slotHelp()
emit helpClicked();
}

void Kleo::KeySelectionDialog::slotStartCertificateManager()
void Kleo::KeySelectionDialog::slotStartCertificateManager( const TQString &query )
{
KProcess certManagerProc;
certManagerProc << "kleopatra";
if ( !query.isEmpty() )
certManagerProc << "--external" << "--query" << KURL::decode_string( query );

if( !certManagerProc.start( KProcess::DontCare ) )
KMessageBox::error( this, i18n( "Could not start certificate manager; "

+ 14
- 1
certmanager/lib/ui/keyselectiondialog.h View File

@@ -93,6 +93,15 @@ namespace Kleo {
bool modal=true );
KeySelectionDialog( const TQString & title,
const TQString & text,
const TQString & initialPattern,
const std::vector<GpgME::Key> & selectedKeys,
unsigned int keyUsage=AllKeys,
bool extendedSelection=false,
bool rememberChoice=false,
TQWidget * parent=0, const char * name=0,
bool modal=true );
KeySelectionDialog( const TQString & title,
const TQString & text,
const TQString & initialPattern,
unsigned int keyUsage=AllKeys,
bool extendedSelection=false,
@@ -129,7 +138,10 @@ namespace Kleo {

private slots:
void slotRereadKeys();
void slotStartCertificateManager();
void slotStartCertificateManager( const TQString &query = TQString() );
void slotStartSearchForExternalCertificates() {
slotStartCertificateManager( mInitialQuery );
}
void slotKeyListResult( const GpgME::KeyListResult & );
void slotSelectionChanged();
void slotCheckSelection() { slotCheckSelection( 0 ); }
@@ -170,6 +182,7 @@ namespace Kleo {
TQTimer * mStartSearchTimer;
// cross-eventloop temporaries:
TQString mSearchText;
const TQString mInitialQuery;
Kleo::KeyListViewItem * mCurrentContextMenuItem;
int mTruncated, mListJobCount, mSavedOffsetY;
};

+ 64
- 5
certmanager/lib/ui/messagebox.cpp View File

@@ -46,10 +46,15 @@
#include <klocale.h>
#include <ksavefile.h>
#include <kguiitem.h>
#include <kdebug.h>

#include <tqtextedit.h>
#include <tqtextstream.h>
#include <tqvbox.h>
#include <tqapplication.h>
#include <tqstylesheet.h>

#include <gpg-error.h>

using namespace Kleo;
using namespace GpgME;
@@ -74,6 +79,7 @@ public:
explicit AuditLogViewer( const TQString & log, TQWidget * parent=0, const char * name=0, WFlags f=0 )
: KDialogBase( parent, name, false, i18n("View GnuPG Audit Log"),
Close|User1|User2, Close, false, KGuiItem_save(), KGuiItem_copy() ),
m_log( /* sic */ ),
m_textEdit( new TQTextEdit( this, "m_textEdit" ) )
{
setWFlags( f );
@@ -85,7 +91,18 @@ public:
~AuditLogViewer() {}

void setAuditLog( const TQString & log ) {
m_textEdit->setText( log );
if ( log == m_log )
return;
m_log = log;
m_textEdit->setText( "<qt>" + log + "</qt>" );
const TQRect rect = m_textEdit->paragraphRect( 0 );
kdDebug() << "setAuditLog: rect = " << rect << endl;
if ( !rect.isValid() )
return;
TQSize maxSize = qApp->desktop()->screenGeometry( this ).size() * 2 / 3 ;
if ( !maxSize.isValid() )
maxSize = TQSize( 640, 480 );
m_textEdit->setMinimumSize( rect.size().boundedTo( maxSize ) );
}

private:
@@ -98,7 +115,12 @@ private:
KSaveFile file( fileName );

if ( TQTextStream * const s = file.textStream() ) {
*s << m_textEdit->text() << endl;
*s << "<html><head>";
if ( !caption().isEmpty() )
*s << "\n<title>" << /*TQt*/TQStyleSheet::escape( caption() ) << "</title>\n";
*s << "</head><body>\n"
<< m_log
<< "\n</body></html>" << endl;
file.close();
}

@@ -114,6 +136,7 @@ private:
}

private:
TQString m_log;
TQTextEdit * m_textEdit;
};

@@ -125,13 +148,23 @@ void MessageBox::auditLog( TQWidget * parent, const Job * job, const TQString &
if ( !job )
return;

if ( !GpgME::hasFeature( AuditLogFeature ) ) {
if ( !GpgME::hasFeature( AuditLogFeature ) || !job->isAuditLogSupported() ) {
KMessageBox::information( parent, i18n("Your system does not have support for GnuPG Audit Logs"),
i18n("System Error") );
return;
}

const GpgME::Error err = job->auditLogError();

if ( err.code() != GPG_ERR_NO_DATA ) {
KMessageBox::information( parent, i18n("An error occurred while trying to retrieve the GnuPG Audit Log:\n%1")
.arg( TQString::fromLocal8Bit( err.asString() ) ),
i18n("GnuPG Audit Log Error") );
return;
}

const TQString log = job->auditLogAsHtml();

if ( log.isEmpty() ) {
KMessageBox::information( parent, i18n("No GnuPG Audit Log available for this operation."),
i18n("No GnuPG Audit Log") );
@@ -143,7 +176,7 @@ void MessageBox::auditLog( TQWidget * parent, const Job * job, const TQString &

// static
void MessageBox::auditLog( TQWidget * parent, const TQString & log, const TQString & caption ) {
AuditLogViewer * const alv = new AuditLogViewer( "<qt>" + log + "</qt>", parent, "alv", Qt::WDestructiveClose );
AuditLogViewer * const alv = new AuditLogViewer( log, parent, "alv", Qt::WDestructiveClose );
alv->setCaption( caption );
alv->show();
}
@@ -247,8 +280,34 @@ void MessageBox::error( TQWidget * parent, const SigningResult & sresult, const
}

// static
bool MessageBox::showAuditLogButton( const Kleo::Job * job ) {
if ( !job ) {
kdDebug() << "not showing audit log button (no job instance)" << endl;
return false;
}
if ( !GpgME::hasFeature( GpgME::AuditLogFeature ) ) {
kdDebug() << "not showing audit log button (gpgme too old)" << endl;
return false;
}
if ( !job->isAuditLogSupported() ) {
kdDebug() << "not showing audit log button (not supported)" << endl;
return false;
}
if ( job->auditLogError().code() == GPG_ERR_NO_DATA ) {
kdDebug() << "not showing audit log button (GPG_ERR_NO_DATA)" << endl;
return false;
}
if ( !job->auditLogError() && job->auditLogAsHtml().isEmpty() ) {
kdDebug() << "not showing audit log button (success, but result empty)" << endl;
return false;
}
return true;
}


// static
void MessageBox::make( TQWidget * parent, TQMessageBox::Icon icon, const TQString & text, const Job * job, const TQString & caption, int options ) {
KDialogBase * dialog = GpgME::hasFeature( GpgME::AuditLogFeature )
KDialogBase * dialog = showAuditLogButton( job )
? new KDialogBase( caption, KDialogBase::Yes | KDialogBase::No,
KDialogBase::Yes, KDialogBase::Yes,
parent, "error", true, true,

+ 3
- 0
certmanager/lib/ui/messagebox.h View File

@@ -40,6 +40,7 @@ namespace GpgME {
class EncryptionResult;
class DecryptionResult;
class VerificationResult;
class Error;
}

namespace Kleo {
@@ -73,6 +74,8 @@ namespace Kleo {
static void auditLog( TQWidget * parent, const TQString & log, const TQString & caption );
static void auditLog( TQWidget * parent, const TQString & log );

static bool showAuditLogButton( const Kleo::Job * job );

private:
static void make( TQWidget * parent, TQMessageBox::Icon icon, const TQString & text, const Kleo::Job * job, const TQString & caption, int options );
};

+ 13
- 0
cvs.sh.diff View File

@@ -0,0 +1,13 @@
Index: admin/cvs.sh
===================================================================
--- admin/cvs.sh (revision 637526)
+++ admin/cvs.sh (working copy)
@@ -592,7 +592,7 @@ for i in `ls -1 po.backup/*.pot 2>/dev/n
test -f po/$i || echo "disappeared: $i"
done
for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
- sed -e 's,^"Content-Type: text/plain; charset=CHARSET\\n"$,"Content-Type: text/plain; charset=UTF-8\\n",' po/$i > po/$i.new && mv po/$i.new po/$i
+ sed -e 's,^"Content-Type: text/plain; charset=CHARSET\\n"$,"Content-Type: text/plain; charset=UTF-8\\n",; s,"Content-Transfer-Encoding: ENCODING\\n","Content-Transfer-Encoding: 8bit\\n", ; s,"Language-Team: LANGUAGE <LL@li.org>\\n","Language-Team: LANGUAGE <kde-i18n-doc@kde.org>\\n",' po/$i > po/$i.new && mv po/$i.new po/$i
#msgmerge -q -o po/$i po/$i po/$i
egrep -v '^#[^,]' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > temp.pot
if test -f po.backup/$i && ! cmp -s temp.pot po.backup/$i; then

+ 3
- 3
doc/kleopatra/index.docbook View File

@@ -146,8 +146,8 @@ menu, as well as from the command line. The &kleopatra; executable is
named <userinput><command>kleopatra</command></userinput>.</para>

<note><para>This program is named after Cleopatra, a famous female
Egyptian pharaoh that lived at the time of Julius Caesar, whom she is
said to have had an intimate relationship with.</para>
Egyptian pharaoh that lived at the time of Julius Caesar, with whom
she had a child, Caesarion, unacknowledged as his heir.</para>

<para>The name was chosen since this program originates from the
<ulink url="http://www.gnupg.org/aegypten2/">&Auml;gypten
@@ -494,7 +494,7 @@ command line interface).</para>


<varlistentry id="view-stop-operation">
<term><menuchoice><shortcut><keycombo action="simul"><keycap>Esc</keycap></keycombo></shortcut>
<term><menuchoice><shortcut><keycombo action="simul">&Esc;</keycombo></shortcut>
<guimenu>View</guimenu><guimenuitem>Stop Operation</guimenuitem></menuchoice></term>

<listitem>

+ 178
- 27
doc/kmail/configure.docbook View File

@@ -648,7 +648,7 @@ so you can choose a monospaced font for the date field for better readability.</
quoted more than three times will appear in color. Note that the
<guilabel>Quoted text</guilabel> colors only work in the message reader, not in
the composer. If you want folders which are close to their quota
(space alotment, usually used on IMAP servers) to be displayed in a different color,
(space allotment, usually used on IMAP servers) to be displayed in a different color,
you can specify a percentage value as a threshold for this. The color to be used
can be configured along with the other custom colors.<!-- TODO --></para>

@@ -657,6 +657,11 @@ can be configured along with the other custom colors.<!-- TODO --></para>
<sect2 id="configure-appearance-layout">
<title>Layout</title>

<para>If the <guilabel>Close message window after replying or forwarding</guilabel> option is
activated, KMail will close the message window after replying to or forwarding the message that
is displayed in the window. This only applies to the separate message window, not to the embedded
message preview pane.</para>

<para><guilabel>Show HTML status bar</guilabel> activates a bar at the left side of the reader
pane that tells you if a message is &html; or not. This is important because
&html; messages might imitate the look of a signed and encrypted message, so
@@ -777,6 +782,32 @@ folder will be selected in &kmail;'s main window.
</para>
</listitem>
</varlistentry>
<varlistentry id="configure-composer-general-quote-selection-only">
<term>
<guilabel>Only quote selected text when repyling</guilabel>
</term>
<listitem>
<para>
If checked, &kmail; will quote only the selected text in the message window,
instead of the complete message, when replying.
With this, it is possible to quickly generate replies that quote only the relevant
paragraph to which you are actually replying, and omits the other paragraphs that are
not relevant to the context.
</para>
</listitem>
</varlistentry>
<varlistentry id="configure-composer-general-strip-signatures">
<term>
<guilabel>Remove the signature when replying</guilabel>
</term>
<listitem>
<para>
If checked, &kmail; will remove the signature from the quoted text
when replying to a message. This is useful since it reduces the amount
of quoted text, which makes it easier to read the reply.
</para>
</listitem>
</varlistentry>
<varlistentry id="configure-composer-general-auto-request-mdns">
<term>
<guilabel>Automatically request message disposition notifications</guilabel>
@@ -806,6 +837,19 @@ folder will be selected in &kmail;'s main window.
</para>
</listitem>
</varlistentry>
<varlistentry id="configure-composer-general-too-many-recipients">
<term>
<guilabel>Warn if the number of recipients is larger than</guilabel>
</term>
<listitem>
<para>
If the number of recipients is larger than this value, KMail will
warn and ask for a confirmation before sending the mail.
The default is to warn if there are more than <literal>5</literal> recipients.
This warning can be turned off.
</para>
</listitem>
</varlistentry>
<varlistentry id="configure-composer-general-autosave-interval">
<term>
<guilabel>Autosave interval</guilabel>
@@ -819,6 +863,18 @@ folder will be selected in &kmail;'s main window.
</para>
</listitem>
</varlistentry>
<varlistentry id="configure-composer-general-forwading-type">
<term>
<guilabel>Default Forwarding Type</guilabel>
</term>
<listitem>
<para>
Lets you decide whether you want to forward messages inline or as an attachment by default.
This changes which type of forwarding mechanism is used when you click the toolbar icon or
when you activate the shortcut for forwarding.
</para>
</listitem>
</varlistentry>
<varlistentry id="configure-composer-general-external-editor">
<term>
<guilabel>External Editor</guilabel>
@@ -1102,7 +1158,7 @@ of key words can be modified.</para>
<para>
Attaches the complete message to the disposition
notification. Usually, this is overkill. It does
not add any valueable information that cannot be
not add any valuable information that cannot be
deduced from the message headers alone, but people
sometimes insist on this, since it is much easier
for humans to correlate the content of the message
@@ -1276,7 +1332,7 @@ of key words can be modified.</para>
</term>
<listitem>
<para>
If checked, everytime you encrypt a message, a dialog
If checked, every time you encrypt a message, a dialog
will appear that presents you with the encryption keys
that will be used for each recipient. You can then
review the choice of keys, change them, and approve or
@@ -1335,7 +1391,7 @@ of key words can be modified.</para>
</title>

<para>
On this tab you can switch security-relavant warnings on and
On this tab you can switch security-relevant warnings on and
off.
</para>

@@ -1386,7 +1442,7 @@ of key words can be modified.</para>
<listitem>
<para>
If checked, &kmail; will emit a warning if an &smime;
certifciate or &openpgp; key will be used for a recipient
certificate or &openpgp; key will be used for a recipient
whose email address is not listed in the email addresses
stored in the certificate.
</para>
@@ -1698,7 +1754,7 @@ of key words can be modified.</para>
backends. Below each backend entry, you can see what protocols
(&openpgp; and/or &smime;) the backend supports. If a protocol
is not listed, the backend does not support it. If it is
listed, but greyed out, the backend supports the protocol, but
listed, but grayed out, the backend supports the protocol, but
some required programs were not found, or other errors
occurred during initialization. If you press
<guibutton>Rescan</guibutton>, a dialog box will appear that
@@ -1793,12 +1849,39 @@ Correspondingly, if you ask &kmail; to go to the previous unread message.
</varlistentry>

<varlistentry>
<term><guilabel>Jump to first unread message when entering a folder</guilabel></term>

<term><guilabel>When entering a folder</guilabel></term>
<listitem>
<para>This option controls what happens if you open a folder.
<itemizedlist>
<listitem>
<para>If <guilabel>Jump to First New Message</guilabel> is selected then &kmail; will select the
first message it finds that is marked as new.
</para>
</listitem>
<listitem>
<para>If <guilabel>Jump to First Unread or New Message</guilabel> is selected then &kmail; will
select the first message it finds that is marked either as new or as unread.
</para>
</listitem>
<listitem>
<para>If <guilabel>Jump to Last Selected Message</guilabel> is selected then &kmail; will select
the message that was selected when the folder was open the last time.
</para>
</listitem>
<listitem>
<para>If <guilabel>Jump to Newest Message</guilabel> is selected then &kmail; will select the newest
message by date.
</para>
</listitem>
<listitem>
<para>If this option is enabled &kmail; will go to the first unread message
when you enter a folder; if it is not enabled, &kmail; will go to first
new message or, if there is no new message, to the message
that was selected when you last left the folder.</para>
<para>If <guilabel>Jump to Oldest Message</guilabel> is selected then &kmail; will select the oldest
message by date.
</para>
</listitem>
</itemizedlist>

</para>
</listitem>
</varlistentry>

@@ -1908,6 +1991,21 @@ option is selected.</para>
<para>Invitations use to be send as attachments to a mail. By enabling this option, you let the invitation mails to be sent in the text of the mail, which is necessary to send invitations and replies to Microsoft Outlook(tm).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Exchange compatible invitations naming</guilabel></term>
<listitem>
<para>Microsoft Outlook, when used in combination with a Microsoft Exchange
server, has a problem understanding standards-compliant groupware e-mail.
Enable this option to send groupware invitations in a way that Microsoft
Exchange understands. The invitation will be sent as an attachment with name <filename>ical.ics</filename>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Outlook compatible invitation reply comments</guilabel></term>
<listitem>
<para>When the user provides comments when responding to invitations, send the comment in way that Microsoft Outlook(tm) understands. If this option is not enabled, the response comments will not be seen in Outlook.</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>

@@ -1934,7 +2032,7 @@ SendMDNsWithEmptySender=true
to the [MDN] section of the kmail configuration file. If there is no such section, simply add "[MDN]" on
a line by itself just above the option.

Note that the default setting of "false" strictly speaking violates internet standards, but is
Note that the default setting of "false" strictly speaking violates Internet standards, but is
set that way for practical reasons, to avoid servers rejecting MDNs that KMail generates because they
think they are SPAM.
</para>
@@ -1956,20 +2054,6 @@ The option is enabled by default. To disable the feature, add a line reading (un
</varlistentry>

<varlistentry>
<term><guilabel>ForwardingInlineByDefault</guilabel></term>
<listitem>
<para>
This option allows you to make inline forwarding the default forwarding method instead
of forwarding as attachement.

To enable the feature, add a line reading (under [Composer] section):
</para>
<programlisting>ForwardingInlineByDefault=true
</programlisting>
</listitem>
</varlistentry>

<varlistentry>
<term><guilabel>MaximumAttachmentSize</guilabel></term>
<listitem>
<para>
@@ -2011,6 +2095,73 @@ To disable the feature, add a line reading (under [OutOfOffice] section):
</listitem>
</varlistentry>

<varlistentry>
<term><guilabel>Allow out-of-office settings to be adjusted by the user.</guilabel></term>
<listitem>
<para>
In case you don't want users to be able to upload their own out-of-office scripts to
the server you can add:
</para>
<programlisting>AllowOutOfOfficeSettings=false
</programlisting><para>
to the [OutOfOffice] section of the kmail configuration file. If there is no such section, simply add "[OutOfOffice]" on
a line by itself just above the option.
</para>
</listitem>
</varlistentry>

<varlistentry>
<term><guilabel>Allow out-of-office scripts to be uploaded by the user, but no settings changed.</guilabel></term>
<listitem>
<para>
If you want to allow your users to upload their own out-of-office scripts but you do not want them to be
able to change the domain to react to and the react-to-spam setting, you can add:
</para>
<programlisting>AllowOutOfOfficeUploadButNoSettings=true
</programlisting><para>
to the [OutOfOffice] section of the kmail configuration file. If there is no such section, simply add "[OutOfOffice]" on
a line by itself just above the option.
</para>
</listitem>
</varlistentry>


<varlistentry>
<term><guilabel>Default domain to limit out-of-office replies to.</guilabel></term>
<listitem>
<para>
When editing vacation (out-of-office) scripts, the user can specify a domain to
limit the sending of such replies to. To pre-load this setting with a default
value, add
</para>
<programlisting>OutOfOfficeDomain=myMailDomain.test
</programlisting><para>
to the [OutOfOffice] section of the kmail configuration file. If there is no such section, simply add "[OutOfOffice]" on
a line by itself just above the option.

Applying defaults to the out-of-office configuration dialog via the corresponding
button will restore this domain, in case the user has changed it.
</para>
</listitem>
</varlistentry>

<varlistentry>
<term><guilabel>Enable sending of out-of-office replies to messages marked as SPAM.</guilabel></term>
<listitem>
<para>
By default, out-of-office replies are not sent to messages marked as SPAM. To override this
behavior, add
</para>
<programlisting>OutOfOfficeReactToSpam=true
</programlisting><para>
to the [OutOfOffice] section of the kmail configuration file. If there is no such section, simply add "[OutOfOffice]" on
a line by itself just above the option.

Applying defaults to the out-of-office configuration dialog via the corresponding
button will restore this setting, in case the user has changed it.
</para>
</listitem>
</varlistentry>

<varlistentry>
<term><guilabel>disregardUmask</guilabel></term>
@@ -2030,7 +2181,7 @@ To enable the feature, add a line reading (under [General] section):
<listitem><para>Activate this option to automate the handling of not yet uploaded messages in disconnected IMAP
folders that can not be uploaded. This can happen if the folder was removed from the server or your access
rights have been restricted. Such messages will automatically moved to a newly created lost+found folder if
this option is enabled, you will be ask how to proceed everytime otherwise.
this option is enabled, you will be ask how to proceed every time otherwise.

To enable the feature, add a line reading:
</para>

+ 2
- 0
doc/kmail/index.docbook View File

@@ -9,6 +9,7 @@
<!ENTITY kmail-menus SYSTEM "menus.docbook">
<!ENTITY kmail-faq SYSTEM "faq.docbook">
<!ENTITY kmail-importing SYSTEM "importing.docbook">
<!ENTITY kmail-chiasmus SYSTEM "using-chiasmus.docbook">
<!ENTITY kmail-credits-and-licenses SYSTEM "credits-and-licenses.docbook">
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE" > <!-- change language only here -->
@@ -126,6 +127,7 @@
&kmail-menus;
&kmail-faq;
&kmail-importing;
&kmail-chiasmus;
&kmail-credits-and-licenses;

<appendix id="installation">

+ 158
- 0
doc/kmail/using-chiasmus.docbook View File

@@ -0,0 +1,158 @@
<chapter id="chiasmus">

<chapterinfo>
<authorgroup>
<author>
<firstname>Jan-Oliver</firstname>
<surname>Wagner</surname>
<affiliation><address>
<email>jan@intevation.de</email>
</address></affiliation>
</author>
<author>
<firstname>Till</firstname>
<surname>Adam</surname>
<affiliation><address>
<email>till@kdab.net</email>
</address></affiliation>
</author>

</authorgroup>

<date>2005-06-30</date>
<releaseinfo>1.8</releaseinfo>
</chapterinfo>

<title>Using the Chiasmus encryption tool</title>

<sect1 id="chiasmus-preparations">
<title>Preparations</title>

<para>
To encrypt and decrypt with Chiasmus, you need the BSI's Chiasmus
command line tool for GNU/Linux. It is intended solely for use in
government agencies and availabe from the BSI on request.
</para>

<para>
When executed without parameters, the <command>chiasmus</command>
program should output something like:
</para>

<para>
<screen>
Chiasmus (R) fuer Windows K 1.8.0.0
Bundesamt fuer Sicherheit in der Informationstechnik
Kontakt: Chiasmus@bsi.bund.de
(C) 2001 - 2005
[ ...]
</screen>
</para>

<para>
Version 1.8.0.0 was tested succesfully. Other versions may or may not
work correctly.
</para>

<para>
As a last preparation step a directory which will hold the key files
ending in <filename>.xis</filename> has to be created, if none already exists. Usually
<filename class="directory">~/.chiasmus/</filename> is used.
</para>

</sect1>

<sect1 id="chiasmus-configuration">
<title>Configuration</title>
<para>
Select <menuchoice><guimenu>Settings</guimenu><guimenuitem>Configure KMail
</guimenuitem></menuchoice> and choose the <guilabel>Crypto-Backends</guilabel>
tab on the Security page. Select the entry for <guilabel>Chiasmus</guilabel> and click
<guibutton>Configure....</guibutton> to open the configuration dialog
for the Chiasmus backend.
</para>

<para>
Specify the path to the Chiasmus binary and the directory where key files are
to be stored, using the file selection dialogs which open when you click the
folder icons next to the path entries.
</para>

<para>
Close the backend configuration dialog by clicking <guibutton>Ok</guibutton>
and check the <guilabel>Chiasmus Checkbox</guilabel> to activate it. Then also close the main
configuration dialog.
</para>

</sect1>


<sect1 id="chiasmus-encryption">
<title>Encryption</title>
<para>
To encrypt a message with Chiasmus, select <menuchoice><guimenu>
Options</guimenu><guimenuitem>Encrypt message with chiasmus
</guimenuitem></menuchoice>. A dialog comes up in which you can select
the key file to use, as well as additional command line arguments to
be passed to <command>chiasmus</command>.
</para>

<note>
<para>
If you want to use Chiasmus encryption regularly, you should add
an icon for that option to your toolbar, using <menuchoice><guimenu>
Settings</guimenu><guimenuitem>Configure toolbars</guimenuitem>
</menuchoice>. Move the entry for <guilabel>Encrypt with Chiasmus
</guilabel> from the left side of the dialog to the right, using the
buttons between the two panes. You can then quickly enable or disable
Chiasmus encryption using that toolbar button and have a visual
indication of the current state.
</para>
</note>

<note>
<para>
If automatic saving of backup copies of currently edited messages is
enabled, you will be prompted for your Chiasmus password, if Chiamsus
encryption is active.
</para>
</note>

<para>
On message sending, you will be prompted for the password. If the password
is correct, the text of the message and all its attachments will be
encrypted.
</para>

<note>
<para>
The other signing and encryption options are completely independent of
the Chiasmus encryption. You can use those in addition to Chiasmus,
&eg; to sign the message. Additional encryption, on the other hand,
does not make much sense and complicates decryption for the
recipients.
</para>
</note>

</sect1>

<sect1 id="chiasmus-decryption">
<title>Decryption</title>
<para>
&kmail; and &kontact; detect messages that have been encrypted
using Chiasmus and will automatically ask for the key file to use for
decryption, as well as the corresponding password. If the password is correct, the
message will be decrypted and displayed.
</para>

<para>
To decrypt attachments that were encrypted using Chiasmus (&ie; those which have
a file name ending in <filename>.xia</filename>), right-click on the
attachment you want to decrypt and select <menuchoice><guimenuitem>Decrypt using Chiasmus
</guimenuitem></menuchoice>. After you have chosen a key file to be used for decryption and
entered the correct password for it, a file selection dialog will allow you
to specify where the decrypted attachment should be saved.
</para>
</sect1>

</chapter>

+ 21
- 2
doc/kmail/using-kmail.docbook View File

@@ -375,6 +375,25 @@ checker. Note that you may first need to configure the spellchecker using

</sect2>

<sect2 id="setup-text-snippets">
<title>Setting Up the Text Snippets Tool</title>
<para>
When editing in the composer window you can store often used parts of text as snippets. To configure the capabilities of the mail snippets part select <menuchoice> <guimenu>Settings</guimenu> <guimenuitem>Snippets</guimenuitem> </menuchoice> from the menubar. A new panel will appear on the left side of the composer.
</para>
<para>To add a new snippet to Snippet Panel, right click on panel, click on <menuchoice><guimenu>Add Snippet</guimenu></menuchoice> in the context menu. A snippet editor dialog will appear, in which new text can be added and the snippet can be given a name. Also a <guilabel>Shortcut</guilabel> can be associated with the snippet.
Snippets can be grouped together as well by creating groups and adding snippets to particular group. If you want to view the stored text in a tooltip window whenever you keep the mouse cursor over the title of that snippet.
</para>
<para>The <guilabel>Snippets</guilabel> tool allows for a variable text in predefined places any time you insert a snippet into a file. To accomplish this <guilabel>Snippets</guilabel> provides its own variables' mechanism. You can set up its behaviour in the snippet text itself by using separators ( $ ) that enclose the variable names. For example : $variablename$, $invoicenumber$, $weekno$.
</para>
<para>
The variable separator can be changed to some other character by changing "snippetDelimiter" in [SnippetPart] section. The Text Snippet configuration file can be found here $KDEHOME/share/config/kmailsnippetrc .
<programlisting>
snippetDelimiter=$
</programlisting>

</para>

</sect2>
</sect1>

<sect1 id="folders">
@@ -503,7 +522,7 @@ events by using the <guilabel>Generate free/busy and activate alarms for</guilab
choice box.</para>

<para>In case you don't want to receive reminders for folders shared by someone else,
you can block them locally by activating the <guilabel>Block free/busy and alarms locally</guilabel>
you can block them locally by activating the <guilabel>Block alarms locally</guilabel>
checkbox.</para>

</sect3>
@@ -1321,7 +1340,7 @@ which you do not like.</para>
</varlistentry>
<varlistentry>
<term><guilabel>Forward To</guilabel></term>
<listitem><para>This will forward the message inline (&ie; as if you selected <menuchoice><guimenu>Message</guimenu><guimenuitem>Forward</guimenuitem><guimenuitem>Inline...</guimenuitem></menuchoice>) to another email address.</para>
<listitem><para>This will forward the message inline (&ie; as if you selected <menuchoice><guimenu>Message</guimenu><guimenuitem>Forward</guimenuitem><guimenuitem>Inline...</guimenuitem></menuchoice>) to another email address. You can select the template to be used when forwarding with this filter with the drop down list.</para>
</listitem>
</varlistentry>
<varlistentry>

+ 82
- 3
doc/kontact/index.docbook View File

@@ -948,10 +948,89 @@ documentation</ulink>.
</sect1>
<sect1 id="kontact-configure-profiles">
<title>&kontact; Profiles</title>
<para>&kontact;'s profile support makes it possible to load and save user settings in profiles.
The settings stored in the profile include typical Look&amp;Feel related options such as app-specific color schemes, icon sets, toolbar layout and application defaults. Personal information, e.g. accounts and identities are not stored in profiles.
<para>A profile is an arbitrary set of configuration values for any of the kontact components (mail, calendar, etc.) accompanied by a configuration file for the profile itself, which specifies its name, description etc. An example profile configuration file looks like this:
</para>

<informalexample>
<para>
<literallayout>
[Kontact Profile]
Description=Default KDE Kontact settings
Identifier=KontactDefaults
Name=Kontact Style
</literallayout>
</para>
<para>
The format is the standard .ini file format used for configuration throughout KDE, including in kiosk.
</para>
</informalexample>

<para>
&kontact;'s profile support makes it possible to load and save user settings in profiles.
The settings stored in the profile include typical Look&amp;Feel related options such as app-specific color schemes, icon sets, toolbar layout and application defaults. Personal information, e.g. accounts and identities are not stored in profiles.
</para>

<para>
Two default profiles are provided by Kontact: &quot;&kontact; Style&quot;, which contains the default &kontact; settings, and &quot;Outlook Style&quot;, adapting &kontact; to Microsoft Outlook Look&amp;Feel.
The user can adapt existing profiles, create new profiles from his current settings, and import and export profiles. To manage profiles, choose &quot;Configure Profiles&quot; from the &quot;Settings&quot; menu.
The user can adapt existing profiles, create new profiles from his current settings, and import and export profiles.
</para>

<para>
The dialog opened through Settings -> "Configure Profiles" allows profiles to be imported, exported, created, deleted and saved. They can also be loaded (applied) from there. Saving applies the currently active settings throughout Kontact to the selected profile, while import and export allow existing profiles to be written to or read from directories. To change a setting, one can edit the kontactrc file using a text editor and save it.
</para>

<para>
Apart from the configuration file, a profile directory can contain configuration skeleton files for Kontact as a whole (kontactrc) or for any of the components (korganizerrc, kmailrc, etc.). These files can in turn contain any configuration values that the profile should set (overriding the user's current configuration) when the profile is loaded.

<itemizedlist>
<listitem><para>
The korganizer configuration for the "Kontact Defaults" profile for example sets the calendar view to be merged, by default :
<informalexample>
<para>
[Views]
Agenda View Calendar Display=CalendarsMerged
</para>
</informalexample>
</para>
</listitem>

<listitem><para>
The Outlook-like profile, on the other hand, sets it to be side by side, like in Outlook:
<informalexample>
<para>
[Views]
Agenda View Calendar Display=CalendarsSideBySide
</para>
</informalexample>
</para>
</listitem>

<listitem><para>
If a profile wants to reset or remove a configuration key, it can specify that key like so:
<informalexample>
<para>
[General]
activeBackground=KONTACT_PROFILE_DELETE_KEY
</para>
</informalexample>
</para>
</listitem>
<listitem><para>
This example resets the background color to whatever the KDE style suggests. The Outlook compatability profile sets this key to the Windows