remove empty groups when we drag and drop

fix some problems with drag and drop when we merge accounts
This commit is contained in:
Yann Leboulanger 2005-03-28 22:17:14 +00:00
parent 99a64c0735
commit 4f62c70a47

View file

@ -1198,6 +1198,9 @@ class Roster_window:
def drag_data_received_data(self, treeview, context, x, y, selection, info, def drag_data_received_data(self, treeview, context, x, y, selection, info,
etime): etime):
merge = 0
if self.plugin.config['mergeaccounts']:
merge = 1
model = treeview.get_model() model = treeview.get_model()
data = selection.data data = selection.data
if not data: if not data:
@ -1206,26 +1209,29 @@ class Roster_window:
if not drop_info: if not drop_info:
return return
path_dest, position = drop_info path_dest, position = drop_info
if position == gtk.TREE_VIEW_DROP_BEFORE and len(path_dest) == 2\ if position == gtk.TREE_VIEW_DROP_BEFORE and len(path_dest) == 2 - merge\
and path_dest[1] == 0: #droped before the first group and path_dest[1 - merge] == 0: #droped before the first group
return return
if position == gtk.TREE_VIEW_DROP_BEFORE and len(path_dest) == 2: if position == gtk.TREE_VIEW_DROP_BEFORE and len(path_dest) == 2 - merge:
#droped before a group : we drop it in the previous group #droped before a group : we drop it in the previous group
path_dest = (path_dest[0], path_dest[1]-1) path_dest = (path_dest[1 - merge], path_dest[1 - merge]-1)
iter_dest = model.get_iter(path_dest) iter_dest = model.get_iter(path_dest)
iter_source = treeview.get_selection().get_selected()[1] iter_source = treeview.get_selection().get_selected()[1]
path_source = model.get_path(iter_source) path_source = model.get_path(iter_source)
if len(path_dest) == 1: #droped on an account if len(path_dest) == 1 and not merge: #droped on an account
return return
if path_dest[0] != path_source[0]: #droped in another account if path_dest[0] != path_source[0] and not merge:
#droped in another account
return return
grp_source = model.get_value(model.iter_parent(iter_source), 3) iter_group_source = model.iter_parent(iter_source)
grp_source = model.get_value(iter_group_source, 3)
if grp_source == 'Agents': if grp_source == 'Agents':
return return
account = model.get_value(model.get_iter(path_dest[0]), 3) account = model.get_value(iter_dest, 4)
if len(path_dest) == 2: type_dest = model.get_value(iter_dest, 2)
if type_dest == 'group':
grp_dest = model.get_value(iter_dest, 3) grp_dest = model.get_value(iter_dest, 3)
elif len(path_dest) == 3: else:
grp_dest = model.get_value(model.iter_parent(iter_dest), 3) grp_dest = model.get_value(model.iter_parent(iter_dest), 3)
if grp_source == grp_dest: if grp_source == grp_dest:
return return
@ -1233,9 +1239,16 @@ class Roster_window:
u.groups.remove(grp_source) u.groups.remove(grp_source)
u.groups.append(grp_dest) u.groups.append(grp_dest)
self.plugin.send('UPDUSER', account, (u.jid, u.name, u.groups)) self.plugin.send('UPDUSER', account, (u.jid, u.name, u.groups))
parent_i = model.iter_parent(iter_source) if model.iter_n_children(iter_group_source) == 1: #this was the only child
if model.iter_n_children(parent_i) == 1: #this was the only child model.remove(iter_group_source)
model.remove(parent_i) #delete the group if it is empty (need to look for offline users too)
group_empty = True
for jid in self.contacts[account]:
if grp_source in self.contacts[account][jid][0].groups:
group_empty = False
break
if group_empty:
del self.groups[account][grp_source]
self.add_user_to_roster(data, account) self.add_user_to_roster(data, account)
if context.action == gtk.gdk.ACTION_MOVE: if context.action == gtk.gdk.ACTION_MOVE:
context.finish(True, True, etime) context.finish(True, True, etime)