From bcfb0d250514404ca08bc498035fbeca8d18de10 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Tue, 13 Apr 2010 16:48:42 +0200 Subject: [PATCH] more reformatting --- src/manage.c | 264 +++++++++++++++++++++++++-------------------------- src/nc.c | 12 +-- 2 files changed, 134 insertions(+), 142 deletions(-) diff --git a/src/manage.c b/src/manage.c index b56da976..e15e802a 100644 --- a/src/manage.c +++ b/src/manage.c @@ -1,51 +1,45 @@ /* - * vim:ts=8:expandtab + * vim:ts=4:sw=4:expandtab * * i3 - an improved dynamic tiling window manager + * © 2009-2010 Michael Stapelberg and contributors (see also: LICENSE) * - * © 2009-2010 Michael Stapelberg and contributors - * - * See file LICENSE for license information. - * - * src/manage.c: Contains all functions for initially managing new windows - * (or existing ones on restart). + * manage.c: Contains all functions for initially managing new windows + * (or existing ones on restart). * */ #include "all.h" -extern struct Con *focused; - - /* * Go through all existing windows (if the window manager is restarted) and manage them * */ void manage_existing_windows(xcb_window_t root) { - xcb_query_tree_reply_t *reply; - int i, len; - xcb_window_t *children; - xcb_get_window_attributes_cookie_t *cookies; + xcb_query_tree_reply_t *reply; + int i, len; + xcb_window_t *children; + xcb_get_window_attributes_cookie_t *cookies; - /* Get the tree of windows whose parent is the root window (= all) */ - if ((reply = xcb_query_tree_reply(conn, xcb_query_tree(conn, root), 0)) == NULL) - return; + /* Get the tree of windows whose parent is the root window (= all) */ + if ((reply = xcb_query_tree_reply(conn, xcb_query_tree(conn, root), 0)) == NULL) + return; - len = xcb_query_tree_children_length(reply); - cookies = smalloc(len * sizeof(*cookies)); + len = xcb_query_tree_children_length(reply); + cookies = smalloc(len * sizeof(*cookies)); - /* Request the window attributes for every window */ - children = xcb_query_tree_children(reply); - for (i = 0; i < len; ++i) - cookies[i] = xcb_get_window_attributes(conn, children[i]); + /* Request the window attributes for every window */ + children = xcb_query_tree_children(reply); + for (i = 0; i < len; ++i) + cookies[i] = xcb_get_window_attributes(conn, children[i]); - /* Call manage_window with the attributes for every window */ - for (i = 0; i < len; ++i) - manage_window(children[i], cookies[i], true); + /* Call manage_window with the attributes for every window */ + for (i = 0; i < len; ++i) + manage_window(children[i], cookies[i], true); - free(reply); - free(cookies); + free(reply); + free(cookies); } /* @@ -57,18 +51,18 @@ void manage_existing_windows(xcb_window_t root) { * */ void restore_geometry() { - LOG("Restoring geometry\n"); - - Con *con; - TAILQ_FOREACH(con, &all_cons, all_cons) - if (con->window) { - printf("placing window at %d %d\n", con->rect.x, con->rect.y); - xcb_reparent_window(conn, con->window->id, root, - con->rect.x, con->rect.y); - } + LOG("Restoring geometry\n"); + + Con *con; + TAILQ_FOREACH(con, &all_cons, all_cons) + if (con->window) { + printf("placing window at %d %d\n", con->rect.x, con->rect.y); + xcb_reparent_window(conn, con->window->id, root, + con->rect.x, con->rect.y); + } - /* Make sure our changes reach the X server, we restart/exit now */ - xcb_flush(conn); + /* Make sure our changes reach the X server, we restart/exit now */ + xcb_flush(conn); } /* @@ -77,118 +71,116 @@ void restore_geometry() { */ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cookie, bool needs_to_be_mapped) { - xcb_drawable_t d = { window }; - xcb_get_geometry_cookie_t geomc; - xcb_get_geometry_reply_t *geom; - xcb_get_window_attributes_reply_t *attr = 0; + xcb_drawable_t d = { window }; + xcb_get_geometry_cookie_t geomc; + xcb_get_geometry_reply_t *geom; + xcb_get_window_attributes_reply_t *attr = 0; - printf("---> looking at window 0x%08x\n", window); + printf("---> looking at window 0x%08x\n", window); - xcb_get_property_cookie_t wm_type_cookie, strut_cookie, state_cookie, - utf8_title_cookie, title_cookie, - class_cookie, leader_cookie; + xcb_get_property_cookie_t wm_type_cookie, strut_cookie, state_cookie, + utf8_title_cookie, title_cookie, + class_cookie, leader_cookie; - wm_type_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[_NET_WM_WINDOW_TYPE], UINT32_MAX); - strut_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[_NET_WM_STRUT_PARTIAL], UINT32_MAX); - state_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[_NET_WM_STATE], UINT32_MAX); - utf8_title_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[_NET_WM_NAME], 128); - leader_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[WM_CLIENT_LEADER], UINT32_MAX); - title_cookie = xcb_get_any_property_unchecked(conn, false, window, WM_NAME, 128); - class_cookie = xcb_get_any_property_unchecked(conn, false, window, WM_CLASS, 128); + wm_type_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[_NET_WM_WINDOW_TYPE], UINT32_MAX); + strut_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[_NET_WM_STRUT_PARTIAL], UINT32_MAX); + state_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[_NET_WM_STATE], UINT32_MAX); + utf8_title_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[_NET_WM_NAME], 128); + leader_cookie = xcb_get_any_property_unchecked(conn, false, window, atoms[WM_CLIENT_LEADER], UINT32_MAX); + title_cookie = xcb_get_any_property_unchecked(conn, false, window, WM_NAME, 128); + class_cookie = xcb_get_any_property_unchecked(conn, false, window, WM_CLASS, 128); - geomc = xcb_get_geometry(conn, d); - - /* Check if the window is mapped (it could be not mapped when intializing and - calling manage_window() for every window) */ - if ((attr = xcb_get_window_attributes_reply(conn, cookie, 0)) == NULL) { - LOG("Could not get attributes\n"); - return; - } - - if (needs_to_be_mapped && attr->map_state != XCB_MAP_STATE_VIEWABLE) { - LOG("map_state unviewable\n"); - goto out; - } - - /* Don’t manage clients with the override_redirect flag */ - LOG("override_redirect is %d\n", attr->override_redirect); - if (attr->override_redirect) - goto out; - - /* Check if the window is already managed */ - if (con_by_window_id(window) != NULL) - goto out; - - /* Get the initial geometry (position, size, …) */ - if ((geom = xcb_get_geometry_reply(conn, geomc, 0)) == NULL) - goto out; - - LOG("reparenting!\n"); - - i3Window *cwindow = scalloc(sizeof(i3Window)); - cwindow->id = window; - - class_cookie = xcb_get_any_property_unchecked(conn, false, window, WM_CLASS, 128); - xcb_get_property_reply_t *preply; - preply = xcb_get_property_reply(conn, class_cookie, NULL); - if (preply == NULL || xcb_get_property_value_length(preply) == 0) { - LOG("cannot get wm_class\n"); - } else cwindow->class = strdup(xcb_get_property_value(preply)); - - Con *nc; - Match *match; - - /* TODO: assignments */ - /* TODO: two matches for one container */ - /* See if any container swallows this new window */ - nc = con_for_window(cwindow, &match); - if (nc == NULL) { - if (focused->type == CT_CON && con_accepts_window(focused)) { - LOG("using current container, focused = %p, focused->name = %s\n", - focused, focused->name); - nc = focused; - } else nc = tree_open_con(NULL); - } else { - if (match != NULL && match->insert_where == M_ACTIVE) { - /* We need to go down the focus stack starting from nc */ - while (TAILQ_FIRST(&(nc->focus_head)) != TAILQ_END(&(nc->focus_head))) { - printf("walking down one step...\n"); - nc = TAILQ_FIRST(&(nc->focus_head)); - } - /* We need to open a new con */ - /* TODO: make a difference between match-once containers (directly assign - * cwindow) and match-multiple (tree_open_con first) */ - nc = tree_open_con(nc->parent); - - } + geomc = xcb_get_geometry(conn, d); + /* Check if the window is mapped (it could be not mapped when intializing and + calling manage_window() for every window) */ + if ((attr = xcb_get_window_attributes_reply(conn, cookie, 0)) == NULL) { + LOG("Could not get attributes\n"); + return; + } + + if (needs_to_be_mapped && attr->map_state != XCB_MAP_STATE_VIEWABLE) { + LOG("map_state unviewable\n"); + goto out; + } + + /* Don’t manage clients with the override_redirect flag */ + LOG("override_redirect is %d\n", attr->override_redirect); + if (attr->override_redirect) + goto out; + + /* Check if the window is already managed */ + if (con_by_window_id(window) != NULL) + goto out; + + /* Get the initial geometry (position, size, …) */ + if ((geom = xcb_get_geometry_reply(conn, geomc, 0)) == NULL) + goto out; + + LOG("reparenting!\n"); + + i3Window *cwindow = scalloc(sizeof(i3Window)); + cwindow->id = window; + + class_cookie = xcb_get_any_property_unchecked(conn, false, window, WM_CLASS, 128); + xcb_get_property_reply_t *preply; + preply = xcb_get_property_reply(conn, class_cookie, NULL); + if (preply == NULL || xcb_get_property_value_length(preply) == 0) { + LOG("cannot get wm_class\n"); + } else cwindow->class = strdup(xcb_get_property_value(preply)); + + Con *nc; + Match *match; + + /* TODO: assignments */ + /* TODO: two matches for one container */ + /* See if any container swallows this new window */ + nc = con_for_window(cwindow, &match); + if (nc == NULL) { + if (focused->type == CT_CON && con_accepts_window(focused)) { + LOG("using current container, focused = %p, focused->name = %s\n", + focused, focused->name); + nc = focused; + } else nc = tree_open_con(NULL); + } else { + if (match != NULL && match->insert_where == M_ACTIVE) { + /* We need to go down the focus stack starting from nc */ + while (TAILQ_FIRST(&(nc->focus_head)) != TAILQ_END(&(nc->focus_head))) { + printf("walking down one step...\n"); + nc = TAILQ_FIRST(&(nc->focus_head)); + } + /* We need to open a new con */ + /* TODO: make a difference between match-once containers (directly assign + * cwindow) and match-multiple (tree_open_con first) */ + nc = tree_open_con(nc->parent); } - nc->window = cwindow; + } + nc->window = cwindow; - xcb_void_cookie_t rcookie = xcb_reparent_window_checked(conn, window, nc->frame, 0, 0); - if (xcb_request_check(conn, rcookie) != NULL) { - LOG("Could not reparent the window, aborting\n"); - goto out; - //xcb_destroy_window(conn, nc->frame); - } + xcb_void_cookie_t rcookie = xcb_reparent_window_checked(conn, window, nc->frame, 0, 0); + if (xcb_request_check(conn, rcookie) != NULL) { + LOG("Could not reparent the window, aborting\n"); + goto out; + //xcb_destroy_window(conn, nc->frame); + } - xcb_change_save_set(conn, XCB_SET_MODE_INSERT, window); + xcb_change_save_set(conn, XCB_SET_MODE_INSERT, window); - tree_render(); + tree_render(); #if 0 - /* Reparent the window and add it to our list of managed windows */ - reparent_window(conn, window, attr->visual, geom->root, geom->depth, - geom->x, geom->y, geom->width, geom->height, - geom->border_width); + /* Reparent the window and add it to our list of managed windows */ + reparent_window(conn, window, attr->visual, geom->root, geom->depth, + geom->x, geom->y, geom->width, geom->height, + geom->border_width); #endif - /* Generate callback events for every property we watch */ - free(geom); + /* Generate callback events for every property we watch */ + free(geom); out: - free(attr); - return; + free(attr); + return; } #if 0 diff --git a/src/nc.c b/src/nc.c index 709cb541..f5843d55 100644 --- a/src/nc.c +++ b/src/nc.c @@ -172,12 +172,12 @@ int main(int argc, char *argv[]) { bool force_xinerama = false; xcb_intern_atom_cookie_t atom_cookies[NUM_ATOMS]; static struct option long_options[] = { - {"no-autostart", no_argument, 0, 'a'}, - {"config", required_argument, 0, 'c'}, - {"version", no_argument, 0, 'v'}, - {"help", no_argument, 0, 'h'}, - {"force-xinerama", no_argument, 0, 0}, - {0, 0, 0, 0} + {"no-autostart", no_argument, 0, 'a'}, + {"config", required_argument, 0, 'c'}, + {"version", no_argument, 0, 'v'}, + {"help", no_argument, 0, 'h'}, + {"force-xinerama", no_argument, 0, 0}, + {0, 0, 0, 0} }; int option_index = 0, opt; -- 2.39.5