summaryrefslogtreecommitdiff
path: root/library
Side-by-side diff
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 86dbe85..d0e9613 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -82,192 +82,202 @@
#include "fontmanager.h"
#endif
#include "alarmserver.h"
#include "applnk.h"
#include "qpemenubar.h"
#include "textcodecinterface.h"
#include "imagecodecinterface.h"
#include <unistd.h>
#include <sys/file.h>
#include <sys/ioctl.h>
#ifndef QT_NO_SOUND
#include <sys/soundcard.h>
#endif
#include "qt_override_p.h"
class HackWidget : public QWidget
{
public:
bool needsOk()
{ return (getWState() & WState_Reserved1 ); }
QRect normalGeometry()
{ return topData()->normalGeometry; };
};
class QPEApplicationData
{
public:
QPEApplicationData ( )
: presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ),
notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ),
keep_running( true ), qcopQok( false ), qpe_main_widget( 0 )
{}
int presstimer;
QWidget* presswidget;
QPoint presspos;
bool rightpressed : 1;
bool kbgrabbed : 1;
bool notbusysent : 1;
bool preloaded : 1;
bool forceshow : 1;
bool nomaximize : 1;
bool keep_running : 1;
bool qcopQok : 1;
QStringList langs;
QString appName;
struct QCopRec
{
QCopRec( const QCString &ch, const QCString &msg,
const QByteArray &d ) :
channel( ch ), message( msg ), data( d )
{ }
QCString channel;
QCString message;
QByteArray data;
};
QWidget* qpe_main_widget;
QGuardedPtr<QWidget> lastraised;
QQueue<QCopRec> qcopq;
QString styleName;
QString decorationName;
void enqueueQCop( const QCString &ch, const QCString &msg,
const QByteArray &data )
{
qcopq.enqueue( new QCopRec( ch, msg, data ) );
}
void sendQCopQ()
{
if (!qcopQok )
return;
QCopRec * r;
while((r=qcopq.dequeue())) {
// remove from queue before sending...
// event loop can come around again before getting
// back from sendLocally
#ifndef QT_NO_COP
QCopChannel::sendLocally( r->channel, r->message, r->data );
#endif
delete r;
}
}
static void show_mx(QWidget* mw, bool nomaximize, QString &strName/* = QString::null */)
{
+ // ugly hack, remove that later after finding a sane solution
+ // Addendum: Only Sharp currently has models with high resolution but (physically) small displays,
+ // so this is only useful if QT_QWS_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has
+ // a (physically) large enough display to use the small icons
+#if defined(OPIE_HIGH_RES_SMALL_PHY)
+ if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) {
+ ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true );
+ }
+#endif
+
QPoint p;
QSize s;
bool max;
if ( mw->isVisible() ) {
if ( read_widget_rect(strName, max, p, s) && validate_widget_size(mw, p, s) ) {
mw->resize(s);
mw->move(p);
}
mw->raise();
} else {
if ( mw->layout() && mw->inherits("QDialog") ) {
if ( read_widget_rect(strName, max, p, s) && validate_widget_size(mw, p, s) ) {
mw->resize(s);
mw->move(p);
if ( max && !nomaximize ) {
mw->showMaximized();
} else {
mw->show();
}
} else {
qpe_show_dialog((QDialog*)mw,nomaximize);
}
} else {
if ( read_widget_rect(strName, max, p, s) && validate_widget_size(mw, p, s) ) {
mw->resize(s);
mw->move(p);
} else { //no stored rectangle, make an estimation
int x = (qApp->desktop()->width()-mw->frameGeometry().width())/2;
int y = (qApp->desktop()->height()-mw->frameGeometry().height())/2;
mw->move( QMAX(x,0), QMAX(y,0) );
#ifdef Q_WS_QWS
if ( !nomaximize )
mw->showMaximized();
#endif
}
if ( max && !nomaximize )
mw->showMaximized();
else
mw->show();
}
}
}
static void qpe_show_dialog( QDialog* d, bool nomax )
{
QSize sh = d->sizeHint();
int w = QMAX(sh.width(),d->width());
int h = QMAX(sh.height(),d->height());
if ( d->parentWidget() && !d->parentWidget()->topLevelWidget()->isMaximized() )
nomax = TRUE;
#ifndef Q_WS_QWS
QSize s(qApp->desktop()->width(), qApp->desktop()->height() );
#else
QSize s(qt_maxWindowRect.width(), qt_maxWindowRect.height() );
#endif
int maxX = s.width() - (d->frameGeometry().width() - d->geometry().width());
int maxY = s.height() - (d->frameGeometry().height() - d->geometry().height());
if ( (w >= maxX && h >= maxY) || ( (!nomax) && ( w > s.width()*3/4 || h > s.height()*3/4 ) ) ) {
d->showMaximized();
} else {
// try centering the dialog around its parent
QPoint p(0,0);
if ( d->parentWidget() ) {
QPoint pp = d->parentWidget()->mapToGlobal( QPoint(0,0) );
p = QPoint( pp.x() + d->parentWidget()->width()/2,
pp.y() + d->parentWidget()->height()/ 2 );
} else {
p = QPoint( maxX/2, maxY/2 );
}
p = QPoint( p.x() - w/2, p.y() - h/2 );
// qDebug("p(x,y) is %d %d", p.x(), p.y() );
if ( w >= maxX ) {
if ( p.y() < 0 )
p.setY(0);
if ( p.y() + h > maxY )
p.setY( maxY - h);
d->resize(maxX, h);
d->move(0, p.y() );
} else if ( h >= maxY ) {
if ( p.x() < 0 )
p.setX(0);
if ( p.x() + w > maxX )
p.setX( maxX - w);
d->resize(w, maxY);
d->move(p.x(),0);
} else {