summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-02-24 16:24:03 (UTC)
committer mickeyl <mickeyl>2004-02-24 16:24:03 (UTC)
commitf02547005d26a1f3816f5475116bbdf094a31ccb (patch) (unidiff)
tree86c1c9b21ae48aba81a24f6c412d881386708f35
parente3e4d0cca07dfa5487acb54596ac978f2343fc40 (diff)
downloadopie-f02547005d26a1f3816f5475116bbdf094a31ccb.zip
opie-f02547005d26a1f3816f5475116bbdf094a31ccb.tar.gz
opie-f02547005d26a1f3816f5475116bbdf094a31ccb.tar.bz2
fix a regression bug when an interface appears or disappears
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/wirelessapplet/wireless.cpp74
1 files changed, 40 insertions, 34 deletions
diff --git a/noncore/applets/wirelessapplet/wireless.cpp b/noncore/applets/wirelessapplet/wireless.cpp
index 72ac380..cee789c 100644
--- a/noncore/applets/wirelessapplet/wireless.cpp
+++ b/noncore/applets/wirelessapplet/wireless.cpp
@@ -47,14 +47,14 @@
47#include <sys/types.h> 47#include <sys/types.h>
48#include <signal.h> 48#include <signal.h>
49 49
50#define STYLE_BARS 0 50#define STYLE_BARS 0
51#define STYLE_ANTENNA 1 51#define STYLE_ANTENNA 1
52 52
53#define MDEBUG 53//#define MDEBUG
54//#undef MDEBUG 54#undef MDEBUG
55 55
56WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const char *name ) 56WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const char *name )
57 : QFrame( parent, name, WStyle_StaysOnTop | WType_Popup ), applet( applet ) 57 : QFrame( parent, name, WStyle_StaysOnTop | WType_Popup ), applet( applet )
58{ 58{
59 59
60 readConfig(); 60 readConfig();
@@ -216,12 +216,13 @@ WirelessApplet::WirelessApplet( QWidget *parent, const char *name )
216} 216}
217 217
218void WirelessApplet::checkInterface() 218void WirelessApplet::checkInterface()
219{ 219{
220 interface = 0L; 220 interface = 0L;
221 ONetwork* net = ONetwork::instance(); 221 ONetwork* net = ONetwork::instance();
222 net->synchronize();
222 ONetwork::InterfaceIterator it = net->iterator(); 223 ONetwork::InterfaceIterator it = net->iterator();
223 224
224 while ( it.current() && !it.current()->isWireless() ) ++it; 225 while ( it.current() && !it.current()->isWireless() ) ++it;
225 226
226 if ( it.current() && it.current()->isWireless() ) 227 if ( it.current() && it.current()->isWireless() )
227 interface = static_cast<OWirelessNetworkInterface*>( it.current() ); 228 interface = static_cast<OWirelessNetworkInterface*>( it.current() );
@@ -321,20 +322,32 @@ void WirelessApplet::displayStyleChange( int style )
321 322
322WirelessApplet::~WirelessApplet() 323WirelessApplet::~WirelessApplet()
323{} 324{}
324 325
325void WirelessApplet::timerEvent( QTimerEvent* ) 326void WirelessApplet::timerEvent( QTimerEvent* )
326{ 327{
328#ifdef MDEBUG
327 qDebug( "WirelessApplet::timerEvent" ); 329 qDebug( "WirelessApplet::timerEvent" );
328 OWirelessNetworkInterface* iface = interface; 330#endif
329 331 if ( interface )
330 if ( iface )
331 { 332 {
333 if ( !ONetwork::instance()->isPresent( (const char*) interface->name() ) )
334 {
335#ifdef MDEBUG
336 qDebug( "WIFIAPPLET: Interface no longer present." );
337#endif
338 interface = 0L;
339 mustRepaint();
340 return;
341 }
342
332 if ( mustRepaint() ) 343 if ( mustRepaint() )
333 { 344 {
345#ifdef MDEBUG
334 qDebug( "WIFIAPPLET: A value has changed -> repainting." ); 346 qDebug( "WIFIAPPLET: A value has changed -> repainting." );
347#endif
335 repaint(); 348 repaint();
336 } 349 }
337 350
338 if ( status->isVisible() ) 351 if ( status->isVisible() )
339 { 352 {
340 updatePopupWindow(); 353 updatePopupWindow();
@@ -353,22 +366,20 @@ void WirelessApplet::mousePressEvent( QMouseEvent * )
353 else 366 else
354 status->show( true ); 367 status->show( true );
355} 368}
356 369
357bool WirelessApplet::mustRepaint() 370bool WirelessApplet::mustRepaint()
358{ 371{
359 OWirelessNetworkInterface* iface = interface;
360
361 // check if there are enough changes to justify a (flickering) repaint 372 // check if there are enough changes to justify a (flickering) repaint
362 373
363 // has the interface changed? 374 // has the interface changed?
364 375
365 if ( iface != oldiface ) 376 if ( interface != oldiface )
366 { 377 {
367 oldiface = iface; 378 oldiface = interface;
368 if ( iface ) 379 if ( interface )
369 { 380 {
370#ifdef MDEBUG 381#ifdef MDEBUG
371 qDebug( "WIFIAPPLET: We had no interface but now we have one! :-)" ); 382 qDebug( "WIFIAPPLET: We had no interface but now we have one! :-)" );
372#endif 383#endif
373 show(); 384 show();
374 } 385 }
@@ -388,86 +399,83 @@ bool WirelessApplet::mustRepaint()
388 { 399 {
389 oldpixmap = pixmap; 400 oldpixmap = pixmap;
390 return true; 401 return true;
391 } 402 }
392 403
393 int noiseH = 50; // iface->noisePercent() * ( height() - 3 ) / 100; 404 int noiseH = 50; // iface->noisePercent() * ( height() - 3 ) / 100;
394 int signalH = iface->signalStrength() * ( height() - 3 ) / 100; 405 int signalH = interface->signalStrength() * ( height() - 3 ) / 100;
395 int qualityH = 50; // iface->qualityPercent() * ( height() - 3 ) / 100; 406 int qualityH = 50; // iface->qualityPercent() * ( height() - 3 ) / 100;
396 407
397 if ( ( noiseH != oldnoiseH ) 408 if ( ( noiseH != oldnoiseH )
398 || ( signalH != oldsignalH ) 409 || ( signalH != oldsignalH )
399 || ( qualityH != oldqualityH ) ) 410 || ( qualityH != oldqualityH ) )
400 { 411 {
401 oldnoiseH = noiseH; 412 oldnoiseH = noiseH;
402 oldsignalH = signalH; 413 oldsignalH = signalH;
403 oldqualityH = qualityH; 414 oldqualityH = qualityH;
404 return true; 415 return true;
405 } 416 }
406 417
407 if ( rocESSID && ( oldESSID != iface->SSID() ) ) 418 if ( rocESSID && ( oldESSID != interface->SSID() ) )
408 { 419 {
409#ifdef MDEBUG 420#ifdef MDEBUG
410 qDebug( "WIFIAPPLET: ESSID has changed." ); 421 qDebug( "WIFIAPPLET: ESSID has changed." );
411#endif 422#endif
412 renewDHCP(); 423 renewDHCP();
413 } 424 }
414 else if ( rocFREQ && ( oldFREQ != iface->frequency() ) ) 425 else if ( rocFREQ && ( oldFREQ != interface->frequency() ) )
415 { 426 {
416#ifdef MDEBUG 427#ifdef MDEBUG
417 qDebug( "WIFIAPPLET: FREQ has changed." ); 428 qDebug( "WIFIAPPLET: FREQ has changed." );
418#endif 429#endif
419 renewDHCP(); 430 renewDHCP();
420 } 431 }
421 else if ( rocAP && ( oldAP != iface->associatedAP().toString() ) ) 432 else if ( rocAP && ( oldAP != interface->associatedAP().toString() ) )
422 { 433 {
423#ifdef MDEBUG 434#ifdef MDEBUG
424 qDebug( "WIFIAPPLET: AP has changed." ); 435 qDebug( "WIFIAPPLET: AP has changed." );
425#endif 436#endif
426 renewDHCP(); 437 renewDHCP();
427 } 438 }
428 else if ( rocMODE && ( oldMODE != iface->mode() ) ) 439 else if ( rocMODE && ( oldMODE != interface->mode() ) )
429 { 440 {
430#ifdef MDEBUG 441#ifdef MDEBUG
431 qDebug( "WIFIAPPLET: MODE has changed." ); 442 qDebug( "WIFIAPPLET: MODE has changed." );
432#endif 443#endif
433 renewDHCP(); 444 renewDHCP();
434 } 445 }
435 446
436 oldESSID = iface->SSID(); 447 oldESSID = interface->SSID();
437 oldMODE = iface->mode(); 448 oldMODE = interface->mode();
438 oldFREQ = iface->frequency(); 449 oldFREQ = interface->frequency();
439 oldAP = iface->associatedAP().toString(); 450 oldAP = interface->associatedAP().toString();
440 451
441 return false; 452 return false;
442} 453}
443 454
444void WirelessApplet::updatePopupWindow() 455void WirelessApplet::updatePopupWindow()
445{ 456{
446 OWirelessNetworkInterface* iface = interface; 457 int qualityH = interface->signalStrength();
447 int qualityH = iface->signalStrength();
448 458
449 if ( status->mgraph ) 459 if ( status->mgraph )
450 status->mgraph->addValue( qualityH, false ); 460 status->mgraph->addValue( qualityH, false );
451 461
452 QString freqString; 462 QString freqString;
453 QString cell = ( iface->mode() == "Managed" ) ? "AP: " : "Cell: "; 463 QString cell = ( interface->mode() == "Managed" ) ? "AP: " : "Cell: ";
454 freqString.sprintf( "%.3f GHz", iface->frequency() ); 464 freqString.sprintf( "%.3f GHz", interface->frequency() );
455 status->statusLabel->setText( "Station: " + iface->nickName() + "<br>" + 465 status->statusLabel->setText( "Station: " + interface->nickName() + "<br>" +
456 "ESSID: " + iface->SSID() + "<br>" + 466 "ESSID: " + interface->SSID() + "<br>" +
457 "MODE: " + iface->mode() + "<br>" + 467 "MODE: " + interface->mode() + "<br>" +
458 "FREQ: " + freqString + "<br>" + 468 "FREQ: " + freqString + "<br>" +
459 cell + " " + iface->associatedAP().toString() ); 469 cell + " " + interface->associatedAP().toString() );
460} 470}
461 471
462const char** WirelessApplet::getQualityPixmap() 472const char** WirelessApplet::getQualityPixmap()
463{ 473{
464 OWirelessNetworkInterface* iface = interface; 474 if ( !interface ) return ( const char** ) nowireless_xpm;
465 475 int qualityH = interface->signalStrength();
466 if ( !iface ) return ( const char** ) nowireless_xpm;
467 int qualityH = iface->signalStrength();
468 if ( qualityH < 0 ) return ( const char** ) nowireless_xpm; 476 if ( qualityH < 0 ) return ( const char** ) nowireless_xpm;
469 477
470 if ( visualStyle == STYLE_ANTENNA ) 478 if ( visualStyle == STYLE_ANTENNA )
471 { 479 {
472 if ( qualityH < 1 ) return ( const char** ) connect0_xpm; 480 if ( qualityH < 1 ) return ( const char** ) connect0_xpm;
473 if ( qualityH < 17 ) return ( const char** ) connect1_xpm; 481 if ( qualityH < 17 ) return ( const char** ) connect1_xpm;
@@ -479,27 +487,25 @@ const char** WirelessApplet::getQualityPixmap()
479 487
480 return 0; // please draw your bars 488 return 0; // please draw your bars
481} 489}
482 490
483void WirelessApplet::paintEvent( QPaintEvent* ) 491void WirelessApplet::paintEvent( QPaintEvent* )
484{ 492{
485 OWirelessNetworkInterface* iface = interface;
486
487 QPainter p( this ); 493 QPainter p( this );
488 QColor color; 494 QColor color;
489 495
490 const char** pixmap = getQualityPixmap(); 496 const char** pixmap = getQualityPixmap();
491 497
492 if ( pixmap ) 498 if ( pixmap )
493 p.drawPixmap( 0, 1, pixmap ); 499 p.drawPixmap( 0, 1, pixmap );
494 else 500 else
495 { 501 {
496 502
497 int noiseH = 30; // iface->noisePercent() * ( height() - 3 ) / 100; 503 int noiseH = 30; // iface->noisePercent() * ( height() - 3 ) / 100;
498 int signalH = 50; // iface->signalPercent() * ( height() - 3 ) / 100; 504 int signalH = 50; // iface->signalPercent() * ( height() - 3 ) / 100;
499 int qualityH = iface->signalStrength(); // iface->qualityPercent() * ( height() - 3 ) / 100; 505 int qualityH = interface->signalStrength(); // iface->qualityPercent() * ( height() - 3 ) / 100;
500 506
501 double intensity; 507 double intensity;
502 int pixelHeight; 508 int pixelHeight;
503 int pixelWidth = 2; 509 int pixelWidth = 2;
504 int Hue; 510 int Hue;
505 int barSpace = 3; 511 int barSpace = 3;