--- plugin.h	2005/08/27 16:13:17	1.10
+++ plugin.h	2006/04/17 09:18:16
@@ -39,6 +39,7 @@
   virtual bool Start(void);
   virtual void Stop(void);
   virtual void Housekeeping(void);
+  virtual void MainThreadHook(void);
 
   virtual const char *MainMenuEntry(void);
   virtual cOsdObject *MainMenuAction(void);
@@ -89,6 +91,7 @@
   bool InitializePlugins(void);
   bool StartPlugins(void);
   void Housekeeping(void);
+  void MainThreadHook(void);
   static bool HasPlugins(void);
   static cPlugin *GetPlugin(int Index);
   static cPlugin *GetPlugin(const char *Name);
--- plugin.c	2006/04/09 14:16:17	1.18
+++ plugin.c	2006/04/17 09:20:05
@@ -69,6 +70,10 @@
 {
 }
 
+void cPlugin::MainThreadHook(void)
+{
+}
+
 const char *cPlugin::MainMenuEntry(void)
 {
   return NULL;
@@ -364,6 +374,15 @@
      }
 }
 
+void cPluginManager::MainThreadHook(void)
+{
+  for (cDll *dll = pluginManager->dlls.First(); dll; dll = pluginManager->dlls.Next(dll)) {
+      cPlugin *p = dll->Plugin();
+      if (p)
+         p->MainThreadHook();
+      }
+}
+
 bool cPluginManager::HasPlugins(void)
 {
   return pluginManager && pluginManager->dlls.Count();
--- vdr.c	2006/04/09 12:22:46	1.254
+++ vdr.c	2006/04/17 09:23:23
@@ -830,6 +830,8 @@
         // Queued messages:
         if (!Skins.IsOpen())
            Skins.ProcessQueuedMessages();
+        // Main thread hooks of plugins:
+        PluginManager.MainThreadHook();
         // User Input:
         cOsdObject *Interact = Menu ? Menu : cControl::Control();
         eKeys key = Interface->GetKey((!Interact || !Interact->NeedsFastResponse()) && time(NULL) - LastCamMenu > LASTCAMMENUTIMEOUT);
