diff options
author | Havoc Pennington <hp@pobox.com> | 2001-09-09 03:44:42 +0000 |
---|---|---|
committer | Havoc Pennington <hp@src.gnome.org> | 2001-09-09 03:44:42 +0000 |
commit | 936adc6ea50c495937dbd8e447737c105adcc4c6 (patch) | |
tree | 3df42c4f9e885a213448d0b3a6d8f2391e5f877d | |
parent | bc787fc1f3f90453171a04ec37437aa3fd3855e2 (diff) | |
download | metacity-936adc6ea50c495937dbd8e447737c105adcc4c6.tar.gz |
don't use gdk_display_name
2001-09-08 Havoc Pennington <hp@pobox.com>
* 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.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | src/frame.c | 23 | ||||
-rw-r--r-- | src/place.c | 6 | ||||
-rw-r--r-- | src/screen.c | 2 | ||||
-rw-r--r-- | src/screen.h | 2 | ||||
-rw-r--r-- | src/ui.c | 2 | ||||
-rw-r--r-- | src/window.c | 2 |
7 files changed, 44 insertions, 6 deletions
@@ -1,3 +1,16 @@ +2001-09-08 Havoc Pennington <hp@pobox.com> + + * 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 <hp@pobox.com> * configure.in: bump version 2.3.5, require newer GTK release diff --git a/src/frame.c b/src/frame.c index 563d8528..7d9f5e9e 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 0226af41..1c523233 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 cb486f23..85212f92 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 e3126849..5a347fd5 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; @@ -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 b077a345..e1fe3c27 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. |