root/trunk/src/config.py

Revision 10684, 127.9 kB (checked in by js, 10 days ago)

Fix typo.

  • Property svn:eol-style set to LF
Line 
1# -*- coding:utf-8 -*-
2## src/config.py
3##
4## Copyright (C) 2003-2005 Vincent Hanquez <tab AT snarc.org>
5## Copyright (C) 2003-2008 Yann Leboulanger <asterix AT lagaule.org>
6## Copyright (C) 2005 Alex Podaras <bigpod AT gmail.com>
7##                    Stéphan Kochen <stephan AT kochen.nl>
8## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com>
9##                         Nikos Kouremenos <kourem AT gmail.com>
10## Copyright (C) 2006 Junglecow J <junglecow AT gmail.com>
11## Copyright (C) 2006-2007 Travis Shirk <travis AT pobox.com>
12##                         Stefan Bethge <stefan AT lanpartei.de>
13## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org>
14## Copyright (C) 2007 James Newton <redshodan AT gmail.com>
15##                    Julien Pivotto <roidelapluie AT gmail.com>
16## Copyright (C) 2007-2008 Stephan Erb <steve-e AT h3c.de>
17## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
18##
19## This file is part of Gajim.
20##
21## Gajim is free software; you can redistribute it and/or modify
22## it under the terms of the GNU General Public License as published
23## by the Free Software Foundation; version 3 only.
24##
25## Gajim is distributed in the hope that it will be useful,
26## but WITHOUT ANY WARRANTY; without even the implied warranty of
27## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28## GNU General Public License for more details.
29##
30## You should have received a copy of the GNU General Public License
31## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
32##
33
34import gtk
35import gobject
36import os, sys
37import common.config
38import common.sleepy
39from common.i18n import Q_
40
41import gtkgui_helpers
42import dialogs
43import cell_renderer_image
44import message_control
45import chat_control
46import dataforms_widget
47
48try:
49        import gtkspell
50        HAS_GTK_SPELL = True
51except Exception:
52        HAS_GTK_SPELL = False
53
54from common import helpers
55from common import gajim
56from common import connection
57from common import passwords
58from common import zeroconf
59from common import dataforms
60from common import pep
61
62from common.exceptions import GajimGeneralException
63
64#---------- PreferencesWindow class -------------#
65class PreferencesWindow:
66        '''Class for Preferences window'''
67
68        def on_preferences_window_destroy(self, widget):
69                '''close window'''
70                del gajim.interface.instances['preferences']
71
72        def on_close_button_clicked(self, widget):
73                self.window.destroy()
74
75        def __init__(self):
76                '''Initialize Preferences window'''
77                self.xml = gtkgui_helpers.get_glade('preferences_window.glade')
78                self.window = self.xml.get_widget('preferences_window')
79                self.window.set_transient_for(gajim.interface.roster.window)
80                self.notebook = self.xml.get_widget('preferences_notebook')
81                self.one_window_type_combobox =\
82                        self.xml.get_widget('one_window_type_combobox')
83                self.iconset_combobox = self.xml.get_widget('iconset_combobox')
84                self.notify_on_signin_checkbutton = self.xml.get_widget(
85                        'notify_on_signin_checkbutton')
86                self.notify_on_signout_checkbutton = self.xml.get_widget(
87                        'notify_on_signout_checkbutton')
88                self.auto_popup_away_checkbutton = self.xml.get_widget(
89                        'auto_popup_away_checkbutton')
90                self.auto_away_checkbutton = self.xml.get_widget('auto_away_checkbutton')
91                self.auto_away_time_spinbutton = self.xml.get_widget(
92                        'auto_away_time_spinbutton')
93                self.auto_away_message_entry = self.xml.get_widget(
94                        'auto_away_message_entry')
95                self.auto_xa_checkbutton = self.xml.get_widget('auto_xa_checkbutton')
96                self.auto_xa_time_spinbutton = self.xml.get_widget(
97                        'auto_xa_time_spinbutton')
98                self.auto_xa_message_entry = self.xml.get_widget('auto_xa_message_entry')
99
100                ### General tab ###
101                # Display avatars in roster
102                st = gajim.config.get('show_avatars_in_roster')
103                self.xml.get_widget('show_avatars_in_roster_checkbutton'). \
104                        set_active(st) 
105
106                # Display status msg under contact name in roster
107                st = gajim.config.get('show_status_msgs_in_roster')
108                self.xml.get_widget('show_status_msgs_in_roster_checkbutton'). \
109                        set_active( st)
110
111                # Display mood in roster
112                st = gajim.config.get('show_mood_in_roster')
113                self.xml.get_widget('show_mood_in_roster_checkbutton'). \
114                        set_active(st)
115
116                # Display activity in roster
117                st = gajim.config.get('show_activity_in_roster')
118                self.xml.get_widget('show_activity_in_roster_checkbutton'). \
119                        set_active(st)
120
121                # Display tunes in roster
122                st = gajim.config.get('show_tunes_in_roster')
123                self.xml.get_widget('show_tunes_in_roster_checkbutton'). \
124                        set_active(st)
125
126                # Sort contacts by show
127                st = gajim.config.get('sort_by_show_in_roster')
128                self.xml.get_widget('sort_by_show_in_roster_checkbutton').set_active(st)
129                st = gajim.config.get('sort_by_show_in_muc')
130                self.xml.get_widget('sort_by_show_in_muc_checkbutton').set_active(st)
131
132                # emoticons
133                emoticons_combobox = self.xml.get_widget('emoticons_combobox')
134                emoticons_list = os.listdir(os.path.join(gajim.DATA_DIR, 'emoticons'))
135                # user themes
136                if os.path.isdir(gajim.MY_EMOTS_PATH):
137                        emoticons_list += os.listdir(gajim.MY_EMOTS_PATH)
138                renderer_text = gtk.CellRendererText()
139                emoticons_combobox.pack_start(renderer_text, True)
140                emoticons_combobox.add_attribute(renderer_text, 'text', 0)
141                model = gtk.ListStore(str)
142                emoticons_combobox.set_model(model)
143                l = []
144                for dir in emoticons_list:
145                        if not os.path.isdir(os.path.join(gajim.DATA_DIR, 'emoticons', dir)) \
146                        and not os.path.isdir(os.path.join(gajim.MY_EMOTS_PATH, dir)) :
147                                continue
148                        if dir != '.svn':
149                                l.append(dir)
150                l.append(_('Disabled'))
151                for i in xrange(len(l)):
152                        model.append([l[i]])
153                        if gajim.config.get('emoticons_theme') == l[i]:
154                                emoticons_combobox.set_active(i)
155                if not gajim.config.get('emoticons_theme'):
156                        emoticons_combobox.set_active(len(l)-1)
157
158                # Set default for single window type
159                choices = common.config.opt_one_window_types
160                type = gajim.config.get('one_message_window')
161                if type in choices:
162                        self.one_window_type_combobox.set_active(choices.index(type))
163                else:
164                        self.one_window_type_combobox.set_active(0)
165
166                # Compact View
167                st = gajim.config.get('compact_view')
168                self.xml.get_widget('compact_view_checkbutton').set_active(st)
169
170                # Ignore XHTML
171                st = gajim.config.get('ignore_incoming_xhtml')
172                self.xml.get_widget('xhtml_checkbutton').set_active(st)
173
174                # use speller
175                if HAS_GTK_SPELL:
176                        st = gajim.config.get('use_speller')
177                        self.xml.get_widget('speller_checkbutton').set_active(st)
178                else:
179                        self.xml.get_widget('speller_checkbutton').set_sensitive(False)
180
181                ### Style tab ###
182                # Themes
183                theme_combobox = self.xml.get_widget('theme_combobox')
184                cell = gtk.CellRendererText()
185                theme_combobox.pack_start(cell, True)
186                theme_combobox.add_attribute(cell, 'text', 0)
187                self.update_theme_list()
188
189                # iconset
190                iconsets_list = os.listdir(os.path.join(gajim.DATA_DIR, 'iconsets'))
191                if os.path.isdir(gajim.MY_ICONSETS_PATH):
192                        iconsets_list += os.listdir(gajim.MY_ICONSETS_PATH)
193                # new model, image in 0, string in 1
194                model = gtk.ListStore(gtk.Image, str)
195                renderer_image = cell_renderer_image.CellRendererImage(0, 0)
196                renderer_text = gtk.CellRendererText()
197                renderer_text.set_property('xpad', 5)
198                self.iconset_combobox.pack_start(renderer_image, expand = False)
199                self.iconset_combobox.pack_start(renderer_text, expand = True)
200                self.iconset_combobox.set_attributes(renderer_text, text = 1)
201                self.iconset_combobox.add_attribute(renderer_image, 'image', 0)
202                self.iconset_combobox.set_model(model)
203                l = []
204                for dir in iconsets_list:
205                        if not os.path.isdir(os.path.join(gajim.DATA_DIR, 'iconsets', dir)) \
206                        and not os.path.isdir(os.path.join(gajim.MY_ICONSETS_PATH, dir)):
207                                continue
208                        if dir != '.svn' and dir != 'transports':
209                                l.append(dir)
210                if l.count == 0:
211                        l.append(' ')
212                for i in xrange(len(l)):
213                        preview = gtk.Image()
214                        files = []
215                        files.append(os.path.join(helpers.get_iconset_path(l[i]), '16x16',
216                                'online.png'))
217                        files.append(os.path.join(helpers.get_iconset_path(l[i]), '16x16',
218                                'online.gif'))
219                        for file in files:
220                                if os.path.exists(file):
221                                        preview.set_from_file(file)
222                        model.append([preview, l[i]])
223                        if gajim.config.get('iconset') == l[i]:
224                                self.iconset_combobox.set_active(i)
225       
226                # Use transports iconsets
227                st = gajim.config.get('use_transports_iconsets')
228                self.xml.get_widget('transports_iconsets_checkbutton').set_active(st)
229
230                # Color for incoming messages
231                colSt = gajim.config.get('inmsgcolor')
232                self.xml.get_widget('incoming_msg_colorbutton').set_color(
233                        gtk.gdk.color_parse(colSt))
234
235                # Color for outgoing messages
236                colSt = gajim.config.get('outmsgcolor')
237                self.xml.get_widget('outgoing_msg_colorbutton').set_color(
238                        gtk.gdk.color_parse(colSt))
239
240                # Color for status messages
241                colSt = gajim.config.get('statusmsgcolor')
242                self.xml.get_widget('status_msg_colorbutton').set_color(
243                        gtk.gdk.color_parse(colSt))
244
245                # Color for hyperlinks
246                colSt = gajim.config.get('urlmsgcolor')
247                self.xml.get_widget('url_msg_colorbutton').set_color(
248                        gtk.gdk.color_parse(colSt))
249
250                # Font for messages
251                font = gajim.config.get('conversation_font')
252                # try to set default font for the current desktop env
253                fontbutton = self.xml.get_widget('conversation_fontbutton')
254                if font == '':
255                        fontbutton.set_sensitive(False)
256                        self.xml.get_widget('default_chat_font').set_active(True)
257                else:
258                        fontbutton.set_font_name(font)
259
260                ### Personal Events tab ###
261                # outgoing send chat state notifications
262                st = gajim.config.get('outgoing_chat_state_notifications')
263                combo = self.xml.get_widget('outgoing_chat_states_combobox')
264                if st == 'all':
265                        combo.set_active(0)
266                elif st == 'composing_only':
267                        combo.set_active(1)
268                else: # disabled
269                        combo.set_active(2)
270
271                # displayed send chat state notifications
272                st = gajim.config.get('displayed_chat_state_notifications')
273                combo = self.xml.get_widget('displayed_chat_states_combobox')
274                if st == 'all':
275                        combo.set_active(0)
276                elif st == 'composing_only':
277                        combo.set_active(1)
278                else: # disabled
279                        combo.set_active(2)
280
281
282                ### Notifications tab ###
283                # On new event
284                on_event_combobox = self.xml.get_widget('on_event_combobox')
285                if gajim.config.get('autopopup'):
286                        on_event_combobox.set_active(0)
287                elif gajim.config.get('notify_on_new_message'):
288                        on_event_combobox.set_active(1)
289                else:
290                        on_event_combobox.set_active(2)
291
292                # notify on online statuses
293                st = gajim.config.get('notify_on_signin')
294                self.notify_on_signin_checkbutton.set_active(st)
295
296                # notify on offline statuses
297                st = gajim.config.get('notify_on_signout')
298                self.notify_on_signout_checkbutton.set_active(st)
299
300                # autopopupaway
301                st = gajim.config.get('autopopupaway')
302                self.auto_popup_away_checkbutton.set_active(st)
303
304                # sounds
305                if gajim.config.get('sounds_on'):
306                        self.xml.get_widget('play_sounds_checkbutton').set_active(True)
307                else:
308                        self.xml.get_widget('sounds_scrolledwindow').set_sensitive(False)
309                        self.xml.get_widget('browse_sounds_hbox').set_sensitive(False)
310
311                # sound player
312                player = gajim.config.get('soundplayer')
313
314                # sounds treeview
315                self.sound_tree = self.xml.get_widget('sounds_treeview')
316
317                # active, event ui name, path to sound file, event_config_name
318                model = gtk.ListStore(bool, str, str, str)
319                self.sound_tree.set_model(model)
320
321                col = gtk.TreeViewColumn(_('Active'))
322                self.sound_tree.append_column(col)
323                renderer = gtk.CellRendererToggle()
324                renderer.set_property('activatable', True)
325                renderer.connect('toggled', self.sound_toggled_cb)
326                col.pack_start(renderer)
327                col.set_attributes(renderer, active = 0)
328
329                col = gtk.TreeViewColumn(_('Event'))
330                self.sound_tree.append_column(col)
331                renderer = gtk.CellRendererText()
332                col.pack_start(renderer)
333                col.set_attributes(renderer, text = 1)
334
335                self.fill_sound_treeview()
336
337                # Notify user of new gmail e-mail messages,
338                # make checkbox sensitive if user has a gtalk account
339                frame_gmail = self.xml.get_widget('frame_gmail')
340                notify_gmail_checkbutton = self.xml.get_widget('notify_gmail_checkbutton')
341                notify_gmail_extra_checkbutton = self.xml.get_widget(
342                        'notify_gmail_extra_checkbutton')
343
344                for account in gajim.config.get_per('accounts'):
345                        jid = gajim.get_jid_from_account(account)
346                        if gajim.get_server_from_jid(jid) in gajim.gmail_domains:
347                                frame_gmail.set_sensitive(True)
348                                st = gajim.config.get('notify_on_new_gmail_email')
349                                notify_gmail_checkbutton.set_active(st)
350                                st = gajim.config.get('notify_on_new_gmail_email_extra')
351                                notify_gmail_extra_checkbutton.set_active(st)
352                                break
353
354                #### Status tab ###
355                # Autoaway
356                st = gajim.config.get('autoaway')
357                self.auto_away_checkbutton.set_active(st)
358
359                # Autoawaytime
360                st = gajim.config.get('autoawaytime')
361                self.auto_away_time_spinbutton.set_value(st)
362                self.auto_away_time_spinbutton.set_sensitive(gajim.config.get('autoaway'))
363
364                # autoaway message
365                st = gajim.config.get('autoaway_message')
366                self.auto_away_message_entry.set_text(st)
367                self.auto_away_message_entry.set_sensitive(gajim.config.get('autoaway'))
368
369                # Autoxa
370                st = gajim.config.get('autoxa')
371                self.auto_xa_checkbutton.set_active(st)
372
373                # Autoxatime
374                st = gajim.config.get('autoxatime')
375                self.auto_xa_time_spinbutton.set_value(st)
376                self.auto_xa_time_spinbutton.set_sensitive(gajim.config.get('autoxa'))
377
378                # autoxa message
379                st = gajim.config.get('autoxa_message')
380                self.auto_xa_message_entry.set_text(st)
381                self.auto_xa_message_entry.set_sensitive(gajim.config.get('autoxa'))
382
383                from common import sleepy
384                if not sleepy.SUPPORTED:
385                        self.xml.get_widget('autoaway_table').set_sensitive(False)
386
387                # ask_status when online / offline
388                st = gajim.config.get('ask_online_status')
389                self.xml.get_widget('prompt_online_status_message_checkbutton').\
390                        set_active(st)
391                st = gajim.config.get('ask_offline_status')
392                self.xml.get_widget('prompt_offline_status_message_checkbutton').\
393                        set_active(st)
394
395                # Default Status messages
396                self.default_msg_tree = self.xml.get_widget('default_msg_treeview')
397                # (status, translated_status, message, enabled)
398                model = gtk.ListStore(str, str, str, bool)
399                self.default_msg_tree.set_model(model)
400                col = gtk.TreeViewColumn(_('Status'))
401                self.default_msg_tree.append_column(col)
402                renderer = gtk.CellRendererText()
403                col.pack_start(renderer, False)
404                col.set_attributes(renderer, text = 1)
405                col = gtk.TreeViewColumn(_('Default Message'))
406                self.default_msg_tree.append_column(col)
407                renderer = gtk.CellRendererText()
408                col.pack_start(renderer, True)
409                col.set_attributes(renderer, text = 2)
410                renderer.connect('edited', self.on_default_msg_cell_edited)
411                renderer.set_property('editable', True)
412                col = gtk.TreeViewColumn(_('Enabled'))
413                self.default_msg_tree.append_column(col)
414                renderer = gtk.CellRendererToggle()
415                col.pack_start(renderer, False)
416                col.set_attributes(renderer, active = 3)
417                renderer.set_property('activatable', True)
418                renderer.connect('toggled', self.default_msg_toggled_cb)
419                self.fill_default_msg_treeview()
420
421                # Status messages
422                self.msg_tree = self.xml.get_widget('msg_treeview')
423                model = gtk.ListStore(str, str)
424                self.msg_tree.set_model(model)
425                col = gtk.TreeViewColumn('name')
426                self.msg_tree.append_column(col)
427                renderer = gtk.CellRendererText()
428                col.pack_start(renderer, True)
429                col.set_attributes(renderer, text = 0)
430                renderer.connect('edited', self.on_msg_cell_edited)
431                renderer.set_property('editable', True)
432                self.fill_msg_treeview()
433                buf = self.xml.get_widget('msg_textview').get_buffer()
434                buf.connect('changed', self.on_msg_textview_changed)
435
436                ### Advanced tab ###
437                # open links with
438                if os.name == 'nt':
439                        applications_frame = self.xml.get_widget('applications_frame')
440                        applications_frame.set_no_show_all(True)
441                        applications_frame.hide()
442                else:
443                        self.applications_combobox = self.xml.get_widget(
444                                'applications_combobox')
445                        self.xml.get_widget('custom_apps_frame').hide()
446                        self.xml.get_widget('custom_apps_frame').set_no_show_all(True)
447
448                        if sys.platform == 'darwin':
449                                self.applications_combobox.remove_text(4)
450                                self.applications_combobox.remove_text(3)
451                                self.applications_combobox.remove_text(2)
452                                self.applications_combobox.remove_text(1)
453                                self.applications_combobox.append_text(
454                                        _('Always use OS/X default applications'))
455                                self.applications_combobox.append_text(_('Custom'))
456
457                        if gajim.config.get('autodetect_browser_mailer'):
458                                self.applications_combobox.set_active(0)
459                        # else autodetect_browser_mailer is False.
460                        # so user has 'Always Use GNOME/KDE/Xfce' or Custom
461                        elif gajim.config.get('openwith') == 'gnome-open':
462                                self.applications_combobox.set_active(1)
463                        elif gajim.config.get('openwith') == 'kfmclient exec':
464                                self.applications_combobox.set_active(2)
465                        elif gajim.config.get('openwith') == 'exo-open':
466                                self.applications_combobox.set_active(3)
467                        elif ((sys.platform == 'darwin') and\
468                        (gajim.config.get('openwith') == 'open')):
469                                self.applications_combobox.set_active(1)
470                        elif gajim.config.get('openwith') == 'custom':
471                                if sys.platform == 'darwin':
472                                        self.applications_combobox.set_active(2)
473                                else:
474                                        self.applications_combobox.set_active(4)
475                                self.xml.get_widget('custom_apps_frame').show()
476
477                        self.xml.get_widget('custom_browser_entry').set_text(
478                                gajim.config.get('custombrowser'))
479                        self.xml.get_widget('custom_mail_client_entry').set_text(
480                                gajim.config.get('custommailapp'))
481                        self.xml.get_widget('custom_file_manager_entry').set_text(
482                                gajim.config.get('custom_file_manager'))
483
484                # log status changes of contacts
485                st = gajim.config.get('log_contact_status_changes')
486                self.xml.get_widget('log_show_changes_checkbutton').set_active(st)
487
488                # log encrypted chat sessions
489                st = gajim.config.get('log_encrypted_sessions')
490                self.xml.get_widget('log_encrypted_chats_checkbutton').set_active(st)
491
492                # send os info
493                st = gajim.config.get('send_os_info')
494                self.xml.get_widget('send_os_info_checkbutton').set_active(st)
495
496                # check if gajm is default
497                st = gajim.config.get('check_if_gajim_is_default')
498                self.xml.get_widget('check_default_client_checkbutton').set_active(st)
499
500                # Ignore messages from unknown contacts
501                self.xml.get_widget('ignore_events_from_unknown_contacts_checkbutton').\
502                        set_active(gajim.config.get('ignore_unknown_contacts'))
503
504                self.xml.signal_autoconnect(self)
505
506                self.sound_tree.get_model().connect('row-changed',
507                                        self.on_sounds_treemodel_row_changed)
508                self.msg_tree.get_model().connect('row-changed',
509                                        self.on_msg_treemodel_row_changed)
510                self.msg_tree.get_model().connect('row-deleted',
511                                        self.on_msg_treemodel_row_deleted)
512                self.default_msg_tree.get_model().connect('row-changed',
513                                        self.on_default_msg_treemodel_row_changed)
514
515                self.theme_preferences = None
516
517                self.notebook.set_current_page(0)
518               
519                self.window.show_all()
520                gtkgui_helpers.possibly_move_window_in_current_desktop(self.window)
521
522        def on_preferences_window_key_press_event(self, widget, event):
523                if event.keyval == gtk.keysyms.Escape:
524                        self.window.hide()
525
526        def on_checkbutton_toggled(self, widget, config_name,
527                change_sensitivity_widgets = None):
528                gajim.config.set(config_name, widget.get_active())
529                if change_sensitivity_widgets:
530                        for w in change_sensitivity_widgets:
531                                w.set_sensitive(widget.get_active())
532                gajim.interface.save_config()
533
534        def on_sort_by_show_in_roster_checkbutton_toggled(self, widget):
535                self.on_checkbutton_toggled(widget, 'sort_by_show_in_roster')
536                gajim.interface.roster.setup_and_draw_roster()
537
538        def on_sort_by_show_in_muc_checkbutton_toggled(self, widget):
539                self.on_checkbutton_toggled(widget, 'sort_by_show_in_muc')
540                # Redraw connected groupchats
541                for account in gajim.connections:
542                        if gajim.connections[account].connected:
543                                for gc_control in gajim.interface.msg_win_mgr.get_controls(
544                                message_control.TYPE_GC) + \
545                                gajim.interface.minimized_controls[account].values():
546                                        gc_control.draw_roster()
547
548        def on_show_avatars_in_roster_checkbutton_toggled(self, widget):
549                self.on_checkbutton_toggled(widget, 'show_avatars_in_roster')
550                gajim.interface.roster.setup_and_draw_roster()
551                # Redraw connected groupchats (in an ugly way)
552                for account in gajim.connections:
553                        if gajim.connections[account].connected:
554                                for gc_control in gajim.interface.msg_win_mgr.get_controls(
555                                message_control.TYPE_GC) + \
556                                gajim.interface.minimized_controls[account].values():
557                                        gc_control.draw_roster()
558
559        def on_show_status_msgs_in_roster_checkbutton_toggled(self, widget):
560                self.on_checkbutton_toggled(widget, 'show_status_msgs_in_roster')
561                gajim.interface.roster.setup_and_draw_roster()
562                for ctl in gajim.interface.msg_win_mgr.controls():
563                        if ctl.type_id == message_control.TYPE_GC:
564                                ctl.update_ui()
565
566        def on_show_mood_in_roster_checkbutton_toggled(self, widget):
567                self.on_checkbutton_toggled(widget, 'show_mood_in_roster')
568                gajim.interface.roster.setup_and_draw_roster()
569
570        def on_show_activity_in_roster_checkbutton_toggled(self, widget):
571                self.on_checkbutton_toggled(widget, 'show_activity_in_roster')
572                gajim.interface.roster.setup_and_draw_roster()
573
574        def on_show_tunes_in_roster_checkbutton_toggled(self, widget):
575                self.on_checkbutton_toggled(widget, 'show_tunes_in_roster')
576                gajim.interface.roster.setup_and_draw_roster()
577
578        def on_emoticons_combobox_changed(self, widget):
579                active = widget.get_active()
580                model = widget.get_model()
581                emot_theme = model[active][0].decode('utf-8')
582                if emot_theme == _('Disabled'):
583                        gajim.config.set('emoticons_theme', '')
584                else:
585                        gajim.config.set('emoticons_theme', emot_theme)
586
587                gajim.interface.init_emoticons(need_reload = True)
588                gajim.interface.make_regexps()