summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog16
-rw-r--r--src/frame.c13
-rw-r--r--src/ui.c17
-rw-r--r--src/ui.h3
4 files changed, 42 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a4ff37d1..974a0fe3d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);
diff --git a/src/ui.c b/src/ui.c
index 993ec2731..93a6beb15 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -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;
diff --git a/src/ui.h b/src/ui.h
index ca8240ec3..f4cb8d0fd 100644
--- a/src/ui.h
+++ b/src/ui.h
@@ -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,