fix ecore_x and ecore-evas to work in multihead at all... :)
authorCarsten Haitzler <raster@rasterman.com>
Fri, 19 Nov 2004 08:16:49 +0000 (08:16 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Fri, 19 Nov 2004 08:16:49 +0000 (08:16 +0000)
SVN revision: 12224

legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c
legacy/ecore/src/lib/ecore_x/ecore_x_window.c

index 3ac27e0..5c4a6a2 100644 (file)
@@ -1179,11 +1179,42 @@ ecore_evas_software_x11_new(const char *disp_name, Ecore_X_Window parent,
    einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(ee->evas);
    if (einfo)
      {
+       int screen;
+
+       /* FIXME: this is inefficient as its a round trip */
+       screen = DefaultScreen(ecore_x_display_get());
+       if (ScreenCount(ecore_x_display_get()) > 1)
+         {
+            Ecore_X_Window *roots;
+            int num, i;
+            
+            num = 0;
+            roots = ecore_x_window_root_list(&num);
+            if (roots)
+              {
+                 XWindowAttributes at;
+                 
+                 if (XGetWindowAttributes(ecore_x_display_get(),
+                                          parent, &at))
+                   {
+                      for (i = 0; i < num; i++)
+                        {
+                           if (roots[i] == at.root == roots[i])
+                             {
+                                screen = i;
+                                break;
+                             }
+                        }
+                   }
+                 free(roots);
+              }
+         }
+       printf("EVAS ON SCREEN %i\n", screen);
        einfo->info.display  = ecore_x_display_get();
-       einfo->info.visual   = DefaultVisual(ecore_x_display_get(), DefaultScreen(ecore_x_display_get()));
-       einfo->info.colormap = DefaultColormap(ecore_x_display_get(), DefaultScreen(ecore_x_display_get()));
+       einfo->info.visual   = DefaultVisual(ecore_x_display_get(), screen);
+       einfo->info.colormap = DefaultColormap(ecore_x_display_get(), screen);
        einfo->info.drawable = ee->engine.x.win;
-       einfo->info.depth    = DefaultDepth(ecore_x_display_get(), DefaultScreen(ecore_x_display_get()));
+       einfo->info.depth    = DefaultDepth(ecore_x_display_get(), screen);
        einfo->info.rotation = 0;
        einfo->info.debug    = 0;
        evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
@@ -1266,10 +1297,41 @@ ecore_evas_gl_x11_new(const char *disp_name, Ecore_X_Window parent,
    if (einfo)
      {
        XSetWindowAttributes attr;
+       int screen;
+
+       /* FIXME: this is inefficient as its a round trip */
+       screen = DefaultScreen(ecore_x_display_get());
+       if (ScreenCount(ecore_x_display_get()) > 1)
+         {
+            Ecore_X_Window *roots;
+            int num, i;
+            
+            num = 0;
+            roots = ecore_x_window_root_list(&num);
+            if (roots)
+              {
+                 XWindowAttributes at;
+                 
+                 if (XGetWindowAttributes(ecore_x_display_get(),
+                                          parent, &at))
+                   {
+                      for (i = 0; i < num; i++)
+                        {
+                           if (roots[i] == at.root == roots[i])
+                             {
+                                screen = i;
+                                break;
+                             }
+                        }
+                   }
+                 free(roots);
+              }
+         }
+       printf("EVAS ON SCREEN %i\n", screen);
        
        attr.backing_store = NotUseful;
        attr.override_redirect = True;
-       attr.colormap = einfo->func.best_colormap_get(ecore_x_display_get(), DefaultScreen(ecore_x_display_get()));
+       attr.colormap = einfo->func.best_colormap_get(ecore_x_display_get(), screen);
        attr.border_pixel = 0;
        attr.background_pixmap = None;
        attr.event_mask =
@@ -1285,19 +1347,19 @@ ecore_evas_gl_x11_new(const char *disp_name, Ecore_X_Window parent,
                        ee->engine.x.win_container,
                        0, 0, 
                        w, h, 0,
-                       einfo->func.best_depth_get(ecore_x_display_get(), DefaultScreen(ecore_x_display_get())),
+                       einfo->func.best_depth_get(ecore_x_display_get(), screen),
                        InputOutput,
-                       einfo->func.best_visual_get(ecore_x_display_get(), DefaultScreen(ecore_x_display_get())),
+                       einfo->func.best_visual_get(ecore_x_display_get(), screen),
                        CWBackingStore | CWColormap |
                        CWBackPixmap | CWBorderPixel |
                        CWBitGravity | CWEventMask |
                        CWOverrideRedirect,
                        &attr);
        einfo->info.display  = ecore_x_display_get();
-       einfo->info.visual   = einfo->func.best_visual_get(ecore_x_display_get(), DefaultScreen(ecore_x_display_get()));
-       einfo->info.colormap = einfo->func.best_colormap_get(ecore_x_display_get(), DefaultScreen(ecore_x_display_get()));
+       einfo->info.visual   = einfo->func.best_visual_get(ecore_x_display_get(), screen);
+       einfo->info.colormap = einfo->func.best_colormap_get(ecore_x_display_get(), screen);
        einfo->info.drawable = ee->engine.x.win;
-       einfo->info.depth    = einfo->func.best_depth_get(ecore_x_display_get(), DefaultScreen(ecore_x_display_get()));
+       einfo->info.depth    = einfo->func.best_depth_get(ecore_x_display_get(), screen);
        evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
      }
    evas_key_modifier_add(ee->evas, "Shift");
index b834b6d..4575850 100644 (file)
@@ -52,12 +52,12 @@ ecore_x_window_new(Ecore_X_Window parent, int x, int y, int w, int h)
                                 ColormapChangeMask;
    win = XCreateWindow(_ecore_x_disp, parent,
                       x, y, w, h, 0,
-                      DefaultDepth(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),
+                      0, /*DefaultDepth(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
                       InputOutput, 
-                      DefaultVisual(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),
+                      CopyFromParent, /*DefaultVisual(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
                       CWBackingStore |
                       CWOverrideRedirect | 
-                      CWColormap | 
+/*                    CWColormap | */
                       CWBorderPixel |
                       CWBackPixmap | 
                       CWSaveUnder | 
@@ -109,12 +109,12 @@ ecore_x_window_override_new(Ecore_X_Window parent, int x, int y, int w, int h)
                                 ColormapChangeMask;
    win = XCreateWindow(_ecore_x_disp, parent,
                       x, y, w, h, 0,
-                      DefaultDepth(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),
+                      0, /*DefaultDepth(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
                       InputOutput, 
-                      DefaultVisual(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),
+                      CopyFromParent, /*DefaultVisual(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
                       CWBackingStore |
                       CWOverrideRedirect | 
-                      CWColormap | 
+/*                    CWColormap | */
                       CWBorderPixel |
                       CWBackPixmap | 
                       CWSaveUnder | 
@@ -163,7 +163,7 @@ ecore_x_window_input_new(Ecore_X_Window parent, int x, int y, int w, int h)
                       x, y, w, h, 0,
                       0, 
                       InputOnly,
-                      DefaultVisual(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),
+                      CopyFromParent, /*DefaultVisual(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
                       CWOverrideRedirect | 
                       CWDontPropagate | 
                       CWEventMask,