mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-28 09:13:08 +03:00
Web search text selection
svn path=/trunk/netsurf/; revision=11638
This commit is contained in:
parent
4703d643f5
commit
bc2bce8d35
@ -16,32 +16,42 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "amiga/context_menu.h"
|
||||
#include "render/box.h"
|
||||
#include "render/form.h"
|
||||
#ifdef __amigaos4__
|
||||
#include <proto/popupmenu.h>
|
||||
#endif
|
||||
#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"
|
||||
#include <proto/asl.h>
|
||||
#include "desktop/textinput.h"
|
||||
#include "desktop/selection.h"
|
||||
#include <proto/exec.h>
|
||||
|
||||
#include "amiga/context_menu.h"
|
||||
#include "amiga/utf8.h"
|
||||
#include "amiga/options.h"
|
||||
#include "amiga/clipboard.h"
|
||||
#include "amiga/bitmap.h"
|
||||
#include "amiga/iff_dr2d.h"
|
||||
#include "desktop/textinput.h"
|
||||
#include "desktop/selection.h"
|
||||
#include "render/box.h"
|
||||
#include "render/form.h"
|
||||
#include "utils/utf8.h"
|
||||
#include "utils/messages.h"
|
||||
#include "utils/utils.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved);
|
||||
bool ami_context_menu_copy_selection(const char *text, size_t length, struct box *box,
|
||||
void *handle, const char *whitespace_text, size_t whitespace_length);
|
||||
|
||||
char *ctxmenulab[CMID_LAST];
|
||||
|
||||
struct ami_context_menu_selection
|
||||
{
|
||||
char text[1024];
|
||||
int length;
|
||||
};
|
||||
|
||||
void ami_context_menu_init(void)
|
||||
{
|
||||
ctxmenulab[CMID_SELECTFILE] = ami_utf8_easy((char *)messages_get("SelectFile"));
|
||||
@ -61,6 +71,7 @@ void ami_context_menu_init(void)
|
||||
ctxmenulab[CMID_SELPASTE] = ami_utf8_easy((char *)messages_get("PasteNS"));
|
||||
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[CMSUB_OBJECT] = ami_utf8_easy((char *)messages_get("Object"));
|
||||
ctxmenulab[CMSUB_URL] = ami_utf8_easy((char *)messages_get("Link"));
|
||||
@ -208,6 +219,14 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y)
|
||||
PMIA_ID,CMID_SELCLEAR,
|
||||
PMIA_Disabled, disabled_noselection,
|
||||
TAG_DONE),
|
||||
PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
|
||||
PMIA_Title, ~0,
|
||||
TAG_DONE),
|
||||
PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
|
||||
PMIA_Title, (ULONG)ctxmenulab[CMID_SELSEARCH],
|
||||
PMIA_ID,CMID_SELSEARCH,
|
||||
PMIA_Disabled, disabled_noselection,
|
||||
TAG_DONE),
|
||||
TAG_DONE),
|
||||
TAG_DONE),
|
||||
~0);
|
||||
@ -407,8 +426,47 @@ uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved)
|
||||
case CMID_SELCLEAR:
|
||||
browser_window_key_press(gwin->bw, KEY_CLEAR_SELECTION);
|
||||
break;
|
||||
|
||||
case CMID_SELSEARCH:
|
||||
{
|
||||
struct ami_context_menu_selection *sel;
|
||||
char *url;
|
||||
|
||||
sel = AllocVec(sizeof(struct ami_context_menu_selection),
|
||||
MEMF_PRIVATE | MEMF_CLEAR);
|
||||
|
||||
if(sel)
|
||||
{
|
||||
selection_traverse(gwin->bw->sel, ami_context_menu_copy_selection,
|
||||
sel);
|
||||
url = search_web_from_term(sel->text);
|
||||
browser_window_go(gwin->bw, url, NULL, true);
|
||||
|
||||
FreeVec(sel);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return itemid;
|
||||
}
|
||||
|
||||
bool ami_context_menu_copy_selection(const char *text, size_t length, struct box *box,
|
||||
void *handle, const char *whitespace_text, size_t whitespace_length)
|
||||
{
|
||||
struct ami_context_menu_selection *sel = handle;
|
||||
int len = length;
|
||||
|
||||
if((length + (sel->length)) > (sizeof(sel->text)))
|
||||
len = sizeof(sel->text) - (sel->length);
|
||||
|
||||
if(len <= 0) return false;
|
||||
|
||||
memcpy((sel->text) + (sel->length), text, len);
|
||||
sel->length += len;
|
||||
|
||||
sel->text[sel->length] = '\0';
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ enum {
|
||||
CMID_SELCUT,
|
||||
CMID_SELCOPY,
|
||||
CMID_SELPASTE,
|
||||
CMID_SELSEARCH,
|
||||
CMSUB_OBJECT,
|
||||
CMSUB_URL,
|
||||
CMSUB_SEL,
|
||||
|
Loading…
Reference in New Issue
Block a user