Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: E.h Makefile.am arrange.c ewin-ops.c ipc.c menus.c screen.c setup.c size.c warp.c Added Files: screen.h Log Message: Add feature to subdivide screen (xinerama style). =================================================================== RCS file: /cvs/e/e16/e/src/E.h,v retrieving revision 1.548 retrieving revision 1.549 diff -u -3 -r1.548 -r1.549 --- E.h 21 Apr 2006 22:52:58 -0000 1.548 +++ E.h 22 Apr 2006 22:00:01 -0000 1.549 @@ -795,18 +795,6 @@ /* regex.c */ int matchregexp(const char *rx, const char *s); -/* screen.c */ -void ScreenInit(void); -void ScreenShowInfo(void); -int ScreenGetGeometry(int x, int y, int *px, int *py, - int *pw, int *ph); -int ScreenGetAvailableArea(int x, int y, int *px, int *py, - int *pw, int *ph); -int GetPointerScreenGeometry(int *px, int *py, - int *pw, int *ph); -int GetPointerScreenAvailableArea(int *px, int *py, - int *pw, int *ph); - /* settings.c */ void SettingsMoveResize(void); void SettingsPlacement(void); =================================================================== RCS file: /cvs/e/e16/e/src/Makefile.am,v retrieving revision 1.71 retrieving revision 1.72 diff -u -3 -r1.71 -r1.72 --- Makefile.am 19 Apr 2006 19:13:46 -0000 1.71 +++ Makefile.am 22 Apr 2006 22:00:01 -0000 1.72 @@ -96,6 +96,7 @@ progress.c \ regex.c \ screen.c \ + screen.h \ session.c \ session.h \ settings.c \ =================================================================== RCS file: /cvs/e/e16/e/src/arrange.c,v retrieving revision 1.87 retrieving revision 1.88 diff -u -3 -r1.87 -r1.88 --- arrange.c 18 Feb 2006 08:30:03 -0000 1.87 +++ arrange.c 22 Apr 2006 22:00:01 -0000 1.88 @@ -26,6 +26,7 @@ #include "desktops.h" #include "ewins.h" #include "groups.h" +#include "screen.h" static int ArrangeAddToList(int **array, int current_size, int value) =================================================================== RCS file: /cvs/e/e16/e/src/ewin-ops.c,v retrieving revision 1.95 retrieving revision 1.96 diff -u -3 -r1.95 -r1.96 --- ewin-ops.c 15 Apr 2006 18:32:54 -0000 1.95 +++ ewin-ops.c 22 Apr 2006 22:00:01 -0000 1.96 @@ -31,6 +31,7 @@ #include "groups.h" #include "hints.h" #include "iclass.h" /* FIXME - Should not be here */ +#include "screen.h" #include "snaps.h" #include "xwin.h" =================================================================== RCS file: /cvs/e/e16/e/src/ipc.c,v retrieving revision 1.264 retrieving revision 1.265 diff -u -3 -r1.264 -r1.265 --- ipc.c 19 Apr 2006 19:13:46 -0000 1.264 +++ ipc.c 22 Apr 2006 22:00:02 -0000 1.265 @@ -30,6 +30,7 @@ #include "ewins.h" #include "ewin-ops.h" #include "hints.h" /* FIXME - Should not be here */ +#include "screen.h" #include "session.h" #include "snaps.h" #include "timers.h" @@ -133,9 +134,36 @@ /* The IPC functions */ static void -IPC_Screen(const char *params __UNUSED__, Client * c __UNUSED__) +IPC_Screen(const char *params, Client * c __UNUSED__) { - ScreenShowInfo(); + char param[1024]; + int l; + const char *p; + + p = params; + if (p) + { + l = 0; + sscanf(p, "%1000s %n", param, &l); + p += l; + } + + if (!p || !strncmp(param, "list", 2)) + { + ScreenShowInfo(p); + } + else if (!strcmp(param, "split")) + { + int i, j, nx, ny; + + nx = 2; + ny = 1; + sscanf(p, "%i %i\n", &nx, &ny); + for (i = 0; i < nx; i++) + for (j = 0; j < ny; j++) + ScreenAdd(1, VRoot.scr, i * VRoot.w / nx, j * VRoot.h / ny, + VRoot.w / nx, VRoot.h / ny); + } } static void =================================================================== RCS file: /cvs/e/e16/e/src/menus.c,v retrieving revision 1.238 retrieving revision 1.239 diff -u -3 -r1.238 -r1.239 --- menus.c 21 Apr 2006 22:52:59 -0000 1.238 +++ menus.c 22 Apr 2006 22:00:02 -0000 1.239 @@ -32,6 +32,7 @@ #include "hints.h" #include "iclass.h" #include "menus.h" +#include "screen.h" #include "tclass.h" #include "timers.h" #include "tooltips.h" =================================================================== RCS file: /cvs/e/e16/e/src/screen.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- screen.c 22 Apr 2006 14:33:07 -0000 1.15 +++ screen.c 22 Apr 2006 22:00:02 -0000 1.16 @@ -23,51 +23,83 @@ */ #include "E.h" #include "ewins.h" +#include "screen.h" #include "xwin.h" #ifdef HAS_XINERAMA #include <X11/extensions/Xinerama.h> #endif -#ifdef HAS_XINERAMA -static XineramaScreenInfo *screens = NULL; -static int num_screens = 0; -#endif +typedef struct +{ + int type; + int head; + int x, y; + int w, h; +} EScreen; + +static EScreen *p_screens = NULL; +static int n_screens = 0; + +void +ScreenAdd(int type, int head, int x, int y, unsigned int w, unsigned int h) +{ + EScreen *es; + + n_screens++; + p_screens = Erealloc(p_screens, n_screens * sizeof(EScreen)); + + es = p_screens + n_screens - 1; + es->type = type; + es->head = head; + es->x = x; + es->y = y; + es->w = w; + es->h = h; +} void ScreenInit(void) { +#ifdef HAS_XINERAMA + XineramaScreenInfo *screens = NULL; + int num_screens = 0; + int i; + if (Mode.wm.window) return; -#ifdef HAS_XINERAMA + Mode.display.xinerama_active = XineramaIsActive(disp); Conf.extra_head = 0; if (Mode.display.xinerama_active) screens = XineramaQueryScreens(disp, &num_screens); + + for (i = 0; i < num_screens; i++) + ScreenAdd(0, screens[i].screen_number, screens[i].x_org, + screens[i].y_org, screens[i].width, screens[i].height); #endif } void -ScreenShowInfo(void) +ScreenShowInfo(const char *prm __UNUSED__) { + int i; + #ifdef HAS_XINERAMA - if (Mode.display.xinerama_active) + if (XineramaIsActive(disp)) { XineramaScreenInfo *scrns; - int num, i; + int num; scrns = XineramaQueryScreens(disp, &num); - IpcPrintf("Xinerama active:\n"); + IpcPrintf("Xinerama screens:\n"); IpcPrintf("Head Screen X-Origin Y-Origin Width Height\n"); for (i = 0; i < num; i++) - { - IpcPrintf(" %2d %2d %5d %5d %5d %5d\n", - i, scrns[i].screen_number, - scrns[i].x_org, scrns[i].y_org, scrns[i].width, - scrns[i].height); - } + IpcPrintf(" %2d %2d %5d %5d %5d %5d\n", + i, scrns[i].screen_number, + scrns[i].x_org, scrns[i].y_org, scrns[i].width, + scrns[i].height); XFree(scrns); - return; } else { @@ -75,9 +107,23 @@ } #endif + IpcPrintf("E-screens:\n"); IpcPrintf("Head Screen X-Origin Y-Origin Width Height\n"); - IpcPrintf(" %2d %2d %5d %5d %5d %5d\n", - 0, VRoot.scr, 0, 0, VRoot.w, VRoot.h); + if (n_screens) + { + for (i = 0; i < n_screens; i++) + { + EScreen *ps = p_screens + i; + + IpcPrintf(" %2d %2d %5d %5d %5d %5d\n", + i, ps->head, ps->x, ps->y, ps->w, ps->h); + } + } + else + { + IpcPrintf(" %2d %2d %5d %5d %5d %5d\n", + 0, VRoot.scr, 0, 0, VRoot.w, VRoot.h); + } } int @@ -92,29 +138,27 @@ w = VRoot.w; h = VRoot.h; -#ifdef HAS_XINERAMA - if (Mode.display.xinerama_active) + if (n_screens > 1) { int i; - for (i = 0; i < num_screens; i++) + for (i = 0; i < n_screens; i++) { - XineramaScreenInfo *ps = &screens[i]; + EScreen *ps = p_screens + i; - if (xi >= ps->x_org && xi < ps->x_org + ps->width && - yi >= ps->y_org && yi < ps->y_org + ps->height) + if (xi >= ps->x && xi < ps->x + ps->w && + yi >= ps->y && yi < ps->y + ps->h) { - x = ps->x_org; - y = ps->y_org; - w = ps->width; - h = ps->height; - head = i; + x = ps->x; + y = ps->y; + w = ps->w; + h = ps->h; + head = ps->head; /* NB! *First* matching head is used */ break; } } } -#endif if (px) *px = x; =================================================================== RCS file: /cvs/e/e16/e/src/setup.c,v retrieving revision 1.173 retrieving revision 1.174 diff -u -3 -r1.173 -r1.174 --- setup.c 21 Apr 2006 15:51:46 -0000 1.173 +++ setup.c 22 Apr 2006 22:00:02 -0000 1.174 @@ -24,6 +24,7 @@ #include "E.h" #include "eimage.h" #include "ewins.h" +#include "screen.h" #include "xwin.h" #include <signal.h> #include <X11/keysym.h> =================================================================== RCS file: /cvs/e/e16/e/src/size.c,v retrieving revision 1.50 retrieving revision 1.51 diff -u -3 -r1.50 -r1.51 --- size.c 30 Mar 2006 22:35:20 -0000 1.50 +++ size.c 22 Apr 2006 22:00:02 -0000 1.51 @@ -24,6 +24,7 @@ #include "E.h" #include "ewins.h" #include "hints.h" +#include "screen.h" #define MAX_HOR 0x1 #define MAX_VER 0x2 =================================================================== RCS file: /cvs/e/e16/e/src/warp.c,v retrieving revision 1.89 retrieving revision 1.90 diff -u -3 -r1.89 -r1.90 --- warp.c 22 Apr 2006 13:24:51 -0000 1.89 +++ warp.c 22 Apr 2006 22:00:02 -0000 1.90 @@ -36,6 +36,7 @@ #include "ewins.h" #include "iclass.h" #include "icons.h" +#include "screen.h" #include "tclass.h" #include "tooltips.h" #include "xwin.h" ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs