_e_info_client_cb_focus_policy_ext(const Eldbus_Message *msg)
{
const char *errname = NULL, *errtext = NULL;
- const int result = 0;
+ Eina_Bool changed = EINA_FALSE;
+ int result = -1;
EINA_SAFETY_ON_TRUE_GOTO(eldbus_message_error_get(msg, &errname, &errtext), err);
+ EINA_SAFETY_ON_FALSE_GOTO(eldbus_message_arguments_get(msg, "bi", &changed, &result), err);
- EINA_SAFETY_ON_FALSE_GOTO(eldbus_message_arguments_get(msg, "i", &result), err);
-
- if (result >= 0)
+ if (changed)
printf("Successfully changed, now focus_policy_ext=%d\n", result);
+ else if (result >= 0)
+ printf("now focus_policy_ext=%d\n", result);
else
- printf("value change failed\n");
+ printf("Error occured\n");
return;
int input = -1;
Eina_Bool res;
- EINA_SAFETY_ON_FALSE_GOTO(argc == 3, usage);
+ EINA_SAFETY_ON_FALSE_GOTO(((argc == 2) || (argc == 3)), usage);
- input = atoi(argv[2]);
- if ((input != 0) && (input != 1) && (input != -1)) goto usage;
+ if (argc == 3)
+ {
+ input = atoi(argv[2]);
+ if ((input != 0) && (input != 1)) goto usage;
+ }
+ else
+ input = -1;
- res = _e_info_client_eldbus_message_with_args("focus_policy_ext_set", _e_info_client_cb_focus_policy_ext, "i", atoi(argv[2]));
+ res = _e_info_client_eldbus_message_with_args("focus_policy_ext_set", _e_info_client_cb_focus_policy_ext, "i", input);
EINA_SAFETY_ON_FALSE_RETURN(res);
return;
_e_info_server_cb_focus_policy_ext_set(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eldbus_Message *reply;
- int option = 0, res = -1;
+ int option = 0, res = -1, previous_policy;
+ Eina_Bool changed = EINA_FALSE;
if (!eldbus_message_arguments_get(msg, "i", &option))
{
"focus_policy_ext_set: an attempt to get argument from method call message failed");
}
- e_client_focus_defer_clear();
+ previous_policy = e_config->focus_policy_ext;
switch (option)
{
}
res = e_config->focus_policy_ext;
+ if (previous_policy != res)
+ {
+ e_client_focus_defer_clear();
+ changed = EINA_TRUE;
+ }
reply = eldbus_message_method_return_new(msg);
- eldbus_message_arguments_append(reply, "i", res);
+ eldbus_message_arguments_append(reply, "bi", changed, res);
return reply;
}
{ "input_region", ELDBUS_ARGS({"siiii", "options"}), ELDBUS_ARGS({"a(iiii)", "path"}), _e_info_server_cb_input_region, 0},
{ "hwc_wins", ELDBUS_ARGS({"i", "option"}), ELDBUS_ARGS({"as", "hwc wins info"}), _e_info_server_cb_hwc_wins_info_get, 0 },
{ "screen_info", ELDBUS_ARGS({"i", "option"}), ELDBUS_ARGS({"as", "screen info"}), _e_info_server_cb_screen_info_get, 0 },
- { "focus_policy_ext_set", ELDBUS_ARGS({"i", "option"}), ELDBUS_ARGS({"i", "result"}), _e_info_server_cb_focus_policy_ext_set, 0 },
+ { "focus_policy_ext_set", ELDBUS_ARGS({"i", "option"}), ELDBUS_ARGS({"bi", "isChanged and result"}), _e_info_server_cb_focus_policy_ext_set, 0 },
{ "focus_history", NULL, ELDBUS_ARGS({"a(ubbbs)", "history array"}), _e_info_server_cb_focus_history, 0 },
{ "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},