Ticket #1041: gajim-message-mode.5.patch
| File gajim-message-mode.5.patch, 80.6 kB (added by David Danier <goliath.mailinglist@…>, 12 months ago) |
|---|
-
src/config.py
==== Patch <gajim-message-mode> level 11 Source: c68c8ed0-6fce-42b2-a3b7-6be8b34235d4:/local:7692 [local] Target: c4d4e39b-2f5f-9a77-1c94-36969bb79148:/trunk:9014 [mirrored] (svn://svn.gajim.org/gajim/trunk) Log: r7653@damasonium: ddanier | 2007-11-14 21:10:55 +0100 r7654@damasonium: ddanier | 2007-11-15 00:32:14 +0100 * Implemented very simple message-mode like psi: - Configuration option for default-type of new messages when clicking on an roster item - SingleMessageWindow: - Added "Next" and "Quote" button - "Next"-button to read next message waiting - "Next"-button show how many messages are waiting (by subscribing to gajim.events) - "Reply"-button does not quote, "Quote"-button does - Focus on Text by default - "RE: " only added to subject if subject is not empty - "Reply"/"Quote" does not close received message window, the parent is closed when reply window is closed and only if there are no more messages waiting r7655@damasonium: ddanier | 2007-11-15 00:33:26 +0100 * TODO for message-mode r7658@damasonium: ddanier | 2007-11-15 18:24:49 +0100 * SingleMessageWindow: - Action-menu - Username is displayed - GPG-Support, but untested * typo in src/chat_control.py r7662@damasonium: ddanier | 2007-11-15 20:33:24 +0100 * Bugfix: new chat messages are accessible * SingleMessageWindow: - RosterIcons are displayed - GPG-Button works at least for outgoing messages :) - Activated encryption is saved to config, like in normal chat window * "send_outgoing_messages" renamed to "default_message_type" (see http://trac.gajim.org/ticket/1041#comment:9) r7665@damasonium: ddanier | 2007-11-15 20:42:58 +0100 * Keep "encrypted" on Reply * Use "gpg_enabled" from config r7666@damasonium: ddanier | 2007-11-15 20:47:52 +0100 * Better place for getting "gpg_enabled" out of config * GPG-Button gets no longer disabled when dealing with incoming messages (so status is visible, toggling the button doesn't hurt) r7667@damasonium: ddanier | 2007-11-15 20:55:50 +0100 * Bugfix: Fetching contact-information with self.get_contact() to early is bad * GPG-Button only active if contact has keyID attached r7668@damasonium: ddanier | 2007-11-15 21:30:46 +0100 * Deactivate GPG-Button if action=="receive" and not contact.keyID is set r7669@damasonium: ddanier | 2007-11-15 23:27:24 +0100 * Add resource to self.to_entry r7692@damasonium: ddanier | 2007-11-19 16:52:03 +0100 * Bugfix with encrypted-parameter for SingleMessageWindow === src/config.py ==================================================================71 71 self.notebook = self.xml.get_widget('preferences_notebook') 72 72 self.treat_incoming_messages_combobox =\ 73 73 self.xml.get_widget('treat_incoming_messages_combobox') 74 self.default_message_type_combobox =\ 75 self.xml.get_widget('default_message_type_combobox') 74 76 self.one_window_type_combobox =\ 75 77 self.xml.get_widget('one_window_type_combobox') 76 78 self.iconset_combobox = self.xml.get_widget('iconset_combobox') … … 140 142 else: 141 143 self.treat_incoming_messages_combobox.set_active(0) 142 144 145 # Set default for send outgoing messages 146 choices = common.config.opt_default_message_type 147 type = gajim.config.get('default_message_type') 148 if type in choices: 149 self.default_message_type_combobox.set_active(choices.index(type)) 150 else: 151 self.default_message_type_combobox.set_active(0) 152 143 153 # Set default for single window type 144 154 choices = common.config.opt_one_window_types 145 155 type = gajim.config.get('one_message_window') … … 581 591 config_type = common.config.opt_treat_incoming_messages[active] 582 592 gajim.config.set('treat_incoming_messages', config_type) 583 593 594 def on_default_message_type_combobox_changed(self, widget): 595 active = widget.get_active() 596 config_type = common.config.opt_default_message_type[active] 597 gajim.config.set('default_message_type', config_type) 598 584 599 def on_one_window_type_combo_changed(self, widget): 585 600 active = widget.get_active() 586 601 config_type = common.config.opt_one_window_types[active] -
src/roster_window.py
=== src/roster_window.py ==================================================================
1970 1970 self.draw_account(account) 1971 1971 1972 1972 def on_send_single_message_menuitem_activate(self, widget, account, 1973 contact =None):1973 contact=None, resource=None): 1974 1974 if contact is None: 1975 1975 dialogs.SingleMessageWindow(account, action = 'send') 1976 1976 elif type(contact) == type([]): 1977 1977 dialogs.SingleMessageWindow(account, contact, 'send') 1978 1978 else: 1979 1979 jid = contact.jid 1980 if contact.jid == gajim.get_jid_from_account(account): 1980 if resource: 1981 jid += '/' + resource 1982 elif contact.jid == gajim.get_jid_from_account(account): 1981 1983 jid += '/' + contact.resource 1982 1984 dialogs.SingleMessageWindow(account, jid, 'send') 1983 1985 … … 4370 4372 else: 4371 4373 child_iter = model.iter_next(child_iter) 4372 4374 session = None 4375 chat_messages_waiting = False 4373 4376 if first_ev: 4374 4377 if first_ev.type_ in ('chat', 'normal'): 4375 4378 session = first_ev.parameters[8] … … 4378 4381 fjid += '/' + resource 4379 4382 if self.open_event(account, fjid, first_ev): 4380 4383 return 4384 elif first_ev.type_ == 'chat': 4385 chat_messages_waiting = True 4381 4386 c = gajim.contacts.get_contact(account, jid, resource) 4382 4387 if not c or isinstance(c, list): 4383 4388 c = gajim.contacts.get_contact_with_highest_priority(account, jid) 4384 4389 if jid == gajim.get_jid_from_account(account): 4385 4390 resource = c.resource 4386 self.on_open_chat_window(widget, c, account, resource = resource, session = session) 4391 default_message_type = gajim.config.get('default_message_type') 4392 if default_message_type == 'normal' and not chat_messages_waiting: 4393 self.on_send_single_message_menuitem_activate(widget, account, c, resource = resource) 4394 else: 4395 self.on_open_chat_window(widget, c, account, resource = resource, session = session) 4387 4396 4388 4397 def on_roster_treeview_row_activated(self, widget, path, col = 0): 4389 4398 '''When an iter is double clicked: open the first event window''' -
src/dialogs.py
=== src/dialogs.py ==================================================================
1832 1832 # Keep a reference on windows so garbage collector don't restroy them 1833 1833 instances = [] 1834 1834 def __init__(self, account, to='', action='', from_whom='', subject='', 1835 message='', resource='', session=None, form_node=None ):1835 message='', resource='', session=None, form_node=None, encrypted=None): 1836 1836 self.instances.append(self) 1837 1837 self.account = account 1838 1838 self.action = action … … 1844 1844 self.resource = resource 1845 1845 self.session = session 1846 1846 1847 if encrypted is None: 1848 jid = to # cannot use self.get_contact(), as self.to_entry does not exist yet 1849 contact = None 1850 if '@' in jid: 1851 if '/' in jid: 1852 jid, resource = jid.split('/', 1) 1853 else: 1854 resource = self.resource 1855 contact = gajim.contacts.get_contact(self.account, jid, resource) 1856 if contact: # only load if we have a valid contact 1857 encrypted = gajim.config.get_per('contacts', contact.jid, 'gpg_enabled') 1858 if encrypted is None: 1859 encrypted = False 1860 self.encrypted = encrypted 1861 self.next_count = 0 1862 1847 1863 self.xml = gtkgui_helpers.get_glade('single_message_window.glade') 1848 1864 self.window = self.xml.get_widget('single_message_window') 1849 1865 self.count_chars_label = self.xml.get_widget('count_chars_label') 1850 1866 self.from_label = self.xml.get_widget('from_label') 1851 1867 self.from_entry = self.xml.get_widget('from_entry') 1868 self.from_status_image = self.xml.get_widget('from_status_image') 1869 self.from_name = self.xml.get_widget('from_name') 1852 1870 self.to_label = self.xml.get_widget('to_label') 1853 1871 self.to_entry = self.xml.get_widget('to_entry') 1872 self.to_status_image = self.xml.get_widget('to_status_image') 1873 self.to_name = self.xml.get_widget('to_name') 1854 1874 self.subject_entry = self.xml.get_widget('subject_entry') 1855 1875 self.message_scrolledwindow = self.xml.get_widget( 1856 1876 'message_scrolledwindow') … … 1876 1896 parent_box.child_get_property(self.xml.get_widget('conversation_scrolledwindow'), 'position')) 1877 1897 self.action = 'form' 1878 1898 1899 self.gpg_togglebutton = self.xml.get_widget('gpg_togglebutton') 1900 self.gpg_togglebutton_separator = self.xml.get_widget('gpg_togglebutton_separator') 1879 1901 self.send_button = self.xml.get_widget('send_button') 1902 self.quote_button = self.xml.get_widget('quote_button') 1880 1903 self.reply_button = self.xml.get_widget('reply_button') 1904 self.next_button = self.xml.get_widget('next_button') 1905 self.next_count_label = self.xml.get_widget('next_count_label') 1881 1906 self.send_and_close_button = self.xml.get_widget('send_and_close_button') 1882 1907 self.cancel_button = self.xml.get_widget('cancel_button') 1883 1908 self.close_button = self.xml.get_widget('close_button') … … 1887 1912 self.to_entry.set_text(jid) 1888 1913 self.to_entry.set_sensitive(False) 1889 1914 else: 1890 self.to_entry.set_text(to) 1915 if resource and not '/' in to: 1916 self.to_entry.set_text(to + '/' + resource) 1917 else: 1918 self.to_entry.set_text(to) 1891 1919 1892 1920 if gajim.config.get('use_speller') and HAS_GTK_SPELL and action == 'send': 1893 1921 try: … … 1902 1930 1903 1931 self.prepare_widgets_for(self.action) 1904 1932 1933 gajim.events.event_added_subscribe(self.on_event_added) 1934 gajim.events.event_removed_subscribe(self.on_event_removed) 1935 if self.action == 'receive': 1936 self.update_next_count() 1937 1905 1938 # set_text(None) raises TypeError exception 1906 1939 if self.subject is None: 1907 1940 self.subject = '' … … 1924 1957 1925 1958 if gajim.config.get('saveposition'): 1926 1959 # get window position and size from config 1927 gtkgui_helpers.move_window(self.window, 1928 gajim.config.get('single-msg-x-position'), 1929 gajim.config.get('single-msg-y-position')) 1960 # Makes absolutely no sense when dealing with multiple windows 1961 # (for example when hitting "reply" the orig window stays) 1962 #gtkgui_helpers.move_window(self.window, 1963 # gajim.config.get('single-msg-x-position'), 1964 # gajim.config.get('single-msg-y-position')) 1930 1965 gtkgui_helpers.resize_window(self.window, 1931 1966 gajim.config.get('single-msg-width'), 1932 1967 gajim.config.get('single-msg-height')) … … 1968 2003 self.send_and_close_button.show() 1969 2004 self.to_label.show() 1970 2005 self.to_entry.show() 2006 self.to_status_image.show() 2007 self.to_name.show() 1971 2008 self.reply_button.hide() 2009 self.quote_button.hide() 2010 self.next_button.hide() 1972 2011 self.from_label.hide() 1973 2012 self.from_entry.hide() 2013 self.from_status_image.hide() 2014 self.from_name.hide() 1974 2015 self.conversation_scrolledwindow.hide() 1975 2016 self.message_scrolledwindow.show() 2017 self.gpg_togglebutton.show() 2018 if type(self.to) == type([]): 2019 self.gpg_togglebutton.set_property('sensitive', False) 2020 self.gpg_togglebutton.set_active(False) 2021 else: 2022 self.gpg_togglebutton.set_property('sensitive', True) 2023 self.gpg_togglebutton.set_active(self.encrypted) 2024 self.gpg_togglebutton_separator.show() 1976 2025 1977 2026 if self.message: # we come from a reply? 1978 2027 self.message_textview.grab_focus() … … 1983 2032 else: # we write a new message (not from reply) 1984 2033 self.close_button.hide() 1985 2034 if self.to: # do we already have jid? 1986 self.subject_entry.grab_focus() 2035 # Most of the time users skip the subject 2036 #self.subject_entry.grab_focus() 2037 self.message_textview.grab_focus() 2038 else: 2039 self.to_entry.grab_focus() 2040 self.update_to_information() 1987 2041 1988 2042 elif action == 'receive': # prepare UI for Receiving 1989 2043 title = _('Received %s') % title 1990 2044 self.reply_button.show() 2045 self.quote_button.show() 2046 self.next_button.show() 1991 2047 self.from_label.show() 1992 2048 self.from_entry.show() 2049 self.from_status_image.show() 2050 self.from_name.show() 1993 2051 self.send_button.hide() 1994 2052 self.send_and_close_button.hide() 1995 2053 self.to_label.hide() 1996 2054 self.to_entry.hide() 2055 self.to_status_image.hide() 2056 self.to_name.hide() 1997 2057 self.conversation_scrolledwindow.show() 1998 2058 self.message_scrolledwindow.hide() 2059 self.gpg_togglebutton.show() 2060 self.gpg_togglebutton.set_active(self.encrypted) 2061 self.gpg_togglebutton_separator.show() 1999 2062 2000 2063 if self.message: 2001 2064 self.conversation_textview.print_real_text(self.message) … … 2008 2071 self.reply_button.grab_focus() 2009 2072 self.cancel_button.hide() 2010 2073 self.close_button.show() 2074 self.update_from_information() 2075 2011 2076 elif action == 'form': # prepare UI for Receiving 2012 2077 title = _('Form %s') % title 2013 2078 self.send_button.show() 2014 2079 self.send_and_close_button.show() 2015 2080 self.to_label.show() 2016 2081 self.to_entry.show() 2082 self.to_status_image.show() 2083 self.to_name.show() 2017 2084 self.reply_button.hide() 2018 2085 self.from_label.hide() 2019 2086 self.from_entry.hide() 2087 self.from_status_image.hide() 2088 self.from_name.hide() 2020 2089 self.conversation_scrolledwindow.hide() 2021 2090 self.message_scrolledwindow.hide() 2091 self.gpg_togglebutton.hide() 2092 self.gpg_togglebutton_separator.hide() 2093 self.update_to_information() 2022 2094 2023 2095 self.window.set_title(title) 2024 2096 2097 def on_to_entry_changed(self, widget): 2098 self.update_to_information() 2099 2100 def update_to_information(self): 2101 jid, resource, contact = self.get_jid_resource_and_contact() 2102 if contact: 2103 if contact.keyID: 2104 self.gpg_togglebutton.set_property('sensitive', True) 2105 else: 2106 self.gpg_togglebutton.set_property('sensitive', False) 2107 self.to_status_image.show() 2108 roster = gajim.interface.roster 2109 show = contact.show 2110 img = roster.get_appropriate_state_images(jid, icon_name=show) 2111 status_image = img[show] 2112 if status_image.get_storage_type() == gtk.IMAGE_ANIMATION: 2113 self.to_status_image.set_from_animation(status_image.get_animation()) 2114 else: 2115 pix = status_image.get_pixbuf() 2116 if pix is not None: 2117 self.to_status_image.set_from_pixbuf(pix) 2118 self.to_name.show() 2119 self.to_name.set_text(contact.get_shown_name()) 2120 else: 2121 self.to_status_image.hide() 2122 self.to_name.hide() 2123 2124 def update_from_information(self): 2125 jid = self.from_whom 2126 contact = None 2127 if '@' in jid: 2128 if '/' in jid: 2129 jid, resource = jid.split('/', 1) 2130 else: 2131 resource = self.resource 2132 contact = gajim.contacts.get_contact(self.account, jid, resource) 2133 if contact: 2134 if contact.keyID: 2135 self.gpg_togglebutton.set_property('sensitive', True) 2136 else: 2137 self.gpg_togglebutton.set_property('sensitive', False) 2138 self.from_status_image.show() 2139 roster = gajim.interface.roster 2140 show = contact.show 2141 img = roster.get_appropriate_state_images(jid, icon_name=show) 2142 status_image = img[show] 2143 if status_image.get_storage_type() == gtk.IMAGE_ANIMATION: 2144 self.from_status_image.set_from_animation(status_image.get_animation()) 2145 else: 2146 pix = status_image.get_pixbuf() 2147 if pix is not None: 2148 self.from_status_image.set_from_pixbuf(pix) 2149 self.from_name.show() 2150 self.from_name.set_text(contact.get_shown_name()) 2151 else: 2152 self.from_status_image.hide() 2153 self.from_name.hide() 2154 2155 def on_actions_button_clicked(self, widget): 2156 '''popup action menu''' 2157 menu = self.prepare_context_menu() 2158 menu.show_all() 2159 gtkgui_helpers.popup_emoticons_under_button(menu, widget, self.window.window) 2160 2161 def get_jid_and_resource(self): 2162 if self.action == 'receive': 2163 jid = self.from_whom 2164 elif self.action == 'send': 2165 jid = self.to_entry.get_text() 2166 else: 2167 jid = self.to 2168 if '/' in jid: 2169 jid, resource = jid.split('/', 1) 2170 else: 2171 resource = self.resource 2172 return jid, resource 2173 2174 def get_contact(self): 2175 jid, resource = self.get_jid_and_resource() 2176 if '@' in jid: 2177 return gajim.contacts.get_contact(self.account, jid, self.resource) 2178 else: 2179 return None 2180 2181 def get_jid_resource_and_contact(self): 2182 jid, resource = self.get_jid_and_resource() 2183 if '@' in jid: 2184 return jid, resource, gajim.contacts.get_contact(self.account, jid, self.resource) 2185 else: 2186 return jid, resource, None 2187 2188 def prepare_context_menu(self): 2189 '''sets compact view menuitem active state 2190 sets active and sensitivity state for toggle_gpg_menuitem 2191 sets sensitivity for history_menuitem (False for transports) 2192 and file_transfer_menuitem 2193 and hide()/show() for add_to_roster_menuitem 2194 ''' 2195 xml = gtkgui_helpers.get_glade('chat_control_popup_menu.glade') 2196 menu = xml.get_widget('chat_control_popup_menu') 2197 2198 history_menuitem = xml.get_widget('history_menuitem') 2199 toggle_gpg_menuitem = xml.get_widget('toggle_gpg_menuitem') 2200 toggle_e2e_menuitem = xml.get_widget('toggle_e2e_menuitem') 2201 add_to_roster_menuitem = xml.get_widget('add_to_roster_menuitem') 2202 send_file_menuitem = xml.get_widget('send_file_menuitem') 2203 information_menuitem = xml.get_widget('information_menuitem') 2204 convert_to_gc_menuitem = xml.get_widget('convert_to_groupchat') 2205 muc_icon = gajim.interface.roster.load_icon('muc_active') 2206 if muc_icon: 2207 convert_to_gc_menuitem.set_image(muc_icon) 2208 2209 jid, resource, contact = self.get_jid_resource_and_contact() 2210 2211 # check if gpg capabitlies or else make gpg toggle insensitive 2212 gpg_btn = self.gpg_togglebutton 2213 isactive = gpg_btn.get_active() 2214 is_sensitive = gpg_btn.get_property('sensitive') 2215 toggle_gpg_menuitem.set_active(isactive) 2216 toggle_gpg_menuitem.set_property('sensitive', is_sensitive) 2217 2218 # TODO: support this, if possible 2219 toggle_e2e_menuitem.set_sensitive(False) 2220 2221 # If we don't have resource, we can't do file transfer 2222 # in transports, contact holds our info we need to disable it too 2223 if jid and resource: 2224 send_file_menuitem.set_sensitive(True) 2225 elif contact and contact.resource and contact.jid.find('@') != -1: 2226 send_file_menuitem.set_sensitive(True) 2227 else: 2228 send_file_menuitem.set_sensitive(False) 2229 2230 # check if it's possible to convert to groupchat 2231 if gajim.get_transport_name_from_jid(jid) or \ 2232 gajim.connections[self.account].is_zeroconf: 2233 convert_to_gc_menuitem.set_sensitive(False) 2234 2235 # add_to_roster_menuitem 2236 if contact and _('Not in Roster') in contact.groups: 2237 add_to_roster_menuitem.show() 2238 add_to_roster_menuitem.set_no_show_all(False) 2239 else: 2240 add_to_roster_menuitem.hide() 2241 add_to_roster_menuitem.set_no_show_all(True) 2242 2243 # connect signals 2244 history_menuitem.connect('activate', 2245 self.on_history_menuitem_activate) 2246 send_file_menuitem.connect('activate', 2247 self.on_send_file_menuitem_activate) 2248 add_to_roster_menuitem.connect('activate', 2249 self.on_add_to_roster_menuitem_activate) 2250 toggle_gpg_menuitem.connect('activate', 2251 self.on_toggle_gpg_menuitem_activate) 2252 #toggle_e2e_menuitem.connect('activate', 2253 # self.on_toggle_e2e_menuitem_activate) 2254 information_menuitem.connect('activate', 2255 self.on_contact_information_menuitem_activate) 2256 convert_to_gc_menuitem.connect('activate', 2257 self.on_convert_to_gc_menuitem_activate) 2258 menu.connect('selection-done', self.destroy_menu) 2259 return menu 2260 2261 def destroy_menu(self, menu): 2262 # destroy menu 2263 menu.destroy() 2264 2265 def on_history_menuitem_activate(self, widget): 2266 '''When history menuitem is pressed: call history window''' 2267 import history_window 2268 jid, resource = self.get_jid_and_resource() 2269 2270 if gajim.interface.instances.has_key('logs'): 2271 gajim.interface.instances['logs'].window.present() 2272 gajim.interface.instances['logs'].open_history(jid, self.account) 2273 else: 2274 gajim.interface.instances['logs'] = \ 2275 history_window.HistoryWindow(jid, self.account) 2276 2277 def on_send_file_menuitem_activate(self, widget): 2278 contact = self.get_contact() 2279 if contact: 2280 gajim.interface.instances['file_transfers'].show_file_send_request( 2281 self.account, contact) 2282 2283 def on_add_to_roster_menuitem_activate(self, widget): 2284 jid, resource = self.get_jid_and_resource() 2285 AddNewContactWindow(self.account, jid) 2286 2287 def on_toggle_gpg_menuitem_activate(self, widget): 2288 if self.gpg_togglebutton.get_active(): 2289 self.gpg_togglebutton.set_active(False) 2290 else: 2291 self.gpg_togglebutton.set_active(True) 2292 self.gpg_togglebutton.toggled() 2293 2294 def on_gpg_togglebutton_toggled(self, widget): 2295 self.encrypted = self.gpg_togglebutton.get_active() 2296 contact = self.get_contact() 2297 if contact: # only save if we have a valid contact 2298 gajim.config.set_per('contacts', contact.jid, 'gpg_enabled', 2299 self.encrypted) 2300 2301 def on_contact_information_menuitem_activate(self, widget): 2302 contact = self.get_contact() 2303 if contact: 2304 gajim.interface.roster.on_info(widget, contact, self.account) 2305 2306 def on_convert_to_gc_menuitem_activate(self, widget): 2307 '''user want to invite some friends to chat''' 2308 jid, resource = self.get_jid_and_resource() 2309 TransformChatToMUC(self.account, [jid]) 2310 2311 def on_single_message_window_destroy(self, widget): 2312 gajim.events.event_added_unsubscribe(self.on_event_added) 2313 gajim.events.event_removed_unsubscribe(self.on_event_removed) 2314 2315 def update_next_count(self): 2316 # gajim.get_jid_without_resource(self.from_jid)? 2317 self.next_count = len(gajim.events.get_events(self.account, \ 2318 self.from_whom, types=('normal',))) 2319 self.next_count_label.set_label("(%d)" % self.next_count) 2320 if self.next_count == 0: 2321 self.next_button.set_property('sensitive', False) 2322 else: 2323 self.next_button.set_property('sensitive', True) 2324 2325 def on_event_added(self, event): 2326 if event.type_ == 'normal': 2327 self.update_next_count() 2328 2329 def on_event_removed(self, event_list): 2330 for event in event_list: 2331 if event.type_ == 'normal': 2332 self.update_next_count() 2333 return 2334 2335 def on_next_button_clicked(self, widget): 2336 if self.next_count == 0: 2337 return 2338 next_event = gajim.events.get_first_event(self.account, self.from_whom, 'normal') 2339 #if not next_event: 2340 # next_event = gajim.events.get_first_event(self.account, self.from_whom, 'chat') 2341 if not next_event: 2342 return 2343 # parameters: 2344 # message, subject, kind, time, encrypted, resource, 2345 # msg_id 2346 self.action = 'receive' 2347 self.subject = next_event.parameters[1] 2348 self.message = next_event.parameters[0] 2349 self.resource = next_event.parameters[5] 2350 self.session = next_event.parameters[8] 2351 form_node = next_event.parameters[9] 2352 2353 parent_box = self.xml.get_widget('conversation_scrolledwindow').get_parent() 2354 if form_node: 2355 dataform = dataforms.ExtendForm(node = form_node) 2356 self.form_widget = dataforms_widget.DataFormWidget(dataform) 2357 self.form_widget.show_all() 2358 parent_box.add(self.form_widget) 2359 parent_box.child_set_property(self.form_widget, 'position', 2360 parent_box.child_get_property(self.xml.get_widget('conversation_scrolledwindow'), 'position')) 2361 self.action = 'form' 2362 elif self.form_widget: 2363 self.form_widget.hide() 2364 parent_box.remove(self.form_widget) 2365 self.form_widget = None 2366 2367 self.conversation_textview.clear() 2368 self.prepare_widgets_for(self.action) 2369 2370 # set_text(None) raises TypeError exception 2371 if self.subject is None: 2372 self.subject = '' 2373 self.subject_entry.set_text(self.subject) 2374 2375 gajim.interface.remove_first_event(self.account, self.from_whom, next_event.type_) 2376 self.update_next_count() 2377 2025 2378 def on_cancel_button_clicked(self, widget): 2026 2379 self.save_pos() 2027 2380 self.window.destroy() … … 2066 2419 form_node = self.form_widget.data_form
