diff --git a/data/glade/chat_control_popup_menu.glade b/data/glade/chat_control_popup_menu.glade deleted file mode 100644 index 1c923adbd6719257b04c9d848db8b1a5431c1d1e..0000000000000000000000000000000000000000 --- a/data/glade/chat_control_popup_menu.glade +++ /dev/null @@ -1,103 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> -<!--*- mode: xml -*--> -<glade-interface> - <widget class="GtkMenu" id="chat_control_popup_menu"> - <child> - <widget class="GtkImageMenuItem" id="add_to_roster_menuitem"> - <property name="no_show_all">True</property> - <property name="label" translatable="yes">_Add to Roster</property> - <property name="use_underline">True</property> - <signal name="activate" handler="_on_add_to_roster_menuitem_activate"/> - <child internal-child="image"> - <widget class="GtkImage" id="image1372"> - <property name="visible">True</property> - <property name="stock">gtk-add</property> - <property name="icon_size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="send_file_menuitem"> - <property name="no_show_all">True</property> - <property name="label" translatable="yes">Send _File</property> - <property name="use_underline">True</property> - <signal name="activate" handler="_on_send_file_menuitem_activate"/> - <child internal-child="image"> - <widget class="GtkImage" id="image1371"> - <property name="visible">True</property> - <property name="stock">gtk-save</property> - <property name="icon_size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="convert_to_groupchat"> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="no_show_all">True</property> - <property name="label" translatable="yes">Invite _Contacts</property> - <property name="use_underline">True</property> - <child internal-child="image"> - <widget class="GtkImage" id="menu-item-image4"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock">gtk-missing-image</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkSeparatorMenuItem" id="separatormenuitem2"> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="no_show_all">True</property> - </widget> - </child> - <child> - <widget class="GtkCheckMenuItem" id="toggle_gpg_menuitem"> - <property name="visible">True</property> - <property name="label" translatable="yes">Toggle Open_PGP Encryption</property> - <property name="use_underline">True</property> - <signal name="activate" handler="_on_toggle_gpg_menuitem_activate"/> - </widget> - </child> - <child> - <widget class="GtkCheckMenuItem" id="toggle_e2e_menuitem"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Toggle End to End Encryption</property> - <property name="use_underline">True</property> - <signal name="activate" handler="_on_toggle_e2e_menuitem_activate"/> - </widget> - </child> - <child> - <widget class="GtkSeparatorMenuItem" id="separatormenuitem1"> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="no_show_all">True</property> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="information_menuitem"> - <property name="no_show_all">True</property> - <property name="label">gtk-info</property> - <property name="use_underline">True</property> - <property name="use_stock">True</property> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="history_menuitem"> - <property name="no_show_all">True</property> - <property name="label" translatable="yes">_History</property> - <property name="use_underline">True</property> - <child internal-child="image"> - <widget class="GtkImage" id="image1370"> - <property name="visible">True</property> - <property name="stock">gtk-justify-fill</property> - <property name="icon_size">1</property> - </widget> - </child> - </widget> - </child> - </widget> -</glade-interface> diff --git a/data/glade/roster_contact_context_menu.glade b/data/glade/roster_contact_context_menu.glade index 0629a8029a5e7bb1c9aebe1bee0c8c194b729ca7..4ca3a515452899394cd3ece8780c23a1b3a9a32f 100644 --- a/data/glade/roster_contact_context_menu.glade +++ b/data/glade/roster_contact_context_menu.glade @@ -1,102 +1,150 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> -<!--*- mode: xml -*--> +<?xml version="1.0"?> <glade-interface> + <!-- interface-requires gtk+ 2.16 --> + <!-- interface-naming-policy toplevel-contextual --> <widget class="GtkMenu" id="roster_contact_context_menu"> <child> <widget class="GtkImageMenuItem" id="start_chat_menuitem"> - <property name="visible">True</property> <property name="label" translatable="yes">Start _Chat</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1701"> + <widget class="GtkImage" id="image2"> <property name="visible">True</property> <property name="stock">gtk-jump-to</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="send_single_message_menuitem"> - <property name="visible">True</property> <property name="label" translatable="yes">Send Single _Message...</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1703"> + <widget class="GtkImage" id="image3"> <property name="visible">True</property> <property name="stock">gtk-new</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="send_file_menuitem"> - <property name="visible">True</property> <property name="label" translatable="yes">Send _File...</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1706"> + <widget class="GtkImage" id="image4"> <property name="visible">True</property> <property name="stock">gtk-save</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="invite_menuitem"> - <property name="visible">True</property> <property name="label" translatable="yes">In_vite to</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1704"> + <widget class="GtkImage" id="image5"> <property name="visible">True</property> - <property name="stock">gtk-go-back</property> - <property name="icon_size">1</property> + <property name="stock">gtk-missing-image</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> - <widget class="GtkSeparatorMenuItem" id="above_send_file_separator"> + <widget class="GtkImageMenuItem" id="convert_to_groupchat_menuitem"> + <property name="label" translatable="yes">Invite _Contacts</property> <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">False</property> + <child internal-child="image"> + <widget class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="stock">gtk-missing-image</property> + <property name="icon-size">1</property> + </widget> + </child> </widget> </child> <child> - <widget class="GtkImageMenuItem" id="send_custom_status_menuitem"> + <widget class="GtkSeparatorMenuItem" id="encryption_separator"> <property name="visible">True</property> + </widget> + </child> + <child> + <widget class="GtkCheckMenuItem" id="toggle_gpg_menuitem"> + <property name="visible">True</property> + <property name="label" translatable="yes">Toggle Open_PGP Encryption</property> + <property name="use_underline">True</property> + </widget> + </child> + <child> + <widget class="GtkCheckMenuItem" id="toggle_e2e_menuitem"> + <property name="visible">True</property> + <property name="label" translatable="yes">Toggle End to End Encryption</property> + <property name="use_underline">True</property> + </widget> + </child> + <child> + <widget class="GtkSeparatorMenuItem" id="menuitem3"> + <property name="visible">True</property> + </widget> + </child> + <child> + <widget class="GtkImageMenuItem" id="send_custom_status_menuitem"> <property name="label" translatable="yes">Send Cus_tom Status</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child> <widget class="GtkMenu" id="menu5"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> </widget> </child> + <child internal-child="image"> + <widget class="GtkImage" id="image6"> + <property name="visible">True</property> + <property name="stock">gtk-missing-image</property> + <property name="icon-size">1</property> + </widget> + </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="execute_command_menuitem"> + <property name="label" translatable="yes">E_xecute Command...</property> <property name="visible">True</property> - <property name="label" translatable="yes">Execute Command...</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1709"> + <widget class="GtkImage" id="image7"> <property name="visible">True</property> <property name="stock">gtk-execute</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="manage_contact"> + <property name="label" translatable="yes">_Manage Contact</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">_Manage Contact</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child> <widget class="GtkMenu" id="menu2"> <property name="visible">True</property> @@ -105,11 +153,12 @@ <widget class="GtkImageMenuItem" id="rename_menuitem"> <property name="label" translatable="yes">_Rename...</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1705"> + <widget class="GtkImage" id="image9"> <property name="visible">True</property> <property name="stock">gtk-refresh</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> @@ -118,12 +167,12 @@ <widget class="GtkImageMenuItem" id="edit_groups_menuitem"> <property name="label" translatable="yes">Edit _Groups...</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="menu-item-image21"> + <widget class="GtkImage" id="image10"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="stock">gtk-edit</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> @@ -132,42 +181,44 @@ <widget class="GtkImageMenuItem" id="assign_openpgp_key_menuitem"> <property name="label" translatable="yes">Assign Open_PGP Key...</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <signal name="activate" handler="on_assign_openpgp_key_menuitem_activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image1707"> + <widget class="GtkImage" id="image11"> <property name="visible">True</property> <property name="stock">gtk-dialog-authentication</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="set_custom_avatar_menuitem"> + <property name="label" translatable="yes">Set Custom _Avatar...</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Set Custom _Avatar...</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="menu-item-image20"> + <widget class="GtkImage" id="image12"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="stock">gtk-orientation-portrait</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="add_special_notification_menuitem"> - <property name="no_show_all">True</property> <property name="label" translatable="yes">Add Special _Notification...</property> + <property name="no_show_all">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1708"> + <widget class="GtkImage" id="image13"> <property name="visible">True</property> <property name="stock">gtk-info</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> @@ -182,46 +233,50 @@ <widget class="GtkImageMenuItem" id="subscription_menuitem"> <property name="label" translatable="yes">_Subscription</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child> <widget class="GtkMenu" id="subscription_menuitem_menu"> <child> <widget class="GtkImageMenuItem" id="resend_authorization_to_menuitem"> - <property name="visible">True</property> <property name="label" translatable="yes">_Allow him/her to see my status</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1711"> + <widget class="GtkImage" id="image15"> <property name="visible">True</property> <property name="stock">gtk-go-up</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="rerequest_authorization_from_menuitem"> - <property name="visible">True</property> <property name="label" translatable="yes">A_sk to see his/her status</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1712"> + <widget class="GtkImage" id="image16"> <property name="visible">True</property> <property name="stock">gtk-go-down</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="forbid_him/her_to_see_my_status1"> - <property name="visible">True</property> <property name="label" translatable="yes">_Forbid him/her to see my status</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1713"> + <widget class="GtkImage" id="image17"> <property name="visible">True</property> <property name="stock">gtk-stop</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> @@ -229,66 +284,70 @@ </widget> </child> <child internal-child="image"> - <widget class="GtkImage" id="image1710"> + <widget class="GtkImage" id="image14"> <property name="visible">True</property> <property name="stock">gtk-dialog-question</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="unblock_menuitem"> - <property name="visible">True</property> <property name="label" translatable="yes">_Unblock</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1715"> + <widget class="GtkImage" id="image18"> <property name="visible">True</property> <property name="stock">gtk-stop</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="block_menuitem"> - <property name="visible">True</property> <property name="label" translatable="yes">_Block</property> + <property name="visible">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1714"> + <widget class="GtkImage" id="image19"> <property name="visible">True</property> <property name="stock">gtk-stop</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="unignore_menuitem"> - <property name="no_show_all">True</property> <property name="label" translatable="yes">_Unignore</property> + <property name="no_show_all">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="menu-item-image22"> + <widget class="GtkImage" id="image20"> <property name="visible">True</property> <property name="stock">gtk-stop</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> <widget class="GtkImageMenuItem" id="ignore_menuitem"> - <property name="no_show_all">True</property> <property name="label" translatable="yes">_Ignore</property> + <property name="no_show_all">True</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="menu-item-image23"> + <widget class="GtkImage" id="image21"> <property name="visible">True</property> <property name="stock">gtk-stop</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> @@ -297,11 +356,12 @@ <widget class="GtkImageMenuItem" id="add_to_roster_menuitem"> <property name="label" translatable="yes">_Add to Roster...</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1716"> + <widget class="GtkImage" id="image22"> <property name="visible">True</property> <property name="stock">gtk-add</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> @@ -310,11 +370,12 @@ <widget class="GtkImageMenuItem" id="remove_from_roster_menuitem"> <property name="label" translatable="yes">Remo_ve</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1717"> + <widget class="GtkImage" id="image23"> <property name="visible">True</property> <property name="stock">gtk-remove</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> @@ -322,17 +383,16 @@ </widget> </child> <child internal-child="image"> - <widget class="GtkImage" id="menu-item-image19"> + <widget class="GtkImage" id="image8"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="stock">gtk-properties</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> </child> <child> - <widget class="GtkSeparatorMenuItem" id="separator6"> + <widget class="GtkSeparatorMenuItem" id="last_separator"> <property name="visible">True</property> </widget> </child> @@ -347,11 +407,12 @@ <widget class="GtkImageMenuItem" id="history_menuitem"> <property name="label" translatable="yes">_History</property> <property name="use_underline">True</property> + <property name="use_stock">False</property> <child internal-child="image"> - <widget class="GtkImage" id="image1718"> + <widget class="GtkImage" id="image24"> <property name="visible">True</property> <property name="stock">gtk-justify-fill</property> - <property name="icon_size">1</property> + <property name="icon-size">1</property> </widget> </child> </widget> diff --git a/data/glade/zeroconf_contact_context_menu.glade b/data/glade/zeroconf_contact_context_menu.glade deleted file mode 100644 index 93d901f1c14997aa0ab3eca795320cb080def1e4..0000000000000000000000000000000000000000 --- a/data/glade/zeroconf_contact_context_menu.glade +++ /dev/null @@ -1,169 +0,0 @@ -<?xml version="1.0"?> -<glade-interface> - <!-- interface-requires gtk+ 2.16 --> - <!-- interface-naming-policy toplevel-contextual --> - <widget class="GtkMenu" id="zeroconf_contact_context_menu"> - <child> - <widget class="GtkImageMenuItem" id="start_chat_menuitem"> - <property name="label">Start _Chat</property> - <property name="visible">True</property> - <property name="use_underline">True</property> - <property name="use_stock">False</property> - <child internal-child="image"> - <widget class="GtkImage" id="image9"> - <property name="visible">True</property> - <property name="stock">gtk-jump-to</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="send_file_menuitem"> - <property name="label">Send _File</property> - <property name="visible">True</property> - <property name="use_underline">True</property> - <property name="use_stock">False</property> - <child internal-child="image"> - <widget class="GtkImage" id="image10"> - <property name="visible">True</property> - <property name="stock">gtk-save</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkSeparatorMenuItem" id="above_send_file_separator"> - <property name="visible">True</property> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="execute_command_menuitem"> - <property name="label" translatable="yes">Execute Command...</property> - <property name="visible">True</property> - <property name="use_stock">False</property> - <child internal-child="image"> - <widget class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-execute</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="manage_contact"> - <property name="label">_Manage Contact</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="use_underline">True</property> - <property name="use_stock">False</property> - <child> - <widget class="GtkMenu" id="menu2"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <widget class="GtkImageMenuItem" id="rename_menuitem"> - <property name="label">_Rename</property> - <property name="use_underline">True</property> - <property name="use_stock">False</property> - <child internal-child="image"> - <widget class="GtkImage" id="image7"> - <property name="visible">True</property> - <property name="stock">gtk-refresh</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="edit_groups_menuitem"> - <property name="label">Edit _Groups</property> - <property name="use_underline">True</property> - <property name="use_stock">False</property> - <child internal-child="image"> - <widget class="GtkImage" id="image6"> - <property name="visible">True</property> - <property name="stock">gtk-edit</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="assign_openpgp_key_menuitem"> - <property name="label">Assign Open_PGP Key</property> - <property name="use_underline">True</property> - <property name="use_stock">False</property> - <signal name="activate" handler="on_assign_openpgp_key_menuitem_activate"/> - <child internal-child="image"> - <widget class="GtkImage" id="image5"> - <property name="visible">True</property> - <property name="stock">gtk-dialog-authentication</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="add_special_notification_menuitem"> - <property name="label">Add Special _Notification</property> - <property name="no_show_all">True</property> - <property name="use_underline">True</property> - <property name="use_stock">False</property> - <child internal-child="image"> - <widget class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="stock">gtk-info</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - </widget> - </child> - <child internal-child="image"> - <widget class="GtkImage" id="image8"> - <property name="visible">True</property> - <property name="stock">gtk-properties</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkSeparatorMenuItem" id="separator6"> - <property name="visible">True</property> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="information_menuitem"> - <property name="label">_Information</property> - <property name="use_underline">True</property> - <property name="use_stock">False</property> - <child internal-child="image"> - <widget class="GtkImage" id="image4"> - <property name="visible">True</property> - <property name="stock">gtk-info</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkImageMenuItem" id="history_menuitem"> - <property name="label">_History</property> - <property name="use_underline">True</property> - <property name="use_stock">False</property> - <child internal-child="image"> - <widget class="GtkImage" id="image2"> - <property name="visible">True</property> - <property name="stock">gtk-justify-fill</property> - <property name="icon-size">1</property> - </widget> - </child> - </widget> - </child> - </widget> -</glade-interface> diff --git a/src/chat_control.py b/src/chat_control.py index 75ee9ef4a2b51bc3f0f995e19bdb0e7b3a52df18..4881c5cf1ef58c67b7c296744603db5bcaf62bc1 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -33,6 +33,7 @@ import gtk import pango import gobject import gtkgui_helpers +import gui_menu_builder import message_control import dialogs import history_window @@ -874,7 +875,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): def on_actions_button_clicked(self, widget): '''popup action menu''' - menu = self.prepare_context_menu(True) + menu = self.prepare_context_menu(hide_buttonbar_items=True) menu.show_all() gtkgui_helpers.popup_emoticons_under_button(menu, widget, self.parent_win) @@ -2074,138 +2075,19 @@ class ChatControl(ChatControlBase): return tab_img - def prepare_context_menu(self, hide_buttonbar_entries = False): + def prepare_context_menu(self, hide_buttonbar_items=False): '''sets compact view menuitem active state sets active and sensitivity state for toggle_gpg_menuitem sets sensitivity for history_menuitem (False for tranasports) and file_transfer_menuitem and hide()/show() for add_to_roster_menuitem ''' - xml = gtkgui_helpers.get_glade('chat_control_popup_menu.glade') - menu = xml.get_widget('chat_control_popup_menu') - - add_to_roster_menuitem = xml.get_widget('add_to_roster_menuitem') - history_menuitem = xml.get_widget('history_menuitem') - toggle_gpg_menuitem = xml.get_widget('toggle_gpg_menuitem') - toggle_e2e_menuitem = xml.get_widget('toggle_e2e_menuitem') - send_file_menuitem = xml.get_widget('send_file_menuitem') - information_menuitem = xml.get_widget('information_menuitem') - convert_to_gc_menuitem = xml.get_widget('convert_to_groupchat') - separatormenuitem1 = xml.get_widget('separatormenuitem1') - separatormenuitem2 = xml.get_widget('separatormenuitem2') - - # add a special img for send file menuitem - path_to_upload_img = os.path.join(gajim.DATA_DIR, 'pixmaps', 'upload.png') - img = gtk.Image() - img.set_from_file(path_to_upload_img) - send_file_menuitem.set_image(img) - - muc_icon = gtkgui_helpers.load_icon('muc_active') - if muc_icon: - convert_to_gc_menuitem.set_image(muc_icon) - - if not hide_buttonbar_entries: - history_menuitem.show() - send_file_menuitem.show() - information_menuitem.show() - convert_to_gc_menuitem.show() - separatormenuitem1.show() - separatormenuitem2.show() - - ag = gtk.accel_groups_from_object(self.parent_win.window)[0] - send_file_menuitem.add_accelerator('activate', ag, gtk.keysyms.f, gtk.gdk.CONTROL_MASK, - gtk.ACCEL_VISIBLE) - convert_to_gc_menuitem.add_accelerator('activate', ag, gtk.keysyms.g, gtk.gdk.CONTROL_MASK, - gtk.ACCEL_VISIBLE) - history_menuitem.add_accelerator('activate', ag, gtk.keysyms.h, gtk.gdk.CONTROL_MASK, - gtk.ACCEL_VISIBLE) - information_menuitem.add_accelerator('activate', ag, gtk.keysyms.i, - gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) - - contact = self.parent_win.get_active_contact() - jid = contact.jid - - e2e_is_active = self.session is not None and self.session.enable_encryption - - # check if we support and use gpg - if not gajim.config.get_per('accounts', self.account, 'keyid') or\ - not gajim.connections[self.account].USE_GPG or\ - gajim.jid_is_transport(jid): - toggle_gpg_menuitem.set_sensitive(False) - else: - toggle_gpg_menuitem.set_sensitive(self.gpg_is_active or not e2e_is_active) - toggle_gpg_menuitem.set_active(self.gpg_is_active) - - # disable esessions if we or the other client don't support them - # XXX: Once we have fallback to disco, remove notexistant check - if not gajim.HAVE_PYCRYPTO or \ - not gajim.capscache.is_supported(contact, NS_ESESSION) or \ - gajim.capscache.is_supported(contact, 'notexistant') or \ - not gajim.config.get_per('accounts', self.account, 'enable_esessions'): - toggle_e2e_menuitem.set_sensitive(False) - else: - toggle_e2e_menuitem.set_active(e2e_is_active) - toggle_e2e_menuitem.set_sensitive(e2e_is_active or not self.gpg_is_active) - - # add_to_roster_menuitem - if not hide_buttonbar_entries and _('Not in Roster') in contact.groups: - add_to_roster_menuitem.show() - - # check if it's possible to send a file - if gajim.capscache.is_supported(contact, NS_FILE): - send_file_menuitem.set_sensitive(True) - else: - send_file_menuitem.set_sensitive(False) - - # check if it's possible to convert to groupchat - if gajim.capscache.is_supported(contact, NS_MUC): - convert_to_gc_menuitem.set_sensitive(True) - else: - convert_to_gc_menuitem.set_sensitive(False) - - # connect signals - id_ = history_menuitem.connect('activate', - self._on_history_menuitem_activate) - self.handlers[id_] = history_menuitem - id_ = send_file_menuitem.connect('activate', - self._on_send_file_menuitem_activate) - self.handlers[id_] = send_file_menuitem - id_ = add_to_roster_menuitem.connect('activate', - self._on_add_to_roster_menuitem_activate) - self.handlers[id_] = add_to_roster_menuitem - id_ = toggle_gpg_menuitem.connect('activate', - self._on_toggle_gpg_menuitem_activate) - self.handlers[id_] = toggle_gpg_menuitem - id_ = toggle_e2e_menuitem.connect('activate', - self._on_toggle_e2e_menuitem_activate) - self.handlers[id_] = toggle_e2e_menuitem - id_ = information_menuitem.connect('activate', - self._on_contact_information_menuitem_activate) - self.handlers[id_] = information_menuitem - id_ = convert_to_gc_menuitem.connect('activate', - self._on_convert_to_gc_menuitem_activate) - self.handlers[id_] = convert_to_gc_menuitem - - menu.connect('selection-done', self.destroy_menu, - send_file_menuitem, convert_to_gc_menuitem, - information_menuitem, history_menuitem) + menu = gui_menu_builder.get_contact_menu(self.contact, self.account, + use_multiple_contacts=False, show_start_chat=False, + show_encryption=True, control=self, + show_buttonbar_items=not hide_buttonbar_items) return menu - def destroy_menu(self, menu, send_file_menuitem, - convert_to_gc_menuitem, information_menuitem, history_menuitem): - # destroy accelerators - ag = gtk.accel_groups_from_object(self.parent_win.window)[0] - send_file_menuitem.remove_accelerator(ag, gtk.keysyms.f, - gtk.gdk.CONTROL_MASK) - convert_to_gc_menuitem.remove_accelerator(ag, gtk.keysyms.g, - gtk.gdk.CONTROL_MASK) - information_menuitem.remove_accelerator(ag, gtk.keysyms.i, - gtk.gdk.CONTROL_MASK) - history_menuitem.remove_accelerator(ag, gtk.keysyms.h, - gtk.gdk.CONTROL_MASK) - # destroy menu - menu.destroy() - def send_chatstate(self, state, contact = None): ''' sends OUR chatstate as STANDLONE chat state message (eg. no body) to contact only if new chatstate is different from the previous one diff --git a/src/gui_menu_builder.py b/src/gui_menu_builder.py index 09fd5efd3c51162712efa4931a95e45550757da5..73b54b8bfc8d3d373797dd80dfe085aabd36a1b5 100644 --- a/src/gui_menu_builder.py +++ b/src/gui_menu_builder.py @@ -25,7 +25,7 @@ import message_control from common import gajim from common import helpers -from common.xmpp.protocol import NS_COMMANDS, NS_FILE, NS_MUC +from common.xmpp.protocol import NS_COMMANDS, NS_FILE, NS_MUC, NS_ESESSION def build_resources_submenu(contacts, account, action, room_jid=None, room_account=None, cap=None): @@ -143,7 +143,11 @@ def build_invite_submenu(invite_menuitem, list_): room_jid, account, resource) invite_to_submenu.append(menuitem) -def get_contact_menu(contact, account, use_multiple_contacts=True): +def get_contact_menu(contact, account, use_multiple_contacts=True, +show_start_chat=True, show_encryption=False, show_buttonbar_items=True, +control=None): + ''' Build contact popup menu for roster and chat window. + If control is not set, we hide invite_contacts_menuitem''' if not contact: return @@ -151,12 +155,8 @@ def get_contact_menu(contact, account, use_multiple_contacts=True): our_jid = jid == gajim.get_jid_from_account(account) roster = gajim.interface.roster - if gajim.config.get_per('accounts', account, 'is_zeroconf'): - xml = gtkgui_helpers.get_glade('zeroconf_contact_context_menu.glade') - contact_context_menu = xml.get_widget('zeroconf_contact_context_menu') - else: - xml = gtkgui_helpers.get_glade('roster_contact_context_menu.glade') - contact_context_menu = xml.get_widget('roster_contact_context_menu') + xml = gtkgui_helpers.get_glade('roster_contact_context_menu.glade') + contact_context_menu = xml.get_widget('roster_contact_context_menu') start_chat_menuitem = xml.get_widget('start_chat_menuitem') execute_command_menuitem = xml.get_widget('execute_command_menuitem') @@ -168,6 +168,29 @@ def get_contact_menu(contact, account, use_multiple_contacts=True): 'add_special_notification_menuitem') information_menuitem = xml.get_widget('information_menuitem') history_menuitem = xml.get_widget('history_menuitem') + send_custom_status_menuitem = xml.get_widget('send_custom_status_menuitem') + send_single_message_menuitem = xml.get_widget('send_single_message_menuitem') + invite_menuitem = xml.get_widget('invite_menuitem') + block_menuitem = xml.get_widget('block_menuitem') + unblock_menuitem = xml.get_widget('unblock_menuitem') + ignore_menuitem = xml.get_widget('ignore_menuitem') + unignore_menuitem = xml.get_widget('unignore_menuitem') + set_custom_avatar_menuitem = xml.get_widget('set_custom_avatar_menuitem') + # Subscription submenu + subscription_menuitem = xml.get_widget('subscription_menuitem') + send_auth_menuitem, ask_auth_menuitem, revoke_auth_menuitem = \ + subscription_menuitem.get_submenu().get_children() + add_to_roster_menuitem = xml.get_widget('add_to_roster_menuitem') + remove_from_roster_menuitem = xml.get_widget( + 'remove_from_roster_menuitem') + manage_contact_menuitem = xml.get_widget('manage_contact') + convert_to_gc_menuitem = xml.get_widget('convert_to_groupchat_menuitem') + encryption_separator = xml.get_widget('encryption_separator') + toggle_gpg_menuitem = xml.get_widget('toggle_gpg_menuitem') + toggle_e2e_menuitem = xml.get_widget('toggle_e2e_menuitem') + last_separator = xml.get_widget('last_separator') + + items_to_hide = [] # add a special img for send file menuitem path_to_upload_img = os.path.join(gajim.DATA_DIR, 'pixmaps', 'upload.png') @@ -183,6 +206,10 @@ def get_contact_menu(contact, account, use_multiple_contacts=True): img.set_from_file(path_to_kbd_input_img) rename_menuitem.set_image(img) + muc_icon = gtkgui_helpers.load_icon('muc_active') + if muc_icon: + convert_to_gc_menuitem.set_image(muc_icon) + contacts = gajim.contacts.get_contacts(account, jid) if len(contacts) > 1 and use_multiple_contacts: # several resources start_chat_menuitem.set_submenu(build_resources_submenu(contacts, @@ -229,9 +256,7 @@ def get_contact_menu(contact, account, use_multiple_contacts=True): # Hide items when it's self contact row if our_jid: - for menuitem in (rename_menuitem, edit_groups_menuitem): - menuitem.set_no_show_all(True) - menuitem.hide() + items_to_hide += [rename_menuitem, edit_groups_menuitem] # Unsensitive many items when account is offline if gajim.account_is_disconnected(account): @@ -239,8 +264,58 @@ def get_contact_menu(contact, account, use_multiple_contacts=True): edit_groups_menuitem, send_file_menuitem): widget.set_sensitive(False) + if not show_start_chat: + items_to_hide.append(start_chat_menuitem) + + if not show_encryption or not control: + items_to_hide += [encryption_separator, toggle_gpg_menuitem, + toggle_e2e_menuitem] + else: + e2e_is_active = control.session is not None and \ + control.session.enable_encryption + + # check if we support and use gpg + if not gajim.config.get_per('accounts', account, 'keyid') or \ + not gajim.connections[account].USE_GPG or gajim.jid_is_transport( + contact.jid): + toggle_gpg_menuitem.set_sensitive(False) + else: + toggle_gpg_menuitem.set_sensitive(control.gpg_is_active or \ + not e2e_is_active) + toggle_gpg_menuitem.set_active(control.gpg_is_active) + + # disable esessions if we or the other client don't support them + # XXX: Once we have fallback to disco, remove notexistant check + if not gajim.HAVE_PYCRYPTO or \ + not gajim.capscache.is_supported(contact, NS_ESESSION) or \ + gajim.capscache.is_supported(contact, 'notexistant') or \ + not gajim.config.get_per('accounts', account, 'enable_esessions'): + toggle_e2e_menuitem.set_sensitive(False) + else: + toggle_e2e_menuitem.set_active(e2e_is_active) + toggle_e2e_menuitem.set_sensitive(e2e_is_active or \ + not control.gpg_is_active) + + if not show_buttonbar_items: + items_to_hide += [history_menuitem, send_file_menuitem, + information_menuitem, convert_to_gc_menuitem, last_separator] + + if not control: + items_to_hide.append(convert_to_gc_menuitem) + + for item in items_to_hide: + item.set_no_show_all(True) + item.hide() + # Zeroconf Account if gajim.config.get_per('accounts', account, 'is_zeroconf'): + for item in (send_custom_status_menuitem, send_single_message_menuitem, + invite_menuitem, block_menuitem, unblock_menuitem, ignore_menuitem, + unignore_menuitem, set_custom_avatar_menuitem, subscription_menuitem, + manage_contact_menuitem): + item.set_no_show_all(True) + item.hide() + if contact.show in ('offline', 'error'): information_menuitem.set_sensitive(False) send_file_menuitem.set_sensitive(False) @@ -254,14 +329,6 @@ def get_contact_menu(contact, account, use_multiple_contacts=True): return contact_context_menu # normal account - send_custom_status_menuitem = xml.get_widget('send_custom_status_menuitem') - send_single_message_menuitem = xml.get_widget('send_single_message_menuitem') - invite_menuitem = xml.get_widget('invite_menuitem') - block_menuitem = xml.get_widget('block_menuitem') - unblock_menuitem = xml.get_widget('unblock_menuitem') - ignore_menuitem = xml.get_widget('ignore_menuitem') - unignore_menuitem = xml.get_widget('unignore_menuitem') - set_custom_avatar_menuitem = xml.get_widget('set_custom_avatar_menuitem') # send custom status icon blocked = False @@ -292,14 +359,6 @@ def get_contact_menu(contact, account, use_multiple_contacts=True): build_invite_submenu(invite_menuitem, [(contact, account)]) - # Subscription submenu - subscription_menuitem = xml.get_widget('subscription_menuitem') - send_auth_menuitem, ask_auth_menuitem, revoke_auth_menuitem = \ - subscription_menuitem.get_submenu().get_children() - add_to_roster_menuitem = xml.get_widget('add_to_roster_menuitem') - remove_from_roster_menuitem = xml.get_widget( - 'remove_from_roster_menuitem') - # One or several resource, we do the same for send_custom_status status_menuitems = gtk.Menu() send_custom_status_menuitem.set_submenu(status_menuitems) @@ -359,8 +418,7 @@ def get_contact_menu(contact, account, use_multiple_contacts=True): # Hide items when it's self contact row if our_jid: - menuitem = xml.get_widget('manage_contact') - menuitem.set_sensitive(False) + manage_contact_menuitem.set_sensitive(False) # Unsensitive items when account is offline if gajim.account_is_disconnected(account):