author | erik <erik> | 2007-07-10 17:09:41 (UTC) |
---|---|---|
committer | erik <erik> | 2007-07-10 17:09:41 (UTC) |
commit | cef27724b5f19d895738edcf9b4dc2d7c5e4834e (patch) (side-by-side diff) | |
tree | ad79d3119d3c90ea8167f43b91a9485df9198ae1 | |
parent | a91bbaee9eb419dc985d9f5c3689831c8aa75c1e (diff) | |
download | opie-cef27724b5f19d895738edcf9b4dc2d7c5e4834e.zip opie-cef27724b5f19d895738edcf9b4dc2d7c5e4834e.tar.gz opie-cef27724b5f19d895738edcf9b4dc2d7c5e4834e.tar.bz2 |
This commit removes the crlf in the startmenu.cpp and startmenu.h files in
core/launcher. This sort of thing must likely means that these files were
commited from either a DOS or Windows based host, where lines end with
these two characters. This commit resolves Opie bug 1865.
Note, there are likely other files in the repo that have this problem. It
would be a good idea to identify and modify them.
-rw-r--r-- | core/launcher/startmenu.cpp | 792 | ||||
-rw-r--r-- | core/launcher/startmenu.h | 212 |
2 files changed, 502 insertions, 502 deletions
diff --git a/core/launcher/startmenu.cpp b/core/launcher/startmenu.cpp index d03af89..a5fc51b 100644 --- a/core/launcher/startmenu.cpp +++ b/core/launcher/startmenu.cpp @@ -1,396 +1,396 @@ -/*
- This file is part of the Opie Project
- =. (C) 2000-2002 Trolltech AS
- .=l. (C) 2002-2005 The Opie Team <opie-devel@handhelds.org>
- .>+-=
- _;:, .> :=|. This program is free software; you can
-.> <`_, > . <= redistribute it and/or modify it under
- :`=1 )Y*s>-.-- : the terms of the GNU Library General Public
-.="- .-=="i, .._ License as published by the Free Software
- - . .-<_> .<> Foundation; version 2 of the License.
- ._= =} :
- .%`+i> _;_.
- .i_,=:_. -<s. 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
-..}^=.= = ; 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., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-// TODO. During startup
-// Launcher::typeAdded
-// is called for each new tab and calls then each time the refresh of startmenu
-// suboptimal
-
-#define INCLUDE_MENUITEM_DEF
-
-#include "startmenu.h"
-
-/* OPIE */
-#include <opie2/oresource.h>
-using namespace Opie::Core;
-#include <qtopia/qpeapplication.h>
-#include <qtopia/config.h>
-#include <qtopia/mimetype.h>
-#include <qtopia/qlibrary.h>
-
-#define APPLNK_ID_OFFSET 250
-#define NO_ID -1
-
-
-void StartPopupMenu::keyPressEvent( QKeyEvent *e )
-{
- if ( e->key() == Key_F33 || e->key() == Key_Space ) {
- // "OK" button, little hacky
- QKeyEvent ke(QEvent::KeyPress, Key_Enter, 13, 0);
- QPopupMenu::keyPressEvent( &ke );
- } else {
- QPopupMenu::keyPressEvent( e );
- }
-}
-
-//---------------------------------------------------------------------------
-
-StartMenu::StartMenu(QWidget *parent) : QLabel( parent )
-{
- startButtonPixmap = "go"; // No tr
-
- int sz = AppLnk::smallIconSize()+3;
- QPixmap pm;
- pm.convertFromImage(OResource::loadImage( startButtonPixmap, OResource::NoScale ).smoothScale( sz,sz) );
- setPixmap(pm);
- setFocusPolicy( NoFocus );
-
- useWidePopupMenu = true;
- launchMenu = 0;
- currentItem = 0;
- refreshMenu();
-}
-
-
-void StartMenu::mousePressEvent( QMouseEvent * )
-{
- launch();
-}
-
-
-StartMenu::~StartMenu()
-{
- clearApplets();
-}
-
-void StartMenu::createMenu()
-{
- clearApplets();
- delete launchMenu;
-
- launchMenu = new StartPopupMenu( this );
- loadMenu( launchMenu );
- loadApplets();
-
- bool result = currentItem || menuApplets.count();
- if ( result )
- connect( launchMenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) );
-}
-
-void StartMenu::refreshMenu()
-{
- Config cfg( "StartMenu" );
- cfg.setGroup( "Menu" );
- bool ltabs = cfg.readBoolEntry( "LauncherTabs", TRUE );
- bool lot = cfg.readBoolEntry( "LauncherOther", TRUE );
- useWidePopupMenu = cfg.readBoolEntry( "LauncherSubPopup", TRUE );
-
- if ( launchMenu && !(ltabs || lot) ) return; // nothing to do
-
- createMenu();
-}
-
-void StartMenu::itemSelected( int id )
-{
- if ( id == NO_ID ) return;
-
- if ( id < 0 ) {
- MenuApplet *applet = menuApplets.find( id );
- if ( applet ) {
- applet->iface->activated();
- }
- } else if ( id >= APPLNK_ID_OFFSET ) {
- AppLnk * appLnk = appLnks.find( id );
- if ( appLnk ) {
- appLnk->execute();
- }
- } else {
- QString *tabName = tabNames.find( id );
- if ( tabName ) {
- emit tabSelected( *tabName );
- }
- }
-}
-
-void StartMenu::createAppEntry( QPopupMenu *menu, QDir dir, QString file )
-{
- if ( file.right(8) == ".desktop" ) {
- AppLnk* applnk = new AppLnk( dir.path() + "/" + file );
- if ( !applnk->isValid() ) {
- delete applnk;
- return;
- }
-
- if ( applnk->type() == "Separator" ) { // No tr
- menu->insertSeparator();
- delete applnk;
- } else {
- QPixmap pixmap = OResource::loadPixmap( applnk->icon(), OResource::SmallIcon );
- // Insert items ordered lexically
- int current, left = 0, right = currentItem;
- while( left != right ) {
- current = ( left + right ) / 2;
- if ( menu->text(menu->idAt( ( current ) ) ) < applnk->name() )
- left = ++current;
- else
- right = current;
- }
-
- menu->insertItem( pixmap, applnk->name(),
- currentItem + APPLNK_ID_OFFSET, current );
- appLnks.insert( currentItem + APPLNK_ID_OFFSET, applnk );
- currentItem++;
- }
- }
-
-}
-
-void StartMenu::createDirEntry( QPopupMenu *menu, QDir dir, QString file, bool lot )
-{
- // do some sanity checks and collect information
-
- if ( file == "." || file == ".." ) return;
-
- Config cfg( dir.path() + "/" + file + "/.directory", Config::File );
- if ( !cfg.isValid() ) return;
-
- QString name = cfg.readEntry( "Name" );
- QString icon = cfg.readEntry( "Icon" );
- if ( !name || !icon ) return;
-
- QDir subdir = QDir( dir );
- subdir.cd( file );
- subdir.setFilter( QDir::Files );
- subdir.setNameFilter( "*.desktop" );
- // we don' t show the menu if there are no entries
- // perhaps one should check if there exist subsubdirs with entries...
- if ( subdir.entryList().isEmpty() ) return;
-
- // checks were ok
-
- QPixmap pixmap = OResource::loadPixmap( icon, OResource::SmallIcon );
- if ( useWidePopupMenu ) {
- // generate submenu
- QPopupMenu *submenu = new QPopupMenu( menu );
- connect( submenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) );
- menu->insertItem( pixmap, name, submenu, NO_ID );
-
- // ltabs is true cause else we wouldn't stuck around..
- createMenuEntries( submenu, subdir, true, lot );
- } else {
- // no submenus - just bring corresponding tab to front
- menu->insertItem( pixmap, name, currentItem );
- tabNames.insert( currentItem, new QString( file ) );
- currentItem++;
- }
-}
-
-void StartMenu::createMenuEntries( QPopupMenu *menu, QDir dir, bool ltabs, bool lot )
-{
- if ( lot ) {
- dir.setFilter( QDir::Files );
- dir.setNameFilter( "*.desktop" );
- QStringList files = dir.entryList();
- files.sort();
-
- for ( QStringList::Iterator it = files.begin(); it != files.end(); it++ ) {
- createAppEntry( menu, dir, *it );
- }
- }
- if ( ltabs ) {
- dir.setNameFilter( "*" );
- dir.setFilter( QDir::Dirs );
- QStringList dirs = dir.entryList();
- dirs.sort();
-
- for ( QStringList::Iterator it = dirs.begin(); it != dirs.end(); it++ ) {
- createDirEntry( menu, dir, *it, lot );
- }
- }
-}
-
-bool StartMenu::loadMenu( QPopupMenu *menu )
-{
- Config cfg("StartMenu");
- cfg.setGroup("Menu");
-
- bool ltabs = cfg.readBoolEntry("LauncherTabs", TRUE);
- bool lot = cfg.readBoolEntry("LauncherOther", TRUE);
- useWidePopupMenu = cfg.readBoolEntry( "LauncherSubPopup", TRUE );
- bool sepfirst = !ltabs && !lot;
-
- currentItem = 0;
- launchMenu->clear();
-
- appLnks.setAutoDelete( true );
- tabNames.setAutoDelete( true );
- appLnks.clear();
- tabNames.clear();
- appLnks.setAutoDelete( false );
- tabNames.setAutoDelete( false );
-
- QDir dir( MimeType::appsFolderName(), QString::null, QDir::Name );
- createMenuEntries( menu, dir, ltabs, lot );
-
- if ( !menu->count() ) sepfirst = TRUE;
-
- launchMenu->setName( sepfirst ? "accessories" : "accessories_need_sep" ); // No tr
-
- return currentItem;
-}
-
-
-void StartMenu::launch()
-{
- int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height();
-
- if ( launchMenu->isVisible() )
- launchMenu->hide();
- else
- launchMenu->popup( QPoint( 0, y ) );
-}
-
-
-
-
-static int compareAppletPositions(const void *b, const void *a)
-{
- const MenuApplet* aa = *(const MenuApplet**)a;
- const MenuApplet* ab = *(const MenuApplet**)b;
- int d = aa->iface->position() - ab->iface->position();
- if ( d ) return d;
- return QString::compare(aa->library->library(),ab->library->library());
-}
-
-void StartMenu::clearApplets()
-{
- if ( launchMenu )
- launchMenu-> hide();
-
- for ( QIntDictIterator<MenuApplet> it( menuApplets ); it.current(); ++it ) {
- MenuApplet *applet = it.current();
- if ( launchMenu ) {
- launchMenu->removeItem( applet-> id );
- delete applet->popup;
- }
-
- applet->iface->release();
- applet->library->unload();
- delete applet-> library;
- }
- menuApplets.clear();
-}
-
-
-
-
-void StartMenu::loadApplets()
-{
- Config cfg( "StartMenu" );
- cfg.setGroup( "Applets" );
-
- // SafeMode causes too much problems, so we disable it for now --
- // maybe we should reenable it for OPIE 1.0 - sandman 26.09.02
- // removed in the remerge PluginManager could handle it
- // we don't currently use it -zecke
-
- QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' );
-
- QString lang = getenv( "LANG" );
- QString path = QPEApplication::qpeDir() + "plugins/applets";
- QDir dir( path, "lib*.so" );
- QStringList list = dir.entryList();
- QStringList::Iterator it;
- int napplets = 0;
- MenuApplet* *xapplets = new MenuApplet*[list.count()];
- for ( it = list.begin(); it != list.end(); ++it ) {
- if ( exclude.find( *it ) != exclude.end() )
- continue;
- MenuAppletInterface *iface = 0;
- QLibrary *lib = new QLibrary( path + "/" + *it );
- if (( lib->queryInterface( IID_MenuApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) {
- MenuApplet *applet = new MenuApplet;
- xapplets[napplets++] = applet;
- applet->library = lib;
- applet->iface = iface;
-
- QTranslator *trans = new QTranslator(qApp);
- QString type = (*it).left( (*it).find(".") );
- QString tfn = QPEApplication::qpeDir()+"i18n/"+lang+"/"+type+".qm";
- if ( trans->load( tfn ))
- qApp->installTranslator( trans );
- else
- delete trans;
- } else {
- exclude += *it;
- delete lib;
- }
- }
- cfg.writeEntry( "ExcludeApplets", exclude, ',' );
- qsort(xapplets, napplets, sizeof(menuApplets[0]), compareAppletPositions);
-
-
- while ( napplets-- ) {
- MenuApplet *applet = xapplets[napplets];
- applet->popup = applet->iface->popup( this );
-
- // menuApplets got an id < -1
- menuApplets.insert( -( currentItem + 2 ), new MenuApplet( *applet ) );
- currentItem++;
- }
- delete [] xapplets;
-
- addApplets( launchMenu );
-}
-
-
-/*
- * Launcher calls loadMenu too often fix that
- */
-void StartMenu::addApplets(QPopupMenu* pop) {
- QIntDict<MenuApplet> dict;
- if( pop-> count ( ))
- pop-> insertSeparator ( );
-
- for ( QIntDictIterator<MenuApplet> it( menuApplets ); it.current(); ++it ) {
- MenuApplet *applet = it.current();
- if ( applet->popup )
- applet->id = pop->insertItem( applet->iface->icon(),
- applet->iface->text(), applet->popup );
- else
- applet->id = pop->insertItem( applet->iface->icon(),
- applet->iface->text() );
-
-
- dict.insert( applet->id, new MenuApplet( *applet ) );
- }
- /* need to update the key */
- menuApplets.setAutoDelete( true );
- menuApplets.clear();
- menuApplets.setAutoDelete( false );
- menuApplets = dict;
-}
+/* + This file is part of the Opie Project + =. (C) 2000-2002 Trolltech AS + .=l. (C) 2002-2005 The Opie Team <opie-devel@handhelds.org> + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under + :`=1 )Y*s>-.-- : the terms of the GNU Library General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; version 2 of the License. + ._= =} : + .%`+i> _;_. + .i_,=:_. -<s. 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 +..}^=.= = ; 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ +// TODO. During startup +// Launcher::typeAdded +// is called for each new tab and calls then each time the refresh of startmenu +// suboptimal + +#define INCLUDE_MENUITEM_DEF + +#include "startmenu.h" + +/* OPIE */ +#include <opie2/oresource.h> +using namespace Opie::Core; +#include <qtopia/qpeapplication.h> +#include <qtopia/config.h> +#include <qtopia/mimetype.h> +#include <qtopia/qlibrary.h> + +#define APPLNK_ID_OFFSET 250 +#define NO_ID -1 + + +void StartPopupMenu::keyPressEvent( QKeyEvent *e ) +{ + if ( e->key() == Key_F33 || e->key() == Key_Space ) { + // "OK" button, little hacky + QKeyEvent ke(QEvent::KeyPress, Key_Enter, 13, 0); + QPopupMenu::keyPressEvent( &ke ); + } else { + QPopupMenu::keyPressEvent( e ); + } +} + +//--------------------------------------------------------------------------- + +StartMenu::StartMenu(QWidget *parent) : QLabel( parent ) +{ + startButtonPixmap = "go"; // No tr + + int sz = AppLnk::smallIconSize()+3; + QPixmap pm; + pm.convertFromImage(OResource::loadImage( startButtonPixmap, OResource::NoScale ).smoothScale( sz,sz) ); + setPixmap(pm); + setFocusPolicy( NoFocus ); + + useWidePopupMenu = true; + launchMenu = 0; + currentItem = 0; + refreshMenu(); +} + + +void StartMenu::mousePressEvent( QMouseEvent * ) +{ + launch(); +} + + +StartMenu::~StartMenu() +{ + clearApplets(); +} + +void StartMenu::createMenu() +{ + clearApplets(); + delete launchMenu; + + launchMenu = new StartPopupMenu( this ); + loadMenu( launchMenu ); + loadApplets(); + + bool result = currentItem || menuApplets.count(); + if ( result ) + connect( launchMenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); +} + +void StartMenu::refreshMenu() +{ + Config cfg( "StartMenu" ); + cfg.setGroup( "Menu" ); + bool ltabs = cfg.readBoolEntry( "LauncherTabs", TRUE ); + bool lot = cfg.readBoolEntry( "LauncherOther", TRUE ); + useWidePopupMenu = cfg.readBoolEntry( "LauncherSubPopup", TRUE ); + + if ( launchMenu && !(ltabs || lot) ) return; // nothing to do + + createMenu(); +} + +void StartMenu::itemSelected( int id ) +{ + if ( id == NO_ID ) return; + + if ( id < 0 ) { + MenuApplet *applet = menuApplets.find( id ); + if ( applet ) { + applet->iface->activated(); + } + } else if ( id >= APPLNK_ID_OFFSET ) { + AppLnk * appLnk = appLnks.find( id ); + if ( appLnk ) { + appLnk->execute(); + } + } else { + QString *tabName = tabNames.find( id ); + if ( tabName ) { + emit tabSelected( *tabName ); + } + } +} + +void StartMenu::createAppEntry( QPopupMenu *menu, QDir dir, QString file ) +{ + if ( file.right(8) == ".desktop" ) { + AppLnk* applnk = new AppLnk( dir.path() + "/" + file ); + if ( !applnk->isValid() ) { + delete applnk; + return; + } + + if ( applnk->type() == "Separator" ) { // No tr + menu->insertSeparator(); + delete applnk; + } else { + QPixmap pixmap = OResource::loadPixmap( applnk->icon(), OResource::SmallIcon ); + // Insert items ordered lexically + int current, left = 0, right = currentItem; + while( left != right ) { + current = ( left + right ) / 2; + if ( menu->text(menu->idAt( ( current ) ) ) < applnk->name() ) + left = ++current; + else + right = current; + } + + menu->insertItem( pixmap, applnk->name(), + currentItem + APPLNK_ID_OFFSET, current ); + appLnks.insert( currentItem + APPLNK_ID_OFFSET, applnk ); + currentItem++; + } + } + +} + +void StartMenu::createDirEntry( QPopupMenu *menu, QDir dir, QString file, bool lot ) +{ + // do some sanity checks and collect information + + if ( file == "." || file == ".." ) return; + + Config cfg( dir.path() + "/" + file + "/.directory", Config::File ); + if ( !cfg.isValid() ) return; + + QString name = cfg.readEntry( "Name" ); + QString icon = cfg.readEntry( "Icon" ); + if ( !name || !icon ) return; + + QDir subdir = QDir( dir ); + subdir.cd( file ); + subdir.setFilter( QDir::Files ); + subdir.setNameFilter( "*.desktop" ); + // we don' t show the menu if there are no entries + // perhaps one should check if there exist subsubdirs with entries... + if ( subdir.entryList().isEmpty() ) return; + + // checks were ok + + QPixmap pixmap = OResource::loadPixmap( icon, OResource::SmallIcon ); + if ( useWidePopupMenu ) { + // generate submenu + QPopupMenu *submenu = new QPopupMenu( menu ); + connect( submenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); + menu->insertItem( pixmap, name, submenu, NO_ID ); + + // ltabs is true cause else we wouldn't stuck around.. + createMenuEntries( submenu, subdir, true, lot ); + } else { + // no submenus - just bring corresponding tab to front + menu->insertItem( pixmap, name, currentItem ); + tabNames.insert( currentItem, new QString( file ) ); + currentItem++; + } +} + +void StartMenu::createMenuEntries( QPopupMenu *menu, QDir dir, bool ltabs, bool lot ) +{ + if ( lot ) { + dir.setFilter( QDir::Files ); + dir.setNameFilter( "*.desktop" ); + QStringList files = dir.entryList(); + files.sort(); + + for ( QStringList::Iterator it = files.begin(); it != files.end(); it++ ) { + createAppEntry( menu, dir, *it ); + } + } + if ( ltabs ) { + dir.setNameFilter( "*" ); + dir.setFilter( QDir::Dirs ); + QStringList dirs = dir.entryList(); + dirs.sort(); + + for ( QStringList::Iterator it = dirs.begin(); it != dirs.end(); it++ ) { + createDirEntry( menu, dir, *it, lot ); + } + } +} + +bool StartMenu::loadMenu( QPopupMenu *menu ) +{ + Config cfg("StartMenu"); + cfg.setGroup("Menu"); + + bool ltabs = cfg.readBoolEntry("LauncherTabs", TRUE); + bool lot = cfg.readBoolEntry("LauncherOther", TRUE); + useWidePopupMenu = cfg.readBoolEntry( "LauncherSubPopup", TRUE ); + bool sepfirst = !ltabs && !lot; + + currentItem = 0; + launchMenu->clear(); + + appLnks.setAutoDelete( true ); + tabNames.setAutoDelete( true ); + appLnks.clear(); + tabNames.clear(); + appLnks.setAutoDelete( false ); + tabNames.setAutoDelete( false ); + + QDir dir( MimeType::appsFolderName(), QString::null, QDir::Name ); + createMenuEntries( menu, dir, ltabs, lot ); + + if ( !menu->count() ) sepfirst = TRUE; + + launchMenu->setName( sepfirst ? "accessories" : "accessories_need_sep" ); // No tr + + return currentItem; +} + + +void StartMenu::launch() +{ + int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height(); + + if ( launchMenu->isVisible() ) + launchMenu->hide(); + else + launchMenu->popup( QPoint( 0, y ) ); +} + + + + +static int compareAppletPositions(const void *b, const void *a) +{ + const MenuApplet* aa = *(const MenuApplet**)a; + const MenuApplet* ab = *(const MenuApplet**)b; + int d = aa->iface->position() - ab->iface->position(); + if ( d ) return d; + return QString::compare(aa->library->library(),ab->library->library()); +} + +void StartMenu::clearApplets() +{ + if ( launchMenu ) + launchMenu-> hide(); + + for ( QIntDictIterator<MenuApplet> it( menuApplets ); it.current(); ++it ) { + MenuApplet *applet = it.current(); + if ( launchMenu ) { + launchMenu->removeItem( applet-> id ); + delete applet->popup; + } + + applet->iface->release(); + applet->library->unload(); + delete applet-> library; + } + menuApplets.clear(); +} + + + + +void StartMenu::loadApplets() +{ + Config cfg( "StartMenu" ); + cfg.setGroup( "Applets" ); + + // SafeMode causes too much problems, so we disable it for now -- + // maybe we should reenable it for OPIE 1.0 - sandman 26.09.02 + // removed in the remerge PluginManager could handle it + // we don't currently use it -zecke + + QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' ); + + QString lang = getenv( "LANG" ); + QString path = QPEApplication::qpeDir() + "plugins/applets"; + QDir dir( path, "lib*.so" ); + QStringList list = dir.entryList(); + QStringList::Iterator it; + int napplets = 0; + MenuApplet* *xapplets = new MenuApplet*[list.count()]; + for ( it = list.begin(); it != list.end(); ++it ) { + if ( exclude.find( *it ) != exclude.end() ) + continue; + MenuAppletInterface *iface = 0; + QLibrary *lib = new QLibrary( path + "/" + *it ); + if (( lib->queryInterface( IID_MenuApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) { + MenuApplet *applet = new MenuApplet; + xapplets[napplets++] = applet; + applet->library = lib; + applet->iface = iface; + + QTranslator *trans = new QTranslator(qApp); + QString type = (*it).left( (*it).find(".") ); + QString tfn = QPEApplication::qpeDir()+"i18n/"+lang+"/"+type+".qm"; + if ( trans->load( tfn )) + qApp->installTranslator( trans ); + else + delete trans; + } else { + exclude += *it; + delete lib; + } + } + cfg.writeEntry( "ExcludeApplets", exclude, ',' ); + qsort(xapplets, napplets, sizeof(menuApplets[0]), compareAppletPositions); + + + while ( napplets-- ) { + MenuApplet *applet = xapplets[napplets]; + applet->popup = applet->iface->popup( this ); + + // menuApplets got an id < -1 + menuApplets.insert( -( currentItem + 2 ), new MenuApplet( *applet ) ); + currentItem++; + } + delete [] xapplets; + + addApplets( launchMenu ); +} + + +/* + * Launcher calls loadMenu too often fix that + */ +void StartMenu::addApplets(QPopupMenu* pop) { + QIntDict<MenuApplet> dict; + if( pop-> count ( )) + pop-> insertSeparator ( ); + + for ( QIntDictIterator<MenuApplet> it( menuApplets ); it.current(); ++it ) { + MenuApplet *applet = it.current(); + if ( applet->popup ) + applet->id = pop->insertItem( applet->iface->icon(), + applet->iface->text(), applet->popup ); + else + applet->id = pop->insertItem( applet->iface->icon(), + applet->iface->text() ); + + + dict.insert( applet->id, new MenuApplet( *applet ) ); + } + /* need to update the key */ + menuApplets.setAutoDelete( true ); + menuApplets.clear(); + menuApplets.setAutoDelete( false ); + menuApplets = dict; +} diff --git a/core/launcher/startmenu.h b/core/launcher/startmenu.h index 7218035..3e12b36 100644 --- a/core/launcher/startmenu.h +++ b/core/launcher/startmenu.h @@ -1,106 +1,106 @@ -/**********************************************************************
-** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qtopia Environment.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef __START_MENU_H__
-#define __START_MENU_H__
-
-#include <qtopia/applnk.h>
-#include <qintdict.h>
-#include <qstring.h>
-#include <qlist.h>
-#include <qmap.h>
-#include <qdir.h>
-#include <qlabel.h>
-#include <qpopupmenu.h>
-
-#include <qtopia/menuappletinterface.h>
-
-class StartPopupMenu : public QPopupMenu
-{
-
-public:
- StartPopupMenu( QWidget *parent ) : QPopupMenu( parent ) {}
-
-protected:
- void keyPressEvent( QKeyEvent *e );
-
-};
-
-class QLibrary;
-
-
-struct MenuApplet {
- QLibrary *library;
- MenuAppletInterface *iface;
- int id;
- QPopupMenu *popup;
-};
-
-class StartMenu : public QLabel {
-
- Q_OBJECT
-
-public:
- StartMenu( QWidget * );
- ~StartMenu();
-
- void refreshMenu();
-
-public:
- StartPopupMenu *launchMenu;
-
-signals:
- void tabSelected(const QString&);
-
-public slots:
- void launch( );
- void createMenu( );
-
-protected slots:
- void itemSelected( int id );
-
-protected:
- virtual void mousePressEvent( QMouseEvent * );
-
-private:
- void loadApplets();
- void clearApplets();
- void addApplets( QPopupMenu* menu );
- bool loadMenu( QPopupMenu *menu );
- void createMenuEntries( QPopupMenu *menu, QDir dir, bool ltabs, bool lot );
- void createDirEntry( QPopupMenu *menu, QDir dir, QString file, bool lot );
- void createAppEntry( QPopupMenu *menu, QDir dir, QString file );
-
-private:
- bool useWidePopupMenu;
- QString popupMenuSidePixmap;
-
- bool startButtonIsFlat;
- QString startButtonPixmap;
-
- int currentItem;
-
- QIntDict<AppLnk> appLnks;
- QIntDict<QString> tabNames;
- QIntDict<MenuApplet> menuApplets;
-
-};
-
-#endif // __START_MENU_H__
+/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef __START_MENU_H__ +#define __START_MENU_H__ + +#include <qtopia/applnk.h> +#include <qintdict.h> +#include <qstring.h> +#include <qlist.h> +#include <qmap.h> +#include <qdir.h> +#include <qlabel.h> +#include <qpopupmenu.h> + +#include <qtopia/menuappletinterface.h> + +class StartPopupMenu : public QPopupMenu +{ + +public: + StartPopupMenu( QWidget *parent ) : QPopupMenu( parent ) {} + +protected: + void keyPressEvent( QKeyEvent *e ); + +}; + +class QLibrary; + + +struct MenuApplet { + QLibrary *library; + MenuAppletInterface *iface; + int id; + QPopupMenu *popup; +}; + +class StartMenu : public QLabel { + + Q_OBJECT + +public: + StartMenu( QWidget * ); + ~StartMenu(); + + void refreshMenu(); + +public: + StartPopupMenu *launchMenu; + +signals: + void tabSelected(const QString&); + +public slots: + void launch( ); + void createMenu( ); + +protected slots: + void itemSelected( int id ); + +protected: + virtual void mousePressEvent( QMouseEvent * ); + +private: + void loadApplets(); + void clearApplets(); + void addApplets( QPopupMenu* menu ); + bool loadMenu( QPopupMenu *menu ); + void createMenuEntries( QPopupMenu *menu, QDir dir, bool ltabs, bool lot ); + void createDirEntry( QPopupMenu *menu, QDir dir, QString file, bool lot ); + void createAppEntry( QPopupMenu *menu, QDir dir, QString file ); + +private: + bool useWidePopupMenu; + QString popupMenuSidePixmap; + + bool startButtonIsFlat; + QString startButtonPixmap; + + int currentItem; + + QIntDict<AppLnk> appLnks; + QIntDict<QString> tabNames; + QIntDict<MenuApplet> menuApplets; + +}; + +#endif // __START_MENU_H__ |