diff --git a/gajim/chat_control.py b/gajim/chat_control.py index 3dcae5d71951cf1873bebf731f42b5ec823124ef..8841a89be54d33816d600971ef16930b6608fd9d 100644 --- a/gajim/chat_control.py +++ b/gajim/chat_control.py @@ -60,6 +60,8 @@ from gajim.gtk.util import get_icon_name from gajim.gtk.util import get_cursor from gajim.gtk.util import ensure_proper_control from gajim.gtk.util import format_mood +from gajim.gtk.util import format_activity +from gajim.gtk.util import get_activity_icon_name from gajim.command_system.implementation.hosts import ChatCommands from gajim.command_system.framework import CommandHost # pylint: disable=unused-import @@ -131,7 +133,6 @@ class ChatControl(ChatControlBase): self.update_toolbar() self._pep_images = {} - self._pep_images['activity'] = self.xml.get_object('activity_image') self._pep_images['tune'] = self.xml.get_object('tune_image') self._pep_images['geoloc'] = self.xml.get_object('location_image') self.update_all_pep_types() @@ -233,6 +234,8 @@ class ChatControl(ChatControlBase): self._on_nickname_received) app.ged.register_event_handler('mood-received', ged.GUI1, self._on_mood_received) + app.ged.register_event_handler('activity-received', ged.GUI1, + self._on_activity_received) if self.TYPE_ID == message_control.TYPE_CHAT: # Dont connect this when PrivateChatControl is used app.ged.register_event_handler('update-roster-avatar', ged.GUI1, @@ -416,6 +419,7 @@ class ChatControl(ChatControlBase): for pep_type in self._pep_images: self.update_pep(pep_type) self._update_pep(PEPEventType.MOOD) + self._update_pep(PEPEventType.ACTIVITY) def update_pep(self, pep_type): if isinstance(self.contact, GC_Contact): @@ -453,6 +457,9 @@ class ChatControl(ChatControlBase): if type_ == PEPEventType.MOOD: icon = 'mood-%s' % data.mood formated_text = format_mood(*data) + elif type_ == PEPEventType.ACTIVITY: + icon = get_activity_icon_name(data.activity, data.subactivity) + formated_text = format_activity(*data) image.set_from_icon_name(icon, Gtk.IconSize.MENU) image.set_tooltip_markup(formated_text) @@ -461,11 +468,17 @@ class ChatControl(ChatControlBase): def _get_pep_widget(self, type_): if type_ == PEPEventType.MOOD: return self.xml.get_object('mood_image') + if type_ == PEPEventType.ACTIVITY: + return self.xml.get_object('activity_image') @ensure_proper_control def _on_mood_received(self, _event): self._update_pep(PEPEventType.MOOD) + @ensure_proper_control + def _on_activity_received(self, _event): + self._update_pep(PEPEventType.ACTIVITY) + @ensure_proper_control def _on_nickname_received(self, _event): self.update_ui() @@ -1086,6 +1099,8 @@ class ChatControl(ChatControlBase): self._on_nickname_received) app.ged.remove_event_handler('mood-received', ged.GUI1, self._on_mood_received) + app.ged.remove_event_handler('activity-received', ged.GUI1, + self._on_activity_received) if self.TYPE_ID == message_control.TYPE_CHAT: app.ged.remove_event_handler('update-roster-avatar', ged.GUI1, self._nec_update_avatar) diff --git a/gajim/common/config.py b/gajim/common/config.py index 63576da968dbb7b577b3a7b1b37829473957a281..d4c0a0612343745d21c61cff73ac4d5b0973a300 100644 --- a/gajim/common/config.py +++ b/gajim/common/config.py @@ -93,8 +93,6 @@ class Config: 'trayicon': [opt_str, 'always', _("When to show notification area icon. Can be 'never', 'on_event', 'always'."), False], 'allow_hide_roster': [opt_bool, False, _("Allow to hide the roster window even if the tray icon is not shown."), False], 'iconset': [opt_str, DEFAULT_ICONSET, '', True], - 'mood_iconset': [opt_str, DEFAULT_MOOD_ICONSET, '', True], - 'activity_iconset': [opt_str, DEFAULT_ACTIVITY_ICONSET, '', True], 'use_transports_iconsets': [opt_bool, True, '', True], 'notif_signin_color': [opt_color, '#32CD32', _('Contact signed in notification color.')], # limegreen 'notif_signout_color': [opt_color, '#FF0000', _('Contact signout notification color')], # red diff --git a/gajim/common/configpaths.py b/gajim/common/configpaths.py index 908a13c385c184bc00e2ee0f1c01f7aa0a5847ad..13b267108743989b73bc8ba9d3fd8debbafb1556 100644 --- a/gajim/common/configpaths.py +++ b/gajim/common/configpaths.py @@ -221,8 +221,6 @@ class ConfigPaths: 'emoticons', PathLocation.DATA, PathType.FOLDER_OPTIONAL), ('MY_ICONSETS', 'iconsets', PathLocation.DATA, PathType.FOLDER_OPTIONAL), - ('MY_ACTIVITY_ICONSETS', - 'activities', PathLocation.DATA, PathType.FOLDER_OPTIONAL), # Cache paths ('CACHE_DB', 'cache.db', PathLocation.CACHE, PathType.FILE), diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py index 2ef42e57e3ecc7fc786b126d5379d56817de9693..4144488f7747b5a7cce8da26f23dd291b78fa16b 100644 --- a/gajim/common/helpers.py +++ b/gajim/common/helpers.py @@ -1098,13 +1098,6 @@ def get_current_show(account): status = app.connections[account].connected return app.SHOW_LIST[status] -def get_activity_iconset_path(iconset): - if os.path.isdir(os.path.join(configpaths.get('DATA'), 'activities', iconset)): - return os.path.join(configpaths.get('DATA'), 'activities', iconset) - if os.path.isdir(os.path.join(configpaths.get('MY_ACTIVITY_ICONSETS'), - iconset)): - return os.path.join(configpaths.get('MY_ACTIVITY_ICONSETS'), iconset) - def prepare_and_validate_gpg_keyID(account, jid, keyID): """ Return an eight char long keyID that can be used with for GPG encryption diff --git a/gajim/common/modules/__init__.py b/gajim/common/modules/__init__.py index 280c0e65f87083ce2a8b42c4697b135dbfbbe107..5fd8381c12391a5e779ac3bcbf6889326a199bca 100644 --- a/gajim/common/modules/__init__.py +++ b/gajim/common/modules/__init__.py @@ -35,7 +35,9 @@ ZEROCONF_MODULES = ['iq', _imported_modules = [] # type: List[tuple] _modules = {} # type: Dict[str, Dict[str, Any]] _store_publish_modules = [ - 'UserMood'] # type: List[str] + 'UserMood', + 'UserActivity', +] # type: List[str] for file in Path(__file__).parent.iterdir(): if file.stem == '__init__': diff --git a/gajim/common/modules/message.py b/gajim/common/modules/message.py index 0cbe990aa93ee7538fb24ff5df0fefbdd0e992ba..0a30211e2ffaeddde57c184b2e47b78be207385f 100644 --- a/gajim/common/modules/message.py +++ b/gajim/common/modules/message.py @@ -59,7 +59,7 @@ class Message: nbxmpp.NS_IBB]) def _message_received(self, _con, stanza, properties): - if properties.is_mam_message or properties.is_pubsub_event: + if properties.is_mam_message or properties.is_pubsub: return # Check if a child of the message contains any # namespaces that we handle in other modules. diff --git a/gajim/common/modules/user_activity.py b/gajim/common/modules/user_activity.py index 574027f226bed36e8520bf2cfcf4c6e6f3d35600..e23179ac040b4e71d324fb6ac591ae8d76759e96 100644 --- a/gajim/common/modules/user_activity.py +++ b/gajim/common/modules/user_activity.py @@ -14,92 +14,62 @@ # XEP-0108: User Activity +from typing import Any +from typing import Tuple + import logging import nbxmpp -from gi.repository import GLib -from gajim.common.const import PEPEventType, ACTIVITIES -from gajim.common.exceptions import StanzaMalformed -from gajim.common.modules.pep import AbstractPEPModule, AbstractPEPData +from gajim.common import app +from gajim.common.nec import NetworkEvent +from gajim.common.modules.base import BaseModule +from gajim.common.modules.util import event_node +from gajim.common.modules.util import store_publish +from gajim.common.const import PEPEventType log = logging.getLogger('gajim.c.m.user_activity') -class UserActivityData(AbstractPEPData): - - type_ = PEPEventType.ACTIVITY - - def as_markup_text(self): - pep = self.data - activity = pep['activity'] - subactivity = pep['subactivity'] if 'subactivity' in pep else None - text = pep['text'] if 'text' in pep else None +class UserActivity(BaseModule): - if activity in ACTIVITIES: - # Translate standard activities - if subactivity in ACTIVITIES[activity]: - subactivity = ACTIVITIES[activity][subactivity] - activity = ACTIVITIES[activity]['category'] + _nbxmpp_extends = 'Activity' + _nbxmpp_methods = [ + 'set_activity', + ] - markuptext = '<b>' + GLib.markup_escape_text(activity) - if subactivity: - markuptext += ': ' + GLib.markup_escape_text(subactivity) - markuptext += '</b>' - if text: - markuptext += ' (%s)' % GLib.markup_escape_text(text) - return markuptext + def __init__(self, con): + BaseModule.__init__(self, con) + self._register_pubsub_handler(self._activity_received) + @event_node(nbxmpp.NS_ACTIVITY) + def _activity_received(self, _con, _stanza, properties): + data = properties.pubsub_event.data + for contact in app.contacts.get_contacts(self._account, + str(properties.jid)): + if data.activity is not None: + contact.pep[PEPEventType.ACTIVITY] = data + else: + contact.pep.pop(PEPEventType.ACTIVITY, None) -class UserActivity(AbstractPEPModule): + if properties.is_self_message: + if data.activity is not None: + self._con.pep[PEPEventType.ACTIVITY] = data + else: + self._con.pep.pop(PEPEventType.ACTIVITY, None) - name = 'activity' - namespace = nbxmpp.NS_ACTIVITY - pep_class = UserActivityData - store_publish = True - _log = log + app.nec.push_incoming_event( + NetworkEvent('activity-received', + account=self._account, + jid=properties.jid.getBare(), + activity=data, + is_self_message=properties.is_self_message)) - def _extract_info(self, item): - activity_dict = {} - activity_tag = item.getTag('activity', namespace=self.namespace) - if activity_tag is None: - raise StanzaMalformed('No activity node') + @store_publish + def set_activity(self, activity): + log.info('Send %s', activity) + self._nbxmpp('Activity').set_activity(activity) - if not activity_tag.getChildren(): - return None - for child in activity_tag.getChildren(): - name = child.getName().strip() - data = child.getData().strip() - if name == 'text': - activity_dict['text'] = data - else: - activity_dict['activity'] = name - for subactivity in child.getChildren(): - subactivity_name = subactivity.getName().strip() - activity_dict['subactivity'] = subactivity_name - - if 'activity' not in activity_dict: - raise StanzaMalformed('No activity value found') - return activity_dict - - def _build_node(self, data): - item = nbxmpp.Node('activity', {'xmlns': self.namespace}) - if data is None: - return item - - activity, subactivity, message = data - if not activity: - return item - - i = item.addChild(activity) - if subactivity: - i.addChild(subactivity) - if message: - i = item.addChild('text') - i.addData(message) - return item - - -def get_instance(*args, **kwargs): +def get_instance(*args: Any, **kwargs: Any) -> Tuple[UserActivity, str]: return UserActivity(*args, **kwargs), 'UserActivity' diff --git a/gajim/data/activities/default/unknown/category.png b/gajim/data/activities/default/unknown/category.png deleted file mode 100644 index 63d9034cb4f041e8c4f820ae64bef3974485f164..0000000000000000000000000000000000000000 Binary files a/gajim/data/activities/default/unknown/category.png and /dev/null differ diff --git a/gajim/data/activities/default/doing_chores/buying_groceries.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores-buying-groceries.png similarity index 100% rename from gajim/data/activities/default/doing_chores/buying_groceries.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores-buying-groceries.png diff --git a/gajim/data/activities/default/doing_chores/cleaning.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores-cleaning.png similarity index 100% rename from gajim/data/activities/default/doing_chores/cleaning.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores-cleaning.png diff --git a/gajim/data/activities/default/doing_chores/cooking.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores-cooking.png similarity index 100% rename from gajim/data/activities/default/doing_chores/cooking.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores-cooking.png diff --git a/gajim/data/activities/default/doing_chores/doing_maintenance.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores-doing-maintenance.png similarity index 100% rename from gajim/data/activities/default/doing_chores/doing_maintenance.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores-doing-maintenance.png diff --git a/gajim/data/activities/default/doing_chores/doing_the_dishes.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores-doing-the-dishes.png similarity index 100% rename from gajim/data/activities/default/doing_chores/doing_the_dishes.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores-doing-the-dishes.png diff --git a/gajim/data/activities/default/doing_chores/doing_the_laundry.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores-doing-the-laundry.png similarity index 100% rename from gajim/data/activities/default/doing_chores/doing_the_laundry.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores-doing-the-laundry.png diff --git a/gajim/data/activities/default/doing_chores/gardening.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores-gardening.png similarity index 100% rename from gajim/data/activities/default/doing_chores/gardening.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores-gardening.png diff --git a/gajim/data/activities/default/doing_chores/running_an_errand.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores-running-an-errand.png similarity index 100% rename from gajim/data/activities/default/doing_chores/running_an_errand.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores-running-an-errand.png diff --git a/gajim/data/activities/default/doing_chores/walking_the_dog.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores-walking-the-dog.png similarity index 100% rename from gajim/data/activities/default/doing_chores/walking_the_dog.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores-walking-the-dog.png diff --git a/gajim/data/activities/default/doing_chores/category.png b/gajim/data/icons/hicolor/16x16/status/activity-doing-chores.png similarity index 100% rename from gajim/data/activities/default/doing_chores/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-doing-chores.png diff --git a/gajim/data/activities/default/drinking/having_a_beer.png b/gajim/data/icons/hicolor/16x16/status/activity-drinking-having-a-beer.png similarity index 100% rename from gajim/data/activities/default/drinking/having_a_beer.png rename to gajim/data/icons/hicolor/16x16/status/activity-drinking-having-a-beer.png diff --git a/gajim/data/activities/default/drinking/having_coffee.png b/gajim/data/icons/hicolor/16x16/status/activity-drinking-having-coffee.png similarity index 100% rename from gajim/data/activities/default/drinking/having_coffee.png rename to gajim/data/icons/hicolor/16x16/status/activity-drinking-having-coffee.png diff --git a/gajim/data/activities/default/drinking/having_tea.png b/gajim/data/icons/hicolor/16x16/status/activity-drinking-having-tea.png similarity index 100% rename from gajim/data/activities/default/drinking/having_tea.png rename to gajim/data/icons/hicolor/16x16/status/activity-drinking-having-tea.png diff --git a/gajim/data/activities/default/drinking/category.png b/gajim/data/icons/hicolor/16x16/status/activity-drinking.png similarity index 100% rename from gajim/data/activities/default/drinking/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-drinking.png diff --git a/gajim/data/activities/default/eating/having_a_snack.png b/gajim/data/icons/hicolor/16x16/status/activity-eating-having-a-snack.png similarity index 100% rename from gajim/data/activities/default/eating/having_a_snack.png rename to gajim/data/icons/hicolor/16x16/status/activity-eating-having-a-snack.png diff --git a/gajim/data/activities/default/eating/having_breakfast.png b/gajim/data/icons/hicolor/16x16/status/activity-eating-having-breakfast.png similarity index 100% rename from gajim/data/activities/default/eating/having_breakfast.png rename to gajim/data/icons/hicolor/16x16/status/activity-eating-having-breakfast.png diff --git a/gajim/data/activities/default/eating/having_dinner.png b/gajim/data/icons/hicolor/16x16/status/activity-eating-having-dinner.png similarity index 100% rename from gajim/data/activities/default/eating/having_dinner.png rename to gajim/data/icons/hicolor/16x16/status/activity-eating-having-dinner.png diff --git a/gajim/data/activities/default/eating/having_lunch.png b/gajim/data/icons/hicolor/16x16/status/activity-eating-having-lunch.png similarity index 100% rename from gajim/data/activities/default/eating/having_lunch.png rename to gajim/data/icons/hicolor/16x16/status/activity-eating-having-lunch.png diff --git a/gajim/data/activities/default/eating/category.png b/gajim/data/icons/hicolor/16x16/status/activity-eating.png similarity index 100% rename from gajim/data/activities/default/eating/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-eating.png diff --git a/gajim/data/activities/default/exercising/cycling.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising-cycling.png similarity index 100% rename from gajim/data/activities/default/exercising/cycling.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising-cycling.png diff --git a/gajim/data/activities/default/exercising/dancing.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising-dancing.png similarity index 100% rename from gajim/data/activities/default/exercising/dancing.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising-dancing.png diff --git a/gajim/data/activities/default/exercising/hiking.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising-hiking.png similarity index 100% rename from gajim/data/activities/default/exercising/hiking.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising-hiking.png diff --git a/gajim/data/activities/default/exercising/jogging.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising-jogging.png similarity index 100% rename from gajim/data/activities/default/exercising/jogging.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising-jogging.png diff --git a/gajim/data/activities/default/exercising/playing_sports.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising-playing-sports.png similarity index 100% rename from gajim/data/activities/default/exercising/playing_sports.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising-playing-sports.png diff --git a/gajim/data/activities/default/exercising/running.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising-running.png similarity index 100% rename from gajim/data/activities/default/exercising/running.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising-running.png diff --git a/gajim/data/activities/default/exercising/skiing.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising-skiing.png similarity index 100% rename from gajim/data/activities/default/exercising/skiing.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising-skiing.png diff --git a/gajim/data/activities/default/exercising/swimming.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising-swimming.png similarity index 100% rename from gajim/data/activities/default/exercising/swimming.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising-swimming.png diff --git a/gajim/data/activities/default/exercising/working_out.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising-working-out.png similarity index 100% rename from gajim/data/activities/default/exercising/working_out.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising-working-out.png diff --git a/gajim/data/activities/default/exercising/category.png b/gajim/data/icons/hicolor/16x16/status/activity-exercising.png similarity index 100% rename from gajim/data/activities/default/exercising/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-exercising.png diff --git a/gajim/data/activities/default/grooming/at_the_spa.png b/gajim/data/icons/hicolor/16x16/status/activity-grooming-at-the-spa.png similarity index 100% rename from gajim/data/activities/default/grooming/at_the_spa.png rename to gajim/data/icons/hicolor/16x16/status/activity-grooming-at-the-spa.png diff --git a/gajim/data/activities/default/grooming/brushing_teeth.png b/gajim/data/icons/hicolor/16x16/status/activity-grooming-brushing-teeth.png similarity index 100% rename from gajim/data/activities/default/grooming/brushing_teeth.png rename to gajim/data/icons/hicolor/16x16/status/activity-grooming-brushing-teeth.png diff --git a/gajim/data/activities/default/grooming/getting_a_haircut.png b/gajim/data/icons/hicolor/16x16/status/activity-grooming-getting-a-haircut.png similarity index 100% rename from gajim/data/activities/default/grooming/getting_a_haircut.png rename to gajim/data/icons/hicolor/16x16/status/activity-grooming-getting-a-haircut.png diff --git a/gajim/data/activities/default/grooming/shaving.png b/gajim/data/icons/hicolor/16x16/status/activity-grooming-shaving.png similarity index 100% rename from gajim/data/activities/default/grooming/shaving.png rename to gajim/data/icons/hicolor/16x16/status/activity-grooming-shaving.png diff --git a/gajim/data/activities/default/grooming/taking_a_bath.png b/gajim/data/icons/hicolor/16x16/status/activity-grooming-taking-a-bath.png similarity index 100% rename from gajim/data/activities/default/grooming/taking_a_bath.png rename to gajim/data/icons/hicolor/16x16/status/activity-grooming-taking-a-bath.png diff --git a/gajim/data/activities/default/grooming/taking_a_shower.png b/gajim/data/icons/hicolor/16x16/status/activity-grooming-taking-a-shower.png similarity index 100% rename from gajim/data/activities/default/grooming/taking_a_shower.png rename to gajim/data/icons/hicolor/16x16/status/activity-grooming-taking-a-shower.png diff --git a/gajim/data/activities/default/grooming/category.png b/gajim/data/icons/hicolor/16x16/status/activity-grooming.png similarity index 100% rename from gajim/data/activities/default/grooming/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-grooming.png diff --git a/gajim/data/activities/default/having_appointment/category.png b/gajim/data/icons/hicolor/16x16/status/activity-having-appointment.png similarity index 100% rename from gajim/data/activities/default/having_appointment/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-having-appointment.png diff --git a/gajim/data/activities/default/inactive/day_off.png b/gajim/data/icons/hicolor/16x16/status/activity-inactive-day-off.png similarity index 100% rename from gajim/data/activities/default/inactive/day_off.png rename to gajim/data/icons/hicolor/16x16/status/activity-inactive-day-off.png diff --git a/gajim/data/activities/default/inactive/hanging_out.png b/gajim/data/icons/hicolor/16x16/status/activity-inactive-hanging-out.png similarity index 100% rename from gajim/data/activities/default/inactive/hanging_out.png rename to gajim/data/icons/hicolor/16x16/status/activity-inactive-hanging-out.png diff --git a/gajim/data/activities/default/inactive/hiding.png b/gajim/data/icons/hicolor/16x16/status/activity-inactive-hiding.png similarity index 100% rename from gajim/data/activities/default/inactive/hiding.png rename to gajim/data/icons/hicolor/16x16/status/activity-inactive-hiding.png diff --git a/gajim/data/activities/default/inactive/on_vacation.png b/gajim/data/icons/hicolor/16x16/status/activity-inactive-on-vacation.png similarity index 100% rename from gajim/data/activities/default/inactive/on_vacation.png rename to gajim/data/icons/hicolor/16x16/status/activity-inactive-on-vacation.png diff --git a/gajim/data/activities/default/inactive/praying.png b/gajim/data/icons/hicolor/16x16/status/activity-inactive-praying.png similarity index 100% rename from gajim/data/activities/default/inactive/praying.png rename to gajim/data/icons/hicolor/16x16/status/activity-inactive-praying.png diff --git a/gajim/data/activities/default/inactive/scheduled_holiday.png b/gajim/data/icons/hicolor/16x16/status/activity-inactive-scheduled-holiday.png similarity index 100% rename from gajim/data/activities/default/inactive/scheduled_holiday.png rename to gajim/data/icons/hicolor/16x16/status/activity-inactive-scheduled-holiday.png diff --git a/gajim/data/activities/default/inactive/sleeping.png b/gajim/data/icons/hicolor/16x16/status/activity-inactive-sleeping.png similarity index 100% rename from gajim/data/activities/default/inactive/sleeping.png rename to gajim/data/icons/hicolor/16x16/status/activity-inactive-sleeping.png diff --git a/gajim/data/activities/default/inactive/thinking.png b/gajim/data/icons/hicolor/16x16/status/activity-inactive-thinking.png similarity index 100% rename from gajim/data/activities/default/inactive/thinking.png rename to gajim/data/icons/hicolor/16x16/status/activity-inactive-thinking.png diff --git a/gajim/data/activities/default/inactive/category.png b/gajim/data/icons/hicolor/16x16/status/activity-inactive.png similarity index 100% rename from gajim/data/activities/default/inactive/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-inactive.png diff --git a/gajim/data/activities/default/relaxing/fishing.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-fishing.png similarity index 100% rename from gajim/data/activities/default/relaxing/fishing.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-fishing.png diff --git a/gajim/data/activities/default/relaxing/gaming.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-gaming.png similarity index 100% rename from gajim/data/activities/default/relaxing/gaming.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-gaming.png diff --git a/gajim/data/activities/default/relaxing/going_out.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-going-out.png similarity index 100% rename from gajim/data/activities/default/relaxing/going_out.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-going-out.png diff --git a/gajim/data/activities/default/relaxing/partying.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-partying.png similarity index 100% rename from gajim/data/activities/default/relaxing/partying.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-partying.png diff --git a/gajim/data/activities/default/relaxing/reading.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-reading.png similarity index 100% rename from gajim/data/activities/default/relaxing/reading.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-reading.png diff --git a/gajim/data/activities/default/relaxing/rehearsing.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-rehearsing.png similarity index 100% rename from gajim/data/activities/default/relaxing/rehearsing.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-rehearsing.png diff --git a/gajim/data/activities/default/relaxing/shopping.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-shopping.png similarity index 100% rename from gajim/data/activities/default/relaxing/shopping.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-shopping.png diff --git a/gajim/data/activities/default/relaxing/smoking.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-smoking.png similarity index 100% rename from gajim/data/activities/default/relaxing/smoking.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-smoking.png diff --git a/gajim/data/activities/default/relaxing/socializing.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-socializing.png similarity index 100% rename from gajim/data/activities/default/relaxing/socializing.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-socializing.png diff --git a/gajim/data/activities/default/relaxing/sunbathing.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-sunbathing.png similarity index 100% rename from gajim/data/activities/default/relaxing/sunbathing.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-sunbathing.png diff --git a/gajim/data/activities/default/relaxing/watching_a_movie.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-watching-a-movie.png similarity index 100% rename from gajim/data/activities/default/relaxing/watching_a_movie.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-watching-a-movie.png diff --git a/gajim/data/activities/default/relaxing/watching_tv.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing-watching-tv.png similarity index 100% rename from gajim/data/activities/default/relaxing/watching_tv.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing-watching-tv.png diff --git a/gajim/data/activities/default/relaxing/category.png b/gajim/data/icons/hicolor/16x16/status/activity-relaxing.png similarity index 100% rename from gajim/data/activities/default/relaxing/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-relaxing.png diff --git a/gajim/data/activities/default/talking/in_real_life.png b/gajim/data/icons/hicolor/16x16/status/activity-talking-in-real-life.png similarity index 100% rename from gajim/data/activities/default/talking/in_real_life.png rename to gajim/data/icons/hicolor/16x16/status/activity-talking-in-real-life.png diff --git a/gajim/data/activities/default/talking/on_the_phone.png b/gajim/data/icons/hicolor/16x16/status/activity-talking-on-the-phone.png similarity index 100% rename from gajim/data/activities/default/talking/on_the_phone.png rename to gajim/data/icons/hicolor/16x16/status/activity-talking-on-the-phone.png diff --git a/gajim/data/activities/default/talking/on_video_phone.png b/gajim/data/icons/hicolor/16x16/status/activity-talking-on-video-phone.png similarity index 100% rename from gajim/data/activities/default/talking/on_video_phone.png rename to gajim/data/icons/hicolor/16x16/status/activity-talking-on-video-phone.png diff --git a/gajim/data/activities/default/talking/category.png b/gajim/data/icons/hicolor/16x16/status/activity-talking.png similarity index 100% rename from gajim/data/activities/default/talking/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-talking.png diff --git a/gajim/data/activities/default/traveling/commuting.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling-commuting.png similarity index 100% rename from gajim/data/activities/default/traveling/commuting.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling-commuting.png diff --git a/gajim/data/activities/default/traveling/cycling.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling-cycling.png similarity index 100% rename from gajim/data/activities/default/traveling/cycling.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling-cycling.png diff --git a/gajim/data/activities/default/traveling/driving.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling-driving.png similarity index 100% rename from gajim/data/activities/default/traveling/driving.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling-driving.png diff --git a/gajim/data/activities/default/traveling/in_a_car.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling-in-a-car.png similarity index 100% rename from gajim/data/activities/default/traveling/in_a_car.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling-in-a-car.png diff --git a/gajim/data/activities/default/traveling/on_a_bus.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling-on-a-bus.png similarity index 100% rename from gajim/data/activities/default/traveling/on_a_bus.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling-on-a-bus.png diff --git a/gajim/data/activities/default/traveling/on_a_plane.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling-on-a-plane.png similarity index 100% rename from gajim/data/activities/default/traveling/on_a_plane.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling-on-a-plane.png diff --git a/gajim/data/activities/default/traveling/on_a_train.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling-on-a-train.png similarity index 100% rename from gajim/data/activities/default/traveling/on_a_train.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling-on-a-train.png diff --git a/gajim/data/activities/default/traveling/on_a_trip.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling-on-a-trip.png similarity index 100% rename from gajim/data/activities/default/traveling/on_a_trip.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling-on-a-trip.png diff --git a/gajim/data/activities/default/traveling/walking.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling-walking.png similarity index 100% rename from gajim/data/activities/default/traveling/walking.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling-walking.png diff --git a/gajim/data/activities/default/traveling/category.png b/gajim/data/icons/hicolor/16x16/status/activity-traveling.png similarity index 100% rename from gajim/data/activities/default/traveling/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-traveling.png diff --git a/gajim/data/activities/default/working/coding.png b/gajim/data/icons/hicolor/16x16/status/activity-working-coding.png similarity index 100% rename from gajim/data/activities/default/working/coding.png rename to gajim/data/icons/hicolor/16x16/status/activity-working-coding.png diff --git a/gajim/data/activities/default/working/in_a_meeting.png b/gajim/data/icons/hicolor/16x16/status/activity-working-in-a-meeting.png similarity index 100% rename from gajim/data/activities/default/working/in_a_meeting.png rename to gajim/data/icons/hicolor/16x16/status/activity-working-in-a-meeting.png diff --git a/gajim/data/activities/default/working/studying.png b/gajim/data/icons/hicolor/16x16/status/activity-working-studying.png similarity index 100% rename from gajim/data/activities/default/working/studying.png rename to gajim/data/icons/hicolor/16x16/status/activity-working-studying.png diff --git a/gajim/data/activities/default/working/writing.png b/gajim/data/icons/hicolor/16x16/status/activity-working-writing.png similarity index 100% rename from gajim/data/activities/default/working/writing.png rename to gajim/data/icons/hicolor/16x16/status/activity-working-writing.png diff --git a/gajim/data/activities/default/working/category.png b/gajim/data/icons/hicolor/16x16/status/activity-working.png similarity index 100% rename from gajim/data/activities/default/working/category.png rename to gajim/data/icons/hicolor/16x16/status/activity-working.png diff --git a/gajim/dialogs.py b/gajim/dialogs.py index 56389ef01e9bc78c0a27e998a7f60d8d122d50d3..4f9da8f4b3cc45491aafab7a24fa942d405c3ff5 100644 --- a/gajim/dialogs.py +++ b/gajim/dialogs.py @@ -37,7 +37,6 @@ from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GLib -from gajim import gtkgui_helpers from gajim import vcard from gajim import dataforms_widget @@ -58,6 +57,7 @@ from gajim.gtk.add_contact import AddNewContactWindow from gajim.gtk.util import get_icon_name from gajim.gtk.util import resize_window from gajim.gtk.util import get_builder +from gajim.gtk.util import get_activity_icon_name log = logging.getLogger('gajim.dialogs') @@ -369,9 +369,9 @@ class ChangeActivityDialog: group = None for category in ACTIVITIES: + icon_name = get_activity_icon_name(category) item = self.xml.get_object(category + '_image') - item.set_from_pixbuf( - gtkgui_helpers.load_activity_icon(category).get_pixbuf()) + item.set_from_icon_name(icon_name, Gtk.IconSize.MENU) item.set_tooltip_text(ACTIVITIES[category]['category']) vbox = self.xml.get_object(category + '_vbox') @@ -386,7 +386,7 @@ class ChangeActivityDialog: else: rbtns[act] = group = Gtk.RadioButton() - icon = gtkgui_helpers.load_activity_icon(category, self.activity) + icon = Gtk.Image.new_from_icon_name(icon_name, Gtk.IconSize.MENU) hbox = Gtk.HBox(homogeneous=False, spacing=5) hbox.pack_start(icon, False, False, 0) lbl = Gtk.Label( @@ -412,7 +412,8 @@ class ChangeActivityDialog: else: rbtns[act] = group = Gtk.RadioButton() - icon = gtkgui_helpers.load_activity_icon(category, activity) + icon_name = get_activity_icon_name(category, activity) + icon = Gtk.Image.new_from_icon_name(icon_name, Gtk.IconSize.MENU) label = Gtk.Label(label=ACTIVITIES[category][activity]) hbox = Gtk.HBox(homogeneous=False, spacing=5) hbox.pack_start(icon, False, False, 0) @@ -681,12 +682,12 @@ class ChangeStatusMessageDialog(TimeoutDialog): ACTIVITIES: if 'subactivity' in self.pep_dict and self.pep_dict['subactivity'] \ in ACTIVITIES[self.pep_dict['activity']]: - img.set_from_pixbuf(gtkgui_helpers.load_activity_icon( - self.pep_dict['activity'], self.pep_dict['subactivity']).\ - get_pixbuf()) + icon_name = get_activity_icon_name(self.pep_dict['activity'], + self.pep_dict['subactivity']) + img.set_from_icon_name(icon_name, Gtk.IconSize.MENU) else: - img.set_from_pixbuf(gtkgui_helpers.load_activity_icon( - self.pep_dict['activity']).get_pixbuf()) + icon_name = get_activity_icon_name(self.pep_dict['activity']) + img.set_from_icon_name(icon_name, Gtk.IconSize.MENU) if self.pep_dict['activity_text']: label.set_text(self.pep_dict['activity_text']) else: diff --git a/gajim/gtk/tooltips.py b/gajim/gtk/tooltips.py index ad79d5f6141c44851e35d38ae634b64a4ee7041c..74b1d3ac20d3f8cdb8ff23f4124978a32f12b0e1 100644 --- a/gajim/gtk/tooltips.py +++ b/gajim/gtk/tooltips.py @@ -43,6 +43,8 @@ from gajim.common.i18n import _ from gajim.gtk.util import get_builder from gajim.gtk.util import get_icon_name from gajim.gtk.util import format_mood +from gajim.gtk.util import format_activity + log = logging.getLogger('gajim.gtk.tooltips') @@ -479,8 +481,8 @@ class RosterTooltip(StatusTable): self._ui.mood.show() self._ui.mood_label.show() - if 'activity' in contact.pep: - activity = contact.pep['activity'].as_markup_text() + if PEPEventType.ACTIVITY in contact.pep: + activity = format_activity(*contact.pep[PEPEventType.ACTIVITY]) self._ui.activity.set_markup(activity) self._ui.activity.show() self._ui.activity_label.show() diff --git a/gajim/gtk/util.py b/gajim/gtk/util.py index f74f0ee1d7cf633c9b2a7d8625e9778db2a652b8..1cd18b868963364cb5961fdf9740f7f9786d9237 100644 --- a/gajim/gtk/util.py +++ b/gajim/gtk/util.py @@ -37,6 +37,7 @@ from gajim.common import configpaths from gajim.common import i18n from gajim.common.i18n import _ from gajim.common.const import MOODS +from gajim.common.const import ACTIVITIES from gajim.gtk.const import GajimIconSet @@ -521,3 +522,27 @@ def format_mood(mood, text): if text is not None: markuptext += ' (%s)' % GLib.markup_escape_text(text) return markuptext + + +def format_activity(activity, subactivity, text): + if activity is None: + return + + if subactivity in ACTIVITIES[activity]: + subactivity = ACTIVITIES[activity][subactivity] + activity = ACTIVITIES[activity]['category'] + + markuptext = '<b>' + GLib.markup_escape_text(activity) + if subactivity: + markuptext += ': ' + GLib.markup_escape_text(subactivity) + markuptext += '</b>' + if text: + markuptext += ' (%s)' % GLib.markup_escape_text(text) + return markuptext + + +def get_activity_icon_name(activity, subactivity=None): + icon_name = 'activity-%s' % activity.replace('_', '-') + if subactivity is not None: + icon_name += '-%s' % subactivity.replace('_', '-') + return icon_name diff --git a/gajim/gtkgui_helpers.py b/gajim/gtkgui_helpers.py index 8b063bfe43e028f842a0de8fa9dd418ea2bbdfef..a14aaec0402b87b7ea721e1bfee30a609d2d0e42 100644 --- a/gajim/gtkgui_helpers.py +++ b/gajim/gtkgui_helpers.py @@ -41,10 +41,7 @@ except Exception: from gajim.common.i18n import _ from gajim.common import app -from gajim.common import helpers from gajim.common.const import PEPEventType -from gajim.common.const import ACTIVITIES -from gajim.common.const import MOODS HAS_PYWIN32 = True if os.name == 'nt': @@ -267,72 +264,15 @@ def create_list_multi(value_list, selected_values=None): treeview.show_all() return treeview -def load_activity_icon(category, activity=None): - """ - Load an icon from the activity iconset in 16x16 - """ - iconset = app.config.get('activity_iconset') - path = os.path.join(helpers.get_activity_iconset_path(iconset), - category, '') - if activity is None: - activity = 'category' - icon_list = _load_icon_list([activity], path) - return icon_list[activity] - def get_pep_icon(pep_class): if pep_class == PEPEventType.TUNE: return 'audio-x-generic' - if pep_class == PEPEventType.ACTIVITY: - pep_ = pep_class.data - activity = pep_['activity'] - - has_known_activity = activity in ACTIVITIES - has_known_subactivity = (has_known_activity and - 'subactivity' in pep_ and - pep_['subactivity'] in ACTIVITIES[activity]) - - if has_known_activity: - if has_known_subactivity: - subactivity = pep_['subactivity'] - return load_activity_icon(activity, subactivity).get_pixbuf() - return load_activity_icon(activity).get_pixbuf() - return load_activity_icon('unknown').get_pixbuf() - if pep_class == PEPEventType.LOCATION: return 'applications-internet' return None -def _load_icon_list(icons_list, path, pixbuf2=None): - """ - Load icons in icons_list from the given path, and add pixbuf2 on top left of - each static images - """ - imgs = {} - for icon in icons_list: - # try to open a pixfile with the correct method - icon_file = icon.replace(' ', '_') - files = [] - files.append(path + icon_file + '.gif') - files.append(path + icon_file + '.png') - image = Gtk.Image() - image.show() - imgs[icon] = image - for file_ in files: # loop seeking for either gif or png - if os.path.exists(file_): - image.set_from_file(file_) - if pixbuf2 and image.get_storage_type() == Gtk.ImageType.PIXBUF: - # add pixbuf2 on top-left corner of image - pixbuf1 = image.get_pixbuf() - pixbuf2.composite(pixbuf1, 0, 0, - pixbuf2.get_property('width'), - pixbuf2.get_property('height'), 0, 0, 1.0, 1.0, - GdkPixbuf.InterpType.NEAREST, 255) - image.set_from_pixbuf(pixbuf1) - break - return imgs - def label_set_autowrap(widget): """ Make labels automatically re-wrap if their containers are resized. diff --git a/gajim/roster_window.py b/gajim/roster_window.py index 99b1cdb5c0c318eb2b28324bff23a77899998ceb..edc461b8a41be3e04d1208b8c925c2840086ce14 100644 --- a/gajim/roster_window.py +++ b/gajim/roster_window.py @@ -37,13 +37,13 @@ from enum import IntEnum, unique from gi.repository import Gtk from gi.repository import Gdk -from gi.repository import GdkPixbuf from gi.repository import Pango from gi.repository import GObject from gi.repository import GLib from gi.repository import Gio from nbxmpp.protocol import NS_FILE, NS_ROSTERX, NS_CONFERENCE from nbxmpp.structs import MoodData +from nbxmpp.structs import ActivityData from gajim import dialogs from gajim import vcard @@ -87,6 +87,7 @@ from gajim.gtk.util import move_window from gajim.gtk.util import get_metacontact_surface from gajim.gtk.util import get_builder from gajim.gtk.util import set_urgency_hint +from gajim.gtk.util import get_activity_icon_name log = logging.getLogger('gajim.roster') @@ -1049,10 +1050,11 @@ class RosterWindow: else: self.model[child_iter][Column.MOOD_PIXBUF] = None - if app.config.get('show_activity_in_roster') and 'activity' in \ - pep_dict: - self.model[child_iter][Column.ACTIVITY_PIXBUF] = \ - gtkgui_helpers.get_pep_icon(pep_dict['activity']) + if app.config.get('show_activity_in_roster') and PEPEventType.ACTIVITY in pep_dict: + activity = pep_dict[PEPEventType.ACTIVITY].activity + subactivity = pep_dict[PEPEventType.ACTIVITY].subactivity + icon_name = get_activity_icon_name(activity, subactivity) + self.model[child_iter][Column.ACTIVITY_PIXBUF] = icon_name else: self.model[child_iter][Column.ACTIVITY_PIXBUF] = None @@ -1314,7 +1316,7 @@ class RosterWindow: if pep_type == PEPEventType.MOOD: return app.config.get('show_mood_in_roster') - if pep_type == 'activity': + if pep_type == PEPEventType.ACTIVITY: return app.config.get('show_activity_in_roster') if pep_type == 'tune': @@ -1329,6 +1331,7 @@ class RosterWindow: for pep_type in self._pep_type_to_model_column: self.draw_pep(jid, account, pep_type, contact=contact) self._draw_pep(account, jid, PEPEventType.MOOD) + self._draw_pep(account, jid, PEPEventType.ACTIVITY) def draw_pep(self, jid, account, pep_type, contact=None): if pep_type not in self._pep_type_to_model_column: @@ -1366,6 +1369,10 @@ class RosterWindow: column = Column.MOOD_PIXBUF if data is not None: icon = 'mood-%s' % data.mood + elif type_ == PEPEventType.ACTIVITY: + column = Column.ACTIVITY_PIXBUF + if data is not None: + icon = get_activity_icon_name(data.activity, data.subactivity) for child_iter in iters: self.model[child_iter][column] = icon @@ -2094,15 +2101,14 @@ class RosterWindow: def send_pep(self, account, pep_dict): connection = app.connections[account] - if 'activity' in pep_dict: activity = pep_dict['activity'] subactivity = pep_dict.get('subactivity', None) activity_text = pep_dict.get('activity_text', None) - connection.get_module('UserActivity').send( - (activity, subactivity, activity_text)) + connection.get_module('UserActivity').set_activity(ActivityData( + activity, subactivity, activity_text)) else: - connection.get_module('UserActivity').send(None) + connection.get_module('UserActivity').set_activity(None) if 'mood' in pep_dict: mood = pep_dict['mood'] @@ -2630,8 +2636,7 @@ class RosterWindow: self.remove_contact(jid, obj.conn.name, backend=True) def _nec_pep_received(self, obj): - if obj.user_pep.type_ not in (PEPEventType.ACTIVITY, - PEPEventType.TUNE, + if obj.user_pep.type_ not in (PEPEventType.TUNE, PEPEventType.LOCATION): return @@ -2645,6 +2650,11 @@ class RosterWindow: self.draw_account(event.account) self._draw_pep(event.account, event.jid, PEPEventType.MOOD) + def _on_activity_received(self, event): + if event.is_self_message: + self.draw_account(event.account) + self._draw_pep(event.account, event.jid, PEPEventType.ACTIVITY) + def _on_nickname_received(self, event): self.draw_contact(event.jid, event.account) @@ -5582,7 +5592,7 @@ class RosterWindow: # activity_pixbuf, TUNE_ICON, LOCATION_ICON, avatar_img, # padlock_pixbuf, visible] self.columns = [str, str, str, str, str, - str, GdkPixbuf.Pixbuf, str, str, + str, str, str, str, Gtk.Image, str, bool] self.xml = get_builder('roster_window.ui') @@ -5682,8 +5692,7 @@ class RosterWindow: # cell_data_func, func_arg) self.renderers_list = [] self.renderers_propertys = {} - self._pep_type_to_model_column = { - 'activity': Column.ACTIVITY_PIXBUF, 'tune': Column.TUNE_ICON, + self._pep_type_to_model_column = {'tune': Column.TUNE_ICON, 'geoloc': Column.LOCATION_ICON} renderer_text = Gtk.CellRendererText() @@ -5710,7 +5719,7 @@ class RosterWindow: self._fill_pep_pixbuf_renderer, Column.MOOD_PIXBUF), ('activity', Gtk.CellRendererPixbuf(), False, - 'pixbuf', Column.ACTIVITY_PIXBUF, + 'icon_name', Column.ACTIVITY_PIXBUF, self._fill_pep_pixbuf_renderer, Column.ACTIVITY_PIXBUF), ('tune', Gtk.CellRendererPixbuf(), False, @@ -5836,6 +5845,8 @@ class RosterWindow: self._on_nickname_received) app.ged.register_event_handler('mood-received', ged.GUI1, self._on_mood_received) + app.ged.register_event_handler('activity-received', ged.GUI1, + self._on_activity_received) app.ged.register_event_handler('update-roster-avatar', ged.GUI1, self._nec_update_avatar) app.ged.register_event_handler('update-room-avatar', ged.GUI1,