diff options
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | src/frame.c | 13 | ||||
-rw-r--r-- | src/ui.c | 17 | ||||
-rw-r--r-- | src/ui.h | 3 |
4 files changed, 42 insertions, 7 deletions
@@ -1,5 +1,21 @@ 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. + +2003-11-15 Rob Adams <readams@readams.net> + * src/window.c (update_net_wm_type): don't set window->type_atom here so that the type-inference code will actually be called. Fix for #126873 from Keith Packard. diff --git a/src/frame.c b/src/frame.c index ba6b21c7e..20fc39645 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, |