From c1afe81e063c7c9202a391228f1f9833170d7c3a Mon Sep 17 00:00:00 2001 From: Chris Young Date: Sun, 23 Oct 2011 13:15:44 +0000 Subject: Complete extended context menus svn path=/trunk/netsurf/; revision=13076 --- !NetSurf/Resources/de/Messages | 2 + !NetSurf/Resources/en/Messages | 2 + !NetSurf/Resources/fr/Messages | 2 + !NetSurf/Resources/it/Messages | 2 + !NetSurf/Resources/nl/Messages | 2 + amiga/context_menu.c | 151 ++++++++++++++++++++++++++--------------- amiga/drag.c | 10 ++- amiga/file.c | 17 +++-- amiga/file.h | 7 +- amiga/gui.c | 3 +- amiga/menu.c | 15 ++-- 11 files changed, 139 insertions(+), 74 deletions(-) diff --git a/!NetSurf/Resources/de/Messages b/!NetSurf/Resources/de/Messages index 7cab449a7..e919c2a9c 100644 --- a/!NetSurf/Resources/de/Messages +++ b/!NetSurf/Resources/de/Messages @@ -299,6 +299,8 @@ CopyURL:URL ins Clipboard CopyClip:Inhalt ins Clipboard SaveAs:Speichern als... SaveIFF:Speichern als IFF... +SaveComplete:Save complete... +Close:Close ObjShow:Zeige Objekt Frame:Frame FrameNewWin:Show in new window diff --git a/!NetSurf/Resources/en/Messages b/!NetSurf/Resources/en/Messages index b17813209..d3804b3de 100644 --- a/!NetSurf/Resources/en/Messages +++ b/!NetSurf/Resources/en/Messages @@ -301,6 +301,8 @@ CopyURL:Copy URL to clipboard CopyClip:Copy to clipboard SaveAs:Save as... SaveIFF:Save as IFF... +SaveComplete:Save complete... +Close:Close ObjShow:Show object Frame:Frame FrameNewWin:Show in new window diff --git a/!NetSurf/Resources/fr/Messages b/!NetSurf/Resources/fr/Messages index f042169a0..f228085cb 100644 --- a/!NetSurf/Resources/fr/Messages +++ b/!NetSurf/Resources/fr/Messages @@ -299,6 +299,8 @@ CopyURL:Copy URL to clipboard CopyClip:Copy to clipboard SaveAs:Save as... SaveIFF:Save as IFF... +SaveComplete:Save complete... +Close:Close ObjShow:Show object Frame:Frame FrameNewWin:Show in new window diff --git a/!NetSurf/Resources/it/Messages b/!NetSurf/Resources/it/Messages index 2df246343..b28b7e3de 100644 --- a/!NetSurf/Resources/it/Messages +++ b/!NetSurf/Resources/it/Messages @@ -303,6 +303,8 @@ CopyURL:Copia URL nella clipboard CopyClip:Copia nella clipboard SaveAs:Salva come... SaveIFF:Salva come IFF... +SaveComplete:Save complete... +Close:Close ObjShow:Mostra oggetto Frame:Frame FrameNewWin:Show in new window diff --git a/!NetSurf/Resources/nl/Messages b/!NetSurf/Resources/nl/Messages index 159e0ae87..611808584 100644 --- a/!NetSurf/Resources/nl/Messages +++ b/!NetSurf/Resources/nl/Messages @@ -299,6 +299,8 @@ CopyURL:Copy URL to clipboard CopyClip:Copy to clipboard SaveAs:Save as... SaveIFF:Save as IFF... +SaveComplete:Save complete... +Close:Close ObjShow:Show object Frame:Frame FrameNewWin:Show in new window diff --git a/amiga/context_menu.c b/amiga/context_menu.c index b44275ad7..aec1b9d24 100755 --- a/amiga/context_menu.c +++ b/amiga/context_menu.c @@ -38,10 +38,11 @@ #include "amiga/plugin_hack.h" #include "amiga/theme.h" #include "amiga/utf8.h" -#include "desktop/textinput.h" +#include "desktop/history_core.h" +#include "desktop/hotlist.h" #include "desktop/selection.h" #include "desktop/searchweb.h" -#include "desktop/history_core.h" +#include "desktop/textinput.h" #include "render/box.h" #include "render/form.h" #include "utils/utf8.h" @@ -62,6 +63,7 @@ enum { CMID_URLOPEN, CMID_URLOPENWIN, CMID_URLOPENTAB, + CMID_URLHOTLIST, CMID_SAVEURL, CMID_SHOWOBJ, CMID_COPYOBJ, @@ -75,12 +77,14 @@ enum { CMID_SELCOPY, CMID_SELPASTE, CMID_SELSEARCH, + CMID_SELSAVE, CMID_FRAMEWIN, CMID_FRAMETAB, CMID_FRAMESHOW, CMID_FRAMERELOAD, CMID_FRAMECOPYURL, CMID_FRAMESAVE, + CMID_FRAMESAVECOMPLETE, CMID_PLUGINCMD, CMID_NAVHOME, CMID_NAVBACK, @@ -117,7 +121,7 @@ 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_RELOADOBJ] = ami_utf8_easy((char *)messages_get("ObjReload")); ctxmenulab[CMID_COPYOBJ] = ami_utf8_easy((char *)messages_get("CopyURL")); @@ -134,11 +138,17 @@ void ami_context_menu_init(void) ctxmenulab[CMID_FRAMEWIN] = ami_utf8_easy((char *)messages_get("FrameNewWin")); ctxmenulab[CMID_FRAMETAB] = ami_utf8_easy((char *)messages_get("FrameNewTab")); ctxmenulab[CMID_FRAMESHOW] = ami_utf8_easy((char *)messages_get("FrameOnly")); + ctxmenulab[CMID_FRAMESAVE] = ami_utf8_easy((char *)messages_get("SaveAs")); + ctxmenulab[CMID_FRAMESAVECOMPLETE] = ami_utf8_easy((char *)messages_get("SaveComplete")); + ctxmenulab[CMID_FRAMECOPYURL] = ami_utf8_easy((char *)messages_get("CopyURL")); + ctxmenulab[CMID_FRAMERELOAD] = ami_utf8_easy((char *)messages_get("ObjReload")); ctxmenulab[CMID_SAVEURL] = ami_utf8_easy((char *)messages_get("LinkDload")); ctxmenulab[CMID_URLOPEN] = ami_utf8_easy((char *)messages_get("Open")); ctxmenulab[CMID_URLOPENWIN] = ami_utf8_easy((char *)messages_get("LinkNewWin")); ctxmenulab[CMID_URLOPENTAB] = ami_utf8_easy((char *)messages_get("LinkNewTab")); + ctxmenulab[CMID_URLHOTLIST] = ami_utf8_easy((char *)messages_get("HotlistAdd")); + ctxmenulab[CMID_COPYURL] = ami_utf8_easy((char *)messages_get("CopyURL")); ctxmenulab[CMID_NAVHOME] = ami_utf8_easy((char *)messages_get("Home")); ctxmenulab[CMID_NAVBACK] = ami_utf8_easy((char *)messages_get("Back")); @@ -152,6 +162,7 @@ void ami_context_menu_init(void) ctxmenulab[CMID_SELALL] = ami_utf8_easy((char *)messages_get("SelectAllNS")); ctxmenulab[CMID_SELCLEAR] = ami_utf8_easy((char *)messages_get("ClearNS")); ctxmenulab[CMID_SELSEARCH] = ami_utf8_easy((char *)messages_get("SearchWeb")); + ctxmenulab[CMID_SELSAVE] = ami_utf8_easy((char *)messages_get("SaveAs")); ctxmenulab[CMID_PLUGINCMD] = ami_utf8_easy((char *)messages_get("ExternalApp")); @@ -203,6 +214,7 @@ void ami_context_menu_add_submenu(Object *ctxmenuobj, ULONG cmsub, void *userdat PMIA_Title, (ULONG)ctxmenulab[CMID_PAGESAVECOMPLETE], PMIA_ID, CMID_PAGESAVECOMPLETE, PMIA_UserData, userdata, + PMIA_Disabled, (content_get_type(userdata) != CONTENT_HTML), TAG_DONE), PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL, PMIA_Title, ~0, @@ -251,7 +263,7 @@ void ami_context_menu_add_submenu(Object *ctxmenuobj, ULONG cmsub, void *userdat PMIA_Title, ~0, TAG_DONE), PMA_AddItem, NewObject(POPUPMENU_GetItemClass(), NULL, - PMIA_Title, (ULONG)ctxmenulab[CMID_RELOADOBJ], + PMIA_Title, (ULONG)ctxmenulab[CMID_FRAMERELOAD], PMIA_ID, CMID_FRAMERELOAD, PMIA_UserData, userdata, TAG_DONE), @@ -259,7 +271,7 @@ void ami_context_menu_add_submenu(Object *ctxmenuobj, ULONG cmsub, void *userdat PMIA_Title, ~0, TAG_DONE), PMA_AddItem, NewObject(POPUPMENU_GetItemClass(), NULL, - PMIA_Title, (ULONG)ctxmenulab[CMID_COPYOBJ], + PMIA_Title, (ULONG)ctxmenulab[CMID_FRAMECOPYURL], PMIA_ID, CMID_FRAMECOPYURL, PMIA_UserData, nsurl_access(content_get_url(userdata)), TAG_DONE), @@ -267,10 +279,16 @@ void ami_context_menu_add_submenu(Object *ctxmenuobj, ULONG cmsub, void *userdat PMIA_Title, ~0, TAG_DONE), PMA_AddItem, NewObject(POPUPMENU_GetItemClass(), NULL, - PMIA_Title, (ULONG)ctxmenulab[CMID_SAVEOBJ], + PMIA_Title, (ULONG)ctxmenulab[CMID_FRAMESAVE], PMIA_ID, CMID_FRAMESAVE, PMIA_UserData, userdata, TAG_DONE), + PMA_AddItem, NewObject(POPUPMENU_GetItemClass(), NULL, + PMIA_Title, (ULONG)ctxmenulab[CMID_FRAMESAVECOMPLETE], + PMIA_ID, CMID_FRAMESAVECOMPLETE, + PMIA_UserData, userdata, + PMIA_Disabled, (content_get_type(userdata) != CONTENT_HTML), + TAG_DONE), TAG_DONE), TAG_DONE), ~0); @@ -344,6 +362,11 @@ void ami_context_menu_add_submenu(Object *ctxmenuobj, ULONG cmsub, void *userdat PMIA_ID, CMID_COPYURL, PMIA_UserData, userdata, TAG_DONE), + PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL, + PMIA_Title, (ULONG)ctxmenulab[CMID_URLHOTLIST], + PMIA_ID, CMID_URLHOTLIST, + PMIA_UserData, userdata, + TAG_DONE), PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL, PMIA_Title, ~0, TAG_DONE), @@ -460,6 +483,11 @@ void ami_context_menu_add_submenu(Object *ctxmenuobj, ULONG cmsub, void *userdat PMIA_ID,CMID_SELSEARCH, PMIA_Disabled, disabled_noselection, TAG_DONE), + PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL, + PMIA_Title, (ULONG)ctxmenulab[CMID_SELSAVE], + PMIA_ID,CMID_SELSAVE, + PMIA_Disabled, disabled_noselection, + TAG_DONE), TAG_DONE), TAG_DONE), ~0); @@ -525,7 +553,7 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y) struct box *curbox; int box_x=0; int box_y=0; - bool no_sel = true, add_nav_menu = true; + bool no_more_menus = false; bool menuhascontent = false; ULONG ret = 0; struct contextual_content ccdata; @@ -589,57 +617,16 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y) } else { - browser_window_get_contextual_content(gwin->bw, x, y, &ccdata); - - ami_context_menu_add_submenu(ctxmenuobj, CMSUB_PAGE, cc); - menuhascontent = true; - - if(ccdata.main && (ccdata.main != cc)) - { - ami_context_menu_add_submenu(ctxmenuobj, CMSUB_FRAME, ccdata.main); - menuhascontent = true; - } - - if(ccdata.link_url) - { - ami_context_menu_add_submenu(ctxmenuobj, CMSUB_URL, (char *)ccdata.link_url); - menuhascontent = true; - } - - if(ccdata.object) - { - ami_context_menu_add_submenu(ctxmenuobj, CMSUB_OBJECT, ccdata.object); - menuhascontent = true; - } - - ami_context_menu_add_submenu(ctxmenuobj, CMSUB_NAVIGATE, gwin->bw); - menuhascontent = true; - - if(content_get_type(cc) == CONTENT_TEXTPLAIN) - { - ami_context_menu_add_submenu(ctxmenuobj, CMSUB_SEL, gwin->bw); - menuhascontent = true; - } - if(content_get_type(cc) == CONTENT_HTML) { curbox = html_get_box_tree(gwin->bw->current_content); - while(curbox = box_at_point(curbox,x,y,&box_x,&box_y,&cc)) + while(curbox = box_at_point(curbox, x, y, &box_x, &box_y, &cc)) { if (curbox->style && css_computed_visibility(curbox->style) == CSS_VISIBILITY_HIDDEN) continue; - if(no_sel && (curbox->text) || - (curbox->gadget && ((curbox->gadget->type == GADGET_TEXTBOX) || - (curbox->gadget->type == GADGET_TEXTAREA) || - (curbox->gadget->type == GADGET_PASSWORD)))) - { - ami_context_menu_add_submenu(ctxmenuobj, CMSUB_SEL, gwin->bw); - no_sel = false; - menuhascontent = true; - } if (curbox->gadget) { switch (curbox->gadget->type) @@ -647,19 +634,55 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y) case GADGET_FILE: ami_context_menu_add_submenu(ctxmenuobj, CMID_SELECTFILE, curbox); menuhascontent = true; - add_nav_menu = false; + no_more_menus = true; break; } } } } + + if(no_more_menus == false) + { + browser_window_get_contextual_content(gwin->bw, x, y, &ccdata); + + ami_context_menu_add_submenu(ctxmenuobj, CMSUB_PAGE, cc); + menuhascontent = true; + + if(ccdata.main && (ccdata.main != cc)) + { + ami_context_menu_add_submenu(ctxmenuobj, CMSUB_FRAME, ccdata.main); + menuhascontent = true; + } + + if(ccdata.link_url) + { + ami_context_menu_add_submenu(ctxmenuobj, CMSUB_URL, (char *)ccdata.link_url); + menuhascontent = true; + } + + if(ccdata.object) + { + ami_context_menu_add_submenu(ctxmenuobj, CMSUB_OBJECT, ccdata.object); + menuhascontent = true; + } + + ami_context_menu_add_submenu(ctxmenuobj, CMSUB_NAVIGATE, gwin->bw); + menuhascontent = true; + + if(content_get_type(cc) == CONTENT_HTML || + content_get_type(cc) == CONTENT_TEXTPLAIN) + { + ami_context_menu_add_submenu(ctxmenuobj, CMSUB_SEL, gwin->bw); + menuhascontent = true; + } + } } if(!menuhascontent) return; - gui_window_set_pointer(gwin->bw->window,GUI_POINTER_DEFAULT); + gui_window_set_pointer(gwin->bw->window, GUI_POINTER_DEFAULT); - IDoMethod(ctxmenuobj,PM_OPEN,gwin->win); + IDoMethod(ctxmenuobj, PM_OPEN, gwin->win); } static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved) @@ -716,6 +739,15 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved ami_file_open(gwin); break; + case CMID_PAGECLOSE: + browser_window_destroy(gwin->bw); + break; + + case CMID_URLHOTLIST: + case CMID_PAGEHOTLIST: + hotlist_add_page(userdata); + break; + case CMID_FRAMECOPYURL: case CMID_COPYURL: case CMID_COPYOBJ: @@ -776,15 +808,19 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved case CMID_SAVEOBJ: case CMID_PAGESAVE: - ami_file_save_req(AMINS_SAVE_SOURCE, gwin, (struct hlcache_handle *)userdata); + ami_file_save_req(AMINS_SAVE_SOURCE, gwin, + (struct hlcache_handle *)userdata, NULL); break; case CMID_PAGESAVECOMPLETE: - ami_file_save_req(AMINS_SAVE_COMPLETE, gwin, (struct hlcache_handle *)userdata); + case CMID_FRAMESAVECOMPLETE: + ami_file_save_req(AMINS_SAVE_COMPLETE, gwin, + (struct hlcache_handle *)userdata, NULL); break; case CMID_SAVEIFFOBJ: - ami_file_save_req(AMINS_SAVE_IFF, gwin, (struct hlcache_handle *)userdata); + ami_file_save_req(AMINS_SAVE_IFF, gwin, + (struct hlcache_handle *)userdata, NULL); break; case CMID_PLUGINCMD: @@ -847,6 +883,11 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved browser_window_key_press(gwin->bw, KEY_CLEAR_SELECTION); break; + case CMID_SELSAVE: + ami_file_save_req(AMINS_SAVE_SELECTION, gwin, NULL, + browser_window_get_selection(gwin->bw)); + break; + case CMID_SELSEARCH: { struct ami_text_selection *sel; diff --git a/amiga/drag.c b/amiga/drag.c index 8d40fc4c5..835db6724 100644 --- a/amiga/drag.c +++ b/amiga/drag.c @@ -153,15 +153,13 @@ void ami_drag_save(struct Window *win) BPTR fh = 0; AddPart(path, content_get_title(c), 1024); - ami_file_save(AMINS_SAVE_SOURCE, path, win, c, NULL); + ami_file_save(AMINS_SAVE_SOURCE, path, win, c, NULL, NULL); } break; case GUI_SAVE_TEXT_SELECTION: // selection AddPart(path,"netsurf_text_file",1024); - if(!ami_download_check_overwrite(path, win, 0)) - break; - selection_save_text((struct selection *)drag_save_data,path); + ami_file_save(AMINS_SAVE_SELECTION, path, win, NULL, NULL, NULL); break; case GUI_SAVE_COMPLETE: @@ -171,7 +169,7 @@ void ami_drag_save(struct Window *win) AddPart(path, content_get_title(c), 1024); - ami_file_save(AMINS_SAVE_COMPLETE, path, win, c, drag_save_gui->favicon); + ami_file_save(AMINS_SAVE_COMPLETE, path, win, c, drag_save_gui->favicon, NULL); } break; @@ -180,7 +178,7 @@ void ami_drag_save(struct Window *win) hlcache_handle *c = drag_save_data; AddPart(path, content_get_title(c), 1024); - ami_file_save(AMINS_SAVE_IFF, path, win, c, NULL); + ami_file_save(AMINS_SAVE_IFF, path, win, c, NULL, NULL); } break; diff --git a/amiga/file.c b/amiga/file.c index 9dd0d83f0..148955872 100644 --- a/amiga/file.c +++ b/amiga/file.c @@ -34,6 +34,7 @@ #include "desktop/save_complete.h" #include "desktop/save_pdf/pdf_plotters.h" #include "desktop/save_text.h" +#include "desktop/selection.h" #include "utils/messages.h" #include "utils/url.h" @@ -100,7 +101,8 @@ void ami_file_open(struct gui_window_2 *gwin) } void ami_file_save(int type, char *fname, struct Window *win, - struct hlcache_handle *object, struct hlcache_handle *favicon) + struct hlcache_handle *object, struct hlcache_handle *favicon, + struct selection *sel) { BPTR lock = 0; const char *source_data; @@ -157,29 +159,34 @@ void ami_file_save(int type, char *fname, struct Window *win, } #endif break; + + case AMINS_SAVE_SELECTION: + selection_save_text(sel, fname); + break; } FClose(fh); } - SetComment(fname, nsurl_access(content_get_url(object))); + if(object) SetComment(fname, nsurl_access(content_get_url(object))); } } ami_update_pointer(win, GUI_POINTER_DEFAULT); } -void ami_file_save_req(int type, struct gui_window_2 *gwin, struct hlcache_handle *object) +void ami_file_save_req(int type, struct gui_window_2 *gwin, + struct hlcache_handle *object, struct selection *sel) { char *fname = AllocVec(1024, MEMF_CLEAR | MEMF_PRIVATE); if(AslRequestTags(savereq, ASLFR_TitleText, messages_get("NetSurf"), ASLFR_Screen, scrn, - ASLFR_InitialFile, FilePart(nsurl_access(content_get_url(object))), + ASLFR_InitialFile, object ? FilePart(nsurl_access(content_get_url(object))) : "", TAG_DONE)) { strlcpy(fname, savereq->fr_Drawer, 1024); AddPart(fname, savereq->fr_File, 1024); - ami_file_save(type, fname, gwin->win, object, gwin->bw->window->favicon); + ami_file_save(type, fname, gwin->win, object, gwin->bw->window->favicon, sel); } if(fname) FreeVec(fname); diff --git a/amiga/file.h b/amiga/file.h index 935aa519d..4569ba62e 100644 --- a/amiga/file.h +++ b/amiga/file.h @@ -19,6 +19,7 @@ #include "amiga/gui.h" struct hlcache_object; +struct selection; struct FileRequester *filereq; struct FileRequester *savereq; @@ -29,6 +30,7 @@ enum { AMINS_SAVE_COMPLETE, AMINS_SAVE_PDF, AMINS_SAVE_IFF, + AMINS_SAVE_SELECTION, }; @@ -37,6 +39,7 @@ void ami_file_req_free(void); void ami_file_open(struct gui_window_2 *gwin); void ami_file_save_req(int type, struct gui_window_2 *gwin, - struct hlcache_handle *object); + struct hlcache_handle *object, struct selection *sel); void ami_file_save(int type, char *fname, struct Window *win, - struct hlcache_handle *object, struct hlcache_handle *favicon); + struct hlcache_handle *object, struct hlcache_handle *favicon, + struct selection *sel); diff --git a/amiga/gui.c b/amiga/gui.c index 1ebb1d781..df96e8bee 100755 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -1426,7 +1426,8 @@ void ami_handle_msg(void) break; case 's': - ami_file_save_req(AMINS_SAVE_SOURCE, gwin, gwin->bw->current_content); + ami_file_save_req(AMINS_SAVE_SOURCE, gwin, + gwin->bw->current_content, NULL); break; case 'p': diff --git a/amiga/menu.c b/amiga/menu.c index 13cbf9e78..72c955c41 100755 --- a/amiga/menu.c +++ b/amiga/menu.c @@ -474,23 +474,28 @@ void ami_menupick(ULONG code,struct gui_window_2 *gwin,struct MenuItem *item) switch(subnum) { case 0: - ami_file_save_req(AMINS_SAVE_SOURCE, gwin, gwin->bw->current_content); + ami_file_save_req(AMINS_SAVE_SOURCE, gwin, + gwin->bw->current_content, NULL); break; case 1: - ami_file_save_req(AMINS_SAVE_TEXT, gwin, gwin->bw->current_content); + ami_file_save_req(AMINS_SAVE_TEXT, gwin, + gwin->bw->current_content, NULL); break; case 2: - ami_file_save_req(AMINS_SAVE_COMPLETE, gwin, gwin->bw->current_content); + ami_file_save_req(AMINS_SAVE_COMPLETE, gwin, + gwin->bw->current_content, NULL); break; case 3: - ami_file_save_req(AMINS_SAVE_PDF, gwin, gwin->bw->current_content); + ami_file_save_req(AMINS_SAVE_PDF, gwin, + gwin->bw->current_content, NULL); break; case 4: // iff - ami_file_save_req(AMINS_SAVE_IFF, gwin, gwin->bw->current_content); + ami_file_save_req(AMINS_SAVE_IFF, gwin, + gwin->bw->current_content, NULL); break; } break; -- cgit v1.2.3