diff --git a/src/bin/e_backlight.c b/src/bin/e_backlight.c index e1978d381..e9879b24f 100644 --- a/src/bin/e_backlight.c +++ b/src/bin/e_backlight.c @@ -17,20 +17,10 @@ static int sysmode = MODE_NONE; static Ecore_Animator *bl_anim = NULL; static Eina_List *bl_devs = NULL; -static Ecore_Event_Handler *_e_backlight_handler_config_mode = NULL; -static Ecore_Event_Handler *_e_backlight_handler_border_fullscreen = NULL; -static Ecore_Event_Handler *_e_backlight_handler_border_unfullscreen = NULL; -static Ecore_Event_Handler *_e_backlight_handler_border_remove = NULL; -static Ecore_Event_Handler *_e_backlight_handler_border_iconify = NULL; -static Ecore_Event_Handler *_e_backlight_handler_border_uniconify = NULL; -static Ecore_Event_Handler *_e_backlight_handler_border_desk_set = NULL; -static Ecore_Event_Handler *_e_backlight_handler_desk_show = NULL; - static void _e_backlight_update(E_Zone *zone); static void _e_backlight_set(E_Zone *zone, double val); static Eina_Bool _bl_anim(void *data, double pos); static Eina_Bool bl_avail = EINA_TRUE; -static Eina_Bool _e_backlight_handler(void *d, int type, void *ev); #ifndef WAYLAND_ONLY static Eina_Bool xbl_avail = EINA_FALSE; #endif @@ -57,30 +47,6 @@ e_backlight_init(void) eeze_init(); #endif - _e_backlight_handler_config_mode = ecore_event_handler_add - (E_EVENT_CONFIG_MODE_CHANGED, _e_backlight_handler, NULL); - - _e_backlight_handler_border_fullscreen = ecore_event_handler_add - (E_EVENT_CLIENT_FULLSCREEN, _e_backlight_handler, NULL); - - _e_backlight_handler_border_unfullscreen = ecore_event_handler_add - (E_EVENT_CLIENT_UNFULLSCREEN, _e_backlight_handler, NULL); - - _e_backlight_handler_border_remove = ecore_event_handler_add - (E_EVENT_CLIENT_REMOVE, _e_backlight_handler, NULL); - - _e_backlight_handler_border_iconify = ecore_event_handler_add - (E_EVENT_CLIENT_ICONIFY, _e_backlight_handler, NULL); - - _e_backlight_handler_border_uniconify = ecore_event_handler_add - (E_EVENT_CLIENT_UNICONIFY, _e_backlight_handler, NULL); - - _e_backlight_handler_border_desk_set = ecore_event_handler_add - (E_EVENT_CLIENT_DESK_SET, _e_backlight_handler, NULL); - - _e_backlight_handler_desk_show = ecore_event_handler_add - (E_EVENT_DESK_SHOW, _e_backlight_handler, NULL); - #ifndef WAYLAND_ONLY if (e_comp_get(NULL)->man->root) xbl_avail = ecore_x_randr_output_backlight_available(); @@ -119,53 +85,7 @@ e_backlight_shutdown(void) bl_sys_pending_set = EINA_FALSE; eeze_shutdown(); #endif - if (_e_backlight_handler_config_mode) - { - ecore_event_handler_del(_e_backlight_handler_config_mode); - _e_backlight_handler_config_mode = NULL; - } - if (_e_backlight_handler_border_fullscreen) - { - ecore_event_handler_del(_e_backlight_handler_border_fullscreen); - _e_backlight_handler_border_fullscreen = NULL; - } - - if (_e_backlight_handler_border_unfullscreen) - { - ecore_event_handler_del(_e_backlight_handler_border_unfullscreen); - _e_backlight_handler_border_unfullscreen = NULL; - } - - if (_e_backlight_handler_border_remove) - { - ecore_event_handler_del(_e_backlight_handler_border_remove); - _e_backlight_handler_border_remove = NULL; - } - - if (_e_backlight_handler_border_iconify) - { - ecore_event_handler_del(_e_backlight_handler_border_iconify); - _e_backlight_handler_border_iconify = NULL; - } - - if (_e_backlight_handler_border_uniconify) - { - ecore_event_handler_del(_e_backlight_handler_border_uniconify); - _e_backlight_handler_border_uniconify = NULL; - } - - if (_e_backlight_handler_border_desk_set) - { - ecore_event_handler_del(_e_backlight_handler_border_desk_set); - _e_backlight_handler_border_desk_set = NULL; - } - - if (_e_backlight_handler_desk_show) - { - ecore_event_handler_del(_e_backlight_handler_desk_show); - _e_backlight_handler_desk_show = NULL; - } return 1; } @@ -273,14 +193,6 @@ e_backlight_devices_get(void) /* local subsystem functions */ -static Eina_Bool -_e_backlight_handler(void *d __UNUSED__, int type __UNUSED__, void *ev __UNUSED__) -{ - if (!bl_anim) - e_backlight_update(); - return ECORE_CALLBACK_PASS_ON; -} - static void _e_backlight_update(E_Zone *zone) { diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index 43e3306c1..98b312f7d 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -1,6 +1,9 @@ #include "e.h" #include +# define RANDR_VERSION_1_3 ((1 << 16) | 3) +# define RANDR_VERSION_1_4 ((1 << 16) | 4) + #define GRAV_SET(ec, grav) \ ecore_x_window_gravity_set(e_client_util_pwin_get(ec), grav); \ if (ec->comp_data->lock_win) ecore_x_window_gravity_set(ec->comp_data->lock_win, grav); \ @@ -51,6 +54,7 @@ static int screen_size_index = -1; static Ecore_Timer *screensaver_idle_timer = NULL; static Eina_Bool screensaver_dimmed = EINA_FALSE; +static Ecore_X_Atom backlight_atom = 0; static inline Ecore_X_Window _e_comp_x_client_window_get(const E_Client *ec) @@ -4300,6 +4304,14 @@ _e_comp_x_screensaver_notify_cb(void *data __UNUSED__, int type __UNUSED__, Ecor return ECORE_CALLBACK_PASS_ON; } +static Eina_Bool +_e_comp_x_backlight_notify_cb(void *data EINA_UNUSED, int t EINA_UNUSED, Ecore_X_Event_Randr_Output_Property_Notify *ev) +{ + if (ev->property == backlight_atom) + e_backlight_update(); + return ECORE_CALLBACK_RENEW; +} + static Eina_Bool _e_comp_x_cb_frame_extents_request(void *data EINA_UNUSED, int ev_type EINA_UNUSED, Ecore_X_Event_Frame_Extents_Request *ev) { @@ -5087,7 +5099,13 @@ e_comp_x_init(void) _e_comp_x_cb_frame_extents_request, NULL); E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_PING, _e_comp_x_cb_ping, NULL); - E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_comp_x_screensaver_notify_cb, NULL);; + E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_comp_x_screensaver_notify_cb, NULL); + E_LIST_HANDLER_APPEND(handlers, ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY, _e_comp_x_backlight_notify_cb, NULL); + if (ecore_x_randr_version_get() >= RANDR_VERSION_1_3) + backlight_atom = ecore_x_atom_get("Backlight"); + + if (!backlight_atom) + backlight_atom = ecore_x_atom_get("BACKLIGHT"); ecore_x_screensaver_custom_blanking_enable();