fixed problem with next theme
[livewp] / applet / src / livewp-scene.c
index e6bfb22..e0a8f11 100644 (file)
@@ -23,7 +23,6 @@
 */
 /*******************************************************************************/
 #include "livewp-scene.h" 
-#include <X11/Xlib.h>
 /* This code form X11-utils */
 Window Window_With_Name( Display *dpy, Window top, char *name)
 {
@@ -33,6 +32,17 @@ Window Window_With_Name( Display *dpy, Window top, char *name)
        Window w=0;
        char *window_name;
 
+    XClassHint *class_hint;
+    class_hint = XAllocClassHint();
+    XGetClassHint(dpy, top, class_hint);
+    if (class_hint->res_name && name && !strcmp(class_hint->res_name, name)){
+      XFree(class_hint->res_class);
+      XFree(class_hint->res_name);
+           return(top);
+    }
+    XFree(class_hint->res_class);
+    XFree(class_hint->res_name);
+
        if (XFetchName(dpy, top, &window_name) && !strcmp(window_name, name))
          return(top);
 
@@ -215,15 +225,15 @@ init_scene_External(AWallpaperPlugin *desktop_plugin){
         *view = NULL,
         *strwin = NULL,
         *strview =NULL;
+    gint i;
     Window  id_xwindow;
     if (!desktop_plugin->priv->visible)
         return;
     
-    fprintf(stderr,"init_scene_external 111\n");
     exec_path = g_strdup(g_hash_table_lookup(desktop_plugin->priv->hash_theme, "exec_path"));
     window_id = g_strdup(g_hash_table_lookup(desktop_plugin->priv->hash_theme, "window_id"));
     view = g_strdup(g_hash_table_lookup(desktop_plugin->priv->hash_theme, "view"));
-    fprintf(stderr,"init_scene_external 222\n");
+    window_name = g_strdup(g_hash_table_lookup(desktop_plugin->priv->hash_theme, "window_name"));
     if (!exec_path) 
         return;
     if (window_id){
@@ -243,18 +253,23 @@ init_scene_External(AWallpaperPlugin *desktop_plugin){
     desktop_plugin->priv->running = TRUE;
     desktop_plugin->priv->podpid = fork();
     if (desktop_plugin->priv->podpid == 0){
-       execvp(child_argv[0], child_argv);
+        execvp(child_argv[0], child_argv);
        fprintf(stderr,"Problem with new podprocess");
     }
     g_free(run_string);
-    window_name = g_strdup(g_hash_table_lookup(desktop_plugin->priv->hash_theme, "window_name"));
     if (window_name){
-        sleep(1);
-        id_xwindow = Window_With_Name(GDK_WINDOW_XDISPLAY (desktop_plugin->priv->window->window), 
-            RootWindow( GDK_WINDOW_XDISPLAY (desktop_plugin->priv->window->window), XDefaultScreen( GDK_WINDOW_XDISPLAY (desktop_plugin->priv->window->window))),
-            window_name);
-        fprintf(stderr, "ddddddddddddddddd %i\n",id_xwindow); 
-        set_live_bg (GDK_WINDOW_XDISPLAY (desktop_plugin->priv->window->window),  id_xwindow, desktop_plugin->priv->view);
+        /* Do 10 trying to search of window */
+        for (i=0; i<10; i++){
+            sleep(1);
+            id_xwindow = Window_With_Name(GDK_WINDOW_XDISPLAY (desktop_plugin->priv->window->window), 
+                RootWindow( GDK_WINDOW_XDISPLAY (desktop_plugin->priv->window->window), XDefaultScreen( GDK_WINDOW_XDISPLAY (desktop_plugin->priv->window->window))),
+                window_name);
+            fprintf(stderr,"name %s %i %i\n", window_name, id_xwindow, i);
+            if (id_xwindow>0){
+                set_live_bg (GDK_WINDOW_XDISPLAY (desktop_plugin->priv->window->window),  id_xwindow, desktop_plugin->priv->view);
+                break;
+            }
+        }
     }
 }
 /*******************************************************************************/