summaryrefslogtreecommitdiff
authorsandman <sandman>2002-10-23 21:55:13 (UTC)
committer sandman <sandman>2002-10-23 21:55:13 (UTC)
commit3c9835537b2fdccab4c0f720a4d77a98ad8bba10 (patch) (side-by-side diff)
treebedafdbcd4410bca7fe177e5ffeab982f81496bb
parent482c5cfe8b3653888ba97716a1b29dae05200d70 (diff)
downloadopie-3c9835537b2fdccab4c0f720a4d77a98ad8bba10.zip
opie-3c9835537b2fdccab4c0f720a4d77a98ad8bba10.tar.gz
opie-3c9835537b2fdccab4c0f720a4d77a98ad8bba10.tar.bz2
Fixed a translation bug regarding launcher applets, that got in when I
merged with Qtopia 1.6 (TT bug). found by Héctor GarcíaÁlvarez <hector@disoft.es>, but I modified his patch, since running the applet widget constructor *before* the QTranslator gets installed seems like a bad idea.
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/launcher/startmenu.cpp17
-rw-r--r--core/launcher/systray.cpp17
2 files changed, 18 insertions, 16 deletions
diff --git a/core/launcher/startmenu.cpp b/core/launcher/startmenu.cpp
index 917f4c1..7373ea8 100644
--- a/core/launcher/startmenu.cpp
+++ b/core/launcher/startmenu.cpp
@@ -219,167 +219,168 @@ bool StartMenu::loadMenu( AppLnkSet *folder, QPopupMenu *menu )
pmenu = menu;
else
pmenu = 0;
}
if ( pmenu ) {
QString t = app->name();
t.replace(QRegExp("&"),"&&"); // escape shortcut character
pmenu->insertItem( app->pixmap(), t, app->id() );
}
result=TRUE;
}
}
}
if ( sepId && ( menu-> idAt ( 0 ) == sepId )) { // no tabs entries
menu-> removeItem ( sepId );
sepId = 0;
}
if ( !menu-> count ( )) // if we don't do this QPopupMenu will insert a dummy Separator, which won't go away later
sepId = menu-> insertSeparator ( );
return result;
}
void StartMenu::launch()
{
int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height();
if ( launchMenu->isVisible() )
launchMenu->hide();
else
launchMenu->popup( QPoint( 1, y ) );
}
const AppLnk* StartMenu::execToLink(const QString& appname)
{
const AppLnk* a = apps->findExec( appname );
return a;
}
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 );
}
}
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()
{
launchMenu-> hide();
for ( QIntDictIterator<MenuApplet> it ( 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;
}
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
bool safe = false; //cfg.readBoolEntry("SafeMode",FALSE);
if ( safe && !safety_tid )
return;
cfg.writeEntry("SafeMode",TRUE);
cfg.write();
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(applets[0]),compareAppletPositions);
if ( sepId )
launchMenu-> removeItem ( sepId );
sepId = ( launchMenu-> count ( )) ? launchMenu-> insertSeparator ( ) : 0;
while (napplets--) {
MenuApplet *applet = xapplets[napplets];
- QString lang = getenv( "LANG" );
- 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;
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 ( ) );
applets.insert ( applet-> id, new MenuApplet(*applet));
}
delete xapplets;
if ( sepId && ( launchMenu-> idAt ( launchMenu-> count ( ) - 1 ) == sepId )) { // no applets
launchMenu-> removeItem ( sepId );
sepId = 0;
}
if ( !launchMenu-> count ( )) // if we don't do this QPopupMenu will insert a dummy Separator, which won't go away later
sepId = launchMenu-> insertSeparator ( );
if ( !safety_tid )
safety_tid = startTimer(2000); // TT has 5000, but this is a PITA for a developer ;) (sandman)
}
void StartMenu::timerEvent(QTimerEvent* e)
{
if ( e->timerId() == safety_tid ) {
Config cfg( "StartMenu" );
cfg.setGroup( "Applets" );
cfg.writeEntry( "SafeMode", FALSE );
killTimer(safety_tid);
safety_tid = 0;
}
}
diff --git a/core/launcher/systray.cpp b/core/launcher/systray.cpp
index 406c662..4859e48 100644
--- a/core/launcher/systray.cpp
+++ b/core/launcher/systray.cpp
@@ -1,152 +1,153 @@
/**********************************************************************
** 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.
**
**********************************************************************/
#include <qpe/qpeapplication.h>
#include <qpe/qlibrary.h>
#include <qpe/config.h>
#include <qlayout.h>
#include <qdir.h>
#include <qtranslator.h>
#include "quicklauncher.h"
#include "systray.h"
#include <stdlib.h>
#ifdef SINGLE_APP
#include "clockappletimpl.h"
#endif
SysTray::SysTray( QWidget *parent ) : QFrame( parent ), layout(0)
{
safety_tid = 0;
//setFrameStyle( QFrame::Panel | QFrame::Sunken );
loadApplets();
}
static int compareAppletPositions(const void *a, const void *b)
{
const TaskbarApplet* aa = *(const TaskbarApplet**)a;
const TaskbarApplet* ab = *(const TaskbarApplet**)b;
int d = ab->iface->position() - aa->iface->position();
if ( d ) return d;
return QString::compare(ab->library->library(),aa->library->library());
}
void SysTray::loadApplets()
{
clearApplets();
addApplets();
}
void SysTray::clearApplets()
{
hide();
#ifndef SINGLE_APP
QValueList<TaskbarApplet>::Iterator mit;
for ( mit = appletList.begin(); mit != appletList.end(); ++mit ) {
(*mit).iface->release();
(*mit).library->unload();
delete (*mit).library;
}
#endif
appletList.clear();
if ( layout )
delete layout;
layout = new QHBoxLayout( this, 0, 1 );
layout->setAutoAdd(TRUE);
}
void SysTray::addApplets()
{
#ifndef SINGLE_APP
Config cfg( "Taskbar" );
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
bool safe = false; //cfg.readBoolEntry("SafeMode",FALSE);
if ( safe && !safety_tid )
return;
cfg.writeEntry("SafeMode",TRUE);
cfg.write();
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;
TaskbarApplet* *applets = new TaskbarApplet*[list.count()];
for ( it = list.begin(); it != list.end(); ++it ) {
if ( exclude.find( *it ) != exclude.end() )
continue;
TaskbarAppletInterface *iface = 0;
QLibrary *lib = new QLibrary( path + "/" + *it );
if (( lib->queryInterface( IID_TaskbarApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) {
TaskbarApplet *applet = new TaskbarApplet;
applets[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(applets,napplets,sizeof(applets[0]),compareAppletPositions);
while (napplets--) {
TaskbarApplet *applet = applets[napplets];
applet->applet = applet->iface->applet( this );
appletList.append(*applet);
- QString lang = getenv( "LANG" );
- 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;
}
delete applets;
#else
TaskbarApplet applet;
applet.iface = new ClockAppletImpl();
applet.applet = applet.iface->applet( this );
appletList.append( a );
#endif
show();
if ( !safety_tid )
safety_tid = startTimer(2000); // TT has 5000, but this is a PITA for a developer ;) (sandman)
}
void SysTray::timerEvent(QTimerEvent* e)
{
if ( e->timerId() == safety_tid ) {
Config cfg( "Taskbar" );
cfg.setGroup( "Applets" );
cfg.writeEntry( "SafeMode", FALSE );
killTimer(safety_tid);
safety_tid = 0;
}
}