From 67dba8aaebfd9b30cd8ee8e093aae966b8232275 Mon Sep 17 00:00:00 2001
From: Allanis <allanis@saracraft.net>
Date: Wed, 3 Apr 2013 19:45:49 +0100
Subject: [PATCH] [Change] Cleanups.

---
 dat/start.xml |  4 ++--
 src/land.c    | 12 +++++++++++-
 src/mission.c | 10 +++++-----
 src/toolkit.c |  5 +++++
 4 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/dat/start.xml b/dat/start.xml
index fe33a39..7d459f1 100644
--- a/dat/start.xml
+++ b/dat/start.xml
@@ -8,8 +8,8 @@
     </credits>
     <system>
       <name>KonoSys</name>
-      <x>100</x>
-      <y>75</y>
+      <x>0</x>
+      <y>0</y>
     </system>
   </player>
 </Start>
diff --git a/src/land.c b/src/land.c
index d594208..a4f351e 100644
--- a/src/land.c
+++ b/src/land.c
@@ -158,6 +158,7 @@ static void commodity_exchange(void) {
 static void commodity_exchange_close(char* str) {
   if(strcmp(str, "btnCommodityClose")==0)
     window_destroy(secondary_wid);
+  secondary_wid = 0;
 }
 
 static void commodity_update(char* str) {
@@ -292,6 +293,7 @@ static void outfits(void) {
 static void outfits_close(char* str) {
   if(strcmp(str, "btnCloseOutfits")==0)
     window_destroy(secondary_wid);
+  secondary_wid = 0;
 }
 
 static void outfits_update(char* str) {
@@ -483,6 +485,7 @@ static void shipyard(void) {
 static void shipyard_close(char* str) {
   if(strcmp(str, "btnCloseShipyard")==0)
     window_destroy(secondary_wid);
+  secondary_wid = 0;
 }
 
 static void shipyard_update(char* str) {
@@ -610,6 +613,7 @@ static void shipyard_yours(char* str) {
 static void shipyard_yoursClose(char* str) {
   (void)str;
   window_destroy(terciary_wid);
+  terciary_wid = 0;
 }
 
 static void shipyard_yoursUpdate(char* str) {
@@ -768,6 +772,7 @@ static void spaceport_bar(void) {
 static void spaceport_bar_close(char* str) {
   if(strcmp(str, "btnCloseBar")==0)
     window_destroy(secondary_wid);
+  secondary_wid = 0;
 }
 
 // Planet news reports.
@@ -788,6 +793,7 @@ static void news(void) {
 static void news_close(char* str) {
   if(strcmp(str, "btnCloseNews")==0)
     window_destroy(terciary_wid);
+  terciary_wid = 0;
 }
 
 // Mission computer, cos' missions rule!
@@ -822,6 +828,7 @@ static void misn(void) {
 static void misn_close(char* str) {
   if(strcmp(str, "btnCloseMission")==0)
     window_destroy(secondary_wid);
+  secondary_wid = 0;
 }
 
 static void misn_accept(char* str) {
@@ -837,6 +844,7 @@ static void misn_accept(char* str) {
     if(mission_computer[i].title &&
         (strcmp(misn_name, mission_computer[i].title)==0)) {
       mission_accept(&mission_computer[i]);
+      misn_genList(0);
       return;
     }
 }
@@ -856,8 +864,10 @@ static void misn_genList(int first) {
     for(i = 0; i < mission_ncomputer; i++)
       if(mission_computer[i].title)
         misn_names[j++] = strdup(mission_computer[i].title);
-  } else {
+  } 
+  if((mission_ncomputer == 0) || (j == 0)) {
     // No missions.
+    if(j == 0) free(misn_names);
     misn_names = malloc(sizeof(char*));
     misn_names[0] = strdup("No Missions");
   }
diff --git a/src/mission.c b/src/mission.c
index ef2ad6c..f731122 100644
--- a/src/mission.c
+++ b/src/mission.c
@@ -101,11 +101,11 @@ void mission_accept(Mission* mission) {
 
 // Clean up a mission.
 void mission_cleanup(Mission* misn) {
-  hook_rmParent(misn->id); // Remove existing hooks.
-  if(misn->title) free(misn->title);
-  if(misn->desc)  free(misn->desc);
-  if(misn->reward) free(misn->reward);
-  lua_close(misn->L);
+  if(misn->id)      hook_rmParent(misn->id); // Remove existing hooks.
+  if(misn->title)   free(misn->title);
+  if(misn->desc)    free(misn->desc);
+  if(misn->reward)  free(misn->reward);
+  if(misn->L)       lua_close(misn->L);
   memset(misn, 0, sizeof(Mission));
 }
 
diff --git a/src/toolkit.c b/src/toolkit.c
index 108a63e..dacb7b1 100644
--- a/src/toolkit.c
+++ b/src/toolkit.c
@@ -563,6 +563,11 @@ void window_destroyWidget(unsigned int wid, const char* wgtname) {
   Window* w = window_wget(wid);
   int i;
 
+  if(w == NULL) {
+    WARN("Window %d does not exist", wid);
+    return;
+  }
+
   for(i = 0; i < w->nwidgets; i++)
     if(strcmp(wgtname, w->widgets[i].name)==0)
       break;