tRemove frames and remove all reparenting code - glazier - window management experiments
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
(DIR) commit 0a68322d5c5da090086a868893e8d736d4caa8aa
(DIR) parent 699100de3afc7aff173cc3188807b8fc11a93b46
(HTM) Author: Willy Goiffon <dev@z3bra.org>
Date: Wed, 23 Oct 2019 18:58:03 +0200
Remove frames and remove all reparenting code
Diffstat:
M config.def.h | 3 +--
M glazier.c | 167 +++----------------------------
2 files changed, 13 insertions(+), 157 deletions(-)
---
(DIR) diff --git a/config.def.h b/config.def.h
t@@ -4,8 +4,7 @@
/* window borders and titlebar */
int border = 2;
-int titlebar = 32;
-int titlebar_color = 0xdeadca7;
+int border_color = 0xdeadca7;
/* move/resize step amound in pixels */
int move_step = 8;
(DIR) diff --git a/glazier.c b/glazier.c
t@@ -26,8 +26,6 @@ static int ev_callback(xcb_generic_event_t *);
/* XCB events callbacks */
static int cb_default(xcb_generic_event_t *);
static int cb_mapreq(xcb_generic_event_t *);
-static int cb_unmap(xcb_generic_event_t *);
-static int cb_destroy(xcb_generic_event_t *);
static int cb_mouse_press(xcb_generic_event_t *);
static int cb_mouse_release(xcb_generic_event_t *);
static int cb_motion(xcb_generic_event_t *);
t@@ -77,8 +75,6 @@ static const char *evname[] = {
static const struct ev_callback_t cb[] = {
/* event, function */
{ XCB_MAP_REQUEST, cb_mapreq },
- { XCB_UNMAP_NOTIFY, cb_unmap },
- { XCB_DESTROY_NOTIFY, cb_destroy },
{ XCB_BUTTON_PRESS, cb_mouse_press },
{ XCB_BUTTON_RELEASE, cb_mouse_release },
{ XCB_MOTION_NOTIFY, cb_motion },
t@@ -93,78 +89,6 @@ usage(char *name)
fprintf(stderr, "usage: %s [-vh]\n", name);
}
-xcb_window_t
-frame_window(xcb_window_t child)
-{
- int x, y, w, h, mask, val[3];
- xcb_window_t parent;
-
- x = wm_get_attribute(child, ATTR_X);
- y = wm_get_attribute(child, ATTR_Y) - titlebar;
- w = wm_get_attribute(child, ATTR_W);
- h = wm_get_attribute(child, ATTR_H) + titlebar;
-
- parent = xcb_generate_id(conn);
- mask = XCB_CW_BACK_PIXEL | XCB_CW_BORDER_PIXEL | XCB_CW_EVENT_MASK;
- val[0] = titlebar_color;
- val[1] = titlebar_color;
- val[2] = XCB_EVENT_MASK_EXPOSURE
- | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY
- | XCB_EVENT_MASK_ENTER_WINDOW
- | XCB_EVENT_MASK_BUTTON_PRESS
- | XCB_EVENT_MASK_BUTTON_RELEASE
- | XCB_EVENT_MASK_BUTTON_MOTION;
-
- xcb_create_window(conn, scrn->root_depth, parent, scrn->root,
- x, y, w, h, border, XCB_WINDOW_CLASS_INPUT_OUTPUT,
- scrn->root_visual, mask, val);
-
- xcb_reparent_window(conn, child, parent, 0, titlebar);
- xcb_change_save_set(conn, XCB_SET_MODE_INSERT, child);
- xcb_map_window(conn, parent);
-
- return parent;
-}
-
-xcb_window_t
-get_frame(xcb_window_t wid)
-{
- xcb_window_t frame = scrn->root;
- xcb_query_tree_cookie_t c;
- xcb_query_tree_reply_t *r;
-
- for (;;) {
- c = xcb_query_tree(conn, wid);
- r = xcb_query_tree_reply(conn, c, NULL);
- if (r == NULL)
- return scrn->root;
-
- wid = r->parent;
- free(r);
-
- if (wid == scrn->root)
- break;
-
- frame = wid;
- }
-
- return frame;
-}
-
-xcb_window_t
-get_child(xcb_window_t wid)
-{
- xcb_window_t child, *children;
-
- if (wm_get_windows(wid, &children) != 1)
- return -1;
-
- child = children[0];
- free(children);
-
- return child;
-}
-
static int
cb_default(xcb_generic_event_t *ev)
{
t@@ -180,61 +104,16 @@ cb_default(xcb_generic_event_t *ev)
static int
cb_mapreq(xcb_generic_event_t *ev)
{
- int x, y, w, h;
- static xcb_window_t frame;
xcb_map_request_event_t *e;
e = (xcb_map_request_event_t *)ev;
- /* avoid infinite loops when creating frame window */
- if (frame == e->window || get_frame(e->window) != scrn->root)
- return 0;
-
if (verbose)
fprintf(stderr, "%s 0x%08x\n", XEV(e), e->window);
- frame = frame_window(e->window);
-
- w = wm_get_attribute(frame, ATTR_W);
- h = wm_get_attribute(frame, ATTR_H);
- wm_get_cursor(0, scrn->root, &x, &y);
-
- wm_move(frame, ABSOLUTE, x - w/2, y - h/2);
- xcb_map_window(conn, e->window);
+ wm_remap(e->window, MAP);
wm_set_focus(e->window);
-
- return 0;
-}
-
-static int
-cb_unmap(xcb_generic_event_t *ev)
-{
- int x, y;
- xcb_unmap_notify_event_t *e;
-
- e = (xcb_unmap_notify_event_t *)ev;
-
- if (verbose)
- fprintf(stderr, "%s 0x%08x\n", XEV(e), e->window);
-
- x = wm_get_attribute(e->event, ATTR_X);
- y = wm_get_attribute(e->event, ATTR_Y);
- xcb_reparent_window(conn, e->window, scrn->root, x, y + titlebar);
- xcb_destroy_window(conn, e->event);
-
- return 0;
-}
-
-static int
-cb_destroy(xcb_generic_event_t *ev)
-{
- xcb_create_notify_event_t *e;
-
- e = (xcb_create_notify_event_t *)ev;
- if (verbose)
- fprintf(stderr, "%s 0x%08x 0x%08x\n", XEV(e), e->window, e->parent);
-
- xcb_destroy_window(conn, e->parent);
+ wm_set_border(border, border_color, e->window);
return 0;
}
t@@ -277,7 +156,7 @@ cb_mouse_press(xcb_generic_event_t *ev)
p = xcb_cursor_load_cursor(cx, XHAIR_MOVE);
break;
case 2:
- xcb_kill_client(conn, get_child(e->event));
+ xcb_kill_client(conn, e->event);
break;
case 3:
curwid = e->event;
t@@ -285,19 +164,17 @@ cb_mouse_press(xcb_generic_event_t *ev)
break;
case 4:
x = wm_get_attribute(e->event, ATTR_X) - move_step/2;
- y = wm_get_attribute(e->event, ATTR_Y);
+ y = wm_get_attribute(e->event, ATTR_Y) - move_step/2;
w = wm_get_attribute(e->event, ATTR_W) + move_step;
h = wm_get_attribute(e->event, ATTR_H) + move_step;
wm_teleport(e->event, x, y, w, h);
- wm_teleport(get_child(e->event), 0, titlebar, w, h - titlebar);
break;
case 5:
x = wm_get_attribute(e->event, ATTR_X) + move_step/2;
- y = wm_get_attribute(e->event, ATTR_Y);
+ y = wm_get_attribute(e->event, ATTR_Y) + move_step/2;
w = wm_get_attribute(e->event, ATTR_W) - move_step;
h = wm_get_attribute(e->event, ATTR_H) - move_step;
wm_teleport(e->event, x, y, w, h);
- wm_teleport(get_child(e->event), 0, titlebar, w, h - titlebar);
break;
default:
return 1;
t@@ -331,7 +208,7 @@ cb_mouse_release(xcb_generic_event_t *ev)
e = (xcb_button_release_event_t *)ev;
if (verbose)
- fprintf(stderr, "%s 0x%08x\n", XEV(e), e->child);
+ fprintf(stderr, "%s 0x%08x\n", XEV(e), e->event);
if (xcb_cursor_context_new(conn, scrn, &cx) < 0) {
fprintf(stderr, "cannot instantiate cursor\n");
t@@ -339,7 +216,7 @@ cb_mouse_release(xcb_generic_event_t *ev)
}
p = xcb_cursor_load_cursor(cx, XHAIR_DFLT);
- xcb_change_window_attributes(conn, e->child, XCB_CW_CURSOR, &p);
+ xcb_change_window_attributes(conn, e->event, XCB_CW_CURSOR, &p);
xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
xcb_cursor_context_free(cx);
t@@ -380,9 +257,6 @@ cb_motion(xcb_generic_event_t *ev)
break;
case 3:
wm_resize(curwid, ABSOLUTE, x, y);
- x = wm_get_attribute(curwid, ATTR_W);
- y = wm_get_attribute(curwid, ATTR_H);
- wm_resize(get_child(curwid), ABSOLUTE, x, y);
break;
}
t@@ -392,7 +266,6 @@ cb_motion(xcb_generic_event_t *ev)
static int
cb_enter(xcb_generic_event_t *ev)
{
- xcb_window_t *child;
xcb_enter_notify_event_t *e;
e = (xcb_enter_notify_event_t *)ev;
t@@ -400,12 +273,7 @@ cb_enter(xcb_generic_event_t *ev)
if (verbose)
fprintf(stderr, "%s 0x%08x\n", XEV(e), e->event);
- if (wm_get_windows(e->event, &child) == 1) {
- wm_set_focus(child[0]);
- free(child);
- } else {
- wm_set_focus(e->event);
- }
+ wm_set_focus(e->event);
return 0;
}
t@@ -413,29 +281,18 @@ cb_enter(xcb_generic_event_t *ev)
static int
cb_configure(xcb_generic_event_t *ev)
{
- int x, y;
- xcb_window_t frame;
xcb_configure_notify_event_t *e;
e = (xcb_configure_notify_event_t *)ev;
- if (e->window == e->event || e->event == scrn->root || e->override_redirect || curwid != scrn->root)
- return 0;
-
- frame = get_frame(e->window);
- if (frame == scrn->root)
+ if (e->override_redirect)
return 0;
if (verbose)
- fprintf(stderr, "%s 0x%08x 0x%08x:%dx%d+%d+%d\n",
- XEV(e), frame, e->window,
- e->width, e->height,
- e->x, e->y);
+ fprintf(stderr, "%s 0x%08x %dx%d+%d+%d\n",
+ XEV(e), e->event, e->width, e->height, e->x, e->y);
- x = wm_get_attribute(frame, ATTR_X);
- y = wm_get_attribute(frame, ATTR_Y);
- wm_teleport(e->window, 0, titlebar, e->width, e->height);
- wm_teleport(get_frame(e->window), x + e->x, y + e->y - titlebar, e->width, e->height + titlebar);
+ wm_teleport(e->window, e->x, e->y, e->width, e->height);
return 0;
}