From eb836807860caa6bb724f907e0591d77f9b51bc1 Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Wed, 30 Mar 2011 15:23:10 +0200
Subject: [PATCH] ability to invite a room occupant to another room if we know
 his real JID directly from the groupchat contact menu. Fixes #4443

---
 data/gui/gc_occupants_menu.ui | 13 +++++++++++++
 src/groupchat_control.py      | 10 ++++++++++
 src/gui_menu_builder.py       |  4 +++-
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/data/gui/gc_occupants_menu.ui b/data/gui/gc_occupants_menu.ui
index b6b8688e6e..0c907dec77 100644
--- a/data/gui/gc_occupants_menu.ui
+++ b/data/gui/gc_occupants_menu.ui
@@ -94,6 +94,15 @@
         </child>
       </object>
     </child>
+    <child>
+      <object class="GtkImageMenuItem" id="invite_menuitem">
+        <property name="label" translatable="yes">In_vite to</property>
+        <property name="visible">True</property>
+        <property name="use_underline">True</property>
+        <property name="image">image7</property>
+        <property name="use_stock">False</property>
+      </object>
+    </child>
     <child>
       <object class="GtkSeparatorMenuItem" id="separator6">
         <property name="visible">True</property>
@@ -185,4 +194,8 @@
     <property name="stock">gtk-justify-fill</property>
     <property name="icon-size">1</property>
   </object>
+  <object class="GtkImage" id="image7">
+    <property name="visible">True</property>
+    <property name="stock">gtk-missing-image</property>
+  </object>
 </interface>
diff --git a/src/groupchat_control.py b/src/groupchat_control.py
index f5a6465581..717c48c4e6 100644
--- a/src/groupchat_control.py
+++ b/src/groupchat_control.py
@@ -2336,6 +2336,16 @@ class GroupchatControl(ChatControlBase):
             jid)
         self.handlers[id_] = item
 
+        item = xml.get_object('invite_menuitem')
+        muc_icon = gtkgui_helpers.load_icon('muc_active')
+        if muc_icon:
+            item.set_image(muc_icon)
+        if c.jid and c.name != self.nick:
+            gui_menu_builder.build_invite_submenu(item, ((c, self.account),),
+                ignore_rooms=[self.room_jid])
+        else:
+            item.set_sensitive(False)
+
         item = xml.get_object('information_menuitem')
         id_ = item.connect('activate', self.on_info, nick)
         self.handlers[id_] = item
diff --git a/src/gui_menu_builder.py b/src/gui_menu_builder.py
index 4645c46b45..1eed94dd58 100644
--- a/src/gui_menu_builder.py
+++ b/src/gui_menu_builder.py
@@ -62,7 +62,7 @@ def build_resources_submenu(contacts, account, action, room_jid=None,
 
     return sub_menu
 
-def build_invite_submenu(invite_menuitem, list_):
+def build_invite_submenu(invite_menuitem, list_, ignore_rooms=[]):
     """
     list_ in a list of (contact, account)
     """
@@ -126,6 +126,8 @@ def build_invite_submenu(invite_menuitem, list_):
     message_control.TYPE_GC) + minimized_controls:
         acct = gc_control.account
         room_jid = gc_control.room_jid
+        if room_jid in ignore_rooms:
+            continue
         if room_jid in gajim.gc_connected[acct] and \
         gajim.gc_connected[acct][room_jid] and \
         contacts_transport == gajim.get_transport_name_from_jid(room_jid):
-- 
GitLab