diff options
author | Chris Michael <cp.michael@samsung.com> | 2017-01-11 12:22:01 -0500 |
---|---|---|
committer | Chris Michael <cp.michael@samsung.com> | 2017-01-11 12:36:33 -0500 |
commit | 755c50a84e58d95cbb2ba85f6474bc0a7bc0774f (patch) | |
tree | 3025157a7e7a32abd6510facea73f1c32648a6cc | |
parent | 6c9dc2a5ba61f0409001115d0d31adc1e5c48e48 (diff) |
ecore-wl2: Add event to raise when window configure is completed.
Small patch to create and raise a new event letting ecore_evas know
when the window has been configured. With the addition of xdg_shell v6
support, we cannot commit a surface with an existing buffer until the
surface has been configured. This patch allows us to raise an event to
ecore_evas when the surface has been configured, so we can then attach
a buffer to it.
ref T5090
Signed-off-by: Chris Michael <cp.michael@samsung.com>
-rw-r--r-- | src/lib/ecore_wl2/Ecore_Wl2.h | 6 | ||||
-rw-r--r-- | src/lib/ecore_wl2/ecore_wl2.c | 3 | ||||
-rw-r--r-- | src/lib/ecore_wl2/ecore_wl2_window.c | 8 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h index 6a0ff4f04a..58f3e33d4a 100644 --- a/src/lib/ecore_wl2/Ecore_Wl2.h +++ b/src/lib/ecore_wl2/Ecore_Wl2.h | |||
@@ -201,6 +201,11 @@ typedef struct _Ecore_Wl2_Event_Window_Configure | |||
201 | unsigned int states; | 201 | unsigned int states; |
202 | } Ecore_Wl2_Event_Window_Configure; | 202 | } Ecore_Wl2_Event_Window_Configure; |
203 | 203 | ||
204 | typedef struct _Ecore_Wl2_Event_Window_Configure_Complete | ||
205 | { | ||
206 | unsigned int win; | ||
207 | } Ecore_Wl2_Event_Window_Configure_Complete; | ||
208 | |||
204 | typedef struct _Ecore_Wl2_Event_Sync_Done | 209 | typedef struct _Ecore_Wl2_Event_Sync_Done |
205 | { | 210 | { |
206 | Ecore_Wl2_Display *display; | 211 | Ecore_Wl2_Display *display; |
@@ -250,6 +255,7 @@ EAPI extern int ECORE_WL2_EVENT_SEAT_NAME_CHANGED; /** @since 1.19 */ | |||
250 | EAPI extern int ECORE_WL2_EVENT_SEAT_CAPABILITIES_CHANGED; /** @since 1.19 */ | 255 | EAPI extern int ECORE_WL2_EVENT_SEAT_CAPABILITIES_CHANGED; /** @since 1.19 */ |
251 | EAPI extern int ECORE_WL2_EVENT_DEVICE_ADDED; /** @since 1.19 */ | 256 | EAPI extern int ECORE_WL2_EVENT_DEVICE_ADDED; /** @since 1.19 */ |
252 | EAPI extern int ECORE_WL2_EVENT_DEVICE_REMOVED; /** @since 1.19 */ | 257 | EAPI extern int ECORE_WL2_EVENT_DEVICE_REMOVED; /** @since 1.19 */ |
258 | EAPI extern int ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE; /** @since 1.19 */ | ||
253 | 259 | ||
254 | /** | 260 | /** |
255 | * @file | 261 | * @file |
diff --git a/src/lib/ecore_wl2/ecore_wl2.c b/src/lib/ecore_wl2/ecore_wl2.c index bbae13fc6b..362ef38a3a 100644 --- a/src/lib/ecore_wl2/ecore_wl2.c +++ b/src/lib/ecore_wl2/ecore_wl2.c | |||
@@ -35,6 +35,7 @@ EAPI int ECORE_WL2_EVENT_SEAT_NAME_CHANGED = 0; | |||
35 | EAPI int ECORE_WL2_EVENT_SEAT_CAPABILITIES_CHANGED = 0; | 35 | EAPI int ECORE_WL2_EVENT_SEAT_CAPABILITIES_CHANGED = 0; |
36 | EAPI int ECORE_WL2_EVENT_DEVICE_ADDED = 0; | 36 | EAPI int ECORE_WL2_EVENT_DEVICE_ADDED = 0; |
37 | EAPI int ECORE_WL2_EVENT_DEVICE_REMOVED = 0; | 37 | EAPI int ECORE_WL2_EVENT_DEVICE_REMOVED = 0; |
38 | EAPI int ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE = 0; | ||
38 | 39 | ||
39 | EAPI int _ecore_wl2_event_window_www = -1; | 40 | EAPI int _ecore_wl2_event_window_www = -1; |
40 | EAPI int _ecore_wl2_event_window_www_drag = -1; | 41 | EAPI int _ecore_wl2_event_window_www_drag = -1; |
@@ -99,6 +100,7 @@ ecore_wl2_init(void) | |||
99 | ECORE_WL2_EVENT_DEVICE_REMOVED = ecore_event_type_new(); | 100 | ECORE_WL2_EVENT_DEVICE_REMOVED = ecore_event_type_new(); |
100 | _ecore_wl2_event_window_www = ecore_event_type_new(); | 101 | _ecore_wl2_event_window_www = ecore_event_type_new(); |
101 | _ecore_wl2_event_window_www_drag = ecore_event_type_new(); | 102 | _ecore_wl2_event_window_www_drag = ecore_event_type_new(); |
103 | ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE = ecore_event_type_new(); | ||
102 | } | 104 | } |
103 | if (!no_session_recovery) | 105 | if (!no_session_recovery) |
104 | no_session_recovery = !!getenv("EFL_NO_WAYLAND_SESSION_RECOVERY"); | 106 | no_session_recovery = !!getenv("EFL_NO_WAYLAND_SESSION_RECOVERY"); |
@@ -152,6 +154,7 @@ ecore_wl2_shutdown(void) | |||
152 | ECORE_WL2_EVENT_SEAT_CAPABILITIES_CHANGED = 0; | 154 | ECORE_WL2_EVENT_SEAT_CAPABILITIES_CHANGED = 0; |
153 | ECORE_WL2_EVENT_DEVICE_ADDED = 0; | 155 | ECORE_WL2_EVENT_DEVICE_ADDED = 0; |
154 | ECORE_WL2_EVENT_DEVICE_REMOVED = 0; | 156 | ECORE_WL2_EVENT_DEVICE_REMOVED = 0; |
157 | ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE = 0; | ||
155 | 158 | ||
156 | /* shutdown Ecore_Event */ | 159 | /* shutdown Ecore_Event */ |
157 | ecore_event_shutdown(); | 160 | ecore_event_shutdown(); |
diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c index 6b86be9fa5..91c1e6448f 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c | |||
@@ -190,11 +190,19 @@ static void | |||
190 | _zxdg_surface_cb_configure(void *data, struct zxdg_surface_v6 *zxdg_surface, uint32_t serial) | 190 | _zxdg_surface_cb_configure(void *data, struct zxdg_surface_v6 *zxdg_surface, uint32_t serial) |
191 | { | 191 | { |
192 | Ecore_Wl2_Window *window; | 192 | Ecore_Wl2_Window *window; |
193 | Ecore_Wl2_Event_Window_Configure_Complete *ev; | ||
193 | 194 | ||
194 | zxdg_surface_v6_ack_configure(zxdg_surface, serial); | 195 | zxdg_surface_v6_ack_configure(zxdg_surface, serial); |
195 | 196 | ||
196 | window = data; | 197 | window = data; |
198 | if (!window->pending.configure) return; | ||
197 | window->pending.configure = EINA_FALSE; | 199 | window->pending.configure = EINA_FALSE; |
200 | |||
201 | ev = calloc(1, sizeof(Ecore_Wl2_Event_Window_Configure_Complete)); | ||
202 | if (!ev) return; | ||
203 | |||
204 | ev->win = window->id; | ||
205 | ecore_event_add(ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE, ev, NULL, NULL); | ||
198 | } | 206 | } |
199 | 207 | ||
200 | static const struct zxdg_surface_v6_listener _zxdg_surface_listener = | 208 | static const struct zxdg_surface_v6_listener _zxdg_surface_listener = |