summaryrefslogtreecommitdiff
path: root/riscos
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2004-05-06 12:14:47 +0000
committerJames Bursa <james@netsurf-browser.org>2004-05-06 12:14:47 +0000
commitc0a4ab450b9802e618bb1e98b46b4a5dbed49c13 (patch)
tree886f089ff37bda5e0bbf224723e1b7ee27789783 /riscos
parentf01ebe264894ecba42ae2dadee50f5675bfda68e (diff)
downloadnetsurf-c0a4ab450b9802e618bb1e98b46b4a5dbed49c13.tar.gz
netsurf-c0a4ab450b9802e618bb1e98b46b4a5dbed49c13.tar.bz2
[project @ 2004-05-06 12:14:47 by bursa]
Some save-related fixes. svn path=/import/netsurf/; revision=835
Diffstat (limited to 'riscos')
-rw-r--r--riscos/menus.c22
-rw-r--r--riscos/save.c107
2 files changed, 67 insertions, 62 deletions
diff --git a/riscos/menus.c b/riscos/menus.c
index 1c593afb1..cc689e028 100644
--- a/riscos/menus.c
+++ b/riscos/menus.c
@@ -48,8 +48,7 @@ static struct box *find_object_box(void);
static wimp_menu *current_menu;
static int current_menu_x, current_menu_y;
gui_window *current_gui;
-struct content *save_content;
-char *save_link;
+struct content *save_content = 0;
/* Default menu item flags
*/
@@ -620,11 +619,9 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning)
gui_current_save_type = GUI_SAVE_SOURCE;
break;
}
- save_link = xstrdup(c->url);
ro_gui_menu_prepare_save(c);
error = xwimp_create_sub_menu((wimp_menu *) dialog_saveas,
warning->pos.x, warning->pos.y);
- if (error) xfree(save_link);
break;
case MENU_OBJECT: /* Object -> */
switch (warning->selection.items[1]) {
@@ -664,9 +661,6 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning)
ro_gui_menu_prepare_save(box->object);
error = xwimp_create_sub_menu((wimp_menu *) dialog_saveas,
warning->pos.x, warning->pos.y);
- if (!error/* && box->href*/)
- save_link = xstrdup(box->object->url);
-// save_link = url_join(box->href, c->url);
}
break;
case MENU_VIEW: /* View -> */
@@ -711,11 +705,11 @@ void ro_gui_menu_prepare_save(struct content *c)
const char *name = "";
const char *nice;
+ assert(c);
+
switch (gui_current_save_type) {
case GUI_SAVE_SOURCE:
- if (c)
- sprintf(icon_buf, "file_%x",
- ro_content_filetype(c));
+ sprintf(icon_buf, "file_%x", ro_content_filetype(c));
name = messages_get("SaveSource");
break;
@@ -757,11 +751,9 @@ void ro_gui_menu_prepare_save(struct content *c)
break;
}
- if (c) {
- save_content = c;
- if ((nice = url_nice(c->url)))
- name = nice;
- }
+ save_content = c;
+ if ((nice = url_nice(c->url)))
+ name = nice;
ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_ICON, icon);
ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_PATH, name);
diff --git a/riscos/save.c b/riscos/save.c
index dbbb8945d..8a9034178 100644
--- a/riscos/save.c
+++ b/riscos/save.c
@@ -32,13 +32,12 @@
gui_save_type gui_current_save_type;
extern struct content *save_content;
-extern char *save_link;
typedef enum { LINK_ACORN, LINK_ANT, LINK_TEXT } link_format;
static void ro_gui_save_complete(struct content *c, char *path);
static void ro_gui_save_object_native(struct content *c, char *path);
-static void ro_gui_save_link(link_format format, char *path);
+static bool ro_gui_save_link(struct content *c, link_format format, char *path);
/**
@@ -142,96 +141,95 @@ void ro_gui_save_drag_end(wimp_dragged *drag)
void ro_gui_save_datasave_ack(wimp_message *message)
{
char *path = message->data.data_xfer.file_name;
- struct content *c = save_content;
+ struct content *c = save_content;
os_error *error;
- bool ack = true;
+
+ if (!save_content) {
+ LOG(("unexpected DataSaveAck: save_content not set"));
+ return;
+ }
ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_PATH, path);
switch (gui_current_save_type) {
case GUI_SAVE_SOURCE:
- if (!c)
- return;
- error = xosfile_save_stamped(path,
- ro_content_filetype(c),
+ error = xosfile_save_stamped(path,
+ ro_content_filetype(c),
c->source_data,
c->source_data + c->source_size);
if (error) {
LOG(("xosfile_save_stamped: 0x%x: %s",
error->errnum, error->errmess));
warn_user(error->errmess);
+ return;
}
break;
case GUI_SAVE_COMPLETE:
- if (!c)
- return;
ro_gui_save_complete(c, path);
- ack = false;
break;
case GUI_SAVE_DRAW:
- if (!c)
- return;
save_as_draw(c, path);
break;
case GUI_SAVE_TEXT:
- if (!c)
- return;
save_as_text(c, path);
xosfile_set_type(path, 0xfff);
break;
case GUI_SAVE_OBJECT_ORIG:
- if (!c)
- return;
- error = xosfile_save_stamped(path,
- ro_content_filetype(c),
+ error = xosfile_save_stamped(path,
+ ro_content_filetype(c),
c->source_data,
c->source_data + c->source_size);
if (error) {
LOG(("xosfile_save_stamped: 0x%x: %s",
error->errnum, error->errmess));
warn_user(error->errmess);
+ return;
}
break;
case GUI_SAVE_OBJECT_NATIVE:
- if (!c)
- return;
- ro_gui_save_object_native(c, path);
- break;
+ ro_gui_save_object_native(c, path);
+ break;
case GUI_SAVE_LINK_URI:
- if (!save_link)
- return;
- ro_gui_save_link(LINK_ACORN, path);
- break;
+ if (!ro_gui_save_link(c, LINK_ACORN, path))
+ return;
+ break;
case GUI_SAVE_LINK_URL:
- if (!save_link)
- return;
- ro_gui_save_link(LINK_ANT, path);
- break;
+ if (!ro_gui_save_link(c, LINK_ANT, path))
+ return;
+ break;
case GUI_SAVE_LINK_TEXT:
- if (!save_link)
- return;
- ro_gui_save_link(LINK_TEXT, path);
- break;
+ if (!ro_gui_save_link(c, LINK_TEXT, path))
+ return;
+ break;
}
- if (ack) {
- /* Ack successful save with message_DATA_LOAD */
- message->action = message_DATA_LOAD;
- message->your_ref = message->my_ref;
- wimp_send_message_to_window(wimp_USER_MESSAGE, message, message->data.data_xfer.w, message->data.data_xfer.i);
+ /* Ack successful save with message_DATA_LOAD */
+ message->action = message_DATA_LOAD;
+ message->your_ref = message->my_ref;
+ error = xwimp_send_message_to_window(wimp_USER_MESSAGE, message,
+ message->data.data_xfer.w, message->data.data_xfer.i, 0);
+ if (error) {
+ LOG(("xwimp_send_message_to_window: 0x%x: %s",
+ error->errnum, error->errmess));
+ warn_user(error->errmess);
+ }
+
+ error = xwimp_create_menu(wimp_CLOSE_MENU, 0, 0);
+ if (error) {
+ LOG(("xwimp_create_menu: 0x%x: %s",
+ error->errnum, error->errmess));
+ warn_user(error->errmess);
}
- if (save_link) xfree(save_link);
- save_content = NULL;
- wimp_create_menu(wimp_CLOSE_MENU, 0, 0);
+ save_content = 0;
}
@@ -369,22 +367,35 @@ void ro_gui_save_object_native(struct content *c, char *path)
}
}
-void ro_gui_save_link(link_format format, char *path)
+
+/**
+ * Save a link file.
+ *
+ * \param c content to save link to
+ * \param format format of link file
+ * \param path pathname for link file
+ * \return true on success, false on failure and reports the error
+ */
+
+bool ro_gui_save_link(struct content *c, link_format format, char *path)
{
FILE *fp = fopen(path, "w");
- if (!fp) return;
+ if (!fp) {
+ warn_user(strerror(errno));
+ return false;
+ }
switch (format) {
case LINK_ACORN: /* URI */
fprintf(fp, "%s\t%s\n", "URI", "100");
fprintf(fp, "\t# NetSurf %s\n\n", netsurf_version);
- fprintf(fp, "\t%s\n", save_link);
+ fprintf(fp, "\t%s\n", c->url);
fprintf(fp, "\t*\n");
break;
case LINK_ANT: /* URL */
case LINK_TEXT: /* Text */
- fprintf(fp, "%s\n", save_link);
+ fprintf(fp, "%s\n", c->url);
break;
}
@@ -401,4 +412,6 @@ void ro_gui_save_link(link_format format, char *path)
xosfile_set_type(path, 0xfff);
break;
}
+
+ return true;
}