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

Reply via email to