Index: src/orca/scripts/gnome-power-manager.py
===================================================================
--- src/orca/scripts/gnome-power-manager.py	(revision 2046)
+++ src/orca/scripts/gnome-power-manager.py	(working copy)
@@ -29,6 +29,7 @@
 import orca.orca as orca
 import orca.default as default
 import orca.debug as debug
+import orca.settings as settings
 import orca.speech as speech
 import orca.util as util
 
@@ -52,12 +53,29 @@
         # Set the debug level for all the methods in this script.
         #
         self.debugLevel = debug.LEVEL_FINEST
-        self._lastSpeech = ""
-        self._debug("__init__")
+        self._lastInfo = ""
 
+        # The power manager does not send events indication
+        # that the accessible description has changed.
+        # Disabling the caching of accessible descriptions, 
+        # forces the power manager to return a new description 
+        # with the latest power management information.
+        settings.cacheDescriptions = False
+
         default.Script.__init__(self, app)
         
 
+    def getListeners(self):
+        """Sets up the AT-SPI event listeners for this script.
+        """
+        listeners = default.Script.getListeners(self)
+
+        listeners["object:bounds-changed"] = \
+            self.onBoundsChanged
+
+        return listeners
+
+
     def _debug(self, msg):
         """ Convenience method for printing debug messages
         """
@@ -65,57 +83,18 @@
 
 
     def onBoundsChanged(self, event):
-        """Called whenever an object's bounds change. This happens
+        """ Called whenever an object's bounds change. This happens
         when the Gnome Power Manager balloon is displayed on the
         desktop.
 
         Arguments:
         - event: the Event
         """
-        self._debug("onBoundsChanged")
-        obj = event.source
-        self._debug("'%s' src='%s'" % (event.type, obj.role))
-        
-        self._searchChildrenForDisplayedText(obj, "")
+        info = event.source.description
+        self._debug("onBoundsChanged: '%s'" % info)
 
+        if info != self._lastInfo:
+            self._lastInfo = info
+            if len(info) > 0:
+                speech.speak(info, None, True)
 
-    def _searchChildrenForDisplayedText(self, parent, indent):
-        """
-        Recursively descends the Gnome Power Manage and
-        speaks the displayed text it finds.
-        """
-
-        self._debug("_searchChildrenForDisplayedText")
-
-        text = self._getObjText(parent)
-
-        self._debug("%s role='%s', text='%s'" % \
-                    (indent, parent.role, text))
-
-        if text and len(text) > 0:
-            if text != self._lastSpeech:
-                self._lastSpeech = text
-                speech.speak(text, None, True)
-        
-        for i in range(0, parent.childCount):
-            self._searchChildrenForDisplayedText(parent.child(i), indent+"  ")
-
-
-    def _getObjText(self, obj):
-        """
-        Returns the text for an object.
-        """
-        retval = ""
-        text = util.getDisplayedText(obj)
-        if not text:
-            text = obj.description
-            
-        if text and text != "None":
-            retval = text
-            
-        self._debug("_getObjText: text='%s', desc='%s', label='%s'" % \
-                    (util.getDisplayedText(obj), obj.description,
-                     util.getDisplayedLabel(obj)))
-        return retval
-
-    
Index: src/orca/settings.py
===================================================================
--- src/orca/settings.py	(revision 2046)
+++ src/orca/settings.py	(working copy)
@@ -393,6 +393,7 @@
 # objects.
 #
 cacheValues             = True
+cacheDescriptions       = True
 
 # Script developer feature.  If False, no AT-SPI objects
 # will be cached locally.  Helps determine if there might be a
Index: src/orca/atspi.py
===================================================================
--- src/orca/atspi.py	(revision 2046)
+++ src/orca/atspi.py	(working copy)
@@ -843,7 +843,7 @@
 
         description = self.accessible.description
 
-        if description and settings.cacheValues:
+        if description and settings.cacheValues and settings.cacheDescriptions:
             self.description = description
 
         return description
Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 2046)
+++ src/orca/default.py	(working copy)
@@ -362,7 +362,7 @@
         listeners["object:link-selected"]                   = \
             self.onLinkSelected
         listeners["object:bounds-changed"]                  = \
-            self.onBoundsChanged
+            self.noOp
         listeners["object:state-changed:"]                  = \
             self.onStateChanged
         listeners["object:selection-changed"]               = \
@@ -2338,17 +2338,6 @@
         orca.setLocusOfFocus(event, event.source)
         
 
-    def onBoundsChanged(self, event):
-        """Called whenever an object's bounds change.
-        
-        Arguments:
-        - event: the Event
-        """
-
-        # The subclasses does all the work.
-        return
-    
-
     def onStateChanged(self, event):
         """Called whenever an object's state changes.
 
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 2046)
+++ ChangeLog	(working copy)
@@ -1,3 +1,14 @@
+2007-02-22  Lynn Monsanto <lynn.monsanto@sun.com>
+
+        * src/orca/scripts/gnome-power-manager,py. Addional fix
+	for bug #354479. The Gnome Power Manager communicates
+	information about power management state in the object
+	description in "object:bounds-changed" events. It is 
+	necessary to turn of the caching of accessible values
+	to force the power manager to send the current power
+	management state, othrwise the old cached description
+	is returned for the object.
+
 2007-02-22  Joanmarie Diggs <j-diggs@comcast.net>
 
 	* bugs/bugs.html: added several new Firefox bugs.
