Support for activity icons inside the bundle.
Patch by Gonzalo Odiard <godiard@gmail.com> Modified by me to allow icon theme to override the bundle one.
This commit is contained in:
parent
55339d4bea
commit
6971ddb9a4
@ -19,7 +19,7 @@ from view.BuddyMenu import BuddyMenu
|
|||||||
|
|
||||||
class BuddyIcon(MenuIcon):
|
class BuddyIcon(MenuIcon):
|
||||||
def __init__(self, shell, menu_shell, buddy):
|
def __init__(self, shell, menu_shell, buddy):
|
||||||
MenuIcon.__init__(self, menu_shell, icon_name='stock-buddy',
|
MenuIcon.__init__(self, menu_shell, icon_name='theme:stock-buddy',
|
||||||
color=buddy.get_color())
|
color=buddy.get_color())
|
||||||
|
|
||||||
self._shell = shell
|
self._shell = shell
|
||||||
|
@ -82,10 +82,10 @@ class BuddyMenu(Menu):
|
|||||||
|
|
||||||
friends = shell_model.get_friends()
|
friends = shell_model.get_friends()
|
||||||
if friends.has_buddy(self._buddy):
|
if friends.has_buddy(self._buddy):
|
||||||
icon = CanvasIcon(icon_name='stock-remove')
|
icon = CanvasIcon(icon_name='theme:stock-remove')
|
||||||
self.add_action(icon, BuddyMenu.ACTION_REMOVE_FRIEND)
|
self.add_action(icon, BuddyMenu.ACTION_REMOVE_FRIEND)
|
||||||
else:
|
else:
|
||||||
icon = CanvasIcon(icon_name='stock-add')
|
icon = CanvasIcon(icon_name='theme:stock-add')
|
||||||
self.add_action(icon, BuddyMenu.ACTION_MAKE_FRIEND)
|
self.add_action(icon, BuddyMenu.ACTION_MAKE_FRIEND)
|
||||||
|
|
||||||
activity = shell_model.get_home().get_current_activity()
|
activity = shell_model.get_home().get_current_activity()
|
||||||
@ -94,7 +94,7 @@ class BuddyMenu(Menu):
|
|||||||
|
|
||||||
# FIXME check that the buddy is not in the activity already
|
# FIXME check that the buddy is not in the activity already
|
||||||
|
|
||||||
icon = CanvasIcon(icon_name='stock-invite')
|
icon = CanvasIcon(icon_name='theme:stock-invite')
|
||||||
self.add_action(icon, BuddyMenu.ACTION_INVITE)
|
self.add_action(icon, BuddyMenu.ACTION_INVITE)
|
||||||
|
|
||||||
def __buddy_icon_changed_cb(self, buddy):
|
def __buddy_icon_changed_cb(self, buddy):
|
||||||
|
@ -53,7 +53,7 @@ class ClipboardMenu(Menu):
|
|||||||
|
|
||||||
if percent == 100 and activity:
|
if percent == 100 and activity:
|
||||||
if not self._remove_icon:
|
if not self._remove_icon:
|
||||||
self._remove_icon = CanvasIcon(icon_name='stock-remove')
|
self._remove_icon = CanvasIcon(icon_name='theme:stock-remove')
|
||||||
self.add_action(self._remove_icon, ClipboardMenu.ACTION_DELETE)
|
self.add_action(self._remove_icon, ClipboardMenu.ACTION_DELETE)
|
||||||
|
|
||||||
if not self._open_icon:
|
if not self._open_icon:
|
||||||
@ -77,7 +77,7 @@ class ClipboardMenu(Menu):
|
|||||||
self._stop_icon = None
|
self._stop_icon = None
|
||||||
else:
|
else:
|
||||||
if not self._stop_icon:
|
if not self._stop_icon:
|
||||||
self._stop_icon = CanvasIcon(icon_name='stock-close')
|
self._stop_icon = CanvasIcon(icon_name='theme:stock-close')
|
||||||
self.add_action(self._stop_icon, ClipboardMenu.ACTION_STOP_DOWNLOAD)
|
self.add_action(self._stop_icon, ClipboardMenu.ACTION_STOP_DOWNLOAD)
|
||||||
|
|
||||||
if self._remove_icon:
|
if self._remove_icon:
|
||||||
|
@ -37,11 +37,11 @@ class ActivityMenu(Menu):
|
|||||||
self._add_close_action()
|
self._add_close_action()
|
||||||
|
|
||||||
def _add_mesh_action(self):
|
def _add_mesh_action(self):
|
||||||
icon = CanvasIcon(icon_name='stock-share-mesh')
|
icon = CanvasIcon(icon_name='theme:stock-share-mesh')
|
||||||
self.add_action(icon, ActivityMenu.ACTION_SHARE)
|
self.add_action(icon, ActivityMenu.ACTION_SHARE)
|
||||||
|
|
||||||
def _add_close_action(self):
|
def _add_close_action(self):
|
||||||
icon = CanvasIcon(icon_name='stock-close')
|
icon = CanvasIcon(icon_name='theme:stock-close')
|
||||||
self.add_action(icon, ActivityMenu.ACTION_CLOSE)
|
self.add_action(icon, ActivityMenu.ACTION_CLOSE)
|
||||||
|
|
||||||
class ActivityIcon(MenuIcon):
|
class ActivityIcon(MenuIcon):
|
||||||
@ -81,22 +81,22 @@ class ZoomBox(hippo.CanvasBox):
|
|||||||
self._menu_shell = menu_shell
|
self._menu_shell = menu_shell
|
||||||
self._activity_icon = None
|
self._activity_icon = None
|
||||||
|
|
||||||
icon = CanvasIcon(icon_name='stock-zoom-mesh')
|
icon = CanvasIcon(icon_name='theme:stock-zoom-mesh')
|
||||||
style.apply_stylesheet(icon, 'frame.ZoomIcon')
|
style.apply_stylesheet(icon, 'frame.ZoomIcon')
|
||||||
icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_MESH)
|
icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_MESH)
|
||||||
self.append(icon)
|
self.append(icon)
|
||||||
|
|
||||||
icon = CanvasIcon(icon_name='stock-zoom-friends')
|
icon = CanvasIcon(icon_name='theme:stock-zoom-friends')
|
||||||
style.apply_stylesheet(icon, 'frame.ZoomIcon')
|
style.apply_stylesheet(icon, 'frame.ZoomIcon')
|
||||||
icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_FRIENDS)
|
icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_FRIENDS)
|
||||||
self.append(icon)
|
self.append(icon)
|
||||||
|
|
||||||
icon = CanvasIcon(icon_name='stock-zoom-home')
|
icon = CanvasIcon(icon_name='theme:stock-zoom-home')
|
||||||
style.apply_stylesheet(icon, 'frame.ZoomIcon')
|
style.apply_stylesheet(icon, 'frame.ZoomIcon')
|
||||||
icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_HOME)
|
icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_HOME)
|
||||||
self.append(icon)
|
self.append(icon)
|
||||||
|
|
||||||
icon = CanvasIcon(icon_name='stock-zoom-activity')
|
icon = CanvasIcon(icon_name='theme:stock-zoom-activity')
|
||||||
style.apply_stylesheet(icon, 'frame.ZoomIcon')
|
style.apply_stylesheet(icon, 'frame.ZoomIcon')
|
||||||
icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_ACTIVITY)
|
icon.connect('activated', self._level_clicked_cb, sugar.ZOOM_ACTIVITY)
|
||||||
self.append(icon)
|
self.append(icon)
|
||||||
|
@ -9,7 +9,7 @@ class OverlayBox(hippo.CanvasBox):
|
|||||||
|
|
||||||
self._shell = shell
|
self._shell = shell
|
||||||
|
|
||||||
icon = CanvasIcon(icon_name='stock-chat')
|
icon = CanvasIcon(icon_name='theme:stock-chat')
|
||||||
style.apply_stylesheet(icon, 'frame.OverlayIcon')
|
style.apply_stylesheet(icon, 'frame.OverlayIcon')
|
||||||
icon.connect('activated', self._overlay_clicked_cb)
|
icon.connect('activated', self._overlay_clicked_cb)
|
||||||
self.append(icon)
|
self.append(icon)
|
||||||
|
@ -19,5 +19,5 @@ from sugar import profile
|
|||||||
|
|
||||||
class MyIcon(CanvasIcon):
|
class MyIcon(CanvasIcon):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
CanvasIcon.__init__(self, icon_name='stock-buddy',
|
CanvasIcon.__init__(self, icon_name='theme:stock-buddy',
|
||||||
color=profile.get_color())
|
color=profile.get_color())
|
||||||
|
@ -3,6 +3,8 @@ import os
|
|||||||
|
|
||||||
from ConfigParser import ConfigParser
|
from ConfigParser import ConfigParser
|
||||||
|
|
||||||
|
import gtk
|
||||||
|
|
||||||
class Bundle:
|
class Bundle:
|
||||||
"""Info about an activity bundle. Wraps the activity.info file."""
|
"""Info about an activity bundle. Wraps the activity.info file."""
|
||||||
def __init__(self, path):
|
def __init__(self, path):
|
||||||
@ -21,6 +23,8 @@ class Bundle:
|
|||||||
self._valid = False
|
self._valid = False
|
||||||
|
|
||||||
def _parse_info(self, info_path):
|
def _parse_info(self, info_path):
|
||||||
|
base_path = os.path.dirname(info_path)
|
||||||
|
|
||||||
cp = ConfigParser()
|
cp = ConfigParser()
|
||||||
cp.read([info_path])
|
cp.read([info_path])
|
||||||
|
|
||||||
@ -49,7 +53,11 @@ class Bundle:
|
|||||||
self._show_launcher = False
|
self._show_launcher = False
|
||||||
|
|
||||||
if cp.has_option(section, 'icon'):
|
if cp.has_option(section, 'icon'):
|
||||||
self._icon = cp.get(section, 'icon')
|
icon = cp.get(section, 'icon')
|
||||||
|
if gtk.icon_theme_get_default().has_icon(icon):
|
||||||
|
self._icon = 'theme:' + icon
|
||||||
|
else:
|
||||||
|
self._icon = os.path.join(base_path, icon + ".svg")
|
||||||
|
|
||||||
if cp.has_option(section, 'activity_version'):
|
if cp.has_option(section, 'activity_version'):
|
||||||
self._activity_version = int(cp.get(section, 'activity_version'))
|
self._activity_version = int(cp.get(section, 'activity_version'))
|
||||||
|
@ -52,7 +52,14 @@ class _IconCache:
|
|||||||
return rsvg.Handle(data=data)
|
return rsvg.Handle(data=data)
|
||||||
|
|
||||||
def get_handle(self, name, color, size):
|
def get_handle(self, name, color, size):
|
||||||
info = self._theme.lookup_icon(name, int(size), 0)
|
if name[0:6] == "theme:":
|
||||||
|
icon = self._read_icon_from_name(name[6:], color, size)
|
||||||
|
else:
|
||||||
|
icon = self._read_icon(name, color)
|
||||||
|
return icon
|
||||||
|
|
||||||
|
def _read_icon_from_name(self, name, color, size):
|
||||||
|
info = self._theme.lookup_icon(name, size, 0)
|
||||||
|
|
||||||
if not info:
|
if not info:
|
||||||
raise "Icon '" + name + "' not found."
|
raise "Icon '" + name + "' not found."
|
||||||
|
Loading…
Reference in New Issue
Block a user