Hello,
Since the merge window is open, I would like to submit this patch for ecore. To
make it short, it is a modified version of the patch I send two weeks ago. It
implement backlight control through xrand extension.
Mathieu
Index: xlib/ecore_x_randr_12.c
===================================================================
--- xlib/ecore_x_randr_12.c (revision 56606)
+++ xlib/ecore_x_randr_12.c (working copy)
@@ -1904,3 +1904,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