From 936adc6ea50c495937dbd8e447737c105adcc4c6 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sun, 9 Sep 2001 03:44:42 +0000 Subject: [PATCH] don't use gdk_display_name 2001-09-08 Havoc Pennington * src/ui.c (meta_ui_init): don't use gdk_display_name * src/frame.c (meta_window_ensure_frame): create frame with screen default visual, rather than client window visual; for DRI games, the client window visual was not allowed to be a child of another window with the same visual, apparently. Anyhow now we copy twm, etc. so it must be correct. * src/place.c (meta_window_place): if a transient is placed and its parent has focus, focus the transient. --- ChangeLog | 13 +++++++++++++ src/frame.c | 23 +++++++++++++++++++---- src/place.c | 6 ++++++ src/screen.c | 2 ++ src/screen.h | 2 ++ src/ui.c | 2 +- src/window.c | 2 +- 7 files changed, 44 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 02d0e0885..e598eeadc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2001-09-08 Havoc Pennington + + * src/ui.c (meta_ui_init): don't use gdk_display_name + + * src/frame.c (meta_window_ensure_frame): create frame + with screen default visual, rather than client window visual; + for DRI games, the client window visual was not allowed to be + a child of another window with the same visual, apparently. + Anyhow now we copy twm, etc. so it must be correct. + + * src/place.c (meta_window_place): if a transient is placed and + its parent has focus, focus the transient. + 2001-09-06 Havoc Pennington * configure.in: bump version 2.3.5, require newer GTK release diff --git a/src/frame.c b/src/frame.c index 563d8528a..7d9f5e9e4 100644 --- a/src/frame.c +++ b/src/frame.c @@ -56,6 +56,19 @@ meta_window_ensure_frame (MetaWindow *window) frame->mapped = FALSE; attrs.event_mask = EVENT_MASK; + + meta_verbose ("Framing window %s: visual %s default, depth %d default depth %d\n", + window->desc, + XVisualIDFromVisual (window->xvisual) == + XVisualIDFromVisual (window->screen->default_xvisual) ? + "is" : "is not", + window->depth, window->screen->default_depth); + + /* 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. + */ frame->xwindow = XCreateWindow (window->display->xdisplay, window->screen->xroot, @@ -64,9 +77,9 @@ meta_window_ensure_frame (MetaWindow *window) frame->rect.width, frame->rect.height, 0, - window->depth, - InputOutput, - window->xvisual, + window->screen->default_depth, + CopyFromParent, + window->screen->default_xvisual, CWEventMask, &attrs); @@ -90,15 +103,17 @@ meta_window_ensure_frame (MetaWindow *window) * we don't want to take that as a withdraw */ window->unmaps_pending += 1; + /* window was reparented to this position */ window->rect.x = 0; window->rect.y = 0; + XReparentWindow (window->display->xdisplay, window->xwindow, frame->xwindow, window->rect.x, window->rect.y); meta_error_trap_pop (window->display); - + /* stick frame to the window */ window->frame = frame; diff --git a/src/place.c b/src/place.c index 0226af412..1c5232339 100644 --- a/src/place.c +++ b/src/place.c @@ -253,6 +253,12 @@ meta_window_place (MetaWindow *window, meta_verbose ("Centered window %s over transient parent\n", window->desc); + if (parent->has_focus) + { + meta_verbose ("Focusing transient window since parent had focus\n"); + meta_window_focus (window, CurrentTime); /* FIXME CurrentTime */ + } + goto done; } } diff --git a/src/screen.c b/src/screen.c index cb486f23d..85212f92e 100644 --- a/src/screen.c +++ b/src/screen.c @@ -195,6 +195,8 @@ meta_screen_new (MetaDisplay *display, screen->width = WidthOfScreen (screen->xscreen); screen->height = HeightOfScreen (screen->xscreen); screen->current_cursor = -1; /* invalid/unset */ + screen->default_xvisual = DefaultVisualOfScreen (screen->xscreen); + screen->default_depth = DefaultDepthOfScreen (screen->xscreen); meta_screen_set_cursor (screen, META_CURSOR_DEFAULT); diff --git a/src/screen.h b/src/screen.h index e31268491..5a347fd55 100644 --- a/src/screen.h +++ b/src/screen.h @@ -41,6 +41,8 @@ struct _MetaScreen char *screen_name; Screen *xscreen; Window xroot; + int default_depth; + Visual *default_xvisual; int width; int height; MetaUI *ui; diff --git a/src/ui.c b/src/ui.c index 8382bca71..a6ebc9e6d 100644 --- a/src/ui.c +++ b/src/ui.c @@ -36,7 +36,7 @@ void meta_ui_init (int *argc, char ***argv) { if (!gtk_init_check (argc, argv)) - meta_fatal ("Unable to open X display %s\n", gdk_display_name); + meta_fatal ("Unable to open X display %s\n", XDisplayName (gdk_display)); } Display* diff --git a/src/window.c b/src/window.c index b077a345f..e1fe3c272 100644 --- a/src/window.c +++ b/src/window.c @@ -4354,7 +4354,7 @@ constrain_size (MetaWindow *window, maxw = window->size_hints.max_width; maxh = window->size_hints.max_height; - + if (window->maximized) /* we used to only constrain to fit inside screen for these cases, * but now I don't remember why I did that.