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:
committed by
Alexander Larsson
parent
e2a2ba9d98
commit
eabac453e6
@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user