Add two events
authorRui Guo <firemeteor.guo@gmail.com>
Mon, 10 Aug 2009 16:36:45 +0000 (11 00:36 +0800)
committerRui Guo <firemeteor.guo@gmail.com>
Mon, 10 Aug 2009 16:36:45 +0000 (11 00:36 +0800)
Screen.oncreatewindow
window.onoutput

src/ansi.c
src/lua.c
src/script.c
src/script.h
src/window.c
src/window.h

index 29fbe0d..9370160 100644 (file)
@@ -307,6 +307,12 @@ register int len;
     return;
   if (wp->w_log)
     WLogString(wp, buf, len);
+#ifdef SCRIPT
+  /*May it cause buffer overrun?*/
+  if (buf[len])
+    buf[len]=0;
+  trigger_sevent(&wp->w_sev.onoutput, wp, buf);
+#endif
 
   /* set global variables (yuck!) */
   curr = wp;
index 3539cda..03dacd0 100644 (file)
--- a/src/lua.c
+++ b/src/lua.c
@@ -483,6 +483,8 @@ window_activate(lua_State *L)
   return 0;
 }
 
+static void push_canvas(lua_State *L, struct canvas **t); 
+
 static int
 window_get_showing_canvases(lua_State *L)
 {
index d318286..8d25a69 100644 (file)
@@ -201,6 +201,7 @@ struct sev_description {
       /* fore window changed to window w on display d. */
       {"global_forechanged", "dw", offsetof(struct gevents, forechanged)},
       {"global_onattach", "d", offsetof(struct gevents, onattach)},
+      {"global_oncreatewindow", "w", offsetof(struct gevents, window_create)},
       {"global_processcaption", "c", offsetof(struct gevents, processcaption)},
 
       /* Window events */
@@ -212,6 +213,7 @@ struct sev_description {
       {"window_onhide", "dw", offsetof(struct win, w_sev.onhide)},
       /* window w lost its focus on display d. */
       {"window_onleave", "dw", offsetof(struct win, w_sev.onleave)},
+      {"window_onoutput", "ws", offsetof(struct win, w_sev.onoutput)},
       {"window_onresize", "w", offsetof(struct win, w_sev.onresize)},
       /* window w first showed up on display d. When there are regions, it can
        * still be shown while losing focus. */
index ec47f42..e1addd4 100644 (file)
@@ -102,6 +102,7 @@ struct gevents
   struct script_event onattach;
   struct script_event forechanged;
   struct script_event processcaption;
+  struct script_event window_create;
 };
 extern struct gevents globalevents;
 #endif
index 8eb1edb..1aa14dc 100644 (file)
@@ -841,6 +841,9 @@ struct NewWindow *newwin;
       evenq(&p->w_silenceev);
     }
 
+#ifdef SCRIPT
+  trigger_sevent(&globalevents.window_create, p);
+#endif
   SetForeWindow(p);
   Activate(p->w_norefresh);
   WindowChanged((struct win*)0, 'w');
index c8559a9..4afd4be 100644 (file)
@@ -292,6 +292,7 @@ struct win
       struct script_event onclose;
       struct script_event onsilent;
       struct script_event onactivity;
+      struct script_event onoutput;
     } w_sev; /*For Script events. */
 #endif
 };