QtCore.QVariant([...]) does not seem to work as expected with F10's Qt version. Let's be explicit and always make a QStringList first. Current SVN upstream does it this way too (at least for the bookmarks code which is where the problem was reported). Patch created using: find . -name '*.py' | while read f; do sed -i -e 's/QVariant(\(\[[^]]*\]\)/QVariant(QtCore.QStringList(\1)/' $f; done with just one hand-made fix where the regexp did the wrong thing. diff -Nurp jabbim-0.4.3.orig/jabbim.py jabbim-0.4.3/jabbim.py --- jabbim-0.4.3.orig/jabbim.py 2008-07-02 15:02:20.000000000 +0200 +++ jabbim-0.4.3/jabbim.py 2008-09-15 22:03:08.000000000 +0200 @@ -2855,7 +2855,7 @@ class mainWindow(QtGui.QMainWindow): t = self.activities['none'] action = activity.addAction(t) action.setObjectName('activity') - action.setData(QtCore.QVariant(['none'])) + action.setData(QtCore.QVariant(QtCore.QStringList(['none']))) activity.addSeparator() for group, txt in self.activityGroups.iteritems(): menu = activity.addMenu(txt[0]) @@ -2865,7 +2865,7 @@ class mainWindow(QtGui.QMainWindow): t = self.activities[a] action = menu.addAction(t) action.setObjectName('activity') - action.setData(QtCore.QVariant([group, a])) + action.setData(QtCore.QVariant(QtCore.QStringList([group, a]))) moodButtonRoot.addMenu(activity) self.ui.moodButton.setMenu(moodButtonRoot) else: @@ -2924,7 +2924,7 @@ class mainWindow(QtGui.QMainWindow): if separator and len(config[key])!=0: menu.addSeparator() action=menu.addAction(self.getIcon("1@"+transport,status=key,size="16x16"),self.status[key]) - action.setData(QtCore.QVariant([key,unicode(transport)])) + action.setData(QtCore.QVariant(QtCore.QStringList([key,unicode(transport)]))) if len(config[key])!=0: for val in config[key]: status=val[0] @@ -2934,7 +2934,7 @@ class mainWindow(QtGui.QMainWindow): else: action=menu.addAction(self.getIcon("1@"+transport,status=key,size="16x16"),unicode(status)) # [show_idOfMessage,jidOfTransport] - action.setData(QtCore.QVariant([key+"_"+unicode(index),unicode(transport)])) + action.setData(QtCore.QVariant(QtCore.QStringList([key+"_"+unicode(index),unicode(transport)]))) font=action.font() font.setItalic(True) action.setFont(font) @@ -2943,7 +2943,7 @@ class mainWindow(QtGui.QMainWindow): else: separator=True action=menu.addAction(self.getIcon('1@'+transport,status="offline",size="16x16"),self.tr("Log out")) - action.setData(QtCore.QVariant(['offline',unicode(transport)])) + action.setData(QtCore.QVariant(QtCore.QStringList(['offline',unicode(transport)]))) if separator: menu.addSeparator() @@ -3669,7 +3669,7 @@ class mainWindow(QtGui.QMainWindow): item=QtGui.QTreeWidgetItem(self.ui.bookmarks) item.setText(0,unicode(v.name)) item.setText(1,unicode(v.jid.full())) - item.setData(0,32,QtCore.QVariant([unicode(v.jid.full()),unicode(v.nick),unicode(v.password)])) + item.setData(0,32,QtCore.QVariant(QtCore.QStringList([unicode(v.jid.full()),unicode(v.nick),unicode(v.password)]))) item.setIcon(0,QtGui.QIcon("images/16x16/categories/muc.png")) def autoJoinGroupchat(self): diff -Nurp jabbim-0.4.3.orig/plugins/jdm/jdm.py jabbim-0.4.3/plugins/jdm/jdm.py --- jabbim-0.4.3.orig/plugins/jdm/jdm.py 2008-06-21 18:39:42.000000000 +0200 +++ jabbim-0.4.3/plugins/jdm/jdm.py 2008-09-15 22:03:11.000000000 +0200 @@ -350,7 +350,7 @@ class Plugin(plugins.PluginBase): size=file[1] ext=name.split('.')[-1] item=QtGui.QListWidgetItem(unicode(name)) - item.setData(32,QtCore.QVariant([unicode(size)])) + item.setData(32,QtCore.QVariant(QtCore.QStringList([unicode(size)]))) if ext in ["exe","run","sh","bin"]: item.setIcon(QtGui.QIcon(self.pluginDir+"/application-x-executable.png")) elif ext in ["svg","jpg","png","gif","tif","tiff","bmp","ico","xcf"]: diff -Nurp jabbim-0.4.3.orig/widgets/commands.py jabbim-0.4.3/widgets/commands.py --- jabbim-0.4.3.orig/widgets/commands.py 2008-06-21 18:39:42.000000000 +0200 +++ jabbim-0.4.3/widgets/commands.py 2008-09-15 22:03:09.000000000 +0200 @@ -147,7 +147,7 @@ class Commands: for command in commands: action=self.submenu.addAction(command["name"]) action.setObjectName("ad_hoc_command") - action.setData(QtCore.QVariant([command['node'], command['name']])) + action.setData(QtCore.QVariant(QtCore.QStringList([command['node'], command['name']]))) button = QtGui.QPushButton(self.dialog) button.setText(unicode(command["name"])) #button.setObjectName(unicode(command["node"])) # ? + jid diff -Nurp jabbim-0.4.3.orig/widgets/groupchat.py jabbim-0.4.3/widgets/groupchat.py --- jabbim-0.4.3.orig/widgets/groupchat.py 2008-07-02 22:40:06.000000000 +0200 +++ jabbim-0.4.3/widgets/groupchat.py 2008-09-15 22:03:08.000000000 +0200 @@ -344,7 +344,7 @@ class groupChatWidget(abstractChatWidget if user.truejid != None: tjid = jidT.JID(user.truejid).userhost() action=menu.addAction(self.tr("Add to roster")) - action.setData(QtCore.QVariant([tjid, name])) + action.setData(QtCore.QVariant(QtCore.QStringList([tjid, name]))) action.setIcon(QtGui.QIcon("images/16x16/actions/add-user.png")) action.setObjectName("add-user") # vcard action diff -Nurp jabbim-0.4.3.orig/widgets/rosterLiveWidget.py jabbim-0.4.3/widgets/rosterLiveWidget.py --- jabbim-0.4.3.orig/widgets/rosterLiveWidget.py 2008-06-24 21:59:27.000000000 +0200 +++ jabbim-0.4.3/widgets/rosterLiveWidget.py 2008-09-15 22:03:09.000000000 +0200 @@ -1882,7 +1882,7 @@ class rosterWidget(QtGui.QWidget): submenu = contactMenu.addMenu(QtGui.QIcon("images/16x16/categories/muc.png"),self.tr("Invite to conference")) for gc in self.main.client.groupchats.keys(): action = submenu.addAction(gc) - action.setData(QtCore.QVariant([jid.full(), gc])) + action.setData(QtCore.QVariant(QtCore.QStringList([jid.full(), gc]))) action.setObjectName("invite_gc") @@ -1894,7 +1894,7 @@ class rosterWidget(QtGui.QWidget): for status in ["online", "chat", "away", "xa", "dnd", "offline"]: action=submenu.addAction(self.main.getIcon(status=status,size="32x32"),self.main.status[status]) action.setObjectName("custom_status") - action.setData(QtCore.QVariant([unicode(status), unicode(jid.userhost())])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(status), unicode(jid.userhost())]))) # separator contactMenu.addSeparator() @@ -1929,7 +1929,7 @@ class rosterWidget(QtGui.QWidget): ## delete from group #if group!=None and len(self.main.client.roster['users'][jid].groups)>1: #action=contactMenu.addAction(self.tr("Delete from group")) - #action.setData(QtCore.QVariant([unicode(jid),u"-"+group])) + #action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"-"+group]))) #action.setObjectName("check_group") ## delete from roster #action=contactMenu.addAction(self.tr("Delete from roster")) @@ -1970,17 +1970,17 @@ class rosterWidget(QtGui.QWidget): ##if len(self.main.client.roster['users'][jid].groups)==0: ##if k=="Unknown": ##action.setChecked(True) - ##action.setData(QtCore.QVariant([unicode(jid),u"-"+unicode(k)])) + ##action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"-"+unicode(k)]))) ##else: - ##action.setData(QtCore.QVariant([unicode(jid),u"+"+unicode(k)])) + ##action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"+"+unicode(k)]))) ##else: #if k in self.main.client.roster['users'][jid].groups: #action.setChecked(True) - #action.setData(QtCore.QVariant([unicode(jid),u"-"+unicode(k)])) + #action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"-"+unicode(k)]))) #if len(self.main.client.roster['users'][jid].groups)<=1: #action.setEnabled(False) #else: - #action.setData(QtCore.QVariant([unicode(jid),u"+"+unicode(k)])) + #action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"+"+unicode(k)]))) if self.main.client.privacy: if self.main.client.privacy.active: @@ -2057,7 +2057,7 @@ class rosterWidget(QtGui.QWidget): if oneres: for gc in self.main.client.groupchats.keys(): action = submenu.addAction(gc) - action.setData(QtCore.QVariant([jid, gc])) + action.setData(QtCore.QVariant(QtCore.QStringList([jid, gc]))) action.setObjectName("invite_gc") else: for gc in self.main.client.groupchats.keys(): @@ -2065,7 +2065,7 @@ class rosterWidget(QtGui.QWidget): for res in contact.resources.keys(): if res != None: action = submenu2.addAction(res) - action.setData(QtCore.QVariant(["%s/%s" % (jid, res), gc])) + action.setData(QtCore.QVariant(QtCore.QStringList(["%s/%s" % (jid, res), gc]))) action.setObjectName("invite_gc") # one2one -> muc lst = [] @@ -2079,7 +2079,7 @@ class rosterWidget(QtGui.QWidget): for name in lst: action = submenu.addAction(self.getNameByJID(name)) action.setObjectName("invite_chat") - action.setData(QtCore.QVariant([unicode(name), jid])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(name), jid]))) else: for name in lst: submenu2 = submenu.addMenu(self.getNameByJID(name)) @@ -2087,7 +2087,7 @@ class rosterWidget(QtGui.QWidget): if res != None: action = submenu2.addAction(res) action.setObjectName("invite_chat") - action.setData(QtCore.QVariant([unicode(name),"%s/%s" % (jid, res) ])) # kam pozyvame, koho + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(name),"%s/%s" % (jid, res) ]))) # kam pozyvame, koho # custom status submenu=contactMenu.addMenu(self.tr("Custom status")) @@ -2095,7 +2095,7 @@ class rosterWidget(QtGui.QWidget): for status in ["online", "chat", "away", "xa", "dnd", "offline"]: action=submenu.addAction(self.main.getIcon(status=status,size="32x32"),self.main.status[status]) action.setObjectName("custom_status") - action.setData(QtCore.QVariant([unicode(status), unicode(jid)])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(status), unicode(jid)]))) # separator contactMenu.addSeparator() @@ -2158,7 +2158,7 @@ class rosterWidget(QtGui.QWidget): # delete from group if group!=None and len(self.main.client.roster['users'][jid].groups)>1: action=contactMenu.addAction(self.tr("Delete from group")) - action.setData(QtCore.QVariant([unicode(jid),u"-"+group])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"-"+group]))) action.setObjectName("check_group") # delete from roster action=contactMenu.addAction(self.tr("Delete from roster")) @@ -2199,17 +2199,17 @@ class rosterWidget(QtGui.QWidget): #if len(self.main.client.roster['users'][jid].groups)==0: #if k=="Unknown": #action.setChecked(True) - #action.setData(QtCore.QVariant([unicode(jid),u"-"+unicode(k)])) + #action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"-"+unicode(k)]))) #else: - #action.setData(QtCore.QVariant([unicode(jid),u"+"+unicode(k)])) + #action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"+"+unicode(k)]))) #else: if k in self.main.client.roster['users'][jid].groups: action.setChecked(True) - action.setData(QtCore.QVariant([unicode(jid),u"-"+unicode(k)])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"-"+unicode(k)]))) if len(self.main.client.roster['users'][jid].groups)<=1: action.setEnabled(False) else: - action.setData(QtCore.QVariant([unicode(jid),u"+"+unicode(k)])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"+"+unicode(k)]))) if self.main.client.privacy: if self.main.client.privacy.active: @@ -2285,7 +2285,7 @@ class rosterWidget(QtGui.QWidget): for status in ["online", "chat", "away", "xa", "dnd", "offline"]: action=submenu.addAction(self.main.getIcon(status=status,size="32x32"),self.main.status[status]) action.setObjectName("custom_status") - action.setData(QtCore.QVariant([unicode(status), unicode(name)])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(status), unicode(name)]))) # signal contactMenu.connect(contactMenu, QtCore.SIGNAL("triggered ( QAction * )"),self.groupMenuTriggered) diff -Nurp jabbim-0.4.3.orig/widgets/rosterWidget.py jabbim-0.4.3/widgets/rosterWidget.py --- jabbim-0.4.3.orig/widgets/rosterWidget.py 2008-06-21 18:39:42.000000000 +0200 +++ jabbim-0.4.3/widgets/rosterWidget.py 2008-09-15 22:03:09.000000000 +0200 @@ -220,7 +220,7 @@ class rosterWidget(QtGui.QTreeWidget): item=QtGui.QTreeWidgetItem(parent) item.setText(1,"9") # add new resource called 'name', JID 'jid' with QTreeWidgetItem 'user' - item.setData(32,0,QtCore.QVariant([unicode(tag),unicode("metaparent")])) + item.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(tag),unicode("metaparent")]))) item.setData(32,1,QtCore.QVariant(unicode(tag))) if offline!=False: self.setItemHidden(item, True) @@ -241,7 +241,7 @@ class rosterWidget(QtGui.QTreeWidget): item.setText(1,"9"+unicode(name).lower()) item.setText(2,unicode(name)) item.setText(4,unicode(jid)) - item.setData(32,0,QtCore.QVariant([unicode(jid),unicode("meta")])) + item.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(jid),unicode("meta")]))) if offline!=False: self.setItemHidden(item, True) self.sortItems(1,QtCore.Qt.AscendingOrder) @@ -258,7 +258,7 @@ class rosterWidget(QtGui.QTreeWidget): item.setText(0,unicode(name)) item.setText(1,"9"+unicode(name).lower()) item.setText(2,unicode(name)) - item.setData(32,0,QtCore.QVariant([unicode(jid),unicode("resource")])) + item.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(jid),unicode("resource")]))) self.sortItems(1,QtCore.Qt.AscendingOrder) return item @@ -324,7 +324,7 @@ class rosterWidget(QtGui.QTreeWidget): ### print "not contact" #return False #i=self.getUserItems(jid)[0].clone() # clone contact item - #i.setData(32,0,QtCore.QVariant([unicode(jid),unicode("meta")])) + #i.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(jid),unicode("meta")]))) #for contact in self.getUserItems(jid): #it=contact.data(32,0) #it=it.toList() @@ -342,9 +342,9 @@ class rosterWidget(QtGui.QTreeWidget): ## Vytvoreni noveho metakontaktu sloucenim dvou kontaktu #elif newParentTyp=="contact" and typ=="contact": #i=self.getUserItems(jid)[0].clone() # clone contact item - #i.setData(32,0,QtCore.QVariant([unicode(jid),unicode("meta")])) + #i.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(jid),unicode("meta")]))) #i2=self.getUserItems(newParentJid)[0].clone() # clone contact item - #i2.setData(32,0,QtCore.QVariant([unicode(newParentJid),unicode("meta")])) + #i2.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(newParentJid),unicode("meta")]))) #self.main.client.metaParents[newParentJid]=self.addMetaParent(newParentJid,newParent.parent()) #self.main.client.metaParents[newParentJid].addChild(i) @@ -379,7 +379,7 @@ class rosterWidget(QtGui.QTreeWidget): ### print "not contact" #return False #i=self.getUserItems(jid,"meta")[0].clone() # clone contact item - #i.setData(32,0,QtCore.QVariant([unicode(jid),unicode("contact")])) + #i.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(jid),unicode("contact")]))) #oldParent.takeChild(oldParent.indexOfChild(item)) @@ -403,13 +403,13 @@ class rosterWidget(QtGui.QTreeWidget): #if len(groups)==0: ## add user item to Unknown group #i=self.getUserItems(jid)[0].clone() # clone contact item - #i.setData(32,0,QtCore.QVariant([unicode(jid),unicode("contact")])) + #i.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(jid),unicode("contact")]))) #self.main.client.roster['groups']['Unknown'].addChild(i) #else: #for group in groups: ## add user item to the group #i=self.getUserItems(jid)[0].clone() # clone contact item - #i.setData(32,0,QtCore.QVariant([unicode(jid),unicode("contact")])) + #i.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(jid),unicode("contact")]))) #self.main.client.roster['groups'][group].addChild(i) #oldParent.takeChild(0) #if int(oldParent.childCount())<=1: @@ -576,7 +576,7 @@ class rosterWidget(QtGui.QTreeWidget): parent.setText(2,item.text(2)) parent.setText(4,item.text(4)) parent.setIcon(0,item.icon(0)) - parent.setData(32,0,QtCore.QVariant([unicode(jid),unicode("metaparent")])) + parent.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(jid),unicode("metaparent")]))) #parent.setData(32,0,item.data(32,0)) parent.setData(32,4,item.data(32,4)) @@ -619,7 +619,7 @@ class rosterWidget(QtGui.QTreeWidget): item.setText(0,name) item.setText(1,"11111"+unicode(name).lower()) item.setText(2,name) - item.setData(32,0,QtCore.QVariant([unicode(""),unicode("group")])) + item.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(""),unicode("group")]))) item.setIcon(0,QtGui.QIcon("images/"+self.main.config['rosterIconSize']+"/icons/group-closed.png")) color=self.main.ui.groupStyleWidget.palette().color(QtGui.QPalette.Window) item.setBackgroundColor(0,color) @@ -646,7 +646,7 @@ class rosterWidget(QtGui.QTreeWidget): item.setText(1,"9"+unicode(name).lower()) item.setText(2,unicode(name)) item.setText(4,unicode(jid)) - item.setData(32,0,QtCore.QVariant([unicode(jid),unicode("contact")])) + item.setData(32,0,QtCore.QVariant(QtCore.QStringList([unicode(jid),unicode("contact")]))) item.setIcon(0,self.main.getIcon(size=str(self.main.config['rosterIconSize']),status=self.main.icons["9"])) item.setFlags(item.flags()|QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsDragEnabled) color=self.main.ui.userStyleWidget.palette().color(QtGui.QPalette.Window) @@ -700,7 +700,7 @@ class rosterWidget(QtGui.QTreeWidget): # delete from group if group!=None and len(self.main.client.roster['users'][jid].groups)>1: action=contactMenu.addAction(self.tr("Delete from group")) - action.setData(QtCore.QVariant([unicode(jid),u"-"+group.text(2)])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"-"+group.text(2)]))) action.setObjectName("check_group") # delete from roster action=contactMenu.addAction(self.tr("Delete from roster")) @@ -726,17 +726,17 @@ class rosterWidget(QtGui.QTreeWidget): #if len(self.main.client.roster['users'][jid].groups)==0: #if k=="Unknown": #action.setChecked(True) - #action.setData(QtCore.QVariant([unicode(jid),u"-"+unicode(k)])) + #action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"-"+unicode(k)]))) #else: - #action.setData(QtCore.QVariant([unicode(jid),u"+"+unicode(k)])) + #action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"+"+unicode(k)]))) #else: if k in self.main.client.roster['users'][jid].groups: action.setChecked(True) - action.setData(QtCore.QVariant([unicode(jid),u"-"+unicode(k)])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"-"+unicode(k)]))) if len(self.main.client.roster['users'][jid].groups)<=1: action.setEnabled(False) else: - action.setData(QtCore.QVariant([unicode(jid),u"+"+unicode(k)])) + action.setData(QtCore.QVariant(QtCore.QStringList([unicode(jid),u"+"+unicode(k)]))) # signal contactMenu.connect(contactMenu, QtCore.SIGNAL("triggered ( QAction * )"),self.contactMenuTriggered)