summaryrefslogtreecommitdiff
path: root/amiga/context_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'amiga/context_menu.c')
-rwxr-xr-xamiga/context_menu.c145
1 files changed, 113 insertions, 32 deletions
diff --git a/amiga/context_menu.c b/amiga/context_menu.c
index 55ea2ed29..747208aaf 100755
--- a/amiga/context_menu.c
+++ b/amiga/context_menu.c
@@ -22,10 +22,51 @@
#include <proto/popupmenu.h>
#include <proto/intuition.h>
#include "amiga/utf8.h"
+#include "utils/utf8.h"
#include "utils/messages.h"
+#include "amiga/options.h"
+#include "amiga/clipboard.h"
+#include <proto/asl.h>
+#include <proto/dos.h>
+#include <string.h>
+#include "utils/utils.h"
uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved);
+char *ctxmenulab[CMID_LAST];
+
+void ami_context_menu_init(void)
+{
+ ctxmenulab[CMID_SELECTFILE] = ami_utf8_easy((char *)messages_get("SelectFile"));
+ ctxmenulab[CMID_COPYURL] = ami_utf8_easy((char *)messages_get("CopyURL"));
+ ctxmenulab[CMID_SHOWOBJ] = ami_utf8_easy((char *)messages_get("ObjShow"));
+ ctxmenulab[CMID_COPYOBJ] = ami_utf8_easy((char *)messages_get("CopyURL"));
+
+ if(!option_force_tabs)
+ {
+ ctxmenulab[CMID_URLOPENWIN] = ami_utf8_easy((char *)messages_get("LinkNewWin"));
+ ctxmenulab[CMID_URLOPENTAB] = ami_utf8_easy((char *)messages_get("LinkNewTab"));
+ }
+ else
+ {
+ ctxmenulab[CMID_URLOPENWIN] = ami_utf8_easy((char *)messages_get("LinkNewTab"));
+ ctxmenulab[CMID_URLOPENTAB] = ami_utf8_easy((char *)messages_get("LinkNewWin"));
+ }
+
+ ctxmenulab[CMSUB_OBJECT] = ami_utf8_easy((char *)messages_get("Object"));
+ ctxmenulab[CMSUB_URL] = ami_utf8_easy((char *)messages_get("Link"));
+}
+
+void ami_context_menu_free(void)
+{
+ int i;
+
+ for(i=0;i<CMID_LAST;i++)
+ {
+ ami_utf8_free(ctxmenulab[i]);
+ }
+}
+
void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y)
{
struct box *curbox = gwin->bw->current_content->data.html.layout;
@@ -52,18 +93,25 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y)
{
IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("CopyURL")),
- PMIA_ID,CMID_COPYURL,
- PMIA_UserData,curbox->href,
- TAG_DONE),
- ~0);
-
- IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
- NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("SaveURL")),
- PMIA_ID,CMID_SAVEURL,
- PMIA_UserData,curbox->href,
+ PMIA_Title, (ULONG)ctxmenulab[CMSUB_URL],
+ PMSIMPLESUB,
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_URLOPENWIN],
+ PMIA_ID,CMID_URLOPENWIN,
+ PMIA_UserData,curbox->href,
+ TAG_DONE),
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_URLOPENTAB],
+ PMIA_ID,CMID_URLOPENTAB,
+ PMIA_UserData,curbox->href,
+ TAG_DONE),
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_COPYURL],
+ PMIA_ID,CMID_COPYURL,
+ PMIA_UserData,curbox->href,
+ TAG_DONE),
TAG_DONE),
+ TAG_DONE),
~0);
}
@@ -71,20 +119,21 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y)
{
IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("ObjShow")),
- PMIA_ID,CMID_SHOWOBJ,
- PMIA_UserData,curbox->object->url,
- TAG_DONE),
- ~0);
-
- IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
- NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("ObjSave")),
- PMIA_ID,CMID_SAVEOBJ,
- PMIA_UserData,curbox->object->url,
+ PMIA_Title, (ULONG)ctxmenulab[CMSUB_OBJECT],
+ PMSIMPLESUB,
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_SHOWOBJ],
+ PMIA_ID,CMID_SHOWOBJ,
+ PMIA_UserData,curbox->object->url,
+ TAG_DONE),
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_COPYOBJ],
+ PMIA_ID,CMID_COPYOBJ,
+ PMIA_UserData,curbox->object->url,
+ TAG_DONE),
TAG_DONE),
+ TAG_DONE),
~0);
-
}
if (curbox->gadget)
@@ -94,9 +143,9 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y)
case GADGET_FILE:
IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("SelectFile")),
+ PMIA_Title, (ULONG)ctxmenulab[CMID_SELECTFILE],
PMIA_ID,CMID_SELECTFILE,
- PMIA_UserData,curbox->gadget,
+ PMIA_UserData,curbox,
TAG_DONE),
~0);
break;
@@ -113,6 +162,7 @@ uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved)
int32 itemid = 0;
struct gui_window_2 *gwin = hook->h_Data;
APTR userdata = NULL;
+ struct browser_window *bw;
if(GetAttrs(item,PMIA_ID,&itemid,
PMIA_UserData,&userdata,
@@ -121,20 +171,51 @@ uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved)
switch(itemid)
{
case CMID_SELECTFILE:
- printf("select file - gadget %lx\n",userdata);
+ if(AslRequestTags(filereq,
+ ASLFR_TitleText,messages_get("NetSurf"),
+ ASLFR_Screen,scrn,
+ ASLFR_DoSaveMode,FALSE,
+ TAG_DONE))
+ {
+ struct box *box = userdata;
+ char *utf8_fn;
+ char fname[1024];
+ int x,y;
+
+ strlcpy(&fname,filereq->fr_Drawer,1024);
+ AddPart(fname,filereq->fr_File,1024);
+
+ if(utf8_from_local_encoding(fname,0,&utf8_fn) != UTF8_CONVERT_OK)
+ {
+ warn_user("NoMemory","");
+ break;
+ }
+
+ free(box->gadget->value);
+ box->gadget->value = utf8_fn;
+
+ box_coords(box, (int *)&x, (int *)&y);
+ gui_window_redraw(gwin->bw->window,x,y,
+ x + box->width,
+ y + box->height);
+ }
break;
case CMID_COPYURL:
- printf("add to clipboard: %s\n",userdata);
+ case CMID_COPYOBJ:
+ ami_easy_clipboard((char *)userdata);
break;
- case CMID_SHOWOBJ:
- browser_window_go(gwin->bw,userdata,NULL,true);
+ case CMID_URLOPENWIN:
+ bw = browser_window_create(userdata,gwin->bw, gwin->bw->current_content->url, true, false);
+ break;
+
+ case CMID_URLOPENTAB:
+ bw = browser_window_create(userdata,gwin->bw, gwin->bw->current_content->url, true, true);
break;
- case CMID_SAVEOBJ:
- case CMID_SAVEURL:
- printf("download: %s\n",userdata);
+ case CMID_SHOWOBJ:
+ browser_window_go(gwin->bw,userdata,gwin->bw->current_content->url,true);
break;
}
}