From 1993ca87b91845172cade32b77423c925aa150f1 Mon Sep 17 00:00:00 2001 From: sabetts Date: Fri, 27 Feb 2004 23:16:39 +0000 Subject: new files --- src/manage.c | 7 +++++ src/xinerama.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/xinerama.h | 28 +++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 src/xinerama.c create mode 100644 src/xinerama.h diff --git a/src/manage.c b/src/manage.c index e85bfe8..d7ed545 100644 --- a/src/manage.c +++ b/src/manage.c @@ -392,6 +392,13 @@ scanwins(rp_screen *s) /* FIXME - with this code, windows which are entirely off-screen * when RP starts won't ever be managed when Xinerama is enabled. */ + { + XWindowAttributes root_attr; + + XGetWindowAttributes (dpy, s->root, &root_attr); + PRINT_DEBUG (("attrs: %d %d %d %d %d %d\n", root_attr.x, root_attr.y, + s->left, s->top, s->left + s->width, s->top + s->height));} + if (rp_have_xinerama && ((attr.x > s->left + s->width) || (attr.x < s->left) diff --git a/src/xinerama.c b/src/xinerama.c new file mode 100644 index 0000000..3c94d56 --- /dev/null +++ b/src/xinerama.c @@ -0,0 +1,94 @@ +/* functions for grabbing information about Xinerama screens + * Copyright (C) 2003 Cameron Patrick + * + * This file is part of ratpoison. + * + * ratpoison is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * ratpoison is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + */ + +#include "ratpoison.h" + +#ifdef HAVE_X11_EXTENSIONS_XINERAMA_H +# include +# define XINERAMA +#endif + +int rp_have_xinerama = 0; +int xine_screen_count; + +#ifdef XINERAMA +static XineramaScreenInfo *xine_screens = NULL; +#endif + +void +init_xinerama() +{ + int evbase, errbase, major, minor; + + rp_have_xinerama = 0; + +#ifdef XINERAMA + if (xine_screens) XFree(xine_screens); + + if (!XineramaQueryExtension(dpy, &evbase, &errbase)) { + return; + } + + if (!XineramaQueryVersion(dpy, &major, &minor) != Success) { + return; + } + + if (major != 1) { + fprintf (stderr, "Warning: Xinerama version %d.%d not supported\n", major, minor); + return; + } + + if (!XineramaIsActive(dpy)) { + return; + } + + xine_screens = XineramaQueryScreens(dpy, &xine_screen_count); + if ((xine_screens == NULL) || (xine_screen_count < 2)) { + return; + } + + rp_have_xinerama = 1; +#endif +} + +void xinerama_get_screen_info(int sc, int *x, int *y, int *w, int *h) +{ +#ifdef XINERAMA + if ((sc < xine_screen_count) && (sc >= 0)) { + *x = xine_screens[sc].x_org; + *y = xine_screens[sc].y_org; + *w = xine_screens[sc].width; + *h = xine_screens[sc].height; + } +#endif +} + +void +free_xinerama() +{ +#ifdef XINERAMA + if (xine_screens) { + XFree(xine_screens); + } + rp_have_xinerama = 0; +#endif +} + diff --git a/src/xinerama.h b/src/xinerama.h new file mode 100644 index 0000000..a3d19c9 --- /dev/null +++ b/src/xinerama.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2003 Cameron Patrick + * + * This file is part of ratpoison. + * + * ratpoison is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * ratpoison is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + */ + +#ifndef XINERAMA_H +#define XINERAMA_H + +void init_xinerama(); +void free_xinerama(); +void xinerama_get_screen_info(int sc, int *x, int *y, int *w, int *h); + +#endif -- cgit v1.2.3