summaryrefslogtreecommitdiff
path: root/gtk/gtk_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtk_menu.c')
-rw-r--r--gtk/gtk_menu.c95
1 files changed, 68 insertions, 27 deletions
diff --git a/gtk/gtk_menu.c b/gtk/gtk_menu.c
index b0e86c56c..d8063e356 100644
--- a/gtk/gtk_menu.c
+++ b/gtk/gtk_menu.c
@@ -79,6 +79,15 @@ static bool nsgtk_menu_add_image_item(GtkMenu *menu,
} \
} while(0)
+#define ADD_NAMED_SEP(q, r, s) \
+ do { \
+ s->r##_separator = gtk_separator_menu_item_new(); \
+ if ((s->r##_separator != NULL) && (s->q##_menu != NULL)) { \
+ gtk_menu_shell_append(GTK_MENU_SHELL(s->q##_menu), s->r##_separator); \
+ gtk_widget_show(s->r##_separator); \
+ } \
+ } while(0)
+
#define ADD_SEP(q, r) \
do { \
GtkWidget *w = gtk_separator_menu_item_new(); \
@@ -262,7 +271,7 @@ static struct nsgtk_debugging_submenu *nsgtk_menu_debugging_submenu(
* \param group The gtk 'global' accelerator reference
* \param parent The parent menu to attach to or NULL
*/
-static struct nsgtk_file_menu *nsgtk_menu_file_menu(GtkAccelGroup *group)
+static struct nsgtk_file_menu *nsgtk_menu_file_submenu(GtkAccelGroup *group)
{
struct nsgtk_file_menu *fmenu;
@@ -301,7 +310,7 @@ static struct nsgtk_file_menu *nsgtk_menu_file_menu(GtkAccelGroup *group)
* \param group the 'global' in a gtk sense accelerator reference
*/
-static struct nsgtk_edit_menu *nsgtk_menu_edit_menu(GtkAccelGroup *group)
+static struct nsgtk_edit_menu *nsgtk_menu_edit_submenu(GtkAccelGroup *group)
{
struct nsgtk_edit_menu *ret = malloc(sizeof(struct nsgtk_edit_menu));
if (ret == NULL) {
@@ -333,7 +342,7 @@ static struct nsgtk_edit_menu *nsgtk_menu_edit_menu(GtkAccelGroup *group)
* \param group the 'global' in a gtk sense accelerator reference
*/
-static struct nsgtk_view_menu *nsgtk_menu_view_menu(GtkAccelGroup *group)
+static struct nsgtk_view_menu *nsgtk_menu_view_submenu(GtkAccelGroup *group)
{
struct nsgtk_view_menu *ret = malloc(sizeof(struct nsgtk_view_menu));
if (ret == NULL) {
@@ -375,7 +384,7 @@ static struct nsgtk_view_menu *nsgtk_menu_view_menu(GtkAccelGroup *group)
* \param group the 'global' in a gtk sense accelerator reference
*/
-static struct nsgtk_nav_menu *nsgtk_menu_nav_menu(GtkAccelGroup *group)
+static struct nsgtk_nav_menu *nsgtk_menu_nav_submenu(GtkAccelGroup *group)
{
struct nsgtk_nav_menu *ret = malloc(sizeof(struct nsgtk_nav_menu));
if (ret == NULL) {
@@ -412,7 +421,7 @@ static struct nsgtk_nav_menu *nsgtk_menu_nav_menu(GtkAccelGroup *group)
* \param group the 'global' in a gtk sense accelerator reference
*/
-static struct nsgtk_help_menu *nsgtk_menu_help_menu(GtkAccelGroup *group)
+static struct nsgtk_help_menu *nsgtk_menu_help_submenu(GtkAccelGroup *group)
{
struct nsgtk_help_menu *ret = malloc(sizeof(struct nsgtk_help_menu));
if (ret == NULL) {
@@ -440,36 +449,36 @@ static struct nsgtk_help_menu *nsgtk_menu_help_menu(GtkAccelGroup *group)
*
* Generate the main menu structure and attach it to a menubar widget.
*/
-struct nsgtk_menu_bar *nsgtk_menu_bar_create(GtkMenuShell *menubar, GtkWindow *window)
+struct nsgtk_bar_submenu *nsgtk_menu_bar_create(GtkMenuShell *menubar, GtkWindow *window)
{
GtkAccelGroup *group;
- struct nsgtk_menu_bar *nmenu;
+ struct nsgtk_bar_submenu *nmenu;
- nmenu = malloc(sizeof(struct nsgtk_menu_bar));
+ nmenu = malloc(sizeof(struct nsgtk_bar_submenu));
if (nmenu == NULL) {
warn_user(messages_get("NoMemory"), 0);
return NULL;
}
- nmenu->menu_bar = GTK_MENU_BAR(menubar);
+ nmenu->bar_menu = GTK_MENU_BAR(menubar);
group = gtk_accel_group_new();
gtk_window_add_accel_group(window, group);
- nmenu->file = nsgtk_menu_file_menu(group);
- ATTACH_PARENT(menubar, gtkFile, nmenu->file->file, group);
+ nmenu->file_submenu = nsgtk_menu_file_submenu(group);
+ ATTACH_PARENT(menubar, gtkFile, nmenu->file_submenu->file, group);
- nmenu->edit = nsgtk_menu_edit_menu(group);
- ATTACH_PARENT(menubar, gtkEdit, nmenu->edit->edit, group);
+ nmenu->edit_submenu = nsgtk_menu_edit_submenu(group);
+ ATTACH_PARENT(menubar, gtkEdit, nmenu->edit_submenu->edit, group);
- nmenu->view = nsgtk_menu_view_menu(group);
- ATTACH_PARENT(menubar, gtkView, nmenu->view->view, group);
+ nmenu->view_submenu = nsgtk_menu_view_submenu(group);
+ ATTACH_PARENT(menubar, gtkView, nmenu->view_submenu->view, group);
- nmenu->nav = nsgtk_menu_nav_menu(group);
- ATTACH_PARENT(menubar, gtkNavigate, nmenu->nav->nav, group);
+ nmenu->nav_submenu = nsgtk_menu_nav_submenu(group);
+ ATTACH_PARENT(menubar, gtkNavigate, nmenu->nav_submenu->nav, group);
- nmenu->help = nsgtk_menu_help_menu(group);
- ATTACH_PARENT(menubar, gtkHelp, nmenu->help->help, group);
+ nmenu->help_submenu = nsgtk_menu_help_submenu(group);
+ ATTACH_PARENT(menubar, gtkHelp, nmenu->help_submenu->help, group);
return nmenu;
}
@@ -478,12 +487,12 @@ struct nsgtk_menu_bar *nsgtk_menu_bar_create(GtkMenuShell *menubar, GtkWindow *w
* Generate right click menu menu.
*
*/
-struct nsgtk_menu_rclick *nsgtk_menu_rclick_create(GtkWindow *window)
+struct nsgtk_popup_submenu *nsgtk_menu_popup_create(GtkWindow *window)
{
GtkAccelGroup *group;
- struct nsgtk_menu_rclick *nmenu;
+ struct nsgtk_popup_submenu *nmenu;
- nmenu = malloc(sizeof(struct nsgtk_menu_rclick));
+ nmenu = malloc(sizeof(struct nsgtk_popup_submenu));
if (nmenu == NULL) {
warn_user(messages_get("NoMemory"), 0);
return NULL;
@@ -492,11 +501,43 @@ struct nsgtk_menu_rclick *nsgtk_menu_rclick_create(GtkWindow *window)
group = gtk_accel_group_new();
gtk_window_add_accel_group(window, group);
- nmenu->file = nsgtk_menu_file_menu(group);
- nmenu->edit = nsgtk_menu_edit_menu(group);
- nmenu->view = nsgtk_menu_view_menu(group);
- nmenu->nav = nsgtk_menu_nav_menu(group);
- nmenu->help = nsgtk_menu_help_menu(group);
+ nmenu->popup_menu = GTK_MENU(gtk_menu_new());
+
+ IMAGE_ITEM(popup, file, gtkFile, nmenu, group);
+ SET_SUBMENU(file, nmenu);
+
+ IMAGE_ITEM(popup, edit, gtkEdit, nmenu, group);
+ SET_SUBMENU(edit, nmenu);
+
+ IMAGE_ITEM(popup, view, gtkView, nmenu, group);
+ SET_SUBMENU(view, nmenu);
+
+ IMAGE_ITEM(popup, nav, gtkNavigate, nmenu, group);
+ SET_SUBMENU(nav, nmenu);
+
+ IMAGE_ITEM(popup, help, gtkHelp, nmenu, group);
+ SET_SUBMENU(help, nmenu);
+
+ ADD_NAMED_SEP(popup, first, nmenu);
+
+ IMAGE_ITEM(popup, opentab, gtkOpentab, nmenu, group);
+ IMAGE_ITEM(popup, openwin, gtkOpenwin, nmenu, group);
+ IMAGE_ITEM(popup, savelink, gtkSavelink, nmenu, group);
+
+ ADD_NAMED_SEP(popup, second, nmenu);
+
+ IMAGE_ITEM(popup, back, gtkBack, nmenu, group);
+ IMAGE_ITEM(popup, forward, gtkForward, nmenu, group);
+
+ ADD_NAMED_SEP(popup, third, nmenu);
+
+ IMAGE_ITEM(popup, stop, gtkStop, nmenu, group);
+ IMAGE_ITEM(popup, reload, gtkReload, nmenu, group);
+ IMAGE_ITEM(popup, cut, gtkCut, nmenu, group);
+ IMAGE_ITEM(popup, copy, gtkCopy, nmenu, group);
+ IMAGE_ITEM(popup, paste, gtkPaste, nmenu, group);
+ IMAGE_ITEM(popup, customize, gtkCustomize, nmenu, group);
+
return nmenu;
}