summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHavoc Pennington <hp@pobox.com>2001-09-09 03:44:42 +0000
committerHavoc Pennington <hp@src.gnome.org>2001-09-09 03:44:42 +0000
commit936adc6ea50c495937dbd8e447737c105adcc4c6 (patch)
tree3df42c4f9e885a213448d0b3a6d8f2391e5f877d
parentbc787fc1f3f90453171a04ec37437aa3fd3855e2 (diff)
downloadmetacity-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--ChangeLog13
-rw-r--r--src/frame.c23
-rw-r--r--src/place.c6
-rw-r--r--src/screen.c2
-rw-r--r--src/screen.h2
-rw-r--r--src/ui.c2
-rw-r--r--src/window.c2
7 files changed, 44 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 02d0e088..e598eead 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
diff --git a/src/ui.c b/src/ui.c
index 8382bca7..a6ebc9e6 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 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.