From 013d63279d4cfce09dccfa6f6b2e00eba852c6dc Mon Sep 17 00:00:00 2001 From: Nikos Kouremenos Date: Tue, 19 Jul 2005 20:17:28 +0000 Subject: [PATCH] we now catch send paused and inactive or active depnding on mouse and keybaord activity --- src/chat.py | 5 +- src/tabbed_chat_window.py | 96 ++++++++++++++++++++++++++++----------- 2 files changed, 73 insertions(+), 28 deletions(-) diff --git a/src/chat.py b/src/chat.py index 15b5b91cd..06cf3dfb8 100644 --- a/src/chat.py +++ b/src/chat.py @@ -524,7 +524,10 @@ class Chat: self.plugin.systray.remove_jid(jid, self.account) def on_conversation_textview_motion_notify_event(self, widget, event): - """change the cursor to a hand when we are over a mail or an url""" + '''change the cursor to a hand when we are over a mail or an url''' + jid = self.get_active_jid() + if self.widget_name == 'tabbed_chat_window': + self.mouse_over_in_last_5_secs = True x, y, spam = widget.window.get_pointer() x, y = widget.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, x, y) tags = widget.get_iter_at_location(x, y).get_tags() diff --git a/src/tabbed_chat_window.py b/src/tabbed_chat_window.py index 4fd114813..ff9bac1f6 100644 --- a/src/tabbed_chat_window.py +++ b/src/tabbed_chat_window.py @@ -263,47 +263,85 @@ class TabbedChatWindow(chat.Chat): if len(self.xmls) > 0: del self.users[jid] - def new_user(self, user): + def new_user(self, contact): '''when new tab is created''' - self.names[user.jid] = user.name - self.xmls[user.jid] = gtk.glade.XML(GTKGUI_GLADE, 'chats_vbox', APP) - self.childs[user.jid] = self.xmls[user.jid].get_widget('chats_vbox') - self.users[user.jid] = user + self.names[contact.jid] = contact.name + self.xmls[contact.jid] = gtk.glade.XML(GTKGUI_GLADE, 'chats_vbox', APP) + self.childs[contact.jid] = self.xmls[contact.jid].get_widget('chats_vbox') + self.users[contact.jid] = contact - if user.jid in gajim.encrypted_chats[self.account]: - self.xmls[user.jid].get_widget('gpg_togglebutton').set_active(True) + if contact.jid in gajim.encrypted_chats[self.account]: + self.xmls[contact.jid].get_widget('gpg_togglebutton').set_active(True) xm = gtk.glade.XML(GTKGUI_GLADE, 'tabbed_chat_popup_menu', APP) xm.signal_autoconnect(self) self.tabbed_chat_popup_menu = xm.get_widget('tabbed_chat_popup_menu') - chat.Chat.new_tab(self, user.jid) - self.redraw_tab(user.jid) - self.draw_widgets(user) + chat.Chat.new_tab(self, contact.jid) + self.redraw_tab(contact.jid) + self.draw_widgets(contact) - uf_show = helpers.get_uf_show(user.show) - s = _('%s is %s') % (user.name, uf_show) - if user.status: - s += ' (' + user.status + ')' - self.print_conversation(s, user.jid, 'status') + uf_show = helpers.get_uf_show(contact.show) + s = _('%s is %s') % (contact.name, uf_show) + if contact.status: + s += ' (' + contact.status + ')' + self.print_conversation(s, contact.jid, 'status') #restore previous conversation - self.restore_conversation(user.jid) + self.restore_conversation(contact.jid) #print queued messages - if gajim.awaiting_messages[self.account].has_key(user.jid): - self.read_queue(user.jid) + if gajim.awaiting_messages[self.account].has_key(contact.jid): + self.read_queue(contact.jid) - gajim.connections[self.account].request_vcard(user.jid) - self.childs[user.jid].show_all() + gajim.connections[self.account].request_vcard(contact.jid) + self.childs[contact.jid].show_all() # chatstates - self.chatstates[user.jid] = None + self.kdb_activity_in_last_5_secs = False + self.mouse_over_in_last_5_secs = False + + self.chatstates[contact.jid] = None # our current chatstate with contact + gobject.timeout_add(5000, self.check_for_possible_paused_chatstate, + contact) + gobject.timeout_add(30000, self.check_for_possible_inactive_chatstate, + contact) + + def check_for_possible_paused_chatstate(self, contact): + ''' did we move mouse of that window or kbd activity in that window + if yes we go active if not already + if no we go paused if not already ''' + current_state = self.chatstates[contact.jid] + if self.mouse_over_in_last_5_secs or self.kdb_activity_in_last_5_secs: + if current_state != 'active': # if we were not active + self.send_chatstate('active') # send we became active + print 'active' + else: + if current_state != 'paused': # if we were not paused + self.send_chatstate('paused') # send we became paused + self.mouse_over_in_last_5_secs = False + self.kdb_activity_in_last_5_secs = False + print 'paused' + + def check_for_possible_inactive_chatstate(self, contact): + ''' did we move mouse of that window or kbd activity in that window + if yes we go active if not already + if no we go inactive if not already ''' + current_state = self.chatstates[contact.jid] + if self.mouse_over_in_last_5_secs or self.kdb_activity_in_last_5_secs: + if current_state != 'active': # if we were not active + self.send_chatstate('active') # send we became active + print 'active' + else: + if current_state != 'inactive': # if we were not inactive + self.send_chatstate('inactive') # send we became inactive + print 'INactive' def on_message_textview_key_press_event(self, widget, event): """When a key is pressed: if enter is pressed without the shift key, message (if not empty) is sent and printed in the conversation""" + self.kdb_activity_in_last_5_secs = True jid = self.get_active_jid() conversation_textview = self.xmls[jid].get_widget('conversation_textview') message_buffer = widget.get_buffer() @@ -389,7 +427,8 @@ class TabbedChatWindow(chat.Chat): return self.chatstates[jid] = state - gajim.connections[self.account].send_message(jid, None, None, chatstate = state) + gajim.connections[self.account].send_message(jid, None, None, + chatstate = state) def send_message(self, message): @@ -418,15 +457,18 @@ class TabbedChatWindow(chat.Chat): # chatstates - if no info about peer, discover if self.chatstates[jid] is None: - - gajim.connections[self.account].send_message(jid, message, keyID, chatstate = 'active') + gajim.connections[self.account].send_message(jid, message, keyID, + chatstate = 'active') self.chatstates[jid] = 'ask' + # if peer supports jep85, send 'active' elif self.chatstates[jid] != -1: - gajim.connections[self.account].send_message(jid, message, keyID, chatstate = 'active') - else: + #FIXME: only when we open the tab + gajim.connections[self.account].send_message(jid, message, keyID, + chatstate = 'active') + else: # just send the message gajim.connections[self.account].send_message(jid, message, keyID) - print self.chatstates[jid] + message_buffer.set_text('') self.print_conversation(message, jid, jid, encrypted = encrypted)