From 4bfa1caf5cc72eb2b63feb135a4c24b0c1c105f9 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 6 Nov 2011 09:16:00 +0000 Subject: [PATCH] add workareas get as requested in ticket #793 but actually support more than 1 - for multi-screen. SVN revision: 64804 --- legacy/ecore/src/lib/ecore_x/Ecore_X.h | 3 +++ .../src/lib/ecore_x/xcb/ecore_xcb_netwm.c | 19 +++++++++++++++++++ .../src/lib/ecore_x/xlib/ecore_x_netwm.c | 19 +++++++++++++++++++ 3 files changed, 41 insertions(+) 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)