summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/alarmserver.cpp11
-rw-r--r--library/qpeapplication.cpp2
2 files changed, 2 insertions, 11 deletions
diff --git a/library/alarmserver.cpp b/library/alarmserver.cpp
index 7e6e515..5e4dd18 100644
--- a/library/alarmserver.cpp
+++ b/library/alarmserver.cpp
@@ -63,202 +63,193 @@ protected:
63 void timerEvent( QTimerEvent *te ); 63 void timerEvent( QTimerEvent *te );
64private: 64private:
65 QString atfilename; 65 QString atfilename;
66}; 66};
67 67
68TimerReceiverObject *timerEventReceiver = NULL; 68TimerReceiverObject *timerEventReceiver = NULL;
69QList<timerEventItem> timerEventList; 69QList<timerEventItem> timerEventList;
70timerEventItem *nearestTimerEvent = NULL; 70timerEventItem *nearestTimerEvent = NULL;
71 71
72 72
73// set the timer to go off on the next event in the list 73// set the timer to go off on the next event in the list
74void setNearestTimerEvent() 74void setNearestTimerEvent()
75{ 75{
76 nearestTimerEvent = NULL; 76 nearestTimerEvent = NULL;
77 QListIterator<timerEventItem> it( timerEventList ); 77 QListIterator<timerEventItem> it( timerEventList );
78 if ( *it ) 78 if ( *it )
79 nearestTimerEvent = *it; 79 nearestTimerEvent = *it;
80 for ( ; *it; ++it ) 80 for ( ; *it; ++it )
81 if ( (*it)->UTCtime < nearestTimerEvent->UTCtime ) 81 if ( (*it)->UTCtime < nearestTimerEvent->UTCtime )
82 nearestTimerEvent = *it; 82 nearestTimerEvent = *it;
83 if (nearestTimerEvent) 83 if (nearestTimerEvent)
84 timerEventReceiver->resetTimer(); 84 timerEventReceiver->resetTimer();
85 else 85 else
86 timerEventReceiver->deleteTimer(); 86 timerEventReceiver->deleteTimer();
87} 87}
88 88
89 89
90//store current state to file 90//store current state to file
91//Simple implementation. Should run on a timer. 91//Simple implementation. Should run on a timer.
92 92
93static void saveState() 93static void saveState()
94{ 94{
95 QString savefilename = Global::applicationFileName( "AlarmServer", "saveFile" ); 95 QString savefilename = Global::applicationFileName( "AlarmServer", "saveFile" );
96 if ( timerEventList.isEmpty() ) { 96 if ( timerEventList.isEmpty() ) {
97 unlink( savefilename ); 97 unlink( savefilename );
98 return; 98 return;
99 } 99 }
100 100
101 QFile savefile(savefilename+".new"); 101 QFile savefile(savefilename+".new");
102 if ( savefile.open(IO_WriteOnly) ) { 102 if ( savefile.open(IO_WriteOnly) ) {
103 QDataStream ds( &savefile ); 103 QDataStream ds( &savefile );
104 104
105 //save 105 //save
106 106
107 QListIterator<timerEventItem> it( timerEventList ); 107 QListIterator<timerEventItem> it( timerEventList );
108 for ( ; *it; ++it ) { 108 for ( ; *it; ++it ) {
109 ds << it.current()->UTCtime; 109 ds << it.current()->UTCtime;
110 ds << it.current()->channel; 110 ds << it.current()->channel;
111 ds << it.current()->message; 111 ds << it.current()->message;
112 ds << it.current()->data; 112 ds << it.current()->data;
113 } 113 }
114 114
115 115
116 savefile.close(); 116 savefile.close();
117 unlink( savefilename ); 117 unlink( savefilename );
118 QDir d; d.rename(savefilename+".new",savefilename); 118 QDir d; d.rename(savefilename+".new",savefilename);
119 119
120 } 120 }
121} 121}
122 122
123/*! 123/*!
124 Sets up the alarm server. Restoring to previous state (session management). 124 Sets up the alarm server. Restoring to previous state (session management).
125 */ 125 */
126void AlarmServer::initialize() 126void AlarmServer::initialize()
127{ 127{
128 //read autosave file and put events in timerEventList 128 //read autosave file and put events in timerEventList
129 129
130 QString savefilename = Global::applicationFileName( "AlarmServer", "saveFile" ); 130 QString savefilename = Global::applicationFileName( "AlarmServer", "saveFile" );
131 131
132 QFile savefile(savefilename); 132 QFile savefile(savefilename);
133 if ( savefile.open(IO_ReadOnly) ) { 133 if ( savefile.open(IO_ReadOnly) ) {
134 QDataStream ds( &savefile ); 134 QDataStream ds( &savefile );
135 while ( !ds.atEnd() ) { 135 while ( !ds.atEnd() ) {
136 timerEventItem *newTimerEventItem = new timerEventItem; 136 timerEventItem *newTimerEventItem = new timerEventItem;
137 ds >> newTimerEventItem->UTCtime; 137 ds >> newTimerEventItem->UTCtime;
138 ds >> newTimerEventItem->channel; 138 ds >> newTimerEventItem->channel;
139 ds >> newTimerEventItem->message; 139 ds >> newTimerEventItem->message;
140 ds >> newTimerEventItem->data; 140 ds >> newTimerEventItem->data;
141 timerEventList.append( newTimerEventItem ); 141 timerEventList.append( newTimerEventItem );
142 } 142 }
143 savefile.close(); 143 savefile.close();
144 if (!timerEventReceiver) 144 if (!timerEventReceiver)
145 timerEventReceiver = new TimerReceiverObject; 145 timerEventReceiver = new TimerReceiverObject;
146 setNearestTimerEvent(); 146 setNearestTimerEvent();
147 } 147 }
148} 148}
149 149
150 150
151 151
152 152
153static const char* atdir = "/var/spool/at/"; 153static const char* atdir = "/var/spool/at/";
154 154
155static bool triggerAtd( bool writeHWClock = FALSE ) 155static bool triggerAtd( bool writeHWClock = FALSE )
156{ 156{
157 QFile trigger(QString(atdir) + "trigger"); 157 QFile trigger(QString(atdir) + "trigger");
158 if ( trigger.open(IO_WriteOnly|IO_Raw) ) { 158 if ( trigger.open(IO_WriteOnly|IO_Raw) ) {
159 159 if ( trigger.writeBlock("\n",2) != 2 ) {
160 const char* data =
161#ifdef QT_QWS_SHARP
162 //custom atd only writes HW Clock if we write a 'W'
163 ( writeHWClock ) ? "W\n" :
164#endif
165 data = "\n";
166 int len = strlen(data);
167 int total_written = trigger.writeBlock(data,len);
168 if ( total_written != len ) {
169 QMessageBox::critical( 0, QObject::tr( "Out of Space" ), 160 QMessageBox::critical( 0, QObject::tr( "Out of Space" ),
170 QObject::tr( "Unable to schedule alarm.\nFree some memory and try again." ) ); 161 QObject::tr( "Unable to schedule alarm.\nFree some memory and try again." ) );
171 trigger.close(); 162 trigger.close();
172 QFile::remove( trigger.name() ); 163 QFile::remove( trigger.name() );
173 return FALSE; 164 return FALSE;
174 } 165 }
175 return TRUE; 166 return TRUE;
176 } 167 }
177 return FALSE; 168 return FALSE;
178} 169}
179 170
180void TimerReceiverObject::deleteTimer() 171void TimerReceiverObject::deleteTimer()
181{ 172{
182 if ( !atfilename.isEmpty() ) { 173 if ( !atfilename.isEmpty() ) {
183 unlink( atfilename ); 174 unlink( atfilename );
184 atfilename = QString::null; 175 atfilename = QString::null;
185 triggerAtd( FALSE ); 176 triggerAtd( FALSE );
186 } 177 }
187} 178}
188 179
189void TimerReceiverObject::resetTimer() 180void TimerReceiverObject::resetTimer()
190{ 181{
191 const int maxsecs = 2147000; 182 const int maxsecs = 2147000;
192 int total_written; 183 int total_written;
193 QDateTime nearest = TimeConversion::fromUTC(nearestTimerEvent->UTCtime); 184 QDateTime nearest = TimeConversion::fromUTC(nearestTimerEvent->UTCtime);
194 QDateTime now = QDateTime::currentDateTime(); 185 QDateTime now = QDateTime::currentDateTime();
195 if ( nearest < now ) 186 if ( nearest < now )
196 nearest = now; 187 nearest = now;
197 int secs = TimeConversion::secsTo( now, nearest ); 188 int secs = TimeConversion::secsTo( now, nearest );
198 if ( secs > maxsecs ) { 189 if ( secs > maxsecs ) {
199 // too far for millisecond timing 190 // too far for millisecond timing
200 secs = maxsecs; 191 secs = maxsecs;
201 } 192 }
202 193
203 // System timer (needed so that we wake from deep sleep), 194 // System timer (needed so that we wake from deep sleep),
204 // from the Epoch in seconds. 195 // from the Epoch in seconds.
205 // 196 //
206 int at_secs = TimeConversion::toUTC(nearest); 197 int at_secs = TimeConversion::toUTC(nearest);
207 // qDebug("reset timer to %d seconds from Epoch",at_secs); 198 // qDebug("reset timer to %d seconds from Epoch",at_secs);
208 QString fn = atdir + QString::number(at_secs) + "." 199 QString fn = atdir + QString::number(at_secs) + "."
209 + QString::number(getpid()); 200 + QString::number(getpid());
210 if ( fn != atfilename ) { 201 if ( fn != atfilename ) {
211 QFile atfile(fn+".new"); 202 QFile atfile(fn+".new");
212 if ( atfile.open(IO_WriteOnly|IO_Raw) ) { 203 if ( atfile.open(IO_WriteOnly|IO_Raw) ) {
213 // just wake up and delete the at file 204 // just wake up and delete the at file
214 QString cmd = "#!/bin/sh\nrm " + fn; 205 QString cmd = "#!/bin/sh\nrm " + fn;
215 total_written = atfile.writeBlock(cmd.latin1(),cmd.length()); 206 total_written = atfile.writeBlock(cmd.latin1(),cmd.length());
216 if ( total_written != int(cmd.length()) ) { 207 if ( total_written != int(cmd.length()) ) {
217 QMessageBox::critical( 0, tr("Out of Space"), 208 QMessageBox::critical( 0, tr("Out of Space"),
218 tr("Unable to schedule alarm.\n" 209 tr("Unable to schedule alarm.\n"
219 "Please free up space and try again") ); 210 "Please free up space and try again") );
220 atfile.close(); 211 atfile.close();
221 QFile::remove( atfile.name() ); 212 QFile::remove( atfile.name() );
222 return; 213 return;
223 } 214 }
224 atfile.close(); 215 atfile.close();
225 unlink( atfilename ); 216 unlink( atfilename );
226 QDir d; d.rename(fn+".new",fn); 217 QDir d; d.rename(fn+".new",fn);
227 chmod(fn.latin1(),0755); 218 chmod(fn.latin1(),0755);
228 atfilename = fn; 219 atfilename = fn;
229 triggerAtd( FALSE ); 220 triggerAtd( FALSE );
230 } else { 221 } else {
231 qWarning("Cannot open atd file %s",fn.latin1()); 222 qWarning("Cannot open atd file %s",fn.latin1());
232 } 223 }
233 } 224 }
234 // Qt timers (does the actual alarm) 225 // Qt timers (does the actual alarm)
235 // from now in milliseconds 226 // from now in milliseconds
236 // 227 //
237 qDebug("AlarmServer waiting %d seconds",secs); 228 qDebug("AlarmServer waiting %d seconds",secs);
238 startTimer( 1000 * secs + 500 ); 229 startTimer( 1000 * secs + 500 );
239} 230}
240 231
241void TimerReceiverObject::timerEvent( QTimerEvent * ) 232void TimerReceiverObject::timerEvent( QTimerEvent * )
242{ 233{
243 bool needSave = FALSE; 234 bool needSave = FALSE;
244 killTimers(); 235 killTimers();
245 if (nearestTimerEvent) { 236 if (nearestTimerEvent) {
246 if ( nearestTimerEvent->UTCtime 237 if ( nearestTimerEvent->UTCtime
247 <= TimeConversion::toUTC(QDateTime::currentDateTime()) ) { 238 <= TimeConversion::toUTC(QDateTime::currentDateTime()) ) {
248#ifndef QT_NO_COP 239#ifndef QT_NO_COP
249 QCopEnvelope e( nearestTimerEvent->channel, 240 QCopEnvelope e( nearestTimerEvent->channel,
250 nearestTimerEvent->message ); 241 nearestTimerEvent->message );
251 e << TimeConversion::fromUTC( nearestTimerEvent->UTCtime ) 242 e << TimeConversion::fromUTC( nearestTimerEvent->UTCtime )
252 << nearestTimerEvent->data; 243 << nearestTimerEvent->data;
253#endif 244#endif
254 timerEventList.remove( nearestTimerEvent ); 245 timerEventList.remove( nearestTimerEvent );
255 needSave = TRUE; 246 needSave = TRUE;
256 } 247 }
257 setNearestTimerEvent(); 248 setNearestTimerEvent();
258 } else { 249 } else {
259 resetTimer(); 250 resetTimer();
260 } 251 }
261 if ( needSave ) 252 if ( needSave )
262 saveState(); 253 saveState();
263} 254}
264 255
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 65fac84..efa65bc 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1544,159 +1544,159 @@ void QPEApplication::ungrabKeyboard()
1544} 1544}
1545 1545
1546/*! 1546/*!
1547 Grabs the physical keyboard keys, e.g. the application's launching 1547 Grabs the physical keyboard keys, e.g. the application's launching
1548 keys. Instead of launching applications when these keys are pressed 1548 keys. Instead of launching applications when these keys are pressed
1549 the signals emitted are sent to this application instead. Some games 1549 the signals emitted are sent to this application instead. Some games
1550 programs take over the launch keys in this way to make interaction 1550 programs take over the launch keys in this way to make interaction
1551 easier. 1551 easier.
1552 1552
1553 \sa ungrabKeyboard() 1553 \sa ungrabKeyboard()
1554*/ 1554*/
1555void QPEApplication::grabKeyboard() 1555void QPEApplication::grabKeyboard()
1556{ 1556{
1557 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; 1557 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d;
1558 if ( qApp->type() == QApplication::GuiServer ) 1558 if ( qApp->type() == QApplication::GuiServer )
1559 d->kbgrabber = 0; 1559 d->kbgrabber = 0;
1560 else { 1560 else {
1561#ifndef QT_NO_COP 1561#ifndef QT_NO_COP
1562 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); 1562 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
1563 e << d->appName; 1563 e << d->appName;
1564#endif 1564#endif
1565 1565
1566 d->kbgrabber = 2; // me 1566 d->kbgrabber = 2; // me
1567 } 1567 }
1568} 1568}
1569 1569
1570/*! 1570/*!
1571 \reimp 1571 \reimp
1572*/ 1572*/
1573int QPEApplication::exec() 1573int QPEApplication::exec()
1574{ 1574{
1575#ifndef QT_NO_COP 1575#ifndef QT_NO_COP
1576 d->sendQCopQ(); 1576 d->sendQCopQ();
1577#endif 1577#endif
1578 1578
1579 if ( d->keep_running ) 1579 if ( d->keep_running )
1580 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 1580 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
1581 return QApplication::exec(); 1581 return QApplication::exec();
1582 1582
1583#ifndef QT_NO_COP 1583#ifndef QT_NO_COP
1584 1584
1585 { 1585 {
1586 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1586 QCopEnvelope e( "QPE/System", "closing(QString)" );
1587 e << d->appName; 1587 e << d->appName;
1588 } 1588 }
1589#endif 1589#endif
1590 processEvents(); 1590 processEvents();
1591 return 0; 1591 return 0;
1592} 1592}
1593 1593
1594/*! 1594/*!
1595 \internal 1595 \internal
1596 External request for application to quit. Quits if possible without 1596 External request for application to quit. Quits if possible without
1597 loosing state. 1597 loosing state.
1598*/ 1598*/
1599void QPEApplication::tryQuit() 1599void QPEApplication::tryQuit()
1600{ 1600{
1601 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 1601 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
1602 return ; // Inside modal loop or konsole. Too hard to save state. 1602 return ; // Inside modal loop or konsole. Too hard to save state.
1603#ifndef QT_NO_COP 1603#ifndef QT_NO_COP
1604 1604
1605 { 1605 {
1606 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1606 QCopEnvelope e( "QPE/System", "closing(QString)" );
1607 e << d->appName; 1607 e << d->appName;
1608 } 1608 }
1609#endif 1609#endif
1610 processEvents(); 1610 processEvents();
1611 1611
1612 quit(); 1612 quit();
1613} 1613}
1614 1614
1615/*! 1615/*!
1616 \internal 1616 \internal
1617 User initiated quit. Makes the window 'Go Away'. If preloaded this means 1617 User initiated quit. Makes the window 'Go Away'. If preloaded this means
1618 hiding the window. If not it means quitting the application. 1618 hiding the window. If not it means quitting the application.
1619 As this is user initiated we don't need to check state. 1619 As this is user initiated we don't need to check state.
1620*/ 1620*/
1621void QPEApplication::hideOrQuit() 1621void QPEApplication::hideOrQuit()
1622{ 1622{
1623 processEvents(); 1623 processEvents();
1624 1624
1625 // If we are a preloaded application we don't actually quit, so emit 1625 // If we are a preloaded application we don't actually quit, so emit
1626 // a System message indicating we're quasi-closing. 1626 // a System message indicating we're quasi-closing.
1627 if ( d->preloaded && d->qpe_main_widget ) 1627 if ( d->preloaded && d->qpe_main_widget )
1628#ifndef QT_NO_COP 1628#ifndef QT_NO_COP
1629 1629
1630 { 1630 {
1631 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 1631 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
1632 e << d->appName; 1632 e << d->appName;
1633 d->qpe_main_widget->hide(); 1633 d->qpe_main_widget->hide();
1634 } 1634 }
1635#endif 1635#endif
1636 else 1636 else
1637 quit(); 1637 quit();
1638} 1638}
1639 1639
1640#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) 1640#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SHARP)
1641 1641
1642// The libraries with the skiff package (and possibly others) have 1642// The libraries with the skiff package (and possibly others) have
1643// completely useless implementations of builtin new and delete that 1643// completely useless implementations of builtin new and delete that
1644// use about 50% of your CPU. Here we revert to the simple libc 1644// use about 50% of your CPU. Here we revert to the simple libc
1645// functions. 1645// functions.
1646 1646
1647void* operator new[]( size_t size ) 1647void* operator new[]( size_t size )
1648{ 1648{
1649 return malloc( size ); 1649 return malloc( size );
1650} 1650}
1651 1651
1652void* operator new( size_t size ) 1652void* operator new( size_t size )
1653{ 1653{
1654 return malloc( size ); 1654 return malloc( size );
1655} 1655}
1656 1656
1657void operator delete[]( void* p ) 1657void operator delete[]( void* p )
1658{ 1658{
1659 free( p ); 1659 free( p );
1660} 1660}
1661 1661
1662void operator delete[]( void* p, size_t /*size*/ ) 1662void operator delete[]( void* p, size_t /*size*/ )
1663{ 1663{
1664 free( p ); 1664 free( p );
1665} 1665}
1666 1666
1667void operator delete( void* p ) 1667void operator delete( void* p )
1668{ 1668{
1669 free( p ); 1669 free( p );
1670} 1670}
1671 1671
1672void operator delete( void* p, size_t /*size*/ ) 1672void operator delete( void* p, size_t /*size*/ )
1673{ 1673{
1674 free( p ); 1674 free( p );
1675} 1675}
1676 1676
1677#endif 1677#endif
1678 1678
1679#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 1679#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
1680#include <qwidgetlist.h> 1680#include <qwidgetlist.h>
1681#ifdef QWS 1681#ifdef QWS
1682#include <qgfx_qws.h> 1682#include <qgfx_qws.h>
1683extern QRect qt_maxWindowRect; 1683extern QRect qt_maxWindowRect;
1684void qt_setMaxWindowRect(const QRect& r ) 1684void qt_setMaxWindowRect(const QRect& r )
1685{ 1685{
1686 qt_maxWindowRect = qt_screen->mapFromDevice( r, 1686 qt_maxWindowRect = qt_screen->mapFromDevice( r,
1687 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); 1687 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) );
1688 // Re-resize any maximized windows 1688 // Re-resize any maximized windows
1689 QWidgetList* l = QApplication::topLevelWidgets(); 1689 QWidgetList* l = QApplication::topLevelWidgets();
1690 if ( l ) { 1690 if ( l ) {
1691 QWidget * w = l->first(); 1691 QWidget * w = l->first();
1692 while ( w ) { 1692 while ( w ) {
1693 if ( w->isVisible() && w->isMaximized() ) { 1693 if ( w->isVisible() && w->isMaximized() ) {
1694 w->showMaximized(); 1694 w->showMaximized();
1695 } 1695 }
1696 w = l->next(); 1696 w = l->next();
1697 } 1697 }
1698 delete l; 1698 delete l;
1699 } 1699 }
1700} 1700}
1701#endif 1701#endif
1702#endif 1702#endif