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