summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2013-05-16 22:19:21 -0400
committerKristian Høgsberg <krh@bitplanet.net>2013-05-16 22:19:21 -0400
commit6f965a7f5030f530c072d8320d173df78c8e61d3 (patch)
tree61734e89952f2895407a98842d66c789b65a3056
parent68ed10bd33df4018e4fec2f99aac16bbe7e50ecc (diff)
Send MapNotify to parent when it has SubstructureNotify
-rw-r--r--src/test.c24
-rw-r--r--src/window.c15
2 files changed, 26 insertions, 13 deletions
diff --git a/src/test.c b/src/test.c
index a05b8be..0e31203 100644
--- a/src/test.c
+++ b/src/test.c
@@ -8,8 +8,8 @@ print_event(XEvent *e)
{
switch (e->type) {
case MapNotify:
- printf("got MapNotify event: window %d\n",
- e->xmap.window);
+ printf("got MapNotify event: window %d event %d\n",
+ e->xmap.window, e->xmap.event);
break;
case ReparentNotify:
printf("got ReparentNotify event: window %d\n",
@@ -45,7 +45,12 @@ print_event(XEvent *e)
e->xexpose.x, e->xexpose.y,
e->xexpose.width, e->xexpose.height);
break;
-
+ case ConfigureNotify:
+ printf("got ConfigureNotify event: window %d event %d at %d,%d size %dx%d\n",
+ e->xconfigure.window, e->xconfigure.event,
+ e->xconfigure.x, e->xconfigure.y,
+ e->xconfigure.width, e->xconfigure.height);
+ break;
default:
printf("got event type %d\n", e->type);
break;
@@ -53,17 +58,16 @@ print_event(XEvent *e)
}
static void
-run(Display *display)
+run(Display *display, int event)
{
XEvent e;
while (1) {
XNextEvent(display, &e);
print_event(&e);
- switch (e.type) {
- case ButtonPress:
+
+ if (e.type == event)
break;
- }
}
}
@@ -97,13 +101,17 @@ int main(int argc, char *argv[])
printf("created window %d and subwindow %d\n", win, sub);
XMapWindow(display, win);
+
+ /* Wait for ReparentNotify to get more similar behavior
+ between csx and xlib: run(display, ReparentNotify); */
+
XMapWindow(display, sub);
XMoveWindow(display, sub, 60, 60);
XFlush(display);
- run(display);
+ run(display, ButtonPress);
XCloseDisplay(display);
diff --git a/src/window.c b/src/window.c
index 1a6160e..298ba0e 100644
--- a/src/window.c
+++ b/src/window.c
@@ -176,22 +176,22 @@ static const struct wl_shell_surface_listener shell_surface_listener = {
};
void
-csx_display_send_map_notify(struct csx_display *display,
- struct csx_window *window)
+csx_window_send_map_notify(struct csx_window *window,
+ struct csx_window *event_window)
{
+ struct csx_display *display = window->display;
struct csx_event *event;
if (!(window->event_mask & StructureNotifyMask))
return;
event = malloc(sizeof *event);
- event->xevent.type = MapNotify;
event->xevent.xmap.type = MapNotify;
event->xevent.xmap.serial = display->serial;
event->xevent.xmap.send_event = False;
event->xevent.xmap.display = display->xdisplay;
- event->xevent.xmap.event = window->id;
+ event->xevent.xmap.event = event_window->id;
event->xevent.xmap.window = window->id;
event->xevent.xmap.override_redirect = False;
@@ -313,7 +313,12 @@ XMapWindow(Display *xdisplay, Window xwindow)
return 0;
window->mapped = 1;
- csx_display_send_map_notify(display, window);
+ if (window->event_mask & StructureNotifyMask)
+ csx_window_send_map_notify(window, window);
+ if (window->parent &&
+ window->parent->event_mask & SubstructureNotifyMask)
+ csx_window_send_map_notify(window, window->parent);
+
if (window->parent == display->root) {
csx_window_map_toplevel(window);
} else if (window->parent->mapped) {