From 393327f67f45a33880f3608830c08f573c40162a Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 19 Nov 2004 08:16:49 +0000 Subject: [PATCH] fix ecore_x and ecore-evas to work in multihead at all... :) SVN revision: 12224 --- .../ecore/src/lib/ecore_evas/ecore_evas_x.c | 80 ++++++++++++++++--- legacy/ecore/src/lib/ecore_x/ecore_x_window.c | 14 ++-- 2 files changed, 78 insertions(+), 16 deletions(-) diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c index 3ac27e0c04..5c4a6a2546 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c @@ -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"); diff --git a/legacy/ecore/src/lib/ecore_x/ecore_x_window.c b/legacy/ecore/src/lib/ecore_x/ecore_x_window.c index b834b6d63c..4575850565 100644 --- a/legacy/ecore/src/lib/ecore_x/ecore_x_window.c +++ b/legacy/ecore/src/lib/ecore_x/ecore_x_window.c @@ -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,