e_info: add output mode setting function 54/172854/2
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 16 Mar 2018 09:11:35 +0000 (18:11 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Fri, 30 Mar 2018 01:42:10 +0000 (01:42 +0000)
Change-Id: I1683b327b4ee57b5fe60c321d028acf14016628f
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/bin/e_info_client.c
src/bin/e_info_server.c
src/bin/e_info_shared_types.h

index 03a608f..0e9e70e 100644 (file)
@@ -2818,11 +2818,36 @@ _e_info_client_proc_output_mode(int argc, char **argv)
       "suspend",
       "off"
    };
+   int count = 0;
+
+   if (argc == 2)
+     {
+        if (!_e_info_client_eldbus_message_with_args("output_mode", _cb_output_mode_info,
+                                                     SIGNATURE_OUTPUT_MODE_CLIENT, E_INFO_CMD_OUTPUT_MODE_GET, 0))
+          {
+             printf("_e_info_client_proc_output_mode fail (%d)\n", E_INFO_CMD_OUTPUT_MODE_GET);
+             return;
+          }
+     }
+   else if (argc == 3)
+     {
+        if ((argv[2][0] < '0' || argv[2][0] > '9'))
+          {
+             printf("Error: invalid argument\n");
+             return;
+          }
 
-   if (!_e_info_client_eldbus_message_with_args("output_mode", _cb_output_mode_info,
-                                                SIGNATURE_OUTPUT_MODE_CLIENT, E_INFO_CMD_OUTPUT_MODE_GET, 0))
+        count = atoi(argv[2]);
+        if (!_e_info_client_eldbus_message_with_args("output_mode", _cb_output_mode_info,
+                                                     SIGNATURE_OUTPUT_MODE_CLIENT, E_INFO_CMD_OUTPUT_MODE_SET, count))
+          {
+             printf("_e_info_client_proc_output_mode fail (%d)\n", E_INFO_CMD_OUTPUT_MODE_SET);
+             return;
+          }
+     }
+   else
      {
-        printf("_e_info_client_proc_output_mode fail (%d)\n", 1);
+        printf("Error: invalid argument\n");
         return;
      }
 
@@ -4561,7 +4586,8 @@ static struct
       _e_info_client_proc_screen_shot
    },
    {
-      "output_mode", NULL,
+      "output_mode",
+      "[mode number to set]",
       "Get output mode info",
       _e_info_client_proc_output_mode
    },
index 7f4b8dc..1a43acd 100644 (file)
@@ -3938,10 +3938,12 @@ _e_info_server_cb_screen_dump(const Eldbus_Service_Interface *iface EINA_UNUSED,
 }
 
 static void
-_output_mode_msg_clients_append(Eldbus_Message_Iter *iter, E_Comp_Screen *e_comp_screen, int gl)
+_output_mode_msg_clients_append(Eldbus_Message_Iter *iter, E_Comp_Screen *e_comp_screen, int gl, int mode, int mode_count)
 {
+   E_Output *primary_output = NULL;
    Eldbus_Message_Iter *array_of_mode;
    Eldbus_Message_Iter *struct_of_mode;
+   E_Output_Mode *set_mode = NULL;
    int i, count;
 
    eldbus_message_iter_arguments_append(iter, "a("SIGNATURE_OUTPUT_MODE_SERVER")",
@@ -3961,6 +3963,37 @@ _output_mode_msg_clients_append(Eldbus_Message_Iter *iter, E_Comp_Screen *e_comp
         return;
      }
 
+   if (mode == E_INFO_CMD_OUTPUT_MODE_SET)
+     {
+        E_Output_Mode *emode = NULL;
+        Eina_List *modelist = NULL, *l = NULL;
+        int num;
+
+        primary_output = e_comp_screen_primary_output_get(e_comp->e_comp_screen);
+
+        modelist = e_output_mode_list_get(primary_output);
+        if (modelist)
+          {
+             num = eina_list_count(modelist);
+             if (mode_count >= 0 && mode_count < num)
+               {
+                  count = 0;
+                  EINA_LIST_FOREACH(modelist, l, emode)
+                    {
+                       if (count == mode_count)
+                         {
+                            set_mode = emode;
+                            break;
+                         }
+                       count++;
+                    }
+               }
+
+             if (set_mode)
+               e_output_mode_change(primary_output, set_mode);
+          }
+     }
+
    count = e_comp_screen->num_outputs;
 
    for (i = 0; i < count; i++)
@@ -4035,15 +4068,16 @@ _e_info_server_cb_output_mode(const Eldbus_Service_Interface *iface EINA_UNUSED,
         return reply;
      }
 
-   if (mode == E_INFO_CMD_OUTPUT_MODE_GET)
+   if ((mode == E_INFO_CMD_OUTPUT_MODE_GET) ||
+       (mode == E_INFO_CMD_OUTPUT_MODE_SET))
      {
         e_comp_screen = e_comp->e_comp_screen;
         tdpy = e_comp_screen->tdisplay;
 
         if (tdpy != NULL)
-          _output_mode_msg_clients_append(eldbus_message_iter_get(reply), e_comp_screen, 1);
+          _output_mode_msg_clients_append(eldbus_message_iter_get(reply), e_comp_screen, 1, mode, count);
         else
-          _output_mode_msg_clients_append(eldbus_message_iter_get(reply), e_comp_screen, 0);
+          _output_mode_msg_clients_append(eldbus_message_iter_get(reply), e_comp_screen, 0, 0, 0);
      }
 
    return reply;
index 3b79b75..26124f8 100644 (file)
@@ -100,7 +100,8 @@ typedef enum _E_Info_Cmd_Scrsaver
 typedef enum _E_Info_Cmd_Output_Mode
 {
    E_INFO_CMD_OUTPUT_MODE_UNKNOWN,
-   E_INFO_CMD_OUTPUT_MODE_GET
+   E_INFO_CMD_OUTPUT_MODE_GET,
+   E_INFO_CMD_OUTPUT_MODE_SET
 } E_Info_Cmd_Output_Mode;
 
 #define SIGNATURE_OUTPUT_MODE_CLIENT "ii" /* i: E_Info_Cmd_Output_Mode