applying liorithiel's patch to make gc occupant popup via glade and more ergonomic
This commit is contained in:
parent
9b11b98af2
commit
34f9313afb
2 changed files with 197 additions and 78 deletions
|
@ -668,6 +668,36 @@ class GroupchatWindow(chat.Chat):
|
|||
self.plugin.windows[self.account]['chats'][fjid].set_active_tab(fjid)
|
||||
self.plugin.windows[self.account]['chats'][fjid].window.present()
|
||||
|
||||
def on_voice_checkmenuitem_activate(self, widget, room_jid, nick):
|
||||
if widget.get_active():
|
||||
self.grant_voice(widget, room_jid, nick)
|
||||
else:
|
||||
self.revoke_voice(widget, room_jid, nick)
|
||||
|
||||
def on_moderator_checkmenuitem_activate(self, widget, room_jid, nick):
|
||||
if widget.get_active():
|
||||
self.grant_moderator(widget, room_jid, nick)
|
||||
else:
|
||||
self.revoke_moderator(widget, room_jid, nick)
|
||||
|
||||
def on_member_checkmenuitem_activate(self, widget, room_jid, jid):
|
||||
if widget.get_active():
|
||||
self.grant_membership(widget, room_jid, jid)
|
||||
else:
|
||||
self.revoke_membership(widget, room_jid, jid)
|
||||
|
||||
def on_admin_checkmenuitem_activate(self, widget, room_jid, jid):
|
||||
if widget.get_active():
|
||||
self.grant_admin(widget, room_jid, jid)
|
||||
else:
|
||||
self.revoke_admin(widget, room_jid, jid)
|
||||
|
||||
def on_owner_checkmenuitem_activate(self, widget, room_jid, jid):
|
||||
if widget.get_active():
|
||||
self.grant_owner(widget, room_jid, jid)
|
||||
else:
|
||||
self.revoke_owner(widget, room_jid, jid)
|
||||
|
||||
def mk_menu(self, room_jid, event, iter):
|
||||
"""Make user's popup menu"""
|
||||
model = self.list_treeview[room_jid].get_model()
|
||||
|
@ -682,94 +712,69 @@ class GroupchatWindow(chat.Chat):
|
|||
user_affiliation = self.contacts[room_jid][user_nick].affiliation
|
||||
user_role = self.get_role(room_jid, user_nick)
|
||||
|
||||
menu = gtk.Menu()
|
||||
item = gtk.MenuItem(_('_Privileges'))
|
||||
menu.append(item)
|
||||
|
||||
sub_menu = gtk.Menu()
|
||||
item.set_submenu(sub_menu)
|
||||
# making menu from glade
|
||||
xml = gtk.glade.XML(GTKGUI_GLADE, 'gc_occupants_menu', APP)
|
||||
|
||||
# these conditions were taken from JEP 0045
|
||||
if (user_role == 'moderator'):
|
||||
if (target_role in ('visitor','participant')):
|
||||
item = gtk.MenuItem(_('_Kick'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.kick, room_jid, nick)
|
||||
|
||||
if (target_role == 'visitor'):
|
||||
item = gtk.MenuItem(_('_Grant Voice'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.grant_voice, room_jid, nick)
|
||||
# I know it is complicated, but this is how does JEP0045 descibe
|
||||
# 'revoking voice' privilege
|
||||
elif (user_affiliation=='member' and target_affiliation=='none') or \
|
||||
((user_affiliation in ('admin','owner')) and \
|
||||
(target_affiliation in ('none','member'))):
|
||||
item = gtk.MenuItem(_('_Revoke Voice'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.revoke_voice, room_jid, nick)
|
||||
item = xml.get_widget('kick_menuitem')
|
||||
item.connect('activate', self.kick, room_jid, nick)
|
||||
if user_role != 'moderator' or target_role == 'moderator':
|
||||
item.set_sensitive(False)
|
||||
|
||||
if (user_affiliation in ('admin','owner')):
|
||||
item = gtk.MenuItem()
|
||||
sub_menu.append(item)
|
||||
item = xml.get_widget('voice_checkmenuitem')
|
||||
item.set_active(target_role != 'visitor')
|
||||
if user_role != 'moderator' or \
|
||||
user_affiliation == 'none' or \
|
||||
(user_affiliation=='member' and target_affiliation!='none') or \
|
||||
target_affiliation in ('admin','owner'):
|
||||
item.set_sensitive(False)
|
||||
item.connect('activate', self.on_voice_checkmenuitem_activate, room_jid, nick)
|
||||
|
||||
if not target_role == 'moderator':
|
||||
item = gtk.MenuItem(_('_Grant Moderator'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.grant_moderator, room_jid, nick)
|
||||
elif target_affiliation in ('none','member'):
|
||||
item = gtk.MenuItem(_('_Revoke Moderator'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.revoke_moderator, room_jid, nick)
|
||||
item = xml.get_widget('moderator_checkmenuitem')
|
||||
item.set_active(target_role == 'moderator')
|
||||
if not user_affiliation in ('admin','owner') or \
|
||||
target_affiliation in ('admin','owner'):
|
||||
item.set_sensitive(False)
|
||||
item.connect('activate', self.on_moderator_checkmenuitem_activate, room_jid, nick)
|
||||
|
||||
if (target_affiliation in ('none','member')) or \
|
||||
(user_affiliation=='owner'):
|
||||
item = gtk.MenuItem(_('_Ban'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.ban, room_jid, jid)
|
||||
item = xml.get_widget('ban_menuitem')
|
||||
if not user_affiliation in ('admin','owner') or \
|
||||
(target_affiliation in ('admin','owner') and user_affiliation != 'owner'):
|
||||
item.set_sensitive(False)
|
||||
item.connect('activate', self.ban, room_jid, jid)
|
||||
|
||||
if target_affiliation=='none':
|
||||
item = gtk.MenuItem(_('_Grant Membership'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.grant_membership, room_jid, jid)
|
||||
if (target_affiliation in ('member')) or \
|
||||
(target_affiliation in ('admin','owner') and (user_affiliation=='owner')):
|
||||
item = gtk.MenuItem(_('_Revoke Membership'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.revoke_membership, room_jid, jid)
|
||||
item = xml.get_widget('member_checkmenuitem')
|
||||
item.set_active(target_affiliation != 'none')
|
||||
if not user_affiliation in ('admin','owner') or \
|
||||
(user_affiliation != 'owner' and target_affiliation in ('admin','owner')):
|
||||
item.set_sensitive(False)
|
||||
item.connect('activate', self.on_member_checkmenuitem_activate, room_jid, jid)
|
||||
|
||||
if user_affiliation=='owner':
|
||||
if (not target_affiliation=='admin'):
|
||||
item = gtk.MenuItem(_('_Grant Admin'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.grant_admin, room_jid, jid)
|
||||
else:
|
||||
item = gtk.MenuItem(_('_Revoke Admin'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.revoke_admin, room_jid, jid)
|
||||
item = xml.get_widget('admin_checkmenuitem')
|
||||
item.set_active(target_affiliation in ('admin','owner'))
|
||||
if not user_affiliation == 'owner':
|
||||
item.set_sensitive(False)
|
||||
item.connect('activate', self.on_admin_checkmenuitem_activate, room_jid, jid)
|
||||
|
||||
if (not target_affiliation=='owner'):
|
||||
item = gtk.MenuItem(_('_Grant Owner'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.grant_owner, room_jid, jid)
|
||||
else:
|
||||
item = gtk.MenuItem(_('_Revoke Owner'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.revoke_owner, room_jid, jid)
|
||||
item = xml.get_widget('owner_checkmenuitem')
|
||||
item.set_active(target_affiliation == 'owner')
|
||||
if not user_affiliation == 'owner':
|
||||
item.set_sensitive(False)
|
||||
item.connect('activate', self.on_owner_checkmenuitem_activate, room_jid, jid)
|
||||
|
||||
item = gtk.MenuItem(_('_Information'))
|
||||
menu.append(item)
|
||||
item = xml.get_widget('information_menuitem')
|
||||
item.connect('activate', self.on_info, room_jid, nick)
|
||||
|
||||
if jid:
|
||||
item = gtk.MenuItem(_('_Add to Roster'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_add_to_roster, jid)
|
||||
|
||||
item = gtk.MenuItem(_('Send _Private Message'))
|
||||
menu.append(item)
|
||||
item = xml.get_widget('add_to_roster_menuitem')
|
||||
if not jid:
|
||||
item.set_sensitive(False)
|
||||
item.connect('activate', self.on_add_to_roster, jid)
|
||||
|
||||
item = xml.get_widget('send_private_message_menuitem')
|
||||
item.connect('activate', self.on_send_pm, model, iter)
|
||||
|
||||
|
||||
# show the popup now!
|
||||
menu = xml.get_widget('gc_occupants_menu')
|
||||
menu.popup(None, None, None, event.button, event.time)
|
||||
menu.show_all()
|
||||
menu.reposition()
|
||||
|
|
118
src/gtkgui.glade
118
src/gtkgui.glade
|
@ -15402,6 +15402,8 @@ the Jabber network.</property>
|
|||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="window_position">GTK_WIN_POS_NONE</property>
|
||||
<property name="modal">False</property>
|
||||
<property name="default_width">400</property>
|
||||
<property name="default_height">250</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="destroy_with_parent">False</property>
|
||||
<property name="decorated">True</property>
|
||||
|
@ -15497,7 +15499,6 @@ the Jabber network.</property>
|
|||
<child>
|
||||
<widget class="GtkLabel" id="count_chars_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="label" translatable="yes">0</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
|
@ -15568,7 +15569,7 @@ the Jabber network.</property>
|
|||
<property name="overwrite">False</property>
|
||||
<property name="accepts_tab">True</property>
|
||||
<property name="justification">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap_mode">GTK_WRAP_NONE</property>
|
||||
<property name="wrap_mode">GTK_WRAP_WORD</property>
|
||||
<property name="cursor_visible">True</property>
|
||||
<property name="pixels_above_lines">0</property>
|
||||
<property name="pixels_below_lines">0</property>
|
||||
|
@ -15687,4 +15688,117 @@ the Jabber network.</property>
|
|||
</child>
|
||||
</widget>
|
||||
|
||||
<widget class="GtkMenu" id="gc_occupants_menu">
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="group_chat_actions_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Occupant Actions</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenu" id="group_chat_actions_menuitem_menu">
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckMenuItem" id="voice_checkmenuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Voice</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">False</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckMenuItem" id="moderator_checkmenuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Mo_derator</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">False</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkSeparatorMenuItem" id="separator5">
|
||||
<property name="visible">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckMenuItem" id="member_checkmenuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Member</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">False</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckMenuItem" id="admin_checkmenuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Admin</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">False</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckMenuItem" id="owner_checkmenuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Owner</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">False</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkSeparatorMenuItem" id="separator4">
|
||||
<property name="visible">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="kick_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Kick</property>
|
||||
<property name="use_underline">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="ban_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Ban</property>
|
||||
<property name="use_underline">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="information_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Information</property>
|
||||
<property name="use_underline">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="add_to_roster_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Add to Roster</property>
|
||||
<property name="use_underline">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="send_private_message_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Send Private Message</property>
|
||||
<property name="use_underline">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
</glade-interface>
|
||||
|
|
Loading…
Add table
Reference in a new issue