From f3457218975679cd5d878496f06caa76a9464ba2 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Sat, 2 Jun 2018 16:27:35 +0900 Subject: [PATCH] client opacity hint handling in x - fix handling to do 0-ffffffff right e was not properly handling the opacity hint in its 0-0xffffffff range. in one case it converted e's color value to this range but just with << 24 which is wrong as it then ignors the next 24 lower value bits, so it should fill the next 3 bytes with repeats of the same value to do this right, but far worse is on READING the value it just used the value as-is as if it were a 0-ff (0-255) alpha value that we use in evas and didnt "thunk it down" with val >> 24. this resulted in renoise menus being blank as renoise set the opacity value on its menu windows and e happily made them transparent thanks to this. this fixes that. not to peolpe fro the above. bitshifting DOWN is ok, but bitshifting UP leaves the lower bits all 0 and you should fill this range with repetitions of the value to properly scale in integert space with bitshifts. :) @fix --- src/bin/e_comp_x.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index 9c96d582e..fc40de677 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -810,7 +810,7 @@ _e_comp_x_post_client_idler_cb(void *d EINA_UNUSED) evas_object_color_get(ec->frame, NULL, NULL, NULL, &op); ec->netwm.opacity = op; - opacity = (op << 24); + opacity = (op << 24) | (op << 16) | (op << 8) | op; ecore_x_window_prop_card32_set(e_client_util_win_get(ec), ECORE_X_ATOM_NET_WM_WINDOW_OPACITY, &opacity, 1); /* flag gets unset in property cb to avoid fetching opacity after we just set it */ } @@ -4059,11 +4059,11 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec) if (ecore_x_netwm_opacity_get(win, &val)) { + val >>= 24; if (ec->netwm.opacity != val) { ec->netwm.opacity = val; - evas_object_color_set(ec->frame, - ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity); + evas_object_color_set(ec->frame, val, val, val, val); rem_change = 1; } ec->netwm.fetch.opacity = !ec->netwm.opacity;