Handle redrawn/restored display better
diff --git a/contiki/apps/program-handler.c b/contiki/apps/program-handler.c
index db42395..02aa31f 100644
--- a/contiki/apps/program-handler.c
+++ b/contiki/apps/program-handler.c
@@ -43,7 +43,7 @@
*
* This file is part of the Contiki desktop OS
*
- * $Id: program-handler.c,v 1.24 2004/07/04 11:35:07 adamdunkels Exp $
+ * $Id: program-handler.c,v 1.25 2004/08/20 21:32:41 adamdunkels Exp $
*
*/
@@ -55,6 +55,8 @@
#include "ctk-draw.h"
#include "ctk-conf.h"
+#include "log.h"
+
#include "loader.h"
#include "program-handler.h"
@@ -162,11 +164,8 @@
void
program_handler_init(void)
{
- if(id == EK_ID_NONE) {
- id = ek_start(&p);
- ctk_menu_new(&contikimenu, "Contiki");
- }
-
+ id = ek_start(&p);
+ ctk_menu_new(&contikimenu, "Contiki");
}
/*-----------------------------------------------------------------------------------*/
#ifdef WITH_LOADER_ARCH
@@ -254,6 +253,31 @@
}
}
/*-----------------------------------------------------------------------------------*/
+static void
+make_windows(void)
+{
+#ifdef WITH_LOADER_ARCH
+ ctk_window_new(&runwindow, 16, 3, "Run");
+
+ CTK_WIDGET_ADD(&runwindow, &namelabel);
+ CTK_WIDGET_ADD(&runwindow, &nameentry);
+ CTK_WIDGET_ADD(&runwindow, &loadbutton);
+
+ CTK_WIDGET_FOCUS(&runwindow, &nameentry);
+
+ ctk_dialog_new(&loadingdialog, 25, 1);
+ CTK_WIDGET_ADD(&loadingdialog, &loadingmsg);
+ CTK_WIDGET_ADD(&loadingdialog, &loadingname);
+
+ ctk_dialog_new(&errordialog, 22, 8);
+ CTK_WIDGET_ADD(&errordialog, &errormsg);
+ CTK_WIDGET_ADD(&errordialog, &errorfilelabel);
+ CTK_WIDGET_ADD(&errordialog, &errortype);
+ CTK_WIDGET_ADD(&errordialog, &errorokbutton);
+ CTK_WIDGET_FOCUS(&errordialog, &errorokbutton);
+#endif /* WITH_LOADER_ARCH */
+}
+/*-----------------------------------------------------------------------------------*/
/*static
DISPATCHER_SIGHANDLER(program_handler_sighandler, s, data)*/
EK_EVENTHANDLER(program_handler_eventhandler, ev, data)
@@ -268,29 +292,12 @@
EK_EVENTHANDLER_ARGS(ev, data);
if(ev == EK_EVENT_INIT) {
- /* Create the menus */
+ /* Create the menus */
ctk_menu_add(&contikimenu);
#if WITH_LOADER_ARCH
runmenuitem = ctk_menuitem_add(&contikimenu, "Run program...");
-
- ctk_window_new(&runwindow, 16, 3, "Run");
-
- CTK_WIDGET_ADD(&runwindow, &namelabel);
- CTK_WIDGET_ADD(&runwindow, &nameentry);
- CTK_WIDGET_ADD(&runwindow, &loadbutton);
- CTK_WIDGET_FOCUS(&runwindow, &nameentry);
-
- ctk_dialog_new(&loadingdialog, 25, 1);
- CTK_WIDGET_ADD(&loadingdialog, &loadingmsg);
- CTK_WIDGET_ADD(&loadingdialog, &loadingname);
-
- ctk_dialog_new(&errordialog, 22, 8);
- CTK_WIDGET_ADD(&errordialog, &errormsg);
- CTK_WIDGET_ADD(&errordialog, &errorfilelabel);
- CTK_WIDGET_ADD(&errordialog, &errortype);
- CTK_WIDGET_ADD(&errordialog, &errorokbutton);
- CTK_WIDGET_FOCUS(&errordialog, &errorokbutton);
+ make_windows();
#endif /* WITH_LOADER_ARCH */
@@ -323,6 +330,7 @@
if(dsc != NULL) {
RUN(dsc->prgname, dsc->init, NULL);
} else if(contikimenu.active == runmenuitem) {
+ make_windows();
ctk_window_open(&runwindow);
CTK_WIDGET_FOCUS(&runwindow, &nameentry);
}
@@ -345,6 +353,8 @@
} else if(ev == LOADER_EVENT_DISPLAY_NAME) {
#if WITH_LOADER_ARCH
if(displayname == NULL) {
+ make_windows();
+
ctk_label_set_text(&loadingname, ((struct pnarg *)data)->name);
ctk_dialog_open(&loadingdialog);
/* dispatcher_emit(loader_signal_load, data, id);*/
@@ -361,15 +371,18 @@
if(displayname == data) {
ctk_dialog_close();
displayname = NULL;
+ log_message("Loading ", ((struct pnarg *)data)->name);
err = LOADER_LOAD(((struct pnarg *)data)->name,
((struct pnarg *)data)->arg);
if(err != LOADER_OK) {
+ make_windows();
errorfilename[0] = '"';
strncpy(errorfilename + 1, ((struct pnarg *)data)->name,
sizeof(errorfilename) - 2);
errorfilename[1 + strlen(((struct pnarg *)data)->name)] = '"';
ctk_label_set_text(&errortype, (char *)errormsgs[err]);
ctk_dialog_open(&errordialog);
+ log_message((char *)errormsgs[err], errorfilename);
}
pnarg_free(data);
} else {