Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        zoom.c 


Log Message:
Attempt #2 to fix fullscreen mode with XFree86-4.3.

===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/zoom.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- zoom.c      30 May 2003 20:14:22 -0000      1.14
+++ zoom.c      5 Jun 2003 08:50:37 -0000       1.15
@@ -25,14 +25,8 @@
 #ifdef WITH_ZOOM
 #include <X11/extensions/xf86vmode.h>
 
-/* Take out USE_OLD_ZOOM_CODE stuff if new is OK */
-#define USE_OLD_ZOOM_CODE 0
-
 static int          std_vid_modes_num = 0;
-
-#if USE_OLD_ZOOM_CODE
 static int          std_vid_mode_cur = 0;
-#endif
 static XF86VidModeModeInfo **std_vid_modes = NULL;
 
 static Window       zoom_mask_1 = 0;
@@ -50,7 +44,7 @@
                              &std_vid_modes);
 }
 
-static const XF86VidModeModeInfo *
+static XF86VidModeModeInfo *
 FindMode(int w, int h)
 {
    XF86VidModeModeInfo *chosen = NULL;
@@ -74,71 +68,57 @@
    return chosen;
 }
 
-#if USE_OLD_ZOOM_CODE
 static int
-GetModeJumpCount(XF86VidModeModeInfo * new)
+GetModeIndex(int dotclock, XF86VidModeModeLine * line)
 {
-   int                 i, next;
+   int                 i;
+   const XF86VidModeModeInfo *info;
 
-   next = 0;
    for (i = 0; i < std_vid_modes_num; i++)
      {
-       if ((new->hdisplay == std_vid_modes[i]->hdisplay)
-           && (new->vdisplay == std_vid_modes[i]->vdisplay))
-          next = i;
+       info = std_vid_modes[i];
+       if (info->dotclock == dotclock &&
+           info->hdisplay == line->hdisplay &&
+           info->vdisplay == line->vdisplay)
+          return i;
      }
-   return next;
+   return 0;
 }
-#endif
 
 static const XF86VidModeModeInfo *
 SwitchRes(char inout, int x, int y, int w, int h)
 {
+   static int          vp_x, vp_y;
    XF86VidModeModeInfo *mode = NULL;
 
-#if USE_OLD_ZOOM_CODE
-   int                 i;
-#endif
-
    if (inout)
      {
-#if USE_OLD_ZOOM_CODE
        XF86VidModeModeLine curmode;
-       int                 dotclock, jump;
+       int                 dotclock;
 
        if (!XF86VidModeGetModeLine(disp, root.scr, &dotclock, &curmode))
           return mode;
-#endif
+       XF86VidModeGetViewPort(disp, root.scr, &vp_x, &vp_y);
+
        mode = FindMode(w, h);
        if (mode)
          {
-            XWarpPointer(disp, None, root.win, 0, 0, 0, 0, x, y);
-            XF86VidModeSetViewPort(disp, root.scr, x, y);
             XF86VidModeLockModeSwitch(disp, root.scr, 0);
-#if USE_OLD_ZOOM_CODE
-            jump = GetModeJumpCount(mode);
-            for (i = 0; i < jump; i++)
-               XF86VidModeSwitchMode(disp, root.scr, 1);
-            std_vid_mode_cur = jump;
-#else
+            std_vid_mode_cur = GetModeIndex(dotclock, &curmode);
             XF86VidModeSwitchToMode(disp, root.scr, mode);
-#endif
+            XF86VidModeSetViewPort(disp, root.scr, x, y);
             XF86VidModeLockModeSwitch(disp, root.scr, 1);
          }
      }
    else
      {
+       mode = std_vid_modes[std_vid_mode_cur];
        XF86VidModeLockModeSwitch(disp, root.scr, 0);
-#if USE_OLD_ZOOM_CODE
-       for (i = 0; i < (std_vid_modes_num - std_vid_mode_cur); i++)
-          XF86VidModeSwitchMode(disp, root.scr, 1);
-       XF86VidModeSetViewPort(disp, root.scr, x, y);
-       std_vid_mode_cur = 0;
-#else
-       XF86VidModeSwitchToMode(disp, root.scr, std_vid_modes[0]);
-#endif
+       XF86VidModeSwitchToMode(disp, root.scr, mode);
+       XF86VidModeSetViewPort(disp, root.scr, vp_x, vp_y);
+#if 0                          /* No, don't lock or we can't switch resolution */
        XF86VidModeLockModeSwitch(disp, root.scr, 1);
-       mode = std_vid_modes[0];
+#endif
      }
    return mode;
 }
@@ -215,7 +195,7 @@
 void
 Zoom(EWin * ewin)
 {
-   XF86VidModeModeInfo *mode;
+   const XF86VidModeModeInfo *mode;
 
    if (!CanZoom())
       return;
@@ -224,9 +204,10 @@
      {
        if (zoom_last_ewin)
          {
+            ewin = zoom_last_ewin;
 /*           XUngrabPointer(disp, CurrentTime); */
-            MoveEwin(zoom_last_ewin, zoom_last_x, zoom_last_y);
-            ICCCM_Configure(zoom_last_ewin);
+            MoveEwin(ewin, zoom_last_x, zoom_last_y);
+            ICCCM_Configure(ewin);
             if (zoom_mask_1)
                XDestroyWindow(disp, zoom_mask_1);
             if (zoom_mask_2)
@@ -236,6 +217,8 @@
             if (zoom_mask_4)
                XDestroyWindow(disp, zoom_mask_4);
             SwitchRes(0, 0, 0, 0, 0);
+            XWarpPointer(disp, None, ewin->client.win, 0, 0, 0, 0,
+                         ewin->client.w / 2, ewin->client.h / 2);
             XSync(disp, False);
             zoom_last_ewin = NULL;
          }
@@ -267,13 +250,16 @@
                 -ewin->border->border.top + y1);
        ICCCM_Configure(ewin);
        FocusToEWin(ewin);
-/*      XGrabPointer(disp, ewin->client.win, False, 0,
- * ButtonPressMask | ButtonReleaseMask |
- * PointerMotionMask | ButtonMotionMask |
- * EnterWindowMask | LeaveWindowMask,
- * GrabModeAsync, GrabModeAsync, None, 
- * ewin->client.win, None, 
- * CurrentTime); */
+       XWarpPointer(disp, None, ewin->client.win, 0, 0, 0, 0,
+                    ewin->client.w / 2, ewin->client.h / 2);
+#if 0
+       XGrabPointer(disp, ewin->client.win, True,
+                    ButtonPressMask | ButtonReleaseMask |
+                    PointerMotionMask | ButtonMotionMask |
+                    EnterWindowMask | LeaveWindowMask,
+                    GrabModeAsync, GrabModeAsync,
+                    ewin->client.win, None, CurrentTime);
+#endif
        zoom_mask_1 = ZoomMask(0, 0, x1, mode->vdisplay);
        zoom_mask_2 = ZoomMask(0, 0, mode->hdisplay, y1);
        zoom_mask_3 = ZoomMask(x1 + ewin->client.w, 0, x2, mode->vdisplay);




-------------------------------------------------------
This SF.net email is sponsored by:  Etnus, makers of TotalView, The best
thread debugger on the planet. Designed with thread debugging features
you've never dreamed of, try TotalView 6 free at www.etnus.com.
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to