summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2015-09-03 00:24:04 +0100
committerChris Young <chris@unsatisfactorysoftware.co.uk>2015-09-03 00:24:04 +0100
commit944248ce3205881df9268d2c3f9f0cb52fc2f075 (patch)
treeea06263d09b12229020d3384b5416d9c20f3952f
parent52d182e71e3098148b98e7ae24b7740305960634 (diff)
downloadnetsurf-944248ce3205881df9268d2c3f9f0cb52fc2f075.tar.gz
netsurf-944248ce3205881df9268d2c3f9f0cb52fc2f075.tar.bz2
Rough outline for Intuition-based context menu
-rw-r--r--amiga/Makefile.target2
-rw-r--r--amiga/ctxmenu.c127
-rw-r--r--amiga/ctxmenu.h45
-rw-r--r--amiga/gui.c8
-rwxr-xr-xamiga/gui.h9
-rw-r--r--amiga/menu.c2
-rw-r--r--desktop/gui_window.h1
7 files changed, 186 insertions, 8 deletions
diff --git a/amiga/Makefile.target b/amiga/Makefile.target
index e704eb5f4..62c26b21d 100644
--- a/amiga/Makefile.target
+++ b/amiga/Makefile.target
@@ -70,7 +70,7 @@ MESSAGES_FILTER=ami
S_AMIGA := gui.c tree.c history.c hotlist.c schedule.c file.c \
misc.c bitmap.c font.c filetype.c utf8.c login.c \
plotters.c object.c menu.c save_pdf.c arexx.c version.c \
- cookies.c context_menu.c clipboard.c help.c font_scan.c \
+ cookies.c context_menu.c ctxmenu.c clipboard.c help.c font_scan.c \
launch.c search.c history_local.c download.c iff_dr2d.c \
sslcert.c gui_options.c print.c theme.c drag.c icon.c libs.c \
datatypes.c dt_picture.c dt_anim.c dt_sound.c plugin_hack.c \
diff --git a/amiga/ctxmenu.c b/amiga/ctxmenu.c
new file mode 100644
index 000000000..2b7575321
--- /dev/null
+++ b/amiga/ctxmenu.c
@@ -0,0 +1,127 @@
+/*
+ * 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
+ * Intuition-based context menu operations
+ */
+
+#ifdef __amigaos4__
+#include <string.h>
+
+#include <proto/intuition.h>
+#include <classes/window.h>
+#include <images/bitmap.h>
+#include <intuition/menuclass.h>
+#include <reaction/reaction_macros.h>
+
+#include "amiga/ctxmenu.h"
+#include "amiga/gui.h"
+#include "amiga/libs.h"
+
+#include "utils/log.h"
+
+enum {
+ AMI_CTX_ID_TEST = 1,
+ AMI_CTX_ID_MAX
+};
+
+static Object *ctxmenu_obj = NULL;
+static struct Hook ctxmenu_hook;
+
+static struct Hook ctxmenu_item_hook[AMI_CTX_ID_MAX];
+static char *ctxmenu_item_label[AMI_CTX_ID_MAX];
+static char *ctxmenu_item_image[AMI_CTX_ID_MAX];
+
+/** Menu functions - called automatically by RA_HandleInput **/
+HOOKF(void, ami_ctxmenu_item_test, APTR, window, struct IntuiMessage *)
+{
+ printf("testing\n");
+}
+
+/** Hook function called by Intuition, creates context menu structure **/
+static uint32 ctxmenu_hook_func(struct Hook *hook, struct Window *window, struct ContextMenuMsg *msg)
+{
+ if(msg->State != CM_QUERY) return 0;
+
+ ctxmenu_item_hook[AMI_CTX_ID_TEST].h_Entry = (void *)ami_ctxmenu_item_test;
+ ctxmenu_item_hook[AMI_CTX_ID_TEST].h_Data = 0;
+
+ if(ctxmenu_obj != NULL) DisposeObject(ctxmenu_obj);
+
+ ctxmenu_obj = MStrip,
+ MA_Type, T_ROOT,
+ MA_AddChild, MStrip,
+ MA_Type, T_MENU,
+ MA_Label, NULL, //"NetSurf",
+ MA_AddChild, MStrip,
+ MA_Type, T_ITEM,
+ MA_Label, ctxmenu_item_label[AMI_CTX_ID_TEST],
+ MA_ID, AMI_CTX_ID_TEST,
+ MA_Image, BitMapObj,
+ IA_Scalable, TRUE,
+ BITMAP_SourceFile, ctxmenu_item_image[AMI_CTX_ID_TEST],
+ BITMAP_Screen, scrn,
+ BITMAP_Masking, TRUE,
+ BITMAP_Width, 16,
+ BITMAP_Height, 16,
+ BitMapEnd,
+ MA_UserData, &ctxmenu_item_hook[AMI_CTX_ID_TEST],
+ MEnd,
+ MEnd,
+ MEnd;
+
+ msg->Menu = ctxmenu_obj;
+
+ return 0;
+}
+
+/** Exported interface documented in ctxmenu.h **/
+struct Hook *ami_ctxmenu_get_hook(void)
+{
+ return &ctxmenu_hook;
+}
+
+/** Exported interface documented in ctxmenu.h **/
+void ami_ctxmenu_init(void)
+{
+ ctxmenu_hook.h_Entry = (HOOKFUNC)ctxmenu_hook_func;
+ ctxmenu_hook.h_Data = 0;
+
+ ctxmenu_item_label[AMI_CTX_ID_TEST] = strdup("test item");
+ ctxmenu_item_image[AMI_CTX_ID_TEST] = strdup("TBimages:list_info");
+}
+
+/** Exported interface documented in ctxmenu.h **/
+void ami_ctxmenu_free(void)
+{
+ for(int i = 1; i < AMI_CTX_ID_MAX; i++) {
+ if(ctxmenu_item_label[i] != NULL) {
+ free(ctxmenu_item_label[i]);
+ ctxmenu_item_label[i] = NULL;
+ }
+ if(ctxmenu_item_image[i] != NULL) {
+ free(ctxmenu_item_image[i]);
+ ctxmenu_item_image[i] = NULL;
+ }
+ }
+
+ if(ctxmenu_obj != NULL) DisposeObject(ctxmenu_obj);
+ ctxmenu_obj = NULL;
+}
+#endif
+
diff --git a/amiga/ctxmenu.h b/amiga/ctxmenu.h
new file mode 100644
index 000000000..e23c723f1
--- /dev/null
+++ b/amiga/ctxmenu.h
@@ -0,0 +1,45 @@
+/*
+ * 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;
+
+/**
+ * Initialise context menus code
+ */
+void ami_ctxmenu_init(void);
+
+/**
+ * Cleanup context menus code
+ */
+void ami_ctxmenu_free(void);
+
+/**
+ * Get a Hook for WA_ContextMenuHook
+ *
+ * \returns pointer to a struct Hook
+ */
+struct Hook *ami_ctxmenu_get_hook(void);
+#endif
+
diff --git a/amiga/gui.c b/amiga/gui.c
index 3de20bf88..46973f282 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2014 Chris Young <chris@unsatisfactorysoftware.co.uk>
+ * Copyright 2008-2015 Chris Young <chris@unsatisfactorysoftware.co.uk>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
@@ -121,6 +121,7 @@
#include "amiga/clipboard.h"
#include "amiga/context_menu.h"
#include "amiga/cookies.h"
+#include "amiga/ctxmenu.h"
#include "amiga/datatypes.h"
#include "amiga/download.h"
#include "amiga/drag.h"
@@ -2944,6 +2945,7 @@ static void gui_quit(void)
LOG("Freeing menu items");
ami_context_menu_free();
+ ami_ctxmenu_free();
ami_menu_free_glyphs();
LOG("Freeing mouse pointers");
@@ -3755,7 +3757,7 @@ gui_window_create(struct browser_window *bw,
}
ami_NewMinList(&g->shared->shared_pens);
-
+
g->shared->scrollerhook.h_Entry = (void *)ami_scroller_hook;
g->shared->scrollerhook.h_Data = g->shared;
@@ -3930,6 +3932,7 @@ gui_window_create(struct browser_window *bw,
WA_ReportMouse,TRUE,
refresh_mode, TRUE,
WA_SizeBBottom, TRUE,
+ WA_ContextMenuHook, ami_ctxmenu_get_hook(),
WA_IDCMP, IDCMP_MENUPICK | IDCMP_MOUSEMOVE |
IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | idcmp_sizeverify |
@@ -5430,6 +5433,7 @@ int main(int argc, char** argv)
ami_amiupdate(); /* set env-vars for AmiUpdate */
ami_init_fonts();
ami_context_menu_init();
+ ami_ctxmenu_init();
save_complete_init();
ami_theme_init();
ami_init_mouse_pointers();
diff --git a/amiga/gui.h b/amiga/gui.h
index adad63d4f..7ac140b19 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2014 Chris Young <chris@unsatisfactorysoftware.co.uk>
+ * Copyright 2008-2015 Chris Young <chris@unsatisfactorysoftware.co.uk>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
@@ -18,15 +18,16 @@
#ifndef AMIGA_GUI_H
#define AMIGA_GUI_H
-
+#include <stdbool.h>
#include <graphics/rastport.h>
-#include "amiga/object.h"
#include <intuition/classusr.h>
#include <dos/dos.h>
#include <devices/inputevent.h>
+#include "amiga/menu.h"
+#include "amiga/object.h"
#include "amiga/os3support.h"
#include "amiga/plotters.h"
-#include "amiga/menu.h"
+#include "desktop/gui_window.h"
#ifdef __amigaos4__
#define HOOKF(ret,func,type,ptr,msgtype) static ret func(struct Hook *hook, type ptr, msgtype msg)
diff --git a/amiga/menu.c b/amiga/menu.c
index 571f411fd..c4e0a51d7 100644
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -561,7 +561,7 @@ static void ami_menu_alloc_item(struct gui_window_2 *gwin, int num, UBYTE type,
gwin->menulab[num] = ami_utf8_easy(messages_get(label));
}
}
-
+
gwin->menuicon[num] = NULL;
if(key) gwin->menukey[num] = key;
if(func) gwin->menu_hook[num].h_Entry = (HOOKFUNC)func;
diff --git a/desktop/gui_window.h b/desktop/gui_window.h
index 7ecd3c21d..7f542ff7b 100644
--- a/desktop/gui_window.h
+++ b/desktop/gui_window.h
@@ -63,6 +63,7 @@ struct hlcache_handle;
struct nsurl;
enum gui_pointer_shape;
+enum nserror;
/**
* Graphical user interface window function table.