static int url_win_click_clear_all(widget_list *widget, int mx, int my, Uint32 flags) { if ((flags & ELW_WHEEL_UP) || (flags & ELW_WHEEL_DOWN)) return 1; destroy_url_list(); return 1; }
/* called when a context menu option is selected */ static int context_url_handler(window_info *win, int widget_id, int mx, int my, int option) { if (cm_url) { switch (option) { case 0: open_current_url(cm_url); break; case 1: { char *theurl = ((URLDATA *)cm_url->data)->text; char *skiptext = "http://"; if (theurl && strlen(theurl) > strlen(skiptext)) history_grep(theurl+strlen(skiptext), strlen(theurl)-strlen(skiptext)); } break; case 2: ((URLDATA *)cm_url->data)->visited = 1; break; case 3: ((URLDATA *)cm_url->data)->visited = 0; break; case 5: delete_current_url(cm_url); break; case 7: destroy_url_list(); break; } cm_url = NULL; } url_win_clicktime = SDL_GetTicks(); return 1; }
void cleanup_mem(void) { int i; destroy_url_list(); history_destroy(); command_cleanup(); queue_destroy(buddy_request_queue); cleanup_manufacture(); cleanup_text_buffers(); cleanup_fonts(); destroy_all_actors(); end_actors_lists(); cleanup_lights(); /* 2d objects */ destroy_all_2d_objects(); destroy_all_2d_object_defs(); /* 3d objects */ destroy_all_3d_objects(); /* caches */ cache_e3d->free_item = &destroy_e3d; cache_delete(cache_e3d); cache_e3d = NULL; #ifdef NEW_TEXTURES free_texture_cache(); #endif // This should be fixed now Sir_Odie cache_delete(cache_system); cache_system = NULL; /* map location information */ for (i = 0; continent_maps[i].name; i++) { free(continent_maps[i].name); } free (continent_maps); destroy_hash_table(server_marks); for (i = 0; i < video_modes_count; i++) { if (video_modes[i].name) free(video_modes[i].name); } free_shaders(); }
/* #url command - List, clear list or open a specific URL */ int url_command(const char *text, int len) { /* no URLs so far so display a message then exit */ if (!have_url_count) { LOG_TO_CONSOLE(c_red2, urlcmd_none_str); return 1; } /* get any parameter text */ while(*text && !isspace(*text)) text++; while(*text && isspace(*text)) text++; /* no parameter specified - list the URL(s) we have, oldest first */ if (!strlen(text)) { char *out_str = NULL; size_t out_len = 0; int irl_num = 0; int line_colour = c_grey1; list_node_t *local_head = newest_url; LOG_TO_CONSOLE(c_green2, urlcmd_list_str); /* go to the oldest in the list */ while (local_head->next != NULL) local_head = local_head->next; /* display the list ending with the newest, alternating colours */ while (local_head != NULL) { size_t new_len = sizeof(char) * (strlen(((URLDATA *)local_head->data)->text) + 60); if (new_len > out_len) { if (out_str != NULL) free(out_str); out_str = (char *)malloc(new_len); out_len = new_len; } safe_snprintf(out_str, new_len, "%c %d) %s (seen %d time%s) (%s)", ((local_head==active_url) ?'>':' '), ++irl_num, ((URLDATA *)local_head->data)->text, ((URLDATA *)local_head->data)->seen_count, ((URLDATA *)local_head->data)->seen_count == 1?"":"s", ((((URLDATA *)local_head->data)->visited) ?"visited":"unvisited")); LOG_TO_CONSOLE(line_colour, out_str); local_head = local_head->prev; line_colour = (line_colour==c_grey1) ?c_grey2 :c_grey1; } if (out_str != NULL) free(out_str); } /* if parameter is "clear" delete all entries */ else if (strcmp(text, urlcmd_clear_str) == 0) { destroy_url_list(); } /* else assume parameter is an index, if its a valid index, open the URL */ else { int open_index = atoi(text) - 1; int valid_node = 0; if (open_index >= 0) { list_node_t *local_head = newest_url; int url_num = 0; /* go to the oldest int the list */ while (local_head->next != NULL) local_head = local_head->next; /* go to the specified entry */ while ((local_head->prev != NULL) && (url_num < open_index)) { local_head = local_head->prev; url_num++; } /* if we end up at a valid node, go for it */ if ((local_head != NULL) && (url_num == open_index) && strlen(((URLDATA *)local_head->data)->text)) { open_web_link(((URLDATA *)local_head->data)->text); ((URLDATA *)local_head->data)->visited = 1; valid_node = 1; } } if (!valid_node) LOG_TO_CONSOLE(c_red2, urlcmd_invalid_str); } return 1; }