1 #ifdef HAVE_CONFIG_H
2 # include "elementary_config.h"
3 #endif
4 #include <Elementary.h>
5
6 #define WIDTH 320
7 #define HEIGHT 160
8
9 struct _Sys_Notify_Data {
10 Evas_Object *l;
11 Evas_Object *n;
12 Ecore_Event_Handler *handlers[2];
13 };
14 typedef struct _Sys_Notify_Data Sys_Notify_Data;
15
16 static Eina_Bool
_ev_handler(void * data EINA_UNUSED,int type,void * event)17 _ev_handler(void *data EINA_UNUSED,
18 int type,
19 void *event)
20 {
21 Elm_Sys_Notify_Notification_Closed *closed;
22 Elm_Sys_Notify_Action_Invoked *action;
23
24 if (type == ELM_EVENT_SYS_NOTIFY_NOTIFICATION_CLOSED)
25 {
26 closed = event;
27 printf("Notification Closed Event: %u %d.\n",
28 closed->id, closed->reason);
29 }
30 else if (type == ELM_EVENT_SYS_NOTIFY_ACTION_INVOKED)
31 {
32 action = event;
33 printf("Notification Action Event: %u %s.\n",
34 action->id, action->action_key);
35 }
36 else
37 return ECORE_CALLBACK_PASS_ON;
38
39 return ECORE_CALLBACK_DONE;
40 }
41
_sys_notify_cb(void * data,unsigned int id EINA_UNUSED)42 static void _sys_notify_cb(void *data, unsigned int id EINA_UNUSED)
43 {
44 Sys_Notify_Data *notify_data = data;
45
46 elm_object_text_set(notify_data->l, "notify is done");
47 evas_object_show(notify_data->n);
48 }
49
50 static void
_bt_clicked(void * data,Evas_Object * obj,void * event_info EINA_UNUSED)51 _bt_clicked(void *data,
52 Evas_Object *obj,
53 void *event_info EINA_UNUSED)
54 {
55 Evas_Object *s, *b;
56 s = evas_object_data_get(obj, "summary");
57 b = evas_object_data_get(obj, "body");
58
59 elm_sys_notify_send(0, "", elm_entry_entry_get(s), elm_entry_entry_get(b),
60 ELM_SYS_NOTIFY_URGENCY_NORMAL,
61 -1, _sys_notify_cb, data);
62 }
63
64 static void
_test_sys_notify_win_del_cb(void * data,Evas * e EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)65 _test_sys_notify_win_del_cb(void *data,
66 Evas *e EINA_UNUSED,
67 Evas_Object *obj EINA_UNUSED,
68 void *event_info EINA_UNUSED)
69 {
70 Sys_Notify_Data *notify_data = data;
71 ecore_event_handler_del(notify_data->handlers[0]);
72 ecore_event_handler_del(notify_data->handlers[1]);
73
74 free(notify_data);
75 }
76
77 void
test_sys_notify(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)78 test_sys_notify(void *data EINA_UNUSED,
79 Evas_Object *obj EINA_UNUSED,
80 void *event_info EINA_UNUSED)
81 {
82 Evas_Object *win, *bx, *it, *btn;
83 Evas_Object *s, *b, *n, *l;
84 Sys_Notify_Data *notify_data;
85
86 elm_need_sys_notify();
87
88 notify_data = malloc(sizeof(Sys_Notify_Data));
89
90 win = elm_win_add(NULL, "Sys Notify", ELM_WIN_BASIC);
91 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
92 elm_win_title_set(win, "System Notification");
93 elm_win_autodel_set(win, EINA_TRUE);
94 evas_object_event_callback_add(win, EVAS_CALLBACK_DEL,
95 _test_sys_notify_win_del_cb, notify_data);
96
97 it = elm_bg_add(win);
98 elm_win_resize_object_add(win, it);
99 evas_object_size_hint_min_set(it, WIDTH, HEIGHT);
100 evas_object_size_hint_max_set(it, WIDTH, HEIGHT);
101 evas_object_show(it);
102
103 notify_data->n = n = elm_notify_add(win);
104 evas_object_size_hint_weight_set(n, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
105 elm_notify_align_set(n, 0.5, 0.0);
106 elm_notify_timeout_set(n, 2.0);
107
108 notify_data->l = l = elm_label_add(win);
109 elm_object_content_set(n, l);
110 evas_object_show(l);
111
112 bx = elm_box_add(win);
113 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
114 elm_win_resize_object_add(win, bx);
115 evas_object_show(bx);
116
117 s = elm_entry_add(win);
118 elm_entry_single_line_set(s, EINA_TRUE);
119 elm_entry_scrollable_set(s, EINA_TRUE);
120 elm_entry_entry_set(s, "Summary");
121 evas_object_size_hint_align_set(s, EVAS_HINT_FILL, EVAS_HINT_FILL);
122 elm_box_pack_end(bx, s);
123 evas_object_show(s);
124
125 b = elm_entry_add(win);
126 elm_entry_single_line_set(b, EINA_TRUE);
127 elm_entry_scrollable_set(b, EINA_TRUE);
128 elm_entry_entry_set(b, "Body long description.");
129 evas_object_size_hint_align_set(b, EVAS_HINT_FILL, EVAS_HINT_FILL);
130 elm_box_pack_end(bx, b);
131 evas_object_show(b);
132
133 btn = elm_button_add(win);
134 elm_object_text_set(btn, "Send Notification");
135 evas_object_smart_callback_add(btn, "clicked", _bt_clicked, notify_data);
136 evas_object_data_set(btn, "summary", s);
137 evas_object_data_set(btn, "body", b);
138 elm_box_pack_end(bx, btn);
139 evas_object_show(btn);
140
141 evas_object_resize(win, WIDTH, HEIGHT);
142 evas_object_show(win);
143
144 notify_data->handlers[0] = ecore_event_handler_add(ELM_EVENT_SYS_NOTIFY_NOTIFICATION_CLOSED,
145 _ev_handler, notify_data);
146 notify_data->handlers[1] = ecore_event_handler_add(ELM_EVENT_SYS_NOTIFY_ACTION_INVOKED,
147 _ev_handler, notify_data);
148 }
149