Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/view
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2007-03-29 23:08:44 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2007-03-29 23:08:44 (GMT)
commit87f1e9bcc989c9f10cb37475075ee249779d7466 (patch)
treee44035c752930cd270f11dff65831e53833e1b19 /shell/view
parent6c9eb64de327791263f635d9ebc97ae2d10e3cc4 (diff)
Suspend the mesh view when it's not active so that
we don't keep blinking the icon in the background.
Diffstat (limited to 'shell/view')
-rw-r--r--shell/view/home/HomeWindow.py37
-rw-r--r--shell/view/home/MeshBox.py13
-rw-r--r--shell/view/pulsingicon.py11
3 files changed, 53 insertions, 8 deletions
diff --git a/shell/view/home/HomeWindow.py b/shell/view/home/HomeWindow.py
index 73d29c5..a37aeae 100644
--- a/shell/view/home/HomeWindow.py
+++ b/shell/view/home/HomeWindow.py
@@ -9,7 +9,7 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#
+
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
@@ -24,10 +24,15 @@ from view.home.MeshBox import MeshBox
from view.home.HomeBox import HomeBox
from view.home.FriendsBox import FriendsBox
+_HOME_PAGE = 0
+_FRIENDS_PAGE = 1
+_MESH_PAGE = 2
+
class HomeWindow(gtk.Window):
def __init__(self, shell):
gtk.Window.__init__(self)
self._shell = shell
+ self._active = False
self.set_default_size(gtk.gdk.screen_width(),
gtk.gdk.screen_height())
@@ -35,6 +40,8 @@ class HomeWindow(gtk.Window):
self.realize()
self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DESKTOP)
self.connect("key-release-event", self._key_release_cb)
+ self.connect('focus-in-event', self._focus_in_cb)
+ self.connect('focus-out-event', self._focus_out_cb)
self._nb = gtk.Notebook()
self._nb.set_show_border(False)
@@ -56,23 +63,39 @@ class HomeWindow(gtk.Window):
canvas.show()
canvas = hippo.Canvas()
- box = MeshBox(shell, MenuShell(canvas))
- canvas.set_root(box)
+ self._mesh_box = MeshBox(shell, MenuShell(canvas))
+ canvas.set_root(self._mesh_box)
self._nb.append_page(canvas)
canvas.show()
- def _key_release_cb(self, widget, event):
+ def _key_release_cb(self, widget, event):
keyname = gtk.gdk.keyval_name(event.keyval)
if keyname == "Alt_L":
self._home_box.release()
+
+ def _update_mesh_state(self):
+ if self._active and self._nb.get_current_page() == _MESH_PAGE:
+ self._mesh_box.resume()
+ else:
+ self._mesh_box.suspend()
+
+ def _focus_in_cb(self, widget, event):
+ self._active = True
+ self._update_mesh_state()
+
+ def _focus_out_cb(self, widget, event):
+ self._active = False
+ self._update_mesh_state()
def set_zoom_level(self, level):
if level == sugar.ZOOM_HOME:
- self._nb.set_current_page(0)
+ self._nb.set_current_page(_HOME_PAGE)
elif level == sugar.ZOOM_FRIENDS:
- self._nb.set_current_page(1)
+ self._nb.set_current_page(_FRIENDS_PAGE)
elif level == sugar.ZOOM_MESH:
- self._nb.set_current_page(2)
+ self._nb.set_current_page(_MESH_PAGE)
+
+ self._update_mesh_state()
def get_home_box(self):
return self._home_box
diff --git a/shell/view/home/MeshBox.py b/shell/view/home/MeshBox.py
index 088d8f7..250f0f9 100644
--- a/shell/view/home/MeshBox.py
+++ b/shell/view/home/MeshBox.py
@@ -204,6 +204,7 @@ class MeshBox(SpreadBox):
self._access_points = {}
self._mesh = None
self._buddy_to_activity = {}
+ self._suspended = True
for buddy_model in self._model.get_buddies():
self._add_alone_buddy(buddy_model)
@@ -329,3 +330,15 @@ class MeshBox(SpreadBox):
icon = self._access_points[ap_model.get_id()]
self.remove_item(icon)
del self._access_points[ap_model.get_id()]
+
+ def suspend(self):
+ if not self._suspended:
+ self._suspended = True
+ for ap in self._access_points.values():
+ ap.props.paused = True
+
+ def resume(self):
+ if self._suspended:
+ self._suspended = False
+ for ap in self._access_points.values():
+ ap.props.paused = False
diff --git a/shell/view/pulsingicon.py b/shell/view/pulsingicon.py
index 2bd4877..37824f5 100644
--- a/shell/view/pulsingicon.py
+++ b/shell/view/pulsingicon.py
@@ -20,6 +20,8 @@ from sugar.graphics.canvasicon import CanvasIcon
class PulsingIcon(CanvasIcon):
__gproperties__ = {
+ 'paused' : (bool, None, None, False,
+ gobject.PARAM_READWRITE),
'colors' : (object, None, None,
gobject.PARAM_READWRITE),
'pulse-time' : (float, None, None,
@@ -28,6 +30,7 @@ class PulsingIcon(CanvasIcon):
}
def __init__(self, **kwargs):
+ self._paused = False
self._pulse_time = 0.0
self._colors = None
self._pulse_sid = 0
@@ -41,12 +44,18 @@ class PulsingIcon(CanvasIcon):
if pspec.name == 'pulse-time':
self._pulse_time = value
self._stop()
- if self._pulse_time > 0.0:
+ if not self._paused and self._pulse_time > 0.0:
self._start()
elif pspec.name == 'colors':
self._colors = value
self._pos = 0
self._update_colors()
+ elif pspec.name == 'paused':
+ self._paused = value
+ if not self._paused and self._pulse_time > 0.0:
+ self._start()
+ else:
+ self._stop()
def do_get_property(self, pspec):
CanvasIcon.do_get_property(self, pspec)