Author: asterix
Date: 2007-06-03 15:40:14 +0200 (Sun, 03 Jun 2007)
New Revision: 8200
Modified:
trunk/src/common/helpers.py
trunk/src/gajim.py
trunk/src/groupchat_control.py
trunk/src/roster_window.py
Log:
[roidelapluie] better groupchat support in roster and systray. Better nick support
Modified: trunk/src/common/helpers.py
===================================================================
--- trunk/src/common/helpers.py 2007-06-03 10:46:52 UTC (rev 8199)
+++ trunk/src/common/helpers.py 2007-06-03 13:40:14 UTC (rev 8200)
@@ -552,6 +552,11 @@
contact.jid in gajim.interface.minimized_controls[account] and gajim.interface.\
minimized_controls[account][contact.jid].get_nb_unread_pm() > 0:
return 'message'
+ if account and gajim.gc_connected[account].has_key(contact.jid):
+ if gajim.gc_connected[account][contact.jid]:
+ return 'muc_active'
+ else:
+ return 'muc_inactive'
if contact.jid.find('@') <= 0: # if not '@' or '@' starts the jid ==> agent
return contact.show
if contact.sub in ('both', 'to'):
Modified: trunk/src/gajim.py
===================================================================
--- trunk/src/gajim.py 2007-06-03 10:46:52 UTC (rev 8199)
+++ trunk/src/gajim.py 2007-06-03 13:40:14 UTC (rev 8200)
@@ -2127,6 +2127,14 @@
jid = gajim.get_jid_without_resource(fjid)
if type_ in ('printed_gc_msg', 'printed_marked_gc_msg', 'gc_msg'):
w = self.msg_win_mgr.get_window(jid, account)
+ if gajim.interface.minimized_controls.has_key(account) and \
+ gajim.interface.minimized_controls[account].has_key(fjid):
+ ctrl = gajim.interface.minimized_controls[account][fjid]
+ if not w:
+ w = gajim.interface.msg_win_mgr.create_window(ctrl.contact, \
+ ctrl.account, ctrl.type_id)
+ ctrl.parent_win = w
+ w.new_tab(ctrl)
elif type_ in ('printed_chat', 'chat', ''):
# '' is for log in/out notifications
if self.msg_win_mgr.has_window(fjid, account):
Modified: trunk/src/groupchat_control.py
===================================================================
--- trunk/src/groupchat_control.py 2007-06-03 10:46:52 UTC (rev 8199)
+++ trunk/src/groupchat_control.py 2007-06-03 13:40:14 UTC (rev 8200)
@@ -697,7 +697,7 @@
if self.needs_visual_notification(text):
highlight = True
if gajim.config.get_per('soundevents', 'muc_message_highlight',
- 'enabled'):
+ 'enabled'):
sound = 'highlight'
# Is it a history message? Don't want sound-floods when we join.
@@ -891,8 +891,7 @@
'reason': reason }
self.print_conversation(s, 'info', tim = tim)
elif statusCode == '303': # Someone changed his or her nick
- if nick == self.nick: # We changed our nick
- self.nick = new_nick
+ if new_nick == self.nick: # We changed our nick
s = _('You are now known as %s') % new_nick
else:
s = _('%s is now known as %s') % (nick, new_nick)
@@ -902,6 +901,8 @@
# after that, but that doesn't hurt
self.add_contact_to_roster(new_nick, show, role, affiliation,
status, jid)
+ if nick in self.attention_list:
+ self.attention_list.remove(nick)
# keep nickname color
if nick in self.gc_custom_colors:
self.gc_custom_colors[new_nick] = self.gc_custom_colors[nick]
@@ -1011,6 +1012,9 @@
# delete ressource
simple_jid = gajim.get_jid_without_resource(jid)
nick_jid += ' (%s)' % simple_jid
+ if show == 'offline':
+ if nick in self.attention_list:
+ self.attention_list.remove(nick)
if show == 'offline' and print_status in ('all', 'in_and_out') and \
statusCode != '307':
st = _('%s has left') % nick_jid
@@ -1127,6 +1131,7 @@
nick = message_array[0]
nick = helpers.parse_resource(nick)
gajim.connections[self.account].join_gc(nick, self.room_jid, None)
+ self.nick = nick
self.clear(self.msg_textview)
else:
self.get_command_help(command)
@@ -1408,6 +1413,7 @@
nick = instance.input_entry.get_text().decode('utf-8')
nick = helpers.parse_resource(nick)
gajim.connections[self.account].join_gc(nick, self.room_jid, None)
+ self.nick = nick
instance = dialogs.InputDialog(title, prompt, proposed_nick,
is_modal = False, ok_handler = on_ok)
Modified: trunk/src/roster_window.py
===================================================================
--- trunk/src/roster_window.py 2007-06-03 10:46:52 UTC (rev 8199)
+++ trunk/src/roster_window.py 2007-06-03 13:40:14 UTC (rev 8200)
@@ -370,7 +370,7 @@
typestr = 'contact'
if group == _('Transports'):
typestr = 'agent'
- if group == _('Groupchats'):
+ if gajim.gc_connected[account].has_key(jid):
typestr = 'groupchat'
name = contact.get_shown_name()
@@ -426,12 +426,18 @@
contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
if contact == None:
contact = gajim.contacts.create_contact(jid = jid, name = jid,
- groups = [_('Groupchats')], show = 'muc_active',
+ groups = [_('Groupchats')], show = 'online',
status = status, sub = 'none',
resource = resource)
gajim.contacts.add_contact(account, contact)
self.add_contact_to_roster(jid, account)
- self.draw_group(_('Groupchats'), account)
+ self.draw_group(_('Groupchats'), account)
+ else:
+ contact.show = 'online'
+ self.draw_contact(jid, account)
+ self.add_contact_to_roster(jid, account)
+ for group in contact.groups:
+ self.draw_group(group, account)
return contact
def get_self_contact_iter(self, account):
@@ -645,22 +651,28 @@
status = helpers.reduce_chars_newlines(status, max_lines = 1)
# escape markup entities and make them small italic and fg color
color = gtkgui_helpers._get_fade_color(self.tree, selected, focus)
- colorstring = "#%04x%04x%04x" % (color.red, color.green, color.blue)
+ colorstring = '#%04x%04x%04x' % (color.red, color.green, color.blue)
name += \
'\n<span size="small" style="italic" foreground="%s">%s</span>' \
% (colorstring, gobject.markup_escape_text(status))
iter = iters[0] # choose the icon with the first iter
+
+ if gajim.gc_connected[account].has_key(jid):
+ contact.show = 'online'
+ model[iter][C_TYPE] = 'groupchat'
+
icon_name = helpers.get_icon_name_to_show(contact, account)
# look if another resource has awaiting events
for c in contact_instances:
c_icon_name = helpers.get_icon_name_to_show(c, account)
- if c_icon_name == 'message':
+ if c_icon_name in ('message', 'muc_active', 'muc_inactive'):
icon_name = c_icon_name
break
path = model.get_path(iter)
if model.iter_has_child(iter):
- if not self.tree.row_expanded(path) and icon_name != 'message':
+ if not self.tree.row_expanded(path) and \
+ icon_name not in ('message', 'muc_active', 'muc_inactive'):
child_iter = model.iter_children(iter)
if icon_name in ('error', 'offline'):
# get the icon from the first child as they are sorted by show
@@ -691,13 +703,6 @@
self.draw_parent_contact(jid, account)
state_images = self.get_appropriate_state_images(jid,
icon_name = icon_name)
-
- if icon_name != 'message' and gajim.gc_connected[account].\
- has_key(jid):
- if gajim.gc_connected[account][jid]:
- icon_name = 'muc_active'
- else:
- icon_name = 'muc_inactive'
img = state_images[icon_name]
@@ -754,18 +759,20 @@
if minimize:
contact = gajim.contacts.create_contact(jid = room_jid, name = nick)
gc_control = GroupchatControl(None, contact, account)
-
if not gajim.interface.minimized_controls.has_key(account):
gajim.interface.minimized_controls[account] = {}
gajim.interface.minimized_controls[account][room_jid] = gc_control
-
- self.add_groupchat_to_roster(account, room_jid)
gajim.connections[account].join_gc(nick, room_jid, password)
if password:
gajim.gc_passwords[room_jid] = password
+ self.add_groupchat_to_roster(account, room_jid)
return
if not gajim.interface.msg_win_mgr.has_window(room_jid, account):
self.new_room(room_jid, nick, account)
+ contact = gajim.contacts.get_contact_with_highest_priority(account, \
+ room_jid)
+ if contact:
+ self.add_groupchat_to_roster(account, room_jid)
gc_win = gajim.interface.msg_win_mgr.get_window(room_jid, account)
gc_win.set_active_tab(room_jid, account)
gc_win.window.present()
@@ -2403,14 +2410,17 @@
menu = gtk.Menu()
- maximize_menuitem = gtk.ImageMenuItem(_('_Maximize'))
- icon = gtk.image_new_from_stock(gtk.STOCK_GOTO_TOP, gtk.ICON_SIZE_MENU)
- maximize_menuitem.set_image(icon)
- maximize_menuitem.connect('activate', self.on_groupchat_maximized, \
- jid, account)
+ if gajim.interface.minimized_controls.has_key(account) and \
+ jid in gajim.interface.minimized_controls[account]:
+ maximize_menuitem = gtk.ImageMenuItem(_('_Maximize'))
+ icon = gtk.image_new_from_stock(gtk.STOCK_GOTO_TOP, gtk.ICON_SIZE_MENU)
+ maximize_menuitem.set_image(icon)
+ maximize_menuitem.connect('activate', self.on_groupchat_maximized, \
+ jid, account)
+ menu.append(maximize_menuitem)
- menu.append(maximize_menuitem)
-
+
+
event_button = gtkgui_helpers.get_possible_button_event(event)
menu.attach_to_widget(self.tree, None)
@@ -2437,9 +2447,10 @@
mw.window.present()
contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
- self.remove_contact(contact, account)
- gajim.contacts.remove_contact(account, contact)
- self.draw_group(_('Groupchats'), account)
+ if contact.groups == [_('Groupchats')]:
+ self.remove_contact(contact, account)
+ gajim.contacts.remove_contact(account, contact)
+ self.draw_group(_('Groupchats'), account)
del gajim.interface.minimized_controls[account][jid]
def make_group_menu(self, event, iter):
@@ -4374,6 +4385,10 @@
return 1
if name2 == _('Not in Roster'):
return -1
+ if name1 == _('Groupchats'):
+ return 1
+ if name2 == _('Groupchats'):
+ return -1
account1 = model[iter1][C_ACCOUNT]
account2 = model[iter2][C_ACCOUNT]
if not account1 or not account2: