devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=86258cd16551f1261b5a4027f6574b266e95bd23

commit 86258cd16551f1261b5a4027f6574b266e95bd23
Author: Chris Michael <cp.mich...@samsung.com>
Date:   Fri Mar 28 10:36:44 2014 +0000

    ecore-evas-drm: Add better support for ecore_evas_fullscreen_set
    
    @bugfix: This fixes ecore_evas_drm to function properly when
    ecore_evas_fullsreen_set is called. This is needed for running
    Elementary apps 'standalone' in drm.
    
    Signed-off-by: Chris Michael <cp.mich...@samsung.com>
---
 .../ecore_evas/engines/drm/ecore_evas_drm.c        | 61 ++++++++++++++++++++++
 1 file changed, 61 insertions(+)

diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c 
b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
index 4b1a0d3..731f0fc 100644
--- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
+++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
@@ -19,6 +19,13 @@
 # include <Ecore_Drm.h>
 //#endif
 
+typedef struct _Ecore_Evas_Engine_Drm_Data Ecore_Evas_Engine_Drm_Data;
+
+struct _Ecore_Evas_Engine_Drm_Data
+{
+   int w, h;
+};
+
 /* local function prototypes */
 static int _ecore_evas_drm_init(const char *device);
 static int _ecore_evas_drm_shutdown(void);
@@ -145,6 +152,7 @@ ecore_evas_drm_new_internal(const char *device, unsigned 
int parent EINA_UNUSED,
    Ecore_Evas *ee;
    Evas_Engine_Info_Drm *einfo;
    Ecore_Evas_Interface_Drm *iface;
+   Ecore_Evas_Engine_Drm_Data *edata;
    int method;
 
    /* try to find the evas drm engine */
@@ -164,6 +172,15 @@ ecore_evas_drm_new_internal(const char *device, unsigned 
int parent EINA_UNUSED,
         goto ee_err;
      }
 
+   if (!(edata = calloc(1, sizeof(Ecore_Evas_Engine_Drm_Data))))
+     {
+        ERR("Failed to allocate space for new Ecore_Evas_Engine_Data");
+        free(ee);
+        goto ee_err;
+     }
+
+   ee->engine.data = edata;
+
    ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
 
    ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_evas_drm_engine_func;
@@ -374,7 +391,11 @@ _ecore_evas_drm_interface_new(void)
 static void 
 _ecore_evas_drm_free(Ecore_Evas *ee)
 {
+   Ecore_Evas_Engine_Drm_Data *data;
+
+   data = ee->engine.data;
    ecore_evas_input_event_unregister(ee);
+   free(data);
    _ecore_evas_drm_shutdown();
 }
 
@@ -619,8 +640,48 @@ _ecore_evas_drm_maximized_set(Ecore_Evas *ee, Eina_Bool on)
 static void 
 _ecore_evas_drm_fullscreen_set(Ecore_Evas *ee, Eina_Bool on)
 {
+   Eina_Bool resized = EINA_FALSE;
+   Ecore_Evas_Engine_Drm_Data *edata;
+
+   edata = ee->engine.data;
    if (ee->prop.fullscreen == on) return;
+   if (on)
+     {
+        Evas_Engine_Info_Drm *einfo;
+        int ow = 0, oh = 0;
+
+        edata->w = ee->w;
+        edata->h = ee->h;
+        if ((einfo = (Evas_Engine_Info_Drm *)evas_engine_info_get(ee->evas)))
+          ecore_drm_output_size_get(dev, einfo->info.output, &ow, &oh);
+
+        if ((ow == 0) || (oh == 0))
+          {
+             ow = ee->w;
+             oh = ee->h;
+          }
+        if ((ow != ee->w) || (oh != ee->h)) resized = EINA_TRUE;
+        ee->w = ow;
+        ee->h = oh;
+     }
+   else
+     {
+        if ((edata->w != ee->w) || (edata->h != ee->h)) resized = EINA_TRUE;
+        ee->w = edata->w;
+        ee->h = edata->h;
+     }
+
+   ee->req.w = ee->w;
+   ee->req.h = ee->h;
    ee->prop.fullscreen = on;
+   evas_output_size_set(ee->evas, ee->w, ee->h);
+   evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+   evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
+
+   if (resized)
+     {
+        if (ee->func.fn_resize) ee->func.fn_resize(ee);
+     }
 }
 
 static void 

-- 


Reply via email to