Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_border.c e_border.h e_config.c e_config.h e_desk.c e_hints.c 
        e_int_border_menu.c e_ipc_handlers.h e_ipc_handlers_list.h 


Log Message:
Fullscreen policy. Not tested since my stupid laptop only has one res.
Please test.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.459
retrieving revision 1.460
diff -u -3 -r1.459 -r1.460
--- e_border.c  4 Nov 2005 22:16:22 -0000       1.459
+++ e_border.c  4 Nov 2005 23:30:18 -0000       1.460
@@ -111,6 +111,8 @@
 
 static Evas_List *focus_stack = NULL;
 
+static Ecore_X_Screen_Size screen_size = { -1, -1 };
+
 int E_EVENT_BORDER_ADD = 0;
 int E_EVENT_BORDER_REMOVE = 0;
 int E_EVENT_BORDER_ZONE_SET = 0;
@@ -1591,16 +1593,11 @@
      }
 }
 void
-e_border_fullscreen(E_Border *bd)
+e_border_fullscreen(E_Border *bd, E_Fullscreen policy)
 {
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
 
-   /* FIXME:
-    * Implement both fullscreen modes!
-    * Black background!
-    */
-
    if ((bd->shaded) || (bd->shading)) return;
    if (bd->maximized)
      e_border_unmaximize(bd);
@@ -1639,7 +1636,53 @@
        y = y + (bd->zone->h - h) / 2;
        e_border_move_resize(bd, x, y, w, h);
 #endif
-       e_border_move_resize(bd, bd->zone->x, bd->zone->y, bd->zone->w, 
bd->zone->h);
+       if ((evas_list_count(bd->zone->container->zones) > 1) || (policy == 
E_FULLSCREEN_RESIZE))
+         {
+            e_border_move_resize(bd, bd->zone->x, bd->zone->y, bd->zone->w, 
bd->zone->h);
+         }
+       else if (policy == E_FULLSCREEN_ZOOM)
+         {
+            Ecore_X_Screen_Size *sizes;
+            int                  num_sizes, i;
+
+            screen_size = 
ecore_x_randr_current_screen_size_get(bd->zone->container->manager->root);
+            sizes = 
ecore_x_randr_screen_sizes_get(bd->zone->container->manager->root, &num_sizes);
+            if (sizes)
+              {
+                 Ecore_X_Screen_Size best_size = { -1, -1 };
+                 int best_dist = INT_MAX, dist;
+
+                 for (i = 0; i < num_sizes; i++)
+                   {
+                      if ((sizes[i].width > bd->w) && (sizes[i].height > 
bd->h))
+                        {
+                           dist = (sizes[i].width * sizes[i].height) - (bd->w 
* bd->h);
+                           if (dist < best_dist)
+                             {
+                                best_size = sizes[i];
+                                best_dist = dist;
+                             }
+                        }
+                   }
+                 if (((best_size.width != -1) && (best_size.height != -1)) &&
+                     ((best_size.width != screen_size.width) ||
+                      (best_size.height != screen_size.height)))
+                   {
+                      
ecore_x_randr_screen_size_set(bd->zone->container->manager->root,
+                                                    best_size);
+                      e_border_move_resize(bd, 0, 0, best_size.width, 
best_size.height);
+                   }
+                 else
+                   {
+                      screen_size.width = -1;
+                      screen_size.height = -1;
+                      e_border_move_resize(bd, 0, 0, bd->zone->w, bd->zone->h);
+                   }
+                 free(sizes);
+              }
+            else
+              e_border_move_resize(bd, bd->zone->x, bd->zone->y, bd->zone->w, 
bd->zone->h);
+         }
        ecore_evas_hide(bd->bg_ecore_evas);
 
        bd->fullscreen = 1;
@@ -1667,6 +1710,12 @@
 
        /* e_zone_fullscreen_set(bd->zone, 0); */
 
+       if ((screen_size.width != -1) && (screen_size.height != -1))
+         {
+            ecore_x_randr_screen_size_set(bd->zone->container->manager->root, 
screen_size);
+            screen_size.width = -1;
+            screen_size.height = -1;
+         }
        e_border_move_resize(bd, bd->saved.x, bd->saved.y, bd->saved.w, 
bd->saved.h);
        ecore_evas_show(bd->bg_ecore_evas);
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.123
retrieving revision 1.124
diff -u -3 -r1.123 -r1.124
--- e_border.h  3 Nov 2005 06:17:08 -0000       1.123
+++ e_border.h  4 Nov 2005 23:30:18 -0000       1.124
@@ -504,7 +504,7 @@
 EAPI void      e_border_unshade(E_Border *bd, E_Direction dir);
 EAPI void      e_border_maximize(E_Border *bd, E_Maximize max);
 EAPI void      e_border_unmaximize(E_Border *bd);
-EAPI void      e_border_fullscreen(E_Border *bd);
+EAPI void      e_border_fullscreen(E_Border *bd, E_Fullscreen policy);
 EAPI void      e_border_unfullscreen(E_Border *bd);
 EAPI void      e_border_iconify(E_Border *bd);
 EAPI void      e_border_uniconify(E_Border *bd);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.c,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -3 -r1.121 -r1.122
--- e_config.c  23 Oct 2005 04:56:51 -0000      1.121
+++ e_config.c  4 Nov 2005 23:30:18 -0000       1.122
@@ -359,6 +359,7 @@
    E_CONFIG_VAL(D, T, menu_eap_name_show, INT); /**/
    E_CONFIG_VAL(D, T, menu_eap_generic_show, INT); /**/
    E_CONFIG_VAL(D, T, menu_eap_comment_show, INT); /**/
+   E_CONFIG_VAL(D, T, fullscreen_policy, INT); /**/
    E_CONFIG_VAL(D, T, input_method, STR); /**/
    E_CONFIG_LIST(D, T, path_append_input_methods, _e_config_path_append_edd); 
/**/
    
@@ -489,6 +490,7 @@
        e_config->menu_eap_name_show = 1;
        e_config->menu_eap_generic_show = 1;
        e_config->menu_eap_comment_show = 0;
+       e_config->fullscreen_policy = E_FULLSCREEN_RESIZE;
        e_config->input_method = NULL;  
        
          {
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.h,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -3 -r1.62 -r1.63
--- e_config.h  23 Oct 2005 04:56:51 -0000      1.62
+++ e_config.h  4 Nov 2005 23:30:18 -0000       1.63
@@ -187,6 +187,7 @@
    int         menu_eap_name_show;
    int         menu_eap_generic_show;
    int         menu_eap_comment_show;
+   int         fullscreen_policy;
 };
 
 struct _E_Config_Module
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -3 -r1.52 -r1.53
--- e_desk.c    16 Oct 2005 05:59:18 -0000      1.52
+++ e_desk.c    4 Nov 2005 23:30:18 -0000       1.53
@@ -219,7 +219,7 @@
                  e_border_show(bd);
                  if (bd->want_fullscreen)
                    {
-                      e_border_fullscreen(bd);
+                      e_border_fullscreen(bd, e_config->fullscreen_policy);
                       bd->want_fullscreen = 0;
                    }
               }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -3 -r1.78 -r1.79
--- e_hints.c   28 Oct 2005 09:23:54 -0000      1.78
+++ e_hints.c   4 Nov 2005 23:30:18 -0000       1.79
@@ -449,7 +449,7 @@
        if (!bd->lock_client_fullscreen)
          {
             e_hints_window_size_get(bd);
-            e_border_fullscreen(bd);
+            e_border_fullscreen(bd, e_config->fullscreen_policy);
          }
        else
          e_hints_window_fullscreen_set(bd, 0);
@@ -752,13 +752,13 @@
               e_border_unfullscreen(bd);
               break;
            case ECORE_X_WINDOW_STATE_ACTION_ADD:
-              e_border_fullscreen(bd);
+              e_border_fullscreen(bd, e_config->fullscreen_policy);
               break;
            case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
               if (bd->fullscreen)
                 e_border_unfullscreen(bd);
               else
-                e_border_fullscreen(bd);
+                e_border_fullscreen(bd, e_config->fullscreen_policy);
               break;
           }
         break;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_border_menu.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_int_border_menu.c 31 Oct 2005 10:27:06 -0000      1.3
+++ e_int_border_menu.c 4 Nov 2005 23:30:18 -0000       1.4
@@ -538,7 +538,7 @@
      {
        toggle = e_menu_item_toggle_get(mi);
        if (toggle)
-         e_border_fullscreen(bd);
+         e_border_fullscreen(bd, e_config->fullscreen_policy);
        else
          e_border_unfullscreen(bd);
      }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_ipc_handlers.h,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -3 -r1.104 -r1.105
--- e_ipc_handlers.h    4 Nov 2005 07:49:12 -0000       1.104
+++ e_ipc_handlers.h    4 Nov 2005 23:30:18 -0000       1.105
@@ -6857,3 +6857,54 @@
 #undef HDL
 
 /****************************************************************************/
+#define HDL E_IPC_OP_FULLSCREEN_POLICY_SET
+#if (TYPE == E_REMOTE_OPTIONS)
+   OP("-fullscreen-policy-set", 1, "Set the fullscreen policy. OPT1 = RESIZE 
or ZOOM", 0, HDL)
+#elif (TYPE == E_REMOTE_OUT)
+   REQ_INT_START(HDL)
+   int value = 0;
+   if (!strcmp(params[0], "RESIZE")) value = E_FULLSCREEN_RESIZE;
+   else if (!strcmp(params[0], "ZOOM")) value = E_FULLSCREEN_ZOOM;
+   else
+     {
+        printf("fullscreen must be RESIZE or ZOOM\n");
+        exit(-1);
+     }
+   REQ_INT_END(value, HDL);
+#elif (TYPE == E_WM_IN)
+   START_INT(value, HDL);
+   e_config->fullscreen_policy = value;
+   E_CONFIG_LIMIT(e_config->fullscreen_policy, E_FULLSCREEN_RESIZE, 
E_FULLSCREEN_ZOOM);
+   SAVE;
+   END_INT
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HDL
+
+/****************************************************************************/
+#define HDL E_IPC_OP_FULLSCREEN_POLICY_GET
+#if (TYPE == E_REMOTE_OPTIONS)
+   OP("-fullscreen-policy-get", 0, "Get fullscreen policy", 1, HDL)
+#elif (TYPE == E_REMOTE_OUT)
+   REQ_NULL(HDL);
+#elif (TYPE == E_WM_IN)
+   SEND_INT(e_config->fullscreen_policy, E_IPC_OP_FULLSCREEN_POLICY_GET_REPLY, 
HDL);
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HDL
+
+/****************************************************************************/
+#define HDL E_IPC_OP_FULLSCREEN_POLICY_GET_REPLY
+#if (TYPE == E_REMOTE_OPTIONS)
+#elif (TYPE == E_REMOTE_OUT)
+#elif (TYPE == E_WM_IN)
+#elif (TYPE == E_REMOTE_IN)
+   START_INT(policy, HDL);
+   if (policy == E_FULLSCREEN_RESIZE)
+     printf("REPLY: RESIZE\n");
+   else if (policy == E_FULLSCREEN_ZOOM)
+     printf("REPLY: ZOOM\n");
+   END_INT
+#endif
+#undef HDL
+/****************************************************************************/
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_ipc_handlers_list.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -3 -r1.36 -r1.37
--- e_ipc_handlers_list.h       15 Oct 2005 10:49:54 -0000      1.36
+++ e_ipc_handlers_list.h       4 Nov 2005 23:30:18 -0000       1.37
@@ -334,4 +334,7 @@
 #define E_IPC_OP_IM_SET 317
 #define E_IPC_OP_IM_GET 318
 #define E_IPC_OP_IM_GET_REPLY 319
-  
+
+#define E_IPC_OP_FULLSCREEN_POLICY_SET 320
+#define E_IPC_OP_FULLSCREEN_POLICY_GET 321
+#define E_IPC_OP_FULLSCREEN_POLICY_GET_REPLY 322




-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to