summaryrefslogtreecommitdiff
path: root/src/examples/elementary/a11y/efl-gtk-integration/plug/efl-socket.c
blob: 082faada6f5062db5e38e0a3187af109a40c1531 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#define EFL_BETA_API_SUPPORT
#define EFL_EO_API_SUPPORT
#include <Elementary.h>

static struct app_state {
     Evas_Object *entry;
     Elm_Atspi_Socket *socket;
     Elm_Atspi_Socket *proxy;
     Evas_Object *container;
} state;

static void a11y_init(void)
{
   if (state.socket)
     efl_del(state.socket)

   if (!elm_entry_is_empty(state.entry))
     {
        printf("Embedded plug: %s\n", elm_object_text_get(state.entry));
        state.socket = efl_add(ELM_ATSPI_SOCKET_CLASS, NULL);
        // Weird constructor
        state.proxy = efl_add(ELM_ATSPI_PROXY_CLASS, NULL, elm_atspi_proxy_id_constructor(efl_added, elm_object_text_get(state.entry)));

        // fires accessible parent should be set to eo_parent (???)
        elm_interface_atspi_accessible_parent_set(state.socket, state.container);
        // following line shuold be not necessary:

        elm_interface_atspi_accessible_parent_set(state.proxy, state.socket);

        // FIXME order matters =  should be fixed!!!
        // if state.socket is not attached to tree, embed will have empty
        // implemnetation
        elm_interface_atspi_socket_embed(state.socket, state.proxy);
     }
}

static void
_connect_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
   if (elm_config_atspi_mode_get())
     a11y_init();
   else
     printf("Atspi mode is not enabled. Adjust elementary configuration using elementary_config app\n");
}

static void
_create_layout(Evas_Object *win)
{
   Evas_Object *box = elm_box_add(win);
   evas_object_size_hint_expand_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   elm_win_resize_object_add(win, box);

   Evas_Object *label = elm_label_add(box);
   evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
   elm_object_text_set(label, "Past Plug Id here:");
   elm_box_pack_end(box, label);
   evas_object_show(label);

   Evas_Object *entry = elm_entry_add(box);
   elm_entry_single_line_set(entry, EINA_TRUE);
   elm_entry_scrollable_set(entry, EINA_TRUE);
   evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
   elm_box_pack_end(box, entry);
   evas_object_show(entry);
   state.entry = entry;

   Evas_Object *button = elm_button_add(box);
   elm_object_text_set(button, "Connect");
   elm_box_pack_end(box, button);
   evas_object_smart_callback_add(button, "clicked", _connect_clicked_cb, NULL);
   evas_object_show(button);

   state.container = elm_label_add(box);
   evas_object_size_hint_align_set(state.container, EVAS_HINT_FILL, EVAS_HINT_FILL);
   elm_object_text_set(state.container, "Embedded content goes here:");
   elm_box_pack_end(box, state.container);
   evas_object_show(state.container);

   evas_object_show(box);
}

int elm_main(int argc, char **argv)
{
   Evas_Object *win = elm_win_util_standard_add("Efl socket", "Efl socket");
   elm_win_autodel_set(win, EINA_TRUE);
   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
   evas_object_resize(win, 300, 200);

   _create_layout(win);

   evas_object_show(win);
   elm_run();
   return 0;
}

ELM_MAIN();