Hello community, here is the log from the commit of package kdeaddons3 for openSUSE:Factory checked in at Thu Sep 22 12:55:45 CEST 2011.
-------- New Changes file: --- /dev/null 2010-08-26 16:28:41.000000000 +0200 +++ /mounts/work_src_done/STABLE/kdeaddons3/kdeaddons3.changes 2010-07-30 16:45:36.000000000 +0200 @@ -0,0 +1,772 @@ +------------------------------------------------------------------- +Fri Jul 30 16:44:56 CEST 2010 - [email protected] + +- fix gcc 4.5 build + +------------------------------------------------------------------- +Wed Aug 20 18:24:34 CEST 2008 - [email protected] + +- update to 3.5.10 + * bugfixes, translations + +------------------------------------------------------------------- +Fri May 9 10:30:07 CEST 2008 - [email protected] + +- 3_5_BRANCH.diff update: + * fix popup in babelfish plugin + +------------------------------------------------------------------- +Thu Mar 13 11:12:51 CET 2008 - [email protected] + +- update 3_5_BRANCH diff: + * fix crash in kate tabbar extension (bko#157834) + +------------------------------------------------------------------- +Wed Feb 13 23:29:20 CET 2008 - [email protected] + +- update to 3.5.9: + * bugfixes, translation update + +------------------------------------------------------------------- +Thu Nov 15 19:01:59 CET 2007 - [email protected] + +- update 3.5 branch diff to fix gcc 4.3 compilation + +------------------------------------------------------------------- +Sat Oct 20 15:37:25 CEST 2007 - [email protected] + +- update to 3.5 branch to fix gcc 4.3 compilation + +------------------------------------------------------------------- +Tue Oct 9 16:12:03 CEST 2007 - [email protected] + +- update to 3.5.8: performance improvements for dirfilter plugin + +------------------------------------------------------------------- +Fri Sep 28 15:55:13 CEST 2007 - [email protected] + +- fix quoting in realmedia handler (#326912) + +------------------------------------------------------------------- +Sat Aug 4 18:57:28 CEST 2007 - [email protected] + +- add 3_5_BRANCH.diff + +------------------------------------------------------------------- +Tue Jul 17 12:27:24 CEST 2007 - [email protected] + +- remove fsview.desktop + +------------------------------------------------------------------- +Mon Jun 4 13:40:54 CEST 2007 - [email protected] + +- move kde_post_install + +------------------------------------------------------------------- +Wed May 23 21:56:08 CEST 2007 - [email protected] + +- adapt BuildRequires after kdegames3-devel split-off + +------------------------------------------------------------------- +Mon May 14 23:12:15 CEST 2007 - [email protected] + +- update to 3.5.7 + * Kate Symbol Viewer: Improved C++ and Java support. + * Bugfixes in the web archiver and web validator plugins + +------------------------------------------------------------------- +Fri Apr 20 16:21:19 CEST 2007 - [email protected] + +- use C version of db + +------------------------------------------------------------------- +Fri Jan 26 09:57:15 CET 2007 - [email protected] + +- add 3_5_BRANCH.diff to fix minor privacy issue in webarchiver + +------------------------------------------------------------------- +Tue Jan 16 15:36:42 CET 2007 - [email protected] + +- update to 3.5.6 release: + * several bugfixes to Konqueror plugins + +------------------------------------------------------------------- +Fri Dec 1 14:52:10 CET 2006 - [email protected] + +- fix possible crash of KonquerorDirFilterPlugin (#223957) + +------------------------------------------------------------------- +Wed Nov 8 16:51:38 CET 2006 - [email protected] + +- remove historic "Provides:" (#218798) + +------------------------------------------------------------------- +Tue Oct 31 16:20:00 CET 2006 - [email protected] + +- add 3_5_BRANCH.diff: + - Fix 7zip support + - Changing default save location for webarchiv plugin + - translation update + +------------------------------------------------------------------- +Mon Oct 9 12:56:22 CEST 2006 - [email protected] + +- fix konqueror blocks while opening a profile with more than + one windows (#210147) + +------------------------------------------------------------------- +Tue Oct 3 10:29:01 CEST 2006 - [email protected] + +- update to 3.5.5 release tarball + +------------------------------------------------------------------- +Tue Sep 19 13:44:33 CEST 2006 - [email protected] + +- fix previous commit/regression and remember last view mode + +------------------------------------------------------------------- +Mon Sep 11 21:40:21 CEST 2006 - [email protected] + +- backporting patch from opensuse contributor kling-kde to fix + konqueror crashes (#204388, #204369) + +------------------------------------------------------------------- +Fri Sep 1 17:25:51 CEST 2006 - [email protected] + +- improve permanent-searchbar.diff (synchronious check, other icon) + +------------------------------------------------------------------- +Wed Aug 23 11:17:43 CEST 2006 - [email protected] + +- update 3_5_BRANCH.diff (Akregator and Kate plugin fixes) + +------------------------------------------------------------------- +Sun Jul 23 22:12:59 CEST 2006 - [email protected] + +- update to KDE 3.5.4: + * Konqueror searchbar plugin: hint the selected search provider + +------------------------------------------------------------------- +Tue Jul 11 15:52:26 CEST 2006 - [email protected] + +- permanent visible searchbar in file mode offering Beagle search + (if beagled is running) and filtering of current file view + +------------------------------------------------------------------- +Mon Jun 19 15:01:13 CEST 2006 - [email protected] + +- add 3.5 branch diff for searchbar click hint texts +- add configuration menu for Google Suggest usage + +------------------------------------------------------------------- +Thu Jun 8 18:25:21 CEST 2006 - [email protected] + +- use Google Suggest in web search bar (only used for Google) + +------------------------------------------------------------------- +Mon May 29 23:28:21 CEST 2006 - [email protected] + +- fix build for openSUSE build service + +------------------------------------------------------------------- +Wed May 24 10:14:24 CEST 2006 - [email protected] + +- update to version 3.5.3 + * domtreeviewer: fix crash when reopening dialog + * metabar: fix problem with <nobr> tag + * ktimemon: backport of iowait support + * arkplugin: fix crash caused by caching KFileItems + +------------------------------------------------------------------- +Mon Mar 20 14:59:40 CET 2006 - [email protected] + +- update to version 3.5.2 + * kuickcopy: disable 'Contact' entry if there are no contacts + * arkplugin: fix mimetype detection and popup menu + * metabar: fixed translation issues + +------------------------------------------------------------------- +Fri Mar 17 14:01:59 CET 2006 - [email protected] + +- don't fall back to 'unknown' but enhanced_browsing icon in + searchbar if search provider favicon is not fetched yet + +------------------------------------------------------------------- +Tue Feb 28 11:40:22 CET 2006 - [email protected] + +- add upstream patch to disable Kuick's "Contacts" if empty ++++ 575 more lines (skipped) ++++ between /dev/null ++++ and /mounts/work_src_done/STABLE/kdeaddons3/kdeaddons3.changes calling whatdependson for head-i586 New: ---- 3_5_BRANCH.diff disable-lnk.diff fix-kimgalleryplugin-output.diff google-suggest.diff kdeaddons-3.5.10-gcc45.diff kdeaddons-3.5.10.tar.bz2 kdeaddons3.changes kdeaddons3.spec permanent-searchbar.diff use-db.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kdeaddons3.spec ++++++ ++++ 699 lines (skipped) ++++++ 3_5_BRANCH.diff ++++++ package: kdeaddons-3.5.10.tar.bz2 kdemod: kdeaddons --- BRANCH_STATUS +++ BRANCH_STATUS @@ -0,0 +1,2 @@ +current HEAD: +svn di between //tags/KDE/3.5.10/kdeaddons and //branches/KDE/3.5/kdeaddons Eigenschaftsänderungen: . ___________________________________________________________________ Gelöscht: svn:mergeinfo Hinzugefügt: svn:externals + admin https://svn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin ++++++ disable-lnk.diff ++++++ --- kfile-plugins/Makefile.am +++ kfile-plugins/Makefile.am 2005/01/26 12:11:06 @@ -2,4 +2,4 @@ CERT_SUBDIR=cert endif -SUBDIRS=txt html desktop folder lnk $(CERT_SUBDIR) mhtml +SUBDIRS=txt html desktop folder $(CERT_SUBDIR) mhtml ++++++ fix-kimgalleryplugin-output.diff ++++++ Index: konq-plugins/kimgalleryplugin/imgalleryplugin.cpp =================================================================== --- konq-plugins/kimgalleryplugin/imgalleryplugin.cpp (revision 485498) +++ konq-plugins/kimgalleryplugin/imgalleryplugin.cpp (working copy) @@ -126,7 +126,7 @@ stream << "<head>" << endl; stream << "<title>" << QStyleSheet::escape(m_configDlg->getTitle()) << "</title>" << endl; stream << "<meta http-equiv=\"content-type\" content=\"text/html; charset=" << chsetName << "\"/>" << endl; - stream << "<meta name=\"GENERATOR\" content=\"KDE Konqueror KImgallery plugin version " KDE_VERSION_STRING "\"/>" << endl; + stream << "<meta name=\"GENERATOR\" content=\"KDE Konqueror KImgallery plugin version " << KDE_VERSION_MAJOR << "." << KDE_VERSION_MINOR << "." << KDE_VERSION_RELEASE << "\"/>" << endl; createCSSSection(stream); stream << "</head>" << endl; } ++++++ google-suggest.diff ++++++ Index: searchbar.h =================================================================== --- konq-plugins/searchbar/searchbar.h (revision 552886) +++ konq-plugins/searchbar/searchbar.h (working copy) @@ -1,4 +1,6 @@ /* This file is part of the KDE project + Copyright (C) 2005 by Tobi Vollebregt <[email protected]> + Copyright (C) 2004 by Vinay Khaitan <[email protected]> Copyright (C) 2004 Arend van Beelen jr. <[email protected]> This program is free software; you can redistribute it and/or @@ -32,6 +34,7 @@ class KHTMLPart; class KProcess; class QPopupMenu; +class QTimer; /** * Combo box which catches mouse clicks on the pixmap. @@ -149,6 +152,22 @@ void updateComboVisibility(); void focusSearchbar(); + + // Google Suggest private slots + void selectGoogleSuggestMode(); + void gsStartDelay(); + void gsMakeCompletionList(); + void gsDataArrived(KIO::Job*, const QByteArray& data); + void gsJobFinished(KIO::Job* job); + void gsSetCompletedText(const QString& text); + void gsPutTextInBox(const QString& text); + + signals: + + // Google Suggest signals + + void gsCompleteDelayed(); + private: void nextSearchEntry(); void previousSearchEntry(); @@ -157,12 +176,20 @@ SearchBarCombo *m_searchCombo; KWidgetAction *m_searchComboAction; QPopupMenu *m_popupMenu; + KSelectAction *m_googleMenu; QPixmap m_searchIcon; SearchModes m_searchMode; QString m_providerName; bool m_urlEnterLock; QString m_currentEngine; QStringList m_searchEngines; + + // Google Suggest private members + + QTimer m_gsTimer; + QString m_gsData; + enum GoogleMode {GoogleOnly,ForAll,Never}; + GoogleMode m_googleMode; }; #endif // SEARCHBAR_PLUGIN Index: searchbar.cpp =================================================================== --- konq-plugins/searchbar/searchbar.cpp (revision 552890) +++ konq-plugins/searchbar/searchbar.cpp (working copy) @@ -1,4 +1,6 @@ /* This file is part of the KDE project + Copyright (C) 2005 by Tobi Vollebregt <[email protected]> + Copyright (C) 2004 by Vinay Khaitan <[email protected]> Copyright (C) 2004 Arend van Beelen jr. <[email protected]> This program is free software; you can redistribute it and/or @@ -33,10 +35,13 @@ #include <klocale.h> #include <kmimetype.h> #include <kprocess.h> +#include <kprotocolinfo.h> #include <kprotocolmanager.h> #include <kstandarddirs.h> #include <kurifilter.h> +#include <kio/job.h> + #include <kparts/mainwindow.h> #include <kparts/partmanager.h> @@ -57,7 +62,9 @@ KParts::Plugin(parent, name), m_searchCombo(0), m_searchMode(UseSearchProvider), - m_urlEnterLock(false) + m_urlEnterLock(false), + m_gsTimer(this), + m_googleMode(GoogleOnly) { m_searchCombo = new SearchBarCombo(0L, "search combo"); m_searchCombo->setDuplicatesEnabled(false); @@ -65,8 +72,10 @@ m_searchCombo->setFixedWidth(180); m_searchCombo->setLineEdit(new KLineEdit(m_searchCombo)); m_searchCombo->lineEdit()->installEventFilter(this); + m_searchCombo->listBox()->setFocusProxy(m_searchCombo); m_popupMenu = 0; + m_googleMenu = 0; m_searchComboAction = new KWidgetAction(m_searchCombo, i18n("Search Bar"), 0, 0, 0, actionCollection(), "toolbar_search_bar"); @@ -95,6 +104,11 @@ SLOT (partChanged (KParts::Part*))); partChanged(partMan->activePart()); } + + connect(this, SIGNAL(gsCompleteDelayed()), SLOT(gsStartDelay())); + connect(&m_gsTimer, SIGNAL(timeout()), SLOT(gsMakeCompletionList())); + connect(m_searchCombo->listBox(), SIGNAL(highlighted(const QString&)), SLOT(gsSetCompletedText(const QString&))); + connect(m_searchCombo, SIGNAL(activated(const QString&)), SLOT(gsPutTextInBox(const QString&))); } SearchBarPlugin::~SearchBarPlugin() @@ -103,6 +117,7 @@ config->setGroup("SearchBar"); config->writeEntry("Mode", (int) m_searchMode); config->writeEntry("CurrentEngine", m_currentEngine); + config->writeEntry("GoogleSuggestMode", m_googleMode); delete m_searchCombo; m_searchCombo = 0L; @@ -120,6 +135,14 @@ if( o==m_searchCombo->lineEdit() && e->type() == QEvent::KeyPress ) { QKeyEvent *k = (QKeyEvent *)e; + QString text = k->text(); + if(!text.isEmpty()) + { + if(k->key() != Qt::Key_Return && k->key() != Key_Enter && k->key() != Key_Escape) + { + emit gsCompleteDelayed(); + } + } if(k->state() & ControlButton) { if(k->key()==Key_Down) @@ -133,6 +156,36 @@ return true; } } + else + { + if (k->key() == Key_Up || k->key() == Key_Down) + { + if(m_searchCombo->listBox()->isVisible()) + { + qApp->sendEvent(m_searchCombo->listBox(), e); + return true; + } + } + } + if (k->key() == Key_Enter || k->key() == Key_Return) + { + /*- Fix a bug which caused the searchbar to search for the completed + input instead of the literal input when enter was pressed and + the listbox was visible. + if(m_searchCombo->listBox()->isVisible()) + { + qApp->sendEvent(m_searchCombo->listBox(),e); + }*/ + } + if (k->key() == Key_Escape) + { + m_searchCombo->listBox()->hide(); + if (m_searchCombo->lineEdit()->hasSelectedText()) + { + m_searchCombo->lineEdit()->setText(m_searchCombo->currentText().left(m_searchCombo->lineEdit()->selectionStart())); + } + m_gsTimer.stop(); + } } return false; } @@ -197,11 +250,16 @@ setIcon(); } -void SearchBarPlugin::startSearch(const QString &search) +void SearchBarPlugin::startSearch(const QString &_search) { - if(m_urlEnterLock || search.isEmpty() || !m_part) + if(m_urlEnterLock || _search.isEmpty() || !m_part) return; + m_gsTimer.stop(); + m_searchCombo->listBox()->hide(); + + QString search = _search.section('(', 0, 0).stripWhiteSpace(); + if(m_searchMode == FindInThisPage) { m_part->findText(search, 0); @@ -355,10 +413,16 @@ } m_popupMenu->insertSeparator(); + m_googleMenu = new KSelectAction(i18n("Use Google Suggest"), SmallIconSet("ktip"), 0, this, SLOT(selectGoogleSuggestMode()), m_popupMenu); + QStringList google_modes; + google_modes << i18n("For Google Only") << i18n("For All Searches") << i18n("Never"); + m_googleMenu->setItems(google_modes); + m_googleMenu->plug(m_popupMenu); m_popupMenu->insertItem(SmallIcon("enhanced_browsing"), i18n("Select Search Engines..."), this, SLOT(selectSearchEngines()), 0, 1000); connect(m_popupMenu, SIGNAL(activated(int)), SLOT(useSearchProvider(int))); } + m_googleMenu->setCurrentItem(m_googleMode); m_popupMenu->popup(m_searchCombo->mapToGlobal(QPoint(0, m_searchCombo->height() + 1)), 0); } @@ -441,6 +505,7 @@ config->setGroup("SearchBar"); m_searchMode = (SearchModes) config->readNumEntry("Mode", (int) UseSearchProvider); m_currentEngine = config->readEntry("CurrentEngine", engine); + m_googleMode=(GoogleMode)config->readNumEntry("GoogleSuggestMode", GoogleOnly); if ( m_currentEngine.isEmpty() ) m_currentEngine = "google"; @@ -553,4 +618,116 @@ } } +// Google Suggest code + +void SearchBarPlugin::selectGoogleSuggestMode() +{ + m_googleMode = (GoogleMode)m_googleMenu->currentItem(); + KConfig *config = kapp->config(); + config->setGroup("SearchBar"); + config->writeEntry("GoogleSuggestMode", m_googleMode); + config->sync(); +} + +// adapted and modified by Tobi Vollebregt +// original code from Googlebar by Vinay Khaitan + +void SearchBarPlugin::gsStartDelay() +{ + m_gsTimer.stop(); + m_searchCombo->listBox()->hide(); + // FIXME: make configurable + m_gsTimer.start(500, true); +} + +void SearchBarPlugin::gsMakeCompletionList() +{ + if ((m_googleMode==GoogleOnly && m_currentEngine != "google") || m_googleMode==Never) + return; + + if (!m_searchCombo->currentText().isEmpty()) + { + KIO::TransferJob* tj = + KIO::get(KURL("http://www.google.com/complete/search?hl=en&js=true&qu=" + m_searchCombo->currentText()), false, false); + connect(tj, SIGNAL(data(KIO::Job*, const QByteArray&)), this, SLOT(gsDataArrived(KIO::Job*, const QByteArray&))); + connect(tj, SIGNAL(result(KIO::Job*)), this, SLOT(gsJobFinished(KIO::Job*))); + } +} + +void SearchBarPlugin::gsDataArrived(KIO::Job*, const QByteArray& data) +{ + m_gsData += QString::fromUtf8(data.data()); +} + +static QString reformatNumber(const QString& number) +{ + static const char suffix[] = { 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y' }; + QString s = number.stripWhiteSpace(); + uint c = 0; + for (int i = s.length() - 1; i > 0 && s[i] == '0'; --i) ++c; + c /= 3; + if (c >= sizeof(suffix)/sizeof(suffix[0])) + c = sizeof(suffix)/sizeof(suffix[0]) - 1; + s = s.left(s.length() - c * 3) + suffix[c]; + return s; +} + +void SearchBarPlugin::gsJobFinished(KIO::Job* job) +{ + if (((KIO::TransferJob*)job)->error() == 0) + { + QString temp; + temp = m_gsData.mid(m_gsData.find('(') + 1, m_gsData.findRev(')') - m_gsData.find('(') - 1); + temp = temp.mid(temp.find('(') + 1, temp.find(')') - temp.find('(') - 1); + temp.remove('"'); + QStringList compList1 = QStringList::split(',', temp); + temp = m_gsData.mid(m_gsData.find(')') + 1, m_gsData.findRev(')') - m_gsData.find('(') - 1); + temp = temp.mid(temp.find('(') + 1, temp.find(')') - temp.find('(') - 1); + temp.remove('"'); + temp.remove(','); + temp.remove('s'); + QStringList compList2 = QStringList::split("reult", temp); + QStringList finalList; + for(uint j = 0; j < compList1.count(); j++) + { + if (m_googleMode!=ForAll || m_currentEngine == "google") + finalList.append(compList1[j].stripWhiteSpace() + " (" + reformatNumber(compList2[j]) + ")"); + else + finalList.append(compList1[j].stripWhiteSpace()); + } + //store text so that we can restore it if it gets erased after GS returns no results + temp = m_searchCombo->currentText(); + m_searchCombo->listBox()->clear(); + m_searchCombo->listBox()->insertStringList(finalList); + m_searchCombo->setIcon(m_searchIcon); + //restore text + m_searchCombo->lineEdit()->setText(temp); + if (finalList.count() != 0 && !m_gsTimer.isActive()) + { + m_searchCombo->popup(); + } + } + m_gsData = ""; +} + +void SearchBarPlugin::gsSetCompletedText(const QString& text) +{ + QString currentText; + if (m_searchCombo->lineEdit()->hasSelectedText()) + currentText = m_searchCombo->currentText().left(m_searchCombo->lineEdit()->selectionStart()); + else + currentText = m_searchCombo->currentText(); + if (currentText == text.left(currentText.length())) + { + m_searchCombo->lineEdit()->setText(text.left(text.find('(') - 1)); + m_searchCombo->lineEdit()->setCursorPosition(currentText.length()); + m_searchCombo->lineEdit()->setSelection(currentText.length(), m_searchCombo->currentText().length() - currentText.length()); + } +} + +void SearchBarPlugin::gsPutTextInBox(const QString& text) +{ + m_searchCombo->lineEdit()->setText(text.section('(', 0, 0).stripWhiteSpace()); +} + #include "searchbar.moc" ++++++ kdeaddons-3.5.10-gcc45.diff ++++++ --- kate/tabbarextension/plugin_katetabbarextension.h~ 2008-08-19 20:10:36.000000000 +0200 +++ kate/tabbarextension/plugin_katetabbarextension.h 2010-07-30 16:38:48.169601926 +0200 @@ -53,7 +53,7 @@ class KateTabBarButton; class MyPtrList : public QPtrList <KateTabBarButton> { public: - MyPtrList() { QPtrList<KateTabBarButton>::QPtrList(); } + MyPtrList() { QPtrList<KateTabBarButton>(); } virtual int compareItems ( QPtrCollection::Item item1_, QPtrCollection::Item item2_ ); }; ++++++ permanent-searchbar.diff ++++++ --- ./konq-plugins/dirfilter/dirfilterplugin.cpp 2006/12/01 10:54:21 1.1 +++ ./konq-plugins/dirfilter/dirfilterplugin.cpp 2006/12/01 13:51:40 @@ -19,6 +19,8 @@ #include <unistd.h> #include <sys/types.h> +#include <qpainter.h> +#include <qstyle.h> #include <qtimer.h> #include <qapplication.h> #include <qlabel.h> @@ -45,6 +47,7 @@ #include <kstaticdeleter.h> #include <kgenericfactory.h> #include <kparts/browserextension.h> +#include <kio/netaccess.h> #include "dirfilterplugin.h" @@ -122,6 +125,7 @@ cfg.writeEntry ("ShowCount", showCount); cfg.writeEntry ("UseMultipleFilters", useMultipleFilters); + cfg.writeEntry ("SearchMode", searchMode); cfg.sync(); } @@ -135,6 +139,7 @@ showCount = cfg.readBoolEntry ("ShowCount", false); useMultipleFilters = cfg.readBoolEntry ("UseMultipleFilters", true); + searchMode = (SearchModes)cfg.readNumEntry("SearchMode", Beagle); m_pid = getpid (); m_bSettingsLoaded = true; } @@ -144,7 +149,9 @@ DirFilterPlugin::DirFilterPlugin (QObject* parent, const char* name, const QStringList&) :KParts::Plugin (parent, name), + m_beagled_running(false), m_pFilterMenu(0), + m_popupMenu(0), m_searchWidget(0) { m_part = ::qt_cast<KonqDirPart*>(parent); @@ -172,40 +179,77 @@ QHBox *hbox = new QHBox(m_part->widget()); hbox->hide(); - KAction *clear = new KAction(i18n("Clear Filter Field"), + m_clear = new KAction(i18n("Clear Filter Field"), QApplication::reverseLayout() ? "clear_left" : "locationbar_erase", 0, 0, 0, actionCollection(), "clear_filter"); - clear->setWhatsThis(i18n("Clear filter field<p>Clears the content of the filter field.")); - - if ( ::qt_cast<KListView*>(m_part->scrollWidget()) ) - { - m_searchWidget = new KListViewSearchLine(hbox); - static_cast<KListViewSearchLine*>(m_searchWidget)->setListView(static_cast<KListView*>(m_part->scrollWidget())); - } - else if ( ::qt_cast<QIconView*>(m_part->scrollWidget()) ) - { - m_searchWidget = new KIconViewSearchLine(hbox); - static_cast<KIconViewSearchLine*>(m_searchWidget)->setIconView(static_cast<QIconView*>(m_part->scrollWidget())); - } + m_clear->setWhatsThis(i18n("Clear filter field<p>Clears the content of the filter field.")); - - if ( m_searchWidget ) - { - QWhatsThis::add(m_searchWidget, i18n("Enter here a text which an item in the view must contain anywhere to be shown.")); - connect(clear, SIGNAL(activated()), m_searchWidget, SLOT(clear())); - } + m_searchWidget = new SearchBarCombo(hbox, "search combo"); + m_searchWidget->setDuplicatesEnabled(false); + m_searchWidget->setMaxCount(5); + m_searchWidget->setFixedWidth(180); + connect(m_searchWidget, SIGNAL(activated(const QString &)), + SLOT(startSearch(const QString &))); + connect(m_searchWidget, SIGNAL(iconClicked()), SLOT(showSelectionMenu())); KWidgetAction *filterAction = new KWidgetAction(hbox, i18n("Filter Field"), 0, 0, 0, actionCollection(), "toolbar_filter_field"); filterAction->setShortcutConfigurable(false); + + m_timerDetectBeagle = new QTimer(this); + connect(m_timerDetectBeagle, SIGNAL(timeout()), SLOT(slotDetectBeagle())); + m_timerDetectBeagle->start(0, true); } DirFilterPlugin::~DirFilterPlugin() { + m_timerDetectBeagle->stop(); + if (checking_for_beagle) { + checking_for_beagle = false; + qApp->exit_loop(); + } delete m_pFilterMenu; } +void DirFilterPlugin::slotDetectBeagle() +{ + KIO::UDSEntry uds; + const KURL kurl("beagle:?beagled-status"); + if (checking_for_beagle) { + m_timerDetectBeagle->start(10, true); + return; + } + checking_for_beagle = true; + bool stat_result = KIO::NetAccess::stat(kurl, uds); + if (!checking_for_beagle) + return; + if (!stat_result) { + switchToFilter(); + } + else { + m_beagled_running = true; + if (SessionManager::self()->searchMode==SessionManager::Beagle) { + setIcon(); + slotUseBeagle(); + } + else { + setIcon(); + switchToFilter(); + } + } + checking_for_beagle = false; +} + +void DirFilterPlugin::startSearch(const QString &search) +{ + if( SessionManager::self()->searchMode == SessionManager::Filter ) + return; + + emit m_part->extension()->openURLRequest("beagle:"+search); +} + + void DirFilterPlugin::slotOpenURL () { KURL url = m_part->url(); @@ -218,12 +262,13 @@ //Clears the hidden list which is by now outdated... if (m_searchWidget) { - SessionManager::self()->save(m_pURL, m_searchWidget->text()); + SessionManager::self()->save(m_pURL, m_searchWidget->lineEdit()->text()); m_searchWidget->clear(); QString typedFilter(SessionManager::self()->restoreTypedFilter(url)); m_searchWidget->completionObject()->addItem(typedFilter); - m_searchWidget->setText(typedFilter); + m_searchWidget->lineEdit()->setText(typedFilter); + setIcon(); } m_pURL = url; @@ -485,6 +530,162 @@ m_part->openURL (m_part->url()); } +void DirFilterPlugin::setIcon() +{ + QString hinttext; + QPixmap m_searchIcon; + if (SessionManager::self()->searchMode == SessionManager::Filter) { + m_searchIcon = SmallIcon("filter"); + hinttext = i18n("Filter This Folder"); + } + else { + m_searchIcon = SmallIcon("kio_beagle"); + hinttext = i18n("Search Index"); + } + + if (m_beagled_running) { + // Create a bit wider icon with arrow + QPixmap arrowmap = QPixmap(m_searchIcon.width()+5,m_searchIcon.height()+5); + arrowmap.fill(m_searchWidget->lineEdit()->backgroundColor()); + QPainter p( &arrowmap ); + p.drawPixmap(0, 2, m_searchIcon); + QStyle::SFlags arrowFlags = QStyle::Style_Default; + m_searchWidget->style().drawPrimitive(QStyle::PE_ArrowDown, &p, QRect(arrowmap.width()-6, + arrowmap.height()-6, 6, 5), m_searchWidget->colorGroup(), arrowFlags, QStyleOption() ); + p.end(); + m_searchIcon = arrowmap; + } + + m_searchWidget->setIcon(m_searchIcon); + static_cast<KLineEdit*>(m_searchWidget->lineEdit())->setClickMessage(hinttext); +} + +void DirFilterPlugin::showSelectionMenu() +{ + if (!m_beagled_running) + return; + + if(!m_popupMenu) + { + m_popupMenu = new QPopupMenu(m_searchWidget, "search mode selection"); + m_popupMenu->insertItem(SmallIcon("kio_beagle"), i18n("Search Index"), this, SLOT(slotUseBeagle())); + m_popupMenu->insertItem(SmallIcon("filter"), i18n("Filter This Folder"), this, SLOT(slotUseFilter())); + } + m_popupMenu->popup(m_searchWidget->mapToGlobal(QPoint(0, m_searchWidget->height() + 1)), 0); +} + +void DirFilterPlugin::slotUseBeagle() +{ + SessionManager::self()->searchMode = SessionManager::Beagle; + m_searchWidget->setLineEdit(new KLineEdit(m_searchWidget)); + m_searchWidget->lineEdit()->installEventFilter(this); + m_searchWidget->setFocus(); + QWhatsThis::add(m_searchWidget->lineEdit(), i18n("Enter here a text which shall be searched on the whole system in the Beagle index.")); + connect(m_clear, SIGNAL(activated()), m_searchWidget->lineEdit(), SLOT(clear())); + setIcon(); +} + +void DirFilterPlugin::slotUseFilter() +{ + switchToFilter(); + m_searchWidget->setFocus(); +} + +void DirFilterPlugin::switchToFilter() +{ + SessionManager::self()->searchMode = SessionManager::Filter; + if ( ::qt_cast<KListView*>(m_part->scrollWidget()) ) { + KListViewSearchLine* searchlineWidget = new KListViewSearchLine(m_searchWidget); + m_searchWidget->setLineEdit(searchlineWidget); + searchlineWidget->setListView(static_cast<KListView*>(m_part->scrollWidget())); + } + else if ( ::qt_cast<QIconView*>(m_part->scrollWidget()) ) { + KIconViewSearchLine* searchlineWidget = new KIconViewSearchLine(m_searchWidget); + m_searchWidget->setLineEdit(searchlineWidget); + searchlineWidget->setIconView(static_cast<QIconView*>(m_part->scrollWidget())); + } + m_searchWidget->lineEdit()->installEventFilter(this); + QWhatsThis::add(m_searchWidget->lineEdit(), i18n("Enter here a text which an item in the view must contain anywhere to be shown.")); + connect(m_clear, SIGNAL(activated()), m_searchWidget->lineEdit(), SLOT(clear())); + setIcon(); +} + +SearchBarCombo::SearchBarCombo(QWidget *parent, const char *name) : + KHistoryCombo(parent, name), + m_pluginActive(true) +{ + connect(this, SIGNAL(cleared()), SLOT(historyCleared())); +} + +const QPixmap &SearchBarCombo::icon() const +{ + return m_icon; +} + +void SearchBarCombo::setIcon(const QPixmap &icon) +{ + m_icon = icon; + + if(count() == 0) + { + insertItem(m_icon, 0); + } + else + { + for(int i = 0; i < count(); i++) + { + changeItem(m_icon, text(i), i); + } + } +} + +int SearchBarCombo::findHistoryItem(const QString &searchText) +{ + for(int i = 0; i < count(); i++) + { + if(text(i) == searchText) + { + return i; + } + } + + return -1; +} + +void SearchBarCombo::mousePressEvent(QMouseEvent *e) +{ + int x0 = QStyle::visualRect( style().querySubControlMetrics( QStyle::CC_ComboBox, this, QStyle::SC_ComboBoxEditField ), this ).x(); + + if(e->x() > x0 + 2 && e->x() < lineEdit()->x()) + { + emit iconClicked(); + + e->accept(); + } + else + { + KHistoryCombo::mousePressEvent(e); + } +} + +void SearchBarCombo::historyCleared() +{ + setIcon(m_icon); +} + +void SearchBarCombo::setPluginActive(bool pluginActive) +{ + m_pluginActive = pluginActive; +} + +void SearchBarCombo::show() +{ + if(m_pluginActive) + { + KHistoryCombo::show(); + } +} + typedef KGenericFactory<DirFilterPlugin> DirFilterFactory; K_EXPORT_COMPONENT_FACTORY (libdirfilterplugin, DirFilterFactory("dirfilterplugin")) --- ./konq-plugins/dirfilter/dirfilterplugin.rc 2006/12/01 10:54:23 1.1 +++ ./konq-plugins/dirfilter/dirfilterplugin.rc 2006/12/01 10:54:38 @@ -9,5 +9,6 @@ <Action name="filterdir"/> </ToolBar> <ToolBar fullWidth="true" name="locationToolBar" newline="true"><text>Filter Toolbar</text> + <Action name="toolbar_filter_field" /> </ToolBar> </kpartplugin> --- ./konq-plugins/dirfilter/dirfilterplugin.h 2006/12/01 10:54:19 1.1 +++ ./konq-plugins/dirfilter/dirfilterplugin.h 2006/12/01 13:09:31 @@ -27,10 +27,13 @@ #include <kfileitem.h> #include <klibloader.h> #include <kparts/plugin.h> +#include <kcombobox.h> class KActionMenu; class KonqDirPart; class KLineEdit; +class SearchBarCombo; +class QPopupMenu; namespace KParts @@ -54,8 +57,12 @@ void save (const KURL& url, const QStringList& filters); void save (const KURL& url, const QString& typedFilter); + /** Possible search modes */ + enum SearchModes { Beagle = 0, Filter }; + bool showCount; bool useMultipleFilters; + SearchModes searchMode; protected: @@ -76,6 +83,7 @@ QMap<QString,QString> m_typedFilter; }; +static bool checking_for_beagle = false; class DirFilterPlugin : public KParts::Plugin { @@ -108,6 +116,7 @@ void loadSettings(); void saveSettings(); + void setIcon(); private slots: void slotReset(); @@ -119,14 +128,86 @@ void slotItemSelected(int); void slotItemRemoved(const KFileItem *); void slotItemsAdded(const KFileItemList &); + void showSelectionMenu(); + void slotUseBeagle(); + void slotUseFilter(); + void slotDetectBeagle(); + void startSearch(const QString &search); private: + void switchToFilter(); + + + bool m_beagled_running; + QTimer *m_timerDetectBeagle; KURL m_pURL; KonqDirPart* m_part; KActionMenu* m_pFilterMenu; + QPopupMenu* m_popupMenu; + KAction *m_clear; - KLineEdit *m_searchWidget; + SearchBarCombo *m_searchWidget; QMap<QString,MimeInfo> m_pMimeInfo; typedef QMap<QString,MimeInfo>::Iterator MimeInfoIterator; }; + +/** + * Combo box which catches mouse clicks on the pixmap. + */ +class SearchBarCombo : public KHistoryCombo +{ + Q_OBJECT + + public: + /** + * Constructor. + */ + SearchBarCombo(QWidget *parent, const char *name); + + /** + * Returns the icon currently displayed in the combo box. + */ + const QPixmap &icon() const; + + /** + * Sets the icon displayed in the combo box. + */ + void setIcon(const QPixmap &icon); + + /** + * Finds a history item by its text. + * @return The item number, or -1 if the item is not found. + */ + int findHistoryItem(const QString &text); + + /** + * Sets whether the plugin is active. It can be inactive + * in case the current Konqueror part isn't a KHTML part. + */ + void setPluginActive(bool pluginActive); + + public slots: + virtual void show(); + + signals: + /** + * Emitted when the icon was clicked. + */ + void iconClicked(); + + protected: + /** + * Captures mouse clicks and emits iconClicked() if the icon + * was clicked. + */ + virtual void mousePressEvent(QMouseEvent *e); + + private slots: + void historyCleared(); + + private: + QPixmap m_icon; + bool m_pluginActive; +}; + #endif ++++++ use-db.diff ++++++ --- noatun-plugins/oblique/base.cpp +++ noatun-plugins/oblique/base.cpp @@ -14,14 +14,13 @@ #include <cstdlib> #include <assert.h> -#include <db_cxx.h> - - +#include <iostream> +#include <db.h> struct Base::Private { - Private() : db(0, DB_CXX_NO_EXCEPTIONS) { } - Db db; + Private() : db(0) { db_create(&db, NULL, 0); } + DB* db; typedef KDbt<FileId> Key; typedef KDbt<QStringList> Data; @@ -43,17 +42,15 @@ Base::Base(const QString &file) QCString filename = QFile::encodeName(file); bool create = true; - if (d->db.open( -#if DB_VERSION_MINOR > 0 && DB_VERSION_MAJOR >= 4 + if (d->db->open( d->db, NULL, -#endif filename, 0, DB_BTREE, DB_NOMMAP, 0 - )==0) + )== 0) { // success Private::Data data; Private::Key key(0); - if (d->db.get(0, &key, &data, 0)==0) + if (d->db->get(d->db, NULL, &key, &data, 0)==0) { QStringList strs; data.get(strs); @@ -72,10 +69,9 @@ Base::Base(const QString &file) if (create) { // failure QFile(filename).remove(); - d->db.open( -#if DB_VERSION_MINOR > 0 && DB_VERSION_MAJOR >= 4 + d->db->open( + d->db, NULL, -#endif filename,0, DB_BTREE, DB_NOMMAP|DB_CREATE,0 ); @@ -91,7 +87,7 @@ Base::Base(const QString &file) // "the high extreme (auto-increment counter in SQL terminology)", // "the metaxml" // } - d->db.put(0, &key, &data, 0); + d->db->put(d->db, 0, &key, &data, 0); } } @@ -108,9 +104,9 @@ Base::~Base() Private::Data data(strs); Private::Key key(0); - d->db.put(0, &key, &data, 0); - d->db.sync(0); - d->db.close(0); + d->db->put(d->db, 0, &key, &data, 0); + d->db->sync(d->db, 0); + d->db->close(d->db, 0); delete d; } @@ -121,7 +117,7 @@ File Base::add(const QString &file) properties << "file" << file; Private::Data data(properties); - unless (d->db.put(0, &key, &data, 0)) + unless (d->db->put(d->db, 0, &key, &data, 0)) { // success ! File f(this, d->high); @@ -140,7 +136,7 @@ File Base::find(FileId id) Private::Key key(id); Private::Data data; - unless (d->db.get(0, &key, &data, 0)) + unless (d->db->get(d->db, 0, &key, &data, 0)) { // exists return File(this, id); @@ -205,8 +201,8 @@ void Base::setProperty(FileId id, const Private::Data data(props); Private::Key dbkey(id); - d->db.put(0, &dbkey, &data, 0); - d->db.sync(0); + d->db->put(d->db, 0, &dbkey, &data, 0); + d->db->sync(d->db, 0); emit modified(File(this, id)); } @@ -243,8 +239,8 @@ void Base::clearProperty(FileId id, cons Private::Data data(props); Private::Key dbkey(id); - d->db.put(0, &dbkey, &data, 0); - d->db.sync(0); + d->db->put(d->db, 0, &dbkey, &data, 0); + d->db->sync(d->db, 0); emit modified(File(this, id)); } @@ -253,7 +249,7 @@ void Base::remove(File file) { Private::Key key(file.id()); - unless (d->db.del(0, &key, 0)) + unless (d->db->del(d->db, 0, &key, 0)) { emit removed(file); if (file.id() == d->high) @@ -261,7 +257,7 @@ void Base::remove(File file) d->high--; // optimization } } - d->db.sync(0); + d->db->sync(d->db, 0); } void Base::loadIntoCache(FileId id) const @@ -273,7 +269,7 @@ void Base::loadIntoCache(FileId id) cons Private::Key key(id); Private::Data data; - unless (d->db.get(0, &key, &data, 0)) + unless (d->db->get(d->db, 0, &key, &data, 0)) { QStringList props; data.get(props); @@ -317,14 +313,14 @@ void Base::move(FileId oldid, FileId new { Private::Key key(oldid); Private::Data data; - unless (d->db.get(0, &key, &data, 0)) + unless (d->db->get(d->db, 0, &key, &data, 0)) { QStringList props; data.get(props); - d->db.del(0, &key, 0); + d->db->del(d->db, 0, &key, 0); Private::Key key2(newid); - d->db.put(0, &key2, &data, 0); + d->db->put(d->db, 0, &key2, &data, 0); } } --- noatun-plugins/oblique/configure.in.in +++ noatun-plugins/oblique/configure.in.in @@ -1,29 +1,29 @@ AC_ARG_WITH(berkeley-db, - [AC_HELP_STRING([--with-berkeley-db],[enable support for Berkeley DB++ @<:@default=check@:>@])], + [AC_HELP_STRING([--with-berkeley-db],[enable support for Berkeley DB @<:@default=check@:>@])], [], with_berkeley_db=check) AC_ARG_WITH(db-lib, - [AC_HELP_STRING([--with-db-lib=NAME],[name of the Berkeley DB++ library @<:@default=db_cxx@:>@])], - [ac_db_name="$withval"], [ac_db_name="db_cxx"]) + [AC_HELP_STRING([--with-db-lib=NAME],[name of the Berkeley DB library @<:@default=db@:>@])], + [ac_db_name="$withval"], [ac_db_name="db"]) berkeley_db=no if test "x$with_berkeley_db" != xno; then berkeley_db=yes - KDE_CHECK_HEADER([db_cxx.h], + KDE_CHECK_HEADER([db.h], [:], [berkeley_db=no]) AC_CHECK_LIB([$ac_db_name], [main], [:], [berkeley_db=no]) if test "x$berkeley_db" = xyes; then - AC_DEFINE(BERKELEY_DB, 1, [Define if you have Berkeley DB++ installed]) + AC_DEFINE(BERKELEY_DB, 1, [Define if you have Berkeley DB installed]) BERKELEY_DB_LIBS="-l$ac_db_name" AC_SUBST(BERKELEY_DB_LIBS) fi if test "x$with_berkeley_db" != xcheck && test "x$berkeley_db" != xyes; then - AC_MSG_ERROR([--with-berkeley-db was given, but test for Berkeley DB++ failed]) + AC_MSG_ERROR([--with-berkeley-db was given, but test for Berkeley DB failed]) fi fi --- noatun-plugins/oblique/kdbt.h +++ noatun-plugins/oblique/kdbt.h @@ -6,17 +6,17 @@ #ifndef KDbt_Interface #define KDbt_Interface -#include <db_cxx.h> #include <qdatastream.h> #include <qbuffer.h> #include "kbuffer.h" +#include "db.h" /**A generic wrapper for "database thang" class that abstracts binary streaming operations. *@author Eray Ozkural (exa) */ template <typename T> -class KDbt : public Dbt { +class KDbt : public DBT { public: /* assume streaming operators on QDataStream QDataStream & operator>> ( QDataStream& >>, T &); @@ -28,32 +28,24 @@ public: KDbt(const T& obj) { set(obj); } -// operator Dbt() { -// return Dbt(thang.data(), thang.size()); -// } /** set "thang" to the contents of obj */ void set(const T& obj) { -// KBuffer buffer(thang); - QDataStream ds(&thang); + QDataStream ds(thang, IO_WriteOnly); ds << obj; -// std::cerr << "thang size " << thang.size() << endl; -// buffer.close(); -// set_data(thang.data()); -// set_size(buffer.size()); - set_data(thang.data()); - set_size(thang.size()); + data = thang.data(); + size = thang.size(); } + void get(T& obj) { QByteArray buffer; - buffer.setRawData((char*)get_data(),get_size()); + buffer.setRawData((char*)data,size); QDataStream ds(buffer,IO_ReadWrite); ds >> obj; - buffer.resetRawData((char*)get_data(),get_size()); + buffer.resetRawData((char*)data,size); } private: /** Internal data */ -// QByteArray thang; - KBuffer thang; + QByteArray thang; }; #endif ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
