pm bugfix

This commit is contained in:
Brendan Taylor 2008-05-04 00:24:27 +00:00
parent be0af1a56b
commit 1962b231e6
5 changed files with 48 additions and 42 deletions

View File

@ -1586,7 +1586,7 @@ class ChatControl(ChatControlBase):
elif num_unread > 1:
unread = '[' + unicode(num_unread) + ']'
# Draw tab label using chatstate
# Draw tab label using chatstate
theme = gajim.config.get('roster_theme')
color = None
if not chatstate:
@ -1846,6 +1846,7 @@ class ChatControl(ChatControlBase):
self.contact.chatstate = None
self.contact.our_chatstate = None
# terminate session
self.session.control = None
# Disconnect timer callbacks
@ -2077,12 +2078,11 @@ class ChatControl(ChatControlBase):
# reset to status image in gc if it is a pm
# Is it a pm ?
room_jid, nick = gajim.get_room_and_nick_from_fjid(jid)
# XXX fixme somehow
# control = gajim.interface.msg_win_mgr.get_control(room_jid, self.account)
# if control and control.type_id == message_control.TYPE_GC:
# control.update_ui()
# control.parent_win.show_title()
# typ = 'pm'
control = gajim.interface.msg_win_mgr.get_gc_control(room_jid, self.account)
if control and control.type_id == message_control.TYPE_GC:
control.update_ui()
control.parent_win.show_title()
typ = 'pm'
self.redraw_after_event_removed(jid)
if (self.contact.show in ('offline', 'error')):
@ -2093,8 +2093,8 @@ class ChatControl(ChatControlBase):
len(gajim.contacts.get_contacts(self.account, jid)) < 2):
gajim.interface.roster.really_remove_contact(self.contact,
self.account)
# elif typ == 'pm':
# control.remove_contact(nick)
elif typ == 'pm':
control.remove_contact(nick)
def show_bigger_avatar(self, small_avatar):
'''resizes the avatar, if needed, so it has at max half the screen size
@ -2140,18 +2140,18 @@ class ChatControl(ChatControlBase):
window.set_app_paintable(True)
if gtk.gtk_version >= (2, 10, 0) and gtk.pygtk_version >= (2, 10, 0):
window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_TOOLTIP)
window.realize()
window.window.set_back_pixmap(pixmap, False) # make it transparent
window.window.shape_combine_mask(mask, 0, 0)
# make the bigger avatar window show up centered
# make the bigger avatar window show up centered
x0, y0 = small_avatar.window.get_origin()
x0 += small_avatar.allocation.x
y0 += small_avatar.allocation.y
center_x= x0 + (small_avatar.allocation.width / 2)
center_y = y0 + (small_avatar.allocation.height / 2)
pos_x, pos_y = center_x - (avatar_w / 2), center_y - (avatar_h / 2)
pos_x, pos_y = center_x - (avatar_w / 2), center_y - (avatar_h / 2)
window.move(pos_x, pos_y)
# make the cursor invisible so we can see the image
invisible_cursor = gtkgui_helpers.get_invisible_cursor()

View File

@ -1924,6 +1924,7 @@ class Interface:
if ctrl:
new_sess = gajim.connections[account].make_new_session(str(jid))
ctrl.set_session(new_sess)
gajim.connections[account].delete_session(str(jid), session.thread_id)
if was_encrypted:
ctrl.print_esession_details()

View File

@ -604,7 +604,7 @@ class GroupchatControl(ChatControlBase):
no_queue = len(gajim.events.get_events(self.account, fjid)) == 0
# We print if window is opened
pm_control = gajim.interface.msg_win_mgr.get_control(fjid, self.account, session)
pm_control = session.control
if pm_control:
pm_control.print_conversation(msg, tim = tim, xhtml = xhtml)
@ -632,7 +632,7 @@ class GroupchatControl(ChatControlBase):
self.parent_win.show_title()
self.parent_win.redraw_tab(self)
else:
self._start_private_message(nick, session)
self._start_private_message(nick)
# Scroll to line
self.list_treeview.expand_row(path[0:1], False)
self.list_treeview.scroll_to_cell(path)
@ -891,10 +891,9 @@ class GroupchatControl(ChatControlBase):
nick = model[iter][C_NICK].decode('utf-8')
fjid = gajim.construct_fjid(self.room_jid, nick) # 'fake' jid
self._start_private_message(nick)
ctrl = self._start_private_message(nick)
if msg:
gajim.interface.msg_win_mgr.get_control(fjid, self.account).\
send_message(msg)
ctrl.send_message(msg)
def on_send_file(self, widget, gc_contact):
'''sends a file to a contact in the room'''
@ -2041,6 +2040,8 @@ class GroupchatControl(ChatControlBase):
win.set_active_tab(ctrl)
win.window.present()
return ctrl
def on_row_activated(self, widget, path):
'''When an iter is activated (dubblick or single click if gnome is set
this way'''
@ -2099,7 +2100,7 @@ class GroupchatControl(ChatControlBase):
return
if gajim.single_click and not event.state & gtk.gdk.SHIFT_MASK:
self.on_row_activated(widget, path)
self.on_row_activated(widget, path)
return True
else:
model = widget.get_model()

View File

@ -117,25 +117,24 @@ class MessageControl:
return len(gajim.events.get_events(self.account, self.contact.jid))
def set_session(self, session):
if hasattr(self, 'session') and session == self.session:
oldsession = None
if hasattr(self, 'session'):
oldsession = self.session
if oldsession and session == oldsession:
return
was_encrypted = False
if hasattr(self, 'session') and self.session:
if self.session.enable_encryption:
was_encrypted = True
gajim.connections[self.account].delete_session(self.session.jid,
self.session.thread_id)
self.session = session
if session:
session.control = self
if was_encrypted:
self.print_esession_details()
if oldsession:
self.parent_win.change_thread_key(self.contact.jid,
self.account, oldsession.thread_id, session.thread_id)
if oldsession.enable_encryption:
self.print_esession_details()
def send_message(self, message, keyID = '', type = 'chat',
chatstate = None, msg_id = None, composing_xep = None, resource = None,
@ -144,13 +143,6 @@ class MessageControl:
'''
jid = self.contact.jid
if not self.session:
print('uhoh new session')
fjid = self.contact.get_full_jid()
new_session = gajim.connections[self.account].make_new_session(fjid)
self.set_session(new_session)
# Send and update history
return gajim.connections[self.account].send_message(jid, message, keyID,
type = type, chatstate = chatstate, msg_id = msg_id,

View File

@ -429,6 +429,7 @@ class MessageWindow(object):
fjid = ctrl.get_full_jid()
thread_id = ctrl.session.thread_id
del self._controls[ctrl.account][fjid][thread_id]
if len(self._controls[ctrl.account][fjid]) == 0:
@ -567,19 +568,30 @@ class MessageWindow(object):
return []
def change_key(self, old_jid, new_jid, acct):
'''Change the key of a control'''
'''Change the JID key of a control'''
try:
# Check if control exists
ctrl = self._controls[acct][old_jid]
except:
# Check if controls exists
ctrls = self._controls[acct][old_jid]
except KeyError:
return
self._controls[acct][new_jid] = self._controls[acct][old_jid]
self._controls[acct][new_jid] = ctrls
del self._controls[acct][old_jid]
if old_jid in gajim.last_message_time[acct]:
gajim.last_message_time[acct][new_jid] = \
gajim.last_message_time[acct][old_jid]
del gajim.last_message_time[acct][old_jid]
def change_thread_key(self, jid, acct, old_thread_id, new_thread_id):
'''Change the thread_id key of a control'''
try:
# Check if control exists
ctrl = self._controls[acct][jid][old_thread_id]
except KeyError:
return
self._controls[acct][jid][new_thread_id] = ctrl
del self._controls[acct][jid][old_thread_id]
def controls(self):
for jid_dict in self._controls.values():
for ctrl_dict in jid_dict.values():