From dc10f75f79a63c85323601620e02d972e98c8e54 Mon Sep 17 00:00:00 2001 From: jeon Date: Fri, 17 Apr 2020 14:08:25 +0900 Subject: [PATCH] e_info: add a option to filter to set specific window Change-Id: I138a2d01788f56158e2e5b63a81b56da9e3a7b8b --- src/bin/e_info_client.c | 25 +++++++++++- src/bin/e_info_server.c | 74 +++++++++++++++++++++++++++++++++-- src/bin/e_info_shared_types.h | 6 ++- 3 files changed, 99 insertions(+), 6 deletions(-) diff --git a/src/bin/e_info_client.c b/src/bin/e_info_client.c index bd0f4dcc7f..62c295aac2 100644 --- a/src/bin/e_info_client.c +++ b/src/bin/e_info_client.c @@ -5818,12 +5818,35 @@ _e_info_client_proc_apply_filter(int argc, char **argv) res = _e_info_client_eldbus_message_with_args("filter", _e_info_client_cb_filter, - "is", + "sis", + "0x0", onoff, argv[2]); if (!res) printf("Error occured while sending message\n\n"); return; } + else if (argc == 5) + { + EINA_SAFETY_ON_FALSE_GOTO((!strcmp(argv[3], "blur")) || + (!strcmp(argv[3], "grayscale")) || + (!strcmp(argv[3], "inverse_color")), usage); + EINA_SAFETY_ON_FALSE_GOTO((!strcmp(argv[4], "on")) || + (!strcmp(argv[4], "off")) || + (!strcmp(argv[4], "1")) || + (!strcmp(argv[4], "0")), usage); + + if (!strcmp(argv[4], "on") || !strcmp(argv[4], "1")) onoff = 1; + else onoff = 0; + + res = _e_info_client_eldbus_message_with_args("filter", + _e_info_client_cb_filter, + "sis", + argv[2], + onoff, + argv[3]); + if (!res) printf("Error occured while sending message\n\n"); + return; + } usage: printf("Usage: %s", USAGE_FILTER); diff --git a/src/bin/e_info_server.c b/src/bin/e_info_server.c index 0c335923c9..bbe1d0ce48 100644 --- a/src/bin/e_info_server.c +++ b/src/bin/e_info_server.c @@ -6655,16 +6655,83 @@ _e_info_server_cb_filter(const Eldbus_Service_Interface *iface EINA_UNUSED, cons { Eldbus_Message *reply; int onoff = -1; - const char *filter_name = NULL; + const char *filter_name = NULL, *win_str = NULL; char msg_to_client[125] = {0}; + unsigned long tmp = 0; + uint64_t win_number = 0; + Evas_Object *o; + E_Client *ec; + Ecore_Window win; + Eina_Bool res; - if (!eldbus_message_arguments_get(msg, "is", &onoff, &filter_name)) + if (!eldbus_message_arguments_get(msg, "sis", &win_str, &onoff, &filter_name)) { return eldbus_message_error_new(msg, GET_CALL_MSG_ARG_ERR, "filetr: failed to get arguments from method call message"); } reply = eldbus_message_method_return_new(msg); + if (strlen(win_str) >= 2 && win_str[0] == '0' && win_str[1] == 'x') + res = e_util_string_to_ulong(win_str, &tmp, 16); + else + res = e_util_string_to_ulong(win_str, &tmp, 10); + + if (!res) + { + snprintf(msg_to_client, sizeof(msg_to_client), "Invalid window id: %s\n", win_str); + goto reply; + } + + win_number = (uint64_t)tmp; + + if (win_number != 0x0) + { + for (o = evas_object_top_get(e_comp->evas); o; o = evas_object_below_get(o)) + { + ec = evas_object_data_get(o, "E_Client"); + if (!ec) continue; + win = e_client_util_win_get(ec); + if (win != win_number) continue; + + if (onoff == 0) + { + e_comp_object_image_filter_set(ec->frame, E_COMP_IMAGE_FILTER_NONE); + snprintf(msg_to_client, sizeof(msg_to_client), "%s window filter has been unset.\n", win_str); + } + else + { + if (!strcmp(filter_name, "blur")) + { + e_comp_object_image_filter_set(ec->frame, E_COMP_IMAGE_FILTER_BLUR); + snprintf(msg_to_client, sizeof(msg_to_client), "%s window filter %s is set!", win_str, filter_name); + } + else if (!strcmp(filter_name, "grayscale")) + { + e_comp_object_image_filter_set(ec->frame, E_COMP_IMAGE_FILTER_GRAYSCALE); + snprintf(msg_to_client, sizeof(msg_to_client), "%s window filter %s is set!", win_str, filter_name); + } + else if (!strcmp(filter_name, "inverse_color")) + { + e_comp_object_image_filter_set(ec->frame, E_COMP_IMAGE_FILTER_INVERSE); + snprintf(msg_to_client, sizeof(msg_to_client), "%s window filter %s is set!", win_str, filter_name); + } + else + { + e_comp_object_image_filter_set(ec->frame, E_COMP_IMAGE_FILTER_NONE); + snprintf(msg_to_client, sizeof(msg_to_client), "%s window filter %s is NOT supported!", win_str, filter_name); + } + } + + e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); + e_comp_object_dirty(ec->frame); + e_comp_object_render(ec->frame); + + goto reply; + } + snprintf(msg_to_client, sizeof(msg_to_client), "Invalid window id: %s\n", win_str); + goto reply; + } + if (onoff == -1) { char current_filter[15] = {0}; @@ -6711,6 +6778,7 @@ _e_info_server_cb_filter(const Eldbus_Service_Interface *iface EINA_UNUSED, cons "Filter %s is set!\n", filter_name); } +reply: eldbus_message_arguments_append(reply, "s", msg_to_client); return reply; @@ -6800,7 +6868,7 @@ static const Eldbus_Method methods[] = { { "init_device", ELDBUS_ARGS({"us", "device information"}), ELDBUS_ARGS({"s", "result message"}), _e_info_server_cb_init_device, 0}, { "deinit_device", NULL, NULL, _e_info_server_cb_deinit_device, 0}, { "keygen", ELDBUS_ARGS({"sii", "key information"}), ELDBUS_ARGS({"s", "result message"}), _e_info_server_cb_keygen, 0}, - { "filter", ELDBUS_ARGS({"is", "on(1)/off(0), filter name"}), ELDBUS_ARGS({"s", "result of request"}), _e_info_server_cb_filter, 0}, + { "filter", ELDBUS_ARGS({"sis", "win_id, on(1)/off(0), filter name"}), ELDBUS_ARGS({"s", "result of request"}), _e_info_server_cb_filter, 0}, { NULL, NULL, NULL, NULL, 0 } }; diff --git a/src/bin/e_info_shared_types.h b/src/bin/e_info_shared_types.h index 6125e803db..bd662f077a 100644 --- a/src/bin/e_info_shared_types.h +++ b/src/bin/e_info_shared_types.h @@ -298,14 +298,16 @@ typedef enum /* FILTER */ /* -------------------------------------------------------------------------- */ #define USAGE_FILTER \ - "-filter ( blur | grayscale | inverse ) ( on | off)\n" \ + "-filter {window id} ( blur | grayscale | inverse ) ( on | off)\n" \ "Example:\n" \ "\twinfo -filter blur on\n" \ "\twinfo -filter blur off\n" \ "\twinfo -filter grayscale on\n" \ "\twinfo -filter grayscale off\n" \ "\twinfo -filter inverse_color on\n" \ - "\twinfo -filter inverse_color off\n" + "\twinfo -filter inverse_color off\n\n" \ + "\twinfo -filter 0xabcabcde blur on\n" \ + "\twinfo -filter 0xbcaa11aa grayscale off\n" \ /* -------------------------------------------------------------------------- */ /* DESK GROUP */ -- 2.34.1