author | eilers <eilers> | 2003-11-03 16:52:18 (UTC) |
---|---|---|
committer | eilers <eilers> | 2003-11-03 16:52:18 (UTC) |
commit | d34dc773591a2d467c68875a68a671d6a809f861 (patch) (side-by-side diff) | |
tree | b57e5ae15c51e3d87ca95d57aedfd1ca3db57bfe /core/launcher/startmenu.cpp | |
parent | ce84f2d8bdd65c438821f0457cdad6bbbfa73380 (diff) | |
download | opie-d34dc773591a2d467c68875a68a671d6a809f861.zip opie-d34dc773591a2d467c68875a68a671d6a809f861.tar.gz opie-d34dc773591a2d467c68875a68a671d6a809f861.tar.bz2 |
Porting Opie to MacOS-X.
The base system and all platform independent applications and platforms
should work.
Please see $OPIEDIR/development/macosx for details
-rw-r--r-- | core/launcher/startmenu.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/core/launcher/startmenu.cpp b/core/launcher/startmenu.cpp index 014418d..08ae885 100644 --- a/core/launcher/startmenu.cpp +++ b/core/launcher/startmenu.cpp @@ -67,267 +67,271 @@ StartMenu::StartMenu(QWidget *parent) : QLabel( parent ) void StartMenu::mousePressEvent( QMouseEvent * ) { launch(); } StartMenu::~StartMenu() { clearApplets(); } void StartMenu::createMenu() { clearApplets(); delete launchMenu; launchMenu = new StartPopupMenu( this ); loadMenu( launchMenu ); loadApplets(); bool result = nother || ntabs || m_applets.count(); if ( result ) connect( launchMenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); } void StartMenu::refreshMenu() { Config cfg("Taskbar"); cfg.setGroup("Menu"); bool ltabs = cfg.readBoolEntry("LauncherTabs",TRUE); bool lot = cfg.readBoolEntry("LauncherOther",TRUE); bool lt = ltabs || lot; if ( launchMenu && !lt ) return; // nothing to do if ( launchMenu ) { int i; /* find the first entry we want to remove */ for (i=0; i<(int)launchMenu->count(); i++) { QMenuItem* item = launchMenu->findItem(launchMenu->idAt(i)); if ( item && item->id() >= 0 && item->id() < ntabs ) { break; } if ( item && item->isSeparator() ) { i++; break; } } /* remove them */ while (i<(int)launchMenu->count()) launchMenu->removeItemAt(i); loadMenu(launchMenu); addApplets(launchMenu); } else { createMenu(); } } void StartMenu::itemSelected( int id ) { if ( id >= 0 && id < ntabs ) { emit tabSelected(tabs[id]); } else if ( id >= 20 && id < 20+nother ) { other.at(id-20)->execute(); }else { MenuApplet *applet = m_applets.find ( id ); if ( applet ) { qWarning("activated"); applet-> iface-> activated(); } } } bool StartMenu::loadMenu( QPopupMenu *menu ) { Config cfg("Taskbar"); cfg.setGroup("Menu"); bool ltabs = cfg.readBoolEntry("LauncherTabs",TRUE); bool lot = cfg.readBoolEntry("LauncherOther",TRUE); bool sepfirst = !ltabs && !lot; tabs.clear(); other.setAutoDelete(TRUE); other.clear(); ntabs = 0; nother = 0; bool f=TRUE; if ( ltabs || lot ) { QDir dir( MimeType::appsFolderName(), QString::null, QDir::Name ); for (int i=0; i<(int)dir.count(); i++) { QString d = dir[i]; Config cfg(dir.path()+"/"+d+"/.directory",Config::File); if ( cfg.isValid() ) { QString nm = cfg.readEntry("Name"); QString ic = cfg.readEntry("Icon"); if ( !!nm && !!ic ) { tabs.append(d); menu->insertItem( Resource::loadIconSet(ic), nm, ntabs++ ); } } else if ( lot && d.right(8)==".desktop") { AppLnk* applnk = new AppLnk(dir.path()+"/"+d); if ( applnk->isValid() ) { if ( applnk->type() == "Separator" ) { // No tr if ( lot ) { menu->insertSeparator(); sepfirst = f && !ltabs; } delete applnk; } else { f = FALSE; other.append(applnk); menu->insertItem( Resource::loadIconSet(applnk->icon()), applnk->name(), 20+nother++ ); } } else { delete applnk; } } } if ( !menu->count() ) sepfirst = TRUE; } launchMenu->setName(sepfirst ? "accessories" : "accessories_need_sep"); // No tr return (nother || ntabs ); } void StartMenu::launch() { int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height(); if ( launchMenu->isVisible() ) launchMenu->hide(); else launchMenu->popup( QPoint( 1, y ) ); } static int compareAppletPositions(const void *a, const void *b) { 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 ( m_applets ); 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; } m_applets.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"; +#ifdef Q_OS_MACX + QDir dir( path, "lib*.dylib" ); +#else QDir dir( path, "lib*.so" ); +#endif /* Q_OS_MACX */ 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(m_applets[0]),compareAppletPositions); int foo = ( launchMenu-> count ( )) ? launchMenu-> insertSeparator ( ) : 0; while (napplets--) { MenuApplet *applet = xapplets[napplets]; applet-> popup = applet-> iface-> popup ( this ); if ( applet-> popup ) applet-> id = launchMenu-> insertItem ( applet-> iface-> icon ( ), applet-> iface-> text ( ), applet-> popup ); else applet-> id = launchMenu-> insertItem ( applet-> iface-> icon ( ), applet-> iface-> text ( ) ); m_applets.insert ( applet-> id, new MenuApplet(*applet)); } delete [] xapplets; } /* * Launcher calls loadMenu too often fix that */ void StartMenu::addApplets(QPopupMenu* pop) { QIntDict<MenuApplet> dict; if( pop-> count ( )) pop-> insertSeparator ( ); for ( QIntDictIterator<MenuApplet> it ( m_applets ); 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 */ m_applets.setAutoDelete( true ); m_applets.clear(); m_applets.setAutoDelete( false ); m_applets = dict; } |