Changeset 9960 for trunk/src/gajim.py

Show
Ignore:
Timestamp:
07/19/08 19:36:21 (5 months ago)
Author:
steve-e
Message:

Improved groupchat minimization:

  • partly rewrote join_room because it was hard to read
  • Correctly handle invites from anonymous rooms. Fixes #4057
  • Use HIG dialog for invitation requests
  • Fix bug where minimized groupchats where hidden after a reconnect
  • Removed some duplicated code
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/gajim.py

    r9956 r9960  
    21292129                if type_ in ('printed_gc_msg', 'printed_marked_gc_msg', 'gc_msg'): 
    21302130                        w = self.msg_win_mgr.get_window(jid, account) 
    2131                         if self.minimized_controls[account].has_key(jid): 
    2132                                 if not w: 
    2133                                         ctrl = self.minimized_controls[account][jid] 
    2134                                         w = self.msg_win_mgr.create_window(ctrl.contact, \ 
    2135                                                 ctrl.account, ctrl.type_id) 
     2131                        if jid in self.minimized_controls[account]: 
    21362132                                self.roster.on_groupchat_maximized(None, jid, account) 
    21372133 
     
    24742470 
    24752471        def join_gc_room(self, account, room_jid, nick, password, minimize=False, 
    2476                 is_continued=False): 
     2472        is_continued=False): 
    24772473                '''joins the room immediately''' 
    24782474                if not nick: 
    24792475                        nick = gajim.nicks[account] 
     2476 
    24802477                if self.msg_win_mgr.has_window(room_jid, account) and \ 
    2481                                 gajim.gc_connected[account][room_jid]: 
     2478                gajim.gc_connected[account][room_jid]: 
    24822479                        gc_ctrl = self.msg_win_mgr.get_gc_control(room_jid, account) 
    24832480                        win = gc_ctrl.parent_win 
     
    24852482                        dialogs.ErrorDialog(_('You are already in group chat %s') % room_jid) 
    24862483                        return 
    2487                 minimized_control_exists = False 
    2488                 if room_jid in gajim.interface.minimized_controls[account]: 
    2489                         minimized_control_exists = True 
     2484 
    24902485                invisible_show = gajim.SHOW_LIST.index('invisible') 
    24912486                if gajim.connections[account].connected == invisible_show: 
     
    24932488                                _('You cannot join a group chat while you are invisible')) 
    24942489                        return 
    2495                 if minimize and not minimized_control_exists and \ 
     2490 
     2491                minimized_control_exists = False 
     2492                if room_jid in gajim.interface.minimized_controls[account]: 
     2493                        minimized_control_exists = True 
     2494 
     2495                if not minimized_control_exists and \ 
    24962496                not self.msg_win_mgr.has_window(room_jid, account): 
    2497                         contact = gajim.contacts.create_contact(jid=room_jid, name=nick) 
    2498                         gc_control = GroupchatControl(None, contact, account) 
    2499                         self.minimized_controls[account][room_jid] = gc_control 
    2500                         gajim.connections[account].join_gc(nick, room_jid, password) 
    2501                         if password: 
    2502                                 gajim.gc_passwords[room_jid] = password 
     2497                        # Join new groupchat 
     2498                        if minimize: 
     2499                                contact = gajim.contacts.create_contact(jid=room_jid, name=nick) 
     2500                                gc_control = GroupchatControl(None, contact, account) 
     2501                                gajim.interface.minimized_controls[account][room_jid] = gc_control 
     2502                                self.roster.add_groupchat(room_jid, account) 
     2503                        else: 
     2504                                self.new_room(room_jid, nick, account, is_continued=is_continued) 
     2505                elif not minimized_control_exists: 
     2506                        # We are already in that groupchat 
     2507                        gc_control = self.msg_win_mgr.get_gc_control(room_jid, account) 
     2508                        gc_control.parent_win.set_active_tab(gc_control)         
     2509                else: 
     2510                        # We are already in this groupchat and it is minimized 
    25032511                        self.roster.add_groupchat(room_jid, account) 
    2504                         return 
    2505                 if not minimized_control_exists and \ 
    2506                         not self.msg_win_mgr.has_window(room_jid, account): 
    2507                         self.new_room(room_jid, nick, account, is_continued=is_continued) 
    2508                 if not minimized_control_exists: 
    2509                         gc_control = self.msg_win_mgr.get_gc_control(room_jid, account) 
    2510                         gc_control.parent_win.set_active_tab(gc_control) 
     2512 
     2513                # Connect 
    25112514                gajim.connections[account].join_gc(nick, room_jid, password) 
    25122515                if password: 
    25132516                        gajim.gc_passwords[room_jid] = password 
    2514                 contact = gajim.contacts.get_contact_with_highest_priority(account, \ 
    2515                         room_jid) 
    2516                 if contact or minimized_control_exists: 
    2517                         self.roster.add_groupchat(room_jid, account) 
    25182517 
    25192518        def new_room(self, room_jid, nick, account, is_continued=False): 
     
    28222821                                # Only join non-opened groupchats. Opened one are already 
    28232822                                # auto-joined on re-connection 
    2824                                 if not gajim.gc_connected[account].has_key(jid): 
     2823                                if not jid in gajim.gc_connected[account]: 
    28252824                                        # we are not already connected 
    28262825                                        minimize = bm['minimize'] in ('1', 'true') 
    28272826                                        gajim.interface.join_gc_room(account, jid, bm['nick'], 
    28282827                                        bm['password'], minimize = minimize) 
     2828                                elif jid in self.minimized_controls[account]: 
     2829                                        # more or less a hack: 
     2830                                        # On disconnect the minimized gc contact instances  
     2831                                        # were set to offline. Reconnect them to show up in the roster. 
     2832                                        self.roster.add_groupchat(jid, account) 
    28292833 
    28302834        def add_gc_bookmark(self, account, name, jid, autojoin, minimize, password,