summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 4e08a1f..d1a7cd2 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1519,321 +1519,333 @@ static void createDict()
1519 if ( !stylusDict ) 1519 if ( !stylusDict )
1520 stylusDict = new QPtrDict<void>; 1520 stylusDict = new QPtrDict<void>;
1521} 1521}
1522 1522
1523/*! 1523/*!
1524 Returns the current StylusMode for widget \a w. 1524 Returns the current StylusMode for widget \a w.
1525 1525
1526 \sa setStylusOperation() StylusMode 1526 \sa setStylusOperation() StylusMode
1527*/ 1527*/
1528QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 1528QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
1529{ 1529{
1530 if ( stylusDict ) 1530 if ( stylusDict )
1531 return ( StylusMode ) ( int ) stylusDict->find( w ); 1531 return ( StylusMode ) ( int ) stylusDict->find( w );
1532 return LeftOnly; 1532 return LeftOnly;
1533} 1533}
1534 1534
1535/*! 1535/*!
1536 \enum QPEApplication::StylusMode 1536 \enum QPEApplication::StylusMode
1537 1537
1538 \value LeftOnly the stylus only generates LeftButton 1538 \value LeftOnly the stylus only generates LeftButton
1539 events (the default). 1539 events (the default).
1540 \value RightOnHold the stylus generates RightButton events 1540 \value RightOnHold the stylus generates RightButton events
1541 if the user uses the press-and-hold gesture. 1541 if the user uses the press-and-hold gesture.
1542 1542
1543 \sa setStylusOperation() stylusOperation() 1543 \sa setStylusOperation() stylusOperation()
1544*/ 1544*/
1545 1545
1546/*! 1546/*!
1547 Causes widget \a w to receive mouse events according to the stylus 1547 Causes widget \a w to receive mouse events according to the stylus
1548 \a mode. 1548 \a mode.
1549 1549
1550 \sa stylusOperation() StylusMode 1550 \sa stylusOperation() StylusMode
1551*/ 1551*/
1552void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) 1552void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode )
1553{ 1553{
1554 createDict(); 1554 createDict();
1555 if ( mode == LeftOnly ) { 1555 if ( mode == LeftOnly ) {
1556 stylusDict->remove 1556 stylusDict->remove
1557 ( w ); 1557 ( w );
1558 w->removeEventFilter( qApp ); 1558 w->removeEventFilter( qApp );
1559 } 1559 }
1560 else { 1560 else {
1561 stylusDict->insert( w, ( void* ) mode ); 1561 stylusDict->insert( w, ( void* ) mode );
1562 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); 1562 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) );
1563 w->installEventFilter( qApp ); 1563 w->installEventFilter( qApp );
1564 } 1564 }
1565} 1565}
1566 1566
1567 1567
1568/*! 1568/*!
1569 \reimp 1569 \reimp
1570*/ 1570*/
1571bool QPEApplication::eventFilter( QObject *o, QEvent *e ) 1571bool QPEApplication::eventFilter( QObject *o, QEvent *e )
1572{ 1572{
1573 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { 1573 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
1574 QMouseEvent * me = ( QMouseEvent* ) e; 1574 QMouseEvent * me = ( QMouseEvent* ) e;
1575 StylusMode mode = (StylusMode)(int)stylusDict->find(o); 1575 StylusMode mode = (StylusMode)(int)stylusDict->find(o);
1576 switch (mode) { 1576 switch (mode) {
1577 case RightOnHold: 1577 case RightOnHold:
1578 switch ( me->type() ) { 1578 switch ( me->type() ) {
1579 case QEvent::MouseButtonPress: 1579 case QEvent::MouseButtonPress:
1580 if ( me->button() == LeftButton ) { 1580 if ( me->button() == LeftButton ) {
1581 d->presstimer = startTimer(500); // #### pref. 1581 d->presstimer = startTimer(500); // #### pref.
1582 d->presswidget = (QWidget*)o; 1582 d->presswidget = (QWidget*)o;
1583 d->presspos = me->pos(); 1583 d->presspos = me->pos();
1584 d->rightpressed = FALSE; 1584 d->rightpressed = FALSE;
1585 } 1585 }
1586 break; 1586 break;
1587 case QEvent::MouseMove: 1587 case QEvent::MouseMove:
1588 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) { 1588 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) {
1589 killTimer(d->presstimer); 1589 killTimer(d->presstimer);
1590 d->presstimer = 0; 1590 d->presstimer = 0;
1591 } 1591 }
1592 break; 1592 break;
1593 case QEvent::MouseButtonRelease: 1593 case QEvent::MouseButtonRelease:
1594 if ( me->button() == LeftButton ) { 1594 if ( me->button() == LeftButton ) {
1595 if ( d->presstimer ) { 1595 if ( d->presstimer ) {
1596 killTimer(d->presstimer); 1596 killTimer(d->presstimer);
1597 d->presstimer = 0; 1597 d->presstimer = 0;
1598 } 1598 }
1599 if ( d->rightpressed && d->presswidget ) { 1599 if ( d->rightpressed && d->presswidget ) {
1600 // Right released 1600 // Right released
1601 postEvent( d->presswidget, 1601 postEvent( d->presswidget,
1602 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), 1602 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
1603 RightButton, LeftButton + RightButton ) ); 1603 RightButton, LeftButton + RightButton ) );
1604 // Left released, off-widget 1604 // Left released, off-widget
1605 postEvent( d->presswidget, 1605 postEvent( d->presswidget,
1606 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), 1606 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1),
1607 LeftButton, LeftButton ) ); 1607 LeftButton, LeftButton ) );
1608 postEvent( d->presswidget, 1608 postEvent( d->presswidget,
1609 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), 1609 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1),
1610 LeftButton, LeftButton ) ); 1610 LeftButton, LeftButton ) );
1611 d->rightpressed = FALSE; 1611 d->rightpressed = FALSE;
1612 return TRUE; // don't send the real Left release 1612 return TRUE; // don't send the real Left release
1613 } 1613 }
1614 } 1614 }
1615 break; 1615 break;
1616 default: 1616 default:
1617 break; 1617 break;
1618 } 1618 }
1619 break; 1619 break;
1620 default: 1620 default:
1621 ; 1621 ;
1622 } 1622 }
1623 } 1623 }
1624 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 1624 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
1625 QKeyEvent *ke = (QKeyEvent *)e; 1625 QKeyEvent *ke = (QKeyEvent *)e;
1626 if ( ke->key() == Key_Enter ) { 1626 if ( ke->key() == Key_Enter ) {
1627 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 1627 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
1628 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 1628 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
1629 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 1629 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
1630 return TRUE; 1630 return TRUE;
1631 } 1631 }
1632 } 1632 }
1633 } 1633 }
1634 return FALSE; 1634 return FALSE;
1635} 1635}
1636 1636
1637/*! 1637/*!
1638 \reimp 1638 \reimp
1639*/ 1639*/
1640void QPEApplication::timerEvent( QTimerEvent *e ) 1640void QPEApplication::timerEvent( QTimerEvent *e )
1641{ 1641{
1642 if ( e->timerId() == d->presstimer && d->presswidget ) { 1642 if ( e->timerId() == d->presstimer && d->presswidget ) {
1643 // Right pressed 1643 // Right pressed
1644 postEvent( d->presswidget, 1644 postEvent( d->presswidget,
1645 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 1645 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
1646 RightButton, LeftButton ) ); 1646 RightButton, LeftButton ) );
1647 killTimer( d->presstimer ); 1647 killTimer( d->presstimer );
1648 d->presstimer = 0; 1648 d->presstimer = 0;
1649 d->rightpressed = TRUE; 1649 d->rightpressed = TRUE;
1650 } 1650 }
1651} 1651}
1652 1652
1653void QPEApplication::removeSenderFromStylusDict() 1653void QPEApplication::removeSenderFromStylusDict()
1654{ 1654{
1655 stylusDict->remove 1655 stylusDict->remove
1656 ( ( void* ) sender() ); 1656 ( ( void* ) sender() );
1657 if ( d->presswidget == sender() ) 1657 if ( d->presswidget == sender() )
1658 d->presswidget = 0; 1658 d->presswidget = 0;
1659} 1659}
1660 1660
1661/*! 1661/*!
1662 \internal 1662 \internal
1663*/ 1663*/
1664bool QPEApplication::keyboardGrabbed() const 1664bool QPEApplication::keyboardGrabbed() const
1665{ 1665{
1666 return d->kbgrabbed; 1666 return d->kbgrabbed;
1667} 1667}
1668 1668
1669 1669
1670/*! 1670/*!
1671 Reverses the effect of grabKeyboard(). This is called automatically 1671 Reverses the effect of grabKeyboard(). This is called automatically
1672 on program exit. 1672 on program exit.
1673*/ 1673*/
1674void QPEApplication::ungrabKeyboard() 1674void QPEApplication::ungrabKeyboard()
1675{ 1675{
1676 ((QPEApplication *) qApp )-> d-> kbgrabbed = false; 1676 ((QPEApplication *) qApp )-> d-> kbgrabbed = false;
1677} 1677}
1678 1678
1679/*! 1679/*!
1680 Grabs the physical keyboard keys, e.g. the application's launching 1680 Grabs the physical keyboard keys, e.g. the application's launching
1681 keys. Instead of launching applications when these keys are pressed 1681 keys. Instead of launching applications when these keys are pressed
1682 the signals emitted are sent to this application instead. Some games 1682 the signals emitted are sent to this application instead. Some games
1683 programs take over the launch keys in this way to make interaction 1683 programs take over the launch keys in this way to make interaction
1684 easier. 1684 easier.
1685 1685
1686 \sa ungrabKeyboard() 1686 \sa ungrabKeyboard()
1687*/ 1687*/
1688void QPEApplication::grabKeyboard() 1688void QPEApplication::grabKeyboard()
1689{ 1689{
1690 ((QPEApplication *) qApp )-> d-> kbgrabbed = true; 1690 ((QPEApplication *) qApp )-> d-> kbgrabbed = true;
1691} 1691}
1692 1692
1693/*! 1693/*!
1694 \reimp 1694 \reimp
1695*/ 1695*/
1696int QPEApplication::exec() 1696int QPEApplication::exec()
1697{ 1697{
1698#ifndef QT_NO_COP 1698#ifndef QT_NO_COP
1699 d->sendQCopQ(); 1699 d->sendQCopQ();
1700#endif 1700#endif
1701 1701
1702 if ( d->keep_running ) 1702 if ( d->keep_running )
1703 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 1703 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
1704 return QApplication::exec(); 1704 return QApplication::exec();
1705 1705
1706#ifndef QT_NO_COP 1706#ifndef QT_NO_COP
1707 1707
1708 { 1708 {
1709 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1709 QCopEnvelope e( "QPE/System", "closing(QString)" );
1710 e << d->appName; 1710 e << d->appName;
1711 } 1711 }
1712#endif 1712#endif
1713 processEvents(); 1713 processEvents();
1714 return 0; 1714 return 0;
1715} 1715}
1716 1716
1717/*! 1717/*!
1718 \internal 1718 \internal
1719 External request for application to quit. Quits if possible without 1719 External request for application to quit. Quits if possible without
1720 loosing state. 1720 loosing state.
1721*/ 1721*/
1722void QPEApplication::tryQuit() 1722void QPEApplication::tryQuit()
1723{ 1723{
1724 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 1724 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
1725 return ; // Inside modal loop or konsole. Too hard to save state. 1725 return ; // Inside modal loop or konsole. Too hard to save state.
1726#ifndef QT_NO_COP 1726#ifndef QT_NO_COP
1727 1727
1728 { 1728 {
1729 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1729 QCopEnvelope e( "QPE/System", "closing(QString)" );
1730 e << d->appName; 1730 e << d->appName;
1731 } 1731 }
1732#endif 1732#endif
1733 processEvents(); 1733 processEvents();
1734 1734
1735 quit(); 1735 quit();
1736} 1736}
1737 1737
1738/*! 1738/*!
1739 \internal 1739 \internal
1740*/ 1740*/
1741void QPEApplication::installTranslation( const QString& baseName ) { 1741void QPEApplication::installTranslation( const QString& baseName ) {
1742 QTranslator* trans = new QTranslator(this); 1742 QTranslator* trans = new QTranslator(this);
1743 QString tfn = qpeDir() + "/i18n/"+baseName; 1743 QString tfn = qpeDir() + "/i18n/"+baseName;
1744 if ( trans->load( tfn ) ) 1744 if ( trans->load( tfn ) )
1745 installTranslator( trans ); 1745 installTranslator( trans );
1746 else 1746 else
1747 delete trans; 1747 delete trans;
1748} 1748}
1749 1749
1750/*! 1750/*!
1751 \internal 1751 \internal
1752 User initiated quit. Makes the window 'Go Away'. If preloaded this means 1752 User initiated quit. Makes the window 'Go Away'. If preloaded this means
1753 hiding the window. If not it means quitting the application. 1753 hiding the window. If not it means quitting the application.
1754 As this is user initiated we don't need to check state. 1754 As this is user initiated we don't need to check state.
1755*/ 1755*/
1756void QPEApplication::hideOrQuit() 1756void QPEApplication::hideOrQuit()
1757{ 1757{
1758 processEvents(); 1758 processEvents();
1759 1759
1760 // If we are a preloaded application we don't actually quit, so emit 1760 // If we are a preloaded application we don't actually quit, so emit
1761 // a System message indicating we're quasi-closing. 1761 // a System message indicating we're quasi-closing.
1762 if ( d->preloaded && d->qpe_main_widget ) 1762 if ( d->preloaded && d->qpe_main_widget )
1763#ifndef QT_NO_COP 1763#ifndef QT_NO_COP
1764 1764
1765 { 1765 {
1766 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 1766 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
1767 e << d->appName; 1767 e << d->appName;
1768 d->qpe_main_widget->hide(); 1768 d->qpe_main_widget->hide();
1769 } 1769 }
1770#endif 1770#endif
1771 else 1771 else
1772 quit(); 1772 quit();
1773} 1773}
1774 1774
1775#if (__GNUC__ > 2 )
1776extern "C" void __cxa_pure_virtual();
1777
1778void __cxa_pure_virtual()
1779{
1780 fprintf( stderr, "Pure virtual called\n");
1781 abort();
1782
1783}
1784
1785#endif
1786
1775 1787
1776#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_RAMSES) 1788#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_RAMSES)
1777 1789
1778// The libraries with the skiff package (and possibly others) have 1790// The libraries with the skiff package (and possibly others) have
1779// completely useless implementations of builtin new and delete that 1791// completely useless implementations of builtin new and delete that
1780// use about 50% of your CPU. Here we revert to the simple libc 1792// use about 50% of your CPU. Here we revert to the simple libc
1781// functions. 1793// functions.
1782 1794
1783void* operator new[]( size_t size ) 1795void* operator new[]( size_t size )
1784{ 1796{
1785 return malloc( size ); 1797 return malloc( size );
1786} 1798}
1787 1799
1788void* operator new( size_t size ) 1800void* operator new( size_t size )
1789{ 1801{
1790 return malloc( size ); 1802 return malloc( size );
1791} 1803}
1792 1804
1793void operator delete[]( void* p ) 1805void operator delete[]( void* p )
1794{ 1806{
1795 free( p ); 1807 free( p );
1796} 1808}
1797 1809
1798void operator delete[]( void* p, size_t /*size*/ ) 1810void operator delete[]( void* p, size_t /*size*/ )
1799{ 1811{
1800 free( p ); 1812 free( p );
1801} 1813}
1802 1814
1803 1815
1804void operator delete( void* p ) 1816void operator delete( void* p )
1805{ 1817{
1806 free( p ); 1818 free( p );
1807} 1819}
1808 1820
1809void operator delete( void* p, size_t /*size*/ ) 1821void operator delete( void* p, size_t /*size*/ )
1810{ 1822{
1811 free( p ); 1823 free( p );
1812} 1824}
1813 1825
1814#endif 1826#endif
1815 1827
1816#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 1828#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
1817#include <qwidgetlist.h> 1829#include <qwidgetlist.h>
1818#ifdef QWS 1830#ifdef QWS
1819#include <qgfx_qws.h> 1831#include <qgfx_qws.h>
1820extern QRect qt_maxWindowRect; 1832extern QRect qt_maxWindowRect;
1821void qt_setMaxWindowRect(const QRect& r ) 1833void qt_setMaxWindowRect(const QRect& r )
1822{ 1834{
1823 qt_maxWindowRect = qt_screen->mapFromDevice( r, 1835 qt_maxWindowRect = qt_screen->mapFromDevice( r,
1824 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); 1836 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) );
1825 // Re-resize any maximized windows 1837 // Re-resize any maximized windows
1826 QWidgetList* l = QApplication::topLevelWidgets(); 1838 QWidgetList* l = QApplication::topLevelWidgets();
1827 if ( l ) { 1839 if ( l ) {
1828 QWidget * w = l->first(); 1840 QWidget * w = l->first();
1829 while ( w ) { 1841 while ( w ) {
1830 if ( w->isVisible() && w->isMaximized() ) { 1842 if ( w->isVisible() && w->isMaximized() ) {
1831 w->showMaximized(); 1843 w->showMaximized();
1832 } 1844 }
1833 w = l->next(); 1845 w = l->next();
1834 } 1846 }
1835 delete l; 1847 delete l;
1836 } 1848 }
1837} 1849}
1838#endif 1850#endif
1839#endif 1851#endif