screen: move screen_getbycoord()

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2008-09-03 22:37:43 +02:00
parent 3a45831242
commit b4d89eec6c
8 changed files with 33 additions and 35 deletions

View File

@ -38,6 +38,7 @@
#include "dbus.h" #include "dbus.h"
#include "systray.h" #include "systray.h"
#include "event.h" #include "event.h"
#include "screen.h"
#include "common/version.h" #include "common/version.h"
#include "common/atoms.h" #include "common/atoms.h"
#include "config.h" #include "config.h"
@ -170,8 +171,7 @@ scan(void)
*(geom_wins[i]), NULL))) *(geom_wins[i]), NULL)))
continue; continue;
screen = screen_get_bycoord(globalconf.screens_info, phys_screen, screen = screen_getbycoord(phys_screen, geom_r->x, geom_r->y);
geom_r->x, geom_r->y);
client_manage(wins[i], geom_r, phys_screen, screen); client_manage(wins[i], geom_r, phys_screen, screen);

View File

@ -420,7 +420,7 @@ client_manage(xcb_window_t w, xcb_get_geometry_reply_t *wgeom, int phys_screen,
c = p_new(client_t, 1); c = p_new(client_t, 1);
c->screen = screen_get_bycoord(globalconf.screens_info, screen, wgeom->x, wgeom->y); c->screen = screen_getbycoord(screen, wgeom->x, wgeom->y);
c->phys_screen = phys_screen; c->phys_screen = phys_screen;
@ -567,8 +567,7 @@ client_resize(client_t *c, area_t geometry, bool hints)
|| c->geometry.width != geometry.width || c->geometry.width != geometry.width
|| c->geometry.height != geometry.height))) || c->geometry.height != geometry.height)))
{ {
new_screen = new_screen = screen_getbycoord(c->screen, geometry.x, geometry.y);
screen_get_bycoord(globalconf.screens_info, c->screen, geometry.x, geometry.y);
c->geometry.x = values[0] = geometry.x; c->geometry.x = values[0] = geometry.x;
c->geometry.width = values[2] = geometry.width; c->geometry.width = values[2] = geometry.width;

View File

@ -25,30 +25,6 @@
#include "common/xscreen.h" #include "common/xscreen.h"
#include "common/xutil.h" #include "common/xutil.h"
/** Return the Xinerama screen number where the coordinates belongs to.
* \param si The screens infos structure.
* \param screen The logical screen number.
* \param x X coordinate
* \param y Y coordinate
* \return Screen number or screen param if no match or no multi-head.
*/
int
screen_get_bycoord(screens_info_t *si, int screen, int x, int y)
{
int i;
/* don't waste our time */
if(!si->xinerama_is_active)
return screen;
for(i = 0; i < si->nscreen; i++)
if((x < 0 || (x >= si->geometry[i].x && x < si->geometry[i].x + si->geometry[i].width))
&& (y < 0 || (y >= si->geometry[i].y && y < si->geometry[i].y + si->geometry[i].height)))
return i;
return screen;
}
static inline area_t static inline area_t
screen_xsitoarea(xcb_xinerama_screen_info_t si) screen_xsitoarea(xcb_xinerama_screen_info_t si)
{ {

View File

@ -31,7 +31,6 @@ typedef struct
area_t *geometry; area_t *geometry;
} screens_info_t; } screens_info_t;
int screen_get_bycoord(screens_info_t *, int, int, int);
void screensinfo_delete(screens_info_t **); void screensinfo_delete(screens_info_t **);
screens_info_t * screensinfo_new(xcb_connection_t *); screens_info_t * screensinfo_new(xcb_connection_t *);

View File

@ -38,6 +38,7 @@
#include "lua.h" #include "lua.h"
#include "systray.h" #include "systray.h"
#include "statusbar.h" #include "statusbar.h"
#include "screen.h"
#include "layouts/floating.h" #include "layouts/floating.h"
#include "common/atoms.h" #include "common/atoms.h"
@ -610,8 +611,7 @@ event_handle_maprequest(void *data __attribute__ ((unused)),
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 = screen_getbycoord(screen, qp_r->root_x, qp_r->root_y);
qp_r->root_x, qp_r->root_y);
else else
screen = phys_screen; screen = phys_screen;

View File

@ -540,8 +540,7 @@ mouse_client_move(client_t *c, int snap, bool infobox)
client_t *target; client_t *target;
/* client moved to another screen? */ /* client moved to another screen? */
newscreen = screen_get_bycoord(globalconf.screens_info, c->screen, newscreen = screen_getbycoord(c->screen, mouse_x, mouse_y);
mouse_x, mouse_y);
if(newscreen != c->screen) if(newscreen != c->screen)
{ {
screen_client_moveto(c, newscreen, true); screen_client_moveto(c, newscreen, true);
@ -1188,7 +1187,7 @@ luaA_mouse_index(lua_State *L)
if(!mouse_query_pointer_root(&screen, &mouse_x, &mouse_y, NULL)) if(!mouse_query_pointer_root(&screen, &mouse_x, &mouse_y, NULL))
return 0; return 0;
i = screen_get_bycoord(globalconf.screens_info, screen, mouse_x, mouse_y); i = screen_getbycoord(screen, mouse_x, mouse_y);
lua_pushnumber(L, i + 1); lua_pushnumber(L, i + 1);
break; break;

View File

@ -32,6 +32,30 @@
extern awesome_t globalconf; extern awesome_t globalconf;
/** Return the Xinerama screen number where the coordinates belongs to.
* \param screen The logical screen number.
* \param x X coordinate
* \param y Y coordinate
* \return Screen number or screen param if no match or no multi-head.
*/
int
screen_getbycoord(int screen, int x, int y)
{
int i;
screens_info_t *si = globalconf.screens_info;
/* don't waste our time */
if(!si->xinerama_is_active)
return screen;
for(i = 0; i < si->nscreen; i++)
if((x < 0 || (x >= si->geometry[i].x && x < si->geometry[i].x + si->geometry[i].width))
&& (y < 0 || (y >= si->geometry[i].y && y < si->geometry[i].y + si->geometry[i].height)))
return i;
return screen;
}
/** Get screens info. /** Get screens info.
* \param screen Screen number. * \param screen Screen number.
* \param statusbar Statusbar list to remove. * \param statusbar Statusbar list to remove.

View File

@ -26,6 +26,7 @@
#define SCREEN_UNDEF (-1) #define SCREEN_UNDEF (-1)
int screen_getbycoord(int, int, int);
area_t screen_area_get(int, statusbar_t *, padding_t *, bool); area_t screen_area_get(int, statusbar_t *, padding_t *, bool);
area_t display_area_get(int, statusbar_t *, padding_t *); area_t display_area_get(int, statusbar_t *, padding_t *);
int screen_virttophys(int); int screen_virttophys(int);