author | zecke <zecke> | 2004-09-18 01:08:08 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-09-18 01:08:08 (UTC) |
commit | 5096f9bd9f1a06e5238e2206eee195c43a2bdb6b (patch) (unidiff) | |
tree | 57281b88624984d3b2dc7950cd2a5f586f06f076 | |
parent | 081f8a3c3a6c6d45743f451cd9dc966a135b8156 (diff) | |
download | opie-5096f9bd9f1a06e5238e2206eee195c43a2bdb6b.zip opie-5096f9bd9f1a06e5238e2206eee195c43a2bdb6b.tar.gz opie-5096f9bd9f1a06e5238e2206eee195c43a2bdb6b.tar.bz2 |
The following change is untested on a real device. So please try and
bitch if I broke something!!!
Make unmounting of sdcards more robust. If we find a /dev/mmcard1 or
/dev/mmc/1 or /dev/mmc* we will remember that device name and if the
user asks us to eject it we will use that name.
-rw-r--r-- | core/applets/cardmon/cardmon.cpp | 15 | ||||
-rw-r--r-- | core/applets/cardmon/cardmon.h | 1 |
2 files changed, 6 insertions, 10 deletions
diff --git a/core/applets/cardmon/cardmon.cpp b/core/applets/cardmon/cardmon.cpp index 48146ab..43ccce2 100644 --- a/core/applets/cardmon/cardmon.cpp +++ b/core/applets/cardmon/cardmon.cpp | |||
@@ -125,39 +125,34 @@ void CardMonitor::mousePressEvent( QMouseEvent * ) { | |||
125 | if ( cardInPcmcia1 ) { | 125 | if ( cardInPcmcia1 ) { |
126 | menu-> | 126 | menu-> |
127 | insertItem( QIconSet | 127 | insertItem( QIconSet |
128 | ( Resource::loadPixmap( "cardmon/" + cardInPcmcia1Type ) ), | 128 | ( Resource::loadPixmap( "cardmon/" + cardInPcmcia1Type ) ), |
129 | tr( "Eject card 1: %1" ).arg( cardInPcmcia1Name ), 2 ); | 129 | tr( "Eject card 1: %1" ).arg( cardInPcmcia1Name ), 2 ); |
130 | } | 130 | } |
131 | 131 | ||
132 | QPoint p = mapToGlobal( QPoint( 0, 0 ) ); | 132 | QPoint p = mapToGlobal( QPoint( 0, 0 ) ); |
133 | QSize s = menu->sizeHint(); | 133 | QSize s = menu->sizeHint(); |
134 | int opt = menu->exec( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ), | 134 | int opt = menu->exec( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ), |
135 | p.y() - s.height() ), 0 ); | 135 | p.y() - s.height() ), 0 ); |
136 | 136 | ||
137 | if ( opt == 1 ) { | 137 | if ( opt == 1 ) { |
138 | m_commandOrig = 1; | 138 | m_commandOrig = 1; |
139 | execCommand("/sbin/cardctl eject 0"); | 139 | execCommand("/sbin/cardctl eject 0"); |
140 | } else if ( opt == 0 ) { | 140 | } else if ( opt == 0 ) { |
141 | if ( ODevice::inst() ->system() == System_Familiar ) { | ||
142 | cmd = "umount /dev/mmc/part1"; | ||
143 | } else { | ||
144 | cmd = "umount /dev/mmcda1"; | ||
145 | } | ||
146 | m_commandOrig = 2; | 141 | m_commandOrig = 2; |
147 | execCommand( cmd ); | 142 | execCommand( QString("umount %1").arg(cardSdName)); |
148 | } else if ( opt == 2 ) { | 143 | } else if ( opt == 2 ) { |
149 | m_commandOrig = 3; | 144 | m_commandOrig = 3; |
150 | execCommand( "/sbin/cardctl eject 1" ); | 145 | execCommand( "/sbin/cardctl eject 1" ); |
151 | } | 146 | } |
152 | delete menu; | 147 | delete menu; |
153 | } | 148 | } |
154 | 149 | ||
155 | 150 | ||
156 | void CardMonitor::cardMessage( const QCString & msg, const QByteArray & ) { | 151 | void CardMonitor::cardMessage( const QCString & msg, const QByteArray & ) { |
157 | if ( msg == "stabChanged()" ) { | 152 | if ( msg == "stabChanged()" ) { |
158 | // odebug << "Pcmcia: stabchanged" << oendl; | 153 | // odebug << "Pcmcia: stabchanged" << oendl; |
159 | getStatusPcmcia(); | 154 | getStatusPcmcia(); |
160 | } else if ( msg == "mtabChanged()" ) { | 155 | } else if ( msg == "mtabChanged()" ) { |
161 | // odebug << "CARDMONAPPLET: mtabchanged" << oendl; | 156 | // odebug << "CARDMONAPPLET: mtabchanged" << oendl; |
162 | getStatusSd(); | 157 | getStatusSd(); |
163 | } | 158 | } |
@@ -269,37 +264,38 @@ bool CardMonitor::getStatusPcmcia( int showPopUp ) { | |||
269 | 264 | ||
270 | } | 265 | } |
271 | 266 | ||
272 | 267 | ||
273 | bool CardMonitor::getStatusSd( int showPopUp ) { | 268 | bool CardMonitor::getStatusSd( int showPopUp ) { |
274 | 269 | ||
275 | bool cardWas = cardInSd; // remember last state | 270 | bool cardWas = cardInSd; // remember last state |
276 | cardInSd = FALSE; | 271 | cardInSd = FALSE; |
277 | 272 | ||
278 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) | 273 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) |
279 | 274 | ||
280 | struct mntent *me; | 275 | struct mntent *me; |
281 | FILE *mntfp = setmntent( "/etc/mtab", "r" ); | 276 | FILE *mntfp = setmntent( "/etc/mtab", "r" ); |
282 | 277 | ||
283 | if ( mntfp ) { | 278 | if ( mntfp ) { |
284 | while ( ( me = getmntent( mntfp ) ) != 0 ) { | 279 | while ( ( me = getmntent( mntfp ) ) != 0 ) { |
285 | QString fs = me->mnt_fsname; | 280 | QString fs = QFile::decodeName( me->mnt_fsname ); |
286 | //odebug << fs << oendl; | 281 | //odebug << fs << oendl; |
287 | if ( fs.left( 14 ) == "/dev/mmc/part1" || fs.left( 7 ) == "/dev/sd" | 282 | if ( fs.left( 14 ) == "/dev/mmc/part1" || fs.left( 7 ) == "/dev/sd" |
288 | || fs.left( 9 ) == "/dev/mmcd" ) { | 283 | || fs.left( 9 ) == "/dev/mmcd" ) { |
289 | cardInSd = TRUE; | 284 | cardInSd = TRUE; |
285 | cardSdName = fs; | ||
290 | show(); | 286 | show(); |
291 | } | 287 | } |
292 | // else { | 288 | // else { |
293 | // cardInSd = FALSE; | 289 | // cardInSd = FALSE; |
294 | // } | 290 | // } |
295 | } | 291 | } |
296 | endmntent( mntfp ); | 292 | endmntent( mntfp ); |
297 | } | 293 | } |
298 | 294 | ||
299 | if ( !showPopUp && cardWas != cardInSd ) { | 295 | if ( !showPopUp && cardWas != cardInSd ) { |
300 | QString text = QString::null; | 296 | QString text = QString::null; |
301 | QString what = QString::null; | 297 | QString what = QString::null; |
302 | if ( cardInSd ) { | 298 | if ( cardInSd ) { |
303 | text += "New card: SD/MMC"; | 299 | text += "New card: SD/MMC"; |
304 | what = "on"; | 300 | what = "on"; |
305 | } else { | 301 | } else { |
@@ -325,32 +321,34 @@ void CardMonitor::paintEvent( QPaintEvent * ) { | |||
325 | QPainter p( this ); | 321 | QPainter p( this ); |
326 | 322 | ||
327 | if ( cardInPcmcia0 || cardInPcmcia1 || cardInSd ) { | 323 | if ( cardInPcmcia0 || cardInPcmcia1 || cardInSd ) { |
328 | p.drawPixmap( 0, 0, pm ); | 324 | p.drawPixmap( 0, 0, pm ); |
329 | show(); | 325 | show(); |
330 | } else { | 326 | } else { |
331 | //p.eraseRect(rect()); | 327 | //p.eraseRect(rect()); |
332 | hide(); | 328 | hide(); |
333 | } | 329 | } |
334 | } | 330 | } |
335 | 331 | ||
336 | int CardMonitor::position() { | 332 | int CardMonitor::position() { |
337 | return 7; | 333 | return 7; |
338 | } | 334 | } |
339 | 335 | ||
340 | void CardMonitor::execCommand( const QString &command ) { | 336 | void CardMonitor::execCommand( const QString &command ) { |
337 | delete m_process; | ||
338 | m_process = 0; | ||
341 | 339 | ||
342 | if ( m_process == 0 ) { | 340 | if ( m_process == 0 ) { |
343 | m_process = new OProcess(); | 341 | m_process = new OProcess(); |
344 | QStringList strList = QStringList::split( " ", command ); | 342 | QStringList strList = QStringList::split( " ", command ); |
345 | 343 | ||
346 | for ( QStringList::Iterator it = strList.begin(); it != strList.end(); ++it ) { | 344 | for ( QStringList::Iterator it = strList.begin(); it != strList.end(); ++it ) { |
347 | *m_process << *it; | 345 | *m_process << *it; |
348 | } | 346 | } |
349 | 347 | ||
350 | connect(m_process, SIGNAL( processExited(Opie::Core::OProcess*) ), | 348 | connect(m_process, SIGNAL( processExited(Opie::Core::OProcess*) ), |
351 | this, SLOT( slotExited(Opie::Core::OProcess* ) ) ); | 349 | this, SLOT( slotExited(Opie::Core::OProcess* ) ) ); |
352 | 350 | ||
353 | if(!m_process->start(OProcess::NotifyOnExit, OProcess::AllOutput ) ) { | 351 | if(!m_process->start(OProcess::NotifyOnExit, OProcess::AllOutput ) ) { |
354 | delete m_process; | 352 | delete m_process; |
355 | m_process = 0; | 353 | m_process = 0; |
356 | } | 354 | } |
@@ -358,23 +356,20 @@ void CardMonitor::execCommand( const QString &command ) { | |||
358 | } | 356 | } |
359 | 357 | ||
360 | void CardMonitor::slotExited( OProcess* ) { | 358 | void CardMonitor::slotExited( OProcess* ) { |
361 | 359 | ||
362 | if( m_process->normalExit() ) { | 360 | if( m_process->normalExit() ) { |
363 | int ret = m_process->exitStatus(); | 361 | int ret = m_process->exitStatus(); |
364 | if( ret != 0 ) { | 362 | if( ret != 0 ) { |
365 | if ( m_commandOrig == 1 ) { | 363 | if ( m_commandOrig == 1 ) { |
366 | popUp( tr( "CF/PCMCIA card eject failed!" ) ); | 364 | popUp( tr( "CF/PCMCIA card eject failed!" ) ); |
367 | } else if ( m_commandOrig == 2 ) { | 365 | } else if ( m_commandOrig == 2 ) { |
368 | popUp( tr( "SD/MMC card eject failed!" ) ); | 366 | popUp( tr( "SD/MMC card eject failed!" ) ); |
369 | } else if ( m_commandOrig == 3 ) { | 367 | } else if ( m_commandOrig == 3 ) { |
370 | popUp( tr( "CF/PCMCIA card eject failed!" ) ); | 368 | popUp( tr( "CF/PCMCIA card eject failed!" ) ); |
371 | } | 369 | } |
372 | } | 370 | } |
373 | } | 371 | } |
374 | |||
375 | delete m_process; | ||
376 | m_process = 0; | ||
377 | } | 372 | } |
378 | 373 | ||
379 | EXPORT_OPIE_APPLET_v1( CardMonitor ) | 374 | EXPORT_OPIE_APPLET_v1( CardMonitor ) |
380 | 375 | ||
diff --git a/core/applets/cardmon/cardmon.h b/core/applets/cardmon/cardmon.h index 19d0394..b02c8b1 100644 --- a/core/applets/cardmon/cardmon.h +++ b/core/applets/cardmon/cardmon.h | |||
@@ -46,24 +46,25 @@ protected: | |||
46 | void paintEvent( QPaintEvent* ); | 46 | void paintEvent( QPaintEvent* ); |
47 | void mousePressEvent( QMouseEvent * ); | 47 | void mousePressEvent( QMouseEvent * ); |
48 | 48 | ||
49 | private: | 49 | private: |
50 | void execCommand( const QString &command ); | 50 | void execCommand( const QString &command ); |
51 | int m_commandOrig; | 51 | int m_commandOrig; |
52 | QPixmap pm; | 52 | QPixmap pm; |
53 | // pcmcia socket 0 | 53 | // pcmcia socket 0 |
54 | bool cardInPcmcia0; | 54 | bool cardInPcmcia0; |
55 | QString cardInPcmcia0Name; | 55 | QString cardInPcmcia0Name; |
56 | QString cardInPcmcia0Type; | 56 | QString cardInPcmcia0Type; |
57 | // pcmcia socket 1 | 57 | // pcmcia socket 1 |
58 | bool cardInPcmcia1; | 58 | bool cardInPcmcia1; |
59 | QString cardInPcmcia1Name; | 59 | QString cardInPcmcia1Name; |
60 | QString cardInPcmcia1Type; | 60 | QString cardInPcmcia1Type; |
61 | bool cardInSd; | 61 | bool cardInSd; |
62 | QString cardSdName; // the device which is mounted | ||
62 | void iconShow(); | 63 | void iconShow(); |
63 | QPopupMenu *popupMenu; | 64 | QPopupMenu *popupMenu; |
64 | void popUp(QString message, QString icon = QString::null ); | 65 | void popUp(QString message, QString icon = QString::null ); |
65 | Opie::Core::OProcess* m_process; | 66 | Opie::Core::OProcess* m_process; |
66 | }; | 67 | }; |
67 | 68 | ||
68 | #endif | 69 | #endif |
69 | 70 | ||