diff --git a/legacy/ecore/src/lib/ecore_x/Ecore_X.h b/legacy/ecore/src/lib/ecore_x/Ecore_X.h index 9bebf9eba5..6588a7581b 100644 --- a/legacy/ecore/src/lib/ecore_x/Ecore_X.h +++ b/legacy/ecore/src/lib/ecore_x/Ecore_X.h @@ -2045,6 +2045,9 @@ EAPI void ecore_x_netwm_desk_workareas_set(Ecore_X_Window root, unsigned int *areas, unsigned int n_desks); +EAPI unsigned int * +ecore_x_netwm_desk_workareas_get(Ecore_X_Window root, + unsigned int *n_desks); EAPI void ecore_x_netwm_desk_current_set(Ecore_X_Window root, unsigned int desk); diff --git a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c index 1d041d3a41..0a523b958f 100644 --- a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c +++ b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c @@ -358,6 +358,25 @@ ecore_x_netwm_desk_workareas_set(Ecore_X_Window root, 4 * n_desks); } +EAPI unsigned int * +ecore_x_netwm_desk_workareas_get(Ecore_X_Window root, unsigned int *n_desks) +{ + int ret; + unsigned int *areas = NULL; + + if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root; + + ret = ecore_x_window_prop_card32_list_get(root, ECORE_X_ATOM_NET_WORKAREA, + &areas); + if (!areas) + { + if (n_desks) *n_desks = 0; + return 0; + } + if (n_desks) *n_desks = ret / 4; + return areas; +} + EAPI void ecore_x_netwm_desk_current_set(Ecore_X_Window root, unsigned int desk) diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c index 36b028d871..1a6fc9a044 100644 --- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c +++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c @@ -269,6 +269,25 @@ ecore_x_netwm_desk_workareas_set(Ecore_X_Window root, 4 * n_desks); } /* ecore_x_netwm_desk_workareas_set */ +EAPI unsigned int * +ecore_x_netwm_desk_workareas_get(Ecore_X_Window root, unsigned int *n_desks) +{ + int ret; + unsigned int *areas = NULL; + + if (!root) root = DefaultRootWindow(_ecore_x_disp); + + ret = ecore_x_window_prop_card32_list_get(root, ECORE_X_ATOM_NET_WORKAREA, + &areas); + if (!areas) + { + if (n_desks) *n_desks = 0; + return 0; + } + if (n_desks) *n_desks = ret / 4; + return areas; +} + EAPI void ecore_x_netwm_desk_current_set(Ecore_X_Window root, unsigned int desk)