done different long timer timeout depend on rich_animation
[livewp] / applet / src / livewp-home-widget.c
index e8e9904..06fa6f6 100644 (file)
@@ -808,15 +808,28 @@ destroy_scene(void){
 void
 reload_scene(AWallpaperPlugin *desktop_plugin)
 {
-    fprintf(stderr,"Reload scene %s\n", desktop_plugin->priv->theme);  
-    destroy_scene();
-    if (!strcmp(desktop_plugin->priv->theme,"Modern"))
-        init_scene(desktop_plugin);
-    else if (!strcmp(desktop_plugin->priv->theme,"Berlin")) 
-        init_scene1(desktop_plugin);
-    else if (!strcmp(desktop_plugin->priv->theme,"Matrix")) 
-        init_scene2(desktop_plugin);
+    /* change long_timer if change rich_animation */
+    if (desktop_plugin->priv->long_timer){
+        g_source_remove(desktop_plugin->priv->long_timer);
+        desktop_plugin->priv->long_timer = 0;
+    }
 
+    if (desktop_plugin->priv->rich_animation)
+        desktop_plugin->priv->long_timer = g_timeout_add(LONG_TIMER1, (GtkFunction)long_timeout, desktop_plugin);
+    else 
+        desktop_plugin->priv->long_timer = g_timeout_add(LONG_TIMER2, (GtkFunction)long_timeout, desktop_plugin);
+
+    /* change theme if need */
+    if (strcmp(scene.name, desktop_plugin->priv->theme)){
+        fprintf(stderr,"Reload scene %s\n", desktop_plugin->priv->theme);  
+        destroy_scene();
+        if (!strcmp(desktop_plugin->priv->theme,"Modern"))
+            init_scene(desktop_plugin);
+        else if (!strcmp(desktop_plugin->priv->theme,"Berlin")) 
+            init_scene1(desktop_plugin);
+        else if (!strcmp(desktop_plugin->priv->theme,"Matrix")) 
+            init_scene2(desktop_plugin);
+    }
 }
 
 static void
@@ -829,7 +842,7 @@ init_scene2(AWallpaperPlugin *desktop_plugin)
   fprintf(stderr, "init scene2 \n");
   //scene.daytime = get_daytime();
   scene.actors = NULL;
-
+  scene.name = g_strdup("Matrix"); 
   
   actor = init_object(desktop_plugin, "background", "bg.png", 
                       0, 0, 5, 800, 480, 
@@ -908,6 +921,7 @@ init_scene(AWallpaperPlugin *desktop_plugin)
   /* init value for random */
   scene.seed = time(NULL);
 
+  scene.name = g_strdup("Modern"); 
  
 
   actor = init_object(desktop_plugin, "sky", "sky0.png", 
@@ -1218,6 +1232,7 @@ init_scene1(AWallpaperPlugin *desktop_plugin)
   /* init value for random */
   scene.seed = time(NULL);
 
+  scene.name = g_strdup("Berlin"); 
   
   actor = init_object(desktop_plugin, "sky", "sky.png", 0, 0, 5, 800, 480, 
                       TRUE, TRUE, 100, 255, 
@@ -1540,7 +1555,7 @@ run_long_timeout(AWallpaperPlugin *desktop_plugin)
 static gboolean
 long_timeout (AWallpaperPlugin *desktop_plugin)
 {
-    /* fprintf(stderr, "long_timeout %i\n", desktop_plugin->priv->long_timer); */
+    //fprintf(stderr, "long_timeout %d %d\n", desktop_plugin->priv->long_timer, time(NULL)); 
     if (desktop_plugin->priv->long_timer == 0 )
         return FALSE;
     if (!desktop_plugin->priv->visible){
@@ -1551,7 +1566,6 @@ long_timeout (AWallpaperPlugin *desktop_plugin)
         desktop_plugin->priv->long_timer = 0;
         return FALSE;
     }
-  
 
     run_long_timeout(desktop_plugin);
     return TRUE; /* keep running this event */
@@ -1568,7 +1582,11 @@ desktop_plugin_visible_notify (GObject    *object,
     if (visible){
         desktop_plugin->priv->visible = TRUE;
         if (desktop_plugin->priv->long_timer == 0 ){
-            desktop_plugin->priv->long_timer = g_timeout_add(LONG_TIMER, (GtkFunction)long_timeout, desktop_plugin);
+            if (desktop_plugin->priv->rich_animation)
+                desktop_plugin->priv->long_timer = g_timeout_add(LONG_TIMER1, (GtkFunction)long_timeout, desktop_plugin);
+            else 
+                desktop_plugin->priv->long_timer = g_timeout_add(LONG_TIMER2, (GtkFunction)long_timeout, desktop_plugin);
+
             run_long_timeout(desktop_plugin);
         }
     }else{
@@ -1649,7 +1667,12 @@ animation_wallpaper_plugin_init (AWallpaperPlugin *desktop_plugin)
         init_scene1(desktop_plugin);
     else if (!strcmp(priv->theme, "Matrix"))
         init_scene2(desktop_plugin);
-    priv->long_timer = g_timeout_add(LONG_TIMER, (GtkFunction)long_timeout, desktop_plugin);
+    
+    if (priv->rich_animation)
+        priv->long_timer = g_timeout_add(LONG_TIMER1, (GtkFunction)long_timeout, desktop_plugin);
+    else 
+        priv->long_timer = g_timeout_add(LONG_TIMER2, (GtkFunction)long_timeout, desktop_plugin);
+    
     /* TODO Move scene to priv */
     scene.timer_type = LONG_TIMER_TYPE;
     g_signal_connect (desktop_plugin, "notify::is-on-current-desktop",