Migrate the rest of the static menu items to the new PidginActionGroup

Fri, 27 Mar 2020 00:45:04 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 27 Mar 2020 00:45:04 -0500
changeset 40364
55483ee6710f
parent 40363
c8b010d1d430
child 40365
275aa03d1b41

Migrate the rest of the static menu items to the new PidginActionGroup

pidgin/gtkblist.c file | annotate | diff | comparison | revisions
pidgin/pidginactiongroup.c file | annotate | diff | comparison | revisions
pidgin/pidginactiongroup.h file | annotate | diff | comparison | revisions
pidgin/resources/BuddyList/menu.ui file | annotate | diff | comparison | revisions
--- a/pidgin/gtkblist.c	Thu Mar 26 22:55:20 2020 -0500
+++ b/pidgin/gtkblist.c	Fri Mar 27 00:45:04 2020 -0500
@@ -45,18 +45,15 @@
 #include "gtkdialogs.h"
 #include "gtkxfer.h"
 #include "gtkpounce.h"
-#include "gtkprefs.h"
 #include "gtkprivacy.h"
 #include "gtkroomlist.h"
 #include "gtkstatusbox.h"
 #include "gtkscrollbook.h"
-#include "gtksmiley-manager.h"
 #include "gtkstyle.h"
 #include "gtkblist-theme.h"
 #include "gtkblist-theme-loader.h"
 #include "gtkutils.h"
 #include "pidgin/minidialog.h"
-#include "pidgin/pidginabout.h"
 #include "pidgin/pidginaccountchooser.h"
 #include "pidgin/pidginactiongroup.h"
 #include "pidgin/pidginbuddylistmenu.h"
@@ -64,7 +61,6 @@
 #include "pidgin/pidgingdkpixbuf.h"
 #include "pidgin/pidginlog.h"
 #include "pidgin/pidginplugininfo.h"
-#include "pidgin/pidginpluginsdialog.h"
 #include "pidgin/pidgintooltip.h"
 #include "pidginmenutray.h"
 
@@ -794,11 +790,6 @@
 	}
 }
 
-static void gtk_blist_show_systemlog_cb(void)
-{
-	pidgin_syslog_show();
-}
-
 static void gtk_blist_show_onlinehelp_cb(void)
 {
 	purple_notify_uri(NULL, PURPLE_WEBSITE "documentation");
@@ -2023,11 +2014,6 @@
 	return handled;
 }
 
-static void gtk_blist_show_xfer_dialog_cb(GtkAction *item, gpointer data)
-{
-	pidgin_xfer_dialog_show(NULL);
-}
-
 static void pidgin_blist_buddy_details_cb(GtkToggleAction *item, gpointer data)
 {
 	pidgin_set_cursor(gtkblist->window, GDK_WATCH);
@@ -3345,13 +3331,6 @@
 	return FALSE;
 }
 
-static void
-toggle_debug(void)
-{
-	purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/debug/enabled",
-			!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled"));
-}
-
 static char *get_mood_icon_path(const char *mood)
 {
 	char *path;
@@ -3618,24 +3597,6 @@
 /***************************************************
  *            Crap                                 *
  ***************************************************/
-static void
-pidgin_blist_plugins_dialog_cb(GtkAction *action, GtkWidget *window) {
-	GtkWidget *dialog = pidgin_plugins_dialog_new();
-
-	gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window));
-
-	gtk_widget_show_all(dialog);
-}
-
-static void
-_pidgin_about_cb(GtkAction *action, GtkWidget *window) {
-	GtkWidget *about = pidgin_about_dialog_new();
-
-	gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(window));
-
-	gtk_widget_show_all(about);
-}
-
 /* TODO: fill out tooltips... */
 static const GtkActionEntry blist_menu_entries[] = {
 /* NOTE: Do not set any accelerator to Control+O. It is mapped by
@@ -3643,35 +3604,17 @@
 	/* Buddies menu */
 	{ "BuddiesMenu", NULL, N_("_Buddies"), NULL, NULL, NULL },
 	{ "JoinAChat", PIDGIN_STOCK_CHAT, N_("Join a _Chat..."), "<control>C", NULL, pidgin_blist_joinchat_show },
-	{ "GetUserInfo", PIDGIN_STOCK_TOOLBAR_USER_INFO, N_("Get User _Info..."), "<control>I", NULL, pidgin_dialogs_info },
-	{ "ViewUserLog", NULL, N_("View User _Log..."), "<control>L", NULL, pidgin_dialogs_log },
 	{ "ShowMenu", NULL, N_("Sh_ow"), NULL, NULL, NULL },
 	{ "SortMenu", NULL, N_("_Sort Buddies"), NULL, NULL, NULL },
 	{ "AddBuddy", GTK_STOCK_ADD, N_("_Add Buddy..."), "<control>B", NULL, pidgin_blist_add_buddy_cb },
 	{ "AddChat", GTK_STOCK_ADD, N_("Add C_hat..."), NULL, NULL, pidgin_blist_add_chat_cb },
-	{ "AddGroup", GTK_STOCK_ADD, N_("Add _Group..."), NULL, NULL, purple_blist_request_add_group },
-	{ "Quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q", NULL, purple_core_quit },
 
 	/* Accounts menu */
 	{ "AccountsMenu", NULL, N_("_Accounts"), NULL, NULL, NULL },
-	{ "ManageAccounts", NULL, N_("Manage Accounts"), "<control>A", NULL, pidgin_accounts_window_show },
 
 	/* Tools */
 	{ "ToolsMenu", NULL, N_("_Tools"), NULL, NULL, NULL },
-	{ "BuddyPounces", NULL, N_("Buddy _Pounces"), NULL, NULL, pidgin_pounces_manager_show },
-	{ "CustomSmileys", PIDGIN_STOCK_TOOLBAR_SMILEY, N_("Custom Smile_ys"), "<control>Y", NULL, pidgin_smiley_manager_show },
-	{ "Plugins", PIDGIN_STOCK_TOOLBAR_PLUGINS, N_("Plu_gins"), "<control>U", NULL, pidgin_blist_plugins_dialog_cb },
-	{ "Preferences", GTK_STOCK_PREFERENCES, N_("Pr_eferences"), "<control>P", NULL, pidgin_prefs_show },
-	{ "Privacy", NULL, N_("Pr_ivacy"), NULL, NULL, pidgin_privacy_dialog_show },
 	{ "SetMood", NULL, N_("Set _Mood"), "<control>D", NULL, set_mood_show },
-	{ "FileTransfers", PIDGIN_STOCK_TOOLBAR_TRANSFER, N_("_File Transfers"), "<control>T", NULL, G_CALLBACK(gtk_blist_show_xfer_dialog_cb) },
-	{ "RoomList", NULL, N_("R_oom List"), NULL, NULL, pidgin_roomlist_dialog_show },
-	{ "SystemLog", NULL, N_("System _Log"), NULL, NULL, gtk_blist_show_systemlog_cb },
-
-	/* Help */
-	{ "HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL },
-	{ "DebugWindow", NULL, N_("_Debug Window"), NULL, NULL, toggle_debug },
-	{ "About", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL, G_CALLBACK(_pidgin_about_cb) },
 };
 
 /* Toggle items */
@@ -3692,8 +3635,6 @@
 	"<menubar name='BList'>"
 		"<menu action='BuddiesMenu'>"
 			"<menuitem action='JoinAChat'/>"
-			"<menuitem action='GetUserInfo'/>"
-			"<menuitem action='ViewUserLog'/>"
 			"<separator/>"
 			"<menu action='ShowMenu'>"
 				"<menuitem action='ShowOffline'/>"
@@ -3706,33 +3647,16 @@
 			"<separator/>"
 			"<menuitem action='AddBuddy'/>"
 			"<menuitem action='AddChat'/>"
-			"<menuitem action='AddGroup'/>"
 			"<separator/>"
-			"<menuitem action='Quit'/>"
 		"</menu>"
 		"<menu action='AccountsMenu'>"
-			"<menuitem action='ManageAccounts'/>"
 		"</menu>"
 		"<menu action='ToolsMenu'>"
-			"<menuitem action='BuddyPounces'/>"
-			"<menuitem action='CustomSmileys'/>"
-			"<menuitem action='Plugins'/>"
-			"<menuitem action='Preferences'/>"
-			"<menuitem action='Privacy'/>"
 			"<menuitem action='SetMood'/>"
 			"<separator/>"
-			"<menuitem action='FileTransfers'/>"
-			"<menuitem action='RoomList'/>"
-			"<menuitem action='SystemLog'/>"
-			"<separator/>"
 			"<menuitem action='MuteSounds'/>"
 			"<placeholder name='PluginActions'/>"
 		"</menu>"
-		"<menu action='HelpMenu'>"
-			"<menuitem action='DebugWindow'/>"
-			"<separator/>"
-			"<menuitem action='About'/>"
-		"</menu>"
 	"</menubar>"
 "</ui>";
 
--- a/pidgin/pidginactiongroup.c	Thu Mar 26 22:55:20 2020 -0500
+++ b/pidgin/pidginactiongroup.c	Fri Mar 27 00:45:04 2020 -0500
@@ -22,8 +22,21 @@
 
 #include "pidginactiongroup.h"
 
+#include <purple.h>
+
 #include "internal.h"
-#include "gtkdialogs.h"
+
+#include "pidgin/gtkaccount.h"
+#include "pidgin/gtkdialogs.h"
+#include "pidgin/gtkpounce.h"
+#include "pidgin/gtkprefs.h"
+#include "pidgin/gtkprivacy.h"
+#include "pidgin/gtkroomlist.h"
+#include "pidgin/gtksmiley-manager.h"
+#include "pidgin/gtkxfer.h"
+#include "pidgin/pidginabout.h"
+#include "pidgin/pidginlog.h"
+#include "pidgin/pidginpluginsdialog.h"
 
 struct _PidginActionGroup {
 	GSimpleActionGroup parent;
@@ -33,6 +46,70 @@
  * Action Callbacks
  *****************************************************************************/
 static void
+pidgin_action_group_about(GSimpleAction *simple, GVariant *parameter,
+                          gpointer data)
+{
+	GtkWidget *about = pidgin_about_dialog_new();
+
+	/* fix me? */
+#if 0
+	gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(window));
+#endif
+
+	gtk_widget_show_all(about);
+}
+
+static void
+pidgin_action_group_add_group(GSimpleAction *simple, GVariant *parameter,
+                              gpointer data)
+{
+	purple_blist_request_add_group();
+}
+
+static void
+pidgin_action_group_buddy_pounces(GSimpleAction *simple, GVariant *parameter,
+                                  gpointer data)
+{
+	pidgin_pounces_manager_show();
+}
+
+static void
+pidgin_action_group_custom_smiley(GSimpleAction *simple, GVariant *parameter,
+                                  gpointer data)
+{
+	pidgin_smiley_manager_show();
+}
+
+static void
+pidgin_action_group_debug(GSimpleAction *simple, GVariant *parameter,
+                          gpointer data)
+{
+	gboolean old = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled");
+	purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/debug/enabled", !old);
+}
+
+static void
+pidgin_action_group_file_transfers(GSimpleAction *simple, GVariant *parameter,
+                                   gpointer data)
+{
+	pidgin_xfer_dialog_show(NULL);
+}
+
+static void
+pidgin_action_group_get_user_info(GSimpleAction *simple, GVariant *parameter,
+                                  gpointer data)
+{
+	pidgin_dialogs_info();
+}
+
+static void
+pidgin_action_group_manage_accounts(GSimpleAction *simple, GVariant *parameter,
+                                    gpointer data)
+{
+	pidgin_accounts_window_show();
+}
+
+static void
 pidgin_action_group_new_message(GSimpleAction *simple, GVariant *parameter,
                                 gpointer data)
 {
@@ -46,6 +123,62 @@
 	purple_notify_uri(NULL, PURPLE_WEBSITE "documentation");
 }
 
+static void
+pidgin_action_group_plugins(GSimpleAction *simple, GVariant *parameter,
+                            gpointer data)
+{
+	GtkWidget *dialog = pidgin_plugins_dialog_new();
+
+	/* fixme? */
+#if 0
+	gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window));
+#endif
+
+	gtk_widget_show_all(dialog);
+}
+
+static void
+pidgin_action_group_preferences(GSimpleAction *simple, GVariant *parameter,
+                                gpointer data)
+{
+	pidgin_prefs_show();
+}
+
+static void
+pidgin_action_group_privacy(GSimpleAction *simple, GVariant *parameter,
+                            gpointer data)
+{
+	pidgin_privacy_dialog_show();
+}
+
+static void
+pidgin_action_group_quit(GSimpleAction *simple, GVariant *parameter,
+                         gpointer data)
+{
+	purple_core_quit();
+}
+
+static void
+pidgin_action_group_room_list(GSimpleAction *simple, GVariant *parameter,
+                              gpointer data)
+{
+	pidgin_roomlist_dialog_show();
+}
+
+static void
+pidgin_action_group_system_log(GSimpleAction *simple, GVariant *parameter,
+                               gpointer data)
+{
+	pidgin_syslog_show();
+}
+
+static void
+pidgin_action_group_view_user_log(GSimpleAction *simple, GVariant *parameter,
+                                  gpointer data)
+{
+	pidgin_dialogs_log();
+}
+
 /******************************************************************************
  * GObject Implementation
  *****************************************************************************/
@@ -56,11 +189,56 @@
 pidgin_action_group_init(PidginActionGroup *group) {
 	GActionEntry entries[] = {
 		{
+			.name = PIDGIN_ACTION_ABOUT,
+			.activate = pidgin_action_group_about,
+		}, {
+			.name = PIDGIN_ACTION_ADD_GROUP,
+			.activate = pidgin_action_group_add_group,
+		}, {
+			.name = PIDGIN_ACTION_BUDDY_POUNCES,
+			.activate = pidgin_action_group_buddy_pounces,
+		}, {
+			.name = PIDGIN_ACTION_CUSTOM_SMILEY,
+			.activate = pidgin_action_group_custom_smiley,
+		}, {
+			.name = PIDGIN_ACTION_DEBUG,
+			.activate = pidgin_action_group_debug,
+		}, {
+			.name = PIDGIN_ACTION_FILE_TRANSFERS,
+			.activate = pidgin_action_group_file_transfers,
+		}, {
+			.name = PIDGIN_ACTION_GET_USER_INFO,
+			.activate = pidgin_action_group_get_user_info,
+		}, {
+			.name = PIDGIN_ACTION_MANAGE_ACCOUNTS,
+			.activate = pidgin_action_group_manage_accounts,
+		}, {
 			.name = PIDGIN_ACTION_NEW_MESSAGE,
 			.activate = pidgin_action_group_new_message,
 		}, {
 			.name = PIDGIN_ACTION_ONLINE_HELP,
 			.activate = pidgin_action_group_online_help,
+		}, {
+			.name = PIDGIN_ACTION_PLUGINS,
+			.activate = pidgin_action_group_plugins,
+		}, {
+			.name = PIDGIN_ACTION_PREFERENCES,
+			.activate = pidgin_action_group_preferences,
+		}, {
+			.name = PIDGIN_ACTION_PRIVACY,
+			.activate = pidgin_action_group_privacy,
+		}, {
+			.name = PIDGIN_ACTION_QUIT,
+			.activate = pidgin_action_group_quit,
+		}, {
+			.name = PIDGIN_ACTION_ROOM_LIST,
+			.activate = pidgin_action_group_room_list,
+		}, {
+			.name = PIDGIN_ACTION_SYSTEM_LOG,
+			.activate = pidgin_action_group_system_log,
+		}, {
+			.name = PIDGIN_ACTION_VIEW_USER_LOG,
+			.activate = pidgin_action_group_view_user_log,
 		},
 	};
 
--- a/pidgin/pidginactiongroup.h	Thu Mar 26 22:55:20 2020 -0500
+++ b/pidgin/pidginactiongroup.h	Fri Mar 27 00:45:04 2020 -0500
@@ -27,19 +27,129 @@
 #include <gio/gio.h>
 
 /**
+ * PIDGIN_ACTION_ADD_ABOUT:
+ *
+ * A constant that represents the about action that shows the about window.
+ */
+#define PIDGIN_ACTION_ABOUT ("about")
+
+/**
+ * PIDGIN_ACTION_ADD_GROUP:
+ *
+ * A constant that represents the add-group action to add a group to the
+ * contact list.
+ */
+#define PIDGIN_ACTION_ADD_GROUP ("add-group")
+
+/**
+ * PIDGIN_ACTION_BUDDY_POUNCES:
+ *
+ * A constant that represents the pounces action.
+ */
+#define PIDGIN_ACTION_BUDDY_POUNCES ("buddy-pounces")
+
+/**
+ * PIDGIN_ACTION_CUSTOM_SMILEY:
+ *
+ * A constant that represents the smiley-action action to toggle the visibility
+ * of the smiley manager.
+ */
+#define PIDGIN_ACTION_CUSTOM_SMILEY ("custom-smiley")
+
+/**
+ * PIDGIN_ACTION_DEBUG:
+ *
+ * A constant that represents the debug action to toggle the visibility of the
+ * debug window.
+ */
+#define PIDGIN_ACTION_DEBUG ("debug")
+
+/**
+ * PIDGIN_ACTION_FILE_TRANSFERS:
+ *
+ * A constant that represents the file-transfers action to toggle the
+ * visibility of the file transfers window.
+ */
+#define PIDGIN_ACTION_FILE_TRANSFERS ("file-transfers")
+
+/**
+ * PIDGIN_ACTION_GET_USER_INFO:
+ *
+ * A constant that represents the get-user info action.
+ */
+#define PIDGIN_ACTION_GET_USER_INFO ("get-user-info")
+
+/**
+ * PIDGIN_ACTION_MANAGE_ACCOUNTS:
+ *
+ * A constatnt that preresents the manage-accounts action to displays the
+ * manage accounts window.
+ */
+#define PIDGIN_ACTION_MANAGE_ACCOUNTS ("manage-accounts")
+
+/**
  * PIDGIN_ACTION_NEW_MESSAGE:
  *
- * A constant that represents the new message action.
+ * A constant that represents the new-message action.
  */
 #define PIDGIN_ACTION_NEW_MESSAGE ("new-message")
 
 /**
  * PIDGIN_ACTION_ONLINE_HELP:
  *
- * A constant that represents the online help action.
+ * A constant that represents the online-help action.
  */
 #define PIDGIN_ACTION_ONLINE_HELP ("online-help")
 
+/**
+ * PIDGIN_ACTION_PLUGINS:
+ *
+ * A constant that represents the plugins action.
+ */
+#define PIDGIN_ACTION_PLUGINS ("plugins")
+
+/**
+ * PIDGIN_ACTION_PREFERENCES:
+ *
+ * A constant that represents the preferences action.
+ */
+#define PIDGIN_ACTION_PREFERENCES ("preferences")
+
+/**
+ * PIDGIN_ACTION_PRIVACY:
+ *
+ * A constant that represents the privacy action.
+ */
+#define PIDGIN_ACTION_PRIVACY ("privacy")
+
+/**
+ * PIDGIN_ACTION_QUIT:
+ *
+ * A constant that represents the quit action.
+ */
+#define PIDGIN_ACTION_QUIT ("quit")
+
+/**
+ * PIDGIN_ACTION_ROOM_LIST:
+ *
+ * A constant that represents the room-list action.
+ */
+#define PIDGIN_ACTION_ROOM_LIST ("room-list")
+
+/**
+ * PIDGIN_ACTION_SYSTEM_LOG:
+ *
+ * A constant that represents the system-log action.
+ */
+#define PIDGIN_ACTION_SYSTEM_LOG ("system-log")
+
+/**
+ * PIDGIN_ACTION_VIEW_USER_LOG:
+ *
+ * A constant that represents the view-user-log action.
+ */
+#define PIDGIN_ACTION_VIEW_USER_LOG ("view-user-log")
+
 G_BEGIN_DECLS
 
 #define PIDGIN_TYPE_ACTION_GROUP (pidgin_action_group_get_type())
--- a/pidgin/resources/BuddyList/menu.ui	Thu Mar 26 22:55:20 2020 -0500
+++ b/pidgin/resources/BuddyList/menu.ui	Fri Mar 27 00:45:04 2020 -0500
@@ -25,6 +25,108 @@
                 <accelerator key="m" signal="activate" modifiers="GDK_CONTROL_MASK"/>
               </object>
             </child>
+            <child>
+              <object class="GtkMenuItem" id="join_chat">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.join-chat</property>
+                <property name="label" translatable="yes">Join a _Chat...</property>
+                <property name="use_underline">True</property>
+                <accelerator key="c" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="get_user_info">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.get-user-info</property>
+                <property name="label" translatable="yes">Get User _Info...</property>
+                <property name="use_underline">True</property>
+                <accelerator key="i" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="view_user_log">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.view-user-log</property>
+                <property name="label" translatable="yes">View User _Log...</property>
+                <property name="use_underline">True</property>
+                <accelerator key="l" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkSeparatorMenuItem">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Sh_ow</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">_Sort Buddies</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkSeparatorMenuItem">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="add_buddy">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.add-buddy</property>
+                <property name="label" translatable="yes">_Add Buddy...</property>
+                <property name="use_underline">True</property>
+                <accelerator key="b" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="add_chat">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.add-chat</property>
+                <property name="label" translatable="yes">Add C_hat...</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="add_group">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.add-group</property>
+                <property name="label" translatable="yes">Add _Group...</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkSeparatorMenuItem">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="quit">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.quit</property>
+                <property name="label" translatable="yes">_Quit</property>
+                <property name="use_underline">True</property>
+                <accelerator key="q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
           </object>
         </child>
       </object>
@@ -35,6 +137,22 @@
         <property name="can_focus">False</property>
         <property name="label" translatable="yes">_Accounts</property>
         <property name="use_underline">True</property>
+        <child type="submenu">
+          <object class="GtkMenu">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkMenuItem" id="manage_accounts">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.manage-accounts</property>
+                <property name="label" translatable="yes">Manage Accounts</property>
+                <property name="use_underline">True</property>
+                <accelerator key="a" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+          </object>
+        </child>
       </object>
     </child>
     <child>
@@ -43,6 +161,110 @@
         <property name="can_focus">False</property>
         <property name="label" translatable="yes">_Tools</property>
         <property name="use_underline">True</property>
+        <child type="submenu">
+          <object class="GtkMenu">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkMenuItem" id="buddy_pounces">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.buddy-pounces</property>
+                <property name="label" translatable="yes">Buddy _Pounces</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="custom_smileys">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.custom-smiley</property>
+                <property name="label" translatable="yes">Custom Smile_ys</property>
+                <property name="use_underline">True</property>
+                <accelerator key="y" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="plugins">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.plugins</property>
+                <property name="label" translatable="yes">Plu_gins</property>
+                <property name="use_underline">True</property>
+                <accelerator key="u" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="preferences">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.preferences</property>
+                <property name="label" translatable="yes">Pr_eferences</property>
+                <property name="use_underline">True</property>
+                <accelerator key="p" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="privacy">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.privacy</property>
+                <property name="label" translatable="yes">Pr_ivacy</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="set_mood">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.set-mood</property>
+                <property name="label" translatable="yes">Set _Mood</property>
+                <property name="use_underline">True</property>
+                <accelerator key="d" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkSeparatorMenuItem">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="file_transfers">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.file-transfers</property>
+                <property name="label" translatable="yes">_File Transfers</property>
+                <property name="use_underline">True</property>
+                <accelerator key="t" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="room_list">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.room-list</property>
+                <property name="label" translatable="yes">R_oom List</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="system_log">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.system-log</property>
+                <property name="label" translatable="yes">System _Log</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkSeparatorMenuItem">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+            </child>
+          </object>
+        </child>
       </object>
     </child>
     <child>
@@ -56,7 +278,7 @@
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <child>
-              <object class="GtkMenuItem">
+              <object class="GtkMenuItem" id="online_help">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="action_name">blist.online-help</property>
@@ -65,6 +287,24 @@
                 <accelerator key="F1" signal="activate"/>
               </object>
             </child>
+            <child>
+              <object class="GtkMenuItem" id="debug">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.debug</property>
+                <property name="label" translatable="yes">_Debug Window</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="about">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="action_name">blist.about</property>
+                <property name="label" translatable="yes">_About</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
           </object>
         </child>
       </object>

mercurial