summaryrefslogtreecommitdiff
authorsandman <sandman>2002-09-06 19:27:17 (UTC)
committer sandman <sandman>2002-09-06 19:27:17 (UTC)
commit61b8be0405b46896160afaf7f4a2082527f01f58 (patch) (side-by-side diff)
treeeed32200b726eb888b9587b25c509cb4ecd6fe9c
parent98c0d3f0eca58993cb18e740f2a3d07d67c5c64d (diff)
downloadopie-61b8be0405b46896160afaf7f4a2082527f01f58.zip
opie-61b8be0405b46896160afaf7f4a2082527f01f58.tar.gz
opie-61b8be0405b46896160afaf7f4a2082527f01f58.tar.bz2
Removed all the LCD specific stuff:
- the low-level part of it is now libopie / ODevice - the high-level (QCop and QWSScreenSaver) part of it is now in the QWS-Server (launcher)
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--library/qpeapplication.cpp361
1 files changed, 3 insertions, 358 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 8448352..8aae786 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -27,104 +27,77 @@
#ifndef QT_NO_COP
#if QT_VERSION <= 231
#define private public
#define sendLocally processEvent
#include "qcopenvelope_qws.h"
#undef private
#else
#include "qcopenvelope_qws.h"
#endif
#endif
#include <qwindowsystem_qws.h>
#endif
#include <qtextstream.h>
#include <qpalette.h>
#include <qbuffer.h>
#include <qptrdict.h>
#include <qregexp.h>
#include <qdir.h>
#include <qlabel.h>
#include <qdialog.h>
#include <qdragobject.h>
#include <qevent.h>
#include <qtooltip.h>
#include <qsignal.h>
-
-
-//#include <linux/fb.h> better not rely on kernel headers in userspace ...
-
-/* VESA Blanking Levels */
-#define VESA_NO_BLANKING 0
-#define VESA_VSYNC_SUSPEND 1
-#define VESA_HSYNC_SUSPEND 2
-#define VESA_POWERDOWN 3
-
-#define FBIOBLANK 0x4611
-
-
-#include <qsignal.h>
#include "qpeapplication.h"
#include "qpestyle.h"
#include "styleinterface.h"
#if QT_VERSION >= 300
#include <qstylefactory.h>
#else
#include <qplatinumstyle.h>
#include <qwindowsstyle.h>
#include <qmotifstyle.h>
#include <qmotifplusstyle.h>
#include "lightstyle.h"
#include <qpe/qlibrary.h>
#endif
#include "global.h"
#include "resource.h"
-#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
-#include "qutfcodec.h"
-#endif
#include "config.h"
-#include "network.h"
#include "fontmanager.h"
#include "fontdatabase.h"
-#include "power.h"
#include "alarmserver.h"
#include "applnk.h"
#include "qpemenubar.h"
#include <unistd.h>
#include <sys/file.h>
#include <sys/ioctl.h>
#include <sys/soundcard.h>
-// for setBacklight()
-#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
-#include <linux/fb.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#endif
-#include <stdlib.h>
-
class QPEApplicationData
{
public:
QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ),
kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ),
forceshow( FALSE ), nomaximize( FALSE ), qpe_main_widget( 0 ),
keep_running( TRUE )
{
qcopq.setAutoDelete( TRUE );
}
int presstimer;
QWidget* presswidget;
QPoint presspos;
bool rightpressed;
int kbgrabber;
bool kbregrab;
bool notbusysent;
QString appName;
struct QCopRec
{
QCopRec( const QCString &ch, const QCString &msg,
const QByteArray &d ) :
@@ -209,300 +182,48 @@ static void setVolume( int t = 0, int percent = -1 )
break;
}
}
static void setMic( int t = 0, int percent = -1 )
{
switch ( t ) {
case 0: {
Config cfg( "qpe" );
cfg.setGroup( "Volume" );
if ( percent < 0 )
percent = cfg.readNumEntry( "Mic", 50 );
int fd = 0;
int mic = micMuted ? 0 : percent;
if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
::close( fd );
}
}
break;
}
}
-int qpe_sysBrightnessSteps()
-{
-#if defined(QT_QWS_IPAQ)
- return 255;
-#elif defined(QT_QWS_EBX)
-
- return 4;
-#else
-
- return 255; // ?
-#endif
-}
-
-
-static int& hack( int& i )
-{
-#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
- // These should be created, but aren't in Qt 2.3.0
- ( void ) new QUtf8Codec;
- ( void ) new QUtf16Codec;
-#endif
-
- return i;
-}
-
-static bool forced_off = FALSE;
-static int curbl = -1;
-
-static int backlight()
-{
- if ( curbl == -1 ) {
- // Read from config
- Config config( "qpe" );
- config.setGroup( "Screensaver" );
- curbl = config.readNumEntry( "Brightness", 255 );
- }
- return curbl;
-}
-
-static void setBacklight( int bright )
-{
- if ( bright == -3 ) {
- // Forced on
- forced_off = FALSE;
- bright = -1;
- }
- if ( forced_off && bright != -2 )
- return ;
- if ( bright == -2 ) {
- // Toggle between off and on
- bright = curbl ? 0 : -1;
- forced_off = !bright;
- }
- if ( bright == -1 ) {
- // Read from config
- Config config( "qpe" );
- config.setGroup( "Screensaver" );
- bright = config.readNumEntry( "Brightness", 255 );
- }
-#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
- if ( QFile::exists( "/usr/bin/bl" ) ) {
- QString cmd = "/usr/bin/bl 1 ";
- cmd += bright <= 0 ? "0 " : "1 ";
- cmd += QString::number( bright );
- system( cmd.latin1() );
-#if defined(QT_QWS_EBX)
-
- }
- else if ( QFile::exists( "/dev/fl" ) ) {
-#define FL_IOCTL_STEP_CONTRAST 100
- int fd = open( "/dev/fl", O_WRONLY );
- if ( fd >= 0 ) {
- int steps = qpe_sysBrightnessSteps();
- int bl = ( bright * steps + 127 ) / 255;
- if ( bright && !bl )
- bl = 1;
- bl = ioctl( fd, FL_IOCTL_STEP_CONTRAST, bl );
- close( fd );
- }
- }
-#elif defined(QT_QWS_IPAQ)
-
- }
- else if ( QFile::exists( "/dev/ts" ) || QFile::exists( "/dev/h3600_ts" ) )
- {
- typedef struct {
- unsigned char mode;
- unsigned char pwr;
- unsigned char brightness;
- }
- FLITE_IN;
-# ifndef FLITE_ON
-# ifndef _LINUX_IOCTL_H
-# include <linux/ioctl.h>
-# endif
-# define FLITE_ON _IOW('f', 7, FLITE_IN)
-# endif
-
- int fd;
- if ( QFile::exists( "/dev/ts" ) )
- fd = open( "/dev/ts", O_WRONLY );
- else
- fd = open( "/dev/h3600_ts", O_WRONLY );
- if ( fd >= 0 ) {
- FLITE_IN bl;
- bl.mode = 1;
- bl.pwr = bright ? 1 : 0;
- bl.brightness = bright;
- ioctl( fd, FLITE_ON, &bl );
- close( fd );
- }
- }
-#endif
-#endif
- curbl = bright;
-}
-
-void qpe_setBacklight( int bright ) {
- setBacklight( bright );
-}
-
-static bool dim_on = FALSE;
-static bool lightoff_on = FALSE;
-static int disable_suspend = 100;
-
-static bool powerOnline()
-{
- return PowerStatusManager::readStatus().acStatus() == PowerStatus::Online;
-}
-
-static bool networkOnline()
-{
- return Network::networkOnline();
-}
-
-class QPEScreenSaver : public QWSScreenSaver
-{
-private:
- int LcdOn;
-
-public:
- QPEScreenSaver()
- {
- int fd;
-
- LcdOn = TRUE;
- // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off)
- fd = open( "/dev/fb0", O_RDWR );
- if ( fd != -1 ) {
- ioctl( fd, FBIOBLANK, VESA_NO_BLANKING );
- close( fd );
- }
- }
- void restore()
- {
- if ( !LcdOn ) // We must have turned it off
- {
- int fd;
- fd = open( "/dev/fb0", O_RDWR );
- if ( fd != -1 )
- {
- ioctl( fd, FBIOBLANK, VESA_NO_BLANKING );
- close( fd );
- }
- }
- setBacklight( -1 );
- }
- bool save( int level )
- {
- int fd;
-
- switch ( level ) {
- case 0:
- if ( disable_suspend > 0 && dim_on ) {
- if ( backlight() > 1 )
- setBacklight( 1 ); // lowest non-off
- }
- return TRUE;
- break;
- case 1:
- if ( disable_suspend > 1 && lightoff_on ) {
- setBacklight( 0 ); // off
- }
- return TRUE;
- break;
- case 2:
- Config config( "qpe" );
- config.setGroup( "Screensaver" );
- if ( config.readNumEntry( "LcdOffOnly", 0 ) != 0 ) // We're only turning off the LCD
- {
- fd = open( "/dev/fb0", O_RDWR );
- if ( fd != -1 )
- {
- ioctl( fd, FBIOBLANK, VESA_POWERDOWN );
- close( fd );
- }
- LcdOn = FALSE;
- }
- else // We're going to suspend the whole machine
- {
- if ( disable_suspend > 2 && !powerOnline() && !networkOnline() ) {
- QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
- return TRUE;
- }
- }
- break;
- }
- return FALSE;
- }
-};
-
-static int ssi( int interval, Config & config, const QString & enable, const QString & value, int def )
-{
- if ( !enable.isEmpty() && config.readNumEntry( enable, 0 ) == 0 )
- return 0;
-
- if ( interval < 0 ) {
- // Restore screen blanking and power saving state
- interval = config.readNumEntry( value, def );
- }
- return interval;
-}
-
-static void setScreenSaverIntervals( int i1, int i2, int i3 )
-{
- Config config( "qpe" );
- config.setGroup( "Screensaver" );
-
- int v[ 4 ];
- i1 = ssi( i1, config, "Dim", "Interval_Dim", 30 );
- i2 = ssi( i2, config, "LightOff", "Interval_LightOff", 20 );
- i3 = ssi( i3, config, "", "Interval", 60 );
-
- //qDebug("screen saver intervals: %d %d %d", i1, i2, i3);
-
- v[ 0 ] = QMAX( 1000 * i1, 100 );
- v[ 1 ] = QMAX( 1000 * i2, 100 );
- v[ 2 ] = QMAX( 1000 * i3, 100 );
- v[ 3 ] = 0;
- dim_on = ( ( i1 != 0 ) ? config.readNumEntry( "Dim", 1 ) : FALSE );
- lightoff_on = ( ( i2 != 0 ) ? config.readNumEntry( "LightOff", 1 ) : FALSE );
- if ( !i1 && !i2 && !i3 )
- QWSServer::setScreenSaverInterval( 0 );
- else
- QWSServer::setScreenSaverIntervals( v );
-}
-
-static void setScreenSaverInterval( int interval )
-{
- setScreenSaverIntervals( -1, -1, interval );
-}
-
/*!
\class QPEApplication qpeapplication.h
\brief The QPEApplication class implements various system services
that are available to all Qtopia applications.
Simply by using QPEApplication instead of QApplication, a plain Qt
application becomes a Qtopia application. It automatically follows
style changes, quits and raises, and in the
case of \link docwidget.html document-oriented\endlink applications,
changes the current displayed document in response to the environment.
*/
/*!
\fn void QPEApplication::clientMoused()
\internal
*/
/*!
\fn void QPEApplication::timeChanged();
This signal is emitted when the time jumps forward or backwards
by more than the normal passage of time.
@@ -526,49 +247,49 @@ static void setScreenSaverInterval( int interval )
in the following way:
\code
void MyWidget::receive( const QCString& msg, const QByteArray& data )
{
QDataStream stream( data, IO_ReadOnly );
if ( msg == "someMessage(int,int,int)" ) {
int a,b,c;
stream >> a >> b >> c;
...
} else if ( msg == "otherMessage(QString)" ) {
...
}
}
\endcode
\sa qcop.html
*/
/*!
Constructs a QPEApplication just as you would construct
a QApplication, passing \a argc, \a argv, and \a t.
*/
QPEApplication::QPEApplication( int & argc, char **argv, Type t )
- : QApplication( hack( argc ), argv, t )
+ : QApplication( argc, argv, t )
{
int dw = desktop() ->width();
if ( dw < 200 ) {
// setFont( QFont( "helvetica", 8 ) );
AppLnk::setSmallIconSize( 10 );
AppLnk::setBigIconSize( 28 );
}
d = new QPEApplicationData;
QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QString qcopfn( "/tmp/qcop-msg-" );
qcopfn += QString( argv[ 0 ] ); // append command name
QFile f( qcopfn );
if ( f.open( IO_ReadOnly ) ) {
flock( f.handle(), LOCK_EX );
}
sysChannel = new QCopChannel( "QPE/System", this );
connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
@@ -653,51 +374,49 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t )
setFont( fn );
}
else {
*/
Config config( "qpe" );
config.setGroup( "Appearance" );
QString familyStr = config.readEntry( "FontFamily", "helvetica" );
QString styleStr = config.readEntry( "FontStyle", "Regular" );
QString sizeStr = config.readEntry( "FontSize", "10" );
QString charSetStr = config.readEntry( "FontCharSet", QString::null );
bool ok;
int i_size = sizeStr.toInt( &ok, 10 );
FontDatabase fdb;
QFont selectedFont = fdb.font( familyStr, styleStr, i_size, charSetStr );
setFont( selectedFont );
//}
}
#endif
applyStyle();
if ( type() == GuiServer ) {
- setScreenSaverInterval( -1 );
setVolume();
- QWSServer::setScreenSaver( new QPEScreenSaver );
}
installEventFilter( this );
QPEMenuToolFocusManager::initialize();
#ifdef QT_NO_QWS_CURSOR
// if we have no cursor, probably don't want tooltips
QToolTip::setEnabled( FALSE );
#endif
}
static QPtrDict<void>* inputMethodDict = 0;
static void createInputMethodDict()
{
if ( !inputMethodDict )
inputMethodDict = new QPtrDict<void>;
}
/*!
Returns the currently set hint to the system as to whether
\a w has any use for text input methods.
\sa setInputMethodHint()
@@ -991,101 +710,82 @@ void QPEApplication::applyStyle()
QString color = config.readEntry( "Highlight", "#800000" );
pal.setColor( QColorGroup::Highlight, QColor( color ) );
color = config.readEntry( "HighlightedText", "#FFFFFF" );
pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
color = config.readEntry( "Text", "#000000" );
pal.setColor( QColorGroup::Text, QColor( color ) );
color = config.readEntry( "ButtonText", "#000000" );
pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
color = config.readEntry( "Base", "#FFFFFF" );
pal.setColor( QColorGroup::Base, QColor( color ) );
pal.setColor( QPalette::Disabled, QColorGroup::Text,
pal.color( QPalette::Active, QColorGroup::Background ).dark() );
setPalette( pal, TRUE );
}
void QPEApplication::systemMessage( const QCString & msg, const QByteArray & data )
{
#ifdef Q_WS_QWS
QDataStream stream( data, IO_ReadOnly );
if ( msg == "applyStyle()" ) {
applyStyle();
}
- else if ( msg == "setScreenSaverInterval(int)" ) {
- if ( type() == GuiServer ) {
- int time;
- stream >> time;
- setScreenSaverInterval( time );
- }
- }
- else if ( msg == "setScreenSaverIntervals(int,int,int)" ) {
- if ( type() == GuiServer ) {
- int t1, t2, t3;
- stream >> t1 >> t2 >> t3;
- setScreenSaverIntervals( t1, t2, t3 );
- }
- }
- else if ( msg == "setBacklight(int)" ) {
- if ( type() == GuiServer ) {
- int bright;
- stream >> bright;
- setBacklight( bright );
- }
- }
else if ( msg == "setDefaultRotation(int)" ) {
if ( type() == GuiServer ) {
int r;
stream >> r;
setDefaultRotation( r );
}
}
else if ( msg == "shutdown()" ) {
if ( type() == GuiServer )
shutdown();
}
else if ( msg == "quit()" ) {
if ( type() != GuiServer )
tryQuit();
}
else if ( msg == "forceQuit()" ) {
if ( type() != GuiServer )
quit();
}
else if ( msg == "restart()" ) {
if ( type() == GuiServer )
restart();
}
else if ( msg == "grabKeyboard(QString)" ) {
QString who;
stream >> who;
if ( who.isEmpty() )
d->kbgrabber = 0;
else if ( who != d->appName )
d->kbgrabber = 1;
else
d->kbgrabber = 2;
+
+ printf( "'%s' received grabKeyboard ( '%s' ) -> kbgrabber = %d\n", d-> appName.latin1(), who.latin1(), d-> kbgrabber );
}
else if ( msg == "language(QString)" ) {
if ( type() == GuiServer ) {
QString l;
stream >> l;
QString cl = getenv( "LANG" );
if ( cl != l ) {
if ( l.isNull() )
unsetenv( "LANG" );
else
setenv( "LANG", l.latin1(), 1 );
restart();
}
}
}
else if ( msg == "timeChange(QString)" ) {
QString t;
stream >> t;
if ( t.isNull() )
unsetenv( "TZ" );
else
setenv( "TZ", t.latin1(), 1 );
// emit the signal so everyone else knows...
emit timeChanged();
@@ -1138,57 +838,48 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat
emit dateFormatChanged( tmp );
}
else if ( msg == "setVolume(int,int)" ) {
int t, v;
stream >> t >> v;
setVolume( t, v );
emit volumeChanged( muted );
}
else if ( msg == "volumeChange(bool)" ) {
stream >> muted;
setVolume();
emit volumeChanged( muted );
}
else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
int t, v;
stream >> t >> v;
setMic( t, v );
emit micChanged( micMuted );
}
else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
stream >> micMuted;
setMic();
emit micChanged( micMuted );
}
- else if ( msg == "setScreenSaverMode(int)" ) {
- if ( type() == GuiServer ) {
- int old = disable_suspend;
- stream >> disable_suspend;
- //qDebug("setScreenSaverMode(%d)", disable_suspend );
- if ( disable_suspend > old )
- setScreenSaverInterval( -1 );
- }
- }
#endif
}
/*!
\internal
*/
bool QPEApplication::raiseAppropriateWindow()
{
bool r = FALSE;
// ########## raise()ing main window should raise and set active
// ########## it and then all childen. This belongs in Qt/Embedded
QWidget *top = d->qpe_main_widget;
if ( !top )
top = mainWidget();
if ( top && d->keep_running ) {
if ( top->isVisible() )
r = TRUE;
#ifdef Q_WS_QWS
if ( !d->nomaximize )
top->showMaximized();
else
#endif
@@ -1415,127 +1106,81 @@ void QPEApplication::internalSetStyle( const QString &style )
setStyle( new QWindowsStyle );
}
else if ( style == "QPE" ) {
setStyle( new QPEStyle );
}
else if ( style == "Light" ) {
setStyle( new LightStyle );
}
#ifndef QT_NO_STYLE_PLATINUM
else if ( style == "Platinum" ) {
setStyle( new QPlatinumStyle );
}
#endif
#ifndef QT_NO_STYLE_MOTIF
else if ( style == "Motif" ) {
setStyle( new QMotifStyle );
}
#endif
#ifndef QT_NO_STYLE_MOTIFPLUS
else if ( style == "MotifPlus" ) {
setStyle( new QMotifPlusStyle );
}
#endif
- // HACK for Qt2 only
else {
QStyle *sty = 0;
QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/lib" + style. lower ( ) + ".so";
static QLibrary *lastlib = 0;
static StyleInterface *lastiface = 0;
QLibrary *lib = new QLibrary ( path );
StyleInterface *iface = 0;
if ( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK )
sty = iface-> create ( );
if ( sty ) {
setStyle ( sty );
- qDebug ( "Got Style: %p -- iface: %p, lib: %p\n", sty, iface, lib );
-
if ( lastiface )
lastiface-> release ( );
lastiface = iface;
-
if ( lastlib ) {
lastlib-> unload ( );
delete lastlib;
}
lastlib = lib;
}
else {
if ( iface )
iface-> release ( );
delete lib;
setStyle ( new QPEStyle ( ));
}
-
-#if 0
- // style == "Liquid Style (libliquid.so)" (or "Windows XP (libxp.so)"
-
- int p2 = style. findRev ( ']' );
- int p1 = style. findRev ( '[' );
- QString style2;
-
- if ( ( p1 > 0 ) && ( p2 > 0 ) && ( ( p1 + 1 ) < p2 ) )
- style2 = "lib" + style. mid ( p1 + 1, p2 - p1 - 1 ). lower ( ) + ".so";
- else
- style2 = "lib" + style. lower ( ) + ".so";
-
- static QLibrary *currentlib = 0;
-
- QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/" + style2;
-
- do { // try/catch simulation
- QLibrary *lib = new QLibrary ( path, QLibrary::Immediately );
-
- if ( lib ) {
- QStyle * ( *fpa ) ( ) = ( QStyle * ( * ) ( ) ) lib-> resolve ( "allocate" );
-
- if ( fpa ) {
- QStyle * sty = ( *fpa ) ( );
-
- if ( sty ) {
- setStyle ( sty );
-
- if ( currentlib )
- delete currentlib;
- currentlib = lib;
-
- break;
- }
- }
- delete lib;
- }
- }
- while ( false );
- // HACK for Qt2 only
-#endif
}
#endif
}
/*!
\internal
*/
void QPEApplication::prepareForTermination( bool willrestart )
{
if ( willrestart ) {
// Draw a big wait icon, the image can be altered in later revisions
// QWidget *d = QApplication::desktop();
QImage img = Resource::loadImage( "launcher/new_wait" );
QPixmap pix;
pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) );
QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize |
QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
lblWait->setPixmap( pix );
lblWait->setAlignment( QWidget::AlignCenter );
lblWait->show();
lblWait->showMaximized();
}
#ifndef SINGLE_APP
{ QCopEnvelope envelope( "QPE/System", "forceQuit()" );