Index: files/psi-x-muc-change-affiliation.diff
===================================================================
--- files/psi-x-muc-change-affiliation.diff	(revision 0)
+++ files/psi-x-muc-change-affiliation.diff	(revision 0)
@@ -0,0 +1,56 @@
+# Author: ivan101 (2008.04.15)
+# To apply only after psi-muc-kickban-reasons_fix.diff
+Index: src/gcuserview.cpp
+===================================================================
+--- src/gcuserview.cpp	(revision 1104)
++++ src/gcuserview.cpp	(working copy)
+@@ -350,7 +350,7 @@
+ 	rm->setItemEnabled(14, (!self || lvi->s.mucItem().role() == MUCItem::Moderator) && MUCManager::canSetRole(c->s.mucItem(),lvi->s.mucItem(),MUCItem::Moderator));
+ 	pm->insertItem(tr("Change role"),rm);
+ 
+-	/*Q3PopupMenu* am = new Q3PopupMenu(pm);
++	Q3PopupMenu* am = new Q3PopupMenu(pm);
+ 	am->insertItem(tr("Unaffiliated"),15);
+ 	am->setItemChecked(15, lvi->s.mucItem().affiliation() == MUCItem::NoAffiliation);
+ 	am->setItemEnabled(15, (!self || lvi->s.mucItem().affiliation() == MUCItem::NoAffiliation) && MUCManager::canSetAffiliation(c->s.mucItem(),lvi->s.mucItem(),MUCItem::NoAffiliation));
+@@ -363,14 +363,14 @@
+ 	am->insertItem(tr("Owner"),18);
+ 	am->setItemChecked(18, lvi->s.mucItem().affiliation() == MUCItem::Owner);
+ 	am->setItemEnabled(18,  (!self || lvi->s.mucItem().affiliation() == MUCItem::Owner) && MUCManager::canSetAffiliation(c->s.mucItem(),lvi->s.mucItem(),MUCItem::Owner));
+-	pm->insertItem(tr("Change affiliation"),am);*/
++	pm->insertItem(tr("Change affiliation"),am);
+ 	pm->insertSeparator();
+ 	//pm->insertItem(tr("Send &file"), 4);
+ 	//pm->insertSeparator();
+ 	pm->insertItem(tr("Check &Status"), 2);
+ 	pm->insertItem(IconsetFactory::icon("psi/vCard").icon(), tr("User &Info"), 3);
+ 	int x = pm->exec(pos);
+-	bool enabled = pm->isItemEnabled(x) || rm->isItemEnabled(x) || kickMenu->isItemEnabled(x) || banMenu->isItemEnabled(x);
++	bool enabled = pm->isItemEnabled(x) || rm->isItemEnabled(x) || am->isItemEnabled(x) || kickMenu->isItemEnabled(x) || banMenu->isItemEnabled(x);
+	delete pm;
+
+	if(x == -1 || !enabled || lvi.isNull())
+		return;
+	action(lvi->text(0), lvi->s, x);
+Index: src/groupchatdlg.cpp
+===================================================================
+--- src/groupchatdlg.cpp	(revision 1104)
++++ src/groupchatdlg.cpp	(working copy)
+@@ -1461,7 +1461,7 @@
+ 		if (contact->s.mucItem().role() != MUCItem::Moderator)
+ 			d->mucManager->setRole(nick, MUCItem::Moderator);
+ 	}
+-	/*else if(x == 15) {
++	else if(x == 15) {
+ 		GCUserViewItem *contact = (GCUserViewItem*) ui_.lv_users->findEntry(nick);
+ 		if (contact->s.mucItem().affiliation() != MUCItem::NoAffiliation)
+ 			d->mucManager->setAffiliation(contact->s.mucItem().jid(), MUCItem::NoAffiliation);
+@@ -1480,7 +1480,7 @@
+ 		GCUserViewItem *contact = (GCUserViewItem*) ui_.lv_users->findEntry(nick);
+ 		if (contact->s.mucItem().affiliation() != MUCItem::Owner)
+ 			d->mucManager->setAffiliation(contact->s.mucItem().jid(), MUCItem::Owner);
+-	}*/
++	}
+ }
+ 
+ void GCMainDlg::contextMenuEvent(QContextMenuEvent *)
Index: files/psi-replies-for-message-receipts.diff
===================================================================
--- files/psi-replies-for-message-receipts.diff	(revision 47)
+++ files/psi-replies-for-message-receipts.diff	(working copy)
@@ -1,19 +1,19 @@
-Index: src/psiaccount.cpp
-===================================================================
---- src/psiaccount.cpp	(revision 895)
-+++ src/psiaccount.cpp	(working copy)
-@@ -2136,12 +2136,12 @@
- 	//	m.setType("");
- 
- 	//We must not respond to recepit request automatically - KIS
--	/*if(m.messageReceipt() == ReceiptRequest && !m.id().isEmpty()) {
-+	if(m.messageReceipt() == ReceiptRequest && !m.id().isEmpty()) {
- 		Message tm(m.from());
- 		tm.setId(m.id());
- 		tm.setMessageReceipt(ReceiptReceived);
- 		dj_sendMessage(tm, false);
--	}*/
-+	}
- 
- 	MessageEvent *me = new MessageEvent(m, this);
- 	me->setOriginLocal(false);
+Index: src/psiaccount.cpp
+===================================================================
+--- src/psiaccount.cpp	(revision 1104)
++++ src/psiaccount.cpp	(working copy)
+@@ -2169,12 +2169,12 @@
+ 	//	m.setType("");
+ 
+ 	//We must not respond to recepit request automatically - KIS
+-	/*if(m.messageReceipt() == ReceiptRequest && !m.id().isEmpty()) {
++	if(m.messageReceipt() == ReceiptRequest && !m.id().isEmpty()) {
+ 		Message tm(m.from());
+ 		tm.setId(m.id());
+ 		tm.setMessageReceipt(ReceiptReceived);
+ 		dj_sendMessage(tm, false);
+-	}*/
++	}
+ 
+ 	MessageEvent *me = new MessageEvent(m, this);
+ 	me->setOriginLocal(false);
Index: files/psi-vcard-save.diff
===================================================================
--- files/psi-vcard-save.diff	(revision 47)
+++ files/psi-vcard-save.diff	(working copy)
@@ -1,110 +1,110 @@
-Index: trunk/src/infodlg.cpp
-===================================================================
---- trunk.orig/src/infodlg.cpp	2007-11-22 20:25:31.000000000 +0200
-+++ trunk/src/infodlg.cpp	2007-11-22 20:26:08.000000000 +0200
-@@ -95,6 +95,7 @@
- 	connect(ui_.pb_refresh, SIGNAL(clicked()), this, SLOT(updateStatus()));
- 	connect(ui_.te_desc, SIGNAL(textChanged()), this, SLOT(textChanged()));
- 	connect(ui_.pb_open, SIGNAL(clicked()), this, SLOT(selectPhoto()));
-+	connect(ui_.pb_save, SIGNAL(clicked()), this, SLOT(savePhoto()));
- 	connect(ui_.pb_clear, SIGNAL(clicked()), this, SLOT(clearPhoto()));
- 	connect(ui_.pb_close, SIGNAL(clicked()), this, SLOT(close()));
- 
-@@ -273,6 +274,7 @@
- 		img_scaled = img;
- 	}
- 	ui_.label_photo->setPixmap(QPixmap(img_scaled));
-+	ui_.pb_save->show();
- }
- 
- void InfoDlg::fieldsEnable(bool x)
-@@ -517,6 +519,26 @@
- }
- 
- /**
-+ * Opens a file browser dialog, and if selected, save photo from vcard
-+*/
-+void InfoDlg::savePhoto()
-+{
-+	if (!d->photo.isEmpty()) {
-+		if (PsiOptions::instance()->getOption("options.ui.last-used-open-path").toString().isEmpty())
-+			PsiOptions::instance()->getOption("options.ui.last-used-open-path").toString() = QDir::homeDirPath();
-+		QString str=QFileDialog::getSaveFileName(this, tr("Save photo"), PsiOptions::instance()->getOption("options.ui.last-used-open-path").toString(), tr("Images (*.png *.xpm *.jpg *.PNG *.XPM *.JPG"));
-+		if (!str.isEmpty())
-+		{
-+			QFileInfo fi(str);
-+			PsiOptions::instance()->getOption("options.ui.last-used-open-path").toString()=fi.dirPath();
-+			// Convert imge if required
-+			QImage img(d->photo);
-+			img.save(str);
-+		}
-+	}
-+}
-+
-+/**
-  * Loads the image from the requested URL, and inserts the resized image into the preview box.
-  * \param path image file to load
- */
-@@ -546,6 +568,7 @@
- 	
- 	// the picture changed, so notify there are some changes done
- 	d->te_edited = true;
-+	ui_.pb_save->hide();
- }
- 
- /**
-Index: trunk/src/infodlg.h
-===================================================================
---- trunk.orig/src/infodlg.h	2007-11-22 20:25:11.000000000 +0200
-+++ trunk/src/infodlg.h	2007-11-22 20:26:08.000000000 +0200
-@@ -63,6 +63,7 @@
- 	void doSubmit();
- 	void textChanged();
- 	void selectPhoto();
-+	void savePhoto();
- 	void clearPhoto();
- 
- private:
-Index: trunk/src/info.ui
-===================================================================
---- trunk.orig/src/info.ui	2007-11-22 20:25:11.000000000 +0200
-+++ trunk/src/info.ui	2007-11-22 20:26:08.000000000 +0200
-@@ -160,6 +160,30 @@
-             </widget>
-            </item>
-            <item>
-+            <widget class="QPushButton" name="pb_save" >
-+             <property name="sizePolicy" >
-+              <sizepolicy>
-+               <hsizetype>1</hsizetype>
-+               <vsizetype>0</vsizetype>
-+               <horstretch>0</horstretch>
-+               <verstretch>0</verstretch>
-+              </sizepolicy>
-+             </property>
-+             <property name="text" >
-+              <string>&amp;Save...</string>
-+             </property>
-+             <property name="shortcut" >
-+              <string>Alt+S</string>
-+             </property>
-+             <property name="autoDefault" >
-+              <bool>false</bool>
-+             </property>
-+             <property name="flat" >
-+              <bool>false</bool>
-+             </property>
-+            </widget>
-+           </item>
-+           <item>
-             <widget class="QPushButton" name="pb_clear" >
-              <property name="sizePolicy" >
-               <sizepolicy>
-@@ -503,6 +527,7 @@
-   <tabstop>le_homepage</tabstop>
-   <tabstop>le_email</tabstop>
-   <tabstop>pb_open</tabstop>
-+  <tabstop>pb_save</tabstop>
-   <tabstop>pb_clear</tabstop>
-   <tabstop>pb_submit</tabstop>
-   <tabstop>pb_refresh</tabstop>
+Index: trunk/src/infodlg.cpp
+===================================================================
+--- trunk.orig/src/infodlg.cpp	2007-11-22 20:25:31.000000000 +0200
++++ trunk/src/infodlg.cpp	2007-11-22 20:26:08.000000000 +0200
+@@ -95,6 +95,7 @@
+ 	connect(ui_.pb_refresh, SIGNAL(clicked()), this, SLOT(updateStatus()));
+ 	connect(ui_.te_desc, SIGNAL(textChanged()), this, SLOT(textChanged()));
+ 	connect(ui_.pb_open, SIGNAL(clicked()), this, SLOT(selectPhoto()));
++	connect(ui_.pb_save, SIGNAL(clicked()), this, SLOT(savePhoto()));
+ 	connect(ui_.pb_clear, SIGNAL(clicked()), this, SLOT(clearPhoto()));
+ 	connect(ui_.pb_close, SIGNAL(clicked()), this, SLOT(close()));
+ 
+@@ -273,6 +274,7 @@
+ 		img_scaled = img;
+ 	}
+ 	ui_.label_photo->setPixmap(QPixmap(img_scaled));
++	ui_.pb_save->show();
+ }
+ 
+ void InfoDlg::fieldsEnable(bool x)
+@@ -517,6 +519,26 @@
+ }
+ 
+ /**
++ * Opens a file browser dialog, and if selected, save photo from vcard
++*/
++void InfoDlg::savePhoto()
++{
++	if (!d->photo.isEmpty()) {
++		if (PsiOptions::instance()->getOption("options.ui.last-used-open-path").toString().isEmpty())
++			PsiOptions::instance()->getOption("options.ui.last-used-open-path").toString() = QDir::homeDirPath();
++		QString str=QFileDialog::getSaveFileName(this, tr("Save photo"), PsiOptions::instance()->getOption("options.ui.last-used-open-path").toString(), tr("Images (*.png *.xpm *.jpg *.PNG *.XPM *.JPG"));
++		if (!str.isEmpty())
++		{
++			QFileInfo fi(str);
++			PsiOptions::instance()->getOption("options.ui.last-used-open-path").toString()=fi.dirPath();
++			// Convert imge if required
++			QImage img(d->photo);
++			img.save(str);
++		}
++	}
++}
++
++/**
+  * Loads the image from the requested URL, and inserts the resized image into the preview box.
+  * \param path image file to load
+ */
+@@ -546,6 +568,7 @@
+ 	
+ 	// the picture changed, so notify there are some changes done
+ 	d->te_edited = true;
++	ui_.pb_save->hide();
+ }
+ 
+ /**
+Index: trunk/src/infodlg.h
+===================================================================
+--- trunk.orig/src/infodlg.h	2007-11-22 20:25:11.000000000 +0200
++++ trunk/src/infodlg.h	2007-11-22 20:26:08.000000000 +0200
+@@ -63,6 +63,7 @@
+ 	void doSubmit();
+ 	void textChanged();
+ 	void selectPhoto();
++	void savePhoto();
+ 	void clearPhoto();
+ 
+ private:
+Index: trunk/src/info.ui
+===================================================================
+--- trunk.orig/src/info.ui	2007-11-22 20:25:11.000000000 +0200
++++ trunk/src/info.ui	2007-11-22 20:26:08.000000000 +0200
+@@ -160,6 +160,30 @@
+             </widget>
+            </item>
+            <item>
++            <widget class="QPushButton" name="pb_save" >
++             <property name="sizePolicy" >
++              <sizepolicy>
++               <hsizetype>1</hsizetype>
++               <vsizetype>0</vsizetype>
++               <horstretch>0</horstretch>
++               <verstretch>0</verstretch>
++              </sizepolicy>
++             </property>
++             <property name="text" >
++              <string>&amp;Save...</string>
++             </property>
++             <property name="shortcut" >
++              <string>Alt+S</string>
++             </property>
++             <property name="autoDefault" >
++              <bool>false</bool>
++             </property>
++             <property name="flat" >
++              <bool>false</bool>
++             </property>
++            </widget>
++           </item>
++           <item>
+             <widget class="QPushButton" name="pb_clear" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+@@ -503,6 +527,7 @@
+   <tabstop>le_homepage</tabstop>
+   <tabstop>le_email</tabstop>
+   <tabstop>pb_open</tabstop>
++  <tabstop>pb_save</tabstop>
+   <tabstop>pb_clear</tabstop>
+   <tabstop>pb_submit</tabstop>
+   <tabstop>pb_refresh</tabstop>
Index: files/psi-muc-kickban-reasons.diff
===================================================================
--- files/psi-muc-kickban-reasons.diff	(revision 47)
+++ files/psi-muc-kickban-reasons.diff	(working copy)
@@ -41,13 +41,12 @@
  
  	Q3PopupMenu* rm = new Q3PopupMenu(pm);
  	rm->insertItem(tr("Visitor"),12);
-@@ -369,7 +392,8 @@
+@@ -369,7 +392,7 @@
  	pm->insertItem(tr("Check &Status"), 2);
  	pm->insertItem(IconsetFactory::icon("psi/vCard").icon(), tr("User &Info"), 3);
  	int x = pm->exec(pos);
 -	bool enabled = pm->isItemEnabled(x) || rm->isItemEnabled(x);
-+	bool enabled = pm->isItemEnabled(x) || rm->isItemEnabled(x) 
-+		|| kickMenu->isItemEnabled(x) || banMenu->isItemEnabled(x);
++	bool enabled = pm->isItemEnabled(x) || rm->isItemEnabled(x) || kickMenu->isItemEnabled(x) || banMenu->isItemEnabled(x);
  	delete pm;
  
  	if(x == -1 || !enabled || lvi.isNull())
Index: Manifest
===================================================================
--- Manifest	(revision 47)
+++ Manifest	(working copy)
@@ -2,12 +2,13 @@
 AUX psi-machekku-avatars_in_tooltip.diff 3186 RMD160 0089a9f96787621f20b83f035439964eadf54e52 SHA1 13505d91724b34b4c189004b6286f23c633c55a0 SHA256 f60ab2b71987778292e33310acc014ee5473678c77f02dbd911cd8882bf44921
 AUX psi-machekku-entity_time-0.1.2.diff 19156 RMD160 2202796d81923acf862e893db7d115a315419326 SHA1 9df161b5bc9339432799555edeb7b1517f170b4a SHA256 a4bd6612bf46d0f252bc7122b46f370104568b2f0372800007eeaef1a2ff12e8
 AUX psi-mood-icons.diff 11486 RMD160 7ddf3c85cbe50bf980e1a66cf7da5b217a6e7552 SHA1 0ed1618abd9a640894c9f62ebb4fe4c364ab77df SHA256 e47553136cff28f9329b07e4edfd53a3c4125b1000584f6a58b1ec76a64ed341
-AUX psi-muc-kickban-reasons.diff 11304 RMD160 7544722f7d63fe26a82a459523de1abc00f16010 SHA1 3eff30e6fa8a7b96c4f01262da5d918a4c4eab6f SHA256 fde2d8241dc0d2ada4d1f631882ec3f192269bcd2a9f4fcc3ea053cbba79ce98
+AUX psi-muc-kickban-reasons.diff 11300 RMD160 25cf8d16bc78161cb3573271910f12e0342d37bf SHA1 64172e1a939ea88046703eeb4af105514860c072 SHA256 e526b385961b92acf0403f426ac6a0fd96f1aac850947f9cf51c46a547fd9433
 AUX psi-muc-nickclick.diff 3933 RMD160 3529f6a4f394cc25f490c9b3cabefa8456f7a93b SHA1 bf51dfe42acb0665bdd3eeee3af405118ad9e573 SHA256 ba82aa802e4eb2d45b0cbec7944e022b26a7dda6bd442ecc85a34918465bb600
 AUX psi-muc-topic.diff 5328 RMD160 adcf6aac77e32b638eeb306bcc06bccb10c017cd SHA1 4e23a56e1cc14332e66a960483deba45158cf88c SHA256 c949396999d6d1ea7e9229d0b8565e3c4bc537147dbfce8b188e72fce9e9aa9f
 AUX psi-muc-user-count.diff 2182 RMD160 406867c7389143859cca09cdce66f5db5c96eaa7 SHA1 1714d556b7ddbf68682501facdc119463fc33f24 SHA256 9b7d729d81fb17830f63850864cae4bdf90df5316a84865850724e391780168b
-AUX psi-replies-for-message-receipts.diff 639 RMD160 747cb29f7ec356a91c1c98e2a888a38aafcc903a SHA1 dcfa9f3374c8051ba236a22e3efcbb6e36aed5b5 SHA256 4d1f3a8ada1ebbc2a924da4df01efcef9261725844c0c59c7cc60a64c8ed56ef
-AUX psi-vcard-save.diff 3884 RMD160 ac1b7a4b68de4dee0950ed24bbe18d6d23b33dbd SHA1 9d824e53fe70905a6a50146b15906818e73b1ff5 SHA256 8ef75971c59baf20a1ad44d32c9930b0f92ffb740c6c3ccc653b3322e7c967f8
+AUX psi-replies-for-message-receipts.diff 621 RMD160 684ebf2270b14393048c2219f67675f441bf5dec SHA1 07923509f7c2158e38afc7473cf37048d311e8b5 SHA256 b981c2686f6b546a54fff167a885edf8e5a71875ffb382afcb2c451d65ede8e4
+AUX psi-vcard-save.diff 3774 RMD160 5e3df36dd31556a8db7bcacbc52adbd46c0c512e SHA1 5515cf61aeefda8c76727ea44ba7bfef7ba034c8 SHA256 c95e55e6658cb896372933fd5104696df4db33fbd92e0e5e47ea58676ad2e9ba
+AUX psi-x-muc-change-affiliation.diff 2781 RMD160 109f640d8b28bb9f8c0d209d5712a5229ba242f8 SHA1 5c3dcaa668fecaff5426f864b90c2a6dbd06351d SHA256 2e92e2e9ba56630251048bbdd0274da44755d3bea4b36e7b0d885ba3035b7d77
 EBUILD psi-9999.ebuild 2072 RMD160 957c975a926b894dd294071d9962a8639bd57117 SHA1 87b1af4cc2b86b9c6debc33bb8a6d8300c234c2b SHA256 da327a5a9e84f2791343389dc427118426a52b325a6dafc498bf3f18aa815e0c
 MISC ChangeLog 14655 RMD160 3ebc5c19657f634f3b60a127b723714abae20d3f SHA1 6f030f9a7140ba5b4eb52dcefac12dabe5a0c90e SHA256 3a01961cee28347f333f08b7affd68de9aee9bc86f784df52c2ea8516bad2e62
 MISC metadata.xml 303 RMD160 deecd227e21d24af6eae6f787e0efd65765741e6 SHA1 a379c487e73d24f68f1036f913c745775a6e9846 SHA256 ea6a7b120f076cc2fa66725d5361639a74895eeb3adc404a887da3be921dfb92
