diff options
author | Rob Adams <readams@readams.net> | 2003-11-16 04:19:18 +0000 |
---|---|---|
committer | Rob Adams <readams@src.gnome.org> | 2003-11-16 04:19:18 +0000 |
commit | 6ac67f80a6bac067f3314434dfd48bf7d547e763 (patch) | |
tree | 18164f0312475530c3f9593186096a3e11d901c3 /src | |
parent | a88f44ea64126f13ef42cbdbd6019404542277c9 (diff) | |
download | metacity-6ac67f80a6bac067f3314434dfd48bf7d547e763.tar.gz |
Inherit visual from frame window so that metacity will work with the new
2003-11-15 Rob Adams <readams@readams.net>
Inherit visual from frame window so that metacity will work with
the new compositing manager extension work by Keith on
freedesktop.org, so that ARGB windows can be full
alpha-transparent without a metacity frame getting drawn in the
background. In the long term, we need to actually set alpha
values when drawing the frame so that it will really work; this is
a stopgap solution. Patch from Keith Packard; see Bug 126875.
* src/frame.c (meta_window_ensure_frame): pass client visual to
frame.
* src/ui.[ch] (meta_ui_create_frame_window): add new xvisual
parameter and use it to create new window.
Diffstat (limited to 'src')
-rw-r--r-- | src/frame.c | 13 | ||||
-rw-r--r-- | src/ui.c | 17 | ||||
-rw-r--r-- | src/ui.h | 3 |
3 files changed, 26 insertions, 7 deletions
diff --git a/src/frame.c b/src/frame.c index ba6b21c7..20fc3964 100644 --- a/src/frame.c +++ b/src/frame.c @@ -39,6 +39,7 @@ meta_window_ensure_frame (MetaWindow *window) { MetaFrame *frame; XSetWindowAttributes attrs; + Visual *visual; if (window->frame) return; @@ -78,10 +79,16 @@ meta_window_ensure_frame (MetaWindow *window) * visual as the client. */ + visual = 0; + /* XXX special case for depth 32 windows (assumed to be ARGB) */ + if (window->depth == 32) + visual = window->xvisual; + frame->xwindow = meta_ui_create_frame_window (window->screen->ui, - window->display->xdisplay, - frame->rect.x, - frame->rect.y, + window->display->xdisplay, + visual, + frame->rect.x, + frame->rect.y, frame->rect.width, frame->rect.height, frame->window->screen->number); @@ -154,7 +154,8 @@ meta_ui_get_frame_geometry (MetaUI *ui, Window meta_ui_create_frame_window (MetaUI *ui, - Display *xdisplay, + Display *xdisplay, + Visual *xvisual, gint x, gint y, gint width, @@ -166,12 +167,22 @@ meta_ui_create_frame_window (MetaUI *ui, GdkWindowAttr attrs; gint attributes_mask; GdkWindow *window; + GdkVisual *visual; + GdkColormap *cmap = gdk_screen_get_default_colormap (screen); /* Default depth/visual handles clients with weird visuals; they can * always be children of the root depth/visual obviously, but * e.g. DRI games can't be children of a parent that has the same * visual as the client. */ + if (!xvisual) + visual = gdk_screen_get_system_visual (screen); + else + { + visual = gdk_x11_screen_lookup_visual (screen, + XVisualIDFromVisual (xvisual)); + cmap = gdk_colormap_new (visual, FALSE); + } attrs.title = NULL; @@ -185,8 +196,8 @@ meta_ui_create_frame_window (MetaUI *ui, attrs.x = x; attrs.y = y; attrs.wclass = GDK_INPUT_OUTPUT; - attrs.visual = gdk_screen_get_system_visual (screen); - attrs.colormap = gdk_screen_get_default_colormap (screen); + attrs.visual = visual; + attrs.colormap = cmap; attrs.window_type = GDK_WINDOW_CHILD; attrs.cursor = NULL; attrs.wmclass_name = NULL; @@ -58,7 +58,8 @@ void meta_ui_get_frame_geometry (MetaUI *ui, int *top_height, int *bottom_height, int *left_width, int *right_width); Window meta_ui_create_frame_window (MetaUI *ui, - Display *xdisplay, + Display *xdisplay, + Visual *xvisual, gint x, gint y, gint width, |