efl
243 строки · 7.2 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4#include <Elementary.h>5
6
7struct _api_data8{
9Evas_Object *win;10Elm_Win_Keygrab_Mode mode; /* Mode of keygr */11char keyname[PATH_MAX]; /* Keyname */12};13
14typedef struct _api_data api_data;15
16static void17_rdg_changed_cb(void *data EINA_UNUSED, Evas_Object *obj,18void *event_info EINA_UNUSED)19{
20int mode = -1;21Elm_Win_Keygrab_Mode keygrab_mode = ELM_WIN_KEYGRAB_UNKNOWN;22api_data *api = data;23
24mode = elm_radio_value_get(obj);25printf("radio group value : %d\n", mode);26
27if (mode == 1)28{29keygrab_mode = ELM_WIN_KEYGRAB_SHARED;30printf("keygrab mode = ELM_WIN_KEYGRAB_SHARED\n");31}32else if (mode == 2)33{34keygrab_mode = ELM_WIN_KEYGRAB_TOPMOST;35printf("keygrab mode = ELM_WIN_KEYGRAB_TOPMOST\n");36}37else if (mode == 3)38{39keygrab_mode = ELM_WIN_KEYGRAB_EXCLUSIVE;40printf("keygrab mode = ELM_WIN_KEYGRAB_EXCLUSIVE\n");41}42else if (mode == 4)43{44keygrab_mode = ELM_WIN_KEYGRAB_OVERRIDE_EXCLUSIVE;45printf("keygrab mode = ELM_WIN_KEYGRAB_OVERRIDE_EXCLUSIVE\n");46}47else48{49keygrab_mode = ELM_WIN_KEYGRAB_UNKNOWN;50printf("keygrab mode = ELM_WIN_KEYGRAB_UNKNOWN\n");51}52api->mode = keygrab_mode;53}
54
55static void56_entry_changed_cb(void *data , Evas_Object *obj, void *event_info EINA_UNUSED)57{
58api_data *api = data;59const char *str = elm_entry_entry_get(obj);60if (!str) return;61strncpy(api->keyname, str, PATH_MAX - 1);62printf("entry: %s\n",str);63}
64
65static void66_cleanup_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)67{
68if (data)69free(data);70}
71
72static void73_set_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)74{
75Eina_Bool ret = EINA_FALSE;76api_data *api = data;77
78ret = elm_win_keygrab_set(api->win, api->keyname, 0, 0, 0, api->mode);79printf("Keyname:\"%s\" mode:\"%d\" keygrab set. ret=%d\n", api->keyname, api->mode, ret);80}
81
82static void83_unset_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)84{
85Eina_Bool ret = EINA_FALSE;86api_data *api = data;87
88ret = elm_win_keygrab_unset(api->win, api->keyname, 0, 0);89printf("Keyname:\"%s\" mode:\"%d\" keygrab unset. ret=%d.\n", api->keyname, api->mode, ret);90}
91
92static void93_group_1_create(Evas_Object *bx, api_data *api)94{
95Evas_Object *bx2, *fr, *lb, *en;96
97fr = elm_frame_add(bx);98elm_object_text_set(fr, "Keygrab Keyname");99evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);100evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);101elm_box_pack_end(bx, fr);102evas_object_show(fr);103
104bx2 = elm_box_add(fr);105elm_object_content_set(fr, bx2);106evas_object_show(bx2);107
108lb = elm_label_add(bx2);109elm_object_text_set(lb, " Keyname :");110evas_object_size_hint_weight_set(lb, 0.0, EVAS_HINT_EXPAND);111evas_object_size_hint_align_set(lb, 0.0, EVAS_HINT_FILL);112elm_box_pack_end(bx2, lb);113evas_object_show(lb);114
115en = elm_entry_add(bx2);116elm_entry_single_line_set(en, EINA_TRUE);117elm_entry_scrollable_set(en, EINA_TRUE);118evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);119evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);120evas_object_smart_callback_add(en, "changed,user", _entry_changed_cb, api);121elm_box_pack_end(bx2, en);122evas_object_show(en);123elm_object_focus_set(en, EINA_TRUE);124
125
126}
127
128static void129_group_2_create(Evas_Object *bx, api_data *api)130{
131Evas_Object *bx2, *fr, *rd, *rd1, *rd2, *rd3;132
133fr = elm_frame_add(bx);134elm_object_text_set(fr, "Keygrab Mode");135evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);136evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);137elm_box_pack_end(bx, fr);138evas_object_show(fr);139
140bx2 = elm_box_add(fr);141elm_object_content_set(fr, bx2);142elm_box_align_set(bx2, 0.0, 0.0);143evas_object_show(bx2);144
145// Shared146rd = elm_radio_add(bx2);147elm_radio_state_value_set(rd, 1);148evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);149evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5);150elm_object_text_set(rd, "Keygrab Shared Mode");151elm_box_pack_end(bx2, rd);152evas_object_show(rd);153evas_object_smart_callback_add(rd, "changed", _rdg_changed_cb, api);154
155// Topmost156rd1 = elm_radio_add(bx2);157elm_radio_state_value_set(rd1, 2);158evas_object_size_hint_weight_set(rd1, EVAS_HINT_EXPAND, 0.0);159evas_object_size_hint_align_set(rd1, EVAS_HINT_FILL, 0.5);160elm_object_text_set(rd1, "Keygrab Topmost Mode");161elm_radio_group_add(rd1, rd);162elm_box_pack_end(bx2, rd1);163evas_object_show(rd1);164evas_object_smart_callback_add(rd1, "changed", _rdg_changed_cb, api);165
166// Exclusive167rd2 = elm_radio_add(bx2);168elm_radio_state_value_set(rd2, 3);169evas_object_size_hint_weight_set(rd2, EVAS_HINT_EXPAND, 0.0);170evas_object_size_hint_align_set(rd2, EVAS_HINT_FILL, 0.5);171elm_object_text_set(rd2, "Keygrab Exclusive Mode");172elm_radio_group_add(rd2, rd);173elm_box_pack_end(bx2, rd2);174evas_object_show(rd2);175evas_object_smart_callback_add(rd2, "changed", _rdg_changed_cb, api);176
177//Override Exclusive178rd3 = elm_radio_add(bx2);179elm_radio_state_value_set(rd3, 4);180evas_object_size_hint_weight_set(rd3, EVAS_HINT_EXPAND, 0.0);181evas_object_size_hint_align_set(rd3, EVAS_HINT_FILL, 0.5);182elm_object_text_set(rd3, "Keygrab Override Exclusive Mode");183elm_radio_group_add(rd3, rd);184elm_box_pack_end(bx2, rd3);185evas_object_show(rd3);186evas_object_smart_callback_add(rd3, "changed", _rdg_changed_cb, api);187}
188
189static void190_group_3_create(Evas_Object *bx, api_data *api)191{
192Evas_Object *bt;193
194bt = elm_button_add(bx);195elm_object_text_set(bt, "Keygrab Set");196elm_box_pack_end(bx, bt);197
198evas_object_smart_callback_add(bt, "clicked", _set_bt_clicked, api);199evas_object_show(bt);200
201
202bt = elm_button_add(bx);203elm_object_text_set(bt, "Keygrab Unset");204elm_box_pack_end(bx, bt);205evas_object_smart_callback_add(bt, "clicked", _unset_bt_clicked, api);206evas_object_show(bt);207}
208
209void
210test_win_keygrab(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,211void *event_info EINA_UNUSED)212{
213Evas_Object *win, *bx, *bx1, *bx2;214
215api_data *api = calloc(1, sizeof(api_data));216
217win = elm_win_util_standard_add("keygrab", "Keygrab");218elm_win_autodel_set(win, EINA_TRUE);219evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api);220
221bx = elm_box_add(win);222evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);223elm_win_resize_object_add(win, bx);224evas_object_show(bx);225
226bx1 = elm_box_add(win);227evas_object_size_hint_weight_set(bx1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);228elm_box_pack_end(bx, bx1);229elm_box_horizontal_set(bx1, EINA_TRUE);230evas_object_show(bx1);231
232bx2 = elm_box_add(win);233evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);234elm_box_pack_end(bx, bx2);235elm_box_horizontal_set(bx2, EINA_TRUE);236evas_object_show(bx2);237
238_group_1_create(bx1, api);239_group_2_create(bx1, api);240_group_3_create(bx2, api);241
242evas_object_show(win);243}
244