efl

Форк
0
/
test_win_keygrab.c 
243 строки · 7.2 Кб
1
#ifdef HAVE_CONFIG_H
2
# include "elementary_config.h"
3
#endif
4
#include <Elementary.h>
5

6

7
struct _api_data
8
{
9
   Evas_Object *win;
10
   Elm_Win_Keygrab_Mode mode;  /* Mode of keygr    */
11
   char keyname[PATH_MAX];     /* Keyname          */
12
};
13

14
typedef struct _api_data api_data;
15

16
static void
17
_rdg_changed_cb(void *data EINA_UNUSED, Evas_Object *obj,
18
               void *event_info EINA_UNUSED)
19
{
20
   int mode = -1;
21
   Elm_Win_Keygrab_Mode keygrab_mode = ELM_WIN_KEYGRAB_UNKNOWN;
22
   api_data *api = data;
23

24
   mode = elm_radio_value_get(obj);
25
   printf("radio group value : %d\n", mode);
26

27
   if (mode == 1)
28
     {
29
        keygrab_mode = ELM_WIN_KEYGRAB_SHARED;
30
        printf("keygrab mode = ELM_WIN_KEYGRAB_SHARED\n");
31
     }
32
   else if (mode == 2)
33
     {
34
        keygrab_mode = ELM_WIN_KEYGRAB_TOPMOST;
35
        printf("keygrab mode = ELM_WIN_KEYGRAB_TOPMOST\n");
36
     }
37
   else if (mode == 3)
38
     {
39
        keygrab_mode = ELM_WIN_KEYGRAB_EXCLUSIVE;
40
        printf("keygrab mode = ELM_WIN_KEYGRAB_EXCLUSIVE\n");
41
     }
42
   else if (mode == 4)
43
     {
44
        keygrab_mode = ELM_WIN_KEYGRAB_OVERRIDE_EXCLUSIVE;
45
        printf("keygrab mode = ELM_WIN_KEYGRAB_OVERRIDE_EXCLUSIVE\n");
46
     }
47
   else
48
     {
49
        keygrab_mode = ELM_WIN_KEYGRAB_UNKNOWN;
50
        printf("keygrab mode = ELM_WIN_KEYGRAB_UNKNOWN\n");
51
     }
52
   api->mode = keygrab_mode;
53
}
54

55
static void
56
_entry_changed_cb(void *data , Evas_Object *obj, void *event_info EINA_UNUSED)
57
{
58
   api_data *api = data;
59
   const char *str = elm_entry_entry_get(obj);
60
   if (!str) return;
61
   strncpy(api->keyname, str, PATH_MAX - 1);
62
   printf("entry: %s\n",str);
63
}
64

65
static void
66
_cleanup_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
67
{
68
   if (data)
69
     free(data);
70
}
71

72
static void
73
_set_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
74
{
75
   Eina_Bool ret = EINA_FALSE;
76
   api_data *api = data;
77

78
   ret = elm_win_keygrab_set(api->win, api->keyname, 0, 0, 0, api->mode);
79
   printf("Keyname:\"%s\" mode:\"%d\" keygrab set. ret=%d\n", api->keyname, api->mode, ret);
80
}
81

82
static void
83
_unset_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
84
{
85
   Eina_Bool ret = EINA_FALSE;
86
   api_data *api = data;
87

88
   ret = elm_win_keygrab_unset(api->win, api->keyname, 0, 0);
89
   printf("Keyname:\"%s\" mode:\"%d\" keygrab unset. ret=%d.\n", api->keyname, api->mode, ret);
90
}
91

92
static void
93
_group_1_create(Evas_Object *bx, api_data *api)
94
{
95
   Evas_Object *bx2, *fr, *lb, *en;
96

97
   fr = elm_frame_add(bx);
98
   elm_object_text_set(fr, "Keygrab Keyname");
99
   evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
100
   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
101
   elm_box_pack_end(bx, fr);
102
   evas_object_show(fr);
103

104
   bx2 = elm_box_add(fr);
105
   elm_object_content_set(fr, bx2);
106
   evas_object_show(bx2);
107

108
   lb = elm_label_add(bx2);
109
   elm_object_text_set(lb, " Keyname :");
110
   evas_object_size_hint_weight_set(lb, 0.0, EVAS_HINT_EXPAND);
111
   evas_object_size_hint_align_set(lb, 0.0, EVAS_HINT_FILL);
112
   elm_box_pack_end(bx2, lb);
113
   evas_object_show(lb);
114

115
   en = elm_entry_add(bx2);
116
   elm_entry_single_line_set(en, EINA_TRUE);
117
   elm_entry_scrollable_set(en, EINA_TRUE);
118
   evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
119
   evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
120
   evas_object_smart_callback_add(en, "changed,user", _entry_changed_cb, api);
121
   elm_box_pack_end(bx2, en);
122
   evas_object_show(en);
123
   elm_object_focus_set(en, EINA_TRUE);
124

125

126
}
127

128
static void
129
_group_2_create(Evas_Object *bx, api_data *api)
130
{
131
   Evas_Object *bx2, *fr, *rd, *rd1, *rd2, *rd3;
132

133
   fr = elm_frame_add(bx);
134
   elm_object_text_set(fr, "Keygrab Mode");
135
   evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
136
   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
137
   elm_box_pack_end(bx, fr);
138
   evas_object_show(fr);
139

140
   bx2 = elm_box_add(fr);
141
   elm_object_content_set(fr, bx2);
142
   elm_box_align_set(bx2, 0.0, 0.0);
143
   evas_object_show(bx2);
144

145
   // Shared
146
   rd = elm_radio_add(bx2);
147
   elm_radio_state_value_set(rd, 1);
148
   evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
149
   evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5);
150
   elm_object_text_set(rd, "Keygrab Shared Mode");
151
   elm_box_pack_end(bx2, rd);
152
   evas_object_show(rd);
153
   evas_object_smart_callback_add(rd, "changed", _rdg_changed_cb, api);
154

155
   // Topmost
156
   rd1 = elm_radio_add(bx2);
157
   elm_radio_state_value_set(rd1, 2);
158
   evas_object_size_hint_weight_set(rd1, EVAS_HINT_EXPAND, 0.0);
159
   evas_object_size_hint_align_set(rd1, EVAS_HINT_FILL, 0.5);
160
   elm_object_text_set(rd1, "Keygrab Topmost Mode");
161
   elm_radio_group_add(rd1, rd);
162
   elm_box_pack_end(bx2, rd1);
163
   evas_object_show(rd1);
164
   evas_object_smart_callback_add(rd1, "changed", _rdg_changed_cb, api);
165

166
   // Exclusive
167
   rd2 = elm_radio_add(bx2);
168
   elm_radio_state_value_set(rd2, 3);
169
   evas_object_size_hint_weight_set(rd2, EVAS_HINT_EXPAND, 0.0);
170
   evas_object_size_hint_align_set(rd2, EVAS_HINT_FILL, 0.5);
171
   elm_object_text_set(rd2, "Keygrab Exclusive Mode");
172
   elm_radio_group_add(rd2, rd);
173
   elm_box_pack_end(bx2, rd2);
174
   evas_object_show(rd2);
175
   evas_object_smart_callback_add(rd2, "changed", _rdg_changed_cb, api);
176

177
   //Override Exclusive
178
   rd3 = elm_radio_add(bx2);
179
   elm_radio_state_value_set(rd3, 4);
180
   evas_object_size_hint_weight_set(rd3, EVAS_HINT_EXPAND, 0.0);
181
   evas_object_size_hint_align_set(rd3, EVAS_HINT_FILL, 0.5);
182
   elm_object_text_set(rd3, "Keygrab Override Exclusive Mode");
183
   elm_radio_group_add(rd3, rd);
184
   elm_box_pack_end(bx2, rd3);
185
   evas_object_show(rd3);
186
   evas_object_smart_callback_add(rd3, "changed", _rdg_changed_cb, api);
187
}
188

189
static void
190
_group_3_create(Evas_Object *bx, api_data *api)
191
{
192
   Evas_Object *bt;
193

194
   bt = elm_button_add(bx);
195
   elm_object_text_set(bt, "Keygrab Set");
196
   elm_box_pack_end(bx, bt);
197

198
   evas_object_smart_callback_add(bt, "clicked", _set_bt_clicked, api);
199
   evas_object_show(bt);
200

201

202
   bt = elm_button_add(bx);
203
   elm_object_text_set(bt, "Keygrab Unset");
204
   elm_box_pack_end(bx, bt);
205
   evas_object_smart_callback_add(bt, "clicked", _unset_bt_clicked, api);
206
   evas_object_show(bt);
207
}
208

209
void
210
test_win_keygrab(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
211
           void *event_info EINA_UNUSED)
212
{
213
   Evas_Object *win, *bx, *bx1, *bx2;
214

215
   api_data *api = calloc(1, sizeof(api_data));
216

217
   win = elm_win_util_standard_add("keygrab", "Keygrab");
218
   elm_win_autodel_set(win, EINA_TRUE);
219
   evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api);
220

221
   bx = elm_box_add(win);
222
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
223
   elm_win_resize_object_add(win, bx);
224
   evas_object_show(bx);
225

226
   bx1 = elm_box_add(win);
227
   evas_object_size_hint_weight_set(bx1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
228
   elm_box_pack_end(bx, bx1);
229
   elm_box_horizontal_set(bx1, EINA_TRUE);
230
   evas_object_show(bx1);
231

232
   bx2 = elm_box_add(win);
233
   evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
234
   elm_box_pack_end(bx, bx2);
235
   elm_box_horizontal_set(bx2, EINA_TRUE);
236
   evas_object_show(bx2);
237

238
   _group_1_create(bx1, api);
239
   _group_2_create(bx1, api);
240
   _group_3_create(bx2, api);
241

242
   evas_object_show(win);
243
}
244

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.