summaryrefslogtreecommitdiffstats
path: root/kicker/menuext
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit4aed2c8219774f5d797760606b8489a92ddc5163 (patch)
tree3f8c130f7d269626bf6a9447407ef6c35954426a /kicker/menuext
downloadtdebase-4aed2c8219774f5d797760606b8489a92ddc5163.tar.gz
tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kicker/menuext')
-rw-r--r--kicker/menuext/Makefile.am2
-rw-r--r--kicker/menuext/find/Makefile.am18
-rw-r--r--kicker/menuext/find/find.desktop133
-rw-r--r--kicker/menuext/find/findmenu.cpp84
-rw-r--r--kicker/menuext/find/findmenu.h47
-rw-r--r--kicker/menuext/find/kfind.desktop89
-rw-r--r--kicker/menuext/find/websearch.desktop80
-rw-r--r--kicker/menuext/kate/Makefile.am15
-rw-r--r--kicker/menuext/kate/katesessionmenu.cpp150
-rw-r--r--kicker/menuext/kate/katesessionmenu.desktop98
-rw-r--r--kicker/menuext/kate/katesessionmenu.h45
-rw-r--r--kicker/menuext/kdeprint/Makefile.am15
-rw-r--r--kicker/menuext/kdeprint/print_mnu.cpp139
-rw-r--r--kicker/menuext/kdeprint/print_mnu.h46
-rw-r--r--kicker/menuext/kdeprint/printmenu.desktop144
-rw-r--r--kicker/menuext/konq-profiles/Makefile.am15
-rw-r--r--kicker/menuext/konq-profiles/konquerormenu.desktop136
-rw-r--r--kicker/menuext/konq-profiles/konqy_menu.cpp102
-rw-r--r--kicker/menuext/konq-profiles/konqy_menu.h50
-rw-r--r--kicker/menuext/konsole/Makefile.am15
-rw-r--r--kicker/menuext/konsole/konsole_mnu.cpp318
-rw-r--r--kicker/menuext/konsole/konsole_mnu.h64
-rw-r--r--kicker/menuext/konsole/konsolebookmarkhandler.cpp117
-rw-r--r--kicker/menuext/konsole/konsolebookmarkhandler.h60
-rw-r--r--kicker/menuext/konsole/konsolebookmarkmenu.cpp187
-rw-r--r--kicker/menuext/konsole/konsolebookmarkmenu.h58
-rw-r--r--kicker/menuext/konsole/konsolemenu.desktop137
-rw-r--r--kicker/menuext/prefmenu/Makefile.am17
-rw-r--r--kicker/menuext/prefmenu/prefmenu.cpp394
-rw-r--r--kicker/menuext/prefmenu/prefmenu.desktop135
-rw-r--r--kicker/menuext/prefmenu/prefmenu.h74
-rw-r--r--kicker/menuext/recentdocs/Makefile.am15
-rw-r--r--kicker/menuext/recentdocs/recentdocs.desktop140
-rw-r--r--kicker/menuext/recentdocs/recentdocsmenu.cpp139
-rw-r--r--kicker/menuext/recentdocs/recentdocsmenu.h55
-rw-r--r--kicker/menuext/remote/Makefile.am17
-rw-r--r--kicker/menuext/remote/remotemenu.cpp164
-rw-r--r--kicker/menuext/remote/remotemenu.desktop133
-rw-r--r--kicker/menuext/remote/remotemenu.h53
-rw-r--r--kicker/menuext/system/Makefile.am15
-rw-r--r--kicker/menuext/system/systemmenu.cpp91
-rw-r--r--kicker/menuext/system/systemmenu.desktop127
-rw-r--r--kicker/menuext/system/systemmenu.h50
-rw-r--r--kicker/menuext/tom/Makefile.am19
-rw-r--r--kicker/menuext/tom/README65
-rw-r--r--kicker/menuext/tom/TASKGROUPS49
-rw-r--r--kicker/menuext/tom/destinations18
-rw-r--r--kicker/menuext/tom/tom.cc855
-rw-r--r--kicker/menuext/tom/tom.desktop75
-rw-r--r--kicker/menuext/tom/tom.h110
50 files changed, 5174 insertions, 0 deletions
diff --git a/kicker/menuext/Makefile.am b/kicker/menuext/Makefile.am
new file mode 100644
index 000000000..6d672d29a
--- /dev/null
+++ b/kicker/menuext/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = find kdeprint prefmenu recentdocs konsole konq-profiles remote system kate
+
diff --git a/kicker/menuext/find/Makefile.am b/kicker/menuext/find/Makefile.am
new file mode 100644
index 000000000..223781dcf
--- /dev/null
+++ b/kicker/menuext/find/Makefile.am
@@ -0,0 +1,18 @@
+INCLUDES = $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_find.la
+
+kickermenu_find_la_SOURCES = findmenu.cpp
+kickermenu_find_la_LDFLAGS = $(all_libraries) -module -avoid-version
+kickermenu_find_la_LIBADD = $(LIB_KDEUI)
+
+kickermenu_find_la_METASOURCES = AUTO
+
+desktopmenu_DATA = find.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+findmenu_data_DATA = kfind.desktop websearch.desktop
+findmenu_datadir = $(kde_datadir)/kicker/menuext/find
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_find.pot
diff --git a/kicker/menuext/find/find.desktop b/kicker/menuext/find/find.desktop
new file mode 100644
index 000000000..c4dd2258e
--- /dev/null
+++ b/kicker/menuext/find/find.desktop
@@ -0,0 +1,133 @@
+[Desktop Entry]
+Name=Find
+Name[af]=Soek
+Name[ar]=إبحث
+Name[az]=Tap
+Name[be]=Шукаць
+Name[bg]=Търсене
+Name[bn]=অনুসন্ধান
+Name[br]=Klask
+Name[bs]=Traži
+Name[ca]=Cerca
+Name[cs]=Najít
+Name[csb]=Szëkba
+Name[cy]=Canfod
+Name[de]=Suchen
+Name[el]=Αναζήτηση
+Name[eo]=Trovi
+Name[es]=Buscar
+Name[et]=Otsing
+Name[eu]=Bilatu
+Name[fa]=یافتن
+Name[fi]=Etsi
+Name[fr]=Recherche
+Name[fy]=Sykje
+Name[ga]=Aimsigh
+Name[gl]=Procurar
+Name[he]=מצא
+Name[hi]=ढूंढें
+Name[hr]=Traži
+Name[hu]=Keresés
+Name[is]=Leita
+Name[it]=Trova
+Name[ja]=検索
+Name[ka]=ძიება
+Name[kk]=Іздеп табу
+Name[km]=រក
+Name[lt]=Rasti
+Name[lv]=Meklēt
+Name[mk]=Најди
+Name[mn]=Олох
+Name[ms]=Cari
+Name[mt]=Fittex
+Name[nb]=Finn
+Name[nds]=Söken
+Name[ne]=फेला पार्नुहोस्
+Name[nl]=Zoeken
+Name[nn]=Finn
+Name[pa]=ਖੋਜ
+Name[pl]=Wyszukiwanie
+Name[pt]=Procurar
+Name[pt_BR]=Procurar
+Name[ro]=Caută
+Name[ru]=Поиск
+Name[rw]=Gushaka
+Name[se]=Oza
+Name[sk]=Nájsť
+Name[sl]=Najdi
+Name[sr]=Нађи
+Name[sr@Latn]=Nađi
+Name[sv]=Sök
+Name[ta]=தேடு
+Name[te]=వెతుకు
+Name[tg]=Кофтан
+Name[th]=ค้นหา
+Name[tr]=Bul
+Name[tt]=Ezläw
+Name[uk]=Пошук
+Name[uz]=Qidirish
+Name[uz@cyrillic]=Қидириш
+Name[vi]=Tìm kiếm
+Name[wa]=Trover
+Name[zh_CN]=查找
+Name[zh_TW]=尋找
+Comment=Menu for starting a file or web search
+Comment[af]=Kieslys om 'n lêer of web bladsy te soek
+Comment[ar]=قائمة لتشغيل ملف أو للبحث في الشبكة
+Comment[be]=Меню для запуску пошуку файлаў ці ў Сеціве
+Comment[bg]=Меню за стартиране на файл или търсене в Интернет
+Comment[bn]=ফাইল বা ওয়েব অনুসন্ধান করার জন্য মেনু
+Comment[bs]=Meni za pokretanje datoteke ili pretrage weba
+Comment[ca]=Menú per iniciar una cerca de fitxers o web
+Comment[cs]=Nabídka pro spuštění souboru nebo hledání na webu
+Comment[csb]=Menu naczãca szëkbë w sécë abò lopków
+Comment[da]=Menu for hurtigt at starte en fil- eller netsøgning
+Comment[de]=Menü zur Datei- oder Websuche
+Comment[el]=Μενού για την εκκίνηση ενός αρχείου ή αναζήτηση στον ιστό
+Comment[eo]=Menuo por lanĉi dosier- aŭ TTT-serĉadon
+Comment[es]=Menú para comenzar la búsqueda de un archivo o página web
+Comment[et]=Menüü faili- või veebiotsingu käivitamiseks
+Comment[eu]=Fitxategiak edo interneten bilaketak abiarazteko menua
+Comment[fa]=گزینگان برای آغاز جستجوی پرونده یا وب
+Comment[fi]=Valikko tiedoston käynnistämiseen tai verkkohakuun
+Comment[fr]=Menu permettant d'effectuer une recherche de fichiers ou sur Internet
+Comment[fy]=Menu foar it sykjen nei triemmen of op't ynternet
+Comment[gl]=Menú para abrir un ficheiro ou buscar na web
+Comment[he]=תפריט לחיפוש קובץ, או ביצוע חיפוש ברשת
+Comment[hr]=Izbornik za pokretanje pretraživanja datoteka ili Interneta
+Comment[hu]=Menü webes vagy fájlkereséshez
+Comment[is]=Einföld leið til að ræsa skrár eða hefja vefleit
+Comment[it]=Menu per avviare una ricerca web o di file
+Comment[ja]=ファイルまたはウェブ検索を開始するためのメニュー
+Comment[ka]=ფაილში ან ვებში ძიების დაწყების მენიუ
+Comment[kk]=Файңлды жегу не вебте іздеу мәзірі
+Comment[km]=ម៉ឺនុយ​សម្រាប់​ចាប់ផ្តើម​ស្វែងរក​ឯកសារ ឬ ទំព័រ​បណ្តាញ
+Comment[lt]=Bylų ar žiniatinklio paieškos meniu
+Comment[mk]=Мени за пребарување на датотека или пребарување на мрежа
+Comment[nb]=Meny for å starte en fil eller et nettsøk
+Comment[nds]=Menü för dat Söken na Dateien oder binnen dat Nett
+Comment[ne]=फाइल सुरुआत गर्ने वा वेब खोज्नका लागि मेनु
+Comment[nl]=Menu voor het zoeken naar bestanden of op internet
+Comment[nn]=Meny for å starta ei fil eller eit nettsøk
+Comment[pa]=ਇੱਕ ਫਾਇਲ ਜਾਂ ਵੈੱਬ ਖੋਜ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਮੇਨੂ
+Comment[pl]=Menu rozpoczęcia przeszukiwania sieci lub plików
+Comment[pt]=Um menu para iniciar uma pesquisa de ficheiros ou na Web
+Comment[pt_BR]=Menu para iniciar um arquivo ou uma busca web
+Comment[ro]=Meniu pentru pornirea unei căutări de fișiere sau pe web
+Comment[ru]=Быстрый доступ к поиску файлов и страниц в Интернете
+Comment[se]=Fállu mas álggahat fiila- dahje fierpmádatohcama
+Comment[sk]=Menu pre vyhľadávanie súborov alebo webu
+Comment[sl]=Meni za začetek iskanja datotek in iskanja po spletu
+Comment[sr]=Мени за започињање претраге фајлова или Веба
+Comment[sr@Latn]=Meni za započinjanje pretrage fajlova ili Veba
+Comment[sv]=Meny för att snabbt starta en fil- eller webbsökning
+Comment[th]=เมนูสำหรับเริ่มการค้นหาแฟ้ม หรือเว็บ
+Comment[tr]=Bir dosya ya da web araması başlatmak için menü
+Comment[uk]=Меню для пошуку файлів або пошуку в Тенетах
+Comment[vi]=Thực đơn giúp tìm tập tin hay tìm trên mạng
+Comment[wa]=Menu po-z enonder on cweraedje d' on fitchî ou sol daegntoele
+Comment[zh_CN]=启动文件或 Web 搜索的菜单
+Comment[zh_TW]=開始檔案或網頁搜尋的選單
+Icon=kfind
+
+X-KDE-Library=kickermenu_find
diff --git a/kicker/menuext/find/findmenu.cpp b/kicker/menuext/find/findmenu.cpp
new file mode 100644
index 000000000..fc3ae12a6
--- /dev/null
+++ b/kicker/menuext/find/findmenu.cpp
@@ -0,0 +1,84 @@
+/*
+ This file is part of Kicker.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <kapplication.h>
+#include <kiconloader.h>
+#include <ksimpleconfig.h>
+#include <kstandarddirs.h>
+
+#include "findmenu.h"
+
+K_EXPORT_KICKER_MENUEXT( find, FindMenu )
+
+
+FindMenu::FindMenu( QWidget *parent, const char *name,
+ const QStringList &/*args*/)
+ : KPanelMenu( "", parent, name )
+{
+}
+
+FindMenu::~FindMenu()
+{
+ mConfigList.clear();
+}
+
+void FindMenu::initialize()
+{
+ QStringList list = KGlobal::dirs()->findAllResources( "data", "kicker/menuext/find/*.desktop", false, true );
+
+ list.sort();
+
+ int id = 0;
+
+ mConfigList.clear();
+ for ( QStringList::ConstIterator it = list.begin(); it != list.end(); ++it ) {
+ KSimpleConfig config( *it, true );
+ config.setDesktopGroup();
+
+ mConfigList.append( *it );
+ QString text = config.readEntry( "Name" );
+
+ insertItem( SmallIconSet( config.readEntry( "Icon" ) ), text, id );
+ id++;
+ }
+}
+
+void FindMenu::slotExec( int pos )
+{
+ QString app = mConfigList[ pos ];
+
+ kapp->propagateSessionManager();
+
+ KSimpleConfig config(app, true);
+ config.setDesktopGroup();
+ if (kapp && config.readEntry("Type") == "Link")
+ {
+ kapp->invokeBrowser(config.readEntry("URL"));
+ }
+ else
+ {
+ KApplication::startServiceByDesktopPath( app );
+ }
+}
+
+#include "findmenu.moc"
diff --git a/kicker/menuext/find/findmenu.h b/kicker/menuext/find/findmenu.h
new file mode 100644
index 000000000..2297c4dff
--- /dev/null
+++ b/kicker/menuext/find/findmenu.h
@@ -0,0 +1,47 @@
+/*
+ This file is part of Kicker.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef FINDMENU_H
+#define FINDMENU_H
+
+#include <kpanelmenu.h>
+
+class QStringList;
+
+class FindMenu : public KPanelMenu
+{
+ Q_OBJECT
+
+ public:
+ FindMenu( QWidget* parent, const char* name, const QStringList &/*args*/ );
+ ~FindMenu();
+
+ protected slots:
+ void initialize();
+ void slotExec( int );
+
+ private:
+ QStringList mConfigList;
+};
+
+#endif
diff --git a/kicker/menuext/find/kfind.desktop b/kicker/menuext/find/kfind.desktop
new file mode 100644
index 000000000..fff29f223
--- /dev/null
+++ b/kicker/menuext/find/kfind.desktop
@@ -0,0 +1,89 @@
+[Desktop Entry]
+Exec=kfind %f
+Icon=kfind
+DocPath=kfind/index.html
+Path=
+Type=Application
+Terminal=false
+Name=Find Files
+Name[af]=Soek Lêers
+Name[ar]=ابحث عن ملفات
+Name[be]=Шукаць файлы
+Name[bg]=Търсене на файлове
+Name[bn]=ফাইল অনুসন্ধান
+Name[br]=Klask restroù
+Name[bs]=Pronađi datoteke
+Name[ca]=Cerca fitxers
+Name[cs]=Najít soubory
+Name[csb]=Nalezë lopczi
+Name[cy]=Canfod Ffeiliau
+Name[da]=Find filer
+Name[de]=Dateien suchen
+Name[el]=Αναζήτηση αρχείων
+Name[eo]=Trovi dosierojn
+Name[es]=KFind
+Name[et]=Failide otsimine
+Name[eu]=Bilatu fitxategiak
+Name[fa]=یافتن پرونده‌ها
+Name[fi]=Etsi tiedostoja
+Name[fr]=Recherche de fichiers
+Name[fy]=Triemmen sykje
+Name[ga]=Aimsigh Comhaid
+Name[gl]=Buscar Ficheiros
+Name[he]=חפש קבצים
+Name[hi]=फ़ाइलें ढूंढें
+Name[hr]=Traži datoteke
+Name[hu]=Fájlkereső
+Name[id]=Cari Berkas
+Name[is]=Finna skrár
+Name[it]=Trova file
+Name[ja]=ファイルを検索
+Name[ka]=ფაილთა ძიება
+Name[kk]=Файлдарды табу
+Name[km]=រក​ឯកសារ
+Name[ko]=글꼴 파일
+Name[lo]=ຄົ້ນຫາແຟ້ມ
+Name[lt]=Rasti bylas
+Name[lv]=Meklēt Failus
+Name[mk]=Пронајди датотеки
+Name[mn]=Файл хайх
+Name[ms]=Cari Fail
+Name[mt]=Sib Fajls
+Name[nb]=Finn filer
+Name[nds]=Dateien söken
+Name[ne]=फाइल फेला पार्नुहोस्
+Name[nl]=Bestanden zoeken
+Name[nn]=Finn filer
+Name[nso]=Hwetsa Difaele
+Name[oc]=Cerca fiquièrs
+Name[pa]=ਫਾਇਲ ਖੋਜ
+Name[pl]=Znajdź pliki
+Name[pt]=Procurar Ficheiros
+Name[pt_BR]=Procurar arquivos
+Name[ro]=Caută fișiere
+Name[ru]=Поиск файлов
+Name[rw]=Gushaka Amadosiye
+Name[se]=Oza fiillaid
+Name[sk]=Hľadať súbory
+Name[sl]=Najdi datoteke
+Name[sr]=Претрага фајлова
+Name[sr@Latn]=Pretraga fajlova
+Name[sv]=Hitta filer
+Name[ta]=கோப்புகளைக் கண்டுபிடி
+Name[te]=దస్త్రాలను వెతుకు
+Name[tg]=Ёфтани файлҳо
+Name[th]=ค้นหาแฟ้ม
+Name[tr]=Dosyalarda Bul
+Name[tt]=Birem Ezläw
+Name[uk]=Пошук файлів
+Name[uz]=Fayllarni qidirish
+Name[uz@cyrillic]=Файлларни қидириш
+Name[ven]=Todani faela
+Name[vi]=Tìm Tập tin
+Name[wa]=Trover des fitchîs
+Name[xh]=Fumana Iifayile
+Name[zh_CN]=查找文件
+Name[zh_TW]=尋找檔案
+Name[zu]=Thola Amafayela
+X-KDE-StartupNotify=true
+Categories=Qt;KDE;Find;
diff --git a/kicker/menuext/find/websearch.desktop b/kicker/menuext/find/websearch.desktop
new file mode 100644
index 000000000..b3d2a0254
--- /dev/null
+++ b/kicker/menuext/find/websearch.desktop
@@ -0,0 +1,80 @@
+# KDE Config File
+[Desktop Entry]
+Type=Link
+URL=http://www.google.com
+Icon=enhanced_browsing
+Terminal=false
+Name=Web Search
+Name[af]=Web Soektog
+Name[ar]=بحث في الشبكة
+Name[az]=Vebdə Axtrarış
+Name[be]=Шукаць у Сеціве
+Name[bg]=Търсене в Интернет
+Name[bn]=ওয়েব অনুসন্ধান
+Name[br]=Klask ar gwiad
+Name[bs]=Web pretraga
+Name[ca]=Recerca web
+Name[cs]=Vyhledávání na webu
+Name[csb]=Szëkba w sécë WWW
+Name[cy]=Chwiliad Gwê
+Name[da]=Internetsøgning
+Name[de]=Web-Suche
+Name[el]=Αναζήτηση στο διαδίκτυο
+Name[eo]=TTT-serĉo
+Name[es]=Búsqueda web
+Name[et]=Veebiotsing
+Name[eu]=Web arakaketa
+Name[fa]=جستجوی وب
+Name[fi]=Verkkohaku
+Name[fr]=Recherche web
+Name[fy]=Web-sykje-opdracht
+Name[ga]=Cuardach Lín
+Name[gl]=Procura na Web
+Name[he]=חיפוש ברשת
+Name[hi]=वेब खोज
+Name[hr]=Web pretraživanje
+Name[hu]=Keresés a weben
+Name[is]=Vefleit
+Name[it]=Ricerca sul web
+Name[ja]=ウェブ検索
+Name[ka]=ვებ ძიება
+Name[kk]=Вебте табу
+Name[km]=ស្វែងរក​តាម​បណ្ដាញ
+Name[lt]=Žiniatinklio paieška
+Name[lv]=Meklēt tīklā
+Name[mk]=Веб-пребарување
+Name[mn]=Вэб хайлт
+Name[ms]=Carian Web
+Name[mt]=Fittex fuq il-web
+Name[nb]=Søk på nettsteder
+Name[nds]=In't Nett söken
+Name[ne]=वेब खोजी
+Name[nl]=Web-zoekopdracht
+Name[nn]=Søk på nettstader
+Name[pa]=ਵੈੱਬ ਖੋਜ
+Name[pl]=Wyszukiwanie w sieci WWW
+Name[pt]=Pesquisa na Web
+Name[pt_BR]=Busca na Web
+Name[ro]=Căutare Web
+Name[ru]=Поиск в Интернете
+Name[rw]=Ishakisha ry'Urubugamakuru
+Name[se]=Web-ohcan
+Name[sk]=Hľadanie na WWW
+Name[sl]=Spletno iskanje
+Name[sr]=Претраживање Веба
+Name[sr@Latn]=Pretraživanje Veba
+Name[sv]=Webbsökning
+Name[ta]=வலை தேடு
+Name[te]=వెబ్ అన్వెషణ
+Name[tg]=Ҷустуҷӯи Вэб
+Name[th]=ค้นหาจากเว็บ
+Name[tr]=Web Arama
+Name[tt]=Web-Ezläw
+Name[uk]=Пошук в Тенетах
+Name[uz]=Internetda qidirish
+Name[uz@cyrillic]=Интернетда қидириш
+Name[vi]=Tìm kiếm trên mạng
+Name[wa]=Cweraedje sol daegntoele
+Name[zh_CN]=Web 搜索
+Name[zh_TW]=網頁搜尋
+Categories=Qt;KDE;Find;
diff --git a/kicker/menuext/kate/Makefile.am b/kicker/menuext/kate/Makefile.am
new file mode 100644
index 000000000..bc629e0f9
--- /dev/null
+++ b/kicker/menuext/kate/Makefile.am
@@ -0,0 +1,15 @@
+INCLUDES = $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_kate.la
+
+kickermenu_kate_la_SOURCES = katesessionmenu.cpp
+kickermenu_kate_la_LDFLAGS = $(all_libraries) -module -avoid-version
+kickermenu_kate_la_LIBADD = $(LIB_KDEUI)
+
+kickermenu_kate_la_METASOURCES = AUTO
+
+desktopmenu_DATA = katesessionmenu.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/kickermenu_kate.pot \ No newline at end of file
diff --git a/kicker/menuext/kate/katesessionmenu.cpp b/kicker/menuext/kate/katesessionmenu.cpp
new file mode 100644
index 000000000..63cee8106
--- /dev/null
+++ b/kicker/menuext/kate/katesessionmenu.cpp
@@ -0,0 +1,150 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+ ---
+ Copyright (C) 2005, Anders Lund <anders@alweb.dk>
+ */
+
+#include "katesessionmenu.h"
+#include "katesessionmenu.moc"
+
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kinputdialog.h>
+#include <klibloader.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <ksimpleconfig.h>
+#include <kstandarddirs.h>
+
+#include <qvalidator.h>
+
+class Validator : public QValidator {
+ public:
+ Validator( QObject *parent ) : QValidator( parent, 0 ) {}
+ ~Validator() {}
+ virtual QValidator::State validate( QString &, int & ) const { return QValidator::Acceptable; }
+};
+
+K_EXPORT_KICKER_MENUEXT(kate, KateSessionMenu)
+
+KateSessionMenu::KateSessionMenu( QWidget *parent, const char *name, const QStringList& )
+ : KPanelMenu( parent, name ),
+ m_parent( parent )
+{
+}
+
+KateSessionMenu::~KateSessionMenu()
+{
+}
+
+// update the session list and rebuild the menu
+void KateSessionMenu::initialize()
+{
+ if ( initialized() )
+ {
+ return;
+ }
+
+ m_sessions.clear();
+
+ int id = 0;
+
+ // no session - exec 'kate'
+ insertItem( SmallIconSet("kate"), i18n("Start Kate (no arguments)"), id++ );
+
+ // new session - prompt for a name and exec 'kate --start NAME'
+ insertItem( SmallIconSet("new"), i18n("New Kate Session"), id++ );
+
+ // new anonymous session, 'kate --start ""'
+ insertItem( SmallIconSet("new"), i18n("New Anonymous Session"), id++ );
+
+ insertSeparator();
+
+ QStringList list = KGlobal::dirs()->findAllResources( "data", "kate/sessions/*.katesession", false, true);
+ for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it)
+ {
+ KSimpleConfig config( *it, true );
+ config.setGroup( "General" );
+ m_sessions.append( config.readEntry( "Name" ) );
+ }
+
+ m_sessions.sort();
+
+ for ( QStringList::ConstIterator it1 = m_sessions.begin(); it1 != m_sessions.end(); ++it1 )
+ {
+ insertItem( *it1, id++ );
+ }
+
+ // means for updating, to let the user manually update if he/she added new sessions.
+ insertSeparator();
+ insertItem( SmallIconSet("reload"), i18n("Reload Session List"), this, SLOT(reinitialize()) );
+}
+
+void KateSessionMenu::slotExec( int id )
+{
+ if ( id < 0 )
+ return;
+
+ QStringList args;
+ if ( id > 0 )
+ args << "--start";
+
+ // If a new session is requested we try to ask for a name.
+ if ( id == 1 )
+ {
+ bool ok (false);
+ QString name = KInputDialog::getText( i18n("Session Name"),
+ i18n("Please enter a name for the new session"),
+ QString::null,
+ &ok, 0, 0, new Validator( m_parent ) );
+ if ( ! ok )
+ return;
+
+ if ( name.isEmpty() && KMessageBox::questionYesNo( 0,
+ i18n("An unnamed session will not be saved automatically. "
+ "Do you want to create such a session?"),
+ i18n("Create anonymous session?"),
+ KStdGuiItem::yes(), KStdGuiItem::cancel(),
+ "kate_session_button_create_anonymous" ) == KMessageBox::No )
+ return;
+
+ if ( m_sessions.contains( name ) &&
+ KMessageBox::warningYesNo( 0,
+ i18n("You allready have a session named %1. Do you want to open that session?").arg( name ),
+ i18n("Session exists") ) == KMessageBox::No )
+ return;
+ else
+ // mark the menu as dirty so that it gets rebuild at next display
+ // to show the new session
+ setInitialized( false );
+
+ args << name;
+ }
+
+ else if ( id == 2 )
+ args << "";
+
+ else if ( id > 2 )
+ args << m_sessions[ id-3 ];
+
+ kapp->kdeinitExec("kate", args);
+}
+
+
+// kate: space-indent: on; indent-width 2; replace-tabs on;
diff --git a/kicker/menuext/kate/katesessionmenu.desktop b/kicker/menuext/kate/katesessionmenu.desktop
new file mode 100644
index 000000000..24eea8be4
--- /dev/null
+++ b/kicker/menuext/kate/katesessionmenu.desktop
@@ -0,0 +1,98 @@
+[Desktop Entry]
+Name=Kate Session Menu
+Name[bg]=Меню сесии на Kate
+Name[bn]=কেট সেশন মেনু
+Name[ca]=Menú de la sessió Kate
+Name[cs]=Nabídka relace Kate
+Name[csb]=Menu sesëji Kate
+Name[da]=Kate Sessionsmenu
+Name[de]=Kate Sitzungsmenü
+Name[el]=Μενού συνεδρίας του Kate
+Name[eo]=Kate Seanco Menuo
+Name[es]=Menú de la sesión de Kate
+Name[et]=Kate seansimenüü
+Name[fa]=گزینگان نشست Kate
+Name[fi]=Katen istuntojenhallinta
+Name[fr]=Menu de sessions de Kate
+Name[fy]=Kate Sesjemenu
+Name[gl]=Menú de Sesións de Kate
+Name[he]=תפריט ההפעלה של Kate
+Name[hr]=Kate izbornik sesija
+Name[hu]=Kate munkafolyamat-menü
+Name[is]=Kate setuvalmynd
+Name[it]=Menu delle sessioni di Kate
+Name[ja]=Kate セッションメニュー
+Name[kk]=Kate сеанс мәзірі
+Name[km]=ម៉ឺនុយ​សម័យ​របស់ Kate
+Name[lt]=Kate sesijų meniu
+Name[nb]=Meny for Kate-økter
+Name[nds]=Kate-Törnmenü
+Name[ne]=केट सत्र मेनु
+Name[nl]=Kate sessiemenu
+Name[pa]=ਕੇਟ ਸ਼ੈਸ਼ਨ ਮੇਨੂ
+Name[pl]=Menu sesji Kate
+Name[pt]=Menu de Sessões do Kate
+Name[pt_BR]=Menu de Sessões do Kate
+Name[ro]=Meniu sesiune Kate
+Name[ru]=Сеанс Kate
+Name[sk]=Kate menu sedenia
+Name[sl]=Meni s sejami za Kate
+Name[sr]=Kate-ин мени сесија
+Name[sr@Latn]=Kate-in meni sesija
+Name[sv]=Kate sessionsmeny
+Name[te]=కేట్ సెషన్ పట్టీ
+Name[th]=เมนูเซสชั่นของ Kate
+Name[tr]=Kate Oturum Menüsü
+Name[uk]=Меню сеансів Kate
+Name[uz]=Kate seans menyusi
+Name[uz@cyrillic]=Kate сеанс менюси
+Name[wa]=Dressêye di sessions Kate
+Name[zh_CN]=Kate 会话菜单
+Name[zh_TW]=Kate 工作階段選單
+Comment=Allows you to open Kate with a specified session, or create a new one
+Comment[bg]=Позволя отварянето на определена сесия на Kate или създаването на нова
+Comment[ca]=Us permet obrir Kate amb una sessió específica o bé crear-ne una de nova
+Comment[cs]=Umožňuje otevřít Kate s určitou relací nebo si vytvořit novou
+Comment[csb]=Pòzwôlô òtemknąc apartną sesëjã Kate abò ùsôdzëc nową
+Comment[da]=Tillader dig at åbne Kate med en bestemt session, eller at oprette en ny
+Comment[de]=Lässt Sie Kate mit einer vorhandenen oder neuen Sitzung starten
+Comment[el]=Σας επιτρέπει να ανοίξετε το Kate μα μια καθορισμένη συνεδρία, ή να δημιουργήσετε μία νέα
+Comment[eo]=Ebligas vin malfermi Kate-n kun aparta seanco, aŭ krei novan
+Comment[es]=Le permite abrir Kate con una sesión específica, o crear una nueva
+Comment[et]=Võimaldab avada Kate määratud seansiga või luua uue seansi
+Comment[fa]=به شما اجازه می‌دهد Kate را توسط نشست مشخص‌شده باز کنید، یا مورد جدیدی را ایجاد نمایید
+Comment[fi]=Voit avata Katesta määritellyn istunnon, tai luoda uuden
+Comment[fr]=Vous permet d'ouvrir Kate avec une session spécifiée, ou d'en créer une nouvelle
+Comment[fy]=Stiet jo ta om Kate mei in oantsjutte sesje te iepenjen, of in nije oan te meitsjen
+Comment[gl]=Permítelle abrir Kate cunha sesión especificada, ou crear unha nova.
+Comment[hr]=Dopušta otvaranje Kate uz određenu sesiju ili izradu nove sesije
+Comment[hu]=Lehetővé teszi a Kate megnyitását egy megadott munkafolyamattal vagy egy újonnan létrehozottal
+Comment[is]=Gerir þér kleyft að opna Kate með ákveðinni setu, eða búa til nýja
+Comment[it]=Ti permette di aprire Kate con una particolare sessione, o di crearne una nuova
+Comment[ja]=新規または既存のセッションで Kate を起動します
+Comment[kk]=Kate-тің керек сеансын ашады, немесе жаңасын бастайды
+Comment[km]= អនុញ្ញាត​ឲ្យ​អ្នក​បើក​ Kate ជា​មួយ​នឹង​សម័យ​ដែល​បាន​បញ្ជាក់ ឬ​បង្កើត​ថ្មី​មួយ
+Comment[lt]=Leidžia atverti Kate su nurodyta sesija arba sukurti naują
+Comment[nb]=Brukes til å åpne Kate med en bestemt økt, eller opprette en ny
+Comment[nds]=Lett Di Kate mit en angeven oder niegen Törn opmaken
+Comment[ne]=निर्दिष्ट गरिएको सत्रसँग केट खोल्न,वा एउटा नयाँ सिर्जना गर्न अनुमति दिन्छ
+Comment[nl]=Stelt u in staat om Kate te openen met een opgegeven sessie, of u kunt een nieuwe sessie aanmaken
+Comment[pl]=Pozwala otworzyć określoną sesję Kate albo utworzyć nową
+Comment[pt]=Permite-lhe abrir o Kate com uma determinada sessão ou criar uma nova
+Comment[pt_BR]=Permite que você abra o Kate com uma sessão específica, ou criar uma nova
+Comment[ro]=Vă permite să deschideți Kate cu o sesiune specificată, sau să creați una nouă
+Comment[ru]=Позволяет открыть заданный сеанс Kate
+Comment[sk]=Umožní otvoriť Kate so špecifickým sedením alebo vytvoriť nové sedenie
+Comment[sl]=Omogoča vam, da Kate odprete z izbrano sejo, ali pa ustvarite novo sejo
+Comment[sr]=Омогућава вам да отворите Kate са задатом сесијом, или да направите нову
+Comment[sr@Latn]=Omogućava vam da otvorite Kate sa zadatom sesijom, ili da napravite novu
+Comment[sv]=Gör det möjligt att öppna Kate med en angiven session, eller skapa en ny
+Comment[te]=కెట్ ను ఇవ్వబడిన సెషన్ తొ తెరువబడును, లేక కొత్తది సృష్టించబడును
+Comment[th]=ให้คุณเปิด Kate ด้วยเซสชั่นที่ระบุ หรือสร้างเซสชั่นใหม่
+Comment[tr]=Kate'i belirli bir oturumla açmanızı sağlar
+Comment[uk]=Надає можливість відкривати Kate з певним сеансом або створювати новий
+Comment[wa]=Vos permete di drovi Kate avou ene sipecifieye session oudonbén nd ahiver ene novele
+Comment[zh_CN]=允许您用指定会话打开 Kate,或创建新会话
+Comment[zh_TW]=讓您可以用指定的工作階段來開啟 Kate,或是建立新的工作階段
+Icon=kate
+X-KDE-Library=kickermenu_kate
diff --git a/kicker/menuext/kate/katesessionmenu.h b/kicker/menuext/kate/katesessionmenu.h
new file mode 100644
index 000000000..ea78bf6ba
--- /dev/null
+++ b/kicker/menuext/kate/katesessionmenu.h
@@ -0,0 +1,45 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+ ---
+ Copyright (C) 2005, Anders Lund <anders@alweb.dk>
+ */
+
+#ifndef _KateSessionMenu_h_
+#define _KateSessionMenu_h_
+
+#include <kpanelmenu.h>
+
+class KateSessionMenu : public KPanelMenu {
+ Q_OBJECT
+ public:
+ KateSessionMenu( QWidget *parent=0, const char *name=0, const QStringList& /*args*/=QStringList() );
+ ~KateSessionMenu();
+
+ public slots:
+ virtual void initialize();
+
+ protected slots:
+ virtual void slotExec( int id );
+
+ private:
+ QStringList m_sessions;
+ QWidget *m_parent;
+};
+
+#endif // _KateSessionMenu_h_
+
+// kate: space-indent on; indent-width 2; replace-tabs on;
diff --git a/kicker/menuext/kdeprint/Makefile.am b/kicker/menuext/kdeprint/Makefile.am
new file mode 100644
index 000000000..051c087fb
--- /dev/null
+++ b/kicker/menuext/kdeprint/Makefile.am
@@ -0,0 +1,15 @@
+INCLUDES = $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_kdeprint.la
+
+kickermenu_kdeprint_la_SOURCES = print_mnu.cpp
+kickermenu_kdeprint_la_LDFLAGS = $(all_libraries) -module -avoid-version
+kickermenu_kdeprint_la_LIBADD = $(LIB_KDEUI) $(LIB_KIO) -lkdeprint
+
+kickermenu_kdeprint_la_METASOURCES = AUTO
+
+desktopmenu_DATA = printmenu.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_kdeprint.pot
diff --git a/kicker/menuext/kdeprint/print_mnu.cpp b/kicker/menuext/kdeprint/print_mnu.cpp
new file mode 100644
index 000000000..8b2679432
--- /dev/null
+++ b/kicker/menuext/kdeprint/print_mnu.cpp
@@ -0,0 +1,139 @@
+/*****************************************************************
+
+Copyright (c) 1996-2001 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#include "print_mnu.h"
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kapplication.h>
+#include <krun.h>
+#include <kdeprint/kmmanager.h>
+#include <qregexp.h>
+
+K_EXPORT_KICKER_MENUEXT(kdeprint, PrintMenu)
+
+#define ADD_PRINTER_ID 0
+#define KDEPRINT_SETTINGS_ID 1
+#define CONFIG_SERVER_ID 2
+#define PRINT_MANAGER_ID 3
+#define PRINT_BROWSER_ID 4
+#define KPRINTER_ID 5
+#define PRINTER_LIST_ID 10
+
+PrintMenu::PrintMenu(QWidget *parent, const char *name, const QStringList & /*args*/)
+: KPanelMenu("", parent, name)
+{
+ static bool kdeprintIconsInitialized = false;
+ if ( !kdeprintIconsInitialized ) {
+ KGlobal::iconLoader()->addAppDir("kdeprint");
+ kdeprintIconsInitialized = true;
+ }
+}
+
+PrintMenu::~PrintMenu()
+{
+}
+
+void PrintMenu::initialize()
+{
+ if (initialized()) clear();
+ setInitialized(true);
+
+ int ID = PRINTER_LIST_ID;
+ // just to be sure the plugin is loaded -> icons are available
+ KMManager::self();
+
+ if ((KMManager::self()->printerOperationMask() & KMManager::PrinterCreation) && KMManager::self()->hasManagement())
+ insertItem(SmallIconSet("wizard"), i18n("Add Printer..."), ADD_PRINTER_ID);
+ insertItem(SmallIconSet("kdeprint_configmgr"), i18n("KDE Print Settings"), KDEPRINT_SETTINGS_ID);
+ if (KMManager::self()->serverOperationMask() & KMManager::ServerConfigure)
+ insertItem(SmallIconSet("kdeprint_configsrv"), i18n("Configure Server"), CONFIG_SERVER_ID);
+ insertSeparator();
+ insertItem(SmallIconSet("kcontrol"), i18n("Print Manager"), PRINT_MANAGER_ID);
+ insertItem(SmallIconSet("konqueror"), i18n("Print Browser (Konqueror)"), PRINT_BROWSER_ID);
+ insertSeparator();
+ insertItem(SmallIconSet("fileprint"), i18n("Print File..."), KPRINTER_ID);
+
+ // printer list
+ QPtrList<KMPrinter> *l = KMManager::self()->printerList();
+ if (l && !l->isEmpty())
+ {
+ bool separatorInserted = false;
+ QPtrListIterator<KMPrinter> it(*l);
+ for (; it.current(); ++it)
+ {
+ // no special, implicit or pure instances
+ if (it.current()->isSpecial() || it.current()->isVirtual())
+ continue;
+ if (!separatorInserted)
+ {
+ // we insert a separator only when we find the first
+ // printer
+ insertSeparator();
+ separatorInserted = true;
+ }
+ insertItem(SmallIconSet(it.current()->pixmap()),
+ it.current()->printerName(), ID++);
+ }
+ }
+}
+
+void PrintMenu::slotExec(int ID)
+{
+ switch (ID)
+ {
+ case ADD_PRINTER_ID:
+ kapp->kdeinitExec("kaddprinterwizard");
+ break;
+ case KDEPRINT_SETTINGS_ID:
+ kapp->kdeinitExec("kaddprinterwizard", QStringList("--kdeconfig"));
+ break;
+ case CONFIG_SERVER_ID:
+ kapp->kdeinitExec("kaddprinterwizard", QStringList("--serverconfig"));
+ break;
+ case PRINT_MANAGER_ID:
+ KRun::runCommand("kcmshell kde-printers.desktop");
+ break;
+ case PRINT_BROWSER_ID:
+ KRun::runCommand("kfmclient openProfile filemanagement print:/", "kfmclient", "konqueror");
+ break;
+ case KPRINTER_ID:
+ kapp->kdeinitExec("kprinter");
+ break;
+ default:
+ {
+ // start kjobviewer
+ QStringList args;
+ args << "--show" << "-d" << text(ID).remove('&');
+ kapp->kdeinitExec("kjobviewer", args);
+ }
+ break;
+ }
+}
+
+void PrintMenu::reload()
+{
+ initialize();
+}
+
+#include "print_mnu.moc"
diff --git a/kicker/menuext/kdeprint/print_mnu.h b/kicker/menuext/kdeprint/print_mnu.h
new file mode 100644
index 000000000..a80da4be2
--- /dev/null
+++ b/kicker/menuext/kdeprint/print_mnu.h
@@ -0,0 +1,46 @@
+/*****************************************************************
+
+Copyright (c) 1996-2001 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#ifndef _print_mnu_h_
+#define _print_mnu_h_
+
+#include <kpanelmenu.h>
+#include <kdeprint/kpreloadobject.h>
+
+class PrintMenu : public KPanelMenu, public KPReloadObject
+{
+ Q_OBJECT
+
+public:
+ PrintMenu(QWidget *parent, const char *name, const QStringList & /*args*/);
+ ~PrintMenu();
+
+protected slots:
+ void slotExec(int id);
+ void initialize();
+
+protected:
+ void reload();
+};
+
+#endif
diff --git a/kicker/menuext/kdeprint/printmenu.desktop b/kicker/menuext/kdeprint/printmenu.desktop
new file mode 100644
index 000000000..2bc90f1b8
--- /dev/null
+++ b/kicker/menuext/kdeprint/printmenu.desktop
@@ -0,0 +1,144 @@
+[Desktop Entry]
+Name=Print System
+Name[af]=Drukker Stelsel
+Name[ar]=نظام الطباعة
+Name[az]=Çap Sistemi
+Name[be]=Сістэма друку
+Name[bg]=Система за печат
+Name[bn]=মুদ্রণ ব্যবস্থা
+Name[br]=Reizhiad moulañ
+Name[bs]=Sistem štampe
+Name[ca]=Sistema d'impressió
+Name[cs]=Tiskový systém
+Name[csb]=Systema drëkù
+Name[cy]=Cysawd Argraffu
+Name[da]=Udskriftssystem
+Name[de]=Drucksystem
+Name[el]=Σύστημα εκτύπωσης
+Name[eo]=Printosistemo
+Name[es]=Sistema de impresión
+Name[et]=Trükkimissüsteem
+Name[eu]=Inprimaketa sistema
+Name[fa]=سیستم چاپ
+Name[fi]=Tulostusjärjestelmä
+Name[fr]=Système d'impression
+Name[fy]=Printsysteem
+Name[ga]=Córas Priontála
+Name[gl]=Sistema de Impresión
+Name[he]=מערכת הדפסה
+Name[hi]=छापा तंत्र
+Name[hr]=Sustav za ispisivanje
+Name[hu]=Nyomtatási rendszer
+Name[is]=Prentkerfi
+Name[it]=Sistema di stampa
+Name[ja]=印刷システム
+Name[ka]=ბეჭდვის სისტემა
+Name[kk]=Басып шығару
+Name[km]=ប្រព័ន្ធ​បោះពុម្ព
+Name[ko]=모던 시스템
+Name[ku]=Pergala Çapkirinê
+Name[lo]=ລະບົບການພິມ
+Name[lt]=Spausdinimo sistema
+Name[lv]=Drukas Sistēma
+Name[mk]=Печатарски систем
+Name[mn]=Хэвлэх систем
+Name[ms]=Cetak Sistem
+Name[mt]=Sistema tal-ipprintjar
+Name[nb]=Utskriftsystem
+Name[nds]=Drucksysteem
+Name[ne]=मुद्रण प्रणाली
+Name[nl]=Afdruksysteem
+Name[nn]=Utskriftssystem
+Name[nso]=System ya Kgatiso
+Name[pa]=ਪਰਿੰਟ ਸਿਸਟਮ
+Name[pl]=System drukowania
+Name[pt]=Sistema de Impressão
+Name[pt_BR]=Sistema de Impressão
+Name[ro]=Sistem de tipărire
+Name[ru]=Система печати
+Name[rw]=Sisitemu Gucapa
+Name[se]=Čálihanvuogádat
+Name[sk]=Tlačový systém
+Name[sl]=Tiskalniški sistem
+Name[sr]=Систем за штампу
+Name[sr@Latn]=Sistem za štampu
+Name[sv]=Skrivarsystem
+Name[ta]=அச்சு அமைப்பு
+Name[te]=ప్రచురణ వ్యవస్థ
+Name[tg]=Системаи Чоп
+Name[th]=ระบบการพิมพ์
+Name[tr]=Yazıcı Sistemi
+Name[tt]=Bastıru Sisteme
+Name[uk]=Система друку
+Name[uz]=Bosib chiqarish tizimi
+Name[uz@cyrillic]=Босиб чиқариш тизими
+Name[ven]=Maitele au phirintha
+Name[vi]=Hệ thống In ấn
+Name[wa]=Sistinme d' imprimaedje
+Name[xh]=Indlela Yoshicilelo
+Name[zh_CN]=打印系统
+Name[zh_TW]=列印系統
+Name[zu]=Isistimu yokushicilela
+Comment=Menu for the print system
+Comment[af]=Kieslys vir die drukker stelsel
+Comment[ar]=قائمة لنظام الطباعة
+Comment[be]=Меню для сістэмы друку
+Comment[bg]=Меню на системата за печат
+Comment[bn]=মুদ্রণ ব্যবস্থার জন্য মেনু
+Comment[bs]=Meni za sistem štampe
+Comment[ca]=Menú per al sistema d'impressió
+Comment[cs]=Nabídka tiskového systému
+Comment[csb]=Menu systemë drëkù
+Comment[da]=Menu for udskriftssystemet
+Comment[de]=Einfacher Zugriff auf das Drucksystem
+Comment[el]=Μενού για το σύστημα εκτύπωσης
+Comment[eo]=Menuo por printosistemo
+Comment[es]=Menú para el sistema de impresión
+Comment[et]=Trükkimissüsteemi menüü
+Comment[eu]=Inprimaketa sistemarako menua
+Comment[fa]=گزینگان برای سیستم چاپ
+Comment[fi]=Tulostusjärjestelmävalikko
+Comment[fr]=Menu du système d'impression
+Comment[fy]=Menu foar it printsysteem
+Comment[gl]=Menu para o sistema de impresión
+Comment[he]=תפריט למערכת ההדפסה
+Comment[hr]=Izbornik sustava ispisivanja
+Comment[hu]=Menü a nyomtatási rendszer eléréséhez
+Comment[is]=Fljótleg leið að prentkerfinu
+Comment[it]=Menu del sistema di stampa
+Comment[ja]=印刷システム用メニュー
+Comment[ka]=ბეჭდვის სისტემის მენიუ
+Comment[kk]=Басып шығару жүйесінің мәзірі
+Comment[km]=ម៉ឺនុយ​សម្រាប់​ប្រព័ន្ធ​បោះពុម្ព
+Comment[lt]=Spausdinimo sistemos meniu
+Comment[mk]=Мени за системот за печатење
+Comment[nb]=Meny for utskriftssystemet
+Comment[nds]=Menü för dat Drucksysteem
+Comment[ne]=मुद्रण प्रणालीका लागि मेनु
+Comment[nl]=Menu voor het afdruksysteem
+Comment[nn]=Meny for utskriftssystemet
+Comment[pa]=ਪਰਿੰਟ ਸਿਸਟਮ ਲਈ ਮੇਨੂ
+Comment[pl]=Menu systemu drukowania
+Comment[pt]=Um menu para o sistema de impressão
+Comment[pt_BR]=Menu para o sistema de impressão
+Comment[ro]=Meniu pentru sistemul de tipărire
+Comment[ru]=Быстрый доступ к системе печати
+Comment[se]=Čálihanvuogádaga fállu
+Comment[sk]=Menu pre tlačový systém
+Comment[sl]=Meni za tiskalniški sistem
+Comment[sr]=Мени за систем штампања
+Comment[sr@Latn]=Meni za sistem štampanja
+Comment[sv]=Meny för skrivarsystemet
+Comment[te]=ప్రచురణ వ్యవస్థ కొరకు పట్టి
+Comment[th]=เมนูสำหรับระบบการพิมพ์
+Comment[tr]=Yazıcı sistemi menüsü
+Comment[uk]=Меню для системи друку
+Comment[uz]=Bosib chiqarish tizimining menyusi
+Comment[uz@cyrillic]=Босиб чиқариш тизимининг менюси
+Comment[vi]=Thực đơn cho hệ thống in ấn
+Comment[wa]=Dresseŷe pol sistinme d' imprimaedje
+Comment[zh_CN]=打印系统菜单
+Comment[zh_TW]=用於列印系統的選單
+Icon=fileprint
+
+X-KDE-Library=kickermenu_kdeprint
diff --git a/kicker/menuext/konq-profiles/Makefile.am b/kicker/menuext/konq-profiles/Makefile.am
new file mode 100644
index 000000000..07df8f9ab
--- /dev/null
+++ b/kicker/menuext/konq-profiles/Makefile.am
@@ -0,0 +1,15 @@
+INCLUDES = $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_konqueror.la
+
+kickermenu_konqueror_la_SOURCES = konqy_menu.cpp
+kickermenu_konqueror_la_LDFLAGS = $(all_libraries) -module -avoid-version
+kickermenu_konqueror_la_LIBADD = $(LIB_KDEUI) $(LIB_KIO)
+
+kickermenu_konqueror_la_METASOURCES = AUTO
+
+desktopmenu_DATA = konquerormenu.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_konqueror.pot
diff --git a/kicker/menuext/konq-profiles/konquerormenu.desktop b/kicker/menuext/konq-profiles/konquerormenu.desktop
new file mode 100644
index 000000000..e051239b5
--- /dev/null
+++ b/kicker/menuext/konq-profiles/konquerormenu.desktop
@@ -0,0 +1,136 @@
+[Desktop Entry]
+Name=Konqueror Profiles
+Name[af]=Konqueror Profiele
+Name[ar]=مواصفات في Konqueror
+Name[az]=Konqueror Profilləri
+Name[be]=Профілі Konqueror
+Name[bg]=Профили на браузъра
+Name[bn]=কংকরার প্রোফাইল
+Name[br]=Profiloù Konqueror
+Name[bs]=Konqueror profili
+Name[ca]=Perfils de Konqueror
+Name[cs]=Profily Konqueroru
+Name[csb]=Profile Konquerora
+Name[cy]=Proffilau Konqueror
+Name[da]=Konqueror-profiler
+Name[de]=Konqueror-Profile
+Name[el]=Προφίλ του Konqueror
+Name[eo]=Konkerantaj Profiloj
+Name[es]=Perfiles de Konqueror
+Name[et]=Konquerori profiilid
+Name[eu]=Konquerorren profilak
+Name[fa]=Profileهای Konqueror
+Name[fi]=Konquerorin profiilit
+Name[fr]=Profils de Konqueror
+Name[fy]=Konqueror-profielen
+Name[ga]=Próifílí Konqueror
+Name[gl]=Perfis de Konqueror
+Name[he]=פרופילים של Konqueror
+Name[hi]=कॉन्करर प्रोफ़ाइल्स
+Name[hr]=Konqueror profili
+Name[hu]=Konqueror-profilok
+Name[is]=Konqueror sniðmát
+Name[it]=Profili di Konqueror
+Name[ja]=Konqueror プロファイル
+Name[ka]=Konqueror-ის პროფილები
+Name[kk]=Konqueror профильдер
+Name[km]=ទម្រង់ Konqueror
+Name[ko]=Konqueror 제스처
+Name[lt]=Konqueror profiliai
+Name[lv]=Iekarotāja profili
+Name[mk]=Профили за Konqueror
+Name[ms]=Profil Konqueror
+Name[mt]=Profili ta' Konqueror
+Name[nb]=Profiler for Konqueror
+Name[nds]=Konqueror-Profilen
+Name[ne]=कन्क्वेरर प्रोफाइल
+Name[nl]=Konqueror-profielen
+Name[nn]=Profilar for Konqueror
+Name[pa]=ਕੋਨਕਿਉਰੋਰ ਪਰੋਫਾਇਲ
+Name[pl]=Profile Konquerora
+Name[pt]=Perfis do Konqueror
+Name[pt_BR]=Perfis do Konqueror
+Name[ro]=Profile Konqueror
+Name[ru]=Профили Konqueror
+Name[rw]=Ibijyana na Konqueror
+Name[se]=Konqueror-profiillat
+Name[sk]=Profily pre Konqueror
+Name[sl]=Profili Konquerorja
+Name[sr]=Konqueror-ови профили
+Name[sr@Latn]=Konqueror-ovi profili
+Name[sv]=Konqueror-profiler
+Name[ta]=Konqueror விவரக்குறிப்புகள்
+Name[te]=కాంకెరర్ ప్రొఫైల్లు
+Name[th]=โปรไฟล์ของคอนเควอร์เรอร์
+Name[tr]=Konqueror Profilleri
+Name[tt]=Konqueror Caybireme
+Name[uk]=Профілі Konqueror
+Name[uz]=Konqueror profillari
+Name[uz@cyrillic]=Konqueror профиллари
+Name[vi]=Thông số Konqueror
+Name[wa]=Profils Konqueror
+Name[zh_CN]=Konqueror 配置文件
+Name[zh_TW]=Konqueror 設定組合
+Comment=Menu for accessing the Konqueror profiles
+Comment[af]=Kieslys om toegang tot die Konqueror profiele te verkry
+Comment[ar]=قائمة للوصول إلى مواصفات في Konqueror
+Comment[be]=Меню для доступу да профіляў Konqueror
+Comment[bg]=Меню за достъп до профилите на браузъра
+Comment[bn]=সহজে বিভিন্ন কংকরার প্রোফাইল খোলার জন্য মেনু
+Comment[bs]=Meni za pristup do profila Konquerora
+Comment[ca]=Menú per accedir als perfils Konqueror
+Comment[cs]=Přístup k profilům Konqueroru
+Comment[csb]=Menu przistãpù do profilów Konquerora
+Comment[da]=Menu for adgang til Konquerors profiler
+Comment[de]=Vereinfachter Zugang zu den Konqueror-Profilen
+Comment[el]=Μενού πρόσβασης στα προφίλ του Konqueror
+Comment[eo]=Menuo por atingi Konkerantajn profilojn
+Comment[es]=Menú para acceder a los perfiles de Konqueror
+Comment[et]=Menüü Konquerori profiilide kasutamiseks
+Comment[eu]=Konqueror profilak atzitzeko menua
+Comment[fa]=گزینگان برای دستیابی به profileهای Konqueror
+Comment[fi]=Valikko Konquerorin profiileille
+Comment[fr]=Menu d'accès aux profils de Konqueror
+Comment[fy]=Menu foar tagong ta de Konqueror-profielen
+Comment[gl]=Aceso doado aos perfis de Konqueror
+Comment[he]=תפריט גישה לפרופילים של Konqueror
+Comment[hr]=Izbornik za pristupanje Konqueror profilima
+Comment[hu]=Menü a Konqueror profiljainak eléréséhez
+Comment[is]=Einföld leið að sniðmátum Konqueror
+Comment[it]=Menu per accedere ai profili di Konqueror
+Comment[ja]=Konqueror プロファイルにアクセスするためのメニュー
+Comment[ka]=Konqueror-ის პროფილების წვდომის მენიუ
+Comment[kk]=Konqueror профильдеріне қатынау мәзірі
+Comment[km]=ម៉ឺនុយ​សម្រាប់​ចូល​ដំណើរការ​ទម្រង់​របស់ Konqueror
+Comment[lt]=Konqueror profilių pasiekimo meniu
+Comment[mk]=Мени за пристапување до профилите на Konqueror
+Comment[nb]=Meny for Konquerors profiler
+Comment[nds]=Menü för Konqueror sien Profilen
+Comment[ne]=कन्क्वेरर प्रोफाइल पहुँचका लागि मेनु
+Comment[nl]=Menu voor toegang tot de Konqueror-profielen
+Comment[nn]=Meny for Konqueror-profilane
+Comment[pa]=ਕੋਨਕਿਉਰੋਰ ਪਰੋਫਾਇਲ ਲਈ ਸੌਖੀ ਪਹੁੰਚ ਲਈ ਮੇਨੂ
+Comment[pl]=Menu dostępu do profili Konquerora
+Comment[pt]=Um menu para aceder aos perfis do Konqueror
+Comment[pt_BR]=Acesso fácil aos perfis do Konqueror
+Comment[ro]=Meniu pentru accesul profilelor Konqueror
+Comment[ru]=Быстрый доступ к профилям Konqueror
+Comment[se]=Fállu mii čájeha Konqueror-profiillaid
+Comment[sk]=Menu pre prístup k profilom pre Konqueror
+Comment[sl]=Meni za dostop do profilov Konquerorja
+Comment[sr]=Мени за приступ Konqueror-овим профилима
+Comment[sr@Latn]=Meni za pristup Konqueror-ovim profilima
+Comment[sv]=Meny för att komma åt Konquerors profiler
+Comment[te]=కాంకెరర్ ప్రొఫైల్లు చూసెందుకు కొరకు పట్టి
+Comment[th]=เมนูสำหรับเข้าใช้โปรไฟล์ของคอนเควอร์เรอร์วดเร็ว
+Comment[tr]=Konqueror profillerine kolay erişim menüsü
+Comment[uk]=Меню для доступу до профілів Konqueror
+Comment[uz]=Konqueror profillarining menyusi
+Comment[uz@cyrillic]=Konqueror профилларининг менюси
+Comment[vi]=Thực đơn truy cập đến các thông số của Konqueror
+Comment[wa]=Dressêye poz aveur accès ås profils di Konqueror
+Comment[zh_CN]=访问 Konqueror 配置文件的菜单
+Comment[zh_TW]=方便存取 Konqueror 設定組合的選單
+Icon=konqueror
+
+X-KDE-Library=kickermenu_konqueror
diff --git a/kicker/menuext/konq-profiles/konqy_menu.cpp b/kicker/menuext/konq-profiles/konqy_menu.cpp
new file mode 100644
index 000000000..3ac09e050
--- /dev/null
+++ b/kicker/menuext/konq-profiles/konqy_menu.cpp
@@ -0,0 +1,102 @@
+/*****************************************************************
+
+Copyright (c) 1996-2001 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#include "konqy_menu.h"
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kapplication.h>
+#include <krun.h>
+#include <kstandarddirs.h>
+#include <kio/global.h>
+#include <ksimpleconfig.h>
+
+#include <qregexp.h>
+#include <qfileinfo.h>
+
+K_EXPORT_KICKER_MENUEXT(konqueror, KonquerorProfilesMenu)
+
+KonquerorProfilesMenu::KonquerorProfilesMenu(QWidget *parent, const char *name, const QStringList & /*args*/)
+: KPanelMenu("", parent, name)
+{
+ static bool kdeprintIconsInitialized = false;
+ if ( !kdeprintIconsInitialized ) {
+ KGlobal::iconLoader()->addAppDir("kdeprint");
+ kdeprintIconsInitialized = true;
+ }
+}
+
+KonquerorProfilesMenu::~KonquerorProfilesMenu()
+{
+}
+
+void KonquerorProfilesMenu::initialize()
+{
+ if (initialized()) clear();
+ setInitialized(true);
+
+ QStringList profiles = KGlobal::dirs()->findAllResources( "data", "konqueror/profiles/*", false, true );
+
+ m_profiles.resize(profiles.count());
+ int id=1;
+ QStringList::ConstIterator pEnd = profiles.end();
+ for (QStringList::ConstIterator pIt = profiles.begin(); pIt != pEnd; ++pIt )
+ {
+ QFileInfo info( *pIt );
+ QString profileName = KIO::decodeFileName( info.baseName() );
+ QString niceName=profileName;
+ KSimpleConfig cfg( *pIt, true );
+ if ( cfg.hasGroup( "Profile" ) )
+ {
+ cfg.setGroup( "Profile" );
+ if ( cfg.hasKey( "Name" ) )
+ niceName = cfg.readEntry( "Name" );
+
+ insertItem(niceName, id);
+ m_profiles[id-1]=profileName;
+ id++;
+ }
+ }
+}
+
+void KonquerorProfilesMenu::slotExec(int id)
+{
+ QStringList args;
+ args<<"--profile"<<m_profiles[id-1];
+ kapp->kdeinitExec("konqueror", args);
+}
+
+void KonquerorProfilesMenu::reload()
+{
+ initialize();
+}
+
+void KonquerorProfilesMenu::slotAboutToShow()
+{
+ reinitialize();
+ KPanelMenu::slotAboutToShow();
+}
+
+
+#include "konqy_menu.moc"
+
diff --git a/kicker/menuext/konq-profiles/konqy_menu.h b/kicker/menuext/konq-profiles/konqy_menu.h
new file mode 100644
index 000000000..f47b026ee
--- /dev/null
+++ b/kicker/menuext/konq-profiles/konqy_menu.h
@@ -0,0 +1,50 @@
+/*****************************************************************
+
+Copyright (c) 1996-2001 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#ifndef _konqy_menu_h_
+#define _konqy_menu_h_
+
+#include <kpanelmenu.h>
+
+#include <qvaluevector.h>
+
+class KonquerorProfilesMenu : public KPanelMenu
+{
+ Q_OBJECT
+
+ public:
+ KonquerorProfilesMenu(QWidget *parent, const char *name, const QStringList & /*args*/);
+ ~KonquerorProfilesMenu();
+
+ protected slots:
+ void slotExec(int id);
+ void initialize();
+ void slotAboutToShow();
+
+ protected:
+ void reload();
+ QValueVector<QString> m_profiles;
+
+};
+
+#endif
diff --git a/kicker/menuext/konsole/Makefile.am b/kicker/menuext/konsole/Makefile.am
new file mode 100644
index 000000000..907e79769
--- /dev/null
+++ b/kicker/menuext/konsole/Makefile.am
@@ -0,0 +1,15 @@
+INCLUDES = $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_konsole.la
+
+kickermenu_konsole_la_SOURCES = konsole_mnu.cpp konsolebookmarkhandler.cpp konsolebookmarkmenu.cpp
+kickermenu_konsole_la_LDFLAGS = $(all_libraries) -module -avoid-version
+kickermenu_konsole_la_LIBADD = $(LIB_KDEUI) $(LIB_KIO)
+
+kickermenu_konsole_la_METASOURCES = AUTO
+
+desktopmenu_DATA = konsolemenu.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_konsole.pot
diff --git a/kicker/menuext/konsole/konsole_mnu.cpp b/kicker/menuext/konsole/konsole_mnu.cpp
new file mode 100644
index 000000000..87df6f268
--- /dev/null
+++ b/kicker/menuext/konsole/konsole_mnu.cpp
@@ -0,0 +1,318 @@
+/*****************************************************************
+
+Copyright (c) 1996-2001 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#include <stdlib.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+#include <qdir.h>
+#include <qfileinfo.h>
+
+#include <kapplication.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kio/global.h>
+#include <klocale.h>
+#include <krun.h>
+#include <kshell.h>
+#include <ksimpleconfig.h>
+#include <kstandarddirs.h>
+
+#include "konsole_mnu.h"
+
+K_EXPORT_KICKER_MENUEXT(konsole, KonsoleMenu)
+
+KonsoleMenu::KonsoleMenu(QWidget *parent, const char *name, const QStringList& /* args */)
+ : KPanelMenu("", parent, name),
+ m_profileMenu(0),
+ m_bookmarksSession(0),
+ m_bookmarkHandlerSession(0)
+{
+}
+
+KonsoleMenu::~KonsoleMenu()
+{
+ KGlobal::locale()->removeCatalogue("libkickermenu_konsole");
+}
+
+static void insertItemSorted(KPopupMenu *menu,
+ const QIconSet &iconSet,
+ const QString &txt, int id)
+{
+ const int defaultId = 1; // The id of the 'new' item.
+ int index = menu->indexOf(defaultId);
+ int count = menu->count();
+ if (index >= 0)
+ {
+ index++; // Skip separator
+ while(true)
+ {
+ index++;
+ if (index >= count)
+ {
+ index = -1; // Insert at end
+ break;
+ }
+ if (menu->text(menu->idAt(index)) > txt)
+ break; // Insert before this item
+ }
+ }
+ menu->insertItem(iconSet, txt, id, index);
+}
+
+
+void KonsoleMenu::initialize()
+{
+ if (initialized())
+ {
+ clear();
+ }
+ else
+ {
+ kapp->iconLoader()->addAppDir("konsole");
+ }
+
+ setInitialized(true);
+
+ QStringList list = KGlobal::dirs()->findAllResources("data",
+ "konsole/*.desktop",
+ false, true);
+
+ QString defaultShell = locate("data", "konsole/shell.desktop");
+ list.prepend(defaultShell);
+
+ int id = 1;
+
+ sessionList.clear();
+ for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it)
+ {
+ if ((*it == defaultShell) && (id != 1))
+ {
+ continue;
+ }
+
+ KSimpleConfig conf(*it, true /* read only */);
+ conf.setDesktopGroup();
+ QString text = conf.readEntry("Name");
+
+ // try to locate the binary
+ QString exec= conf.readPathEntry("Exec");
+ if (exec.startsWith("su -c \'"))
+ {
+ exec = exec.mid(7,exec.length()-8);
+ }
+
+ exec = KRun::binaryName(exec, false);
+ exec = KShell::tildeExpand(exec);
+ QString pexec = KGlobal::dirs()->findExe(exec);
+ if (text.isEmpty() ||
+ conf.readEntry("Type") != "KonsoleApplication" ||
+ (!exec.isEmpty() && pexec.isEmpty()))
+ {
+ continue;
+ }
+ insertItemSorted(this, SmallIconSet(conf.readEntry("Icon", "konsole")),
+ text, id++);
+ QFileInfo fi(*it);
+ sessionList.append(fi.baseName(true));
+
+ if (id == 2)
+ {
+ insertSeparator();
+ }
+ }
+
+ m_bookmarkHandlerSession = new KonsoleBookmarkHandler(this, false);
+ m_bookmarksSession = m_bookmarkHandlerSession->menu();
+ insertSeparator();
+ insertItem(SmallIconSet("keditbookmarks"),
+ i18n("New Session at Bookmark"), m_bookmarksSession);
+ connect(m_bookmarkHandlerSession,
+ SIGNAL(openURL(const QString&, const QString&)),
+ SLOT(newSession(const QString&, const QString&)));
+
+
+ screenList.clear();
+ QCString screenDir = getenv("SCREENDIR");
+
+ if (screenDir.isEmpty())
+ {
+ screenDir = QFile::encodeName(QDir::homeDirPath()) + "/.screen/";
+ }
+
+ QStringList sessions;
+ // Can't use QDir as it doesn't support FIFOs :(
+ DIR *dir = opendir(screenDir);
+ if (dir)
+ {
+ struct dirent *entry;
+ while ((entry = readdir(dir)))
+ {
+ QCString path = screenDir + "/" + entry->d_name;
+ struct stat st;
+ if (stat(path, &st) != 0)
+ {
+ continue;
+ }
+
+ int fd;
+ if (S_ISFIFO(st.st_mode) && !(st.st_mode & 0111) && // xbit == attached
+ (fd = open(path, O_WRONLY | O_NONBLOCK)) != -1)
+ {
+ ::close(fd);
+ screenList.append(QFile::decodeName(entry->d_name));
+ insertItem(SmallIconSet("konsole"),
+ i18n("Screen is a program controlling screens!",
+ "Screen at %1").arg(entry->d_name), id);
+ id++;
+ }
+ }
+ closedir(dir);
+ }
+
+ // reset id as we are now going to populate the profiles submenu
+ id = 0;
+
+ delete m_profileMenu;
+ m_profileMenu = new KPopupMenu(this);
+ QStringList profiles = KGlobal::dirs()->findAllResources("data",
+ "konsole/profiles/*",
+ false, true );
+ m_profiles.resize(profiles.count());
+ QStringList::ConstIterator pEnd = profiles.end();
+ for (QStringList::ConstIterator pIt = profiles.begin(); pIt != pEnd; ++pIt)
+ {
+ QFileInfo info(*pIt);
+ QString profileName = KIO::decodeFileName(info.baseName());
+ QString niceName = profileName;
+ KSimpleConfig cfg(*pIt, true);
+ if (cfg.hasGroup("Profile"))
+ {
+ cfg.setGroup("Profile");
+ if (cfg.hasKey("Name"))
+ {
+ niceName = cfg.readEntry("Name");
+ }
+ }
+
+ m_profiles[id] = profileName;
+ ++id;
+ m_profileMenu->insertItem(niceName, id);
+ }
+
+ int profileID = insertItem(i18n("New Session Using Profile"),
+ m_profileMenu);
+ if (id == 1)
+ {
+ // we don't have any profiles, disable the menu
+ setItemEnabled(profileID, false);
+ }
+ connect(m_profileMenu, SIGNAL(activated(int)), SLOT(launchProfile(int)));
+
+ insertSeparator();
+ insertItem(SmallIconSet("reload"),
+ i18n("Reload Sessions"), this, SLOT(reinitialize()));
+}
+
+void KonsoleMenu::slotExec(int id)
+{
+ if (id < 1)
+ {
+ return;
+ }
+
+ --id;
+ kapp->propagateSessionManager();
+ QStringList args;
+ if (static_cast<unsigned int>(id) < sessionList.count())
+ {
+ args << "--type";
+ args << sessionList[id];
+ }
+ else
+ {
+ args << "-e";
+ args << "screen";
+ args << "-r";
+ args << screenList[id - sessionList.count()];
+ }
+ KApplication::kdeinitExec("konsole", args);
+ return;
+}
+
+void KonsoleMenu::launchProfile(int id)
+{
+ if (id < 1 || id > m_profiles.count())
+ {
+ return;
+ }
+
+ --id;
+ // this is a session, not a bookmark, so execute that instead
+ QStringList args;
+ args << "--profile" << m_profiles[id];
+ kapp->kdeinitExec("konsole", args);
+}
+
+KURL KonsoleMenu::baseURL() const
+{
+ KURL url;
+ /*url.setPath(se->getCwd()+"/");*/
+ return url;
+}
+
+void KonsoleMenu::newSession(const QString& sURL, const QString& title)
+{
+ QStringList args;
+
+ KURL url = KURL(sURL);
+ if ((url.protocol() == "file") && (url.hasPath()))
+ {
+ args << "-T" << title;
+ args << "--workdir" << url.path();
+ KApplication::kdeinitExec("konsole", args);
+ return;
+ }
+ else if ((!url.protocol().isEmpty()) && (url.hasHost()))
+ {
+ QString protocol = url.protocol();
+ QString host = url.host();
+ args << "-T" << title;
+ args << "-e" << protocol.latin1(); /* argv[0] == command to run. */
+ if (url.hasUser()) {
+ args << "-l" << url.user().latin1();
+ }
+ args << host.latin1();
+ KApplication::kdeinitExec("konsole", args);
+ return;
+ }
+ /*
+ * We can't create a session without a protocol.
+ * We should ideally popup a warning, about an invalid bookmark.
+ */
+}
+
+
+#include "konsole_mnu.moc"
diff --git a/kicker/menuext/konsole/konsole_mnu.h b/kicker/menuext/konsole/konsole_mnu.h
new file mode 100644
index 000000000..988764124
--- /dev/null
+++ b/kicker/menuext/konsole/konsole_mnu.h
@@ -0,0 +1,64 @@
+/*****************************************************************
+
+Copyright (c) 1996-2001 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#ifndef _konsole_mnu_h_
+#define _konsole_mnu_h_
+
+#include <qvaluevector.h>
+
+#include <kpanelmenu.h>
+#include <klibloader.h>
+
+#include "konsolebookmarkmenu.h"
+#include "konsolebookmarkhandler.h"
+
+
+class KonsoleMenu : public KPanelMenu/*, public KPReloadObject*/
+{
+ Q_OBJECT
+
+public:
+ KonsoleMenu(QWidget *parent, const char *name, const QStringList& /* args */);
+ ~KonsoleMenu();
+ KURL baseURL() const;
+
+
+protected slots:
+ void slotExec(int id);
+ void launchProfile(int id);
+ void initialize();
+ void newSession(const QString& sURL, const QString& title);
+
+
+private:
+ QStringList sessionList;
+ QStringList screenList;
+ QValueVector<QString> m_profiles;
+ KPopupMenu* m_profileMenu;
+ KPopupMenu* m_bookmarksSession;
+
+ KonsoleBookmarkHandler *m_bookmarkHandlerSession;
+};
+
+#endif
+
diff --git a/kicker/menuext/konsole/konsolebookmarkhandler.cpp b/kicker/menuext/konsole/konsolebookmarkhandler.cpp
new file mode 100644
index 000000000..c9f8e2806
--- /dev/null
+++ b/kicker/menuext/konsole/konsolebookmarkhandler.cpp
@@ -0,0 +1,117 @@
+// Born as kdelibs/kio/kfile/kfilebookmarkhandler.cpp
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <qtextstream.h>
+
+#include <kbookmarkimporter.h>
+#include <kmimetype.h>
+#include <kpopupmenu.h>
+#include <ksavefile.h>
+#include <kstandarddirs.h>
+
+#include "konsole_mnu.h"
+#include "konsolebookmarkmenu.h"
+#include "konsolebookmarkhandler.h"
+
+KonsoleBookmarkHandler::KonsoleBookmarkHandler( KonsoleMenu *konsole, bool )
+ : QObject( konsole, "KonsoleBookmarkHandler" ),
+ KBookmarkOwner(),
+ m_konsole( konsole ),
+ m_importStream( 0L )
+{
+ m_menu = new KPopupMenu( konsole, "bookmark menu" );
+
+ QString file = locate( "data", "konsole/bookmarks.xml" );
+ if ( file.isEmpty() )
+ file = locateLocal( "data", "konsole/bookmarks.xml" );
+
+ // import old bookmarks
+ if ( !KStandardDirs::exists( file ) ) {
+ QString oldFile = locate( "data", "kfile/bookmarks.html" );
+ if ( !oldFile.isEmpty() )
+ importOldBookmarks( oldFile, file );
+ }
+
+ KBookmarkManager *manager = KBookmarkManager::managerForFile( file, false);
+ manager->setUpdate( true );
+ manager->setShowNSBookmarks( false );
+
+ connect( manager, SIGNAL( changed(const QString &, const QString &) ),
+ SLOT( slotBookmarksChanged(const QString &, const QString &) ) );
+ m_bookmarkMenu = new KonsoleBookmarkMenu( manager, this, m_menu,
+ NULL, false, /*Not toplevel*/
+ false /*No 'Add Bookmark'*/ );
+}
+
+QString KonsoleBookmarkHandler::currentURL() const
+{
+ return m_konsole->baseURL().url();
+}
+
+void KonsoleBookmarkHandler::importOldBookmarks( const QString& path,
+ const QString& destinationPath )
+{
+ KSaveFile file( destinationPath );
+ if ( file.status() != 0 )
+ return;
+
+ m_importStream = file.textStream();
+ *m_importStream << "<!DOCTYPE xbel>\n<xbel>\n";
+
+ KNSBookmarkImporter importer( path );
+ connect( &importer,
+ SIGNAL( newBookmark( const QString&, const QCString&, const QString& )),
+ SLOT( slotNewBookmark( const QString&, const QCString&, const QString& )));
+ connect( &importer,
+ SIGNAL( newFolder( const QString&, bool, const QString& )),
+ SLOT( slotNewFolder( const QString&, bool, const QString& )));
+ connect( &importer, SIGNAL( newSeparator() ), SLOT( newSeparator() ));
+ connect( &importer, SIGNAL( endMenu() ), SLOT( endMenu() ));
+
+ importer.parseNSBookmarks( false );
+
+ *m_importStream << "</xbel>";
+
+ file.close();
+ m_importStream = 0L;
+}
+
+void KonsoleBookmarkHandler::slotNewBookmark( const QString& /*text*/,
+ const QCString& url,
+ const QString& additionalInfo )
+{
+ *m_importStream << "<bookmark icon=\"" << KMimeType::iconForURL( KURL( url ) );
+ *m_importStream << "\" href=\"" << QString::fromUtf8(url) << "\">\n";
+ *m_importStream << "<title>" << (additionalInfo.isEmpty() ? QString::fromUtf8(url) : additionalInfo) << "</title>\n</bookmark>\n";
+}
+
+void KonsoleBookmarkHandler::slotNewFolder( const QString& text, bool /*open*/,
+ const QString& /*additionalInfo*/ )
+{
+ *m_importStream << "<folder icon=\"bookmark_folder\">\n<title=\"";
+ *m_importStream << text << "\">\n";
+}
+
+void KonsoleBookmarkHandler::slotBookmarksChanged( const QString &,
+ const QString & )
+{
+ // This is called when someone changes bookmarks in konsole....
+ m_bookmarkMenu->slotBookmarksChanged("");
+}
+
+void KonsoleBookmarkHandler::newSeparator()
+{
+ *m_importStream << "<separator/>\n";
+}
+
+void KonsoleBookmarkHandler::endFolder()
+{
+ *m_importStream << "</folder>\n";
+}
+
+void KonsoleBookmarkHandler::virtual_hook( int id, void* data )
+{ KBookmarkOwner::virtual_hook( id, data ); }
+
+#include "konsolebookmarkhandler.moc"
diff --git a/kicker/menuext/konsole/konsolebookmarkhandler.h b/kicker/menuext/konsole/konsolebookmarkhandler.h
new file mode 100644
index 000000000..b22f0d03d
--- /dev/null
+++ b/kicker/menuext/konsole/konsolebookmarkhandler.h
@@ -0,0 +1,60 @@
+// Born as kdelibs/kio/kfile/kfilebookmarkhandler.h
+
+#ifndef KONSOLEBOOKMARKHANDLER_H
+#define KONSOLEBOOKMARKHANDLER_H
+
+#include <kbookmarkmanager.h>
+#include "konsolebookmarkmenu.h"
+
+
+class QTextStream;
+class KPopupMenu;
+class KonsoleBookmarkMenu;
+class KonsoleMenu;
+
+class KonsoleBookmarkHandler : public QObject, public KBookmarkOwner
+{
+ Q_OBJECT
+
+public:
+ KonsoleBookmarkHandler( KonsoleMenu *konsole, bool toplevel );
+
+ QPopupMenu * popupMenu();
+
+ // KBookmarkOwner interface:
+ virtual void openBookmarkURL( const QString& url, const QString& title )
+ { emit openURL( url, title ); }
+ virtual QString currentURL() const;
+
+ KPopupMenu *menu() const { return m_menu; }
+
+signals:
+ void openURL( const QString& url, const QString& title );
+
+private slots:
+ // for importing
+ void slotNewBookmark( const QString& text, const QCString& url,
+ const QString& additionalInfo );
+ void slotNewFolder( const QString& text, bool open,
+ const QString& additionalInfo );
+ void slotBookmarksChanged( const QString &, const QString & caller );
+ void newSeparator();
+ void endFolder();
+
+private:
+ void importOldBookmarks( const QString& path, const QString& destinationPath );
+
+ KonsoleMenu *m_konsole;
+ KPopupMenu *m_menu;
+ KonsoleBookmarkMenu *m_bookmarkMenu;
+ QTextStream *m_importStream;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KonsoleBookmarkHandlerPrivate;
+ KonsoleBookmarkHandlerPrivate *d;
+};
+
+
+#endif // KONSOLEBOOKMARKHANDLER_H
diff --git a/kicker/menuext/konsole/konsolebookmarkmenu.cpp b/kicker/menuext/konsole/konsolebookmarkmenu.cpp
new file mode 100644
index 000000000..b10d26c40
--- /dev/null
+++ b/kicker/menuext/konsole/konsolebookmarkmenu.cpp
@@ -0,0 +1,187 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <qtextstream.h>
+
+#include <kbookmarkimporter.h>
+#include <kmimetype.h>
+#include <kpopupmenu.h>
+#include <ksavefile.h>
+#include <kstandarddirs.h>
+//#include <kbookmarkmenu.h>
+
+#include "konsole_mnu.h"
+#include "konsolebookmarkmenu.h"
+#include "konsolebookmarkhandler.h"
+
+#include <qfile.h>
+
+#include <kaction.h>
+#include <klocale.h>
+
+
+KonsoleBookmarkMenu::KonsoleBookmarkMenu( KBookmarkManager* mgr,
+ KonsoleBookmarkHandler * _owner, KPopupMenu * _parentMenu,
+ KActionCollection *collec, bool _isRoot, bool _add,
+ const QString & parentAddress )
+: KBookmarkMenu( mgr, _owner, _parentMenu, collec, _isRoot, _add,
+ parentAddress),
+ m_kOwner(_owner)
+{
+ /*
+ * First, we disconnect KBookmarkMenu::slotAboutToShow()
+ * Then, we connect KonsoleBookmarkMenu::slotAboutToShow().
+ * They are named differently because the SLOT() macro thinks we want
+ * KonsoleBookmarkMenu::KBookmarkMenu::slotAboutToShow()
+ * Could this be solved if slotAboutToShow() is virtual in KBookmarMenu?
+ */
+ disconnect( _parentMenu, SIGNAL( aboutToShow() ), this,
+ SLOT( slotAboutToShow() ) );
+ connect( _parentMenu, SIGNAL( aboutToShow() ),
+ SLOT( slotAboutToShow2() ) );
+}
+
+/*
+ * Duplicate this exactly because KBookmarkMenu::slotBookmarkSelected can't
+ * be overrided. I would have preferred to NOT have to do this.
+ *
+ * Why did I do this?
+ * - when KBookmarkMenu::fillbBookmarkMenu() creates sub-KBookmarkMenus.
+ * - when ... adds KActions, it uses KBookmarkMenu::slotBookmarkSelected()
+ * instead of KonsoleBookmarkMenu::slotBookmarkSelected().
+ */
+void KonsoleBookmarkMenu::slotAboutToShow2()
+{
+ // Did the bookmarks change since the last time we showed them ?
+ if ( m_bDirty )
+ {
+ m_bDirty = false;
+ refill();
+ }
+}
+
+void KonsoleBookmarkMenu::refill()
+{
+ //kdDebug(1203) << "KBookmarkMenu::refill()" << endl;
+ m_lstSubMenus.clear();
+ QPtrListIterator<KAction> it( m_actions );
+ for (; it.current(); ++it )
+ it.current()->unplug( m_parentMenu );
+ m_parentMenu->clear();
+ m_actions.clear();
+ fillBookmarkMenu();
+ m_parentMenu->adjustSize();
+}
+
+void KonsoleBookmarkMenu::fillBookmarkMenu()
+{
+ if ( m_bIsRoot )
+ {
+ if ( m_bAddBookmark )
+ addAddBookmark();
+
+ addEditBookmarks();
+
+ if ( m_bAddBookmark )
+ addNewFolder();
+
+ if ( m_pManager->showNSBookmarks()
+ && QFile::exists( KNSBookmarkImporter::netscapeBookmarksFile() ) )
+ {
+ m_parentMenu->insertSeparator();
+
+ KActionMenu * actionMenu = new KActionMenu( i18n("Netscape Bookmarks"),
+ "netscape",
+ m_actionCollection, 0L );
+ actionMenu->plug( m_parentMenu );
+ m_actions.append( actionMenu );
+ KonsoleBookmarkMenu *subMenu = new KonsoleBookmarkMenu( m_pManager,
+ m_kOwner, actionMenu->popupMenu(),
+ m_actionCollection, false,
+ m_bAddBookmark, QString::null );
+ m_lstSubMenus.append(subMenu);
+ connect( actionMenu->popupMenu(), SIGNAL(aboutToShow()), subMenu,
+ SLOT(slotNSLoad()));
+ }
+ }
+
+ KBookmarkGroup parentBookmark = m_pManager->findByAddress( m_parentAddress ).toGroup();
+ Q_ASSERT(!parentBookmark.isNull());
+ bool separatorInserted = false;
+ for ( KBookmark bm = parentBookmark.first(); !bm.isNull();
+ bm = parentBookmark.next(bm) )
+ {
+ QString text = bm.text();
+ text.replace( '&', "&&" );
+ if ( !separatorInserted && m_bIsRoot) { // inserted before the first konq bookmark, to avoid the separator if no konq bookmark
+ m_parentMenu->insertSeparator();
+ separatorInserted = true;
+ }
+ if ( !bm.isGroup() )
+ {
+ if ( bm.isSeparator() )
+ {
+ m_parentMenu->insertSeparator();
+ }
+ else
+ {
+ // kdDebug(1203) << "Creating URL bookmark menu item for " << bm.text() << endl;
+ // create a normal URL item, with ID as a name
+ KAction * action = new KAction( text, bm.icon(), 0,
+ this, SLOT( slotBookmarkSelected() ),
+ m_actionCollection, bm.url().url().utf8() );
+
+ action->setStatusText( bm.url().prettyURL() );
+
+ action->plug( m_parentMenu );
+ m_actions.append( action );
+ }
+ }
+ else
+ {
+ // kdDebug(1203) << "Creating bookmark submenu named " << bm.text() << endl;
+ KActionMenu * actionMenu = new KActionMenu( text, bm.icon(),
+ m_actionCollection, 0L );
+ actionMenu->plug( m_parentMenu );
+ m_actions.append( actionMenu );
+ KonsoleBookmarkMenu *subMenu = new KonsoleBookmarkMenu( m_pManager,
+ m_kOwner, actionMenu->popupMenu(),
+ m_actionCollection, false,
+ m_bAddBookmark, bm.address() );
+ m_lstSubMenus.append( subMenu );
+ }
+ }
+
+ if ( !m_bIsRoot && m_bAddBookmark )
+ {
+ m_parentMenu->insertSeparator();
+ addAddBookmark();
+ addNewFolder();
+ }
+}
+
+void KonsoleBookmarkMenu::slotBookmarkSelected()
+{
+ KAction * a;
+ QString b;
+
+ if ( !m_pOwner ) return; // this view doesn't handle bookmarks...
+ a = (KAction*)sender();
+ b = a->text();
+ m_kOwner->openBookmarkURL( QString::fromUtf8(sender()->name()), /* URL */
+ ( (KAction *)sender() )->text() /* Title */ );
+}
+
+void KonsoleBookmarkMenu::slotNSBookmarkSelected()
+{
+ KAction *a;
+ QString b;
+
+ QString link(sender()->name()+8);
+ a = (KAction*)sender();
+ b = a->text();
+ m_kOwner->openBookmarkURL( link, /*URL */
+ ( (KAction *)sender() )->text() /* Title */ );
+}
+
+#include "konsolebookmarkmenu.moc"
diff --git a/kicker/menuext/konsole/konsolebookmarkmenu.h b/kicker/menuext/konsole/konsolebookmarkmenu.h
new file mode 100644
index 000000000..65e87f0f5
--- /dev/null
+++ b/kicker/menuext/konsole/konsolebookmarkmenu.h
@@ -0,0 +1,58 @@
+#ifndef KONSOLEBOOKMARKMENU_H
+#define KONSOLEBOOKMARKMENU_H
+
+#include <qptrlist.h>
+#include <qptrstack.h>
+#include <qobject.h>
+#include <sys/types.h>
+#include <kbookmark.h>
+#include <kbookmarkmenu.h>
+
+#include "konsolebookmarkhandler.h"
+
+
+class QString;
+class KBookmark;
+class KAction;
+class KActionMenu;
+class KActionCollection;
+class KBookmarkOwner;
+class KBookmarkMenu;
+class KPopupMenu;
+class KonsoleBookmarkMenu;
+
+class KonsoleBookmarkMenu : public KBookmarkMenu
+{
+ Q_OBJECT
+
+public:
+ KonsoleBookmarkMenu( KBookmarkManager* mgr,
+ KonsoleBookmarkHandler * _owner, KPopupMenu * _parentMenu,
+ KActionCollection *collec, bool _isRoot,
+ bool _add = true, const QString & parentAddress = "");
+
+ void fillBookmarkMenu();
+
+public slots:
+
+signals:
+
+private slots:
+
+private:
+ KonsoleBookmarkHandler * m_kOwner;
+
+protected slots:
+ void slotAboutToShow2();
+ void slotBookmarkSelected();
+ void slotNSBookmarkSelected();
+
+protected:
+ void refill();
+
+private:
+ class KonsoleBookmarkMenuPrivate;
+ KonsoleBookmarkMenuPrivate *d;
+};
+
+#endif // KONSOLEBOOKMARKMENU_H
diff --git a/kicker/menuext/konsole/konsolemenu.desktop b/kicker/menuext/konsole/konsolemenu.desktop
new file mode 100644
index 000000000..5766d7f03
--- /dev/null
+++ b/kicker/menuext/konsole/konsolemenu.desktop
@@ -0,0 +1,137 @@
+[Desktop Entry]
+Name=Terminal Sessions
+Name[af]=Terminaal Sessies
+Name[ar]=جلسات مطراف سطر الأوامر
+Name[az]=Terminal İclasları
+Name[be]=Тэрмінальныя сесіі
+Name[bg]=Терминални сесии
+Name[bn]=টার্মিনাল সেশন
+Name[br]=Dalc'hoù an termenell
+Name[bs]=Sesije terminala
+Name[ca]=Sessions de terminal
+Name[cs]=Terminálové relace
+Name[csb]=Sesëje terminala
+Name[cy]=Sesiynnau Terfynell
+Name[da]=Terminalsessioner
+Name[de]=Terminalsitzungen
+Name[el]=Συνεδρίες τερματικού
+Name[eo]=Terminalaj seancoj
+Name[es]=Sesiones de terminal
+Name[et]=Terminali seansid
+Name[eu]=Terminal saioak
+Name[fa]=نشستهای پایانه
+Name[fi]=Komentoikkunaistunnot
+Name[fr]=Sessions de terminal
+Name[fy]=Terminal-sesjes
+Name[ga]=Seisiúin Teirminéil
+Name[gl]=Sesións de Terminal
+Name[he]=משימות מסוף
+Name[hi]=टर्मिनल सत्र
+Name[hr]=Terminalske sesije
+Name[hu]=Terminálablakok
+Name[is]=Skjáhermisforrit
+Name[it]=Sessioni terminale
+Name[ja]=ターミナルセッション
+Name[ka]=სერმინალის სეანსები
+Name[kk]=Терминал сеанстары
+Name[km]=សម័យ​ស្ថានីយ
+Name[ko]=터미널 프로그램
+Name[lo]=ໂປຣແກຣມເທີມິເນລ
+Name[lt]=Terminalo sesijos
+Name[lv]=Termināla sesijas
+Name[mk]=Терминалски сесии
+Name[mn]=Терминал-Суултууд
+Name[ms]=Sesi Terminal
+Name[mt]=Sessjonijiet tat-terminal
+Name[nb]=Terminaløkter
+Name[nds]=Terminal-Törns
+Name[ne]=टर्मिनल सत्र
+Name[nl]=Terminal-sessies
+Name[nn]=Terminaløkter
+Name[nso]=Ditiragalo tsa Terminal
+Name[pa]=ਟਰਮੀਨਲ ਸ਼ੈਸ਼ਨ
+Name[pl]=Sesje terminala
+Name[pt]=Sessões de Terminal
+Name[pt_BR]=Sessões de Terminal
+Name[ro]=Sesiuni de terminal
+Name[ru]=Терминальные сеансы
+Name[rw]=Imikoro Ihera
+Name[se]=Terminálbargovuorut
+Name[sk]=Sedenia terminálu
+Name[sl]=Terminalske seje
+Name[sr]=Сесије терминала
+Name[sr@Latn]=Sesije terminala
+Name[sv]=Terminalsessioner
+Name[ta]=கடைசி அமர்வுகள்
+Name[te]=టెర్మినల్ సెషన్లు
+Name[tg]=Ҷаласаҳои терминал
+Name[th]=เซสชันของเทอร์มินัล
+Name[tr]=Uçbirim Oturumları
+Name[tt]=Terminal Sessiläre
+Name[uk]=Сеанси терміналів
+Name[uz]=Terminal seanslari
+Name[uz@cyrillic]=Терминал сеанслари
+Name[ven]=Zwitenwa zwa theminala
+Name[vi]=Phiên chạy đầu cuối
+Name[wa]=Sessions do terminå
+Name[xh]=Intlanganiso Yesiphelo sendlela
+Name[zh_CN]=终端会话
+Name[zh_TW]=終端機工作階段
+Name[zu]=Iziqendu Zangaphandle
+Comment=Menu for starting a terminal emulator with a session or bookmark
+Comment[af]='n Kieslys wat 'n terminaal emuleerder met 'n sessie of boekmerk kan begin
+Comment[ar]=قائمة لبدء تشغيل مضاهِ مطراف مع جلسة أو علامة موقع
+Comment[be]=Меню для запуску эмулятара тэрміналу з сесіяй ці закладкай
+Comment[bg]=Меню за стартиране на сесия в терминален прозорец
+Comment[bs]=Meni za pokretanje simulatora terminala sa sesijom ili zabilješkom
+Comment[ca]=Menú per engegar un emulador de terminal amb una sessió o punt
+Comment[cs]=Nabídka pro spuštění teminálu s relací nebo záložkou
+Comment[csb]=Menu zrëszëniô òkna terminala ze spamiãtóną sesëją abò załóżka
+Comment[da]=Menu til at starte en terminalemulator med en session eller bogmærke
+Comment[de]=Menü zum Starten des Terminal-Emulators mit einer Sitzung oder Lesezeichen
+Comment[el]=Μενού για την εκκίνηση ενός εξομοιωτή τερματικού με μια συνεδρία ή σελιδοδείκτη
+Comment[eo]=Menuo por lanĉi terminalsimulilon jam ŝarĝita kun seaco aŭ legosigno
+Comment[es]=Menú para iniciar un emulador de terminal con una sesión o marcador
+Comment[et]=Menüü seansi või järjehoidja käivitamiseks terminali emulaatoris
+Comment[eu]=Terminal emuladorea saio edo laster-markaz abiarazteko menua
+Comment[fa]=گزینگانی برای آغاز مقلد پایانه، توسط یک نشست یا چوب ‌الف
+Comment[fi]=Valikko pääteikkunan käynnistämiseen istunnon tai kirjanmerkin kanssa
+Comment[fr]=Menu permettant de démarrer un émulateur de terminal à partir d'une session ou un signet
+Comment[fy]=Menu foar it begjinnen fan in terminalemulaasje mei in sesje of blêdwizer
+Comment[gl]=Menu para lanzar un emulador de terminal
+Comment[he]=תפריט להפעלת מסוף עם הפעלה או סימנייה
+Comment[hr]=Izbornik za pokretanje terminalske emulacije putem sesije ili oznake
+Comment[hu]=Menü parancsértelmező indításához (könyvjelzővel is)
+Comment[is]=Valmynd til að ræsa skjáhermi með setu eða bókamerki
+Comment[it]=Menu per l'emulatore di terminale con una data sessione o segnalibro
+Comment[ja]=指定したセッションやブックマーク先でターミナルエミュレータを起動します
+Comment[kk]=Терминал сеансын не бетбелгіні ашу мәзірі
+Comment[km]=ម៉ឺនុយ​សម្រាប់​ចាប់ផ្ដើម​កម្មវិធី​ត្រាប់តាម​កម្មវិធី​ស្ថានីយ​ជា​មួយ​នឹង​សម័យ ឬ​ចំណាំ
+Comment[lt]=Meniu terminalo emuliatoriaus paleidimui su tam tikra sesija ar - nuo žymeklio
+Comment[mk]=Мени за стартување на терминалски емулатор со сесија или обележувач
+Comment[nb]=Meny for å starte en terminalemulator med en økt eller et bokmerke
+Comment[nds]=Menü för dat Starten vun en Terminal-Emulator mit Leestekens oder Törns
+Comment[ne]=सत्र वा पुस्तकचिनोसँग टर्मिनल इमुलेटर सुरुआत गर्नका लागि मेनु
+Comment[nl]=Menu voor het starten van een terminalemulatie met een sessie of bladwijzer
+Comment[nn]=Meny for å starta ein terminalemulator med ei økt eller eit bokmerke
+Comment[pl]=Menu uruchomienia okna terminala z zapamiętaną sesją lub zakładką
+Comment[pt]=Um menu para iniciar um emulador de terminal com uma sessão ou favorito
+Comment[pt_BR]=Menu para início de um emulador de terminal, com uma sessão ou favorito
+Comment[ro]=Meniu pentru pornirea unui emulator de terminal cu o sesiune sau semn de carte
+Comment[ru]=Быстрый доступ к сеансам и закладкам терминала
+Comment[sk]=Menu pre spustenie emulátora terminálu so sedením alebo záložkou
+Comment[sl]=Meni za zaganjanje terminalskega emulatorja s sejo ali zaznamkom
+Comment[sr]=Мени за покретање емулатора терминала са сесијом или маркером
+Comment[sr@Latn]=Meni za pokretanje emulatora terminala sa sesijom ili markerom
+Comment[sv]=Meny för att starta en terminalemulator med en session eller bokmärke
+Comment[th]=เมนูสำหรับเริ่มโปรแกรมจำลองเทอร์มินัล พร้อมกับวาระ หรือที่คั่นหน้า
+Comment[tr]=Bir uçbirim düzenleyiciyi oturum ya da yer imi ile açmanızı sağlar
+Comment[uk]=Меню для запуску терміналу емулятора через сеанс або закладку
+Comment[vi]=Thực đơn chạy một trình đầu cuối với một phiên chạy hay một địa chỉ lưu trong sổ
+Comment[wa]=Dressêye po-z enonder on terminå avou ene session ou ene rimåke
+Comment[zh_CN]=以会话或书签启动终端模拟器的菜单
+Comment[zh_TW]=用來啟動作業階段和書籤的終端機模擬程式的選單
+Icon=konsole
+
+X-KDE-Library=kickermenu_konsole
+X-KDE-AuthorizeAction=shell_access
diff --git a/kicker/menuext/prefmenu/Makefile.am b/kicker/menuext/prefmenu/Makefile.am
new file mode 100644
index 000000000..2ccbb4ba2
--- /dev/null
+++ b/kicker/menuext/prefmenu/Makefile.am
@@ -0,0 +1,17 @@
+INCLUDES = -I../../libkicker -I$(top_srcdir)/kicker/libkicker $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_prefmenu.la
+
+kickermenu_prefmenu_la_SOURCES = prefmenu.cpp
+kickermenu_prefmenu_la_LDFLAGS = $(all_libraries) -module -avoid-version
+kickermenu_prefmenu_la_LIBADD = $(LIB_KDEUI) $(top_builddir)/kicker/libkicker/libkickermain.la
+
+kickermenu_prefmenu_la_METASOURCES = AUTO
+
+desktopmenu_DATA = prefmenu.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_prefmenu.pot
+
+prefmenu.lo: ../../libkicker/kickerSettings.h
diff --git a/kicker/menuext/prefmenu/prefmenu.cpp b/kicker/menuext/prefmenu/prefmenu.cpp
new file mode 100644
index 000000000..dd157d2cb
--- /dev/null
+++ b/kicker/menuext/prefmenu/prefmenu.cpp
@@ -0,0 +1,394 @@
+/*****************************************************************
+
+Copyright (c) 1996-2002 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#include <qcursor.h>
+#include <qtimer.h>
+
+#include <kapplication.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kservice.h>
+#include <kservicegroup.h>
+#include <kstandarddirs.h>
+#include <ksycoca.h>
+#include <kurl.h>
+#include <kurldrag.h>
+
+#include "global.h"
+#include "kickerSettings.h"
+#include "prefmenu.h"
+
+K_EXPORT_KICKER_MENUEXT(prefmenu, PrefMenu)
+
+const int idStart = 4242;
+
+PrefMenu::PrefMenu(QWidget *parent,
+ const char *name,
+ const QStringList &/*args*/)
+ : KPanelMenu(i18n("Settings"), parent, name),
+ m_clearOnClose(false)
+{
+}
+
+PrefMenu::PrefMenu(const QString& label,
+ const QString& root,
+ QWidget *parent)
+ : KPanelMenu(label, parent),
+ m_clearOnClose(false),
+ m_root(root)
+{
+ m_subMenus.setAutoDelete(true);
+
+ connect(KSycoca::self(), SIGNAL(databaseChanged()),
+ this, SLOT(clearOnClose()));
+
+ connect(this, SIGNAL(aboutToHide()),
+ this, SLOT(aboutToClose()));
+}
+
+PrefMenu::~PrefMenu()
+{
+}
+
+void PrefMenu::insertMenuItem(KService::Ptr& s,
+ int nId,
+ int nIndex,
+ const QStringList *suppressGenericNames)
+{
+ QString serviceName = s->name();
+ // add comment
+ QString comment = s->genericName();
+ if (!comment.isEmpty())
+ {
+ if (KickerSettings::menuEntryFormat() == KickerSettings::NameAndDescription)
+ {
+ if (!suppressGenericNames ||
+ !suppressGenericNames->contains(s->untranslatedGenericName()))
+ {
+ serviceName = QString("%1 (%2)").arg(serviceName).arg(comment);
+ }
+ }
+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName)
+ {
+ serviceName = QString("%1 (%2)").arg(comment).arg(serviceName);
+ }
+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly)
+ {
+ serviceName = comment;
+ }
+ }
+
+ // restrict menu entries to a sane length
+ if (serviceName.length() > 60)
+ {
+ serviceName.truncate(57);
+ serviceName += "...";
+ }
+
+ // check for NoDisplay
+ if (s->noDisplay())
+ {
+ return;
+ }
+
+ // ignore dotfiles.
+ if ((serviceName.at(0) == '.'))
+ {
+ return;
+ }
+
+ // item names may contain ampersands. To avoid them being converted
+ // to accelerators, replace them with two ampersands.
+ serviceName.replace("&", "&&");
+
+ int newId = insertItem(KickerLib::menuIconSet(s->icon()), serviceName, nId, nIndex);
+ m_entryMap.insert(newId, static_cast<KSycocaEntry*>(s));
+}
+
+void PrefMenu::mousePressEvent(QMouseEvent * ev)
+{
+ m_dragStartPos = ev->pos();
+ KPanelMenu::mousePressEvent(ev);
+}
+
+void PrefMenu::mouseMoveEvent(QMouseEvent * ev)
+{
+ KPanelMenu::mouseMoveEvent(ev);
+
+ if ((ev->state() & LeftButton) != LeftButton)
+ {
+ return;
+ }
+
+ QPoint p = ev->pos() - m_dragStartPos;
+ if (p.manhattanLength() <= QApplication::startDragDistance())
+ {
+ return;
+ }
+
+ int id = idAt(m_dragStartPos);
+
+ // Don't drag items we didn't create.
+ if (id < idStart)
+ {
+ return;
+ }
+
+ if (!m_entryMap.contains(id))
+ {
+ kdDebug(1210) << "Cannot find service with menu id " << id << endl;
+ return;
+ }
+
+ KSycocaEntry * e = m_entryMap[id];
+
+ QPixmap icon;
+ KURL url;
+
+ switch (e->sycocaType())
+ {
+ case KST_KService:
+ {
+ icon = static_cast<KService *>(e)->pixmap(KIcon::Small);
+ QString filePath = static_cast<KService *>(e)->desktopEntryPath();
+ if (filePath[0] != '/')
+ {
+ filePath = locate("apps", filePath);
+ }
+ url.setPath(filePath);
+ break;
+ }
+
+ case KST_KServiceGroup:
+ {
+ icon = KGlobal::iconLoader()->loadIcon(static_cast<KServiceGroup*>(e)->icon(),
+ KIcon::Small);
+ url = "programs:/" + static_cast<KServiceGroup*>(e)->relPath();
+ break;
+ }
+
+ default:
+ {
+ return;
+ break;
+ }
+ }
+
+ // If the path to the desktop file is relative, try to get the full
+ // path from KStdDirs.
+ KURLDrag *d = new KURLDrag(KURL::List(url), this);
+ connect(d, SIGNAL(destroyed()), this, SLOT(dragObjectDestroyed()));
+ d->setPixmap(icon);
+ d->dragCopy();
+
+ // Set the startposition outside the panel, so there is no drag initiated
+ // when we use drag and click to select items. A drag is only initiated when
+ // you click to open the menu, and then press and drag an item.
+ m_dragStartPos = QPoint(-1,-1);
+}
+
+void PrefMenu::dragEnterEvent(QDragEnterEvent *event)
+{
+ // Set the DragObject's target to this widget. This is needed because the
+ // widget doesn't accept drops, but we want to determine if the drag object
+ // is dropped on it. This avoids closing on accidental drags. If this
+ // widget accepts drops in the future, these lines can be removed.
+ if (event->source() == this)
+ {
+ KURLDrag::setTarget(this);
+ }
+ event->ignore();
+}
+
+void PrefMenu::dragLeaveEvent(QDragLeaveEvent */*event*/)
+{
+ // see PrefMenu::dragEnterEvent why this is nescessary
+ if (!frameGeometry().contains(QCursor::pos()))
+ {
+ KURLDrag::setTarget(0);
+ }
+}
+
+void PrefMenu::initialize()
+{
+ if (initialized())
+ {
+ return;
+ }
+
+ // Set the startposition outside the panel, so there is no drag initiated
+ // when we use drag and click to select items. A drag is only initiated when
+ // you click to open the menu, and then press and drag an item.
+ m_dragStartPos = QPoint(-1,-1);
+
+ if (m_root.isEmpty())
+ {
+ insertItem(KickerLib::menuIconSet("kcontrol"),
+ i18n("Control Center"),
+ this, SLOT(launchControlCenter()));
+ insertSeparator();
+ }
+
+ // We ask KSycoca to give us all services under Settings/
+ KServiceGroup::Ptr root = KServiceGroup::group(m_root.isEmpty() ? "Settings/" : m_root);
+
+ if (!root || !root->isValid())
+ {
+ return;
+ }
+
+ KServiceGroup::List list = root->entries(true, true, true,
+ KickerSettings::menuEntryFormat() == KickerSettings:: NameAndDescription);
+
+ if (list.isEmpty())
+ {
+ setItemEnabled(insertItem(i18n("No Entries")), false);
+ return;
+ }
+
+ int id = idStart;
+
+ QStringList suppressGenericNames = root->suppressGenericNames();
+
+ KServiceGroup::List::ConstIterator it = list.begin();
+ for (; it != list.end(); ++it)
+ {
+ KSycocaEntry* e = *it;
+
+ if (e->isType(KST_KServiceGroup))
+ {
+
+ KServiceGroup::Ptr g(static_cast<KServiceGroup *>(e));
+ QString groupCaption = g->caption();
+
+ // Avoid adding empty groups.
+ KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(g->relPath());
+ if (subMenuRoot->childCount() == 0)
+ {
+ continue;
+ }
+
+ // Ignore dotfiles.
+ if ((g->name().at(0) == '.'))
+ {
+ continue;
+ }
+
+ // Item names may contain ampersands. To avoid them being converted
+ // to accelerators, replace each ampersand with two ampersands.
+ groupCaption.replace("&", "&&");
+
+ PrefMenu* m = new PrefMenu(g->name(), g->relPath(), this);
+ m->setCaption(groupCaption);
+
+ int newId = insertItem(KickerLib::menuIconSet(g->icon()), groupCaption, m, id++);
+ m_entryMap.insert(newId, static_cast<KSycocaEntry*>(g));
+ // We have to delete the sub menu our selves! (See Qt docs.)
+ m_subMenus.append(m);
+ }
+ else if (e->isType(KST_KService))
+ {
+ KService::Ptr s(static_cast<KService *>(e));
+ insertMenuItem(s, id++, -1, &suppressGenericNames);
+ }
+ else if (e->isType(KST_KServiceSeparator))
+ {
+ insertSeparator();
+ }
+ }
+
+ setInitialized(true);
+}
+
+void PrefMenu::slotExec(int id)
+{
+ if (!m_entryMap.contains(id))
+ {
+ return;
+ }
+
+ kapp->propagateSessionManager();
+ KSycocaEntry *e = m_entryMap[id];
+ KService::Ptr service = static_cast<KService *>(e);
+ KApplication::startServiceByDesktopPath(service->desktopEntryPath(),
+ QStringList(), 0, 0, 0, "", true);
+ m_dragStartPos = QPoint(-1,-1);
+}
+
+void PrefMenu::clearOnClose()
+{
+ if (!initialized())
+ {
+ return;
+ }
+
+ m_clearOnClose = isVisible();
+ if (!m_clearOnClose)
+ {
+ // we aren't visible right now so clear immediately
+ slotClear();
+ }
+}
+
+void PrefMenu::slotClear()
+{
+ if( isVisible())
+ {
+ // QPopupMenu's aboutToHide() is emitted before the popup is really hidden,
+ // and also before a click in the menu is handled, so do the clearing
+ // only after that has been handled
+ QTimer::singleShot( 100, this, SLOT( slotClear()));
+ return;
+ }
+
+ m_entryMap.clear();
+ KPanelMenu::slotClear();
+ m_subMenus.clear();
+}
+
+void PrefMenu::aboutToClose()
+{
+ if (m_clearOnClose)
+ {
+ m_clearOnClose = false;
+ slotClear();
+ }
+}
+
+void PrefMenu::launchControlCenter()
+{
+ KApplication::startServiceByDesktopName("kcontrol", QStringList(),
+ 0, 0, 0, "", true);
+}
+
+
+void PrefMenu::dragObjectDestroyed()
+{
+ if (KURLDrag::target() != this)
+ {
+ close();
+ }
+}
+
+#include "prefmenu.moc"
diff --git a/kicker/menuext/prefmenu/prefmenu.desktop b/kicker/menuext/prefmenu/prefmenu.desktop
new file mode 100644
index 000000000..f3206d4e3
--- /dev/null
+++ b/kicker/menuext/prefmenu/prefmenu.desktop
@@ -0,0 +1,135 @@
+[Desktop Entry]
+Name=Settings
+Name[af]=Instellings
+Name[ar]=التعيينات
+Name[az]=Qurğular
+Name[be]=Настаўленні
+Name[bg]=Настройки
+Name[bn]=সেটিংস
+Name[br]=Dibarzhoù
+Name[bs]=Postavke
+Name[ca]=Preferències
+Name[cs]=Nastavení
+Name[csb]=Ùstôw
+Name[cy]=Gosodiadau
+Name[da]=Opsætning
+Name[de]=Einstellungen
+Name[el]=Ρυθμίσεις
+Name[eo]=Agordo
+Name[es]=Preferencias
+Name[et]=Seadistused
+Name[eu]=Ezarpenak
+Name[fa]=تنظیمات
+Name[fi]=Asetukset
+Name[fr]=Configuration
+Name[fy]=Ynstellings
+Name[ga]=Socruithe
+Name[gl]=Opcións
+Name[he]=הגדרות
+Name[hi]=विन्यास
+Name[hr]=Postavke
+Name[hsb]=Nastajenja
+Name[hu]=Beállítások
+Name[is]=Stillingar
+Name[it]=Impostazioni
+Name[ja]=設定
+Name[ka]=პარამეტრები
+Name[kk]=Параметрлері
+Name[km]=ការ​កំណត់
+Name[ko]=설정
+Name[lt]=Parinktys
+Name[lv]=Parametri
+Name[mk]=Поставувања
+Name[mn]=Тохируулга
+Name[ms]=Tempatan
+Name[nb]=Innstillinger
+Name[nds]=Instellen
+Name[ne]=सेटिङ
+Name[nl]=Instellingen
+Name[nn]=Innstillingar
+Name[pa]=ਸੈਟਿੰਗ
+Name[pl]=Ustawienia
+Name[pt]=Configuração
+Name[pt_BR]=Configurações
+Name[ro]=Setări
+Name[ru]=Настройка
+Name[rw]=Amagenamiterere
+Name[se]=Heivehusat
+Name[sk]=Nastavenia
+Name[sl]=Nastavitve
+Name[sr]=Поставке
+Name[sr@Latn]=Postavke
+Name[sv]=Inställningar
+Name[ta]=அமைப்புகள்
+Name[te]=అమరికలు
+Name[tg]=Танзимот
+Name[th]=ตั้งค่าต่างๆ
+Name[tr]=Ayarlar
+Name[tt]=Caylaw
+Name[uk]=Параметри
+Name[uz]=Moslamalar
+Name[uz@cyrillic]=Мосламалар
+Name[vi]=Thiết lập
+Name[wa]=Apontiaedjes
+Name[zh_CN]=设置
+Name[zh_TW]=設定
+Comment=Control Center modules menu
+Comment[af]=Beheer Sentrum Modules kieslys
+Comment[ar]=قائمة وحدات مركز التحكّم
+Comment[be]=Меню модуляў Цэнтра кіравання
+Comment[bg]=Меню на модулите в контролния център
+Comment[bn]=বিভিন্ন নিয়ন্ত্রণ কেন্দ্র মডিউল সম্বলিত মেনু
+Comment[ca]=Menú dels mòduls del centre de control
+Comment[cs]=Nabídka modulů Ovládacího centra
+Comment[csb]=Menu mòdułów Centróm kòntrolë
+Comment[da]=Menu med moduler i kontrolcentret
+Comment[de]=Das Menü für Kontrollzentrum-Module
+Comment[el]=Μενού αρθρωμάτων κέντρου ελέγχου
+Comment[en_GB]=Control Centre modules menu
+Comment[eo]=Menuo de Stircentraj Moduloj
+Comment[es]=Menú de los módulos del Centro de control
+Comment[et]=Juhtimiskeskuse moodulite menüü
+Comment[eu]=Kontrol gunearen moduluen menua
+Comment[fa]=گزینگان پیمانه‌های مرکز کنترل
+Comment[fi]=Ohjauskeskuksen moduulivalikko
+Comment[fr]=Menu des modules du Centre de configuration
+Comment[fy]=Menu mei Konfiguraasjemodules
+Comment[gl]=Menu dos Módulos do Centro de Control
+Comment[he]=תפריט מודולי מרכז בקרה
+Comment[hr]=Izbornik modula upravljačkog središta
+Comment[hu]=Menü a Vezérlőpult moduljaival
+Comment[is]=Valmynd stjórnborðseininga
+Comment[it]=Menu dei moduli del centro di controllo
+Comment[ja]=コントロールセンターモジュールメニュー
+Comment[kk]=Басқару орталықтың модульдер мәзірі
+Comment[km]=ម៉ឺនុយ​ម៉ូឌុល​មជ្ឈមណ្ឌល​បញ្ជា
+Comment[ko]=제어판 모듈
+Comment[lt]=Valdymo centro modulių meniu
+Comment[mk]=Мени со модулите од Контролниот центар
+Comment[nb]=Meny for kontrollpanelmoduler
+Comment[nds]=Kuntrullzentrum-Modulen
+Comment[ne]=नियन्त्रण केन्द्र मोड्युल मेनु
+Comment[nl]=Menu met Configuratiemodules
+Comment[nn]=Meny for kontrollsentermodular
+Comment[pa]=ਕੰਟਰੋਲ ਕੇਂਦਰ ਮੈਡੀਊਲ ਮੇਨੂ
+Comment[pl]=Menu modułów Centrum sterowania
+Comment[pt]=Menu de módulos do Centro de Controlo
+Comment[pt_BR]=Menu dos módulos do Centro de Controle
+Comment[ru]=Модули Центра управления
+Comment[sk]=Menu pre moduly Ovládacieho centra
+Comment[sl]=Meni z moduli Nadzornega središča
+Comment[sr]=Мени модула Контролног центра
+Comment[sr@Latn]=Meni modula Kontrolnog centra
+Comment[sv]=Meny med moduler i Inställningscentralen
+Comment[th]=เมนูของโมดูลของศูนย์ควบคุม
+Comment[tr]=Kontrol Merkezi modülleri menüsü
+Comment[uk]=Меню модулів в Центрі керування
+Comment[uz]=Boshqaruv markazining modullari
+Comment[uz@cyrillic]=Бошқарув марказининг модуллари
+Comment[vi]=Trung tâm điều khiển mô đun thực đơn
+Comment[wa]=Dressêye des modules do cinte di contrôle
+Comment[zh_CN]=控制中心模块菜单
+Comment[zh_TW]=控制中心模組選單
+Icon=package_settings
+
+X-KDE-Library=kickermenu_prefmenu
diff --git a/kicker/menuext/prefmenu/prefmenu.h b/kicker/menuext/prefmenu/prefmenu.h
new file mode 100644
index 000000000..99c3772fc
--- /dev/null
+++ b/kicker/menuext/prefmenu/prefmenu.h
@@ -0,0 +1,74 @@
+/*****************************************************************
+
+Copyright (c) 1996-2002 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#ifndef _prefmenu_h_
+#define _prefmenu_h_
+
+#include <qmap.h>
+
+#include <kpanelmenu.h>
+#include <ksycocaentry.h>
+
+typedef QMap<int, KSycocaEntry::Ptr> EntryMap;
+typedef QPtrList<QPopupMenu> PopupMenuList;
+
+class PrefMenu : public KPanelMenu
+{
+ Q_OBJECT
+
+ public:
+ PrefMenu(QWidget *parent,
+ const char *name,
+ const QStringList & /*args*/);
+ PrefMenu(const QString& label,
+ const QString& root,
+ QWidget *parent);
+ ~PrefMenu();
+
+ protected:
+ void insertMenuItem(KService::Ptr & s,
+ int nId,
+ int nIndex= -1,
+ const QStringList *suppressGenericNames = 0);
+ virtual void mousePressEvent(QMouseEvent *);
+ virtual void mouseMoveEvent(QMouseEvent *);
+ virtual void dragEnterEvent(QDragEnterEvent *);
+ virtual void dragLeaveEvent(QDragLeaveEvent *);
+
+ bool m_clearOnClose;
+ QString m_root;
+ QPoint m_dragStartPos;
+ EntryMap m_entryMap;
+ PopupMenuList m_subMenus;
+
+ protected slots:
+ void initialize();
+ void slotExec(int id); // from KPanelMenu
+ void slotClear(); // from KPanelMenu
+ void clearOnClose();
+ void aboutToClose();
+ void launchControlCenter();
+ void dragObjectDestroyed();
+};
+
+#endif
diff --git a/kicker/menuext/recentdocs/Makefile.am b/kicker/menuext/recentdocs/Makefile.am
new file mode 100644
index 000000000..38f95814b
--- /dev/null
+++ b/kicker/menuext/recentdocs/Makefile.am
@@ -0,0 +1,15 @@
+INCLUDES = $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_recentdocs.la
+
+kickermenu_recentdocs_la_SOURCES = recentdocsmenu.cpp
+kickermenu_recentdocs_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined
+kickermenu_recentdocs_la_LIBADD = $(LIB_KDEUI) $(LIB_KIO)
+
+kickermenu_recentdocs_la_METASOURCES = AUTO
+
+desktopmenu_DATA = recentdocs.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_recentdocs.pot
diff --git a/kicker/menuext/recentdocs/recentdocs.desktop b/kicker/menuext/recentdocs/recentdocs.desktop
new file mode 100644
index 000000000..a2f406079
--- /dev/null
+++ b/kicker/menuext/recentdocs/recentdocs.desktop
@@ -0,0 +1,140 @@
+[Desktop Entry]
+Name=Recent Documents
+Name[af]=Onlangse Dokumente
+Name[ar]=مستندات حديثة
+Name[az]=Son Sənədlər
+Name[be]=Ранейшыя дакументы
+Name[bg]=Документи
+Name[bn]=সম্প্রতি ব্যবহৃত নথী
+Name[br]=Teulioù nevez
+Name[bs]=Najnoviji dokumenti
+Name[ca]=Documents recents
+Name[cs]=Nedávné dokumenty
+Name[csb]=Slédno òtemkłé dokùmentë
+Name[cy]=Dogfenni Diweddar
+Name[da]=Nylige dokumenter
+Name[de]=Zuletzt geöffnete Dokumente
+Name[el]=Πρόσφατα έγγραφα
+Name[eo]=Lastaj dokumentoj
+Name[es]=Documentos recientes
+Name[et]=Viimati kasutatud dokumendid
+Name[eu]=Azken dokumentuak
+Name[fa]=سندهای اخیر
+Name[fi]=Viimeaikaiset asiakirjat
+Name[fr]=Documents récents
+Name[fy]=Nijste dokuminten
+Name[ga]=Cáipéisí is déanaí
+Name[gl]=Documentos Recentes
+Name[he]=מסמכים אחרונים
+Name[hi]=हालिया दस्तावेज़
+Name[hr]=Nedavno pristupljeni dokumenti
+Name[hu]=A legutóbbi dokumentumok
+Name[is]=Nýleg skjöl
+Name[it]=Documenti recenti
+Name[ja]=最近開いたドキュメント
+Name[ka]=ბოლო დოკუმენტები
+Name[kk]=Жуырдағы құжаттар
+Name[km]=ឯកសារ​ថ្មីៗ​នេះ
+Name[lo]=ເອກະສານຂໍ້ຄວາມ
+Name[lt]=Neseni dokumentai
+Name[lv]=Nesenie dokumenti
+Name[mk]=Скорешни документи
+Name[mn]=Сүүлд нээгдсэн баримтууд
+Name[ms]=Dokumen Terkini
+Name[mt]=Dokumenti riċenti
+Name[nb]=Nylig brukte dokumenter
+Name[nds]=Tolest bruukte Dokmenten
+Name[ne]=हालको कागजात
+Name[nl]=Recente documenten
+Name[nn]=Nyleg bruka dokument
+Name[nso]=Ditokomane tsa Gabjale
+Name[pa]=ਤਾਜ਼ਾ ਦਸਤਾਵੇਜ਼
+Name[pl]=Ostatnio otwarte dokumenty
+Name[pt]=Documentos Recentes
+Name[pt_BR]=Documentos Recentes
+Name[ro]=Documente recente
+Name[ru]=Последние документы
+Name[rw]=Inyandiko za Vuba
+Name[se]=Áiddo geavahuvvon dokumeanttat
+Name[sk]=Nedávne dokumenty
+Name[sl]=Nedavni dokumenti
+Name[sr]=Пређашњи документи
+Name[sr@Latn]=Pređašnji dokumenti
+Name[sv]=Senaste dokument
+Name[ta]=தற்போதைய ஆவணங்கள்
+Name[tg]=Ҳуҷҷатҳои охирин
+Name[th]=เอกสารที่เคยเรียกใช้
+Name[tr]=Son Kullanılan Belgeler
+Name[tt]=Soñğı İstäleklär
+Name[uk]=Недавні документи
+Name[uz]=Yaqinda ochilgan hujjatlar
+Name[uz@cyrillic]=Яқинда очилган ҳужжатлар
+Name[ven]=Manwalwa a Zwino
+Name[vi]=Tài liệu Gần đây
+Name[wa]=Documints d' enawaire
+Name[xh]=Uxwebhu Olusandukusebenziswa
+Name[zh_CN]=最近文档
+Name[zh_TW]=最近的文件
+Name[zu]=Ushicilelo olusanda kuvulwa
+Comment=Menu of documents you have used recently
+Comment[af]=Kieslys met dokumente wat onlangs deur jou gebruik is
+Comment[ar]=قائمة المستنادات التي إستخدمتها حديثاً
+Comment[be]=Меню раней выкарыстаных дакументаў
+Comment[bg]=Последно използвани документи
+Comment[bn]=আপনি সম্প্রতি ব্যবহার করেছেন এমন নথীর তালিকা
+Comment[bs]=Meni sa dokumentima koje ste nedavno koristili
+Comment[ca]=Menú dels documents usats fa poc
+Comment[cs]=Nabídka nedávno použitých dokumentů
+Comment[csb]=Menu slédno òtemkłëch dokùmentów
+Comment[da]=Menu med dokumenter du har brugt for nyligt
+Comment[de]=Menü mit Dokumenten, die Sie zuletzt geöffnet hatten
+Comment[el]=Μενού εγγράφων που χρησιμοποιήθηκαν πρόσφατα
+Comment[eo]=Menuo de dokumentoj kiujn vi laste uzis
+Comment[es]=Menú de los documentos recientemente usados
+Comment[et]=Viimati kasutatud dokumentide menüü
+Comment[eu]=Erabili dituzun azken dokumentuen menua
+Comment[fa]=گزینگان سندهایی که اخیراً استفاده کرده‌اید
+Comment[fi]=Viimeksi käyttämiesi asiakirjojen valikko
+Comment[fr]=Menu des documents récemment utilisés
+Comment[fy]=Menu mei dokuminten dy jo koartlyn iepene ha
+Comment[gl]=Os documentos que usou recentemente
+Comment[he]=תפריט המסמכים שהשתמשת בהם לאחרונה
+Comment[hr]=Izbornik s nedavno pristupljenim dokumentima
+Comment[hu]=A nemrég használt dokumentumok menüje
+Comment[is]=Listi yfir skjöl sem þú hefur nýlega notað
+Comment[it]=Menu dei documenti usati recentemente
+Comment[ja]=最近使ったドキュメントのメニュー
+Comment[ka]=ბოლო დროს გამოყენებული დოკუმენტების მენიუ
+Comment[kk]=Жуырда қолданған құжаттар мәзірі
+Comment[km]=ម៉ឺនុយ​ឯកសារ​ដែល​អ្នក​បាន​ប្រើ​ថ្មីៗនេះ
+Comment[lt]=Nesenai naudotų dokumentų meniu
+Comment[mk]=Мени со последните документи што сте ги користеле
+Comment[nb]=Meny over dokumenter du nylig har brukt
+Comment[nds]=Menü vun Dokmenten, de Du tolest bruukt hest
+Comment[ne]=तपाईँले भरखरै प्रयोग गर्नु भएको कागजातका मेनु
+Comment[nl]=Menu met documenten die u recentelijk hebt geopend
+Comment[nn]=Meny over dokument du nyleg har bruka
+Comment[pa]=ਤਾਜ਼ਾ ਦਸਤਾਵੇਜ਼, ਜੋ ਕਿ ਤੁਸੀਂ ਹੁਣੇ ਵਰਤੇ ਹਨ
+Comment[pl]=Menu ostatnio używanych dokumentów
+Comment[pt]=Menu com os documentos recentes que você usou
+Comment[pt_BR]=Menu de documentos que você usou recentemente
+Comment[ro]=Meniu cu lista de documente pe care le-ați utilizat recent
+Comment[ru]=Последние документы
+Comment[se]=Fállu mii čájeha dokumeanttaid mat áiddo leat geavahuvvon
+Comment[sk]=Menu nedávno použitých dokumentov
+Comment[sl]=Meni z dokumenti, ki ste jih uporabljali pred kratkim
+Comment[sr]=Мени докумената које сте скорије користили
+Comment[sr@Latn]=Meni dokumenata koje ste skorije koristili
+Comment[sv]=Meny med dokument som du nyligen har använt
+Comment[th]=เมนูของเอกสารที่คุณเคยเรียกใช้มาแล้ว
+Comment[tr]=Son kullanılan belgelerin menüsü
+Comment[uk]=Меню документів, які ви недавно використовували
+Comment[uz]=Yaqinda ishlatilgan hujjatlarning menyusi
+Comment[uz@cyrillic]=Яқинда ишлатилган ҳужжатларнинг менюси
+Comment[vi]=Thực đơn chứa các tài liệu bạn mới truy cập gần đây
+Comment[wa]=Dressêye des documints ki vs avoz eployîz enawaire
+Comment[zh_CN]=您最近使用过的文档的菜单
+Comment[zh_TW]=您最近使用過的文件選單
+Icon=document
+
+X-KDE-Library=kickermenu_recentdocs
diff --git a/kicker/menuext/recentdocs/recentdocsmenu.cpp b/kicker/menuext/recentdocs/recentdocsmenu.cpp
new file mode 100644
index 000000000..98357fe52
--- /dev/null
+++ b/kicker/menuext/recentdocs/recentdocsmenu.cpp
@@ -0,0 +1,139 @@
+/*****************************************************************
+
+Copyright (c) 1996-2000 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#include <qdragobject.h>
+
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kmimetype.h>
+#include <klocale.h>
+#include <kdesktopfile.h>
+#include <kglobalsettings.h>
+#include <kapplication.h>
+#include <kurldrag.h>
+#include <krecentdocument.h>
+
+#include "recentdocsmenu.h"
+
+K_EXPORT_KICKER_MENUEXT(recentdocs, RecentDocsMenu)
+
+RecentDocsMenu::RecentDocsMenu(QWidget *parent, const char *name,
+ const QStringList &/*args*/)
+ : KPanelMenu(KRecentDocument::recentDocumentDirectory(), parent, name)
+{
+}
+
+RecentDocsMenu::~RecentDocsMenu()
+{
+}
+
+void RecentDocsMenu::initialize() {
+ if (initialized()) clear();
+
+ insertItem(SmallIconSet("history_clear"), i18n("Clear History"),
+ this, SLOT(slotClearHistory()));
+ insertSeparator();
+
+ _fileList = KRecentDocument::recentDocuments();
+
+ if (_fileList.isEmpty()) {
+ insertItem(i18n("No Entries"), 0);
+ setItemEnabled(0, false);
+ return;
+ }
+
+ int id = 0;
+
+ for (QStringList::ConstIterator it = _fileList.begin();
+ it != _fileList.end();
+ ++it)
+ {
+ KDesktopFile f(*it, true /* read only */);
+ insertItem(SmallIconSet(f.readIcon()), f.readName().replace('&', QString::fromAscii("&&") ), id++);
+ }
+
+ setInitialized(true);
+}
+
+void RecentDocsMenu::slotClearHistory() {
+ KRecentDocument::clear();
+ reinitialize();
+}
+
+void RecentDocsMenu::slotExec(int id) {
+ if (id >= 0) {
+ kapp->propagateSessionManager();
+ KURL u;
+ u.setPath(_fileList[id]);
+ KDEDesktopMimeType::run(u, true);
+ }
+}
+
+void RecentDocsMenu::mousePressEvent(QMouseEvent* e) {
+ _mouseDown = e->pos();
+ QPopupMenu::mousePressEvent(e);
+}
+
+void RecentDocsMenu::mouseMoveEvent(QMouseEvent* e) {
+ KPanelMenu::mouseMoveEvent(e);
+
+ if (!(e->state() & LeftButton))
+ return;
+
+ if (!rect().contains(_mouseDown))
+ return;
+
+ int dragLength = (e->pos() - _mouseDown).manhattanLength();
+
+ if (dragLength <= KGlobalSettings::dndEventDelay())
+ return; // ignore it
+
+ int id = idAt(_mouseDown);
+
+ // Don't drag 'manual' items.
+ if (id < 0)
+ return;
+
+ KDesktopFile f(_fileList[id], true /* read only */);
+
+ KURL url ( f.readURL() );
+
+ if (url.isEmpty()) // What are we to do ?
+ return;
+
+ KURL::List lst;
+ lst.append(url);
+
+ KURLDrag* d = new KURLDrag(lst, this);
+ d->setPixmap(SmallIcon(f.readIcon()));
+ d->dragCopy();
+ close();
+}
+
+void RecentDocsMenu::slotAboutToShow()
+{
+ reinitialize();
+ KPanelMenu::slotAboutToShow();
+}
+
+#include "recentdocsmenu.moc"
diff --git a/kicker/menuext/recentdocs/recentdocsmenu.h b/kicker/menuext/recentdocs/recentdocsmenu.h
new file mode 100644
index 000000000..1e3157495
--- /dev/null
+++ b/kicker/menuext/recentdocs/recentdocsmenu.h
@@ -0,0 +1,55 @@
+/*****************************************************************
+
+Copyright (c) 1996-2002 the kicker authors. See file AUTHORS.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#ifndef RECENTDOCSMENU_H
+#define RECENTDOCSMENU_H
+
+#include <kpanelmenu.h>
+
+class QStringList;
+class QPoint;
+
+class RecentDocsMenu : public KPanelMenu
+{
+ Q_OBJECT
+
+public:
+ RecentDocsMenu(QWidget* parent, const char* name, const QStringList &/*args*/);
+ ~RecentDocsMenu();
+ void initialize();
+
+protected slots:
+ void slotClearHistory();
+ void slotExec(int id);
+ void slotAboutToShow();
+
+protected:
+ void mousePressEvent(QMouseEvent* e);
+ void mouseMoveEvent(QMouseEvent* e);
+
+private:
+ QStringList _fileList;
+ QPoint _mouseDown;
+};
+
+#endif // RECENTDOCSMENU_H
diff --git a/kicker/menuext/remote/Makefile.am b/kicker/menuext/remote/Makefile.am
new file mode 100644
index 000000000..85736d0a2
--- /dev/null
+++ b/kicker/menuext/remote/Makefile.am
@@ -0,0 +1,17 @@
+INCLUDES = -I$(srcdir)/../../ui -I../../libkicker $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_remotemenu.la
+
+kickermenu_remotemenu_la_SOURCES = remotemenu.cpp remotemenu.skel
+kickermenu_remotemenu_la_LDFLAGS = $(all_libraries) -module -avoid-version
+kickermenu_remotemenu_la_LIBADD = $(LIB_KDEUI) $(top_builddir)/kicker/libkicker/libkickermain.la
+
+kickermenu_remotemenu_la_METASOURCES = AUTO
+
+desktopmenu_DATA = remotemenu.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_remotemenu.pot
+
+remotemenu.lo: ../../libkicker/kickerSettings.h
diff --git a/kicker/menuext/remote/remotemenu.cpp b/kicker/menuext/remote/remotemenu.cpp
new file mode 100644
index 000000000..42b3d5339
--- /dev/null
+++ b/kicker/menuext/remote/remotemenu.cpp
@@ -0,0 +1,164 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "remotemenu.h"
+
+#include <kdebug.h>
+#include <kglobal.h>
+#include <kstandarddirs.h>
+#include <krun.h>
+#include <kiconloader.h>
+#include <kdesktopfile.h>
+#include <kservice.h>
+
+#include <qpixmap.h>
+#include <qdir.h>
+#include <qtimer.h>
+
+#include "kickerSettings.h"
+
+#define WIZARD_SERVICE "knetattach"
+
+K_EXPORT_KICKER_MENUEXT(remotemenu, RemoteMenu)
+
+
+RemoteMenu::RemoteMenu(QWidget *parent, const char *name,
+ const QStringList &/*args*/)
+ : KPanelMenu(parent, name), KDirNotify()
+{
+ KGlobal::dirs()->addResourceType("remote_entries",
+ KStandardDirs::kde_default("data") + "remoteview");
+
+ QString path = KGlobal::dirs()->saveLocation("remote_entries");
+
+ QDir dir = path;
+ if (!dir.exists())
+ {
+ dir.cdUp();
+ dir.mkdir("remoteview");
+ }
+}
+
+RemoteMenu::~RemoteMenu()
+{
+}
+
+void RemoteMenu::initialize()
+{
+ int id = 0;
+ if (KickerSettings::showMenuTitles())
+ {
+ insertTitle(i18n("Network Folders"));
+ }
+
+ id = insertItem(SmallIcon("wizard"), i18n("Add Network Folder"));
+ connectItem(id, this, SLOT(startWizard()));
+ id = insertItem(SmallIcon("kfm"), i18n("Manage Network Folders"));
+ connectItem(id, this, SLOT(openRemoteDir()));
+
+ insertSeparator();
+
+ m_desktopMap.clear();
+ QStringList names_found;
+ QStringList dirList = KGlobal::dirs()->resourceDirs("remote_entries");
+
+ QStringList::ConstIterator dirpath = dirList.begin();
+ QStringList::ConstIterator end = dirList.end();
+ for(; dirpath!=end; ++dirpath)
+ {
+ QDir dir = *dirpath;
+ if (!dir.exists()) continue;
+
+ QStringList filenames
+ = dir.entryList( QDir::Files | QDir::Readable );
+
+ QStringList::ConstIterator name = filenames.begin();
+ QStringList::ConstIterator endf = filenames.end();
+
+ for(; name!=endf; ++name)
+ {
+ if (!names_found.contains(*name))
+ {
+ names_found.append(*name);
+ QString filename = *dirpath+*name;
+ KDesktopFile desktop(filename);
+ id = insertItem(SmallIcon(desktop.readIcon()), desktop.readName());
+ m_desktopMap[id] = filename;
+ }
+ }
+ }
+}
+
+void RemoteMenu::startWizard()
+{
+ KURL url;
+ KService::Ptr service = KService::serviceByDesktopName(WIZARD_SERVICE);
+
+ if (service && service->isValid())
+ {
+ url.setPath(locate("apps", service->desktopEntryPath()));
+ new KRun(url, 0, true); // will delete itself
+ }
+}
+
+void RemoteMenu::openRemoteDir()
+{
+ new KRun(KURL("remote:/"));
+}
+
+void RemoteMenu::slotExec(int id)
+{
+ if (m_desktopMap.contains(id))
+ {
+ new KRun(m_desktopMap[id]);
+ }
+}
+
+ASYNC RemoteMenu::FilesAdded(const KURL &directory)
+{
+ if (directory.protocol()=="remote") reinitialize();
+}
+
+ASYNC RemoteMenu::FilesRemoved(const KURL::List &fileList)
+{
+ KURL::List::ConstIterator it = fileList.begin();
+ KURL::List::ConstIterator end = fileList.end();
+
+ for (; it!=end; ++it)
+ {
+ if ((*it).protocol()=="remote")
+ {
+ reinitialize();
+ return;
+ }
+ }
+}
+
+ASYNC RemoteMenu::FilesChanged(const KURL::List &fileList)
+{
+ FilesRemoved(fileList);
+}
+
+ASYNC RemoteMenu::FilesRenamed(const KURL &src, const KURL &dest)
+{
+ if (src.protocol()=="remote" || dest.protocol()=="remote")
+ reinitialize();
+}
+
+#include "remotemenu.moc"
diff --git a/kicker/menuext/remote/remotemenu.desktop b/kicker/menuext/remote/remotemenu.desktop
new file mode 100644
index 000000000..82f0de72c
--- /dev/null
+++ b/kicker/menuext/remote/remotemenu.desktop
@@ -0,0 +1,133 @@
+[Desktop Entry]
+Name=Network Folders
+Name[af]=Netwerk Gidse
+Name[ar]=مجلّدات الشبكة
+Name[be]=Сеткавыя тэчкі
+Name[bg]=Мрежови директории
+Name[bn]=নেটওয়ার্ক ফোল্ডার
+Name[br]=Renkelloù rouedad
+Name[bs]=Mrežni folderi
+Name[ca]=Carpetes de xarxa
+Name[cs]=Síťové složky
+Name[csb]=Sécowé katalodżi
+Name[da]=Netværksmapper
+Name[de]=Netzwerkordner
+Name[el]=Δικτυακοί φάκελοι
+Name[eo]=Retaj Dosierujoj
+Name[es]=Carpetas de red
+Name[et]=Võrgukataloogid
+Name[eu]=Sareko karpetak
+Name[fa]=پوشه‌های شبکه
+Name[fi]=Verkkokansiot
+Name[fr]=Dossiers réseau
+Name[fy]=Netwurkmappen
+Name[ga]=Fillteáin Líonra
+Name[gl]=Cartafoles en Rede
+Name[he]=תיקיות רשת
+Name[hi]=नेटवर्क फोल्डर्स
+Name[hr]=Mrežne mape
+Name[hu]=Hálózati mappák
+Name[is]=Netmöppur
+Name[it]=Cartelle di rete
+Name[ja]=ネットワークフォルダ
+Name[ka]=ქსელური საქაღალდეები
+Name[kk]=Желідегі қапшықтар
+Name[km]=ថត​បណ្ដាញ
+Name[ko]=네트워크 폴더 마법사
+Name[lt]=Tinklo aplankai
+Name[lv]=Tīkla mape
+Name[mk]=Мрежни папки
+Name[ms]=Folder Rangkaian
+Name[nb]=Nettverksmapper
+Name[nds]=Nettwarkorner
+Name[ne]=सञ्जाल फोल्डर
+Name[nl]=Netwerkmappen
+Name[nn]=Nettverksmapper
+Name[pa]=ਨੈੱਟਵਰਕ ਫੋਲਡਰ
+Name[pl]=Foldery sieciowe
+Name[pt]=Pastas de Rede
+Name[pt_BR]=Pastas de Rede
+Name[ro]=Foldere de rețea
+Name[ru]=Сетевые папки
+Name[rw]=Ububiko bw'Urusobemiyoboro
+Name[se]=Fierpmádatmáhpat
+Name[sk]=Sieťové priečinky
+Name[sl]=Omrežne mape
+Name[sr]=Мрежне фасцикле
+Name[sr@Latn]=Mrežne fascikle
+Name[sv]=Nätverkskataloger
+Name[ta]=வலைப்பின்னல் அடைவுகள்
+Name[te]=నెట్వర్క్ ఫొల్డర్లు
+Name[tg]=Феҳрастҳои шабака
+Name[th]=โฟลเดอร์เครือข่าย
+Name[tr]=Ağ Dizinleri
+Name[tt]=Çeltärle Törgäklär
+Name[uk]=Мережні теки
+Name[uz]=Tarmoq jildlari
+Name[uz@cyrillic]=Тармоқ жилдлари
+Name[vi]=Thư mục Mạng
+Name[wa]=Ridants rantoele
+Name[zh_CN]=网络文件夹
+Name[zh_TW]=網路資料夾
+Comment=Menu of network folders
+Comment[af]=Kieslys vir netwerk gidse
+Comment[ar]=قائمة مجلّدات الشبكة
+Comment[be]=Меню сеткавых тэчак
+Comment[bg]=Меню за достъп до мрежови директории
+Comment[bn]=নেটওয়ার্ক ফোল্ডার-এর তালিকা
+Comment[bs]=Meni sa mrežnim direktorijima
+Comment[ca]=Menú de les carpetes de xarxa
+Comment[cs]=Nabídka síťových složek
+Comment[csb]=Menu sécowëch katalogów
+Comment[da]=Menu med netværksmapper
+Comment[de]=Menü für den Zugriff auf Netzwerkordner
+Comment[el]=Μενού των δικτυακών φακέλων
+Comment[eo]=Menuo de retaj dosierujoj
+Comment[es]=Menú de las carpetas de red
+Comment[et]=Võrgukataloogide menüü
+Comment[eu]=Sareko karpeten menua
+Comment[fa]=گزینگان پوشه‌های شبکه
+Comment[fi]=Verkkokansiovalikko
+Comment[fr]=Menu des dossiers réseau
+Comment[fy]=Menu mei netwurkmappen
+Comment[gl]=Aceso doado cartafoles en rede
+Comment[he]=תפריט של תיקיות רשת
+Comment[hr]=Izbornik mrežnih mapa
+Comment[hu]=A hálózati mappák menüje
+Comment[is]=Einföld leið að netmöppum
+Comment[it]=Menu delle cartelle di rete
+Comment[ja]=ネットワークフォルダのメニュー
+Comment[ka]=ქსელური დასტების მენიუ
+Comment[kk]=Желідегі қапшықтар мәзірі
+Comment[km]=ម៉ឺនុយ​របស់​ថត​បណ្តាញ
+Comment[lt]=Tinklo aplankų meniu
+Comment[mk]=Мени на мрежните папки
+Comment[nb]=Meny over nettverksmappene
+Comment[nds]=Menü vun Nettwarkornern
+Comment[ne]=सञ्जाल फोल्डरको मेनु
+Comment[nl]=Menu met netwerkmappen
+Comment[nn]=Meny over nettverksmapper
+Comment[pa]=ਨੈੱਟਵਰਕ ਫੋਲਡਰ ਲਈ ਮੇਨੂ
+Comment[pl]=Menu folderów sieciowych
+Comment[pt]=Menu de pastas de rede
+Comment[pt_BR]=Acesso fácil às pastas de rede
+Comment[ro]=Meniu cu folderele de rețea
+Comment[ru]=Быстрый доступ к сетевым папкам
+Comment[se]=Fállu mii čájeha fierpmádatmáhpaid
+Comment[sk]=Menu sieťových priečinkov
+Comment[sl]=Meni z omrežnimi mapami
+Comment[sr]=Мени мрежних фасцикли
+Comment[sr@Latn]=Meni mrežnih fascikli
+Comment[sv]=Meny med nätverkskataloger
+Comment[th]=เมนูของโฟลเดอร์บนเครือข่าย
+Comment[tr]=Ağ dizinlerinin menüsü
+Comment[uk]=Меню мережних тек
+Comment[uz]=Tarmoq jildlarining menyusi
+Comment[uz@cyrillic]=Тармоқ жилдларининг менюси
+Comment[vi]=Thực đơn chứa thư mục mạng
+Comment[wa]=Dressêye des ridants rantoele
+Comment[zh_CN]=网络文件夹菜单
+Comment[zh_TW]=網路資料夾選單
+Icon=network
+
+X-KDE-Library=kickermenu_remotemenu
diff --git a/kicker/menuext/remote/remotemenu.h b/kicker/menuext/remote/remotemenu.h
new file mode 100644
index 000000000..1e46bb4e3
--- /dev/null
+++ b/kicker/menuext/remote/remotemenu.h
@@ -0,0 +1,53 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef REMOTEMENU_H
+#define REMOTEMENU_H
+
+#include <kdirnotify.h>
+#include <kpanelmenu.h>
+#include <qmap.h>
+
+class RemoteMenu : public KPanelMenu, public KDirNotify
+{
+ Q_OBJECT
+ K_DCOP
+
+ public:
+ RemoteMenu(QWidget *parent, const char *name,
+ const QStringList & /*args*/);
+ ~RemoteMenu();
+
+ k_dcop:
+ virtual ASYNC FilesAdded(const KURL &directory);
+ virtual ASYNC FilesRemoved(const KURL::List &fileList);
+ virtual ASYNC FilesChanged(const KURL::List &fileList);
+ virtual ASYNC FilesRenamed(const KURL &src, const KURL &dest);
+
+ protected slots:
+ void initialize();
+ void startWizard();
+ void openRemoteDir();
+ void slotExec(int id);
+
+ private:
+ QMap<int, QString> m_desktopMap;
+};
+
+#endif
diff --git a/kicker/menuext/system/Makefile.am b/kicker/menuext/system/Makefile.am
new file mode 100644
index 000000000..aa5d3d33f
--- /dev/null
+++ b/kicker/menuext/system/Makefile.am
@@ -0,0 +1,15 @@
+INCLUDES = -I$(top_srcdir)/kicker/libkicker $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_systemmenu.la
+
+kickermenu_systemmenu_la_SOURCES = systemmenu.cpp
+kickermenu_systemmenu_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined
+kickermenu_systemmenu_la_LIBADD = $(LIB_KDEUI) $(LIB_KIO) $(top_builddir)/kicker/libkicker/libkickermain.la
+
+kickermenu_systemmenu_la_METASOURCES = AUTO
+
+desktopmenu_DATA = systemmenu.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_systemmenu.pot
diff --git a/kicker/menuext/system/systemmenu.cpp b/kicker/menuext/system/systemmenu.cpp
new file mode 100644
index 000000000..68c3f5c66
--- /dev/null
+++ b/kicker/menuext/system/systemmenu.cpp
@@ -0,0 +1,91 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "systemmenu.h"
+
+#include <krun.h>
+#include <kiconloader.h>
+#include <qpixmap.h>
+
+#include "global.h"
+
+K_EXPORT_KICKER_MENUEXT(systemmenu, SystemMenu)
+
+
+SystemMenu::SystemMenu(QWidget *parent, const char *name,
+ const QStringList &/*args*/)
+ : KPanelMenu( parent, name)
+{
+ connect( &m_dirLister, SIGNAL( completed() ),
+ this, SLOT( slotCompleted() ) );
+
+ m_dirLister.openURL(KURL("system:/"));
+}
+
+SystemMenu::~SystemMenu()
+{
+}
+
+void SystemMenu::append(const QString &icon, const KURL &url,
+ const QString &label)
+{
+ int id = insertItem(KickerLib::menuIconSet(icon), label);
+ m_urlMap.insert(id, url);
+}
+
+void SystemMenu::initialize()
+{
+ if (isVisible()) return;
+
+ clear();
+
+ if (m_entries.isEmpty())
+ {
+ insertItem(i18n("Empty..."));
+ return;
+ }
+
+ m_urlMap.clear();
+
+ KFileItemList::ConstIterator it = m_entries.begin();
+ KFileItemList::ConstIterator end = m_entries.end();
+
+ for (; it!=end; ++it)
+ {
+ QString icon = (*it)->iconName();
+ KURL url = (*it)->url();
+ QString name = (*it)->name();
+ append(icon, url, name);
+ }
+}
+
+void SystemMenu::slotExec(int id)
+{
+ if(!m_urlMap.contains(id)) return;
+
+ new KRun(m_urlMap[id]); // will delete itself
+}
+
+void SystemMenu::slotCompleted()
+{
+ m_entries = m_dirLister.items(KDirLister::AllItems);
+ setInitialized(false);
+}
+
+#include "systemmenu.moc"
diff --git a/kicker/menuext/system/systemmenu.desktop b/kicker/menuext/system/systemmenu.desktop
new file mode 100644
index 000000000..29156838c
--- /dev/null
+++ b/kicker/menuext/system/systemmenu.desktop
@@ -0,0 +1,127 @@
+[Desktop Entry]
+Name=System Menu
+Name[af]=Stelsel Kieslys
+Name[ar]=قائمة النظام
+Name[be]=Сістэмнае меню
+Name[bg]=Системно меню
+Name[bn]=সিস্টেম মেনু
+Name[br]=Meuziad ar reizhiad
+Name[bs]=Sistemski meni
+Name[ca]=Menú de sistema
+Name[cs]=Systémová nabídka
+Name[csb]=Systema
+Name[cy]=Dewislen y Cysawd
+Name[da]=Systemmenu
+Name[de]=System-Menü
+Name[el]=Μενού συστήματος
+Name[eo]=SistemMenuo
+Name[es]=Menú del sistema
+Name[et]=Süsteemi menüü
+Name[eu]=Sistemaren menua
+Name[fa]=گزینگان سیستم
+Name[fi]=Järjestelmävalikko
+Name[fr]=Menu du système
+Name[fy]=Systeemmenu
+Name[ga]=Roghchlár an Chórais
+Name[gl]=Sistema
+Name[he]=תפריט מערכת
+Name[hr]=Sistemski izbornik
+Name[hu]=Rendszermenü
+Name[is]=Kerfisvalmynd
+Name[it]=Menu di Sistema
+Name[ja]=システムメニュー
+Name[ka]=სისტემის მენიუ
+Name[kk]=Жүйе мәзірі
+Name[km]=ប្រព័ន្ធ​ម៉ឺនុយ
+Name[lt]=Sistemos meniu
+Name[mk]=Системско мени
+Name[nb]=Systemmeny
+Name[nds]=Systeem-Menü
+Name[ne]=प्रणाली मेनु
+Name[nl]=Systeemmenu
+Name[nn]=Systemmeny
+Name[pa]=ਸਿਸਟਮ ਮੇਨੂ
+Name[pl]=System
+Name[pt]=Menu do Sistema
+Name[pt_BR]=Menu Sistema
+Name[ro]=Meniu sistem
+Name[ru]=Система
+Name[se]=Vuogádatfállu
+Name[sk]=Systémové menu
+Name[sl]=Sistem
+Name[sr]=Системски мени
+Name[sr@Latn]=Sistemski meni
+Name[sv]=Systemmeny
+Name[te]=వ్యవస్థ పట్టి
+Name[tg]=Менюи система
+Name[th]=เมนูระบบ
+Name[tr]=Sistem Menüsü
+Name[uk]=Системне меню
+Name[uz]=Tizim menyusi
+Name[uz@cyrillic]=Тизим менюси
+Name[vi]=Thực đơn Hệ thống
+Name[wa]=Dressêye sistinme
+Name[zh_CN]=系统菜单
+Name[zh_TW]=系統選單
+Comment=Menu of important system places
+Comment[af]=Kieslys vir belangrike stelsel plekke
+Comment[ar]=قائمة أمكنة النظام الهامة
+Comment[be]=Меню важных сістэмных месцаў
+Comment[bg]=Меню за достъп до системните директории
+Comment[bn]=সিস্টেমের গুরুত্বপূর্ণ অবস্থানগুলির তালিকা
+Comment[bs]=Meni sa sistemskim lokacijama
+Comment[ca]=Menú de llocs importants del sistema
+Comment[cs]=Nabídka důležitých systémových míst
+Comment[csb]=Menu z wôżnëma placama systemë
+Comment[da]=Menu med vigtige steder på systemet
+Comment[de]=Einfacher Zugriff auf Systemordner
+Comment[el]=Μενού σημαντικών τοποθεσιών του συστήματος
+Comment[eo]=Menuo de gravaj sistemlokoj
+Comment[es]=Menú de lugares importantes del sistema
+Comment[et]=Olulisemate süsteemi osade menüü
+Comment[eu]=Sistemaren leku garrantzitsuen menua
+Comment[fa]=گزینگان جاهای مهم سیستم
+Comment[fi]=Järjestelmän tärkeiden asetuksien valikko
+Comment[fr]=Menu dirigeant vers les endroits importants du système
+Comment[fy]=Menu mei wichtige systeemgebieden
+Comment[gl]=Aceso doado a lugares de importáncia para o sistema
+Comment[he]=תפריט של מקומות מערכת חשובים
+Comment[hr]=Izbornik važnih lokacija sustava
+Comment[hu]=A rendszerkönyvtárak menüje
+Comment[is]=Fljótleg leið að mikilvægum kerfishlutum
+Comment[it]=Menu con gli oggetti importanti del sistema
+Comment[ja]=システムの重要な場所にアクセスするためのメニュー
+Comment[ka]=სისტემის მნიშვნელოვან ადგილთა მენიუ
+Comment[kk]=Маңызды жүйелік орындарының мәзірі
+Comment[km]=ម៉ឺនុយ​កន្លែង​ប្រព័ន្ធ​សំខាន់
+Comment[lt]=Svarbių sistemos vietų meniu
+Comment[mk]=Мени со важни системски ресурси
+Comment[nb]=Meny over viktige systemsteder
+Comment[nds]=Menü vun wichtig Systeemornern
+Comment[ne]=महत्वपूर्ण प्रणाली स्थानको मेनु
+Comment[nl]=Menu met belangrijke systeemgebieden
+Comment[nn]=Meny over viktige systemstader
+Comment[pa]=ਸਿਸਟਮ ਥਾਵਾਂ ਲ਼ਈ ਮੇਨੂ
+Comment[pl]=Menu z ważnymi miejscami systemu
+Comment[pt]=Um menu com os locais importantes do sistema
+Comment[pt_BR]=Acesso fácil a locais importantes do sistema
+Comment[ro]=Meniu cu locații importante din sistem
+Comment[ru]=Быстрый доступ к системным ресурсам
+Comment[se]=Fállu mii čájeha dehálaš báikkiid vuogádagas
+Comment[sk]=Menu dôležitých systémových miest
+Comment[sl]=Meni s pomembnimi sistemskimi lokacijami
+Comment[sr]=Мени важних места на систему
+Comment[sr@Latn]=Meni važnih mesta na sistemu
+Comment[sv]=Meny med viktiga systemplatser
+Comment[th]=เมนูสำหรับที่สำคัญๆ ของระบบ
+Comment[tr]=Önemli sistem yerlerinin menüsü
+Comment[uk]=Меню важливих місць в системі
+Comment[uz]=Tizimda muhim boʻlgan joylarning menyusi
+Comment[uz@cyrillic]=Тизимда муҳим бўлган жойларнинг менюси
+Comment[vi]=Thực đơn chứa các liên kết hệ thống quan trọng
+Comment[wa]=Dressêye des impôrtantès plaeces do sistinmes
+Comment[zh_CN]=重要系统位置的菜单
+Comment[zh_TW]=重要系統位置選單
+Icon=system
+
+X-KDE-Library=kickermenu_systemmenu
diff --git a/kicker/menuext/system/systemmenu.h b/kicker/menuext/system/systemmenu.h
new file mode 100644
index 000000000..6f118d21c
--- /dev/null
+++ b/kicker/menuext/system/systemmenu.h
@@ -0,0 +1,50 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef SYSTEMMENU_H
+#define SYSTEMMENU_H
+
+#include <kpanelmenu.h>
+#include <kurl.h>
+#include <kdirlister.h>
+#include <kfileitem.h>
+
+class SystemMenu : public KPanelMenu
+{
+ Q_OBJECT
+
+ public:
+ SystemMenu(QWidget *parent, const char *name,
+ const QStringList & /*args*/);
+ ~SystemMenu();
+
+ protected slots:
+ void initialize();
+ void slotExec(int id);
+
+ void slotCompleted();
+
+ private:
+ void append(const QString &icon, const KURL &url, const QString &label);
+ KDirLister m_dirLister;
+ KFileItemList m_entries;
+ QMap<int, KURL> m_urlMap;
+};
+
+#endif
diff --git a/kicker/menuext/tom/Makefile.am b/kicker/menuext/tom/Makefile.am
new file mode 100644
index 000000000..4947ef77b
--- /dev/null
+++ b/kicker/menuext/tom/Makefile.am
@@ -0,0 +1,19 @@
+INCLUDES = -I$(srcdir)/../../libkicker -I$(srcdir)/../../ui -I$(srcdir)/../../core $(all_includes)
+
+kde_module_LTLIBRARIES = kickermenu_tom.la
+
+kickermenu_tom_la_SOURCES = tom.cc
+kickermenu_tom_la_LDFLAGS = $(all_libraries) -module -avoid-version
+kickermenu_tom_la_LIBADD = $(LIB_KDEUI)
+#$(top_builddir)/kicker/ui/libkicker_ui.la
+
+kickermenu_tom_la_METASOURCES = AUTO
+
+desktopmenu_DATA = tom.desktop
+desktopmenudir = $(kde_datadir)/kicker/menuext
+
+tomdata_DATA = destinations
+tomdatadir = $(kde_datadir)/kicker/tom
+
+messages:
+ $(XGETTEXT) *.cc -o $(podir)/libkickermenu_tom.pot
diff --git a/kicker/menuext/tom/README b/kicker/menuext/tom/README
new file mode 100644
index 000000000..2616c76c5
--- /dev/null
+++ b/kicker/menuext/tom/README
@@ -0,0 +1,65 @@
+What is TOM?
+============
+TOM stands for Task Oriented Menu and is a work in progress that will become a
+viable alternative to the current KMenu. Its goals include:
+
+ o Be task oriented
+ o Be simple and clear to use
+ o Create a smaller but usable menu
+ o Limited configurability through sensible defaults
+ o Have all configuration needs built right into the menu, including:
+ o Editor dialogs that can be called up from entries in the menu
+ o Context menus accessed by RMB clicking on a task for powerusers
+ o Allow locking down of menus through immutable settings
+ o Obeys Kicker and KDE Kiosk settings
+ o By making the TOM group of kickerrc immutable all config is removed
+ o By making a task group's rc file immutable, config options are removed
+ o Not require any modifications to the KDE menu system (applnk, etc)
+
+
+What is a "Task Oriented Menu"?
+================================
+A task oriented menu displays it's entries as "things to do" (or tasks) rather
+than simply listing all items that are available. Each of these tasks has an
+application or command associated with it, and this associated command can be
+changed without changing the task name or placement within the menu. The tasks
+are grouped by function and may map to programs, documents or actions.
+
+
+Todo list
+=========
+Editor dialogs
+Make the Destination entries work (only Run A Command is done)
+Populate and track Recent Applications menu entries
+ o Application launching should be caught somewhere in the KDE libs, ala
+ Recent Documents
+Writing out of config files to reflect runtime changes (deleted entries, etc)
+ o This requires keeping track of the config files used in creating the menu
+KDEDIR merging
+ o KDEDIRS are already consulted for taskgroups, but groups of the same name
+ should be merged
+Sane merging of menuext entries
+ o "Recent" items should go into the recent section
+ o Replace TOM's builin recent docs with the menuext version?
+ o Create a Recent Applications menuext?
+ o Add a way to quickly add/remove menuext items from TOM
+ (ala "Modify These Tasks")
+Check for updates on launch and bring them down/install them if they exist
+ o this includes new apps installed on the local box showing up in the menu
+ o "Get cool stuff" integration?
+Further refinement of wording / ordering in main menu (a perpetual TODO ;)
+Creation of real-world task groups
+Support plugins which can add arbitrary functionality to the menu
+
+
+Debate list
+===========
+What should be the default task entry format be:
+ a) Task Name
+ b) Task Name (App Name)
+ c) App Name (Task Name) <-- silly option =)
+Should "Run A Command..." be replaced by an inline combobox?
+ Pros: It's more obvious and will work even if kdesktop is gone. The widget
+ is already written (in tom.cc)
+ Cons: It makes it stand out too much over other entries, takes up more room
+ and isn't as powerful as the full minicli
diff --git a/kicker/menuext/tom/TASKGROUPS b/kicker/menuext/tom/TASKGROUPS
new file mode 100644
index 000000000..c1aa1ed98
--- /dev/null
+++ b/kicker/menuext/tom/TASKGROUPS
@@ -0,0 +1,49 @@
+Task Groups
+===========
+Tasks are grouped into common families of functionality. These groups are then
+stored in a standard KDE configuration file. The General category in the
+config file defines the icon (Icon), user visible name (Name), the number
+of tasks in the group (NumTasks) and optionally whether or not it is hidden
+(Hidden).
+
+For each task there is a numbered section in the file in the form TaskN. Each
+section contains the user visible name for the task (Name), the associated
+.desktop file and optionally whether or not it is hidden (Hidden).
+
+An example file can be found below.
+
+Alternatives
+============
+Alternative formats are possible, including making it more like the servicemenu
+.desktop format or the new virtual menu freedesktop.org draft standard. Here are
+the pros and cons of each of these options:
+
+servicemenu style:
+ o CONS: no extra flexibility, still have to do most checking manually
+ o PROS: familiar format
+
+virtual menu style:
+ o CONS: it's XML and that's way more trouble that we need to go through, and it
+ isn't really designed with this sort of menu in mind
+ o PROS: it's becoming a standard for desktop menus
+
+
+Example
+=======
+[General]
+Icon=konqueror
+Name=Internet
+NumTasks=3
+Hidden=true
+
+[Task0]
+Name=Browse the web
+DesktopFile=applications/konqbrowser.desktop
+
+[Task1]
+Name=EMail
+DesktopFile=Internet/KMail.desktop
+
+[Task2]
+Name=VNC
+DesktopFile=Internet/keystone.desktop
diff --git a/kicker/menuext/tom/destinations b/kicker/menuext/tom/destinations
new file mode 100644
index 000000000..6e075237f
--- /dev/null
+++ b/kicker/menuext/tom/destinations
@@ -0,0 +1,18 @@
+[General]
+NumTasks=4
+
+[Task0]
+Name=Consult Manuals
+DesktopFile=Help.desktop
+
+[Task1]
+Name=Find Files
+DesktopFile=Kfind.desktop
+
+[Task2]
+Name=Adjust Settings
+DesktopFile=KControl.desktop
+
+[Task3]
+Name=Browse My Files
+DesktopFile=Home.desktop
diff --git a/kicker/menuext/tom/tom.cc b/kicker/menuext/tom/tom.cc
new file mode 100644
index 000000000..80ea3e71d
--- /dev/null
+++ b/kicker/menuext/tom/tom.cc
@@ -0,0 +1,855 @@
+/* This file is part of the KDE project
+ Copyright (C) 2003 Aaron J. Seigo <aseigo@olympusproject.org>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <iostream>
+using namespace std;
+
+#include <unistd.h>
+#include <pwd.h>
+#include <sys/types.h>
+
+#include <qdir.h>
+#include <qimage.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpainter.h>
+#include <qregexp.h>
+#include <qsettings.h>
+#include <qstyle.h>
+#include <qfile.h>
+
+#include <dcopclient.h>
+#include <kapplication.h>
+#include <kcombobox.h>
+#include <kdialog.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kiconeffect.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kmimetype.h>
+#include <kpixmap.h>
+#include <krecentdocument.h>
+#include <kservice.h>
+#include <kservicegroup.h>
+#include <kstandarddirs.h>
+#include <kstdaction.h>
+#include <ksycocaentry.h>
+
+#include "menuinfo.h"
+#include "service_mnu.h"
+#include "kicker.h"
+#include "tom.h"
+
+const int configureMenuID = 1000;
+const int contextMenuTitleID = 10000;
+const int destMenuTitleID = 10001;
+
+extern "C"
+{
+ KDE_EXPORT void* init_kickermenu_tom()
+ {
+ KGlobal::locale()->insertCatalogue("libkickermenu_tom");
+ return new TOMFactory;
+ }
+};
+
+TOMFactory::TOMFactory(QObject *parent, const char *name)
+: KLibFactory(parent, name)
+{
+}
+
+QObject* TOMFactory::createObject(QObject *parent, const char *name, const char*, const QStringList&)
+{
+ return new TOM((QWidget*)parent, name);
+}
+
+#include <qmenudata.h>
+/*
+ * TODO: switch the backgroundmode when translucency turns on/off
+ * TODO: catch font changes too?
+ */
+class runMenuWidget : public QWidget, public QMenuItem
+{
+ public:
+ runMenuWidget(KPopupMenu* parent, int index)
+ : QWidget (parent),
+ m_menu(parent),
+ m_index(index)
+ {
+ setFocusPolicy(StrongFocus);
+
+ QHBoxLayout* runLayout = new QHBoxLayout(this);
+ textRect = fontMetrics().boundingRect(i18n("Run:"));
+ runLayout->setSpacing(KDialog::spacingHint());
+ runLayout->addSpacing((KDialog::spacingHint() * 3) + KIcon::SizeMedium + textRect.width());
+ icon = DesktopIcon("run", KIcon::SizeMedium);
+ /*QLabel* l1 = new QLabel(this);
+ QPixmap foo = DesktopIcon("run", KIcon::SizeMedium);
+ cout << "foo is: " << foo.width() << " by " << foo.height() << endl;
+ l1->setPixmap(foo);
+ runLayout->addWidget(l1);*/
+ /*QLabel* l2 = new QLabel(i18n("&Run: "), this);
+ l2->setBackgroundMode(Qt::X11ParentRelative, Qt::X11ParentRelative);
+ l2->setBuddy(this);
+ runLayout->addWidget(l2);*/
+ m_runEdit = new KHistoryCombo(this);
+ m_runEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ runLayout->addWidget(m_runEdit, 10);
+ runLayout->addSpacing(KDialog::spacingHint());
+
+ QSettings settings;
+ if (settings.readEntry("/KStyle/Settings/MenuTransparencyEngine", "Disabled") != "Disabled")
+ {
+ setBackgroundMode(Qt::X11ParentRelative, Qt::X11ParentRelative);
+ //l1->setBackgroundMode(Qt::X11ParentRelative, Qt::X11ParentRelative);
+ //l2->setBackgroundMode(Qt::X11ParentRelative, Qt::X11ParentRelative);
+ m_runEdit->setBackgroundMode(Qt::X11ParentRelative, Qt::X11ParentRelative);
+ }
+ else
+ {
+ /*setBackgroundMode(Qt::NoBackground, Qt::NoBackground);
+ l1->setBackgroundMode(Qt::NoBackground, Qt::NoBackground);
+ l2->setBackgroundMode(Qt::NoBackground, Qt::NoBackground);
+ m_runEdit->setBackgroundMode(Qt::NoBackground, Qt::NoBackground);*/
+ //l1->setAutoMask(true);
+ //l1->setBackgroundMode(Qt::NoBackground, Qt::NoBackground);
+ //l2->setBackgroundMode(Qt::X11ParentRelative, Qt::X11ParentRelative);
+ //m_runEdit->setBackgroundMode(Qt::X11ParentRelative, Qt::X11ParentRelative);
+ }
+
+ setMinimumHeight(KIcon::SizeMedium + 2);
+ }
+ ~runMenuWidget() {}
+
+
+ void paintEvent(QPaintEvent * /*e*/)
+ {
+ QPainter p(this);
+ QRect r(rect());
+ // ew, nasty hack. may result in coredumps due to horrid C-style cast???
+ kapp->style().drawControl(QStyle::CE_PopupMenuItem, &p, m_menu, r, palette().active(), QStyle::Style_Enabled,
+ QStyleOption(static_cast<QMenuItem*>(this), 0, KIcon::SizeMedium ));
+ p.drawPixmap(KDialog::spacingHint(), 1, icon);
+ p.drawText((KDialog::spacingHint() * 2) + KIcon::SizeMedium, textRect.height() + ((height() - textRect.height()) / 2), i18n("Run:"));
+ }
+
+ void focusInEvent (QFocusEvent* e)
+ {
+ if (!e || e->gotFocus())
+ {
+ m_menu->setActiveItem(m_index);
+ m_runEdit->setFocus();
+ }
+ }
+
+ void enterEvent(QEvent*)
+ {
+ focusInEvent(0);
+ }
+
+ private:
+ KPopupMenu* m_menu;
+ KHistoryCombo* m_runEdit;
+ QPixmap icon;
+ QRect textRect;
+ int m_index;
+};
+
+TOM::TOM(QWidget *parent, const char *name)
+ : KPanelMenu(parent, name),
+ m_maxIndex(0)
+{
+ disableAutoClear();
+ m_submenus.setAutoDelete(true);
+ setCaption(i18n("Task-Oriented Menu"));
+
+ // KMenu legacy: support some menu config options
+ KConfig* config = KGlobal::config();
+ config->setGroup("menus");
+ m_detailedTaskEntries = config->readBoolEntry("DetailedMenuEntries", false);
+ if (m_detailedTaskEntries)
+ {
+ m_detailedNamesFirst = config->readBoolEntry("DetailedEntriesNamesFirst", false);
+ }
+
+ m_isImmutable = Kicker::kicker()->isImmutable() || config->groupIsImmutable("TOM");
+ config->setGroup("TOM");
+ m_largerFont = font();
+ m_largerFont = config->readFontEntry("Font", &m_largerFont);
+}
+
+TOM::~TOM()
+{
+ slotClear();
+}
+
+void TOM::initializeRecentApps(QPopupMenu* menu)
+{
+ /*
+ * TODO: make this real
+ * add a KDE-wide "commands run" registry
+ */
+
+ if (!m_isImmutable)
+ {
+ menu->insertSeparator();
+ menu->insertItem(i18n("Configure This Menu"), configureMenuID);
+ }
+}
+
+void TOM::initializeRecentDocs()
+{
+ m_recentDocsMenu->clear();
+ m_recentDocsMenu->insertItem(SmallIconSet("history_clear"), i18n("Clear History"),
+ this, SLOT(clearRecentDocHistory()));
+ m_recentDocsMenu->insertSeparator();
+
+ m_recentDocURLs = KRecentDocument::recentDocuments();
+
+ if (m_recentDocURLs.isEmpty())
+ {
+ setItemEnabled(m_recentDocsMenu->insertItem(i18n("No Entries")), false);
+ return;
+ }
+
+ int id = 0;
+ for (QStringList::ConstIterator it = m_recentDocURLs.begin();
+ it != m_recentDocURLs.end();
+ ++it)
+ {
+ /*
+ * TODO: make the number of visible items configurable?
+ */
+
+ KDesktopFile f(*it, true /* read only */);
+ m_recentDocsMenu->insertItem(DesktopIcon(f.readIcon(), KIcon::SizeMedium),
+ f.readName().replace('&', "&&"), id);
+ ++id;
+ }
+}
+
+int TOM::appendTaskGroup(KConfig& config, bool inSubMenu)
+{
+ if (!config.hasGroup("General"))
+ {
+ return 0;
+ }
+
+ config.setGroup("General");
+
+ if (config.readBoolEntry("Hidden", false))
+ {
+ return 0;
+ }
+
+ QString name = config.readEntry("Name", i18n("Unknown"));
+ QString icon = config.readEntry("Icon");
+ int numTasks = config.readNumEntry("NumTasks", 0);
+
+ if (numTasks < 1)
+ {
+ return 0;
+ }
+
+ KPopupMenu* taskGroup;
+ if( inSubMenu )
+ {
+ taskGroup = new KPopupMenu(this);
+
+ if (icon != QString::null)
+ {
+ insertItem(DesktopIcon(icon, KIcon::SizeMedium), name, taskGroup);
+ }
+ else
+ {
+ insertItem(name, taskGroup);
+ }
+ }
+ else
+ {
+ taskGroup = this;
+ }
+
+ int foundTasks = 0;
+ for (int i = 0; i < numTasks; ++i)
+ {
+ QString groupName = QString("Task%1").arg(i);
+
+ if (config.hasGroup(groupName))
+ {
+ config.setGroup(groupName);
+
+ if (config.readBoolEntry("Hidden", false))
+ {
+ continue;
+ }
+
+ QString name = config.readEntry("Name");
+ // in case the name contains an ampersand, double 'em up
+ name.replace("&", "&&");
+ QString desktopfile = config.readPathEntry("DesktopFile");
+ KService::Ptr pService = KService::serviceByDesktopPath(desktopfile);
+
+ if (!pService)
+ {
+ pService = KService::serviceByDesktopName(desktopfile);
+
+ if (!pService)
+ {
+ continue;
+ }
+ }
+
+ QString execName = pService->name();
+ QString icon = pService->icon();
+
+ if (m_detailedTaskEntries && !execName.isEmpty())
+ {
+ QString tmp = i18n("%1 (%2)");
+
+ if (m_detailedNamesFirst)
+ {
+ name = tmp.arg(execName).arg(name);
+ }
+ else
+ {
+ name = tmp.arg(name).arg(execName);
+ }
+ }
+
+ ++m_maxIndex;
+ if (icon.isEmpty())
+ {
+ taskGroup->insertItem(name, m_maxIndex);
+ }
+ else
+ {
+
+ QIconSet iconset = BarIconSet(icon, 22);
+ if (iconset.isNull())
+ taskGroup->insertItem(name, m_maxIndex);
+ else
+ taskGroup->insertItem(iconset, name, m_maxIndex);
+
+ }
+
+ m_tasks.insert(m_maxIndex, pService);
+ ++foundTasks;
+ }
+ }
+
+ // if we end up with an empty task group, get rid of the menu
+ if (foundTasks == 0)
+ {
+ if (inSubMenu)
+ {
+ delete taskGroup;
+ }
+
+ return 0;
+ }
+
+ connect(taskGroup, SIGNAL(activated(int)), this, SLOT(runTask(int)));
+ // so we have an actual task group menu with tasks, let's add it
+
+ if (inSubMenu)
+ {
+ QObject::connect(taskGroup, SIGNAL(aboutToShowContextMenu(KPopupMenu*, int, QPopupMenu*)),
+ this, SLOT(contextualizeRMBmenu(KPopupMenu*, int, QPopupMenu*)));
+
+ m_submenus.append(taskGroup);
+
+ taskGroup->setFont(m_largerFont);
+ taskGroup->setKeyboardShortcutsEnabled(true);
+
+ if (!m_isImmutable && !config.isImmutable())
+ {
+ taskGroup->insertSeparator();
+ taskGroup->insertItem("Modify These Tasks", configureMenuID);
+ QPopupMenu* rmbMenu = taskGroup->contextMenu();
+ rmbMenu->setFont(m_largerFont);
+ KPopupTitle* title = new KPopupTitle();
+ title->setText(i18n("%1 Menu Editor").arg(name));
+ rmbMenu->insertItem(title, contextMenuTitleID);
+ rmbMenu->insertItem(i18n("Add This Task to Panel"));
+ rmbMenu->insertItem(i18n("Modify This Task..."));
+ rmbMenu->insertItem(i18n("Remove This Task..."), this, SLOT(removeTask()));
+ rmbMenu->insertItem(i18n("Insert New Task..."));
+ }
+ }
+
+ return foundTasks;
+}
+/*
+ * TODO: track configuration file changes.
+void TOM::configChanged()
+{
+ KPanelMenu::configChanged();
+ setInitialized(false);
+ initialize();
+}
+*/
+void TOM::initialize()
+{
+ if (initialized())
+ {
+ return;
+ }
+
+ setInitialized(true);
+ m_submenus.clear();
+ m_tasks.clear();
+ clear();
+
+ /* hack to make items larger. should use something better?
+ m_largerFont = font();
+ if (m_largerFont.pointSize() < 18)
+ {
+ m_largerFont.setPointSize(18);
+ }
+ setFont(m_largerFont);*/
+
+
+ /*if (!loadSidePixmap())
+ {
+ m_sidePixmap = m_sideTilePixmap = QPixmap();
+ }
+ else
+ {
+ connect(kapp, SIGNAL(kdisplayPaletteChanged()), SLOT(paletteChanged()));
+ }*/
+
+ // TASKS
+ insertTitle(i18n("Tasks"), contextMenuTitleID);
+
+ QStringList dirs = KGlobal::dirs()->findDirs("data", "kicker/tom/");
+ QStringList::ConstIterator dIt = dirs.begin();
+ QStringList::ConstIterator dEnd = dirs.end();
+
+ for (; dIt != dEnd; ++dIt )
+ {
+ QDir dir(*dIt);
+
+ QStringList entries = dir.entryList("*rc", QDir::Files);
+ QStringList::ConstIterator eIt = entries.begin();
+ QStringList::ConstIterator eEnd = entries.end();
+
+ for (; eIt != eEnd; ++eIt )
+ {
+ KConfig config(*dIt + *eIt);
+ appendTaskGroup(config);
+ }
+ }
+
+ PanelServiceMenu* moreApps = new PanelServiceMenu(QString::null, QString::null, this, "More Applications");
+ moreApps->setFont(m_largerFont);
+ insertItem(DesktopIcon("misc", KIcon::SizeMedium), i18n("More Applications"), moreApps);
+ m_submenus.append(moreApps);
+
+ if (!m_isImmutable)
+ {
+ insertSeparator();
+ // TODO: connect to taskgroup edits
+ insertItem("Modify The Above Tasks");
+ }
+
+ // DESTINATIONS
+ insertTitle(i18n("Destinations"), destMenuTitleID);
+ int numDests = 0;
+ QString destinationsConfig = locate("appdata", "tom/destinations");
+
+ if (!destinationsConfig.isEmpty() && QFile::exists(destinationsConfig))
+ {
+ KConfig config(destinationsConfig);
+ numDests = appendTaskGroup(config, false);
+ }
+
+ if (numDests == 0)
+ {
+ removeItem(destMenuTitleID);
+ }
+ else if (kapp->authorize("run_command"))
+ {
+ insertItem(DesktopIcon("run", KIcon::SizeMedium), i18n("Run Command..."), this, SLOT(runCommand()));
+ }
+
+ // RECENTLY USED ITEMS
+ insertTitle(i18n("Recently Used Items"), contextMenuTitleID);
+
+ m_recentDocsMenu = new KPopupMenu(this, "recentDocs");
+ m_recentDocsMenu->setFont(m_largerFont);
+ connect(m_recentDocsMenu, SIGNAL(aboutToShow()), this, SLOT(initializeRecentDocs()));
+ connect(m_recentDocsMenu, SIGNAL(activated(int)), this, SLOT(openRecentDocument(int)));
+ insertItem(DesktopIcon("document", KIcon::SizeMedium), i18n("Recent Documents"), m_recentDocsMenu);
+ m_submenus.append(m_recentDocsMenu);
+
+ KPopupMenu* recentApps = new KPopupMenu(this, "recentApps");
+ recentApps->setFont(m_largerFont);
+ recentApps->setKeyboardShortcutsEnabled(true);
+ initializeRecentApps(recentApps);
+ insertItem(i18n("Recent Applications"), recentApps);
+ m_submenus.append(recentApps);
+
+ // SPECIAL ITEMS
+ insertTitle(i18n("Special Items"), contextMenuTitleID);
+
+ // if we have no destinations, put the run command here
+ if (numDests == 0 && kapp->authorize("run_command"))
+ {
+ insertItem(DesktopIcon("run", KIcon::SizeMedium), i18n("Run Command..."), this, SLOT(runCommand()));
+ }
+
+
+ KConfig* config = KGlobal::config();
+ QStringList menu_ext = config->readListEntry("Extensions");
+ if (!menu_ext.isEmpty())
+ {
+ bool needSeparator = false;
+ for (QStringList::ConstIterator it = menu_ext.begin(); it != menu_ext.end(); ++it)
+ {
+ MenuInfo info(*it);
+ if (!info.isValid())
+ {
+ continue;
+ }
+
+ KPanelMenu *menu = info.load();
+ if (menu)
+ {
+ ++m_maxIndex;
+ insertItem(DesktopIcon(info.icon(), KIcon::SizeMedium), info.name(), menu, m_maxIndex);
+ m_submenus.append(menu);
+ needSeparator = true;
+ }
+ }
+
+ if (needSeparator)
+ {
+ insertSeparator();
+ }
+ }
+
+
+ QString username;
+ struct passwd *userInfo = getpwuid(getuid());
+ if (userInfo)
+ {
+ username = QString::fromLocal8Bit(userInfo->pw_gecos);
+ if (username.find(',') != -1)
+ {
+ // Remove everything from and including first comma
+ username.truncate(username.find(','));
+ }
+
+ if (username.isEmpty())
+ {
+ username = QString::fromLocal8Bit(userInfo->pw_name);
+ }
+ }
+
+ insertItem(DesktopIcon("exit", KIcon::SizeMedium),
+ i18n("Logout %1").arg(username), this, SLOT(logout()));
+}
+
+void TOM::reload()
+{
+ setInitialized(false);
+ initialize();
+}
+
+void TOM::contextualizeRMBmenu(KPopupMenu* menu, int menuItem, QPopupMenu* ctxMenu)
+{
+ if (menuItem == configureMenuID)
+ {
+ menu->hideContextMenu();
+ return;
+ }
+
+ ctxMenu->removeItem(contextMenuTitleID);
+ QString text = menu->text(menuItem);
+ int parens = text.find('(') - 1;
+ if (parens > 0)
+ {
+ text = text.left(parens);
+ }
+ KPopupTitle* title = new KPopupTitle();
+ title->setText(i18n("The \"%2\" Task").arg(text));
+ ctxMenu->insertItem(title, contextMenuTitleID, 0);
+}
+
+void TOM::slotClear()
+{
+ KPanelMenu::slotClear();
+ m_submenus.clear();
+ m_tasks.clear();
+}
+
+void TOM::slotExec(int /* id */)
+{
+ // Reimplemented because we have to
+}
+
+void TOM::removeTask()
+{
+ // TODO: write this change out to the appropriate config file
+ QString task = KPopupMenu::contextMenuFocus()->text(KPopupMenu::contextMenuFocusItem());
+ if (KMessageBox::warningContinueCancel(this,
+ i18n("<qt>Are you sure you want to remove the <strong>%1</strong> task?<p>"
+ "<em>Tip: You can restore the task after it has been removed by selecting the &quot;Modify These Tasks&quot; entry</em></qt>").arg(task),
+ i18n("Remove Task?"),KStdGuiItem::del()) == KMessageBox::Continue)
+ {
+ m_tasks.remove(KPopupMenu::contextMenuFocusItem());
+ KPopupMenu::contextMenuFocus()->removeItem(KPopupMenu::contextMenuFocusItem());
+ }
+}
+
+// TODO: should we have a side graphic like the K Menu? personally, i don't
+// think it helps usability. it's nice for branding, but that's it. perhaps a
+// top image, or something blended with the actual menu background? deffinitely
+// a job for a graphic artist.
+/*
+ * if this goes in, it should be shared w/the kmenu
+ *
+bool TOM::loadSidePixmap()
+{
+ KConfig *config = KGlobal::config();
+ QColor color = palette().active().highlight();
+ QImage image;
+
+ config->setGroup("WM");
+ QColor activeTitle = config->readColorEntry("activeBackground", &color);
+ QColor inactiveTitle = config->readColorEntry("inactiveBackground", &color);
+
+ config->setGroup("KMenu");
+ if (!config->readBoolEntry("Usem_sidePixmap", true))
+ return false;
+
+ // figure out which color is most suitable for recoloring to
+ int h1, s1, v1, h2, s2, v2, h3, s3, v3;
+ activeTitle.hsv(&h1, &s1, &v1);
+ inactiveTitle.hsv(&h2, &s2, &v2);
+ palette().active().background().hsv(&h3, &s3, &v3);
+
+ if ( (abs(h1-h3)+abs(s1-s3)+abs(v1-v3) < abs(h2-h3)+abs(s2-s3)+abs(v2-v3)) &&
+ ((abs(h1-h3)+abs(s1-s3)+abs(v1-v3) < 32) || (s1 < 32)) && (s2 > s1))
+ color = inactiveTitle;
+ else
+ color = activeTitle;
+
+ // limit max/min brightness
+ int r, g, b;
+ color.rgb(&r, &g, &b);
+ int gray = qGray(r, g, b);
+ if (gray > 180) {
+ r = (r - (gray - 180) < 0 ? 0 : r - (gray - 180));
+ g = (g - (gray - 180) < 0 ? 0 : g - (gray - 180));
+ b = (b - (gray - 180) < 0 ? 0 : b - (gray - 180));
+ } else if (gray < 76) {
+ r = (r + (76 - gray) > 255 ? 255 : r + (76 - gray));
+ g = (g + (76 - gray) > 255 ? 255 : g + (76 - gray));
+ b = (b + (76 - gray) > 255 ? 255 : b + (76 - gray));
+ }
+ color.setRgb(r, g, b);
+
+ QString sideName = config->readEntry("SideName", "kside.png");
+ QString sideTileName = config->readEntry("SideTileName", "kside_tile.png");
+
+ image.load(locate("data", "kicker/pics/" + sideName));
+
+ if (image.isNull())
+ {
+ return false;
+ }
+
+ KIconEffect::colorize(image, color, 1.0);
+ m_sidePixmap.convertFromImage(image);
+
+ image.load(locate("data", "kicker/pics/" + sideTileName));
+
+ if (image.isNull())
+ {
+ return false;
+ }
+
+ KIconEffect::colorize(image, color, 1.0);
+ m_sideTilePixmap.convertFromImage(image);
+
+ if (m_sidePixmap.width() != m_sideTilePixmap.width())
+ {
+ return false;
+ }
+
+ // pretile the pixmap to a height of at least 100 pixels
+ if (m_sideTilePixmap.height() < 100)
+ {
+ int tiles = (int)(100 / m_sideTilePixmap.height()) + 1;
+ QPixmap preTiledPixmap(m_sideTilePixmap.width(), m_sideTilePixmap.height() * tiles);
+ QPainter p(&preTiledPixmap);
+ p.drawTiledPixmap(preTiledPixmap.rect(), m_sideTilePixmap);
+ m_sideTilePixmap = preTiledPixmap;
+ }
+
+ return true;
+}
+
+void TOM::paletteChanged()
+{
+ if (!loadSidePixmap())
+ m_sidePixmap = m_sideTilePixmap = QPixmap();
+}
+
+void TOM::setMinimumSize(const QSize & s)
+{
+ KPanelMenu::setMinimumSize(s.width() + m_sidePixmap.width(), s.height());
+}
+
+void TOM::setMaximumSize(const QSize & s)
+{
+ KPanelMenu::setMaximumSize(s.width() + m_sidePixmap.width(), s.height());
+}
+
+void TOM::setMinimumSize(int w, int h)
+{
+ KPanelMenu::setMinimumSize(w + m_sidePixmap.width(), h);
+}
+
+void TOM::setMaximumSize(int w, int h)
+{
+ KPanelMenu::setMaximumSize(w + m_sidePixmap.width(), h);
+}
+
+QRect TOM::sideImageRect()
+{
+ return QStyle::visualRect( QRect( frameWidth(), frameWidth(), m_sidePixmap.width(),
+ height() - 2*frameWidth() ), this );
+}
+
+void TOM::resizeEvent(QResizeEvent * e)
+{
+ setFrameRect( QStyle::visualRect( QRect( m_sidePixmap.width(), 0,
+ width() - m_sidePixmap.width(), height() ), this ) );
+}
+
+void TOM::paintEvent(QPaintEvent * e)
+{
+ if (m_sidePixmap.isNull()) {
+ KPanelMenu::paintEvent(e);
+ return;
+ }
+
+ QPainter p(this);
+
+ style().drawPrimitive( QStyle::PE_PanelPopup, &p,
+ QRect( 0, 0, width(), height() ),
+ colorGroup(), QStyle::Style_Default,
+ QStyleOption( frameWidth(), 0 ) );
+
+ QRect r = sideImageRect();
+ r.setBottom( r.bottom() - m_sidePixmap.height() );
+ p.drawTiledPixmap( r, m_sideTilePixmap );
+
+ r = sideImageRect();
+ r.setTop( r.bottom() - m_sidePixmap.height() );
+ p.drawPixmap( r, m_sidePixmap );
+
+ drawContents( &p );
+}
+
+QMouseEvent TOM::translateMouseEvent( QMouseEvent* e )
+{
+ QRect side = sideImageRect();
+
+ if ( !side.contains( e->pos() ) )
+ return *e;
+
+ QPoint newpos( e->pos() );
+ QApplication::reverseLayout() ?
+ newpos.setX( newpos.x() - side.width() ) :
+ newpos.setX( newpos.x() + side.width() );
+ QPoint newglobal( e->globalPos() );
+ QApplication::reverseLayout() ?
+ newglobal.setX( newpos.x() - side.width() ) :
+ newglobal.setX( newpos.x() + side.width() );
+
+ return QMouseEvent( e->type(), newpos, newglobal, e->button(), e->state() );
+}
+
+void TOM::mousePressEvent(QMouseEvent * e)
+{
+ QMouseEvent newEvent = translateMouseEvent(e);
+ KPanelMenu::mousePressEvent( &newEvent );
+}
+
+void TOM::mouseReleaseEvent(QMouseEvent *e)
+{
+ QMouseEvent newEvent = translateMouseEvent(e);
+ KPanelMenu::mouseReleaseEvent( &newEvent );
+}
+
+void TOM::mouseMoveEvent(QMouseEvent *e)
+{
+ QMouseEvent newEvent = translateMouseEvent(e);
+ KPanelMenu::mouseMoveEvent( &newEvent );
+}*/
+
+extern int kicker_screen_number;
+
+void TOM::runCommand()
+{
+ QByteArray data;
+ QCString appname( "kdesktop" );
+ if ( kicker_screen_number )
+ appname.sprintf("kdesktop-screen-%d", kicker_screen_number);
+
+ kapp->updateRemoteUserTimestamp( appname );
+ kapp->dcopClient()->send( appname, "KDesktopIface",
+ "popupExecuteCommand()", data );
+}
+
+void TOM::runTask(int id)
+{
+ if (!m_tasks.contains(id)) return;
+
+ kapp->propagateSessionManager();
+ KApplication::startServiceByDesktopPath(m_tasks[id]->desktopEntryPath(),
+ QStringList(), 0, 0, 0, "", true);
+}
+
+void TOM::clearRecentDocHistory()
+{
+ KRecentDocument::clear();
+}
+
+void TOM::openRecentDocument(int id)
+{
+ if (id >= 0)
+ {
+ kapp->propagateSessionManager();
+ KURL u;
+ u.setPath(m_recentDocURLs[id]);
+ KDEDesktopMimeType::run(u, true);
+ }
+}
+
+void TOM::logout()
+{
+ kapp->requestShutDown();
+}
+
+#include "tom.moc"
diff --git a/kicker/menuext/tom/tom.desktop b/kicker/menuext/tom/tom.desktop
new file mode 100644
index 000000000..f59a4beab
--- /dev/null
+++ b/kicker/menuext/tom/tom.desktop
@@ -0,0 +1,75 @@
+[Desktop Entry]
+Name=TOM
+Name[bg]=Задачно меню
+Name[eo]=PTMS
+Name[hi]=टीओएम
+Name[te]=టామ్
+Name[zh_CN]=任务菜单
+Comment=A task oriented menu system
+Comment[af]='n Taak geörienteerde kieslys stelsel
+Comment[ar]=نظام قوائم وظيفيّ المنحى
+Comment[be]=Сістэма меню, арыентаваная на выкананне шматлікіх задачаў
+Comment[bg]=Меню, ориентирано към изпълнение на задачи
+Comment[bn]=টাস্ক ওরিয়েন্টেড মেনু সিস্টেম
+Comment[bs]=Sistem menija orjentisan na zadatke
+Comment[ca]=Una tasca orientada al menú del sistema
+Comment[cs]=Úkolově orientovaný systém nabídek
+Comment[csb]=Systema menu skòncentrowónô na dzejaniô
+Comment[cy]=Cysawd dewislenni a gyfeirir at dasgau
+Comment[da]=Et opgaveorienteret menusystem
+Comment[de]=Aufgabenorientiertes Menüsystem
+Comment[el]=Ένα σύστημα μενού προσανατολισμένο στην εργασία
+Comment[eo]=Pertaska menusistemo
+Comment[es]=Sistema de menú orientado a tareas
+Comment[et]=Ülesandele orienteeritud menüüsüsteem
+Comment[eu]=Atazetara zuzendutako menu sistema
+Comment[fa]=یک سیستم گزینگان جهت‌دار تکلیف
+Comment[fi]=Tehtäväpohjainen valikkojärjestelmä
+Comment[fr]=Un menu système par tâches
+Comment[fy]=In taakoriïntearre menusysteem
+Comment[ga]=Córas roghchláir dírithe ar thascanna
+Comment[gl]=Un menu do sistema orientado a tarefas
+Comment[he]=מערכת תפריטים מונחת משימות
+Comment[hi]=कार्य अनुकूल मेन्यू तंत्र
+Comment[hr]=Sustav izbornika orijentiran zadacima
+Comment[hu]=Feladatorientált menürendszer
+Comment[is]=Verkefnabyggt valmyndakerfi
+Comment[it]=Un sistema di menu organizzato per funzione
+Comment[ja]=作業タスクベースのメニューシステム
+Comment[ka]=ამოცანაზე ორიენტირებული მენიუს სისტემა
+Comment[kk]=Тапсырмаларға арналған мәзір жүйесі
+Comment[km]=ប្រព័ន្ធ​ម៉ឺនុយ​ដែល​សម្រប​តាម​ភារកិច្ច
+Comment[lt]=Į užduotis orientuota meniu sistema
+Comment[lv]=Uz darbībām orientēta izvēlņu sistēma
+Comment[mk]=Систем од менија ориентиран кон задачи
+Comment[mn]=Үйлдэлд чиглэсэн цэсийн систем
+Comment[ms]=Sistem menu berorientasikan tugas
+Comment[mt]=Menu imqassam skond ix-xogħol li trid tagħmel
+Comment[nb]=Et oppgaveorientert menysystem
+Comment[nds]=Menüsysteem, dat an Opgaven utricht is
+Comment[ne]=कार्य उन्मुख मेनु प्रणाली
+Comment[nl]=Een taakgeörienteerd menusysteem
+Comment[nn]=Eit oppgåveorientert menysystem
+Comment[pa]=ਇੱਕ ਕੰਮ ਆਧਾਰਿਤ ਮੇਨੂ ਸਿਸਟਮ
+Comment[pl]=System menu zorientowany na zadania
+Comment[pt]=Um sistema de menus orientado por tarefas
+Comment[pt_BR]=Um sistema de menu orientado a tarefa
+Comment[ro]=Un meniu orientat pe probleme de rezolvat
+Comment[ru]=Система меню, ориентированная на задачи
+Comment[rw]=Ibikubiyemo Sisitemu bijyanye n'Igikorwa
+Comment[sk]=Systém menu podľa činnosti
+Comment[sl]=Opravilno narejen menijski sistem
+Comment[sr]=Систем менија оријентисан према задацима
+Comment[sr@Latn]=Sistem menija orijentisan prema zadacima
+Comment[sv]=Uppgiftsrelaterat menysystem
+Comment[ta]=பணி சார்ந்த பட்டியல் அமைப்பு
+Comment[th]=ระบบเมนูที่ใช้แนวทางของงาน
+Comment[tr]=Görev yönelimli bir menü sistemi
+Comment[tt]=Yökkä yünälgän saylaq sisteme
+Comment[uk]=Система меню орієнтована на завдання
+Comment[vi]=Hệ thực đơn hướng tác vụ
+Comment[wa]=Ene dressêye sistinme fwaite po les bouyes
+Comment[zh_CN]=面向任务的菜单系统
+Comment[zh_TW]=一個工作導向的選單系統
+Icon=kmenu
+X-KDE-Library=kickermenu_tom
diff --git a/kicker/menuext/tom/tom.h b/kicker/menuext/tom/tom.h
new file mode 100644
index 000000000..663cb05d6
--- /dev/null
+++ b/kicker/menuext/tom/tom.h
@@ -0,0 +1,110 @@
+/* This file is part of the KDE project
+ Copyright (C) 2003 Aaron J. Seigo <aseigo@olympusproject.org>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __tom_h_
+#define __tom_h_
+
+#include <qpixmap.h>
+
+#include <kpanelmenu.h>
+#include <klibloader.h>
+
+class KPopupMenu;
+class QPopupMenu;
+
+typedef QPtrList<QPopupMenu> PopupMenuList;
+typedef QMap<int, KService::Ptr> TaskMap;
+
+class TOM : public KPanelMenu
+{
+ Q_OBJECT
+
+ public:
+ TOM(QWidget *parent = 0, const char *name = 0);
+ ~TOM();
+
+ // for the side image
+ /*void setMinimumSize(const QSize &);
+ void setMaximumSize(const QSize &);
+ void setMinimumSize(int, int);
+ void setMaximumSize(int, int); */
+
+ protected slots:
+ void slotClear();
+ void slotExec(int);
+ //void configChanged();
+ void initialize();
+ void contextualizeRMBmenu(KPopupMenu* menu, int menuItem, QPopupMenu* ctxMenu);
+ //void paletteChanged();
+ void clearRecentDocHistory();
+ void runCommand();
+ void runTask(int id);
+ void initializeRecentDocs();
+ void openRecentDocument(int id);
+ void logout();
+
+ /*
+ * slots for the RMB menu on task group
+ */
+ void removeTask();
+
+ protected:
+ void reload();
+
+ int appendTaskGroup(KConfig& config, bool inSubMenu = true );
+ void initializeRecentApps(QPopupMenu* menu);
+ //int insertTOMTitle(QPopupMenu* menu, const QString &text, int id = -1, int index = -1);
+
+ /*
+ * this stuff should be shared w/the kmenu
+
+ QRect sideImageRect();
+ QMouseEvent translateMouseEvent( QMouseEvent* e );
+ void resizeEvent(QResizeEvent *);
+ void paintEvent(QPaintEvent *);
+ void mousePressEvent(QMouseEvent *);
+ void mouseReleaseEvent(QMouseEvent *);
+ void mouseMoveEvent(QMouseEvent *);
+ bool loadSidePixmap();
+
+ QPixmap m_sidePixmap;
+ QPixmap m_sideTilePixmap;*/
+ PopupMenuList m_submenus;
+ QFont m_largerFont;
+ int m_maxIndex;
+ bool m_isImmutable;
+ bool m_detailedTaskEntries;
+ bool m_detailedNamesFirst;
+ TaskMap m_tasks;
+ KPopupMenu* m_recentDocsMenu;
+ QStringList m_recentDocURLs;
+};
+
+class TOMFactory : public KLibFactory
+{
+ public:
+ TOMFactory(QObject *parent = 0, const char *name = 0);
+
+ protected:
+ QObject* createObject(QObject *parent = 0, const char *name = 0,
+ const char *classname = "QObject",
+ const QStringList& args = QStringList());
+};
+
+
+#endif