/* exported interface documented in amiga/cookies.h */ nserror ami_history_global_present(void) { struct ami_history_global_window *ncwin; nserror res; if(history_window != NULL) { //windowtofront() return NSERROR_OK; } ncwin = calloc(1, sizeof(struct ami_history_global_window)); if (ncwin == NULL) { return NSERROR_NOMEM; } ncwin->core.wintitle = ami_utf8_easy((char *)messages_get("GlobalHistory")); res = ami_history_global_create_window(ncwin); if (res != NSERROR_OK) { NSLOG(netsurf, INFO, "SSL UI builder init failed"); ami_utf8_free(ncwin->core.wintitle); free(ncwin); return res; } /* initialise Amiga core window */ ncwin->core.draw = ami_history_global_draw; ncwin->core.key = ami_history_global_key; ncwin->core.mouse = ami_history_global_mouse; ncwin->core.close = ami_history_global_destroy; ncwin->core.event = NULL; ncwin->core.drag_end = ami_history_global_drag_end; ncwin->core.icon_drop = NULL; res = ami_corewindow_init(&ncwin->core); if (res != NSERROR_OK) { ami_utf8_free(ncwin->core.wintitle); DisposeObject(ncwin->core.objects[GID_CW_WIN]); free(ncwin); return res; } res = global_history_init(ncwin->core.cb_table, (struct core_window *)ncwin); if (res != NSERROR_OK) { ami_utf8_free(ncwin->core.wintitle); DisposeObject(ncwin->core.objects[GID_CW_WIN]); free(ncwin); return res; } history_window = ncwin; return NSERROR_OK; }
void ami_free_menulabs(struct gui_window_2 *gwin) { int i; for(i=0;i<=AMI_MENU_AREXX_MAX;i++) { if(gwin->menulab[i] && (gwin->menulab[i] != NM_BARLABEL)) { if(gwin->menutype[i] & MENU_IMAGE) { DisposeObject(gwin->menuobj[i]); } ami_utf8_free(gwin->menulab[i]); if(i >= AMI_MENU_AREXX) { if(gwin->menu_hook[i].h_Data) free(gwin->menu_hook[i].h_Data); } } gwin->menulab[i] = NULL; gwin->menuobj[i] = NULL; gwin->menukey[i] = 0; } FreeVec(gwin->menutype); FreeVec(gwin->menu); gwin->menutype = NULL; gwin->menu = NULL; }
bool ami_add_to_clipboard(const char *text, size_t length, bool space) { char *buffer; if(option_utf8_clipboard || ami_utf8_clipboard) { WriteChunkBytes(iffh,text,length); } else { buffer = ami_utf8_easy(text); if(buffer) { char *p; p = buffer; while(*p != '\0') { if(*p == 0xa0) *p = 0x20; p++; } WriteChunkBytes(iffh, buffer, strlen(buffer)); ami_utf8_free(buffer); } } if(space) WriteChunkBytes(iffh," ",1); return true; }
static void gui_set_clipboard(const char *buffer, size_t length, nsclipboard_styles styles[], int n_styles) { char *text; struct CSet cset = {0}; if(buffer == NULL) return; if(!(OpenIFF(iffh, IFFF_WRITE))) { if(!(PushChunk(iffh, ID_FTXT, ID_FORM, IFFSIZE_UNKNOWN))) { if(nsoption_bool(clipboard_write_utf8)) { if(!(PushChunk(iffh, 0, ID_CSET, 32))) { cset.CodeSet = 106; // UTF-8 WriteChunkBytes(iffh, &cset, 32); PopChunk(iffh); } } } else { PopChunk(iffh); } if(!(PushChunk(iffh, 0, ID_CHRS, IFFSIZE_UNKNOWN))) { if(nsoption_bool(clipboard_write_utf8)) { WriteChunkBytes(iffh, buffer, length); } else { if(utf8_to_local_encoding(buffer, length, &text) == NSERROR_OK) { char *p; p = text; while(*p != '\0') { if(*p == 0xa0) *p = 0x20; p++; } WriteChunkBytes(iffh, text, strlen(text)); ami_utf8_free(text); } } PopChunk(iffh); } else { PopChunk(iffh); } if(!(PushChunk(iffh, 0, ID_UTF8, IFFSIZE_UNKNOWN))) { WriteChunkBytes(iffh, buffer, length); PopChunk(iffh); } else { PopChunk(iffh); } CloseIFF(iffh); } }
static struct gui_download_window *gui_download_window_create(download_context *ctx, struct gui_window *gui) { const char *url = nsurl_access(download_context_get_url(ctx)); unsigned long total_size = download_context_get_total_length(ctx); struct gui_download_window *dw; char *dl_filename = ami_utf8_easy(download_context_get_filename(ctx)); APTR va[3]; dw = ami_misc_allocvec_clear(sizeof(struct gui_download_window), 0); if(gui && (!IsListEmpty(&gui->dllist)) && (dw->dln = (struct dlnode *)FindName(&gui->dllist,url))) { strcpy(dw->fname, dw->dln->filename); free(dw->dln->node.ln_Name); dw->dln->node.ln_Name = NULL; } else { if(AslRequestTags(savereq, ASLFR_Window, gui->shared->win, ASLFR_SleepWindow, TRUE, ASLFR_TitleText, messages_get("NetSurf"), ASLFR_Screen, scrn, ASLFR_InitialFile, dl_filename, TAG_DONE)) { strlcpy(dw->fname, savereq->fr_Drawer, 1024); AddPart((STRPTR)&dw->fname,savereq->fr_File,1024); if(!ami_download_check_overwrite(dw->fname, gui->shared->win, total_size)) { FreeVec(dw); return NULL; } } else { FreeVec(dw); return NULL; } } if(dl_filename) ami_utf8_free(dl_filename); dw->size = total_size; dw->downloaded = 0; if(gui) dw->bw = gui->bw; dw->url = url; va[0] = (APTR)dw->downloaded; va[1] = (APTR)dw->size; va[2] = 0; if(!(dw->fh = FOpen((STRPTR)&dw->fname,MODE_NEWFILE,0))) { FreeVec(dw); return NULL; } dw->objects[OID_MAIN] = WindowObj, WA_ScreenTitle, ami_gui_get_screen_title(), WA_Title, dw->url, WA_Activate, TRUE, WA_DepthGadget, TRUE, WA_DragBar, TRUE, WA_CloseGadget, FALSE, WA_SizeGadget, TRUE, WA_PubScreen,scrn, WINDOW_SharedPort,sport, WINDOW_UserData,dw, WINDOW_IconifyGadget, FALSE, WINDOW_LockHeight,TRUE, WINDOW_Position, WPOS_CENTERSCREEN, WINDOW_ParentGroup, dw->objects[GID_MAIN] = LayoutVObj, LAYOUT_AddChild, dw->objects[GID_STATUS] = FuelGaugeObj, GA_ID,GID_STATUS, GA_Text,messages_get("amiDownload"), FUELGAUGE_Min,0, FUELGAUGE_Max,total_size, FUELGAUGE_Level,0, FUELGAUGE_Ticks,11, FUELGAUGE_ShortTicks,TRUE, FUELGAUGE_VarArgs,va, FUELGAUGE_Percent,FALSE, FUELGAUGE_Justification,FGJ_CENTER, FuelGaugeEnd, CHILD_NominalSize,TRUE, CHILD_WeightedHeight,0, LAYOUT_AddChild, dw->objects[GID_CANCEL] = ButtonObj, GA_ID,GID_CANCEL, GA_RelVerify,TRUE, GA_Text,messages_get("Abort"), GA_TabCycle,TRUE, ButtonEnd, EndGroup, EndWindow; dw->win = (struct Window *)RA_OpenWindow(dw->objects[OID_MAIN]); dw->ctx = ctx; dw->node = AddObject(window_list,AMINS_DLWINDOW); dw->node->objstruct = dw; downloads_in_progress++; return dw; }
void gui_create_form_select_menu(struct gui_window *g, struct form_control *control) { struct Library *PopupMenuBase = NULL; struct PopupMenuIFace *IPopupMenu = NULL; struct Hook selectmenuhook; Object *selectmenuobj; Object *smenu = NULL; Object *currentmenu; Object *submenu = NULL; char *selectmenu_item[AMI_SELECTMENU_MAX]; char *more_label; struct form_option *opt = form_select_get_option(control, 0); int i = 0; int n = 0; if(ami_selectmenu_is_safe() == FALSE) return; if((PopupMenuBase = OpenLibrary("popupmenu.class", 0))) { IPopupMenu = (struct PopupMenuIFace *)GetInterface(PopupMenuBase, "main", 1, NULL); } if(IPopupMenu == NULL) return; ClearMem(selectmenu_item, AMI_SELECTMENU_MAX * 4); more_label = ami_utf8_easy(messages_get("More")); selectmenuhook.h_Entry = ami_popup_hook; selectmenuhook.h_SubEntry = NULL; selectmenuhook.h_Data = g; g->shared->control = control; selectmenuobj = PMMENU(form_control_get_name(control)), PMA_MenuHandler, &selectmenuhook, End; currentmenu = selectmenuobj; while(opt) { selectmenu_item[i] = ami_utf8_easy(opt->text); IDoMethod(currentmenu, PM_INSERT, NewObject(POPUPMENU_GetItemClass(), NULL, PMIA_Title, (ULONG)selectmenu_item[i], PMIA_ID, i, PMIA_CheckIt, TRUE, PMIA_Checked, opt->selected, TAG_DONE), ~0); opt = opt->next; i++; n++; if(n == AMI_SELECTMENU_PAGE_MAX) { if(submenu != NULL) { /* attach the previous submenu */ IDoMethod(smenu, PM_INSERT, NewObject(NULL, "popupmenuitem.class", PMIA_Title, more_label, PMIA_CheckIt, TRUE, PMIA_SubMenu, submenu, TAG_DONE), ~0); } submenu = NewObject(NULL, "popupmenu.class", TAG_DONE); smenu = currentmenu; currentmenu = submenu; n = 0; } if(i >= AMI_SELECTMENU_MAX) break; } if((submenu != NULL) && (n != 0)) { /* attach the previous submenu */ IDoMethod(smenu, PM_INSERT, NewObject(NULL, "popupmenuitem.class", PMIA_Title, more_label, PMIA_CheckIt, TRUE, PMIA_SubMenu, submenu, TAG_DONE), ~0); } ami_set_pointer(g->shared, GUI_POINTER_DEFAULT, false); // Clear the menu-style pointer IDoMethod(selectmenuobj, PM_OPEN, g->shared->win); /* PM_OPEN is blocking, so dispose menu immediately... */ if(selectmenuobj) DisposeObject(selectmenuobj); /* ...and get rid of popupmenu.class ASAP */ if(IPopupMenu) DropInterface((struct Interface *)IPopupMenu); if(PopupMenuBase) CloseLibrary(PopupMenuBase); /* Free the menu labels */ if(more_label) ami_utf8_free(more_label); for(i = 0; i < AMI_SELECTMENU_MAX; i++) { if(selectmenu_item[i] != NULL) { ami_utf8_free(selectmenu_item[i]); selectmenu_item[i] = NULL; } } }
void ami_drag_selection(struct selection *s) { struct box *text_box; int x; int y; char *utf8text; struct ami_text_selection *sel; struct IFFHandle *old_iffh = iffh; struct gui_window_2 *gwin = ami_window_at_pointer(AMINS_WINDOW); if(!gwin) { DisplayBeep(scrn); return; } x = gwin->win->MouseX; y = gwin->win->MouseY; if(text_box = ami_text_box_at_point(gwin, (ULONG *)&x, (ULONG *)&y)) { ami_utf8_clipboard = true; iffh = ami_clipboard_init_internal(1); if(gui_copy_to_clipboard(s)) { browser_window_mouse_click(gwin->bw, BROWSER_MOUSE_PRESS_1, x, y); browser_window_key_press(gwin->bw, KEY_PASTE); } ami_clipboard_free_internal(iffh); iffh = old_iffh; ami_utf8_clipboard = false; } else { x = gwin->win->MouseX; y = gwin->win->MouseY; if(ami_gadget_hit(gwin->objects[GID_URL], x, y)) { if(sel = ami_selection_to_text(gwin)) { utf8text = ami_utf8_easy(sel->text); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_URL], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); FreeVec(sel); ami_utf8_free(utf8text); } } else if(ami_gadget_hit(gwin->objects[GID_SEARCHSTRING], x, y)) { if(sel = ami_selection_to_text(gwin)) { utf8text = ami_utf8_easy(sel->text); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_SEARCHSTRING], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); FreeVec(sel); ami_utf8_free(utf8text); } } else { DisplayBeep(scrn); } } }
void ami_drag_selection(struct gui_window *g) { int x; int y; char *utf8text; char *sel; struct IFFHandle *old_iffh = iffh; struct gui_window_2 *gwin = ami_window_at_pointer(AMINS_WINDOW); /* NB: 'gwin' is at the drop point, 'g' is where the selection was dragged from. * These may be different if the selection has been dragged between windows. */ if(!gwin) { DisplayBeep(scrn); return; } x = gwin->win->MouseX; y = gwin->win->MouseY; if(ami_text_box_at_point(gwin, (ULONG *)&x, (ULONG *)&y)) { iffh = ami_clipboard_init_internal(1); browser_window_key_press(g->shared->bw, KEY_COPY_SELECTION); browser_window_mouse_click(gwin->bw, BROWSER_MOUSE_PRESS_1, x, y); browser_window_key_press(gwin->bw, KEY_PASTE); ami_clipboard_free_internal(iffh); iffh = old_iffh; } else { x = gwin->win->MouseX; y = gwin->win->MouseY; if(ami_gadget_hit(gwin->objects[GID_URL], x, y)) { if(sel = browser_window_get_selection(g->shared->bw)) { utf8text = ami_utf8_easy(sel); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_URL], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); free(sel); ami_utf8_free(utf8text); } } else if(ami_gadget_hit(gwin->objects[GID_SEARCHSTRING], x, y)) { if(sel = browser_window_get_selection(g->shared->bw)) { utf8text = ami_utf8_easy(sel); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_SEARCHSTRING], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); free(sel); ami_utf8_free(utf8text); } } else { DisplayBeep(scrn); } } }