Tizen 2.1 base
[framework/uifw/ecore.git] / src / examples / ecore_event_example_02.c
1 #include <Ecore.h>
2 #include <unistd.h>
3
4 struct context   // helper struct to give some context to the callbacks
5 {
6    const char          *str1, *str2;
7    Ecore_Event_Handler *handler1;
8    Ecore_Event_Handler *handler2;
9 };
10
11 static _event_type = 0; // a new type of event will be defined and stored here
12
13 static Eina_Bool
14 _event_handler1_cb(void *data, int type, void *event)
15 {
16    int *number = event;
17    const char *str = data;
18
19    printf("event_handler1: number=%d, data=\"%s\".\n", *number, str);
20
21    if ((*number % 2) == 0)
22      return ECORE_CALLBACK_DONE;
23
24    return ECORE_CALLBACK_PASS_ON;
25 }
26
27 static Eina_Bool
28 _event_handler2_cb(void *data, int type, void *event) // event callback
29 {
30    struct context *ctxt = data;
31    int *number = event;
32
33    printf("event_handler2: number=%d.\n", *number);
34
35    if (*number == 5)
36      {
37         const char *old = NULL;
38         old = ecore_event_handler_data_set(ctxt->handler1, (void *)ctxt->str2);
39         printf("changed handler1 data from \"%s\" to \"%s\".\n",
40                old, ctxt->str2);
41      }
42    else if (*number >= 10)
43      {
44         printf("finish main loop.\n");
45         ecore_main_loop_quit();
46      }
47
48    return ECORE_CALLBACK_DONE; // same as EINA_FALSE
49 }
50
51 int
52 main(int argc, char **argv)
53 {
54    struct context ctxt = {0};
55    int i;
56    ctxt.str1 = "dataone";
57    ctxt.str2 = "datatwo";
58
59    if (!ecore_init())
60      {
61         printf("ERROR: Cannot init Ecore!\n");
62         return -1;
63      }
64
65    _event_type = ecore_event_type_new();
66
67    ctxt.handler1 = ecore_event_handler_add(_event_type,
68                                            _event_handler1_cb,
69                                            ctxt.str1);
70    ctxt.handler2 = ecore_event_handler_add(_event_type,
71                                            _event_handler2_cb,
72                                            &ctxt);
73
74    for (i = 0; i <= 15; i++)
75      {
76         int *event_data = malloc(sizeof(*event_data));
77         *event_data = i;
78         ecore_event_add(_event_type, event_data, NULL, NULL);
79      }
80
81    printf("start the main loop.\n");
82
83    ecore_main_loop_begin();
84
85    ecore_shutdown();
86
87    return 0;
88 }
89