use E_FREE
[platform/upstream/enlightenment.git] / src / bin / e_entry_dialog.c
1 #include "e.h"
2
3 /* Private function definitions */
4 static void _e_entry_dialog_free(E_Entry_Dialog *dia);
5 static void _e_entry_dialog_ok(void *data, E_Dialog *dia);
6 static void _e_entry_dialog_cancel(void *data, E_Dialog *dia);
7 static void _e_entry_dialog_delete(E_Win *win);
8
9 /* Externally accesible functions */
10 EAPI E_Entry_Dialog *
11 e_entry_dialog_show(const char *title, const char *icon, const char *text,
12                     const char *initial_text,
13                     const char *button_text, const char *button2_text,
14                     void (*func)(char *text, void *data), 
15                     void (*func2)(void *data), void *data) 
16 {
17    E_Entry_Dialog *ed;
18    E_Dialog *dia;
19    Evas_Object *o, *ob;
20    int w, h;
21
22    ed = E_OBJECT_ALLOC(E_Entry_Dialog, E_ENTRY_DIALOG_TYPE, _e_entry_dialog_free);
23    ed->ok.func = func;
24    ed->ok.data = data;
25    ed->cancel.func = func2;
26    ed->cancel.data = data;
27    ed->text = strdup(initial_text);
28    
29    dia = e_dialog_new(e_container_current_get(e_manager_current_get()));
30    if (!dia) 
31      {
32         E_FREE(ed);
33         return;
34      }
35    dia->data = ed;
36    ed->dia = dia;
37    
38    e_win_delete_callback_set(dia->win, _e_entry_dialog_delete);
39    
40    if (title) e_dialog_title_set(dia, title);
41    if (icon) e_dialog_icon_set(dia, icon, 64);
42    
43    o = e_widget_list_add(dia->win->evas, 0, 0);
44    if (text) 
45      {
46         ob = e_widget_label_add(dia->win->evas, text);
47         e_widget_list_object_append(o, ob, 1, 0, 0.5);
48      }
49    
50    ed->entry = e_widget_entry_add(dia->win->evas, &(ed->text));
51    e_widget_list_object_append(o, ed->entry, 1, 1, 0.5);
52    e_widget_min_size_get(o, &w, &h);
53    e_dialog_content_set(dia, o, w, h);
54    
55    e_dialog_button_add(dia, !button_text ? _("Ok") : button_text, NULL, _e_entry_dialog_ok, ed);
56    e_dialog_button_add(dia, !button2_text ? _("Cancel") : button2_text, NULL, _e_entry_dialog_cancel, ed);
57    
58    e_win_centered_set(dia->win, 1);
59    e_dialog_show(dia);
60    return ed;
61 }
62
63 /* Private Function Bodies */
64 static void
65 _e_entry_dialog_free(E_Entry_Dialog *ed)
66 {
67    e_object_del(E_OBJECT(ed->dia));
68    E_FREE(ed->text);
69    free(ed);
70 }
71     
72 static void
73 _e_entry_dialog_ok(void *data, E_Dialog *dia) 
74 {
75    E_Entry_Dialog *ed;
76    
77    ed = data;
78    e_object_ref(E_OBJECT(ed));
79    if (ed->ok.func) ed->ok.func(ed->text, ed->ok.data);
80    e_object_del(E_OBJECT(ed));
81    e_object_unref(E_OBJECT(ed));
82 }
83
84 static void
85 _e_entry_dialog_cancel(void *data, E_Dialog *dia) 
86 {
87    E_Entry_Dialog *ed;
88    
89    ed = data;
90    e_object_ref(E_OBJECT(ed));
91    if (ed->cancel.func) ed->cancel.func(ed->cancel.data);
92    e_object_del(E_OBJECT(ed));
93    e_object_unref(E_OBJECT(ed));
94 }
95
96 static void
97 _e_entry_dialog_delete(E_Win *win) 
98 {
99    E_Dialog *dia;
100    E_Entry_Dialog *ed;
101    
102    dia = win->data;
103    ed = dia->data;
104    e_object_del(E_OBJECT(ed));
105 }