Hi Carsten,

Sorry for replying late. 

ok ecore 1.0 is out. this can now go into ecore 1.1 dev (trunk). 
first.. patch is broken. - just some errors:

ecore_x_randr_12.c: In function ‘ecore_x_randr_screen_backlight_level_set’:
ecore_x_randr_12.c:1919: error: ‘_backlight’ undeclared (first use in this
function) ecore_x_randr_12.c:1919: error: (Each undeclared identifier is
reported only once ecore_x_randr_12.c:1919: error: for each function it appears
in.) ecore_x_randr_12.c: In function ‘ecore_x_randr_output_backlight_level_get’:
ecore_x_randr_12.c:1967: error: ‘_backlight’ undeclared (first use in this
function) ecore_x_randr_12.c: In function
‘ecore_x_randr_output_backlight_level_set’: ecore_x_randr_12.c:2012: warning:
‘return’ with no value, in function returning non-void ecore_x_randr_12.c:2014:
error: ‘_backlight’ undeclared (first use in this function) make: ***
[ecore_x_randr_12.lo] Error 1

where do you get _backlight from?

_backlight is a Ecore_X_Atom type variable. 

Indeed the original patch was lacking one unique line of code (I forgot to move 
this line when I copied pasted the code from the ecore_xrand_13.c to 
ecore_xrand_12.c). I modified the patch accordingly. Please note that it is 
identical to the patch I send two days ago except that this one includes the 
missing line. 

I tried to compile it and it works perfectly now. One's again sorry for this 
mistake.

> I should indicate that I plan to create a module for e17 which controls the
> backlight properties but in order to do that I would like to ask a question.

that's cool! and you'd need the ecore support for it to work - fine. 

> I would like to add a timer in this module in order decrease the backlight to
> a lower value after 10 seconds of activity for instance. For course the timer
> should be deactivited when the keyboard or the mouse are used but
> unfortunately I do not know how to create such timer. 

ecore_timer_add() - grep fore that call all through any code. easy to find
examples. but you need to know when inactivity has happened. for that you'd
need to look at the xscreensaver extension - you can get idle timeout events.
you could also poll every few seconds and get current idle time with
ecore_x_screensaver_idle_time_get(); (returns idle time in seconds)

thanks a lot for these info. I will look into it as soon as possible. 

By the way there is another patch for e17 (log domain related) in the mailing 
list. I have to improve it a bit since the svn update indicated conflicts on my 
side. 

Mathieu
-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


Index: xlib/ecore_x_randr_12.c
===================================================================
--- xlib/ecore_x_randr_12.c	(revision 56606)
+++ xlib/ecore_x_randr_12.c	(working copy)
@@ -36,6 +36,7 @@
                                                                    Window
                                                                    window);
 extern int _randr_version;
+static Ecore_X_Atom _backlight;
 #endif
 
 /**
@@ -440,8 +441,8 @@
    if (!mode_info)
      return;
 
-   if (mode_info->name)
-     free(mode_info->name);
+   if (mode_info->name) 
+    free(mode_info->name);
 
    free(mode_info);
    mode_info = NULL;
@@ -1904,3 +1905,149 @@
                                          Ecore_X_Randr_Unset);
 #endif
 }
+
+/**
+ * @brief set up the backlight level to the given level.
+ * @param root the window's screen which will be set.
+ * @param level of the backlight between 0 and 100
+ */
+
+EAPI void
+ecore_x_randr_screen_backlight_level_set(Ecore_X_Window root, double level)
+{
+#ifdef ECORE_XRANDR
+   RANDR_CHECK_1_2_RET();
+   
+   /* 
+    *  maybe move this in the init part the module.
+    *  Initialize it if not already initialized 
+    */
+
+   if((level < 0)||(level > 100))
+     {
+       WRN("Wrong value for the backlight level. It should be between 0 and 100.");
+       return;
+     }
+
+   if(_backlight == None)
+     _backlight = XInternAtom (_ecore_x_disp, RANDR_PROPERTY_BACKLIGHT, True);
+
+   // Clearly the server does not support it.
+   if(_backlight == None)
+     {
+       ERR("Backlight property is not suppported on this server");
+       return;
+     }
+   
+   /* get the ressources */
+   XRRScreenResources  *resources = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root);
+   
+   int o;
+  
+   if (!resources) return;
+   for (o = 0; o < resources->noutput; o++)
+     {
+       Ecore_X_Randr_Output	output = resources->outputs[o];
+       if (ecore_x_randr_output_backlight_level_get(root, output) != -1)
+	 {
+	   ecore_x_randr_output_backlight_level_set(root, output, level);
+	 }
+     }
+   XRRFreeScreenResources (resources);
+#endif  
+}
+
+/*
+ * @brief get the backlight level of the given output
+ * @param root window which's screen should be queried 
+ * @param output from which the backlight level should retrieved 
+ * @return the backlight level 
+ */
+
+
+EAPI double
+ecore_x_randr_output_backlight_level_get(Ecore_X_Window root,
+                                         Ecore_X_Randr_Output output)
+{
+#ifdef ECORE_XRANDR
+   RANDR_CHECK_1_2_RET(-1);  
+   unsigned long   nitems;
+   unsigned long   bytes_after;
+   unsigned char   *prop;
+   Atom	    actual_type;
+   int	    actual_format;
+   long	    value;
+   
+   if(_backlight == None)
+     _backlight = XInternAtom (_ecore_x_disp, RANDR_PROPERTY_BACKLIGHT, True);
+   if(_backlight == None)
+     {
+       ERR("Backlight property is not suppported on this server");
+       return -1;
+     }
+
+   if(!_ecore_x_randr_output_validate(root, output))
+     return -1;
+   
+   if (XRRGetOutputProperty (_ecore_x_disp, output, _backlight,
+			     0, 4, False, False, None,
+			     &actual_type, &actual_format,
+			     &nitems, &bytes_after, &prop) != Success) {
+     WRN("Backlight not supported on this output");
+     return -1;
+   }
+   
+   if (actual_type != XA_INTEGER || nitems != 1 || actual_format != 32)
+     value = -1;
+   else
+     value = *((long *) prop);
+   free (prop);
+   return value;
+#else
+   return -1;
+#endif
+}
+
+/*
+ * @brief set the backlight level of a given output 
+ * @param root window which's screen should be queried
+ * @param output that should be set
+ * @param level for which the backlight should be set
+ * @return EINA_TRUE in case of success 
+ */
+
+EAPI Eina_Bool
+ecore_x_randr_output_backlight_level_set(Ecore_X_Window root,
+                                         Ecore_X_Randr_Output output,
+                                         double level)
+{
+#ifdef ECORE_XRANDR
+  RANDR_CHECK_1_2_RET(EINA_FALSE);
+  if(!_ecore_x_randr_output_validate(root, output))
+    return;
+  
+  XRRPropertyInfo *info =  XRRQueryOutputProperty (_ecore_x_disp, output, _backlight);
+  if (info)
+    {
+      if (info->range && info->num_values == 2)
+	{
+	  double min = info->values[0];
+	  double max = info->values[1];
+	  double tmp = (level * (max - min) / 100) + min;
+	  long new = tmp;
+	  if (new > max) new = max;
+	  if (new < min) new = min;
+	  
+	  XRRChangeOutputProperty (_ecore_x_disp, output, _backlight, XA_INTEGER, 32,
+				   PropModeReplace, (unsigned char *) &new, 1);
+	  XFlush (_ecore_x_disp);
+	}
+      free(info);      
+      return EINA_TRUE;
+    }
+  
+  return EINA_FALSE;
+#else
+  return EINA_FALSE;
+#endif
+}
------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to