Initial client-side-windows work

The history before this was kind of twisted as several different
approaches were tested, so that was all squashed into this initial
commit to hide the uninteresting changes and files that were later
removed.
This commit is contained in:
Alexander Larsson
2008-07-18 15:03:42 +02:00
committed by Alexander Larsson
parent e2a2ba9d98
commit eabac453e6
33 changed files with 5638 additions and 1997 deletions

View File

@ -313,7 +313,7 @@ gdk_event_get_graphics_expose (GdkWindow *window)
GdkEvent *event;
g_return_val_if_fail (window != NULL, NULL);
XIfEvent (GDK_WINDOW_XDISPLAY (window), &xevent,
graphics_expose_predicate, (XPointer) window);
@ -879,7 +879,6 @@ gdk_event_translate (GdkDisplay *display,
GdkWindow *filter_window;
GdkWindowImplX11 *window_impl = NULL;
gboolean return_val;
gint xoffset, yoffset;
GdkScreen *screen = NULL;
GdkScreenX11 *screen_x11 = NULL;
GdkToplevelX11 *toplevel = NULL;
@ -942,6 +941,14 @@ gdk_event_translate (GdkDisplay *display,
if (window != NULL)
{
/* Rewrite keyboard grabs to offscreen windows */
if ((xevent->type == KeyPress || xevent->type == KeyRelease) &&
window_private == display_x11->keyboard_xgrab_native_window)
{
window_private = display_x11->keyboard_xgrab_window;
window = (GdkWindow *) window_private;
}
window_impl = GDK_WINDOW_IMPL_X11 (window_private->impl);
/* Move key events on focus window to the real toplevel, and
@ -1041,16 +1048,6 @@ gdk_event_translate (GdkDisplay *display,
return_val = TRUE;
if (window)
{
_gdk_x11_window_get_offsets (window, &xoffset, &yoffset);
}
else
{
xoffset = 0;
yoffset = 0;
}
switch (xevent->type)
{
case KeyPress:
@ -1129,8 +1126,8 @@ gdk_event_translate (GdkDisplay *display,
event->scroll.window = window;
event->scroll.time = xevent->xbutton.time;
event->scroll.x = xevent->xbutton.x + xoffset;
event->scroll.y = xevent->xbutton.y + yoffset;
event->scroll.x = xevent->xbutton.x;
event->scroll.y = xevent->xbutton.y;
event->scroll.x_root = (gfloat)xevent->xbutton.x_root;
event->scroll.y_root = (gfloat)xevent->xbutton.y_root;
event->scroll.state = (GdkModifierType) xevent->xbutton.state;
@ -1148,8 +1145,8 @@ gdk_event_translate (GdkDisplay *display,
event->button.type = GDK_BUTTON_PRESS;
event->button.window = window;
event->button.time = xevent->xbutton.time;
event->button.x = xevent->xbutton.x + xoffset;
event->button.y = xevent->xbutton.y + yoffset;
event->button.x = xevent->xbutton.x;
event->button.y = xevent->xbutton.y;
event->button.x_root = (gfloat)xevent->xbutton.x_root;
event->button.y_root = (gfloat)xevent->xbutton.y_root;
event->button.axes = NULL;
@ -1162,8 +1159,6 @@ gdk_event_translate (GdkDisplay *display,
return_val = FALSE;
break;
}
_gdk_event_button_generate (display, event);
break;
}
@ -1192,14 +1187,14 @@ gdk_event_translate (GdkDisplay *display,
xevent->xbutton.button == 6 || xevent->xbutton.button ==7)
{
return_val = FALSE;
break;
goto release_out;
}
event->button.type = GDK_BUTTON_RELEASE;
event->button.window = window;
event->button.time = xevent->xbutton.time;
event->button.x = xevent->xbutton.x + xoffset;
event->button.y = xevent->xbutton.y + yoffset;
event->button.x = xevent->xbutton.x;
event->button.y = xevent->xbutton.y;
event->button.x_root = (gfloat)xevent->xbutton.x_root;
event->button.y_root = (gfloat)xevent->xbutton.y_root;
event->button.axes = NULL;
@ -1210,9 +1205,10 @@ gdk_event_translate (GdkDisplay *display,
if (!set_screen_from_root (display, event, xevent->xbutton.root))
{
return_val = FALSE;
break;
goto release_out;
}
release_out:
_gdk_xgrab_check_button_event (window, xevent);
break;
@ -1234,8 +1230,8 @@ gdk_event_translate (GdkDisplay *display,
event->motion.type = GDK_MOTION_NOTIFY;
event->motion.window = window;
event->motion.time = xevent->xmotion.time;
event->motion.x = xevent->xmotion.x + xoffset;
event->motion.y = xevent->xmotion.y + yoffset;
event->motion.x = xevent->xmotion.x;
event->motion.y = xevent->xmotion.y;
event->motion.x_root = (gfloat)xevent->xmotion.x_root;
event->motion.y_root = (gfloat)xevent->xmotion.y_root;
event->motion.axes = NULL;
@ -1304,8 +1300,8 @@ gdk_event_translate (GdkDisplay *display,
event->crossing.subwindow = NULL;
event->crossing.time = xevent->xcrossing.time;
event->crossing.x = xevent->xcrossing.x + xoffset;
event->crossing.y = xevent->xcrossing.y + yoffset;
event->crossing.x = xevent->xcrossing.x;
event->crossing.y = xevent->xcrossing.y;
event->crossing.x_root = xevent->xcrossing.x_root;
event->crossing.y_root = xevent->xcrossing.y_root;
@ -1399,8 +1395,8 @@ gdk_event_translate (GdkDisplay *display,
event->crossing.subwindow = NULL;
event->crossing.time = xevent->xcrossing.time;
event->crossing.x = xevent->xcrossing.x + xoffset;
event->crossing.y = xevent->xcrossing.y + yoffset;
event->crossing.x = xevent->xcrossing.x;
event->crossing.y = xevent->xcrossing.y;
event->crossing.x_root = xevent->xcrossing.x_root;
event->crossing.y_root = xevent->xcrossing.y_root;
@ -1596,8 +1592,8 @@ gdk_event_translate (GdkDisplay *display,
{
GdkRectangle expose_rect;
expose_rect.x = xevent->xexpose.x + xoffset;
expose_rect.y = xevent->xexpose.y + yoffset;
expose_rect.x = xevent->xexpose.x;
expose_rect.y = xevent->xexpose.y;
expose_rect.width = xevent->xexpose.width;
expose_rect.height = xevent->xexpose.height;
@ -1636,8 +1632,8 @@ gdk_event_translate (GdkDisplay *display,
break;
}
expose_rect.x = xevent->xgraphicsexpose.x + xoffset;
expose_rect.y = xevent->xgraphicsexpose.y + yoffset;
expose_rect.x = xevent->xgraphicsexpose.x;
expose_rect.y = xevent->xgraphicsexpose.y;
expose_rect.width = xevent->xgraphicsexpose.width;
expose_rect.height = xevent->xgraphicsexpose.height;
@ -1826,9 +1822,9 @@ gdk_event_translate (GdkDisplay *display,
: ""));
if (window && GDK_WINDOW_TYPE (window) == GDK_WINDOW_ROOT)
{
window_impl->width = xevent->xconfigure.width;
window_impl->height = xevent->xconfigure.height;
window_private->width = xevent->xconfigure.width;
window_private->height = xevent->xconfigure.height;
_gdk_x11_drawable_update_size (window_private->impl);
_gdk_x11_screen_size_changed (screen, xevent);
}
@ -1887,9 +1883,10 @@ gdk_event_translate (GdkDisplay *display,
}
window_private->x = event->configure.x;
window_private->y = event->configure.y;
window_impl->width = xevent->xconfigure.width;
window_impl->height = xevent->xconfigure.height;
window_private->width = xevent->xconfigure.width;
window_private->height = xevent->xconfigure.height;
_gdk_window_update_size (window);
_gdk_x11_drawable_update_size (window_private->impl);
if (window_private->resize_count >= 1)
@ -2298,6 +2295,7 @@ _gdk_events_queue (GdkDisplay *display)
if (gdk_event_translate (display, event, &xevent, FALSE))
{
((GdkEventPrivate *)event)->flags &= ~GDK_EVENT_PENDING;
_gdk_windowing_got_event (display, node, event);
}
else
{