diff options
author | Daniel Juyung Seo <juyung.seo@samsung.com> | 2013-12-03 21:43:32 +0900 |
---|---|---|
committer | Daniel Juyung Seo <juyung.seo@samsung.com> | 2013-12-03 21:43:32 +0900 |
commit | 405d310fa50d0c549b19ff19460dac8af71733b6 (patch) | |
tree | 6afb3f6166c5d193653e7ea25534732b37665b44 | |
parent | 216cc4407e63969cf7b7634b3a3c3dd14ffa7e31 (diff) | |
parent | 1f873691e9e45988b1ece31576b5b67090f21864 (diff) | |
download | elementary-devs/seoz/highlight.tar.gz |
Merge branch 'master' into devs/seoz/highlightdevs/seoz/highlight
40 files changed, 2260 insertions, 219 deletions
@@ -83,3 +83,6 @@ Hosang Kim <hosang12.kim@samsung.com> Youngbok Shin <youngb.shin@samsung.com> Niraj Kumar <niraj.kr@samsung.com> <niraj.kumar.ait@gmail.com> Amitesh Singh <singh.amitesh@gmail.com> +Abhinandan Aryadipta <a.aryadipta@samsung.com> +Sanghyeon Lee <sh10233.lee@samsung.com> +Anil Kumar Nahak <ak.nahak@samsung.com> @@ -1761,6 +1761,14 @@ * spinner: fix mouse wheel support. +2013-12-01 Carsten Haitzler (The Rasterman) + + * 1.8 release + 2013-12-01 Abhinandan Aryadipta (aryarockstar) * tooltip: Added elm_object_tooltip_orient_set() and elm_object_tooltip_orient_get(). + +2013-12-01 Mike Blumenkrantz + + * fix mouse eventing on e border theme @@ -1,3 +1,7 @@ +================ +Elementary 1.9.0 +================ + Changes since Elementary 1.8.0: ------------------------- diff --git a/configure.ac b/configure.ac index e4bc736b1..6700643f4 100644 --- a/configure.ac +++ b/configure.ac @@ -731,6 +731,8 @@ src/modules/test_map/Makefile src/edje_externals/Makefile src/examples/Makefile src/tests/Makefile +src/imported/Makefile +src/imported/atspi/Makefile data/Makefile data/themes/Makefile data/images/Makefile diff --git a/data/themes/edc/border.edc b/data/themes/edc/border.edc index a0ca40a15..b9f57bef3 100644 --- a/data/themes/edc/border.edc +++ b/data/themes/edc/border.edc @@ -33,7 +33,7 @@ group { name: "e/widgets/border/default/border"; visible: 0; } } - part { name: "e.swallow.client"; type: SWALLOW; mouse_events: 0; + part { name: "e.swallow.client"; type: SWALLOW; clip_to: "client_clip"; description { state: "default" 0.0; rel1.relative: 0.0 1.0; @@ -974,7 +974,7 @@ group { name: "e/widgets/border/dialog/border"; group { name: "e/widgets/border/noresize/border"; inherit: "e/widgets/border/default/border"; parts { - part { name: "e.swallow.client"; type: SWALLOW; mouse_events: 0; + part { name: "e.swallow.client"; type: SWALLOW; description { state: "default" 0.0; rel2.relative: 1.0 1.0; } @@ -1069,7 +1069,7 @@ group { name: "e/widgets/border/pixel/border"; rel2.to_y: "e.swallow.client"; } } - part { name: "e.swallow.client"; type: SWALLOW; mouse_events: 0; + part { name: "e.swallow.client"; type: SWALLOW; clip_to: "client_clip"; description { state: "default" 0.0; rel1.offset: 1 1; diff --git a/data/themes/edc/evrything.edc b/data/themes/edc/evrything.edc index 9b9a27619..ec9de7b1d 100644 --- a/data/themes/edc/evrything.edc +++ b/data/themes/edc/evrything.edc @@ -61,6 +61,7 @@ group { name: "e/modules/everything/main"; } description { state: "wide" 0; inherit: "default" 0.0; + rel1.relative: 0.0 0.0; rel2.relative: 0.5 1.0; } } @@ -1610,7 +1611,8 @@ group { name: "e/modules/everything/thumbview/item/list"; rel1.relative: 1.0 0.0; rel1.to_x: "icon0"; rel2.offset: -3 -3; - rel2.relative: 1.0 1.0; + rel2.relative: 0.0 1.0; + rel2.to_x: "arrow"; color: 255 255 255 255; color3: 0 0 0 128; color_class: "ilist_item"; diff --git a/src/Makefile.am b/src/Makefile.am index b6dda4e5e..7f9e3c36e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,7 +1,7 @@ AUTOMAKE_OPTIONS = 1.4 foreign MAINTAINERCLEANFILES = Makefile.in -SUBDIRS = lib bin +SUBDIRS = lib bin imported if BUILD_MODULES SUBDIRS += modules edje_externals diff --git a/src/bin/test_fileselector.c b/src/bin/test_fileselector.c index eb76236b0..f22a6e9e3 100644 --- a/src/bin/test_fileselector.c +++ b/src/bin/test_fileselector.c @@ -334,6 +334,85 @@ _mode_option_create(Evas_Object *parent, Evas_Object *fs) return frame; } +static void +_small_icon_clicked(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *fs = data; + Evas_Coord w, h; + + elm_fileselector_thumbnail_size_get(fs, &w, &h); + + elm_fileselector_thumbnail_size_set(fs, 56, 56); + printf("Thumbnail icon was changed from %dx%d to 56x56\n", w, h); +} + +static void +_middle_icon_clicked(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *fs = data; + Evas_Coord w, h; + + elm_fileselector_thumbnail_size_get(fs, &w, &h); + + elm_fileselector_thumbnail_size_set(fs, 78, 78); + printf("Thumbnail icon was changed from %dx%d to 78x78\n", w, h); +} + +static void +_big_icon_clicked(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *fs = data; + Evas_Coord w, h; + + elm_fileselector_thumbnail_size_get(fs, &w, &h); + + elm_fileselector_thumbnail_size_set(fs, 131, 131); + printf("Thumbnail icon was changed from %dx%d to 131x131\n", w, h); +} + +static Evas_Object * +_thumbnail_size_option_create(Evas_Object *parent, Evas_Object *fs) +{ + Evas_Object *frame = NULL, *hbox = NULL, *bt = NULL; + + frame = elm_frame_add(parent); + elm_object_text_set(frame, "Thumbnail Size"); + evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, 0); + evas_object_show(frame); + + hbox = elm_box_add(frame); + elm_box_horizontal_set(hbox, EINA_TRUE); + elm_object_content_set(frame, hbox); + evas_object_show(hbox); + + bt = elm_button_add(hbox); + elm_object_text_set(bt, "Small icon"); + evas_object_smart_callback_add(bt, "clicked", _small_icon_clicked, fs); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_button_add(hbox); + elm_object_text_set(bt, "Middle icon"); + evas_object_smart_callback_add(bt, "clicked", _middle_icon_clicked, fs); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_button_add(hbox); + elm_object_text_set(bt, "Big icon"); + evas_object_smart_callback_add(bt, "clicked", _big_icon_clicked, fs); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + return frame; +} + void test_fileselector(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, @@ -395,5 +474,6 @@ test_fileselector(void *data EINA_UNUSED, elm_box_pack_end(vbox, _option_create(vbox, fs)); elm_box_pack_end(vbox, _getter_option_create(vbox, fs)); elm_box_pack_end(vbox, _mode_option_create(vbox, fs)); + elm_box_pack_end(vbox, _thumbnail_size_option_create(vbox, fs)); } diff --git a/src/bin/test_gengrid.c b/src/bin/test_gengrid.c index cfe0e78db..d01f35dfb 100644 --- a/src/bin/test_gengrid.c +++ b/src/bin/test_gengrid.c @@ -36,6 +36,13 @@ struct _api_data }; typedef struct _api_data api_data; +struct _Show_Data +{ + int winmode; + int scrollto; +}; +typedef struct _Show_Data Show_Data; + enum _api_state { GRID_ALIGN_SET, @@ -992,77 +999,47 @@ test_gengrid_item_styles(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } static void -_bring_in2_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_rd1_changed_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) { - Evas_Object *win, *grid; - static Item_Data id[5000]; - int i, n; - char buf[PATH_MAX]; - - win = elm_win_util_standard_add("horz bring_in", "Horz Bring_in"); - elm_win_autodel_set(win, EINA_TRUE); - evas_object_resize(win, 600, 200); - evas_object_show(win); - - grid = elm_gengrid_add(win); - evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, grid); - elm_gengrid_item_size_set(grid, - elm_config_scale_get() * 150, - elm_config_scale_get() * 150); - elm_gengrid_group_item_size_set(grid, - elm_config_scale_get() * 31, - elm_config_scale_get() * 31); - elm_gengrid_horizontal_set(grid, EINA_TRUE); - elm_gengrid_align_set(grid, 0.4, 0.8); - - gic = elm_gengrid_item_class_new(); - gic->item_style = "default"; - gic->func.text_get = grid_text_get; - gic->func.content_get = grid_content_get; - gic->func.state_get = grid_state_get; - gic->func.del = NULL; - - n = 0; - for (i = 0; i < 5000; i++) - { - snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]); - n = (n + 1) % 9; - id[i].mode = i; - id[i].path = eina_stringshare_add(buf); - id[i].item = elm_gengrid_item_append(grid, gic, &(id[i]), grid_sel, NULL); - if (i == 2400) - elm_gengrid_item_selected_set(id[i].item, EINA_TRUE); - } + Show_Data *sd = data; + sd->winmode = elm_radio_state_value_get(obj); +} - elm_gengrid_item_class_free(gic); - evas_object_show(grid); - elm_gengrid_item_bring_in(id[2400].item, ELM_GENGRID_ITEM_SCROLLTO_IN); +static void +_rd2_changed_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Show_Data *sd = data; + sd->scrollto = elm_radio_state_value_get(obj); } static void -_bring_in1_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_bring_in_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { Evas_Object *win, *grid; - static Item_Data id[5000]; + static Item_Data ti[5000]; int i, n; char buf[PATH_MAX]; - win = elm_win_util_standard_add("vertical bring_in", "Vertical Bring_in"); + if (!data) return; + + Show_Data *sd = data; + + if (sd->winmode == 0) + win = elm_win_util_standard_add("horz bring_in", "Horz Bring_in"); + else + win = elm_win_util_standard_add("vertical bring_in", "Vertical Bring_in"); elm_win_autodel_set(win, EINA_TRUE); - evas_object_resize(win, 600, 400); - evas_object_show(win); grid = elm_gengrid_add(win); + elm_gengrid_item_size_set(grid, 150, 150); + elm_gengrid_group_item_size_set(grid, 31, 31); + if (sd->winmode == 0) + elm_gengrid_horizontal_set(grid, EINA_TRUE); + else if (sd->winmode == 1) + elm_gengrid_horizontal_set(grid, EINA_FALSE); evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, grid); - elm_gengrid_item_size_set(grid, - elm_config_scale_get() * 150, - elm_config_scale_get() * 150); - elm_gengrid_group_item_size_set(grid, - elm_config_scale_get() * 31, - elm_config_scale_get() * 31); - elm_gengrid_align_set(grid, 0.1, 1.0); + elm_gengrid_align_set(grid, 0.1, 0.1); gic = elm_gengrid_item_class_new(); gic->item_style = "default"; @@ -1076,43 +1053,53 @@ _bring_in1_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void { snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]); n = (n + 1) % 9; - id[i].mode = i; - id[i].path = eina_stringshare_add(buf); - id[i].item = elm_gengrid_item_append(grid, gic, &(id[i]), grid_sel, NULL); + ti[i].mode = i; + ti[i].path = eina_stringshare_add(buf); + ti[i].item = elm_gengrid_item_append(grid, gic, &(ti[i]), grid_sel, NULL); if (i == 1430) - elm_gengrid_item_selected_set(id[i].item, EINA_TRUE); + elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE); } elm_gengrid_item_class_free(gic); - elm_gengrid_item_bring_in(id[1430].item, ELM_GENGRID_ITEM_SCROLLTO_IN); + elm_gengrid_item_bring_in(ti[1430].item, sd->scrollto); evas_object_show(grid); -} + if (sd->winmode == 0) + evas_object_resize(win, 600, 200); + if (sd->winmode == 1) + evas_object_resize(win, 600, 400); + evas_object_show(win); +} static void -_show2_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_show_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { Evas_Object *win, *grid; - static Item_Data id[10000]; + static Item_Data ti[10000]; int i, n; char buf[PATH_MAX]; + double scale = elm_config_scale_get(); + + if (!data) return; - win = elm_win_util_standard_add("horz show", "Horz Show"); + Show_Data *sd = data; + + if (sd->winmode == 0) + win = elm_win_util_standard_add("horz show", "Horz Show"); + else + win = elm_win_util_standard_add("vertical show", "Vertical Show"); elm_win_autodel_set(win, EINA_TRUE); - evas_object_resize(win, 600, 200); - evas_object_show(win); grid = elm_gengrid_add(win); + elm_gengrid_item_size_set(grid, 150 * scale, 150 * scale); + elm_gengrid_group_item_size_set(grid, 31 * scale, 31 * scale); + if (sd->winmode == 0) + elm_gengrid_horizontal_set(grid, EINA_TRUE); + else if (sd->winmode == 1) + elm_gengrid_horizontal_set(grid, EINA_FALSE); evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, grid); - elm_gengrid_item_size_set(grid, - elm_config_scale_get() * 150, - elm_config_scale_get() * 150); - elm_gengrid_group_item_size_set(grid, - elm_config_scale_get() * 31, - elm_config_scale_get() * 31); - elm_gengrid_horizontal_set(grid, EINA_TRUE); - elm_gengrid_align_set(grid, 0.3, 0.7); + elm_gengrid_align_set(grid, 0.1, 0.1); gic = elm_gengrid_item_class_new(); gic->item_style = "default"; @@ -1126,105 +1113,157 @@ _show2_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev { snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]); n = (n + 1) % 9; - id[i].mode = i; - id[i].path = eina_stringshare_add(buf); - id[i].item = elm_gengrid_item_append(grid, gic, &(id[i]), grid_sel, NULL); - if (i == 3333) - elm_gengrid_item_selected_set(id[i].item, EINA_TRUE); + ti[i].mode = i; + ti[i].path = eina_stringshare_add(buf); + ti[i].item = elm_gengrid_item_append(grid, gic, &(ti[i]), grid_sel, NULL); + if (i == 2579) + elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE); } elm_gengrid_item_class_free(gic); evas_object_show(grid); - elm_gengrid_item_show(id[3333].item, ELM_GENGRID_ITEM_SCROLLTO_IN); + elm_gengrid_item_show(ti[2579].item, sd->scrollto); + + if (sd->winmode == 0) + evas_object_resize(win, 600, 200); + if (sd->winmode == 1) + evas_object_resize(win, 600, 600); + evas_object_show(win); } -static void -_show1_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +static Evas_Object * +_window_mode_frame_new(Evas_Object *win, void *data) { - Evas_Object *win, *grid; - static Item_Data id[10000]; - int i, n; - char buf[PATH_MAX]; + Evas_Object *fr, *bx, *rd, *rdg; + Show_Data *sd = data; - win = elm_win_util_standard_add("vertical show", "Vertical Show"); - elm_win_autodel_set(win, EINA_TRUE); - evas_object_resize(win, 600, 600); - evas_object_show(win); + fr = elm_frame_add(win); + evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(fr, "Direction"); + evas_object_show(fr); - grid = elm_gengrid_add(win); - evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, grid); - elm_gengrid_item_size_set(grid, - elm_config_scale_get() * 150, - elm_config_scale_get() * 150); - elm_gengrid_group_item_size_set(grid, - elm_config_scale_get() * 31, - elm_config_scale_get() * 31); - elm_gengrid_align_set(grid, 0.1, 0.3); + bx = elm_box_add(win); + elm_object_content_set(fr, bx); + evas_object_show(bx); - gic = elm_gengrid_item_class_new(); - gic->item_style = "default"; - gic->func.text_get = grid_text_get; - gic->func.content_get = grid_content_get; - gic->func.state_get = grid_state_get; - gic->func.del = NULL; + rd = elm_radio_add(win); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_radio_state_value_set(rd, 0); + elm_object_text_set(rd, "horizontal"); + evas_object_smart_callback_add(rd, "changed", _rd1_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + rdg = rd; + + rd = elm_radio_add(win); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_radio_state_value_set(rd, 1); + elm_object_text_set(rd, "vertical"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd1_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + return fr; +} - n = 0; - for (i = 0; i < 10000; i++) - { - snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]); - n = (n + 1) % 9; - id[i].mode = i; - id[i].path = eina_stringshare_add(buf); - id[i].item = elm_gengrid_item_append(grid, gic, &(id[i]), grid_sel, NULL); - if (i == 2579) - elm_gengrid_item_selected_set(id[i].item, EINA_TRUE); - } +static Evas_Object * +_scrollto_mode_frame_new(Evas_Object *win, void *data) +{ + Evas_Object *fr, *bx, *rd, *rdg; + Show_Data *sd = data; - elm_gengrid_item_class_free(gic); - evas_object_show(grid); - elm_gengrid_item_show(id[2579].item, ELM_GENGRID_ITEM_SCROLLTO_IN); + fr = elm_frame_add(win); + evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(fr, "Scrollto Mode"); + evas_object_show(fr); + + bx = elm_box_add(win); + elm_object_content_set(fr, bx); + evas_object_show(bx); + + rd = elm_radio_add(win); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_radio_state_value_set(rd, 0); + elm_object_text_set(rd, "SCROLLTO_NONE"); + evas_object_smart_callback_add(rd, "changed", _rd2_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + rdg = rd; + + rd = elm_radio_add(win); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_radio_state_value_set(rd, 1); + elm_object_text_set(rd, "SCROLLTO_IN"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd2_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + rd = elm_radio_add(win); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_radio_state_value_set(rd, 2); + elm_object_text_set(rd, "SCROLLTO_TOP"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd2_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + rd = elm_radio_add(win); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_radio_state_value_set(rd, 4); + elm_object_text_set(rd, "SCROLLTO_MIDDLE"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd2_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + return fr; } void test_gengrid4(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *win, *bt, *bx; - api_data *api = calloc(1, sizeof(api_data)); + Evas_Object *win, *bt, *bx, *bx2, *fr; + Show_Data *sd = calloc(1, sizeof(Show_Data)); - win = elm_win_util_standard_add("gengrid show/scroll_in", "GenGrid Show/Bring_in"); + win = elm_win_util_standard_add("gengrid-show-bringin", "GenGrid Show/Bring_in"); elm_win_autodel_set(win, EINA_TRUE); - evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api); - evas_object_resize(win, 300, 300); + evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, sd); evas_object_show(win); bx = elm_box_add(win); evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, bx); - elm_box_horizontal_set(bx, EINA_TRUE); evas_object_show(bx); - bt = elm_button_add(win); - elm_object_text_set(bt, "Vertical Show"); - evas_object_smart_callback_add(bt, "clicked", _show1_clicked_cb, NULL); - elm_box_pack_end(bx, bt); - evas_object_show(bt); + bx2 = elm_box_add(bx); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); - bt = elm_button_add(win); - elm_object_text_set(bt, "Vertical Bring_in"); - evas_object_smart_callback_add(bt, "clicked", _bring_in1_clicked_cb, NULL); - elm_box_pack_end(bx, bt); - evas_object_show(bt); + fr = _window_mode_frame_new(bx2, sd); + elm_box_pack_end(bx2, fr); - bt = elm_button_add(win); - elm_object_text_set(bt, "Horz Show"); - evas_object_smart_callback_add(bt, "clicked", _show2_clicked_cb, NULL); - elm_box_pack_end(bx, bt); + fr = _scrollto_mode_frame_new(bx2, sd); + elm_box_pack_end(bx2, fr); + + bx2 = elm_box_add(bx); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bt = elm_button_add(bx2); + elm_object_text_set(bt, "Show"); + evas_object_smart_callback_add(bt, "clicked", _show_clicked_cb, sd); + elm_box_pack_end(bx2, bt); evas_object_show(bt); - bt = elm_button_add(win); - elm_object_text_set(bt, "Horz Bring_in"); - evas_object_smart_callback_add(bt, "clicked", _bring_in2_clicked_cb, NULL); - elm_box_pack_end(bx, bt); + bt = elm_button_add(bx2); + elm_object_text_set(bt, "Bring In"); + evas_object_smart_callback_add(bt, "clicked", _bring_in_clicked_cb, sd); + elm_box_pack_end(bx2, bt); evas_object_show(bt); } diff --git a/src/bin/test_popup.c b/src/bin/test_popup.c index 4c5de283f..0b01b67f8 100644 --- a/src/bin/test_popup.c +++ b/src/bin/test_popup.c @@ -3,9 +3,25 @@ #endif #include <Elementary.h> +#define POPUP_POINT_MAX 6 + +typedef struct +{ + double x; + double y; +} Evas_Rel_Coord_Point; static Evas_Object *g_popup = NULL; static int times = 0; +static Evas_Rel_Coord_Point _popup_point[POPUP_POINT_MAX] = +{ + { 0.01, 0.01 }, + { 0.2, 0.2 }, + { 0.5, 0.5 }, + { 0.99, 0.01 }, + { 0.01, 0.99 }, + { 0.99, 0.99 } +}; static void _response_cb(void *data EINA_UNUSED, Evas_Object *obj, @@ -22,6 +38,23 @@ _popup_close_cb(void *data, Evas_Object *obj EINA_UNUSED, } static void +_popup_align_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + static int k = 0; + double h = -1, v = -1; + + elm_popup_align_set(data, _popup_point[k].x, _popup_point[k].y); + elm_popup_align_get(data, &h, &v); + + printf("elm_popup_align_get :: Aligned: %lf %lf\n", h, v); + + k++; + if (k >= POPUP_POINT_MAX) + k = 0; +} + +static void _g_popup_response_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -498,6 +531,33 @@ _popup_transparent_cb(void *data, Evas_Object *obj EINA_UNUSED, } static void +_popup_transparent_align_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *popup; + Evas_Object *btn, *btn1; + + popup = elm_popup_add(data); + elm_object_style_set(popup, "transparent"); + elm_object_text_set(popup, "This Popup has transparent background"); + + // popup buttons + btn = elm_button_add(popup); + elm_object_text_set(btn, "Move"); + elm_object_part_content_set(popup, "button1", btn); + evas_object_smart_callback_add(btn, "clicked", _popup_align_cb, popup); + + btn1 = elm_button_add(popup); + elm_object_text_set(btn1, "Close"); + elm_object_part_content_set(popup, "button2", btn1); + evas_object_smart_callback_add(btn1, "clicked", _popup_close_cb, popup); + + // popup show should be called after adding all the contents and the buttons + // of popup to set the focus into popup's contents correctly. + evas_object_show(popup); +} + +static void _list_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { evas_object_del(data); @@ -578,6 +638,8 @@ test_popup(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, _popup_center_text_3button_add_remove_button_cb, win); elm_list_item_append(list, "popup-transparent", NULL, NULL, _popup_transparent_cb, win); + elm_list_item_append(list, "popup-transparent-align", NULL, NULL, + _popup_transparent_align_cb, win); elm_list_item_append(list, "popup-center-title + list content + 1 button", NULL, NULL, _popup_center_title_list_content_1button_cb, win); diff --git a/src/bin/test_slider.c b/src/bin/test_slider.c index f641379a1..e5378254d 100644 --- a/src/bin/test_slider.c +++ b/src/bin/test_slider.c @@ -113,6 +113,20 @@ test_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in elm_box_pack_end(bx, sl); evas_object_show(sl); + sl = elm_slider_add(bx); + elm_slider_unit_format_set(sl, "%1.0f units"); + elm_slider_indicator_format_set(sl, "%1.0f"); + elm_slider_span_size_set(sl, 120); + elm_slider_min_max_set(sl, 0, 100); + elm_object_text_set(sl, "Always show : "); + step = _step_size_calculate(0, 9); + elm_slider_step_set(sl, step); + elm_slider_indicator_show_on_focus_set(sl, EINA_TRUE); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx, sl); + evas_object_show(sl); + // normal horizontal slider ic = elm_icon_add(bx); snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); diff --git a/src/imported/Makefile.am b/src/imported/Makefile.am new file mode 100644 index 000000000..a82538f89 --- /dev/null +++ b/src/imported/Makefile.am @@ -0,0 +1,5 @@ +AUTOMAKE_OPTIONS = 1.4 foreign +MAINTAINERCLEANFILES = Makefile.in + +SUBDIRS = \ +atspi diff --git a/src/imported/atspi/Makefile.am b/src/imported/atspi/Makefile.am new file mode 100644 index 000000000..fa32175f1 --- /dev/null +++ b/src/imported/atspi/Makefile.am @@ -0,0 +1,4 @@ +AUTOMAKE_OPTIONS = 1.4 foreign +MAINTAINERCLEANFILES = Makefile.in + +noinst_HEADERS = atspi-constants.h diff --git a/src/imported/atspi/atspi-constants.h b/src/imported/atspi/atspi-constants.h new file mode 100644 index 000000000..7a55169f1 --- /dev/null +++ b/src/imported/atspi/atspi-constants.h @@ -0,0 +1,1241 @@ +/* + * AT-SPI - Assistive Technology Service Provider Interface + * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) + * + * Copyright 2010, 2011 Novell, Inc. + * Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/* TODO: Auto-generate this file again + + + + !\mainpage AT-SPI Interfaces and Subinterfaces + + This is the main documentation page for the + Assistive Technology Service Provider Interface (AT-SPI). + + \section apps Applications and Interface Components + Namespace Accessibility includes service APIs implemented by + participating applications and their user interface components:\n\n + Accessibility::Accessible\n + Accessibility::Application\n + Accessibility::Desktop\n + Accessibility::Collecgtion\n + Accessibility::Component\n + Accessibility::Hypertext\n + Accessibility::Image\n + Accessibility::Selection\n + Accessibility::Table\n + Accessibility::Text\n + Accessibility::EditableText\n + Accessibility::Value + + \section types Enumerated Types + Accessibility defines a number of key enumerated types, including:\n\n + Accessibility::RelationType\n + Accessibility::Role\n + Accessibility::StateType\n + Accessibility::Event\n + Accessibility::EventDetails \n + + \section Registry + Accessibility also includes Accessibility::Registry, + which is the service used by assistive technologies and related + AT-SPI clients to register interest in certain classes of events, + enumerate the currently available desktop and application list, + and to synthesize certain kinds of device events. + + \section listeners Event Listener Interfaces + Accessibility::EventListener\n + Accessibility::DeviceEventListener + + \section helpers Helper Interfaces + + The following interfaces may be implemented by assistive technologies + themselves, in order to export their services in a consistent manner or + in order to interoperate with other applications or desktop services.\n + + Accessibility::LoginHelper : Implemented by adaptive technologies which + need to participate in user-authentication or login activities, and which + therefore may need negotiation with authentication agents or processes.\n + + Accessibility::Selector [NEW]: Implemented by user agents or assistive + technologies which export lists of choices from which the end-user is + expected to make selections. Useful for various types of remote + activation or intercommunication between multiple ATs. + + */ + +#ifndef _ATSPI_CONSTANTS_H_ +#define _ATSPI_CONSTANTS_H_ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * AtspiLocaleType: + * @ATSPI_LOCALE_TYPE_MESSAGES: For localizable natural-language messages. + * @ATSPI_LOCALE_TYPE_COLLATE: For regular expression matching and string + * collation. + * @ATSPI_LOCALE_TYPE_CTYPE: For regular expression matching, character + * classification, conversion, case-sensitive comparison, and wide character + * functions. + * @ATSPI_LOCALE_TYPE_MONETARY: For monetary formatting. + * @ATSPI_LOCALE_TYPE_NUMERIC: For number formatting (such as the decimal + * point and the thousands separator). + * @ATSPI_LOCALE_TYPE_TIME: For time and date formatting. + * + * Used by interfaces #AtspiText and #AtspiDocument, this + * enumeration corresponds to the POSIX 'setlocale' enum values. + * + **/ +typedef enum { + ATSPI_LOCALE_TYPE_MESSAGES, + ATSPI_LOCALE_TYPE_COLLATE, + ATSPI_LOCALE_TYPE_CTYPE, + ATSPI_LOCALE_TYPE_MONETARY, + ATSPI_LOCALE_TYPE_NUMERIC, + ATSPI_LOCALE_TYPE_TIME, +} AtspiLocaleType; + +/** + * ATSPI_LOCALE_TYPE_COUNT: + * + * One higher than the highest valid value of #AtspiLocaleType. + **/ +#define ATSPI_LOCALE_TYPE _COUNT(5+1) + +/** + * AtspiCoordType: + * @ATSPI_COORD_TYPE_SCREEN: Specifies xy coordinates relative to the screen. + * @ATSPI_COORD_TYPE_WINDOW: Specifies xy coordinates relative to the widget's + * top-level window. + * + * Enumeration used by #AtspiComponent, #AtspiImage, and #AtspiText interfaces + * to specify whether coordinates are relative to the window or the screen. + * + **/ +typedef enum { + ATSPI_COORD_TYPE_SCREEN, + ATSPI_COORD_TYPE_WINDOW, +} AtspiCoordType; + +/** + * ATSPI_COORD_TYPE_COUNT: + * + * One higher than the highest valid value of #AtspiCoordType. + **/ +#define ATSPI_COORD_TYPE_COUNT (1+1) + +/** + * AtspiCollectionSortOrder: + * @ATSPI_Collection_SORT_ORDER_INVALID: + * @ATSPI_Collection_SORT_ORDER_CANONICAL: + * @ATSPI_Collection_SORT_ORDER_FLOW: + * @ATSPI_Collection_SORT_ORDER_TAB: + * @ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL: + * @ATSPI_Collection_SORT_ORDER_REVERSE_FLOW: + * @ATSPI_Collection_SORT_ORDER_REVERSE_TAB: + * @ATSPI_Collection_SORT_ORDER_LAST_DEFINED: + * + * Enumeration used by interface #AtspiCollection to specify + * the way #AtspiAccesible objects should be sorted. + * + **/ +typedef enum { + ATSPI_Collection_SORT_ORDER_INVALID, + ATSPI_Collection_SORT_ORDER_CANONICAL, + ATSPI_Collection_SORT_ORDER_FLOW, + ATSPI_Collection_SORT_ORDER_TAB, + ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL, + ATSPI_Collection_SORT_ORDER_REVERSE_FLOW, + ATSPI_Collection_SORT_ORDER_REVERSE_TAB, + ATSPI_Collection_SORT_ORDER_LAST_DEFINED, +} AtspiCollectionSortOrder; + +/** + * ATSPI_SORTORDER_COUNT: + * + * One higher than the highest valid value of #AtspiCollectionSortOrder. + */ +#define ATSPI_SORTORDER_COUNT (7+1) + +/** + * AtspiCollectionMatchType: + * @ATSPI_Collection_MATCH_INVALID: Indicates an error condition or + * uninitialized value. + * @ATSPI_Collection_MATCH_ALL: #TRUE if all of the criteria are met. + * @ATSPI_Collection_MATCH_ANY: #TRUE if any of the criteria are met. + * @ATSPI_Collection_MATCH_NONE: #TRUE if none of the criteria are met. + * @ATSPI_Collection_MATCH_EMPTY: Same as @ATSPI_Collection_MATCH_ALL if + * the criteria is non-empty; for empty criteria this rule requires returned + * value to also have empty set. + * @ATSPI_Collection_MATCH_LAST_DEFINED: Used only to determine the end of the + * enumeration. + * + * Enumeration used by #AtspiMatchRule to specify + * how to interpret #AtspiAccesible objects. + * + **/ +typedef enum { + ATSPI_Collection_MATCH_INVALID, + ATSPI_Collection_MATCH_ALL, + ATSPI_Collection_MATCH_ANY, + ATSPI_Collection_MATCH_NONE, + ATSPI_Collection_MATCH_EMPTY, + ATSPI_Collection_MATCH_LAST_DEFINED, +} AtspiCollectionMatchType; + +/** + * ATSPI_MATCHTYPE_COUNT: + * + * One higher than the highest valid value of #AtspiCollectionMatchType. + **/ +#define ATSPI_MATCHTYPES_COUNT (5+1) + +/** + * AtspiCollectionTreeTraversalType: + * @ATSPI_Collection_TREE_RESTRICT_CHILDREN: + * @ATSPI_Collection_TREE_RESTRICT_SIBLING: + * @ATSPI_Collection_TREE_INORDER: + * @ATSPI_Collection_TREE_LAST_DEFINED: + * + * Enumeration used by interface #AtspiCollection to specify + * restrictions on #AtspiAccesible objects to be traversed. + * + **/ +typedef enum { + ATSPI_Collection_TREE_RESTRICT_CHILDREN, + ATSPI_Collection_TREE_RESTRICT_SIBLING, + ATSPI_Collection_TREE_INORDER, + ATSPI_Collection_TREE_LAST_DEFINED, +} AtspiCollectionTreeTraversalType; + +/** + * ATSPI_TREETRAVERSALTYPE_COUNT: + * + * One higher than the highest valid value of + * #AtspiCollection_TreeTraversalType. + */ +#define ATSPI_TREETRAVERSALTYPE _COUNT(3+1) + +/** + * AtspiComponentLayer: + * @ATSPI_LAYER_INVALID: Indicates an error condition or uninitialized value. + * @ATSPI_LAYER_BACKGROUND: The bottom-most layer, over which everything else + * is painted. The 'desktop background' is generally in this layer. + * @ATSPI_LAYER_CANVAS: The 'background' layer for most content renderers and + * UI #AtspiComponent containers. + * @ATSPI_LAYER_WIDGET: The layer in which the majority of ordinary + * 'foreground' widgets reside. + * @ATSPI_LAYER_MDI: A special layer between @ATSPI_LAYER_CANVAS and + * @ATSPI_LAYER_WIDGET, in which the 'pseudo windows' (e.g. the MDI frames) + * reside. See #atspi_component_get_mdi_z_order. + * @ATSPI_LAYER_POPUP: A layer for popup window content, above + * @ATSPI_LAYER_WIDGET. + * @ATSPI_LAYER_OVERLAY: The topmost layer. + * @ATSPI_LAYER_WINDOW: The layer in which a toplevel window background usually + * resides. + * @ATSPI_LAYER_LAST_DEFINED: Used only to determine the end of the + * enumeration. + * + * The #AtspiComponentLayer of an #AtspiComponent instance indicates its + * relative stacking order with respect to the onscreen visual representation + * of the UI. #AtspiComponentLayer, in combination with #AtspiComponent bounds + * information, can be used to compute the visibility of all or part of a + * component. This is important in programmatic determination of + * region-of-interest for magnification, and in + * flat screen review models of the screen, as well as + * for other uses. Objects residing in two of the #AtspiComponentLayer + * categories support further z-ordering information, with respect to their + * peers in the same layer: namely, @ATSPI_LAYER_WINDOW and + * @ATSPI_LAYER_MDI. Relative stacking order for other objects within the + * same layer is not available; the recommended heuristic is + * first child paints first. In other words, assume that the + * first siblings in the child list are subject to being overpainted by later + * siblings if their bounds intersect. The order of layers, from bottom to top, + * is: @ATSPI_LAYER_BACKGROUND, @ATSPI_LAYER_WINDOW, @ATSPI_LAYER_MDI, + * @ATSPI_LAYER_CANVAS, @ATSPI_LAYER_WIDGET, @ATSPI_LAYER_POPUP, and + * @ATSPI_LAYER_OVERLAY. + * + */ +typedef enum { + ATSPI_LAYER_INVALID, + ATSPI_LAYER_BACKGROUND, + ATSPI_LAYER_CANVAS, + ATSPI_LAYER_WIDGET, + ATSPI_LAYER_MDI, + ATSPI_LAYER_POPUP, + ATSPI_LAYER_OVERLAY, + ATSPI_LAYER_WINDOW, + ATSPI_LAYER_LAST_DEFINED, +} AtspiComponentLayer; + +/** + * ATSPI_COMPONENTLAYER_COUNT: + * + * One higher than the highest valid value of #AtspiComponentLayer. + **/ +#define ATSPI_COMPONENTLAYER_COUNT (8+1) + +/** + * AtspiTextBoundaryType: + * @ATSPI_TEXT_BOUNDARY_CHAR: An #AtspiText instance is bounded by this + * character only. Start and end offsets differ by one, by definition, + * for this value. + * @ATSPI_TEXT_BOUNDARY_WORD_START: Boundary condition is start of a word; i.e. + * range is from start of one word to the start of another word. + * @ATSPI_TEXT_BOUNDARY_WORD_END: Boundary condition is the end of a word; i.e. + * range is from the end of one word to the end of another. Some locales + * may not distinguish between words and characters or glyphs. In particular, + * those locales which use wholly or partially ideographic character sets. + * In these cases, characters may be returned in lieu of multi-character + * substrings. + * @ATSPI_TEXT_BOUNDARY_SENTENCE_START: Boundary condition is start of a + * sentence, as determined by the application. Some locales or + * character sets may not include explicit sentence delimiters, so this + * boundary type can not always be honored. Some locales will return lines + * of text instead of grammatical sentences. + * @ATSPI_TEXT_BOUNDARY_SENTENCE_END: Boundary condition is end of a sentence, + * as determined by the application, including the sentence-delimiting + * character, for instance '.' Some locales or character sets may not + * include explicit sentence delimiters, so this boundary type can not + * always be honored. Some locales will return lines of text instead of + * grammatical sentences. + * @ATSPI_TEXT_BOUNDARY_LINE_START: Boundary condition is the start of a line; + * i.e. range is from start of one line to the start of another. This + * generally means that an end-of-line character will appear at the end of + * the range. + * @ATSPI_TEXT_BOUNDARY_LINE_END: Boundary condition is the end of a line; i.e. + * range is from start of one line to the start of another. This generally + * means that an end-of-line character will be the first character of the + * range. + * + * Specifies the boundary conditions determining a run of text as returned from + * #atspi_text_get_text_at_offset, #atspi_text_get_text_after_offset, and + * #atspi_text_get_text_before_offset. + * + **/ +typedef enum { + ATSPI_TEXT_BOUNDARY_CHAR, + ATSPI_TEXT_BOUNDARY_WORD_START, + ATSPI_TEXT_BOUNDARY_WORD_END, + ATSPI_TEXT_BOUNDARY_SENTENCE_START, + ATSPI_TEXT_BOUNDARY_SENTENCE_END, + ATSPI_TEXT_BOUNDARY_LINE_START, + ATSPI_TEXT_BOUNDARY_LINE_END, +} AtspiTextBoundaryType; + +/** + * ATSPI_TEXT_BOUNDARY_TYPE_COUNT: + * + * One higher than the highest valid value of #AtspiTextBoundaryType. + */ +#define ATSPI_TEXT_BOUNDARY_TYPE_COUNT (6+1) + +/** + * AtspiTextClipType: + * @ATSPI_TEXT_CLIP_NONE: No characters/glyphs are omitted. + * @ATSPI_TEXT_CLIP_MIN: Characters/glyphs clipped by the minimum coordinate + * are omitted. + * @ATSPI_TEXT_CLIP_MAX: Characters/glyphs which intersect the maximum + * coordinate are omitted. + * @ATSPI_TEXT_CLIP_BOTH: Only glyphs falling entirely within the region + * bounded by min and max are retained. + * + * Enumeration used by interface #AtspiText to indicate + * how to treat characters intersecting bounding boxes. + * + **/ +typedef enum { + ATSPI_TEXT_CLIP_NONE, + ATSPI_TEXT_CLIP_MIN, + ATSPI_TEXT_CLIP_MAX, + ATSPI_TEXT_CLIP_BOTH, +} AtspiTextClipType; + +/** + * ATSPI_TEXT_CLIP_TYPE_COUNT: + * + * One higher than the highest valid value of #AtspiTextClipType. + */ +#define ATSPI_TEXT_CLIP_TYPE_COUNT (3+1) + +/** + * AtspiStateType: + * @ATSPI_STATE_INVALID: Indicates an invalid state - probably an error + * condition. + * @ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or + * is an active subelement within a container or table. + * @ATSPI_STATE_ARMED: Indicates that the object is armed. + * @ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen + * representation is in the process of changing, or the object is + * temporarily unavailable for interaction due to activity already in progress. + * @ATSPI_STATE_CHECKED: Indicates this object is currently checked. + * @ATSPI_STATE_COLLAPSED: Indicates this object is collapsed. + * @ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid + * backing widget (for instance, if its peer object has been destroyed). + * @ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this + * object. + * @ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it + * currently reflects some application state. Objects that are "greyed out" + * may lack this state, and may lack the @ATSPI_STATE_SENSITIVE if direct + * user interaction cannot cause them to acquire @ATSPI_STATE_ENABLED. + * See @ATSPI_STATE_SENSITIVE. + * @ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive + * disclosure of its children. + * @ATSPI_STATE_EXPANDED: Indicates this object is expanded. + * @ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, + * which means all events resulting from typing on the keyboard will + * normally be passed to it when it has focus. + * @ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard + * focus. + * @ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated + * tooltip. + * @ATSPI_STATE_HORIZONTAL: Indicates the orientation of this object is + * horizontal. + * @ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is + * represented only by an icon. + * @ATSPI_STATE_MODAL: Indicates something must be done with this object + * before the user can interact with an object in a different window. + * @ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple + * lines of text. + * @ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of + * its children to be selected at the same time, or in the case of text + * objects, that the object supports non-contiguous text selections. + * @ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its + * rectangular region. It also indicates an alpha value of unity, if it + * supports alpha blending. + * @ATSPI_STATE_PRESSED: Indicates this object is currently pressed. + * @ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not + * fixed. + * @ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object + * that allows its children to be selected and that this child is one of + * those children that can be selected. + * @ATSPI_STATE_SELECTED: Indicates this object is the child of an object that + * allows its children to be selected and that this child is one of those + * children that has been selected. + * @ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user + * interaction. @ATSPI_STATE_SENSITIVE usually accompanies. + * @ATSPI_STATE_ENABLED for user-actionable controls, but may be found in the + * absence of @ATSPI_STATE_ENABLED if the current visible state of the control + * is "disconnected" from the application state. In such cases, direct user + * interaction can often result in the object gaining @ATSPI_STATE_SENSITIVE, + * for instance if a user makes an explicit selection using an object whose + * current state is ambiguous or undefined. See @ATSPI_STATE_ENABLED, + * @ATSPI_STATE_INDETERMINATE. + * @ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the + * object's parent's parent, and so on, are all 'shown' to the end-user, + * i.e. subject to "exposure" if blocking or obscuring objects do not + * interpose between this object and the top of the window stack. + * @ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a + * single line of text. + * @ATSPI_STATE_STALE: Indicates that the information returned for this object + * may no longer be synchronized with the application state. This can occur + * if the object has @ATSPI_STATE_TRANSIENT, and can also occur towards the + * end of the object peer's lifecycle. + * @ATSPI_STATE_TRANSIENT: Indicates this object is transient. + * @ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; + * for example this state may appear on such objects as scrollbars, text + * objects (with vertical text flow), separators, etc. + * @ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been + * explicitly marked for exposure to the user. @ATSPI_STATE_VISIBLE is no + * guarantee that the object is actually unobscured on the screen, only that + * it is 'potentially' visible, barring obstruction, being scrolled or clipped + * out of the field of view, or having an ancestor container that has not yet + * made visible. A widget is potentially onscreen if it has both + * @ATSPI_STATE_VISIBLE and @ATSPI_STATE_SHOWING. The absence of + * @ATSPI_STATE_VISIBLE and @ATSPI_STATE_SHOWING is + * semantically equivalent to saying that an object is 'hidden'. + * @ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" + * event is sent when children become 'active' (i.e. are selected or + * navigated to onscreen). Used to prevent need to enumerate all children + * in very large containers, like tables. The presence of + * @ATSPI_STATE_MANAGES_DESCENDANTS is an indication to the client that the + * children should not, and need not, be enumerated by the client. + * Objects implementing this state are expected to provide relevant state + * notifications to listening clients, for instance notifications of + * visibility changes and activation of their contained child objects, without + * the client having previously requested references to those children. + * @ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean + * indicator is in a state other than checked or not checked. This + * usually means that the boolean value reflected or controlled by the + * object does not apply consistently to the entire current context. + * For example, a checkbox for the "Bold" attribute of text may have + * @ATSPI_STATE_INDETERMINATE if the currently selected text contains a mixture + * of weight attributes. In many cases interacting with a + * @ATSPI_STATE_INDETERMINATE object will cause the context's corresponding + * boolean attribute to be homogenized, whereupon the object will lose + * @ATSPI_STATE_INDETERMINATE and a corresponding state-changed event will be + * fired. + * @ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is + * 'required' from the user, for instance before completing the + * processing of a form. + * @ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content + * is truncated, e.g. a text value in a spreadsheet cell. + * @ATSPI_STATE_ANIMATED: Indicates this object's visual representation is + * dynamic, not static. This state may be applied to an object during an + * animated 'effect' and be removed from the object once its visual + * representation becomes static. Some applications, notably content viewers, + * may not be able to detect all kinds of animated content. Therefore the + * absence of this state should not be taken as + * definitive evidence that the object's visual representation is + * static; this state is advisory. + * @ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition + * due to failure of input validation. For instance, a form control may + * acquire this state in response to invalid or malformed user input. + * @ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object + * in question implements some form of typeahead or + * pre-selection behavior whereby entering the first character of one or more + * sub-elements causes those elements to scroll into view or become + * selected. Subsequent character input may narrow the selection further as + * long as one or more sub-elements match the string. This state is normally + * only useful and encountered on objects that implement #AtspiSelection. + * In some cases the typeahead behavior may result in full or partial + * completion of the data in the input field, in which case + * these input events may trigger text-changed events from the source. + * @ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in + * question supports text selection. It should only be exposed on objects + * which implement the #AtspiText interface, in order to distinguish this state + * from @ATSPI_STATE_SELECTABLE, which infers that the object in question is a + * selectable child of an object which implements #AtspiSelection. While + * similar, text selection and subelement selection are distinct operations. + * @ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is + * the 'default' interaction object in a dialog, i.e. the one that gets + * activated if the user presses "Enter" when the dialog is initially + * posted. + * @ATSPI_STATE_VISITED: This state indicates that the object (typically a + * hyperlink) has already been activated or invoked, with the result that + * some backing data has been downloaded or rendered. + * @ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used + * as a parameter, it indicates the number of items in the #AtspiStateType + * enumeration. + * + * + * Enumeration used by various interfaces indicating every possible state + * an #AtspiAccesible object can assume. + * + **/ +typedef enum { + ATSPI_STATE_INVALID, + ATSPI_STATE_ACTIVE, + ATSPI_STATE_ARMED, + ATSPI_STATE_BUSY, + ATSPI_STATE_CHECKED, + ATSPI_STATE_COLLAPSED, + ATSPI_STATE_DEFUNCT, + ATSPI_STATE_EDITABLE, + ATSPI_STATE_ENABLED, + ATSPI_STATE_EXPANDABLE, + ATSPI_STATE_EXPANDED, + ATSPI_STATE_FOCUSABLE, + ATSPI_STATE_FOCUSED, + ATSPI_STATE_HAS_TOOLTIP, + ATSPI_STATE_HORIZONTAL, + ATSPI_STATE_ICONIFIED, + ATSPI_STATE_MODAL, + ATSPI_STATE_MULTI_LINE, + ATSPI_STATE_MULTISELECTABLE, + ATSPI_STATE_OPAQUE, + ATSPI_STATE_PRESSED, + ATSPI_STATE_RESIZABLE, + ATSPI_STATE_SELECTABLE, + ATSPI_STATE_SELECTED, + ATSPI_STATE_SENSITIVE, + ATSPI_STATE_SHOWING, + ATSPI_STATE_SINGLE_LINE, + ATSPI_STATE_STALE, + ATSPI_STATE_TRANSIENT, + ATSPI_STATE_VERTICAL, + ATSPI_STATE_VISIBLE, + ATSPI_STATE_MANAGES_DESCENDANTS, + ATSPI_STATE_INDETERMINATE, + ATSPI_STATE_REQUIRED, + ATSPI_STATE_TRUNCATED, + ATSPI_STATE_ANIMATED, + ATSPI_STATE_INVALID_ENTRY, + ATSPI_STATE_SUPPORTS_AUTOCOMPLETION, + ATSPI_STATE_SELECTABLE_TEXT, + ATSPI_STATE_IS_DEFAULT, + ATSPI_STATE_VISITED, + ATSPI_STATE_LAST_DEFINED, +} AtspiStateType; + +/** + * ATSPI_STATETYPE_COUNT: + * + * One higher than the highest valid value of #AtspiStateType. + **/ +#define ATSPI_STATETYPE_COUNT (41+1) + +/** + * AtspiKeyEventType: + * @ATSPI_KEY_PRESSED: + * @ATSPI_KEY_RELEASED: + * + * Deprecated. Should not be used. + * + **/ +typedef enum { + ATSPI_KEY_PRESSED, + ATSPI_KEY_RELEASED, +} AtspiKeyEventType; + +/** + * ATSPI_KEYEVENTTYPE_COUNT: + * + * One higher than the highest valid value of #AtspiKeyEventType. + **/ +#define ATSPI_KEYEVENTTYPE_COUNT (1+1) + +/** + * AtspiEventType: + * @ATSPI_KEY_PRESSED_EVENT: Indicates that a key on a keyboard device was + * pressed. + * @ATSPI_KEY_RELEASED_EVENT: Indicates that a key on a keyboard device was + * released. + * @ATSPI_BUTTON_PRESSED_EVENT: Indicates that a button on a non-keyboard + * human interface device (HID) was pressed. + * @ATSPI_BUTTON_RELEASED_EVENT: Indicates that a button on a non-keyboard + * human interface device (HID) was released. + * + * Enumeration used to specify the event types of interest to an + * #AtspiEventListener, or + * to identify the type of an event for which notification has been sent. + * + **/ +typedef enum { + ATSPI_KEY_PRESSED_EVENT, + ATSPI_KEY_RELEASED_EVENT, + ATSPI_BUTTON_PRESSED_EVENT, + ATSPI_BUTTON_RELEASED_EVENT, +} AtspiEventType; + +/** + * ATSPI_EVENTTYPE_COUNT: + * + * One higher than the highest valid value of #AtspiEventType. + */ +#define ATSPI_EVENTTYPE_COUNT (3+1) + +/** + * AtspiKeySynthType: + * @ATSPI_KEY_PRESS: Emulates the pressing of a hardware keyboard key. + * @ATSPI_KEY_RELEASE: Emulates the release of a hardware keyboard key. + * @ATSPI_KEY_PRESSRELEASE: Emulates the pressing and immediate releasing + * ofa hardware keyboard key. + * @ATSPI_KEY_SYM: A symbolic key event is generated, without specifying a + * hardware key. Note: if the keysym is not present in the current keyboard + * map, the #AtspiDeviceEventController instance has a limited ability to + * generate such keysyms on-the-fly. Reliability of GenerateKeyboardEvent + * calls using out-of-keymap keysyms will vary from system to system, and on + * the number of different out-of-keymap being generated in quick succession. + * In practice this is rarely significant, since the keysyms of interest to + * AT clients and keyboard emulators are usually part of the current keymap, + * i.e. present on the system keyboard for the current locale (even if a + * physical hardware keyboard is not connected. + * @ATSPI_KEY_STRING: A string is converted to its equivalent keyboard events + * and emitted. If the string consists of complex character or composed + * characters which are not in the current keymap, string emission is + * subject to the out-of-keymap limitations described for + * @ATSPI_KEY_SYM. In practice this limitation primarily effects + * Chinese and Japanese locales. + * + * Enumeration used when synthesizing keyboard input via + * #atspi_generate_keyboard_event. + * + **/ +typedef enum { + ATSPI_KEY_PRESS, + ATSPI_KEY_RELEASE, + ATSPI_KEY_PRESSRELEASE, + ATSPI_KEY_SYM, + ATSPI_KEY_STRING, +} AtspiKeySynthType; + +/** + * ATSPI_KEYSYNTHTYPE_COUNT: + * + * One higher than the highest valid value of #AtspiKeySynthType. + **/ +#define ATSPI_KEYSYNTHTYPE_COUNT (4+1) + +/** + * AtspiModifierType: + * @ATSPI_MODIFIER_SHIFT: The left or right 'Shift' key. + * @ATSPI_MODIFIER_SHIFTLOCK: The ShiftLock or CapsLock key. + * @ATSPI_MODIFIER_CONTROL: 'Control'/'Ctrl'. + * @ATSPI_MODIFIER_ALT: The Alt key (as opposed to AltGr). + * @ATSPI_MODIFIER_META: Depending on the platform, this may map to 'Window', + * 'Function', 'Meta', 'Menu', or 'NumLock'. Such 'Meta keys' will + * map to one of META, META2, META3. On X Windows platforms these META + * values map to the modifier masks Mod1Mask, Mod2Mask, Mod3Mask, e.g. an + * event having @ATSPI_MODIFIER_META2 means that the 'Mod2Mask' bit + * is set in the corresponding XEvent. + * @ATSPI_MODIFIER_META2: See @ATSPI_MODIFIER_META. + * @ATSPI_MODIFIER_META3: See @ATSPI_MODIFIER_META. + * @ATSPI_MODIFIER_NUMLOCK: A symbolic meta key name that is mapped by AT-SPI + * to the appropriate META value, for the convenience of the client. + * + * + * + **/ +typedef enum { + ATSPI_MODIFIER_SHIFT, + ATSPI_MODIFIER_SHIFTLOCK, + ATSPI_MODIFIER_CONTROL, + ATSPI_MODIFIER_ALT, + ATSPI_MODIFIER_META, + ATSPI_MODIFIER_META2, + ATSPI_MODIFIER_META3, + ATSPI_MODIFIER_NUMLOCK = 14, +} AtspiModifierType; + +/** + * ATSPI_MODIFIERTYPE_COUNT: + * + * One higher than the highest valid value of #AtspiModifierType. + **/ +#define ATSPI_MODIFIERTYPE_COUNT (7+1) + +/** + * AtspiRelationType: + * @ATSPI_RELATION_NULL: Not a meaningful relationship; clients should not + * normally encounter this #AtspiRelationType value. + * @ATSPI_RELATION_LABEL_FOR: Object is a label for one or more other objects. + * @ATSPI_RELATION_LABELLED_BY: Object is labelled by one or more other + * objects. + * @ATSPI_RELATION_CONTROLLER_FOR: Object is an interactive object which + * modifies the state, onscreen location, or other attributes of one or more + * target objects. + * @ATSPI_RELATION_CONTROLLED_BY: Object state, position, etc. is + * modified/controlled by user interaction with one or more other objects. + * For instance a viewport or scroll pane may be @ATSPI_RELATION_CONTROLLED_BY + * scrollbars. + * @ATSPI_RELATION_MEMBER_OF: Object has a grouping relationship (e.g. 'same + * group as') to one or more other objects. + * @ATSPI_RELATION_TOOLTIP_FOR: Object is a tooltip associated with another + * object. + * @ATSPI_RELATION_NODE_CHILD_OF: Object is a child of the target. + * @ATSPI_RELATION_NODE_PARENT_OF: Object is a parent of the target. + * @ATSPI_RELATION_EXTENDED: Used to indicate that a relationship exists, but + * its type is not specified in the enumeration. + * @ATSPI_RELATION_FLOWS_TO: Object renders content which flows logically to + * another object. For instance, text in a paragraph may flow to another + * object which is not the 'next sibling' in the accessibility hierarchy. + * @ATSPI_RELATION_FLOWS_FROM: Reciprocal of @ATSPI_RELATION_FLOWS_TO. + * @ATSPI_RELATION_SUBWINDOW_OF: Object is visually and semantically considered + * a subwindow of another object, even though it is not the object's child. + * Useful when dealing with embedded applications and other cases where the + * widget hierarchy does not map cleanly to the onscreen presentation. + * @ATSPI_RELATION_EMBEDS: Similar to @ATSPI_RELATION_SUBWINDOW_OF, but + * specifically used for cross-process embedding. + * @ATSPI_RELATION_EMBEDDED_BY: Reciprocal of @ATSPI_RELATION_EMBEDS. Used to + * denote content rendered by embedded renderers that live in a separate process + * space from the embedding context. + * @ATSPI_RELATION_POPUP_FOR: Denotes that the object is a transient window or + * frame associated with another onscreen object. Similar to @ATSPI_TOOLTIP_FOR, + * but more general. Useful for windows which are technically toplevels + * but which, for one or more reasons, do not explicitly cause their + * associated window to lose 'window focus'. Creation of an @ATSPI_ROLE_WINDOW + * object with the @ATSPI_RELATION_POPUP_FOR relation usually requires + * some presentation action on the part + * of assistive technology clients, even though the previous toplevel + * @ATSPI_ROLE_FRAME object may still be the active window. + * @ATSPI_RELATION_PARENT_WINDOW_OF: This is the reciprocal relation to + * @ATSPI_RELATION_POPUP_FOR. + * @ATSPI_RELATION_DESCRIPTION_FOR: Indicates that an object provides + * descriptive information about another object; more verbose than + * @ATSPI_RELATION_LABEL_FOR. + * @ATSPI_RELATION_DESCRIBED_BY: Indicates that another object provides + * descriptive information about this object; more verbose than + * @ATSPI_RELATION_LABELLED_BY. + * @ATSPI_RELATION_LAST_DEFINED: Do not use as a parameter value, used to + * determine the size of the enumeration. + * + * #AtspiRelationType specifies a relationship between objects + * (possibly one-to-many + * or many-to-one) outside of the normal parent/child hierarchical + * relationship. It allows better semantic identification of how objects + * are associated with one another. For instance the + * @ATSPI_RELATION_LABELLED_BY + * relationship may be used to identify labelling information that should + * accompany the accessible name property when presenting an object's content or + * identity to the end user. Similarly, + * @ATSPI_RELATION_CONTROLLER_FOR can be used + * to further specify the context in which a valuator is useful, and/or the + * other UI components which are directly effected by user interactions with + * the valuator. Common examples include association of scrollbars with the + * viewport or panel which they control. + * + * + * Enumeration used to specify + * the type of relation encapsulated in an #AtspiRelation object. + * + **/ +typedef enum { + ATSPI_RELATION_NULL, + ATSPI_RELATION_LABEL_FOR, + ATSPI_RELATION_LABELLED_BY, + ATSPI_RELATION_CONTROLLER_FOR, + ATSPI_RELATION_CONTROLLED_BY, + ATSPI_RELATION_MEMBER_OF, + ATSPI_RELATION_TOOLTIP_FOR, + ATSPI_RELATION_NODE_CHILD_OF, + ATSPI_RELATION_NODE_PARENT_OF, + ATSPI_RELATION_EXTENDED, + ATSPI_RELATION_FLOWS_TO, + ATSPI_RELATION_FLOWS_FROM, + ATSPI_RELATION_SUBWINDOW_OF, + ATSPI_RELATION_EMBEDS, + ATSPI_RELATION_EMBEDDED_BY, + ATSPI_RELATION_POPUP_FOR, + ATSPI_RELATION_PARENT_WINDOW_OF, + ATSPI_RELATION_DESCRIPTION_FOR, + ATSPI_RELATION_DESCRIBED_BY, + ATSPI_RELATION_LAST_DEFINED, +} AtspiRelationType; + +/** + * ATSPI_RELATIONTYPE_COUNT: + * + * One higher than the highest valid value of #AtspiRelationType. + **/ +#define ATSPI_RELATIONTYPE_COUNT (19+1) + +/** + * AtspiRole: + * @ATSPI_ROLE_INVALID: A role indicating an error condition, such as + * uninitialized Role data. + * @ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard + * accelerators for the parent. + * @ATSPI_ROLE_ALERT: Object is used to alert the user about something. + * @ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some + * kind. + * @ATSPI_ROLE_ARROW: Object is a 2d directional indicator. + * @ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged + * into a 2d list. + * @ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap + * events. + * @ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and + * provides a separate indicator for the current state. + * @ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box. See + * @ATSPI_ROLE_CHECK_BOX. + * @ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a + * color. + * @ATSPI_ROLE_COLUMN_HEADER: The header for a column of data. + * @ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from. + * @ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date. + * @ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE. + * @ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and + * iconified versions of those internal frames. + * @ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a + * visual element, or which displays a value via such a rotating element. + * @ATSPI_ROLE_DIALOG: A top level window with title bar and a border. + * @ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through + * and select the contents of a directory. + * @ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in + * the directory and lets the user select a file, browse a different + * directory, or specify a filename. + * @ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface + * elements. + * @ATSPI_ROLE_FILLER: A object that fills up space in a user interface. + * @ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. + * @ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font. + * @ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, + * etc. + * @ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of + * all panes beneath it. + * @ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children + * represent the document content. + * @ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate + * components. + * @ATSPI_ROLE_IMAGE: An image, typically static. + * @ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop + * pane. + * @ATSPI_ROLE_LABEL: An object used to present an icon or short string in an + * interface. + * @ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be + * drawn in layers, providing a form of stacking order. + * @ATSPI_ROLE_LIST: An object that presents a list of objects to the user and + * allows the user to select one or more of them. + * @ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. + * @ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a + * list of actions the user can choose from. + * @ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary + * dialog box of an application that contains a list of menus the user can + * choose from. + * @ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents + * an action the user can choose. + * @ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a + * dialog. + * @ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list. + * @ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or + * page tabs), one at a time,through some mechanism provided by the + * object. + * @ATSPI_ROLE_PANEL: A generic container that is often used to group objects. + * @ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places + * where the text content is not shown visibly to the user. + * @ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the + * user a list of choices, and then hides when the user selects one of those + * choices. + * @ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has + * been completed. + * @ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the + * application to do something. + * @ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other + * radio buttons in the same group to become unchecked when this one is + * checked. + * @ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" + * . See @ATSPI_ROLE_RADIO_BUTTON. + * @ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a + * layered pane as its children. + * @ATSPI_ROLE_ROW_HEADER: The header for a row of data. + * @ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to + * incrementally view a large amount of data by moving the bounds of a + * viewport along a one-dimensional axis. + * @ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view + * a large amount of information. @ATSPI_ROLE_SCROLL_PANE objects are usually + * accompanied by @ATSPI_ROLE_SCROLL_BAR controllers, on which the + * @ATSPI_RELATION_CONTROLLER_FOR and @ATSPI_RELATION_CONTROLLED_BY + * reciprocal relations are set. See #atspi_get_relation_set. + * @ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a + * visible and logical separation of the contents in a menu. + * @ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded + * range. + * @ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to + * be selected, and which displays the current choice. Unlike + * @ATSPI_ROLE_SCROLL_BAR, @ATSPI_ROLE_SLIDER objects need not control + * 'viewport'-like objects. + * @ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels + * at the same time. + * @ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information + * (c.f. @ATSPI_ROLE_PROGRESS_BAR) + * @ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows + * and columns. + * @ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. Note: + * Table cells need not have @ATSPI_ROLE_TABLE_CELL, other + * #AtspiRoleType values are valid as well. + * @ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column + * in an #AtspiTable. + * @ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a + * #AtspiTable. #AtspiTable rows and columns may also be labelled via the + * @ATSPI_RELATION_LABEL_FOR/@ATSPI_RELATION_LABELLED_BY relationships. + * See #atspi_get_relation_set. + * @ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar + * and shown in its own window. + * @ATSPI_ROLE_TERMINAL: An object that emulates a terminal. + * @ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific + * type. + * @ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or + * unchecked, but does not procide a separate indicator for the current + * state. + * @ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or + * toggle buttons. + * @ATSPI_ROLE_TOOL_TIP: An object that provides information about another + * object. + * @ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the + * user. + * @ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and + * hierarchical info to the user. + * @ATSPI_ROLE_UNKNOWN: The object contains some #AtspiAccessible information, + * but its role is not known. + * @ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to + * otherwise clip a larger object or content renderer to a specific + * onscreen viewport. + * @ATSPI_ROLE_WINDOW: A top level window with no title or border. + * @ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not + * included in the core enumeration. + * @ATSPI_ROLE_HEADER: An object that serves as a document header. + * @ATSPI_ROLE_FOOTER: An object that serves as a document footer. + * @ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of + * text content. See also @ATSPI_ROLE_TEXT. + * @ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. + * for text objects which it controls (should have + * @ATSPI_RELATION_CONTROLLER_FOR relation to such). + * @ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible + * of an application, which may contain @ATSPI_ROLE_FRAME objects or other + * accessible objects. Children of #AccessibleDesktop objects are generally + * @ATSPI_ROLE_APPLICATION objects. + * @ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items + * for insertion into an entry widget, for instance a list of words for + * completion of a text entry. + * @ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. + * @ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This + * role is a "grouping" hint that the contained objects share a context + * which is different from the container in which this accessible is + * embedded. In particular, it is used for some kinds of document embedding, + * and for embedding of out-of-process component, "panel applets", etc. + * @ATSPI_ROLE_ENTRY: The object is a component whose textual content may be + * entered or modified by the user, provided @ATSPI_STATE_EDITABLE is present. + * A readonly @ATSPI_ROLE_ENTRY object (i.e. where @ATSPI_STATE_EDITABLE is + * not present) implies a read-only 'text field' in a form, as opposed to a + * title, label, or caption. + * @ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. + * It may contain multiple subelements whose attributes and/or description + * may be queried to obtain both the quantitative data and information about + * how the data is being presented. The @ATSPI_LABELLED_BY relation is + * particularly important in interpreting objects of this type, as is the + * accessible description property. See @ATSPI_ROLE_CAPTION. + * @ATSPI_ROLE_CAPTION: The object contains descriptive information, usually + * textual, about another user interface element such as a table, chart, or + * image. + * @ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which + * contains a view of document content. #AtspiDocument frames may occur within + * another #AtspiDocument instance, in which case the second document may be + * said to be embedded in the containing instance. HTML frames are often + * @ATSPI_ROLE_DOCUMENT_FRAME: Either this object, or a singleton descendant, + * should implement the #AtspiDocument interface. + * @ATSPI_ROLE_HEADING: The object serves as a heading for content which + * follows it in a document. The 'heading level' of the heading, if + * availabe, may be obtained by querying the object's attributes. + * @ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a + * page of information. @ATSPI_ROLE_PAGE is used in documents and content which + * support a paginated navigation model. + * @ATSPI_ROLE_SECTION: The object is a containing instance of document content + * which constitutes a particular 'logical' section of the document. The + * type of content within a section, and the nature of the section division + * itself, may be obtained by querying the object's attributes. Sections + * may be nested. + * @ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in + * the hierarchy, and is exposed for purely technical reasons. Objects of + * this role should be ignored by clients, if they are encountered at all. + * @ATSPI_ROLE_FORM: The object is a containing instance of document content + * which has within it components with which the user can interact in order + * to input information; i.e. the object is a container for pushbuttons, + * comboboxes, text input fields, and other 'GUI' components. @ATSPI_ROLE_FORM + * should not, in general, be used for toplevel GUI containers or dialogs, + * but should be reserved for 'GUI' containers which occur within document + * content, for instance within Web documents, presentations, or text + * documents. Unlike other GUI containers and dialogs which occur inside + * application instances, @ATSPI_ROLE_FORM containers' components are + * associated with the current document, rather than the current foreground + * application or viewer instance. + * @ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a + * hypertext document. Such objects are distinct from 'inline' content + * which may also use the #AtspiHypertext/#AtspiHyperlink interfacesto indicate + * the range/location within a text object where an inline or embedded object + * lies. + * @ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport + * which is used to allow composition or input of a 'complex character', + * in other words it is an "input method window". + * @ATSPI_ROLE_TABLE_ROW: A row in a table. + * @ATSPI_ROLE_TREE_ITEM: An object that represents an element of a tree. + * @ATSPI_ROLE_DOCUMENT_SPREADSHEET: A document frame which contains a + * spreadsheet. + * @ATSPI_ROLE_DOCUMENT_PRESENTATION: A document frame which contains a + * presentation or slide content. + * @ATSPI_ROLE_DOCUMENT_TEXT: A document frame which contains textual content, + * such as found in a word processing + * application. + * @ATSPI_ROLE_DOCUMENT_WEB: A document frame which contains HTML or other + * markup suitable for display in a web browser. + * @ATSPI_ROLE_DOCUMENT_EMAIL: A document frame which contains email content + * to be displayed or composed either in plain text or + * HTML. + * @ATSPI_ROLE_COMMENT: An object found within a document and designed to + * present a comment, note, or other annotation. In some cases, this object + * might not be visible until activated. + * @ATSPI_ROLE_LIST_BOX: A non-collapsible list of choices the user can + * select from. + * @ATSPI_ROLE_GROUPING: A group of related widgets. This group typically has + * a label. + * @ATSPI_ROLE_IMAGE_MAP: An image map object. Usually a graphic with multiple + * hotspots, where each hotspot can be activated resulting in the loading of + * another document or section of a document. + * @ATSPI_ROLE_NOTIFICATION: A transitory object designed to present a + * message to the user, typically at the desktop level rather than inside a + * particular application. + * @ATSPI_ROLE_INFO_BAR: An object designed to present a message to the user + * within an existing window. + * @ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of + * enumeration. + * + * Enumeration used by interface #AtspiAccessible to specify the role + * of an #AtspiAccessible object. + * + */ +typedef enum { + ATSPI_ROLE_INVALID, + ATSPI_ROLE_ACCELERATOR_LABEL, + ATSPI_ROLE_ALERT, + ATSPI_ROLE_ANIMATION, + ATSPI_ROLE_ARROW, + ATSPI_ROLE_CALENDAR, + ATSPI_ROLE_CANVAS, + ATSPI_ROLE_CHECK_BOX, + ATSPI_ROLE_CHECK_MENU_ITEM, + ATSPI_ROLE_COLOR_CHOOSER, + ATSPI_ROLE_COLUMN_HEADER, + ATSPI_ROLE_COMBO_BOX, + ATSPI_ROLE_DATE_EDITOR, + ATSPI_ROLE_DESKTOP_ICON, + ATSPI_ROLE_DESKTOP_FRAME, + ATSPI_ROLE_DIAL, + ATSPI_ROLE_DIALOG, + ATSPI_ROLE_DIRECTORY_PANE, + ATSPI_ROLE_DRAWING_AREA, + ATSPI_ROLE_FILE_CHOOSER, + ATSPI_ROLE_FILLER, + ATSPI_ROLE_FOCUS_TRAVERSABLE, + ATSPI_ROLE_FONT_CHOOSER, + ATSPI_ROLE_FRAME, + ATSPI_ROLE_GLASS_PANE, + ATSPI_ROLE_HTML_CONTAINER, + ATSPI_ROLE_ICON, + ATSPI_ROLE_IMAGE, + ATSPI_ROLE_INTERNAL_FRAME, + ATSPI_ROLE_LABEL, + ATSPI_ROLE_LAYERED_PANE, + ATSPI_ROLE_LIST, + ATSPI_ROLE_LIST_ITEM, + ATSPI_ROLE_MENU, + ATSPI_ROLE_MENU_BAR, + ATSPI_ROLE_MENU_ITEM, + ATSPI_ROLE_OPTION_PANE, + ATSPI_ROLE_PAGE_TAB, + ATSPI_ROLE_PAGE_TAB_LIST, + ATSPI_ROLE_PANEL, + ATSPI_ROLE_PASSWORD_TEXT, + ATSPI_ROLE_POPUP_MENU, + ATSPI_ROLE_PROGRESS_BAR, + ATSPI_ROLE_PUSH_BUTTON, + ATSPI_ROLE_RADIO_BUTTON, + ATSPI_ROLE_RADIO_MENU_ITEM, + ATSPI_ROLE_ROOT_PANE, + ATSPI_ROLE_ROW_HEADER, + ATSPI_ROLE_SCROLL_BAR, + ATSPI_ROLE_SCROLL_PANE, + ATSPI_ROLE_SEPARATOR, + ATSPI_ROLE_SLIDER, + ATSPI_ROLE_SPIN_BUTTON, + ATSPI_ROLE_SPLIT_PANE, + ATSPI_ROLE_STATUS_BAR, + ATSPI_ROLE_TABLE, + ATSPI_ROLE_TABLE_CELL, + ATSPI_ROLE_TABLE_COLUMN_HEADER, + ATSPI_ROLE_TABLE_ROW_HEADER, + ATSPI_ROLE_TEAROFF_MENU_ITEM, + ATSPI_ROLE_TERMINAL, + ATSPI_ROLE_TEXT, + ATSPI_ROLE_TOGGLE_BUTTON, + ATSPI_ROLE_TOOL_BAR, + ATSPI_ROLE_TOOL_TIP, + ATSPI_ROLE_TREE, + ATSPI_ROLE_TREE_TABLE, + ATSPI_ROLE_UNKNOWN, + ATSPI_ROLE_VIEWPORT, + ATSPI_ROLE_WINDOW, + ATSPI_ROLE_EXTENDED, + ATSPI_ROLE_HEADER, + ATSPI_ROLE_FOOTER, + ATSPI_ROLE_PARAGRAPH, + ATSPI_ROLE_RULER, + ATSPI_ROLE_APPLICATION, + ATSPI_ROLE_AUTOCOMPLETE, + ATSPI_ROLE_EDITBAR, + ATSPI_ROLE_EMBEDDED, + ATSPI_ROLE_ENTRY, + ATSPI_ROLE_CHART, + ATSPI_ROLE_CAPTION, + ATSPI_ROLE_DOCUMENT_FRAME, + ATSPI_ROLE_HEADING, + ATSPI_ROLE_PAGE, + ATSPI_ROLE_SECTION, + ATSPI_ROLE_REDUNDANT_OBJECT, + ATSPI_ROLE_FORM, + ATSPI_ROLE_LINK, + ATSPI_ROLE_INPUT_METHOD_WINDOW, + ATSPI_ROLE_TABLE_ROW, + ATSPI_ROLE_TREE_ITEM, + ATSPI_ROLE_DOCUMENT_SPREADSHEET, + ATSPI_ROLE_DOCUMENT_PRESENTATION, + ATSPI_ROLE_DOCUMENT_TEXT, + ATSPI_ROLE_DOCUMENT_WEB, + ATSPI_ROLE_DOCUMENT_EMAIL, + ATSPI_ROLE_COMMENT, + ATSPI_ROLE_LIST_BOX, + ATSPI_ROLE_GROUPING, + ATSPI_ROLE_IMAGE_MAP, + ATSPI_ROLE_NOTIFICATION, + ATSPI_ROLE_INFO_BAR, + ATSPI_ROLE_LAST_DEFINED, +} AtspiRole; + +/** + * ATSPI_ROLE_COUNT: + * + * One higher than the highest valid value of #AtspiRole. + */ +#define ATSPI_ROLE_COUNT (90+1) + +typedef enum +{ + ATSPI_CACHE_NONE = 0, + ATSPI_CACHE_PARENT = 1 << 0, + ATSPI_CACHE_CHILDREN = 1 << 1, + ATSPI_CACHE_NAME = 1 << 2, + ATSPI_CACHE_DESCRIPTION = 1 << 3, + ATSPI_CACHE_STATES = 1 << 4, + ATSPI_CACHE_ROLE = 1 << 5, + ATSPI_CACHE_INTERFACES = 1 << 6, + ATSPI_CACHE_ATTRIBUTES = 1 << 7, + ATSPI_CACHE_ALL = 0x3fffffff, + ATSPI_CACHE_DEFAULT = ATSPI_CACHE_PARENT | ATSPI_CACHE_CHILDREN | + ATSPI_CACHE_NAME | ATSPI_CACHE_DESCRIPTION | + ATSPI_CACHE_STATES | ATSPI_CACHE_ROLE | + ATSPI_CACHE_INTERFACES, + ATSPI_CACHE_UNDEFINED = 0x40000000, +} AtspiCache; + +#define ATSPI_DBUS_NAME_REGISTRY "org.a11y.atspi.Registry" +#define ATSPI_DBUS_PATH_REGISTRY "/org/a11y/atspi/registry" +#define ATSPI_DBUS_INTERFACE_REGISTRY "org.a11y.atspi.Registry" + +#define ATSPI_DBUS_PATH_NULL "/org/a11y/atspi/null" +#define ATSPI_DBUS_PATH_ROOT "/org/a11y/atspi/accessible/root" + +#define ATSPI_DBUS_PATH_DEC "/org/a11y/atspi/registry/deviceeventcontroller" +#define ATSPI_DBUS_INTERFACE_DEC "org.a11y.atspi.DeviceEventController" +#define ATSPI_DBUS_INTERFACE_DEVICE_EVENT_LISTENER "org.a11y.atspi.DeviceEventListener" + +#define ATSPI_DBUS_INTERFACE_CACHE "org.a11y.atspi.Cache" +#define ATSPI_DBUS_INTERFACE_ACCESSIBLE "org.a11y.atspi.Accessible" +#define ATSPI_DBUS_INTERFACE_ACTION "org.a11y.atspi.Action" +#define ATSPI_DBUS_INTERFACE_APPLICATION "org.a11y.atspi.Application" +#define ATSPI_DBUS_INTERFACE_COLLECTION "org.a11y.atspi.Collection" +#define ATSPI_DBUS_INTERFACE_COMPONENT "org.a11y.atspi.Component" +#define ATSPI_DBUS_INTERFACE_DOCUMENT "org.a11y.atspi.Document" +#define ATSPI_DBUS_INTERFACE_EDITABLE_TEXT "org.a11y.atspi.EditableText" +#define ATSPI_DBUS_INTERFACE_EVENT_KEYBOARD "org.a11y.atspi.Event.Keyboard" +#define ATSPI_DBUS_INTERFACE_EVENT_MOUSE "org.a11y.atspi.Event.Mouse" +#define ATSPI_DBUS_INTERFACE_EVENT_OBJECT "org.a11y.atspi.Event.Object" +#define ATSPI_DBUS_INTERFACE_HYPERLINK "org.a11y.atspi.Hyperlink" +#define ATSPI_DBUS_INTERFACE_HYPERTEXT "org.a11y.atspi.Hypertext" +#define ATSPI_DBUS_INTERFACE_IMAGE "org.a11y.atspi.Image" +#define ATSPI_DBUS_INTERFACE_SELECTION "org.a11y.atspi.Selection" +#define ATSPI_DBUS_INTERFACE_TABLE "org.a11y.atspi.Table" +#define ATSPI_DBUS_INTERFACE_TEXT "org.a11y.atspi.Text" +#define ATSPI_DBUS_INTERFACE_VALUE "org.a11y.atspi.Value" +#define ATSPI_DBUS_INTERFACE_SOCKET "org.a11y.atspi.Socket" + +#ifdef __cplusplus +} +#endif +#endif /* _ATSPI_CONSTANTS_H_ */ diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 46d7a1d90..7ea8e5a32 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -7,6 +7,7 @@ AM_CPPFLAGS = \ -I. \ -I$(top_builddir) \ -I$(top_srcdir) \ +-I$(top_srcdir)/src/imported \ -I$(top_srcdir)/src/lib \ -I$(top_builddir)/src/lib \ -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ @@ -481,7 +482,9 @@ elm_win.c \ els_box.c \ els_cursor.c \ els_tooltip.c \ -elu_ews_wm.c +elu_ews_wm.c \ +elm_atspi_bridge.c + libelementary_la_CFLAGS = libelementary_la_LIBADD = \ diff --git a/src/lib/elc_fileselector.c b/src/lib/elc_fileselector.c index e6a9b8eb9..3e4e44aa9 100644 --- a/src/lib/elc_fileselector.c +++ b/src/lib/elc_fileselector.c @@ -21,6 +21,9 @@ EAPI Eo_Op ELM_OBJ_FILESELECTOR_BASE_ID = EO_NOOP; #define MY_CLASS_NAME "Elm_Fileselector" #define MY_CLASS_NAME_LEGACY "elm_fileselector" +/* FIXME: need a way to find a gap between the size of item and thumbnail */ +#define GENGRID_PADDING 16 + static Elm_Genlist_Item_Class *list_itc[ELM_FILE_LAST]; static Elm_Gengrid_Item_Class *grid_itc[ELM_FILE_LAST]; @@ -150,15 +153,25 @@ _itc_icon_folder_get(void *data __UNUSED__, Evas_Object *obj, const char *source) { - Evas_Object *ic; + Evas_Object *ic, *grid, *f; if (strcmp(source, "elm.swallow.icon")) return NULL; + f = evas_object_data_get(obj, "parent"); + ELM_FILESELECTOR_DATA_GET(f, sd); + ic = elm_icon_add(obj); elm_icon_standard_set(ic, "folder"); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - return ic; + evas_object_show(ic); + + grid = elm_grid_add(obj); + elm_grid_size_set(grid, 1, 1); + elm_grid_pack(grid, ic, 0, 0, 1, 1); + evas_object_size_hint_min_set(grid, sd->thumbnail_size.w, sd->thumbnail_size.h); + evas_object_show(grid); + + return grid; } static Evas_Object * @@ -167,16 +180,26 @@ _itc_icon_image_get(void *data, const char *source) { const char *filename = data; - Evas_Object *ic; + Evas_Object *ic, *grid, *f; if (strcmp(source, "elm.swallow.icon")) return NULL; + f = evas_object_data_get(obj, "parent"); + ELM_FILESELECTOR_DATA_GET(f, sd); + ic = elm_icon_add(obj); elm_icon_standard_set(ic, "image"); elm_icon_thumb_set(ic, filename, NULL); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - return ic; + evas_object_show(ic); + + grid = elm_grid_add(obj); + elm_grid_size_set(grid, 1, 1); + elm_grid_pack(grid, ic, 0, 0, 1, 1); + evas_object_size_hint_min_set(grid, sd->thumbnail_size.w, sd->thumbnail_size.h); + evas_object_show(grid); + + return grid; } static Evas_Object * @@ -184,15 +207,25 @@ _itc_icon_file_get(void *data __UNUSED__, Evas_Object *obj, const char *source) { - Evas_Object *ic; + Evas_Object *ic, *grid, *f; if (strcmp(source, "elm.swallow.icon")) return NULL; + f = evas_object_data_get(obj, "parent"); + ELM_FILESELECTOR_DATA_GET(f, sd); + ic = elm_icon_add(obj); elm_icon_standard_set(ic, "file"); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - return ic; + evas_object_show(ic); + + grid = elm_grid_add(obj); + elm_grid_size_set(grid, 1, 1); + elm_grid_pack(grid, ic, 0, 0, 1, 1); + evas_object_size_hint_min_set(grid, sd->thumbnail_size.w, sd->thumbnail_size.h); + evas_object_show(grid); + + return grid; } static Eina_Bool @@ -1014,6 +1047,7 @@ _files_list_add(Evas_Object *obj) Evas_Object *li; li = elm_genlist_add(obj); + evas_object_data_set(li, "parent", obj); elm_widget_mirrored_automatic_set(li, EINA_FALSE); evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -1039,16 +1073,17 @@ static Evas_Object * _files_grid_add(Evas_Object *obj) { Evas_Object *grid; - int s; + + ELM_FILESELECTOR_DATA_GET(obj, sd); grid = elm_gengrid_add(obj); + evas_object_data_set(grid, "parent", obj); elm_widget_mirrored_automatic_set(grid, EINA_FALSE); evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - // XXX: will fail for dynamic finger size changing - s = elm_config_finger_size_get() * 2; - elm_gengrid_item_size_set(grid, s, s); + elm_gengrid_item_size_set(grid, sd->thumbnail_size.w + GENGRID_PADDING, sd->thumbnail_size.h + GENGRID_PADDING); + elm_gengrid_align_set(grid, 0.0, 0.0); evas_object_smart_callback_add(grid, "selected", _on_item_selected, obj); @@ -1227,6 +1262,10 @@ _elm_fileselector_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) elm_widget_sub_object_add(obj, pb); priv->spinner = pb; + // XXX: will fail for dynamic finger size changing + priv->thumbnail_size.w = elm_config_finger_size_get() * 2 - GENGRID_PADDING; + priv->thumbnail_size.h = priv->thumbnail_size.w; + // files_view priv->files_view = _files_list_add(obj); @@ -1905,6 +1944,56 @@ _hidden_visible_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list EINA_UNUSED) *ret = sd->hidden_visible; } +EAPI void +elm_fileselector_thumbnail_size_set(Evas_Object *obj, + Evas_Coord w, + Evas_Coord h) +{ + ELM_FILESELECTOR_CHECK(obj); + eo_do(obj, elm_obj_fileselector_thumbnail_size_set(w, h)); +} + +static void +_thumbnail_size_set(Eo *obj __UNUSED__, void *_pd, va_list *list EINA_UNUSED) +{ + Evas_Coord w = va_arg(*list, Evas_Coord); + Evas_Coord h = va_arg(*list, Evas_Coord); + Elm_Fileselector_Smart_Data *sd = _pd; + + if (sd->thumbnail_size.w == w && sd->thumbnail_size.h == h) return; + + if (!w || !h) + w = h = elm_config_finger_size_get() * 2 - GENGRID_PADDING; + + sd->thumbnail_size.w = w; + sd->thumbnail_size.h = h; + + if (sd->mode == ELM_FILESELECTOR_GRID) + elm_gengrid_item_size_set(sd->files_view, w + GENGRID_PADDING, h + GENGRID_PADDING); + + _populate(obj, sd->path, NULL, NULL); +} + +EAPI void +elm_fileselector_thumbnail_size_get(const Evas_Object *obj, + Evas_Coord *w, + Evas_Coord *h) +{ + ELM_FILESELECTOR_CHECK(obj); + eo_do((Eo *) obj, elm_obj_fileselector_thumbnail_size_get(w, h)); +} + +static void +_thumbnail_size_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list EINA_UNUSED) +{ + Evas_Coord *w = va_arg(*list, Evas_Coord *); + Evas_Coord *h = va_arg(*list, Evas_Coord *); + Elm_Fileselector_Smart_Data *sd = _pd; + + if (w) *w = sd->thumbnail_size.w; + if (h) *h = sd->thumbnail_size.h; +} + static void _elm_fileselector_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) { @@ -1987,6 +2076,8 @@ _class_constructor(Eo_Class *klass) EO_OP_FUNC(ELM_OBJ_FILESELECTOR_ID(ELM_OBJ_FILESELECTOR_SUB_ID_FILTERS_CLEAR), _filters_clear), EO_OP_FUNC(ELM_OBJ_FILESELECTOR_ID(ELM_OBJ_FILESELECTOR_SUB_ID_HIDDEN_VISIBLE_SET), _hidden_visible_set), EO_OP_FUNC(ELM_OBJ_FILESELECTOR_ID(ELM_OBJ_FILESELECTOR_SUB_ID_HIDDEN_VISIBLE_GET), _hidden_visible_get), + EO_OP_FUNC(ELM_OBJ_FILESELECTOR_ID(ELM_OBJ_FILESELECTOR_SUB_ID_THUMBNAIL_SIZE_SET), _thumbnail_size_set), + EO_OP_FUNC(ELM_OBJ_FILESELECTOR_ID(ELM_OBJ_FILESELECTOR_SUB_ID_THUMBNAIL_SIZE_GET), _thumbnail_size_get), EO_OP_FUNC_SENTINEL }; eo_class_funcs_set(klass, func_desc); @@ -2049,6 +2140,8 @@ static const Eo_Op_Description op_desc[] = { EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_SUB_ID_FILTERS_CLEAR, "Clear filters"), EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_SUB_ID_HIDDEN_VISIBLE_SET, "Enable or disable visibility of hidden files/directories in the file selector widget."), EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_SUB_ID_HIDDEN_VISIBLE_GET, "Get if visibility of hidden files/directories in the file selector widget is enabled or disabled."), + EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_SUB_ID_THUMBNAIL_SIZE_SET, "Set the size for the thumbnail of the file selector widget's view, if it's in #ELM_FILESELECTOR_GRID mode"), + EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_SUB_ID_THUMBNAIL_SIZE_GET, "Get the size for the thumbnails of a given file selector widget."), EO_OP_DESCRIPTION_SENTINEL }; static const Eo_Class_Description class_desc = { diff --git a/src/lib/elc_fileselector_eo.h b/src/lib/elc_fileselector_eo.h index e50fa9c37..a87a91cb6 100644 --- a/src/lib/elc_fileselector_eo.h +++ b/src/lib/elc_fileselector_eo.h @@ -32,6 +32,8 @@ enum ELM_OBJ_FILESELECTOR_SUB_ID_FILTERS_CLEAR, ELM_OBJ_FILESELECTOR_SUB_ID_HIDDEN_VISIBLE_SET, ELM_OBJ_FILESELECTOR_SUB_ID_HIDDEN_VISIBLE_GET, + ELM_OBJ_FILESELECTOR_SUB_ID_THUMBNAIL_SIZE_SET, + ELM_OBJ_FILESELECTOR_SUB_ID_THUMBNAIL_SIZE_GET, ELM_OBJ_FILESELECTOR_SUB_ID_LAST }; @@ -301,5 +303,31 @@ enum #define elm_obj_fileselector_hidden_visible_get(ret) ELM_OBJ_FILESELECTOR_ID(ELM_OBJ_FILESELECTOR_SUB_ID_HIDDEN_VISIBLE_GET), EO_TYPECHECK(Eina_Bool *, ret) /** + * @def elm_obj_fileselector_thumbnail_size_get + * @since 1.9 + * + * Get the size for the thumbnail of a given file selector widget + * + * @param[out] w + * @param[out] h + * + * @see elm_fileselector_thumbnail_size_get + */ +#define elm_obj_fileselector_thumbnail_size_get(w, h) ELM_OBJ_FILESELECTOR_ID(ELM_OBJ_FILESELECTOR_SUB_ID_THUMBNAIL_SIZE_GET), EO_TYPECHECK(Evas_Coord *, w), EO_TYPECHECK(Evas_Coord *, h) + +/** + * @def elm_obj_fileselector_group_thumbnail_size_set + * @since 1.9 + * + * Set the size for the thumbnail of the file selector widget's view. + * + * @param[in] w + * @param[in] h + * + * @see elm_fileselector_thumbnail_size_set + */ +#define elm_obj_fileselector_thumbnail_size_set(w, h) ELM_OBJ_FILESELECTOR_ID(ELM_OBJ_FILESELECTOR_SUB_ID_THUMBNAIL_SIZE_SET), EO_TYPECHECK(Evas_Coord, w), EO_TYPECHECK(Evas_Coord, h) + +/** * @} */ diff --git a/src/lib/elc_fileselector_legacy.h b/src/lib/elc_fileselector_legacy.h index 4b5ab8abe..e00244d46 100644 --- a/src/lib/elc_fileselector_legacy.h +++ b/src/lib/elc_fileselector_legacy.h @@ -362,3 +362,36 @@ EAPI void elm_fileselector_hidden_visible_set(Evas_Object *obj, * @ingroup Fileselector */ EAPI Eina_Bool elm_fileselector_hidden_visible_get(const Evas_Object *obj); + +/** + * Set the size for the thumbnail of the file selector widget's view. + * + * @param obj The file selector object + * @param w The thumbnail's width. + * @param h The thumbnail's height. + * + * @note If w or h is 0, default value will be used. + * + * @see elm_fileselector_thumbnail_size_get() + * + * @since 1.9 + * @ingroup Fileselector + */ +EAPI void elm_fileselector_thumbnail_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h); + +/** + * Get the size for the thumbnail of a given file selector widget + * + * @param obj The file selector object. + * @param w Pointer to a variable where to store the thumbnail's width. + * @param h Pointer to a variable where to store the thumbnail's height. + * + * @note Use @c NULL pointers on the size values you're not + * interested in: they'll be ignored by the function. + * + * @see elm_fileselector_thumbnail_size_set() + * + * @since 1.9 + * @ingroup Fileselector + */ +EAPI void elm_fileselector_thumbnail_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h); diff --git a/src/lib/elc_popup.c b/src/lib/elc_popup.c index 0feb55c60..c9256b4f2 100644 --- a/src/lib/elc_popup.c +++ b/src/lib/elc_popup.c @@ -587,7 +587,7 @@ _button_remove(Evas_Object *obj, else { char style[1024]; - + snprintf(style, sizeof(style), "popup/%s", elm_widget_style_get(obj)); snprintf(buf, sizeof(buf), "buttons%i", sd->last_button_number); if (!elm_layout_theme_set(sd->action_area, "popup", buf, style)) @@ -619,7 +619,7 @@ static void _list_add(Evas_Object *obj) { char style[1024]; - + ELM_POPUP_DATA_GET(obj, sd); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); @@ -853,7 +853,7 @@ static void _item_new(Elm_Popup_Item *it) { char style[1024]; - + elm_widget_item_text_set_hook_set(it, _item_text_set_hook); elm_widget_item_text_get_hook_set(it, _item_text_get_hook); elm_widget_item_content_set_hook_set(it, _item_content_set_hook); @@ -864,7 +864,7 @@ _item_new(Elm_Popup_Item *it) elm_widget_item_signal_emit_hook_set(it, _item_signal_emit_hook); VIEW(it) = elm_layout_add(WIDGET(it)); - + snprintf(style, sizeof(style), "popup/%s", elm_widget_style_get(WIDGET(it))); if (!elm_layout_theme_set(VIEW(it), "popup", "item", style)) CRITICAL("Failed to set layout!"); @@ -1497,7 +1497,7 @@ _elm_popup_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) Elm_Popup_Smart_Data *priv = _pd; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); char style[1024]; - + eo_do_super(obj, MY_CLASS, evas_obj_smart_add()); elm_widget_sub_object_parent_add(obj); @@ -1509,7 +1509,7 @@ _elm_popup_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) snprintf(style, sizeof(style), "%s", "default"); if (!elm_layout_theme_set(obj, "popup", "base", style)) CRITICAL("Failed to set layout!"); - + snprintf(style, sizeof(style), "popup/%s", "default"); priv->notify = elm_notify_add(obj); @@ -1756,6 +1756,40 @@ _orient_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) } EAPI void +elm_popup_align_set(Evas_Object *obj, double horizontal, double vertical) +{ + ELM_POPUP_CHECK(obj); + eo_do(obj, elm_obj_popup_align_set(horizontal, vertical)); +} + +static void +_align_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + double horizontal = va_arg(*list, double); + double vertical = va_arg(*list, double); + Elm_Popup_Smart_Data *sd = _pd; + + elm_notify_align_set(sd->notify, horizontal, vertical); +} + +EAPI void +elm_popup_align_get(const Evas_Object *obj, double *horizontal, double *vertical) +{ + ELM_POPUP_CHECK(obj); + eo_do((Eo *) obj, elm_obj_popup_align_get(horizontal, vertical)); +} + +static void +_align_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + double *horizontal = va_arg(*list, double *); + double *vertical = va_arg(*list, double *); + Elm_Popup_Smart_Data *sd = _pd; + + elm_notify_align_get(sd->notify, horizontal, vertical); +} + +EAPI void elm_popup_timeout_set(Evas_Object *obj, double timeout) { @@ -1922,6 +1956,8 @@ _class_constructor(Eo_Class *klass) EO_OP_FUNC(ELM_OBJ_POPUP_ID(ELM_OBJ_POPUP_SUB_ID_ALLOW_EVENTS_SET), _allow_events_set), EO_OP_FUNC(ELM_OBJ_POPUP_ID(ELM_OBJ_POPUP_SUB_ID_ALLOW_EVENTS_GET), _allow_events_get), EO_OP_FUNC(ELM_OBJ_POPUP_ID(ELM_OBJ_POPUP_SUB_ID_ITEM_APPEND), _item_append), + EO_OP_FUNC(ELM_OBJ_POPUP_ID(ELM_OBJ_POPUP_SUB_ID_ALIGN_SET), _align_set), + EO_OP_FUNC(ELM_OBJ_POPUP_ID(ELM_OBJ_POPUP_SUB_ID_ALIGN_GET), _align_get), EO_OP_FUNC_SENTINEL }; eo_class_funcs_set(klass, func_desc); @@ -1938,6 +1974,8 @@ static const Eo_Op_Description op_desc[] = { EO_OP_DESCRIPTION(ELM_OBJ_POPUP_SUB_ID_ALLOW_EVENTS_SET, "Sets whether events should be passed to by a click outside."), EO_OP_DESCRIPTION(ELM_OBJ_POPUP_SUB_ID_ALLOW_EVENTS_GET, "Returns value indicating whether allow event is enabled or not."), EO_OP_DESCRIPTION(ELM_OBJ_POPUP_SUB_ID_ITEM_APPEND, "Add a new item to a Popup object."), + EO_OP_DESCRIPTION(ELM_OBJ_POPUP_SUB_ID_ALIGN_SET, "Set the popup alignment relative to its parent."), + EO_OP_DESCRIPTION(ELM_OBJ_POPUP_SUB_ID_ALIGN_GET, "Return the popup alignment relative to its parent."), EO_OP_DESCRIPTION_SENTINEL }; static const Eo_Class_Description class_desc = { diff --git a/src/lib/elc_popup_eo.h b/src/lib/elc_popup_eo.h index 6d0910937..f1c8b1fd8 100644 --- a/src/lib/elc_popup_eo.h +++ b/src/lib/elc_popup_eo.h @@ -20,6 +20,8 @@ enum ELM_OBJ_POPUP_SUB_ID_ALLOW_EVENTS_SET, ELM_OBJ_POPUP_SUB_ID_ALLOW_EVENTS_GET, ELM_OBJ_POPUP_SUB_ID_ITEM_APPEND, + ELM_OBJ_POPUP_SUB_ID_ALIGN_SET, + ELM_OBJ_POPUP_SUB_ID_ALIGN_GET, ELM_OBJ_POPUP_SUB_ID_LAST }; @@ -138,6 +140,32 @@ enum * @see elm_popup_item_append */ #define elm_obj_popup_item_append(label, icon, func, data, ret) ELM_OBJ_POPUP_ID(ELM_OBJ_POPUP_SUB_ID_ITEM_APPEND), EO_TYPECHECK(const char *, label), EO_TYPECHECK(Evas_Object *, icon), EO_TYPECHECK(Evas_Smart_Cb, func), EO_TYPECHECK(const void *, data), EO_TYPECHECK(Elm_Object_Item **, ret) + +/** + * @def elm_obj_popup_align_set + * @since 1.9 + * + * @brief Set the alignment of the popup object relative to its parent + * + * @param[in] horizontal + * @param[in] vertical + * + * @see elm_popup_align_set + */ +#define elm_obj_popup_align_set(horizontal, vertical) ELM_OBJ_POPUP_ID(ELM_OBJ_POPUP_SUB_ID_ALIGN_SET), EO_TYPECHECK(double, horizontal), EO_TYPECHECK(double, vertical) + +/** + * @def elm_obj_popup_align_get + * @since 1.9 + * + * @brief Return the alignment of the popup object relative to its parent + * + * @param[out] horizontal + * @param[out] vertical + * + * @see elm_popup_align_get + */ +#define elm_obj_popup_align_get(horizontal, vertical) ELM_OBJ_POPUP_ID(ELM_OBJ_POPUP_SUB_ID_ALIGN_GET), EO_TYPECHECK(double *, horizontal), EO_TYPECHECK(double *, vertical) /** * @} */ diff --git a/src/lib/elc_popup_legacy.h b/src/lib/elc_popup_legacy.h index 0f2d08f52..63d76289c 100644 --- a/src/lib/elc_popup_legacy.h +++ b/src/lib/elc_popup_legacy.h @@ -136,3 +136,31 @@ EAPI Eina_Bool elm_popup_allow_events_get(const Evas_Object *obj); * and item(s) can be there in a popup content area. */ EAPI Elm_Object_Item *elm_popup_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1); + +/** + * @brief Set the alignment of the popup object + * @param obj popup object + * @param horizontal The horizontal alignment of the popup + * @param vertical The vertical alignment of the popup + * + * Sets the alignment in which the popup will appear in its parent. + * + * @see elm_popup_align_get() + * + * @since 1.9 + * @ingroup Popup + */ +EAPI void elm_popup_align_set(Evas_Object *obj, double horizontal, double vertical); + +/** + * @brief Get the alignment of the popup object + * @param obj The popup object + * @param horizontal The horizontal alignment of the popup + * @param vertical The vertical alignment of the popup + * + * @see elm_popup_align_set() + * + * @since 1.9 + * @ingroup Popup + */ +EAPI void elm_popup_align_get(const Evas_Object *obj, double *horizontal, double *vertical); diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c new file mode 100644 index 000000000..df976cfdc --- /dev/null +++ b/src/lib/elm_atspi_bridge.c @@ -0,0 +1,178 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#include <Elementary.h> +#include "elm_priv.h" + +#include "atspi/atspi-constants.h" + +/* + * Accessibility Bus info not defined in atspi-constants.h + */ +#define A11Y_DBUS_NAME "org.a11y.Bus" +#define A11Y_DBUS_PATH "/org/a11y/bus" +#define A11Y_DBUS_INTERFACE "org.a11y.Bus" + +static int _init_count = 0; +static Eldbus_Connection *_a11y_bus = NULL; + +static Eldbus_Message * +_role_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) +{ + Eldbus_Message *ret = eldbus_message_method_return_new(msg); + eldbus_message_arguments_append(ret, "u", ATSPI_ROLE_APPLICATION); + return ret; +} + +static Eldbus_Message * +_role_name_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) +{ + // Currently only root object is available. + Eldbus_Message *ret = eldbus_message_method_return_new(msg); + eldbus_message_arguments_append(ret, "s", "application"); + + return ret; +} + +static Eldbus_Message * +_role_localized_name_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) +{ + // Currently only root object is available. + Eldbus_Message *ret = eldbus_message_method_return_new(msg); + eldbus_message_arguments_append(ret, "s", gettext("application")); + + return ret; +} + +static const Eldbus_Method accessible_methods[] = { + { "GetRole", NULL, ELDBUS_ARGS({"u", "Role"}), _role_get, 0 }, + { "GetRoleName", NULL, ELDBUS_ARGS({"s", "Name"}), _role_name_get, 0 }, + { "GetLocalizedRoleName", NULL, ELDBUS_ARGS({"s", "LocalizedName"}), _role_localized_name_get, 0}, + { NULL, NULL, NULL, NULL, 0 } +}; + +static Eina_Bool +_accessible_property_get(const Eldbus_Service_Interface *interface EINA_UNUSED, const char *property, + Eldbus_Message_Iter *iter, const Eldbus_Message *request_msg EINA_UNUSED, + Eldbus_Message **error EINA_UNUSED) +{ + if (!strcmp(property, "Name")) + { + eldbus_message_iter_basic_append(iter, 's', elm_app_name_get()); + return EINA_TRUE; + } + return EINA_FALSE; +} + +static const Eldbus_Property accessible_properties[] = { + { "Name", "s", NULL, NULL, 0 }, + { NULL, NULL, NULL, NULL, 0 } +}; + +static const Eldbus_Service_Interface_Desc accessible_iface_desc = { + ATSPI_DBUS_INTERFACE_ACCESSIBLE, accessible_methods, NULL, accessible_properties, _accessible_property_get, NULL +}; + +static void +_on_app_register(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + const char *errname, *errmsg; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) + { + ERR("%s %s", errname, errmsg); + return; + } + DBG("Application successfuly registered at ATSPI2 bus."); +} + +static Eina_Bool +_app_register(Eldbus_Connection *a11y_bus) +{ + Eldbus_Message *message = eldbus_message_method_call_new(ATSPI_DBUS_NAME_REGISTRY, + ATSPI_DBUS_PATH_ROOT, + ATSPI_DBUS_INTERFACE_SOCKET, + "Embed"); + Eldbus_Message_Iter *iter = eldbus_message_iter_get(message); + Eldbus_Message_Iter *iter_struct = eldbus_message_iter_container_new(iter, 'r', NULL); + + const char *bus = eldbus_connection_unique_name_get(a11y_bus); + char *path = ATSPI_DBUS_PATH_ROOT; + + eldbus_message_iter_basic_append(iter_struct, 's', bus); + eldbus_message_iter_basic_append(iter_struct, 'o', path); + eldbus_message_iter_container_close(iter, iter_struct); + + eldbus_connection_send(a11y_bus, message, _on_app_register, NULL, -1); + + return EINA_TRUE; +} + +static void +_interfaces_register(Eldbus_Connection *a11y_bus) +{ + eldbus_service_interface_register(a11y_bus, ATSPI_DBUS_PATH_ROOT, &accessible_iface_desc); +} + +static void +_a11y_bus_initialize(const char *socket_addr) +{ + Eldbus_Connection *a11y_bus = eldbus_address_connection_get(socket_addr); + + _interfaces_register(a11y_bus); + _app_register(a11y_bus); + + _a11y_bus = a11y_bus; +} + +static void +_a11y_bus_address_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + const char *errname, *errmsg, *sock_addr = NULL; + Eldbus_Connection *session_bus = data; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) + { + ERR("%s %s", errname, errmsg); + goto end; + } + + if (!eldbus_message_arguments_get(msg, "s", &sock_addr) || !sock_addr) + { + ERR("Could not get A11Y Bus socket address."); + goto end; + } + + _a11y_bus_initialize(sock_addr); + +end: + eldbus_connection_unref(session_bus); +} + +void +_elm_atspi_bridge_init(void) +{ + Eldbus_Message *msg; + Eldbus_Connection *session_bus; + + if (!_init_count && _elm_config->access_mode == ELM_ACCESS_MODE_ON) + { + session_bus = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION); + msg = eldbus_message_method_call_new(A11Y_DBUS_NAME, A11Y_DBUS_PATH, A11Y_DBUS_INTERFACE, "GetAddress"); + eldbus_connection_send(session_bus, msg, _a11y_bus_address_get, session_bus, -1); + _init_count = 1; + } +} + +void +_elm_atspi_bridge_shutdown(void) +{ + if (_init_count) + { + if (_a11y_bus) + eldbus_connection_unref(_a11y_bus); + _a11y_bus = NULL; + _init_count = 0; + } +} diff --git a/src/lib/elm_authors.h b/src/lib/elm_authors.h index 590991eb6..ab5583fb3 100644 --- a/src/lib/elm_authors.h +++ b/src/lib/elm_authors.h @@ -85,6 +85,9 @@ * @author Youngbok Shin <youngb.shin@@samsung.com> * @author Niraj Kumar <niraj.kr@@samsung.com> <niraj.kumar.ait@@gmail.com> * @author Amitesh Singh <singh.amitesh@@gmail.com> + * @author Abhinandan Aryadipta <a.aryadipta@@samsung.com> + * @author Sanghyeon Lee <sh10233.lee@@samsung.com> + * @author Anil Kumar Nahak <ak.nahak@@samsung.com> * * Please contact <enlightenment-devel@lists.sourceforge.net> to get in * contact with the developers and maintainers. diff --git a/src/lib/elm_cnp.c b/src/lib/elm_cnp.c index 8cc5e59c1..28308eca2 100644 --- a/src/lib/elm_cnp.c +++ b/src/lib/elm_cnp.c @@ -2169,10 +2169,10 @@ struct _Wl_Cnp_Selection static Eina_Bool _wl_elm_cnp_init(void); -static Wl_Cnp_Selection wl_cnp_selection = +static Wl_Cnp_Selection wl_cnp_selection = { - 0, 0, NULL, NULL, - NULL, 0, 0, NULL, NULL, NULL, + 0, 0, NULL, NULL, + NULL, 0, 0, NULL, NULL, NULL, 0, NULL, 0, EINA_FALSE }; @@ -2242,7 +2242,7 @@ _wl_elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type selection, Elm_Sel_Form if (sel->loss_cb) sel->loss_cb(sel->loss_data, selection); if (sel->widget) - evas_object_event_callback_del_full(sel->widget, + evas_object_event_callback_del_full(sel->widget, EVAS_CALLBACK_DEL, _wl_sel_obj_del, &wl_cnp_selection); sel->widget = NULL; @@ -2257,7 +2257,7 @@ _wl_elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type selection, Elm_Sel_Form sel->loss_data = NULL; evas_object_event_callback_add - (sel->widget, EVAS_CALLBACK_DEL, _wl_sel_obj_del, + (sel->widget, EVAS_CALLBACK_DEL, _wl_sel_obj_del, &wl_cnp_selection); if (selbuf) @@ -2280,7 +2280,7 @@ _wl_elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type selection, Elm_Sel_Form const char *types[10] = {0, }; int i = -1; - if ((format & ELM_SEL_FORMAT_MARKUP) || + if ((format & ELM_SEL_FORMAT_MARKUP) || (format & ELM_SEL_FORMAT_TEXT)) { types[++i] = "application/x-elementary-markup"; @@ -2322,7 +2322,7 @@ _wl_elm_cnp_selection_get(Evas_Object *obj, Elm_Sel_Type selection, Elm_Sel_Form win = elm_win_wl_window_get(obj); if (sel->requestwidget) - evas_object_event_callback_del_full(sel->requestwidget, + evas_object_event_callback_del_full(sel->requestwidget, EVAS_CALLBACK_DEL, _wl_sel_obj_del2, &wl_cnp_selection); sel->requestwidget = NULL; @@ -2334,18 +2334,18 @@ _wl_elm_cnp_selection_get(Evas_Object *obj, Elm_Sel_Type selection, Elm_Sel_Form sel->datacb = datacb; sel->udata = udata; - evas_object_event_callback_add(sel->requestwidget, - EVAS_CALLBACK_DEL, _wl_sel_obj_del2, + evas_object_event_callback_add(sel->requestwidget, + EVAS_CALLBACK_DEL, _wl_sel_obj_del2, &wl_cnp_selection); - if ((selection == ELM_SEL_TYPE_CLIPBOARD) || - (selection == ELM_SEL_TYPE_PRIMARY) || + if ((selection == ELM_SEL_TYPE_CLIPBOARD) || + (selection == ELM_SEL_TYPE_PRIMARY) || (selection == ELM_SEL_TYPE_SECONDARY)) { const char *types[10] = {0, }; int i = -1; - if ((format & ELM_SEL_FORMAT_MARKUP) || + if ((format & ELM_SEL_FORMAT_MARKUP) || (format & ELM_SEL_FORMAT_TEXT)) { types[++i] = "application/x-elementary-markup"; @@ -2389,11 +2389,11 @@ _wl_elm_cnp_selection_clear(Evas_Object *obj, Elm_Sel_Type selection __UNUSED__) return EINA_TRUE; if (sel->widget) - evas_object_event_callback_del_full(sel->widget, + evas_object_event_callback_del_full(sel->widget, EVAS_CALLBACK_DEL, _wl_sel_obj_del, &wl_cnp_selection); if (sel->requestwidget) - evas_object_event_callback_del_full(sel->requestwidget, + evas_object_event_callback_del_full(sel->requestwidget, EVAS_CALLBACK_DEL, _wl_sel_obj_del2, &wl_cnp_selection); @@ -2509,7 +2509,7 @@ _wl_selection_receive(void *udata, int type __UNUSED__, void *event) } else { - evas_object_event_callback_del_full(sel->requestwidget, + evas_object_event_callback_del_full(sel->requestwidget, EVAS_CALLBACK_DEL, _wl_sel_obj_del2, sel); sel->requestwidget = NULL; diff --git a/src/lib/elm_colorselector.c b/src/lib/elm_colorselector.c index d471ea671..05cc2082e 100644 --- a/src/lib/elm_colorselector.c +++ b/src/lib/elm_colorselector.c @@ -2077,7 +2077,7 @@ _palette_color_add(Eo *obj, void *_pd, va_list *list) if (sd->config_load) { - _items_del(sd); + _items_del(sd); sd->config_load = EINA_FALSE; } item = _item_new(obj); @@ -2142,7 +2142,7 @@ _palette_name_set(Eo *obj, void *_pd, va_list *list) if (!strcmp(sd->palette_name, palette_name)) return; - _items_del(sd); + _items_del(sd); eina_stringshare_replace(&sd->palette_name, palette_name); _palette_colors_load(obj); } diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 82b3b87b7..e872e943a 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -97,7 +97,6 @@ _item_show_region(void *data) Elm_Gengrid_Smart_Data *sd = data; Evas_Coord cvw, cvh, it_xpos = 0, it_ypos = 0, col = 0, row = 0, minx = 0, miny = 0; Elm_Gen_Item *it = NULL; - evas_object_geometry_get(sd->pan_obj, NULL, NULL, &cvw, &cvh); if ((cvw != 0) && (cvh != 0)) @@ -111,7 +110,6 @@ _item_show_region(void *data) if (!it) return; eo_do(sd->pan_obj, elm_obj_pan_pos_min_get(&minx, &miny)); - if (sd->horizontal && (sd->item_height > 0)) { row = cvh / sd->item_height; @@ -122,6 +120,19 @@ _item_show_region(void *data) it_xpos = ((x - GG_IT(it)->prev_group) * sd->item_width) + (GG_IT(it)->prev_group * sd->group_item_width) + minx; + if (sd->s_type == ELM_GENGRID_ITEM_SCROLLTO_MIDDLE) + { + if (it_xpos > 0) it_xpos = it_xpos + (cvw / 2) - (sd->item_width / 2); + else it_xpos = it_xpos - (cvw / 2) + (sd->item_width / 2); + } + else if (sd->s_type == ELM_GENGRID_ITEM_SCROLLTO_TOP) + { + if (it_xpos > 0) it_xpos = it_xpos + cvw - sd->item_width; + } + else if (sd->s_type != ELM_GENGRID_ITEM_SCROLLTO_IN) + { + it_xpos = 0; + } it_ypos = y * sd->item_height + miny; it->x = x; it->y = y; @@ -133,10 +144,23 @@ _item_show_region(void *data) y = (it->position - 1) / col; if (y > 0) x = (it->position - 1) % y; - it_xpos = x * sd->item_width + minx; it_ypos = ((y - GG_IT(it)->prev_group) * sd->item_height) + (GG_IT(it)->prev_group * sd->group_item_height) + miny; + if (sd->s_type == ELM_GENGRID_ITEM_SCROLLTO_MIDDLE) + { + if (it_ypos > 0) it_ypos = it_ypos + (cvh / 2) - (sd->item_height / 2); + else it_ypos = it_ypos - (cvh / 2) + (sd->item_height / 2); + } + else if (sd->s_type == ELM_GENGRID_ITEM_SCROLLTO_TOP) + { + if (it_ypos > 0) it_ypos = it_ypos + cvh - sd->item_height; + } + else if (sd->s_type != ELM_GENGRID_ITEM_SCROLLTO_IN) + { + it_ypos = 0; + } + it_xpos = x * sd->item_width + minx; it->x = x; it->y = y; } @@ -3784,13 +3808,9 @@ elm_gengrid_item_show(Elm_Object_Item *item, if ((it->generation < sd->generation)) return; - if (type == ELM_GENGRID_ITEM_SCROLLTO_IN) - { - //TODO : type based handling like gengrid - } - sd->show_region = EINA_TRUE; sd->show_it = it; + sd->s_type = type; _item_show_region(sd); } @@ -3807,13 +3827,9 @@ elm_gengrid_item_bring_in(Elm_Object_Item *item, if (it->generation < sd->generation) return; - if (type == ELM_GENGRID_ITEM_SCROLLTO_IN) - { - //TODO : type based handling like gengrid - } - sd->bring_in = EINA_TRUE; sd->bring_in_it = it; + sd->s_type = type; _item_show_region(sd); } diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index c43241953..c797216da 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -1753,9 +1753,9 @@ _item_realize(Elm_Gen_Item *it, edje_object_message_signal_process(it->deco_all_view); } } - + if (it->decorate_it_set) _decorate_item_set(it); - + edje_object_message_signal_process(VIEW(it)); } @@ -4499,7 +4499,7 @@ _item_block_recalc(Item_Block *itb, if (changed) { Eina_Bool doit = EINA_TRUE; - + if (itb->sd->homogeneous) { if ((it->group) && (itb->sd->group_item_height == 0)) diff --git a/src/lib/elm_interface_scrollable.c b/src/lib/elm_interface_scrollable.c index 625255643..2d249a5c2 100644 --- a/src/lib/elm_interface_scrollable.c +++ b/src/lib/elm_interface_scrollable.c @@ -1607,7 +1607,7 @@ _elm_scroll_content_pos_set(Eo *obj, void *_pd, va_list *list) (sid->edje_obj, "elm.dragable.vbar", 0.0, vy); edje_object_part_drag_value_set (sid->edje_obj, "elm.dragable.hbar", vx, 0.0); - + if (!sid->down.bounce_x_animator) { if (((x < minx) && (0 <= sid->down.dx)) || @@ -2023,7 +2023,11 @@ _elm_scroll_momentum_animator(void *data) Evas_Coord x, y, dx, dy, px, py, maxx, maxy, minx, miny; Eina_Bool no_bounce_x_end = EINA_FALSE, no_bounce_y_end = EINA_FALSE; - if (!sid->pan_obj) return ECORE_CALLBACK_CANCEL; + if (!sid->pan_obj) + { + sid->down.momentum_animator = NULL; + return ECORE_CALLBACK_CANCEL; + } t = ecore_loop_time_get(); dt = t - sid->down.anim_start; @@ -2348,7 +2352,7 @@ _elm_scroll_mouse_up_event_cb(void *data, { Elm_Scrollable_Smart_Interface_Data *sid = data; Evas_Coord x = 0, y = 0, ox = 0, oy = 0; - Evas_Event_Mouse_Down *ev; + Evas_Event_Mouse_Up *ev; if (!sid->pan_obj) return; @@ -2892,7 +2896,7 @@ _elm_scroll_hold_enterer(void *data) Evas_Coord ox = 0, oy = 0, fx = 0, fy = 0; sid->down.hold_enterer = NULL; - + fx = sid->down.hold_x; fy = sid->down.hold_y; diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index 13088116b..929ae557e 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -1072,7 +1072,7 @@ _item_unselect(Elm_List_Item *it) { it->selected = EINA_FALSE; sd->selected = eina_list_remove(sd->selected, it); - if (!(it->base.disabled || + if (!(it->base.disabled || (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE))) evas_object_smart_callback_call(WIDGET(it), SIG_UNSELECTED, it); } diff --git a/src/lib/elm_main.c b/src/lib/elm_main.c index 3614c4631..3f1f0613c 100644 --- a/src/lib/elm_main.c +++ b/src/lib/elm_main.c @@ -316,6 +316,8 @@ elm_init(int argc, system_handlers[0] = ecore_event_handler_add(ECORE_EVENT_MEMORY_STATE, _sys_memory_changed, NULL); system_handlers[1] = ecore_event_handler_add(ECORE_EVENT_LOCALE_CHANGED, _sys_lang_changed, NULL); + _elm_atspi_bridge_init(); + return _elm_init_count; } @@ -339,6 +341,7 @@ elm_shutdown(void) while (_elm_win_deferred_free) ecore_main_loop_iterate(); _elm_clouseau_unload(); + _elm_atspi_bridge_shutdown(); // wrningz :( // _prefix_shutdown(); ELM_SAFE_FREE(app_name, eina_stringshare_del); diff --git a/src/lib/elm_priv.h b/src/lib/elm_priv.h index 110b615ee..e99a60b4b 100644 --- a/src/lib/elm_priv.h +++ b/src/lib/elm_priv.h @@ -296,6 +296,8 @@ struct _Elm_Datetime_Module_Data Elm_Datetime_Field_Type field_type); }; +void _elm_atspi_bridge_init(void); +void _elm_atspi_bridge_shutdown(void); void _elm_prefs_init(void); void _elm_prefs_shutdown(void); diff --git a/src/lib/elm_slider.c b/src/lib/elm_slider.c index 86617d7f9..6abe2ab98 100644 --- a/src/lib/elm_slider.c +++ b/src/lib/elm_slider.c @@ -317,9 +317,12 @@ _popup_hide(void *data, { if (!sd->popup_hiding) { - edje_object_signal_emit(sd->popup, "popup,hide", "elm"); // XXX: for compat - edje_object_signal_emit(sd->popup, "elm,popup,hide", "elm"); - sd->popup_hiding = EINA_TRUE; + if (!(elm_widget_focus_get(data) && sd->always_popup_show)) + { + edje_object_signal_emit(sd->popup, "popup,hide", "elm"); // XXX: for compat + edje_object_signal_emit(sd->popup, "elm,popup,hide", "elm"); + sd->popup_hiding = EINA_TRUE; + } } } } @@ -335,8 +338,11 @@ _popup_hide_done(void *data, { if (sd->popup_hiding) { - evas_object_hide(sd->popup); - sd->popup_hiding = EINA_FALSE; + if (!(elm_widget_focus_get(data) && sd->always_popup_show)) + { + evas_object_hide(sd->popup); + sd->popup_hiding = EINA_FALSE; + } } } } @@ -1383,6 +1389,44 @@ _elm_slider_step_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) *ret = sd->step; } +EAPI void +elm_slider_indicator_show_on_focus_set(Evas_Object *obj, Eina_Bool flag) +{ + ELM_SLIDER_CHECK(obj); + eo_do(obj, elm_obj_slider_indicator_show_on_focus_set(flag)); +} + +static void +_elm_slider_indicator_show_on_focus_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + Eina_Bool flag = va_arg(*list, int); + Elm_Slider_Smart_Data *sd = _pd; + + if (flag) + sd->always_popup_show = EINA_TRUE; + else + sd->always_popup_show = EINA_FALSE; +} + +EAPI Eina_Bool +elm_slider_indicator_show_on_focus_get(const Evas_Object *obj) +{ + ELM_SLIDER_CHECK(obj) EINA_FALSE; + Eina_Bool ret; + + eo_do((Eo *) obj, elm_obj_slider_indicator_show_on_focus_get(&ret)); + return ret; +} + +static void +_elm_slider_indicator_show_on_focus_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + Eina_Bool *ret = va_arg(*list, Eina_Bool *); + Elm_Slider_Smart_Data *sd = _pd; + *ret = sd->always_popup_show; +} + + static void _elm_slider_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) { @@ -1398,6 +1442,20 @@ _elm_slider_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA } static void +_elm_slider_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +{ + Eina_Bool int_ret; + Elm_Slider_Smart_Data *sd = _pd; + + eo_do_super(obj, MY_CLASS, elm_wdg_on_focus(&int_ret)); + + if (sd->always_popup_show && elm_widget_focus_get(obj)) + _popup_show(obj, NULL, NULL, NULL); + else + _popup_hide(obj, NULL, NULL, NULL); +} + +static void _class_constructor(Eo_Class *klass) { const Eo_Op_Func_Description func_desc[] = { @@ -1412,6 +1470,7 @@ _class_constructor(Eo_Class *klass) EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_ACTIVATE), _elm_slider_smart_activate), EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS), _elm_slider_smart_focus_next_manager_is), EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS), _elm_slider_smart_focus_direction_manager_is), + EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_ON_FOCUS), _elm_slider_smart_on_focus), EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL), _elm_slider_smart_sizing_eval), EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_TEXT_ALIASES_GET), _elm_slider_smart_text_aliases_get), @@ -1437,6 +1496,8 @@ _class_constructor(Eo_Class *klass) EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET), _elm_slider_indicator_show_get), EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_SET), _elm_slider_step_set), EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_GET), _elm_slider_step_get), + EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_ON_FOCUS_SET), _elm_slider_indicator_show_on_focus_set), + EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_ON_FOCUS_GET), _elm_slider_indicator_show_on_focus_get), EO_OP_FUNC_SENTINEL }; eo_class_funcs_set(klass, func_desc); @@ -1465,6 +1526,8 @@ static const Eo_Op_Description op_desc[] = { EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET, "Get whether a given slider widget's enlarging indicator or not."), EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_STEP_SET, "Set the draggable's step size."), EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_STEP_GET, "Get the draggable's step size."), + EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_ON_FOCUS_SET, "Set the visiblity of slider indicator."), + EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_ON_FOCUS_GET, "Get the visiblity of slider indicator."), EO_OP_DESCRIPTION_SENTINEL }; static const Eo_Class_Description class_desc = { diff --git a/src/lib/elm_slider_eo.h b/src/lib/elm_slider_eo.h index f3373d7c5..34ecc981e 100644 --- a/src/lib/elm_slider_eo.h +++ b/src/lib/elm_slider_eo.h @@ -29,6 +29,8 @@ enum ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET, ELM_OBJ_SLIDER_SUB_ID_STEP_SET, ELM_OBJ_SLIDER_SUB_ID_STEP_GET, + ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_ON_FOCUS_SET, + ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_ON_FOCUS_GET, ELM_OBJ_SLIDER_SUB_ID_LAST }; @@ -266,7 +268,7 @@ enum /** * @def elm_obj_slider_indicator_show_set - * @since 1.8 + * @since 1.9 * * Set whether to enlarge slider indicator (augmented knob) or not. * @@ -326,3 +328,31 @@ enum * @ingroup Slider */ #define elm_obj_slider_step_get(ret) ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_GET), EO_TYPECHECK(double *, ret) + +/** + * @def elm_slider_indicator_show_on_focus_set + * @since 1.9 + * + * show indicator of slider on focus + * + * @param[in] flag + * + * @see elm_slider_indicator_show_on_focus_set + * + * @ingroup Slider + */ +#define elm_obj_slider_indicator_show_on_focus_set(flag) ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_ON_FOCUS_SET), EO_TYPECHECK(Eina_Bool, flag) + +/** + * @def elm_slider_indicator_show_on_focus_get + * @since 1.9 + * + * Get whether the indicator of the slider is set or not + * + * @param[out] ret + * + * @see elm_slider_indicator_show_on_focus_get + * + * @ingroup Slider + */ +#define elm_obj_slider_indicator_show_on_focus_get(ret) ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_ON_FOCUS_GET), EO_TYPECHECK(Eina_Bool*, ret) diff --git a/src/lib/elm_slider_legacy.h b/src/lib/elm_slider_legacy.h index 81e55a81f..35dc17c6a 100644 --- a/src/lib/elm_slider_legacy.h +++ b/src/lib/elm_slider_legacy.h @@ -357,3 +357,24 @@ EAPI void elm_slider_step_set(Evas_Object *obj, double s * @ingroup Slider */ EAPI double elm_slider_step_get(const Evas_Object *obj); + +/** + * Show the indicator of slider on focus + * + * @param obj The slider object. + * @param flag @ EINA_TRUE sets the indicator visible + * + * @ingroup Slider + */ +EAPI void elm_slider_indicator_show_on_focus_set(Evas_Object *obj, Eina_Bool flag); + +/** + * Get whether the indicator of the slider is set or not + * + * @param obj The slider object. + * @return @c EINA_TRUE, if indicator is set + * @c EINA_FALSE otherwise. + * + * @ingroup Slider + */ +EAPI Eina_Bool elm_slider_indicator_show_on_focus_get(const Evas_Object *obj); diff --git a/src/lib/elm_table.c b/src/lib/elm_table.c index 7166fcc5b..af6ecb0d5 100644 --- a/src/lib/elm_table.c +++ b/src/lib/elm_table.c @@ -381,7 +381,7 @@ _pack(Eo *obj, void *_pd EINA_UNUSED, va_list *list) { WRN("row + rowspan getting rather large (>32767)"); } - + elm_widget_sub_object_add(obj, subobj); evas_object_table_pack(wd->resize_obj, subobj, col, row, colspan, rowspan); } diff --git a/src/lib/elm_theme.c b/src/lib/elm_theme.c index 3bb3858ea..a1b487f09 100644 --- a/src/lib/elm_theme.c +++ b/src/lib/elm_theme.c @@ -924,7 +924,7 @@ elm_theme_system_dir_get(void) { static char *path = NULL; char buf[PATH_MAX]; - + if (path) return path; if (!path) { @@ -939,13 +939,13 @@ elm_theme_user_dir_get(void) { static char *path = NULL; char buf[PATH_MAX]; - + if (path) return path; if (!path) { char *home = getenv("HOME"); if (!home) home = ""; - + snprintf(buf, sizeof(buf), "%s/"ELEMENTARY_BASE_DIR"/themes", home); path = strdup(buf); } diff --git a/src/lib/elm_widget_fileselector.h b/src/lib/elm_widget_fileselector.h index cda2471db..1a8118c29 100644 --- a/src/lib/elm_widget_fileselector.h +++ b/src/lib/elm_widget_fileselector.h @@ -51,6 +51,8 @@ struct _Elm_Fileselector_Smart_Data Eio_Monitor *monitor; Eina_List *handlers; + Evas_Coord_Size thumbnail_size; + Elm_Fileselector_Mode mode; Eina_Bool only_folder : 1; diff --git a/src/lib/elm_widget_gengrid.h b/src/lib/elm_widget_gengrid.h index 7ad6fed5e..e5ea80c77 100644 --- a/src/lib/elm_widget_gengrid.h +++ b/src/lib/elm_widget_gengrid.h @@ -40,6 +40,7 @@ struct _Elm_Gengrid_Smart_Data Elm_Object_Item *last_selected_item; Elm_Gen_Item *show_it; Elm_Gen_Item *bring_in_it; + Elm_Gengrid_Item_Scrollto_Type s_type; Ecore_Job *calc_job; int walking; diff --git a/src/lib/elm_widget_slider.h b/src/lib/elm_widget_slider.h index 27c3bfc48..74e4b5fbd 100644 --- a/src/lib/elm_widget_slider.h +++ b/src/lib/elm_widget_slider.h @@ -43,6 +43,9 @@ struct _Elm_Slider_Smart_Data Eina_Bool frozen : 1; Eina_Bool popup_hiding : 1; Eina_Bool units_show : 1; + Eina_Bool always_popup_show : 1; /*this flag is to set the visiblity of slider indicator + * if this flag is set then the indicator always show + */ }; /** diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c index 15136658f..48e20bb24 100644 --- a/src/lib/elm_win.c +++ b/src/lib/elm_win.c @@ -1698,7 +1698,7 @@ _elm_ee_wlwin_get(const Ecore_Evas *ee) Ecore_Wl_Window *win = NULL; if (!ee) return NULL; - if ((EE_ENGINE_COMPARE(ee, ELM_WAYLAND_SHM)) || + if ((EE_ENGINE_COMPARE(ee, ELM_WAYLAND_SHM)) || (EE_ENGINE_COMPARE(ee, ELM_WAYLAND_EGL))) { if (ee) win = ecore_evas_wayland_window_get(ee); |