client: manage take phys_screen as arg

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2008-09-03 22:25:24 +02:00
parent fcde8d229b
commit 3a45831242
4 changed files with 28 additions and 31 deletions

View File

@ -89,7 +89,7 @@ awesome_atexit(void)
static void static void
scan(void) scan(void)
{ {
int i, screen, real_screen, tree_c_len; int i, screen, phys_screen, tree_c_len;
const int screen_max = xcb_setup_roots_length(xcb_get_setup(globalconf.connection)); const int screen_max = xcb_setup_roots_length(xcb_get_setup(globalconf.connection));
root_win_t root_wins[screen_max]; root_win_t root_wins[screen_max];
xcb_query_tree_reply_t *tree_r; xcb_query_tree_reply_t *tree_r;
@ -98,20 +98,20 @@ scan(void)
xcb_get_geometry_reply_t *geom_r; xcb_get_geometry_reply_t *geom_r;
long state; long state;
for(screen = 0; screen < screen_max; screen++) for(phys_screen = 0; phys_screen < screen_max; phys_screen++)
{ {
/* Get the root window ID associated to this screen */ /* Get the root window ID associated to this screen */
root_wins[screen].id = xutil_screen_get(globalconf.connection, screen)->root; root_wins[phys_screen].id = xutil_screen_get(globalconf.connection, phys_screen)->root;
/* Get the window tree associated to this screen */ /* Get the window tree associated to this screen */
root_wins[screen].tree_cookie = xcb_query_tree_unchecked(globalconf.connection, root_wins[phys_screen].tree_cookie = xcb_query_tree_unchecked(globalconf.connection,
root_wins[screen].id); root_wins[phys_screen].id);
} }
for(screen = 0; screen < screen_max; screen++) for(phys_screen = 0; phys_screen < screen_max; phys_screen++)
{ {
tree_r = xcb_query_tree_reply(globalconf.connection, tree_r = xcb_query_tree_reply(globalconf.connection,
root_wins[screen].tree_cookie, root_wins[phys_screen].tree_cookie,
NULL); NULL);
if(!tree_r) if(!tree_r)
@ -170,10 +170,10 @@ scan(void)
*(geom_wins[i]), NULL))) *(geom_wins[i]), NULL)))
continue; continue;
real_screen = screen_get_bycoord(globalconf.screens_info, screen, screen = screen_get_bycoord(globalconf.screens_info, phys_screen,
geom_r->x, geom_r->y); geom_r->x, geom_r->y);
client_manage(wins[i], geom_r, real_screen); client_manage(wins[i], geom_r, phys_screen, screen);
p_delete(&geom_r); p_delete(&geom_r);
} }

View File

@ -392,10 +392,11 @@ client_stack(void)
/** Manage a new client. /** Manage a new client.
* \param w The window. * \param w The window.
* \param wgeom Window geometry. * \param wgeom Window geometry.
* \param phys_screen Physical screen number.
* \param screen Virtual screen number where to manage client. * \param screen Virtual screen number where to manage client.
*/ */
void void
client_manage(xcb_window_t w, xcb_get_geometry_reply_t *wgeom, int screen) client_manage(xcb_window_t w, xcb_get_geometry_reply_t *wgeom, int phys_screen, int screen)
{ {
xcb_get_property_cookie_t ewmh_icon_cookie; xcb_get_property_cookie_t ewmh_icon_cookie;
client_t *c; client_t *c;
@ -413,7 +414,7 @@ client_manage(xcb_window_t w, xcb_get_geometry_reply_t *wgeom, int screen)
if(systray_iskdedockapp(w)) if(systray_iskdedockapp(w))
{ {
systray_request_handle(w, screen_virttophys(screen), NULL); systray_request_handle(w, phys_screen, NULL);
return; return;
} }
@ -421,10 +422,7 @@ client_manage(xcb_window_t w, xcb_get_geometry_reply_t *wgeom, int screen)
c->screen = screen_get_bycoord(globalconf.screens_info, screen, wgeom->x, wgeom->y); c->screen = screen_get_bycoord(globalconf.screens_info, screen, wgeom->x, wgeom->y);
if(globalconf.screens_info->xinerama_is_active) c->phys_screen = phys_screen;
c->phys_screen = globalconf.default_screen;
else
c->phys_screen = c->screen;
/* Initial values */ /* Initial values */
c->win = w; c->win = w;

View File

@ -40,7 +40,7 @@ client_t * client_getbywin(xcb_window_t);
void client_stack(void); void client_stack(void);
void client_ban(client_t *); void client_ban(client_t *);
void client_unban(client_t *); void client_unban(client_t *);
void client_manage(xcb_window_t, xcb_get_geometry_reply_t *, int); void client_manage(xcb_window_t, xcb_get_geometry_reply_t *, int, int);
area_t client_geometry_hints(client_t *, area_t); area_t client_geometry_hints(client_t *, area_t);
bool client_resize(client_t *, area_t, bool); bool client_resize(client_t *, area_t, bool);
void client_unmanage(client_t *); void client_unmanage(client_t *);

25
event.c
View File

@ -553,7 +553,7 @@ static int
event_handle_maprequest(void *data __attribute__ ((unused)), event_handle_maprequest(void *data __attribute__ ((unused)),
xcb_connection_t *connection, xcb_map_request_event_t *ev) xcb_connection_t *connection, xcb_map_request_event_t *ev)
{ {
int screen_nbr = 0, ret = 0; int phys_screen, screen = 0, ret = 0;
client_t *c; client_t *c;
xcb_get_window_attributes_cookie_t wa_c; xcb_get_window_attributes_cookie_t wa_c;
xcb_get_window_attributes_reply_t *wa_r; xcb_get_window_attributes_reply_t *wa_r;
@ -592,36 +592,35 @@ event_handle_maprequest(void *data __attribute__ ((unused)),
geom_c = xcb_get_geometry_unchecked(connection, ev->window); geom_c = xcb_get_geometry_unchecked(connection, ev->window);
if(globalconf.screens_info->xinerama_is_active) if(globalconf.screens_info->xinerama_is_active)
qp_c = xcb_query_pointer_unchecked(connection, xutil_screen_get(globalconf.connection, qp_c = xcb_query_pointer_unchecked(connection,
screen_nbr)->root); xutil_screen_get(globalconf.connection,
globalconf.default_screen)->root);
if(!(geom_r = xcb_get_geometry_reply(connection, geom_c, NULL))) if(!(geom_r = xcb_get_geometry_reply(connection, geom_c, NULL)))
{ {
if(globalconf.screens_info->xinerama_is_active) if(globalconf.screens_info->xinerama_is_active)
{
qp_r = xcb_query_pointer_reply(connection, qp_c, NULL); qp_r = xcb_query_pointer_reply(connection, qp_c, NULL);
p_delete(&qp_r);
}
ret = -1; ret = -1;
goto bailout; goto bailout;
} }
for(iter = xcb_setup_roots_iterator(xcb_get_setup(connection)), phys_screen = 0;
iter.rem && iter.data->root != geom_r->root; xcb_screen_next(&iter), ++phys_screen);
if(globalconf.screens_info->xinerama_is_active if(globalconf.screens_info->xinerama_is_active
&& (qp_r = xcb_query_pointer_reply(connection, qp_c, NULL))) && (qp_r = xcb_query_pointer_reply(connection, qp_c, NULL)))
{ screen = screen_get_bycoord(globalconf.screens_info, screen,
screen_nbr = screen_get_bycoord(globalconf.screens_info, screen_nbr,
qp_r->root_x, qp_r->root_y); qp_r->root_x, qp_r->root_y);
p_delete(&qp_r);
}
else else
for(iter = xcb_setup_roots_iterator(xcb_get_setup(connection)), screen_nbr = 0; screen = phys_screen;
iter.rem && iter.data->root != geom_r->root; xcb_screen_next (&iter), ++screen_nbr);
client_manage(ev->window, geom_r, screen_nbr); client_manage(ev->window, geom_r, phys_screen, screen);
p_delete(&geom_r); p_delete(&geom_r);
} }
bailout: bailout:
p_delete(&qp_r);
p_delete(&wa_r); p_delete(&wa_r);
return ret; return ret;
} }