[project @ 2004-08-11 21:36:30 by jmb]

Make message handling more robust

svn path=/import/netsurf/; revision=1212
This commit is contained in:
John Mark Bell 2004-08-11 21:36:30 +00:00
parent bc727dda1c
commit 45b241906e
3 changed files with 28 additions and 7 deletions

View File

@ -1254,10 +1254,8 @@ char *ro_gui_url_file_parse(const char *file_name)
void ro_msg_datasave_ack(wimp_message *message) void ro_msg_datasave_ack(wimp_message *message)
{ {
#ifdef WITH_PRINT #ifdef WITH_PRINT
if (print_current_window) { if (print_current_window && print_ack(message))
print_ack(message);
return; return;
}
#endif #endif
switch (gui_current_drag_type) { switch (gui_current_drag_type) {

View File

@ -46,6 +46,7 @@ struct gui_window *print_current_window = 0;
bool print_active = false; bool print_active = false;
/* static globals */ /* static globals */
static int print_prev_message = 0;
static bool print_in_background = false; static bool print_in_background = false;
static float print_scale = 1.0; static float print_scale = 1.0;
static int print_num_copies = 1; static int print_num_copies = 1;
@ -82,6 +83,7 @@ void ro_gui_print_open(struct gui_window *g, int x, int y, bool sub_menu, bool k
assert(g != NULL); assert(g != NULL);
print_current_window = g; print_current_window = g;
print_prev_message = 0;
/* Read Printer Driver name */ /* Read Printer Driver name */
e = xpdriver_info(0, 0, 0, 0, &pdName, 0, 0, 0); e = xpdriver_info(0, 0, 0, 0, &pdName, 0, 0, 0);
@ -275,6 +277,7 @@ void print_send_printsave(struct content *c)
warn_user("WimpError", e->errmess); warn_user("WimpError", e->errmess);
print_cleanup(); print_cleanup();
} }
print_prev_message = m.my_ref;
} }
/** /**
@ -308,6 +311,9 @@ bool print_send_printtypeknown(wimp_message *m)
*/ */
void print_save_bounce(wimp_message *m) void print_save_bounce(wimp_message *m)
{ {
if (m->my_ref == 0 || m->my_ref != print_prev_message)
return;
/* try to print anyway (we're graphics printing) */ /* try to print anyway (we're graphics printing) */
if (print_current_window) { if (print_current_window) {
print_document(print_current_window, "printer:"); print_document(print_current_window, "printer:");
@ -323,6 +329,9 @@ void print_save_bounce(wimp_message *m)
void print_error(wimp_message *m) void print_error(wimp_message *m)
{ {
pdriver_message_print_error *p = (pdriver_message_print_error*)&m->data; pdriver_message_print_error *p = (pdriver_message_print_error*)&m->data;
if (m->your_ref == 0 || m->your_ref != print_prev_message)
return;
if (m->size == 20) if (m->size == 20)
warn_user("PrintErrorRO2", 0); warn_user("PrintErrorRO2", 0);
else else
@ -338,7 +347,8 @@ void print_error(wimp_message *m)
*/ */
void print_type_odd(wimp_message *m) void print_type_odd(wimp_message *m)
{ {
if (m->your_ref != 0 && !print_in_background) { if ((m->your_ref == 0 || m->your_ref == print_prev_message) &&
!print_in_background) {
/* reply to a previous message (ie printsave) */ /* reply to a previous message (ie printsave) */
if (print_current_window && print_send_printtypeknown(m)) { if (print_current_window && print_send_printtypeknown(m)) {
print_document(print_current_window, "printer:"); print_document(print_current_window, "printer:");
@ -356,18 +366,24 @@ void print_type_odd(wimp_message *m)
* Handle message_DATASAVE_ACK for the printing protocol * Handle message_DATASAVE_ACK for the printing protocol
* *
* \param m the message to handle * \param m the message to handle
* \return true if message successfully handled, false otherwise
*/ */
void print_ack(wimp_message *m) bool print_ack(wimp_message *m)
{ {
int type; int type;
os_error *e; os_error *e;
if (m->your_ref == 0 || m->your_ref != print_prev_message) {
LOG(("message ignored"));
return false;
}
/* Read Printer Driver Type */ /* Read Printer Driver Type */
e = xpdriver_info(&type, 0, 0, 0, 0, 0, 0, 0); e = xpdriver_info(&type, 0, 0, 0, 0, 0, 0, 0);
if (e) { if (e) {
LOG(("%s", e->errmess)); LOG(("%s", e->errmess));
print_cleanup(); print_cleanup();
return; return true;
} }
type &= 0xFFFF0000; /* we don't care about the version no */ type &= 0xFFFF0000; /* we don't care about the version no */
@ -414,7 +430,10 @@ void print_ack(wimp_message *m)
0, 0, 0, 0, 0); 0, 0, 0, 0, 0);
print_cleanup(); print_cleanup();
} }
print_prev_message = m->my_ref;
} }
return true;
} }
/** /**
@ -424,6 +443,9 @@ void print_ack(wimp_message *m)
*/ */
void print_dataload_bounce(wimp_message *m) void print_dataload_bounce(wimp_message *m)
{ {
if (m->your_ref == 0 || m->your_ref != print_prev_message)
return;
xosfile_delete(m->data.data_xfer.file_name, 0, 0, 0, 0, 0); xosfile_delete(m->data.data_xfer.file_name, 0, 0, 0, 0, 0);
print_cleanup(); print_cleanup();
} }
@ -437,6 +459,7 @@ void print_cleanup(void)
print_current_window->option.background_images = print_current_window->option.background_images =
print_bg_images; print_bg_images;
print_current_window = 0; print_current_window = 0;
print_prev_message = 0;
print_max_sheets = -1; print_max_sheets = -1;
xwimp_create_menu((wimp_menu *)-1, 0, 0); xwimp_create_menu((wimp_menu *)-1, 0, 0);
ro_gui_dialog_close(dialog_print); ro_gui_dialog_close(dialog_print);

View File

@ -15,7 +15,7 @@ extern struct gui_window *print_current_window;
void print_save_bounce(wimp_message *m); void print_save_bounce(wimp_message *m);
void print_error(wimp_message *m); void print_error(wimp_message *m);
void print_type_odd(wimp_message *m); void print_type_odd(wimp_message *m);
void print_ack(wimp_message *m); bool print_ack(wimp_message *m);
void print_dataload_bounce(wimp_message *m); void print_dataload_bounce(wimp_message *m);
void print_cleanup(void); void print_cleanup(void);