1
1

* editwidget.c (edit_file): Move menu initialization ...

* editmenu.c (edit_init_menu): ... here.  Allocate menu
dynamically.
(edit_done_menu): Take Wmenu argument rather than Menu.  Free
menu.
(edit_reload_menu): New function, reload the menu.
(edit_options_dialog): Reload the menu if key emulation has
changed.
Этот коммит содержится в:
Pavel Roskin 2005-05-20 21:19:40 +00:00
родитель 9260860bbf
Коммит cd702593f6
5 изменённых файлов: 52 добавлений и 17 удалений

Просмотреть файл

@ -1,5 +1,14 @@
2005-05-20 Pavel Roskin <proski@gnu.org> 2005-05-20 Pavel Roskin <proski@gnu.org>
* editwidget.c (edit_file): Move menu initialization ...
* editmenu.c (edit_init_menu): ... here. Allocate menu
dynamically.
(edit_done_menu): Take Wmenu argument rather than Menu. Free
menu.
(edit_reload_menu): New function, reload the menu.
(edit_options_dialog): Reload the menu if key emulation has
changed.
* edit.h: Eliminate global EditMenuBar. Fix all dependencies. * edit.h: Eliminate global EditMenuBar. Fix all dependencies.
* edit.h: Eliminate edit_message_dialog macro - it's used * edit.h: Eliminate edit_message_dialog macro - it's used

Просмотреть файл

@ -111,9 +111,9 @@ struct Menu;
int edit_drop_hotkey_menu (WEdit *e, int key); int edit_drop_hotkey_menu (WEdit *e, int key);
void edit_menu_cmd (WEdit *e); void edit_menu_cmd (WEdit *e);
void edit_init_menu_emacs (struct Menu *EditMenuBar[]); struct WMenu *edit_init_menu (void);
void edit_init_menu_normal (struct Menu *EditMenuBar[]); void edit_done_menu (struct WMenu *wmenu);
void edit_done_menu (struct Menu *EditMenuBar[]); void edit_reload_menu (void);
void menu_save_mode_cmd (void); void menu_save_mode_cmd (void);
int edit_raw_key_query (const char *heading, const char *query, int cancel); int edit_raw_key_query (const char *heading, const char *query, int cancel);
int edit_file (const char *_file, int line); int edit_file (const char *_file, int line);

Просмотреть файл

@ -437,11 +437,42 @@ void edit_init_menu_emacs (struct Menu *EditMenuBar[])
"[Internal File Editor]"); "[Internal File Editor]");
} }
void edit_done_menu (struct Menu *EditMenuBar[]) struct WMenu *
edit_init_menu (void)
{
struct Menu **EditMenuBar = g_new(struct Menu *, N_menus);
switch (edit_key_emulation) {
case EDIT_KEY_EMULATION_NORMAL:
edit_init_menu_normal (EditMenuBar);
break;
case EDIT_KEY_EMULATION_EMACS:
edit_init_menu_emacs (EditMenuBar);
break;
}
return menubar_new (0, 0, COLS, EditMenuBar, N_menus);
}
void
edit_done_menu (struct WMenu *wmenu)
{ {
int i; int i;
for (i = 0; i < N_menus; i++) for (i = 0; i < N_menus; i++)
destroy_menu (EditMenuBar[i]); destroy_menu (wmenu->menu[i]);
g_free(wmenu->menu);
}
void
edit_reload_menu (void)
{
struct WMenu *new_edit_menubar;
new_edit_menubar = edit_init_menu ();
dlg_replace_widget (&edit_menubar->widget, &new_edit_menubar->widget);
edit_done_menu (edit_menubar);
edit_menubar = new_edit_menubar;
} }

Просмотреть файл

@ -212,7 +212,11 @@ edit_options_dialog (void)
option_typewriter_wrap = 0; option_typewriter_wrap = 0;
} }
edit_key_emulation = tedit_key_emulation; /* Reload menu if key emulation has changed */
if (edit_key_emulation != tedit_key_emulation) {
edit_key_emulation = tedit_key_emulation;
edit_reload_menu ();
}
/* Load or unload syntax rules if the option has changed */ /* Load or unload syntax rules if the option has changed */
if (option_syntax_highlighting != old_syntax_hl) if (option_syntax_highlighting != old_syntax_hl)

Просмотреть файл

@ -47,7 +47,6 @@
WEdit *wedit; WEdit *wedit;
struct WMenu *edit_menubar; struct WMenu *edit_menubar;
struct Menu *EditMenuBar[N_menus];
int column_highlighting = 0; int column_highlighting = 0;
@ -215,15 +214,7 @@ edit_file (const char *_file, int line)
edit_bar = buttonbar_new (1); edit_bar = buttonbar_new (1);
switch (edit_key_emulation) { edit_menubar = edit_init_menu ();
case EDIT_KEY_EMULATION_NORMAL:
edit_init_menu_normal (EditMenuBar); /* editmenu.c */
break;
case EDIT_KEY_EMULATION_EMACS:
edit_init_menu_emacs (EditMenuBar); /* editmenu.c */
break;
}
edit_menubar = menubar_new (0, 0, COLS, EditMenuBar, N_menus);
add_widget (edit_dlg, edit_bar); add_widget (edit_dlg, edit_bar);
add_widget (edit_dlg, wedit); add_widget (edit_dlg, wedit);
@ -231,7 +222,7 @@ edit_file (const char *_file, int line)
run_dlg (edit_dlg); run_dlg (edit_dlg);
edit_done_menu (EditMenuBar); /* editmenu.c */ edit_done_menu (edit_menubar); /* editmenu.c */
destroy_dlg (edit_dlg); destroy_dlg (edit_dlg);