Add some window events.
authorRui Guo <firemeteor.guo@gmail.com>
Fri, 19 Jun 2009 15:17:41 +0000 (19 23:17 +0800)
committerRui Guo <firemeteor.guo@gmail.com>
Fri, 19 Jun 2009 15:17:41 +0000 (19 23:17 +0800)
1. Define onfocus onleave onshow onhide events.
2. Implement onfocus & onleave event.

src/process.c
src/script.c
src/script.h
src/window.h

index b7a46a2..6bd76fc 100644 (file)
@@ -5156,6 +5156,9 @@ struct win *wi;
            }
          D_other = fore;
          D_fore = 0;
+#ifdef SCRIPT
+          trigger_sevent(&fore->w_sev.onleave, display, fore);
+#endif
        }
       if (l->l_cvlist == 0 && (p == 0 || l != p->w_savelayer))
        KillLayerChain(l);
@@ -5225,6 +5228,9 @@ struct win *wi;
              windows = p;
              WListLinkChanged();
            }
+#ifdef SCRIPT
+          trigger_sevent(&fore->w_sev.onfocus, display, fore);
+#endif
        }
     }
 }
index 1cc415b..42f5ff2 100644 (file)
@@ -187,17 +187,28 @@ struct sev_description {
     char *params;
     int offset;
 } event_table[] = {
+      /* NOTE: Manually sorted in Alphabet order! */
+
       /* Global events */
       {"global_cmdexecuted", "sS", offsetof(struct gevents, cmdexecuted)},
       {"global_detached", "di", offsetof(struct gevents, detached)},
          /* The command "detach" triggers both 'cmdexecuted' and 'detached' events.
             However, we need the 'detached' event to trigger callbacks from remote detaches.
           */
+      /* fore window changed to window w on display d. */
       {"global_forechanged", "dw", offsetof(struct gevents, forechanged)},
 
       /* Window events */
-      {"window_resize", "", offsetof(struct win, w_sev.resize)},
-      {"window_can_resize", "", offsetof(struct win, w_sev.canresize)}
+      {"window_can_resize", "", offsetof(struct win, w_sev.canresize)},
+      {"window_onfocus", "dw", offsetof(struct win, w_sev.onfocus)},
+      /* last view of window w disappeared on display d. */
+      {"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_onresize", "", 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. */
+      {"window_onshow", "dw", offsetof(struct win, w_sev.onshow)},
 };
 
 /* Get the event queue with the given name in the obj.  If the obj is NULL,
index efb3952..6f70ce9 100644 (file)
@@ -49,7 +49,7 @@ struct binding
 };
 
 void LoadBindings(void);
-void FinializeBindings(void);
+void FinalizeBindings(void);
 void ScriptCmd __P((int argc, const char **argv));
 
 /***Script events***/
index f9bb72b..b79adfa 100644 (file)
@@ -283,8 +283,12 @@ struct win
 #ifdef SCRIPT
   struct
     {
-      struct script_event resize;
       struct script_event canresize;
+      struct script_event onresize;
+      struct script_event onfocus;
+      struct script_event onleave;
+      struct script_event onhide;
+      struct script_event onshow;
     } w_sev; /*For Script events. */
 #endif
 };