summaryrefslogtreecommitdiff
path: root/amiga/ctxmenu.h
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2015-09-05 16:38:48 +0100
committerChris Young <chris@unsatisfactorysoftware.co.uk>2015-09-05 16:38:48 +0100
commit1a8cf5b7a7e9982c859364638e6ae4b6ed1cfd93 (patch)
tree25a05797dd3cbcb1ea60966dee4ec301b38db666 /amiga/ctxmenu.h
parent2e4bfc5dc3ae3d6c13fbc6f956b611354ed37257 (diff)
parent5b880e586c9358db0ae86bb95edb2559f16d5da4 (diff)
downloadnetsurf-1a8cf5b7a7e9982c859364638e6ae4b6ed1cfd93.tar.gz
netsurf-1a8cf5b7a7e9982c859364638e6ae4b6ed1cfd93.tar.bz2
Merge branch 'chris/menuclass'
This replaces the old popupmenu.class-based context menus with Intuition-based ones. This provides the following advantages: - No more RMBTrap, so menu shortcuts work without having to be manually handled - Standard menus now display when not over a contextual zone, so the not-really-contextual menu items have been removed - No buggy system crash problems, so they are always enabled now - Menus can be attached directly to gadgets, so the history menu is now attached directly to the back/forward buttons (however they now need to be periodically refreshed as they can't be created on demand) Additionally, the menu items now have images. popupmenu.class is now only used (optionally) for form select menus. This code has been bug-fixed and is now toggleable from the prefs GUI. However, due to the inability to display more items than fit on the screen, it still isn't recommended to use it.
Diffstat (limited to 'amiga/ctxmenu.h')
-rw-r--r--amiga/ctxmenu.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/amiga/ctxmenu.h b/amiga/ctxmenu.h
new file mode 100644
index 000000000..79c0dc793
--- /dev/null
+++ b/amiga/ctxmenu.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2015 Chris Young <chris@unsatisfactorysoftware.co.uk>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * Interface to Intuition-based context menu operations
+ */
+
+#ifndef AMIGA_CTXMENU_H
+#define AMIGA_CTXMENU_H 1
+
+struct Hook;
+struct Menu;
+struct gui_window_2;
+
+enum {
+ AMI_CTXMENU_HISTORY_BACK = 0,
+ AMI_CTXMENU_HISTORY_FORWARD = 1
+};
+
+/**
+ * Initialise context menus code (allocate label text, etc)
+ * Must be called *after* NetSurf's screen pointer is obtained.
+ */
+void ami_ctxmenu_init(void);
+
+/**
+ * Cleanup context menus code
+ */
+void ami_ctxmenu_free(void);
+
+/**
+ * Get a Hook for WA_ContextMenuHook
+ *
+ * \param data ptr for the hook to use (struct gui_window_2 *)
+ * \returns pointer to a struct Hook
+ */
+struct Hook *ami_ctxmenu_get_hook(APTR data);
+
+/**
+ * Release a Hook for WA_ContextMenuHook
+ *
+ * \param hook ptr to hook
+ */
+void ami_ctxmenu_release_hook(struct Hook *hook);
+
+/**
+ * Create history context menu
+ * The first time this is run it will create an empty menu,
+ * Subsequent runs will (re-)populate with the history.
+ * This is to allow the pointer to be obtained before the browser_window is opened.
+ *
+ * \param direction AMI_CTXMENU_HISTORY_(BACK|FORWARD)
+ * \param gwin struct gui_window_2 *
+ * \returns pointer to menu (for convenience, is also stored in gwin structure)
+ * The returned pointer MUST be disposed of with DisposeObject before program exit.
+ */
+struct Menu *ami_ctxmenu_history_create(int direction, struct gui_window_2 *gwin);
+
+/**
+ * Create ClickTab context menu
+ *
+ * \param gwin struct gui_window_2 *
+ * \returns pointer to menu (for convenience, is also stored in gwin structure)
+ * The returned pointer MUST be disposed of with DisposeObject before program exit.
+ */
+struct Menu *ami_ctxmenu_clicktab_create(struct gui_window_2 *gwin);
+
+#else
+inline void ami_ctxmenu_init(void) {}
+inline void ami_ctxmenu_free(void) {}
+inline struct Hook *ami_ctxmenu_get_hook(APTR data) {return NULL;}
+inline void ami_ctxmenu_release_hook(struct Hook *hook) {}
+inline struct Menu *ami_ctxmenu_history_create(int direction, struct gui_window_2 *gwin) {return NULL;}
+#endif