aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Juyung Seo <seojuyung2@gmail.com>2013-12-07 03:20:00 +0900
committerDaniel Juyung Seo <seojuyung2@gmail.com>2013-12-07 03:20:00 +0900
commitcf2c5c90e6a91d64c4d66c46e18d64d738ef17db (patch)
tree80f1f79775580c29854e4c9dc55a66e0438f2a86
parent[abcd] initial commit for a widget template. (diff)
parent[abcd] initial commit for a widget template. (diff)
downloadelementary-devs/seoz/widget.tar.gz
Merge branch 'devs/seoz/widget' of git+ssh://git.enlightenment.org/core/elementary into devs/seoz/widgetdevs/seoz/widget
-rw-r--r--AUTHORS3
-rw-r--r--ChangeLog8
-rw-r--r--NEWS6
-rw-r--r--configure.ac2
-rw-r--r--data/themes/edc/border.edc6
-rw-r--r--data/themes/edc/evrything.edc4
-rw-r--r--src/Makefile.am2
-rw-r--r--src/bin/test_fileselector.c80
-rw-r--r--src/bin/test_gengrid.c329
-rw-r--r--src/bin/test_popup.c62
-rw-r--r--src/bin/test_slider.c14
-rw-r--r--src/imported/Makefile.am5
-rw-r--r--src/imported/atspi/Makefile.am4
-rw-r--r--src/imported/atspi/atspi-constants.h1241
-rw-r--r--src/lib/Makefile.am5
-rw-r--r--src/lib/elc_fileselector.c119
-rw-r--r--src/lib/elc_fileselector_eo.h28
-rw-r--r--src/lib/elc_fileselector_legacy.h33
-rw-r--r--src/lib/elc_popup.c50
-rw-r--r--src/lib/elc_popup_eo.h28
-rw-r--r--src/lib/elc_popup_legacy.h28
-rw-r--r--src/lib/elm_atspi_bridge.c178
-rw-r--r--src/lib/elm_authors.h3
-rw-r--r--src/lib/elm_cnp.c30
-rw-r--r--src/lib/elm_colorselector.c4
-rw-r--r--src/lib/elm_gengrid.c42
-rw-r--r--src/lib/elm_genlist.c6
-rw-r--r--src/lib/elm_interface_scrollable.c12
-rw-r--r--src/lib/elm_list.c2
-rw-r--r--src/lib/elm_main.c3
-rw-r--r--src/lib/elm_priv.h2
-rw-r--r--src/lib/elm_slider.c73
-rw-r--r--src/lib/elm_slider_eo.h32
-rw-r--r--src/lib/elm_slider_legacy.h21
-rw-r--r--src/lib/elm_table.c2
-rw-r--r--src/lib/elm_theme.c6
-rw-r--r--src/lib/elm_widget_fileselector.h2
-rw-r--r--src/lib/elm_widget_gengrid.h1
-rw-r--r--src/lib/elm_widget_slider.h3
-rw-r--r--src/lib/elm_win.c2
40 files changed, 2260 insertions, 221 deletions
diff --git a/AUTHORS b/AUTHORS
index e7aba6ef1..160f45d6d 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -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>
diff --git a/ChangeLog b/ChangeLog
index 3bd6bf0ed..56975bb58 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/NEWS b/NEWS
index 3fd7969ed..85da74674 100644
--- a/NEWS
+++ b/NEWS
@@ -1,10 +1,12 @@
+================
+Elementary 1.9.0
+================
+
Changes since Elementary 1.8.0:
-------------------------
Additions:
- * Add elm_object_tooltip_orient_set() and elm_object_tooltip_orient_get().
-
Improvements:
Fixes:
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 4efa00a1f..7e1896151 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)\" \
@@ -486,7 +487,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);