diff --git a/moo/mooapp/mooapp.c b/moo/mooapp/mooapp.c index ccaef949..30048546 100644 --- a/moo/mooapp/mooapp.c +++ b/moo/mooapp/mooapp.c @@ -779,16 +779,13 @@ moo_app_init_editor (MooApp *app) moo_edit_get_user_tools_files (&files, &n_files, &user_file); moo_edit_load_user_tools (files, n_files, user_file, - moo_app_get_ui_xml (app), - "Editor/Menubar/Tools/ToolsMenu"); + moo_app_get_ui_xml (app)); g_strfreev (files); g_free (user_file); moo_edit_get_user_menu_files (&files, &n_files, &user_file); moo_edit_load_user_menu (files, n_files, user_file, - moo_app_get_ui_xml (app), - "Editor/Popup/PopupStart", - "Editor/Popup/PopupEnd"); + moo_app_get_ui_xml (app)); g_strfreev (files); g_free (user_file); } diff --git a/moo/mooedit/moousertools.c b/moo/mooedit/moousertools.c index 3b1b1ce8..9dad826f 100644 --- a/moo/mooedit/moousertools.c +++ b/moo/mooedit/moousertools.c @@ -60,9 +60,7 @@ static void remove_menu_actions (void); static void load_config_item (FileType type, MooConfig *config, MooConfigItem *item, - MooUIXML *xml, - const char *ui_path1, - const char *ui_path2); + MooUIXML *xml); static MooAction *create_tool_action (MooWindow *window, gpointer user_data); static MooAction *create_edit_action (MooEdit *edit, @@ -167,16 +165,11 @@ moo_edit_load_tools (FileType type, char **default_files, guint n_files, char *user_file, - MooUIXML *xml, - const char *ui_path1, - const char *ui_path2) + MooUIXML *xml) { guint i, n_items; MooConfig *config; - if (!n_files && !user_file) - return; - switch (type) { case FILE_TOOLS: @@ -187,6 +180,9 @@ moo_edit_load_tools (FileType type, break; } + if (!n_files && !user_file) + return; + config = moo_config_new (); moo_config_set_default_bool (config, MOO_USER_TOOL_KEY_ENABLED, TRUE); @@ -199,8 +195,7 @@ moo_edit_load_tools (FileType type, n_items = moo_config_n_items (config); for (i = 0; i < n_items; ++i) - load_config_item (type, config, moo_config_nth_item (config, i), - xml, ui_path1, ui_path2); + load_config_item (type, config, moo_config_nth_item (config, i), xml); g_object_unref (config); } @@ -210,11 +205,9 @@ void moo_edit_load_user_tools (char **default_files, guint n_files, char *user_file, - MooUIXML *xml, - const char *ui_path) + MooUIXML *xml) { - moo_edit_load_tools (FILE_TOOLS, default_files, n_files, - user_file, xml, ui_path, NULL); + moo_edit_load_tools (FILE_TOOLS, default_files, n_files, user_file, xml); } @@ -222,12 +215,9 @@ void moo_edit_load_user_menu (char **default_files, guint n_files, char *user_file, - MooUIXML *xml, - const char *start_path, - const char *end_path) + MooUIXML *xml) { - moo_edit_load_tools (FILE_MENU, default_files, n_files, - user_file, xml, start_path, end_path); + moo_edit_load_tools (FILE_MENU, default_files, n_files, user_file, xml); } @@ -327,15 +317,13 @@ static void load_config_item (FileType type, MooConfig *config, MooConfigItem *item, - MooUIXML *xml, - const char *ui_path1, - const char *ui_path2) + MooUIXML *xml) { MooCommand *cmd; ActionData *data; ActionOptions options; GSList *langs; - const char *name, *label, *accel, *pos, *os; + const char *name, *label, *accel, *pos, *os, *menu; gboolean enabled; gpointer klass; @@ -372,6 +360,7 @@ load_config_item (FileType type, label = moo_config_item_get (item, MOO_USER_TOOL_KEY_LABEL); accel = moo_config_item_get (item, MOO_USER_TOOL_KEY_ACCEL); pos = moo_config_item_get (item, MOO_USER_TOOL_KEY_POSITION); + menu = moo_config_item_get (item, MOO_USER_TOOL_KEY_MENU); g_return_if_fail (name != NULL); cmd = config_item_get_command (item); @@ -386,7 +375,7 @@ load_config_item (FileType type, switch (type) { case FILE_TOOLS: - klass = g_type_class_ref (MOO_TYPE_EDIT_WINDOW); + klass = g_type_class_peek (MOO_TYPE_EDIT_WINDOW); moo_window_class_new_action_custom (klass, data->id, create_tool_action, data, @@ -400,51 +389,57 @@ load_config_item (FileType type, moo_edit_window_add_action_check (data->id, "sensitive", check_sensitive_func, NULL, NULL); - - g_type_class_unref (klass); break; case FILE_MENU: - klass = g_type_class_ref (MOO_TYPE_EDIT); + klass = g_type_class_peek (MOO_TYPE_EDIT); moo_edit_class_new_action_custom (klass, data->id, create_edit_action, data, (GDestroyNotify) action_data_free); - g_type_class_unref (klass); break; } if (xml) { - const char *ui_path = ui_path1; - char *markup = g_markup_printf_escaped ("", - data->id); + const char *ui_path; + char *freeme = NULL; + char *markup; + + markup = g_markup_printf_escaped ("", + data->id); data->xml = g_object_ref (xml); data->merge_id = moo_ui_xml_new_merge_id (xml); if (type == FILE_MENU) { + ui_path = "Editor/Popup/PopupEnd"; + if (pos) { char *c = g_ascii_strdown (pos, -1); if (!strcmp (c, MOO_USER_TOOL_POSITION_END)) - ui_path = ui_path2; + ui_path = "Editor/Popup/PopupEnd"; else if (!strcmp (c, MOO_USER_TOOL_POSITION_START)) - ui_path = ui_path1; + ui_path = "Editor/Popup/PopupStart"; else g_warning ("%s: unknown position type '%s'", G_STRLOC, c); g_free (c); } - else - { - ui_path = ui_path2; - } + } + else + { + freeme = g_strdup_printf ("Editor/Menubar/%s/UserMenu", + menu ? menu : "Tools"); + ui_path = freeme; } moo_ui_xml_insert_markup (xml, data->merge_id, ui_path, -1, markup); + g_free (markup); + g_free (freeme); } } diff --git a/moo/mooedit/moousertools.h b/moo/mooedit/moousertools.h index b0b5ad87..83e489c1 100644 --- a/moo/mooedit/moousertools.h +++ b/moo/mooedit/moousertools.h @@ -31,6 +31,7 @@ G_BEGIN_DECLS #define MOO_USER_TOOL_KEY_COMMAND "command" #define MOO_USER_TOOL_KEY_LANG "lang" #define MOO_USER_TOOL_KEY_ENABLED "enabled" +#define MOO_USER_TOOL_KEY_MENU "menu" #define MOO_USER_TOOL_POSITION_START "start" #define MOO_USER_TOOL_POSITION_END "end" @@ -47,8 +48,7 @@ void moo_edit_get_user_tools_files (char ***default_files, void moo_edit_load_user_tools (char **default_files, guint n_files, char *user_file, - MooUIXML *xml, - const char *ui_path); + MooUIXML *xml); void moo_edit_get_user_menu_files (char ***default_files, guint *n_files, @@ -56,9 +56,7 @@ void moo_edit_get_user_menu_files (char ***default_files, void moo_edit_load_user_menu (char **default_files, guint n_files, char *user_file, - MooUIXML *xml, - const char *start_path, - const char *end_path); + MooUIXML *xml); G_END_DECLS diff --git a/tests/medit-ui.xml b/tests/medit-ui.xml index bdfa6144..79d9fa07 100644 --- a/tests/medit-ui.xml +++ b/tests/medit-ui.xml @@ -19,6 +19,8 @@ + + @@ -44,6 +46,8 @@ + + @@ -60,6 +64,8 @@ + + @@ -77,14 +83,16 @@ + + - - + +