From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:07:58
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit c0e35d643c84ec951f1de1ed35cdae0c93d8f203 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 08:20:28 2013 +0000 Remove buffer_transform_set from the surface interface. Our compositor does not (currently) allow for rotating wayland clients, so we do not need to support buffer_transform function. Signed-off-by: Chris Michael <cp....@sa...> --- src/bin/e_comp_wl.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 8c6e525..3567a11 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -19,7 +19,6 @@ static void _e_comp_wl_surface_cb_frame(struct wl_client *client, struct wl_reso static void _e_comp_wl_surface_cb_opaque_region_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *region); static void _e_comp_wl_surface_cb_input_region_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *region); static void _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_resource *resource); -static void _e_comp_wl_surface_cb_buffer_transform_set(struct wl_client *client, struct wl_resource *resource, int transform); static void _e_comp_wl_surface_cb_pending_buffer_destroy(struct wl_listener *listener, void *data EINA_UNUSED); static void _e_comp_wl_region_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource); @@ -44,7 +43,7 @@ static const struct wl_surface_interface _e_wl_surface_interface = _e_comp_wl_surface_cb_opaque_region_set, _e_comp_wl_surface_cb_input_region_set, _e_comp_wl_surface_cb_commit, - _e_comp_wl_surface_cb_buffer_transform_set + NULL //_e_comp_wl_surface_cb_buffer_transform_set }; static const struct wl_region_interface _e_wl_region_interface = @@ -494,13 +493,6 @@ _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_res } static void -_e_comp_wl_surface_cb_buffer_transform_set(struct wl_client *client, struct wl_resource *resource, int transform) -{ - LOGFN(__FILE__, __LINE__, __FUNCTION__); - -} - -static void _e_comp_wl_surface_cb_pending_buffer_destroy(struct wl_listener *listener, void *data EINA_UNUSED) { E_Wayland_Surface *ews = NULL; -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:07:58
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 18c4ec999edfa02d60cfbe3802cb482c8f336534 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 08:18:02 2013 +0000 Add wl_shell back in as a module when building with Wayland Client support. In order to render wayland clients, we need to provide a shell interface for the clients to send messages to. Signed-off-by: Chris Michael <cp....@sa...> --- configure.ac | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index f1fafea..932d0cd 100644 --- a/configure.ac +++ b/configure.ac @@ -677,6 +677,12 @@ define([CHECK_MODULE_MUSIC_CONTROL], AC_E_CHECK_PKG(MUSIC_CONTROL, [ ecore >= $efl_version eina >= $efl_version edbus2 ], [], [MUSIC_CONTROL=false]) ]) +AM_CONDITIONAL(WL_SHELL, false) +define([CHECK_MODULE_WL_SHELL], +[ + AC_E_CHECK_PKG(WL_SHELL, [ ecore >= $efl_version eina >= $efl_version wayland-server], [], [WL_SHELL=false]) +]) + ##have_exchange=no ##AC_ARG_ENABLE(exchange, ## AC_HELP_STRING([--disable-exchange], [disable Exchange support @<:@default=detect@:>@]), @@ -880,7 +886,7 @@ AC_E_OPTIONAL_MODULE([music_control], true, [CHECK_MODULE_MUSIC_CONTROL]) AC_E_OPTIONAL_MODULE([contact], true) if test "x${have_wayland_clients}" = "xyes"; then - AC_E_OPTIONAL_MODULE([wl_shell], true) + AC_E_OPTIONAL_MODULE([wl_shell], true, [CHECK_MODULE_WL_SHELL]) fi SUSPEND="" -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:07:58
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 34c5a395353f8cd204a2a4eb48be59e6aa825f18 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 06:42:12 2013 +0000 Enable wl_shell module if building for Wayland Clients. Signed-off-by: Chris Michael <cp....@sa...> --- configure.ac | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configure.ac b/configure.ac index ab557c7..f1fafea 100644 --- a/configure.ac +++ b/configure.ac @@ -879,6 +879,10 @@ AC_E_OPTIONAL_MODULE([access], true) AC_E_OPTIONAL_MODULE([music_control], true, [CHECK_MODULE_MUSIC_CONTROL]) AC_E_OPTIONAL_MODULE([contact], true) +if test "x${have_wayland_clients}" = "xyes"; then + AC_E_OPTIONAL_MODULE([wl_shell], true) +fi + SUSPEND="" HIBERNATE="" case "$host_os" in @@ -987,6 +991,7 @@ src/modules/tiling/module.desktop src/modules/access/module.desktop src/modules/music-control/module.desktop src/modules/contact/module.desktop +src/modules/wl_shell/module.desktop data/Makefile data/images/Makefile data/flags/Makefile -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:07:58
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 19dcd3b99b938a8a6a31583ce5b27d147aa72d1f Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 08:21:44 2013 +0000 Add wl_shell module to modules makefile. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/modules/Makefile.am b/src/modules/Makefile.am index e2ef88a..6906361 100644 --- a/src/modules/Makefile.am +++ b/src/modules/Makefile.am @@ -238,14 +238,14 @@ if USE_MODULE_CONTACT include Makefile_contact.am endif +if USE_MODULE_WL_SHELL +include Makefile_wl_shell.am +endif + #if HAVE_WAYLAND_DRM #include Makefile_wl_drm.am #endif -#if HAVE_WAYLAND_SHELL -#include Makefile_wl_shell.am -#endif - #if HAVE_WAYLAND_SCREENSHOT #include Makefile_wl_screenshot.am #endif -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:07:59
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit ebc016ca51df23ce5ae9843aef5b53b2faafb599 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 08:34:37 2013 +0000 Add the Wayland Client Compositor header if we built support for them. Signed-off-by: Chris Michael <cp....@sa...> --- src/bin/e_includes.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index 5863b22..58c679e 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -153,3 +153,7 @@ #include "e_comp.h" #include "e_comp_cfdata.h" #include "e_comp_render_update.h" + +#ifdef HAVE_WAYLAND_CLIENTS +# include "e_comp_wl.h" +#endif -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:07:59
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 5d58bdd881be21eb723b4054746bbbf14c9b1bf5 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 08:32:29 2013 +0000 Add wl_shell Makefile. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/Makefile_wl_shell.am | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/modules/Makefile_wl_shell.am b/src/modules/Makefile_wl_shell.am new file mode 100644 index 0000000..4c70e2e --- /dev/null +++ b/src/modules/Makefile_wl_shell.am @@ -0,0 +1,24 @@ +wl_shelldir = $(MDIR)/wl_shell +wl_shell_DATA = wl_shell/e-module-wl_shell.edj \ + wl_shell/module.desktop + +EXTRA_DIST += wl_shell/e-module-wl_shell.edj \ + wl_shell/module.desktop.in \ + wl_shell/desktop-shell.xml \ + wl_shell/e_desktop_shell_protocol.h \ + wl_shell/e_desktop_shell_protocol.c + +wl_shellpkgdir = $(MDIR)/wl_shell/$(MODULE_ARCH) +wl_shellpkg_LTLIBRARIES = wl_shell/module.la + +wl_shell_module_la_DEPENDENCIES = $(MDEPENDENCIES) +wl_shell_module_la_CFLAGS = $(AM_CFLAGS) @WL_SHELL_CFLAGS@ +wl_shell_module_la_LIBADD = $(LIBS) @WL_SHELL_LIBS@ +# wl_shell_module_la_LDFLAGS = $(AM_LDFLAGS) @WL_SHELL_LDFLAGS@ +wl_shell_module_la_SOURCES = wl_shell/e_mod_main.c \ + wl_shell/e_mod_main.h + +# TODO: incomplete +#.PHONY: wl_shell install-wl_shell +#wl_shell: $(wl_shellpkg_LTLIBRARIES) $(wl_shell_DATA) +#install-wl_shell: install-wl_shellDATA install-wl_shellpkgLTLIBRARIES -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:07:59
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 178e21c5ab61a803a5986e49aa4b5571af60529d Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 08:48:53 2013 +0000 Update desktop_shell protocol definitions. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/desktop-shell.xml | 40 +++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/modules/wl_shell/desktop-shell.xml b/src/modules/wl_shell/desktop-shell.xml index c40cf17..3df16ea 100644 --- a/src/modules/wl_shell/desktop-shell.xml +++ b/src/modules/wl_shell/desktop-shell.xml @@ -3,26 +3,29 @@ <interface name="desktop_shell" version="1"> <request name="set_background"> <arg name="output" type="object" interface="wl_output"/> - <arg name="surface" type="object" interface="wl_shell_surface"/> + <arg name="surface" type="object" interface="wl_surface"/> </request> <request name="set_panel"> <arg name="output" type="object" interface="wl_output"/> - <arg name="surface" type="object" interface="wl_shell_surface"/> + <arg name="surface" type="object" interface="wl_surface"/> </request> <request name="set_lock_surface"> - <arg name="surface" type="object" interface="wl_shell_surface"/> + <arg name="surface" type="object" interface="wl_surface"/> </request> <request name="unlock"/> + <request name="set_grab_surface"> + <arg name="surface" type="object" interface="wl_surface"/> + </request> + <!-- We'll fold most of wl_shell into this interface and then they'll share the configure event. --> <event name="configure"> - <arg name="time" type="uint"/> <arg name="edges" type="uint"/> - <arg name="surface" type="object" interface="wl_shell_surface"/> + <arg name="surface" type="object" interface="wl_surface"/> <arg name="width" type="int"/> <arg name="height" type="int"/> </event> @@ -33,6 +36,31 @@ the shell actually implements locking, it MUST send 'unlock' request to let the normal desktop resume. --> <event name="prepare_lock_surface"/> + <event name="grab_cursor"> + <arg name="cursor" type="uint"/> + </event> + + <enum name="cursor"> + <entry name="none" value="0"/> + + <entry name="resize_top" value="1"/> + <entry name="resize_bottom" value="2"/> + + <entry name="arrow" value="3"/> + + <entry name="resize_left" value="4"/> + <entry name="resize_top_left" value="5"/> + <entry name="resize_bottom_left" value="6"/> + + <entry name="move" value="7"/> + + <entry name="resize_right" value="8"/> + <entry name="resize_top_right" value="9"/> + <entry name="resize_bottom_right" value="10"/> + + <entry name="busy" value="11"/> + </enum> + </interface> <!-- Only one client can bind this interface at a time. --> @@ -42,7 +70,7 @@ A screensaver surface is normally hidden, and only visible after an idle timeout. --> <request name="set_surface"> - <arg name="surface" type="object" interface="wl_shell_surface"/> + <arg name="surface" type="object" interface="wl_surface"/> <arg name="output" type="object" interface="wl_output"/> </request> -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:00
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit a841b2361f4def29a67ea69d174b617d1311cd98 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 08:32:10 2013 +0000 Add module.desktop.in file. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/module.desktop.in | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/modules/wl_shell/module.desktop.in b/src/modules/wl_shell/module.desktop.in new file mode 100644 index 0000000..7d07387 --- /dev/null +++ b/src/modules/wl_shell/module.desktop.in @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Link +Name=Wayland Shell +Name[eo]=Ĉelo de Wayland +Icon=e-module-wl_shell +Comment=Enlightenment Wayland Shell +Comment[eo]=Ĉelo de Enlightenment por Wayland +Comment[it]=Shell di Enlightenment per Wayland +X-Enlightenment-ModuleType=look -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:00
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit fca01b7f4f351fbbdaab161e8c2fd9fbec651429 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 09:26:18 2013 +0000 Remove e_randr_private from extra_dist (does not exist anymore). Signed-off-by: Chris Michael <cp....@sa...> --- src/bin/Makefile.am | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index a923cac..324d5ed 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -458,6 +458,3 @@ install-data-hook: endif installed_headersdir = $(prefix)/include/enlightenment installed_headers_DATA = $(ENLIGHTENMENTHEADERS) - -EXTRA_DIST = \ - e_randr_private.h -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:00
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 3e114b11da4685549421fdfb2d851d14dc704c5c Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 09:26:54 2013 +0000 Fix some formatting Signed-off-by: Chris Michael <cp....@sa...> --- src/bin/e_comp_wl.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h index ec5cc8c..29598cf 100644 --- a/src/bin/e_comp_wl.h +++ b/src/bin/e_comp_wl.h @@ -5,16 +5,16 @@ # include <wayland-server.h> -# define LOGFNS 1 +# define LOGFNS 1 -# ifdef LOGFNS -# include <stdio.h> -# define LOGFN(fl, ln, fn) printf("-E-COMP-WL: %25s: %5i - %s\n", fl, ln, fn); -# else -# define LOGFN(fl, ln, fn) -# endif +# ifdef LOGFNS +# include <stdio.h> +# define LOGFN(fl, ln, fn) printf("-E-COMP-WL: %25s: %5i - %s\n", fl, ln, fn); +# else +# define LOGFN(fl, ln, fn) +# endif -# define container_of(ptr, type, member) ({ \ +# define container_of(ptr, type, member) ({ \ const __typeof__(((type *)0)->member) *__mptr = (ptr); \ (type *)((char *)__mptr - offsetof(type,member));}) -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:00
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit fce73920e524b5c5372a8a8bdb4f867655996870 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 09:26:39 2013 +0000 Don't need to ifdef the include here. Signed-off-by: Chris Michael <cp....@sa...> --- src/bin/e_comp_wl.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 3567a11..ca23a7d 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -1,7 +1,5 @@ #include "e.h" -#ifdef HAVE_WAYLAND_CLIENTS -# include "e_comp_wl.h" -#endif +#include "e_comp_wl.h" /* local function prototypes */ static void _e_comp_wl_cb_bind(struct wl_client *client, void *data EINA_UNUSED, unsigned int version EINA_UNUSED, unsigned int id); -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:00
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 9cc7877c06d053067ad02f1687fb55c56a00b30d Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 09:27:11 2013 +0000 Actually, trying to add the e_comp_wl.h header here causes e_fm to not build, so remove this. Signed-off-by: Chris Michael <cp....@sa...> --- src/bin/e_includes.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index 58c679e..5863b22 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -153,7 +153,3 @@ #include "e_comp.h" #include "e_comp_cfdata.h" #include "e_comp_render_update.h" - -#ifdef HAVE_WAYLAND_CLIENTS -# include "e_comp_wl.h" -#endif -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:00
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit b9da2f4e7034c5d8133b23a1ea3a6395ee429420 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 09:28:19 2013 +0000 Add the e_comp_wl header. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/e_mod_main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/wl_shell/e_mod_main.c b/src/modules/wl_shell/e_mod_main.c index 0b7535b..bbcefc1 100644 --- a/src/modules/wl_shell/e_mod_main.c +++ b/src/modules/wl_shell/e_mod_main.c @@ -1,4 +1,5 @@ #include "e.h" +#include "e_comp_wl.h" #include "e_mod_main.h" /* local function prototypes */ -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:01
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit b4c5ef954f189132cdd7b29cb80a0402a73fc2b6 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 09:28:33 2013 +0000 Remove the wayland-server header (is already included from e_comp_wl.h). Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/e_mod_main.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/modules/wl_shell/e_mod_main.h b/src/modules/wl_shell/e_mod_main.h index ea5ff0c..876367f 100644 --- a/src/modules/wl_shell/e_mod_main.h +++ b/src/modules/wl_shell/e_mod_main.h @@ -10,6 +10,4 @@ # define SLOGFN(fl, ln, fn) # endif -# include <wayland-server.h> - #endif -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:01
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit dc916ad9039dda489e39230867d1a58a21a382dd Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 09:32:03 2013 +0000 Convert __UNUSED__ to EINA_UNUSED. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/e_mod_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/wl_shell/e_mod_main.c b/src/modules/wl_shell/e_mod_main.c index bbcefc1..45f56e2 100644 --- a/src/modules/wl_shell/e_mod_main.c +++ b/src/modules/wl_shell/e_mod_main.c @@ -21,7 +21,7 @@ e_modapi_init(E_Module *m) } EAPI int -e_modapi_shutdown(E_Module *m __UNUSED__) +e_modapi_shutdown(E_Module *m EINA_UNUSED) { SLOGFN(__FILE__, __LINE__, __FUNCTION__); @@ -29,7 +29,7 @@ e_modapi_shutdown(E_Module *m __UNUSED__) } EAPI int -e_modapi_save(E_Module *m __UNUSED__) +e_modapi_save(E_Module *m EINA_UNUSED) { SLOGFN(__FILE__, __LINE__, __FUNCTION__); -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:01
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 1fbb1af2c7e56fe5b27aa3109861f0526bbd6e40 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 12:06:19 2013 +0000 Remove old desktop shell protocol file. Create new desktop shell protocol file with proper naming. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/{desktop-shell.xml => e-desktop-shell.xml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/wl_shell/desktop-shell.xml b/src/modules/wl_shell/e-desktop-shell.xml similarity index 98% rename from src/modules/wl_shell/desktop-shell.xml rename to src/modules/wl_shell/e-desktop-shell.xml index 3df16ea..0421eb5 100644 --- a/src/modules/wl_shell/desktop-shell.xml +++ b/src/modules/wl_shell/e-desktop-shell.xml @@ -1,6 +1,6 @@ <protocol name="desktop"> - <interface name="desktop_shell" version="1"> + <interface name="e_desktop_shell" version="1"> <request name="set_background"> <arg name="output" type="object" interface="wl_output"/> <arg name="surface" type="object" interface="wl_surface"/> -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:02
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 558bc4cace69ceac731df3d41e75ef2cb1421cf0 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 12:06:50 2013 +0000 Add new desktop_shell protocol header and code with proper naming. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/e_desktop_shell_protocol.c | 12 +++--- src/modules/wl_shell/e_desktop_shell_protocol.h | 56 ++++++++++++------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/modules/wl_shell/e_desktop_shell_protocol.c b/src/modules/wl_shell/e_desktop_shell_protocol.c index ae531cf..98d56a1 100644 --- a/src/modules/wl_shell/e_desktop_shell_protocol.c +++ b/src/modules/wl_shell/e_desktop_shell_protocol.c @@ -28,7 +28,7 @@ static const struct wl_interface *types[] = { &wl_output_interface, }; -static const struct wl_message desktop_shell_requests[] = { +static const struct wl_message e_desktop_shell_requests[] = { { "set_background", "oo", types + 1 }, { "set_panel", "oo", types + 3 }, { "set_lock_surface", "o", types + 5 }, @@ -36,16 +36,16 @@ static const struct wl_message desktop_shell_requests[] = { { "set_grab_surface", "o", types + 6 }, }; -static const struct wl_message desktop_shell_events[] = { +static const struct wl_message e_desktop_shell_events[] = { { "configure", "uoii", types + 7 }, { "prepare_lock_surface", "", types + 0 }, { "grab_cursor", "u", types + 0 }, }; -WL_EXPORT const struct wl_interface desktop_shell_interface = { - "desktop_shell", 1, - 5, desktop_shell_requests, - 3, desktop_shell_events, +WL_EXPORT const struct wl_interface e_desktop_shell_interface = { + "e_desktop_shell", 1, + 5, e_desktop_shell_requests, + 3, e_desktop_shell_events, }; static const struct wl_message screensaver_requests[] = { diff --git a/src/modules/wl_shell/e_desktop_shell_protocol.h b/src/modules/wl_shell/e_desktop_shell_protocol.h index e42f75d..809b941 100644 --- a/src/modules/wl_shell/e_desktop_shell_protocol.h +++ b/src/modules/wl_shell/e_desktop_shell_protocol.h @@ -12,31 +12,31 @@ extern "C" { struct wl_client; struct wl_resource; -struct desktop_shell; +struct e_desktop_shell; struct screensaver; -extern const struct wl_interface desktop_shell_interface; +extern const struct wl_interface e_desktop_shell_interface; extern const struct wl_interface screensaver_interface; -#ifndef DESKTOP_SHELL_CURSOR_ENUM -#define DESKTOP_SHELL_CURSOR_ENUM -enum desktop_shell_cursor { - DESKTOP_SHELL_CURSOR_NONE = 0, - DESKTOP_SHELL_CURSOR_RESIZE_TOP = 1, - DESKTOP_SHELL_CURSOR_RESIZE_BOTTOM = 2, - DESKTOP_SHELL_CURSOR_ARROW = 3, - DESKTOP_SHELL_CURSOR_RESIZE_LEFT = 4, - DESKTOP_SHELL_CURSOR_RESIZE_TOP_LEFT = 5, - DESKTOP_SHELL_CURSOR_RESIZE_BOTTOM_LEFT = 6, - DESKTOP_SHELL_CURSOR_MOVE = 7, - DESKTOP_SHELL_CURSOR_RESIZE_RIGHT = 8, - DESKTOP_SHELL_CURSOR_RESIZE_TOP_RIGHT = 9, - DESKTOP_SHELL_CURSOR_RESIZE_BOTTOM_RIGHT = 10, - DESKTOP_SHELL_CURSOR_BUSY = 11, +#ifndef E_DESKTOP_SHELL_CURSOR_ENUM +#define E_DESKTOP_SHELL_CURSOR_ENUM +enum e_desktop_shell_cursor { + E_DESKTOP_SHELL_CURSOR_NONE = 0, + E_DESKTOP_SHELL_CURSOR_RESIZE_TOP = 1, + E_DESKTOP_SHELL_CURSOR_RESIZE_BOTTOM = 2, + E_DESKTOP_SHELL_CURSOR_ARROW = 3, + E_DESKTOP_SHELL_CURSOR_RESIZE_LEFT = 4, + E_DESKTOP_SHELL_CURSOR_RESIZE_TOP_LEFT = 5, + E_DESKTOP_SHELL_CURSOR_RESIZE_BOTTOM_LEFT = 6, + E_DESKTOP_SHELL_CURSOR_MOVE = 7, + E_DESKTOP_SHELL_CURSOR_RESIZE_RIGHT = 8, + E_DESKTOP_SHELL_CURSOR_RESIZE_TOP_RIGHT = 9, + E_DESKTOP_SHELL_CURSOR_RESIZE_BOTTOM_RIGHT = 10, + E_DESKTOP_SHELL_CURSOR_BUSY = 11, }; -#endif /* DESKTOP_SHELL_CURSOR_ENUM */ +#endif /* E_DESKTOP_SHELL_CURSOR_ENUM */ -struct desktop_shell_interface { +struct e_desktop_shell_interface { /** * set_background - (none) * @output: (none) @@ -76,26 +76,26 @@ struct desktop_shell_interface { struct wl_resource *surface); }; -#define DESKTOP_SHELL_CONFIGURE 0 -#define DESKTOP_SHELL_PREPARE_LOCK_SURFACE 1 -#define DESKTOP_SHELL_GRAB_CURSOR 2 +#define E_DESKTOP_SHELL_CONFIGURE 0 +#define E_DESKTOP_SHELL_PREPARE_LOCK_SURFACE 1 +#define E_DESKTOP_SHELL_GRAB_CURSOR 2 static inline void -desktop_shell_send_configure(struct wl_resource *resource_, uint32_t edges, struct wl_resource *surface, int32_t width, int32_t height) +e_desktop_shell_send_configure(struct wl_resource *resource_, uint32_t edges, struct wl_resource *surface, int32_t width, int32_t height) { - wl_resource_post_event(resource_, DESKTOP_SHELL_CONFIGURE, edges, surface, width, height); + wl_resource_post_event(resource_, E_DESKTOP_SHELL_CONFIGURE, edges, surface, width, height); } static inline void -desktop_shell_send_prepare_lock_surface(struct wl_resource *resource_) +e_desktop_shell_send_prepare_lock_surface(struct wl_resource *resource_) { - wl_resource_post_event(resource_, DESKTOP_SHELL_PREPARE_LOCK_SURFACE); + wl_resource_post_event(resource_, E_DESKTOP_SHELL_PREPARE_LOCK_SURFACE); } static inline void -desktop_shell_send_grab_cursor(struct wl_resource *resource_, uint32_t cursor) +e_desktop_shell_send_grab_cursor(struct wl_resource *resource_, uint32_t cursor) { - wl_resource_post_event(resource_, DESKTOP_SHELL_GRAB_CURSOR, cursor); + wl_resource_post_event(resource_, E_DESKTOP_SHELL_GRAB_CURSOR, cursor); } struct screensaver_interface { -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:02
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 1f810880f9b19ef27083385ce8e6a870ad993733 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 12:07:24 2013 +0000 Add start of the Wayland Desktop Shell code. When running wayland clients inside E's Compositor, we need a Wayland Desktop Shell so that those clients can minimize, maximize, etc, etc. We will intercept those messages and pass them along to E eventually. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/e_mod_main.c | 198 +++++++++++++++++++++++++++++++++++++- src/modules/wl_shell/e_mod_main.h | 12 +++ 2 files changed, 209 insertions(+), 1 deletion(-) diff --git a/src/modules/wl_shell/e_mod_main.c b/src/modules/wl_shell/e_mod_main.c index 45f56e2..133d046 100644 --- a/src/modules/wl_shell/e_mod_main.c +++ b/src/modules/wl_shell/e_mod_main.c @@ -1,12 +1,44 @@ #include "e.h" #include "e_comp_wl.h" #include "e_mod_main.h" +#include "e_desktop_shell_protocol.h" /* local function prototypes */ +static void _e_wl_shell_cb_destroy(struct wl_listener *listener, void *data); +static void _e_wl_shell_cb_bind(struct wl_client *client, void *data, unsigned int version EINA_UNUSED, unsigned int id); +static void _e_wl_shell_cb_bind_desktop(struct wl_client *client, void *data, unsigned int version EINA_UNUSED, unsigned int id); +static void _e_wl_shell_cb_unbind_desktop(struct wl_resource *resource); +static void _e_wl_shell_shell_surface_get(struct wl_client *client, struct wl_resource *resource, unsigned int id, struct wl_resource *surf_resource); + +static E_Wayland_Shell_Surface *_e_wl_shell_shell_surface_create(void *shell, E_Wayland_Surface *ews, const void *client); +static void _e_wl_shell_shell_surface_toplevel_set(E_Wayland_Shell_Surface *ewss); +static void _e_wl_shell_shell_surface_transient_set(E_Wayland_Shell_Surface *ewss, E_Wayland_Surface *ews, int x, int y, unsigned int flags); +static void _e_wl_shell_shell_surface_fullscreen_set(E_Wayland_Shell_Surface *ewss, unsigned int method, unsigned int framerate, void *output); +static int _e_wl_shell_shell_surface_move(E_Wayland_Shell_Surface *ewss, void *seat); +static int _e_wl_shell_shell_surface_resize(E_Wayland_Shell_Surface *ewss, void *seat, unsigned int edges); + +static void _e_wl_shell_desktop_background_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *output_resource, struct wl_resource *surf_resource); +static void _e_wl_shell_desktop_panel_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *output_resource, struct wl_resource *surf_resource); +static void _e_wl_shell_desktop_lock_surface_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surf_resource); +static void _e_wl_shell_desktop_unlock(struct wl_client *client, struct wl_resource *resource); +static void _e_wl_shell_desktop_grab_surface_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surf_resource); /* local variables */ -/* wayland interfaces */ +/* local wayland interfaces */ +static const struct wl_shell_interface _e_wl_shell_interface = +{ + _e_wl_shell_shell_surface_get +}; + +static const struct e_desktop_shell_interface _e_desktop_shell_interface = +{ + _e_wl_shell_desktop_background_set, + _e_wl_shell_desktop_panel_set, + _e_wl_shell_desktop_lock_surface_set, + _e_wl_shell_desktop_unlock, + _e_wl_shell_desktop_grab_surface_set +}; /* external variables */ @@ -15,8 +47,50 @@ EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Wl_Shell" }; EAPI void * e_modapi_init(E_Module *m) { + E_Wayland_Desktop_Shell *shell; + SLOGFN(__FILE__, __LINE__, __FUNCTION__); + /* TODO: create a new shell */ + + if (!(shell = E_NEW(E_Wayland_Desktop_Shell, 1))) + return NULL; + + shell->compositor = _e_wl_comp; + + shell->wl.destroy_listener.notify = _e_wl_shell_cb_destroy; + wl_signal_add(&_e_wl_comp->wl.signals.destroy, &shell->wl.destroy_listener); + + /* TODO: set compositor ping handler */ + + _e_wl_comp->wl.shell_interface.shell = shell; + _e_wl_comp->wl.shell_interface.shell_surface_create = + _e_wl_shell_shell_surface_create; + _e_wl_comp->wl.shell_interface.toplevel_set = + _e_wl_shell_shell_surface_toplevel_set; + _e_wl_comp->wl.shell_interface.transient_set = + _e_wl_shell_shell_surface_transient_set; + _e_wl_comp->wl.shell_interface.fullscreen_set = + _e_wl_shell_shell_surface_fullscreen_set; + _e_wl_comp->wl.shell_interface.move = _e_wl_shell_shell_surface_move; + _e_wl_comp->wl.shell_interface.resize = _e_wl_shell_shell_surface_resize; + + if (!wl_display_add_global(_e_wl_comp->wl.display, + &wl_shell_interface, shell, + _e_wl_shell_cb_bind)) + { + free(shell); + return NULL; + } + + if (!wl_display_add_global(_e_wl_comp->wl.display, + &e_desktop_shell_interface, shell, + _e_wl_shell_cb_bind_desktop)) + { + free(shell); + return NULL; + } + return m; } @@ -37,3 +111,125 @@ e_modapi_save(E_Module *m EINA_UNUSED) } /* local functions */ +static void +_e_wl_shell_cb_destroy(struct wl_listener *listener, void *data) +{ + E_Wayland_Desktop_Shell *shell = NULL; + + shell = + container_of(listener, E_Wayland_Desktop_Shell, wl.destroy_listener); + + free(shell); +} + +static void +_e_wl_shell_cb_bind(struct wl_client *client, void *data, unsigned int version EINA_UNUSED, unsigned int id) +{ + E_Wayland_Desktop_Shell *shell = NULL; + + SLOGFN(__FILE__, __LINE__, __FUNCTION__); + + if (!(shell = data)) return; + wl_client_add_object(client, &wl_shell_interface, + &_e_wl_shell_interface, id, shell); +} + +static void +_e_wl_shell_cb_bind_desktop(struct wl_client *client, void *data, unsigned int version EINA_UNUSED, unsigned int id) +{ + E_Wayland_Desktop_Shell *shell = NULL; + struct wl_resource *resource = NULL; + + SLOGFN(__FILE__, __LINE__, __FUNCTION__); + + if (!(shell = data)) return; + + if (!(resource = + wl_client_add_object(client, &e_desktop_shell_interface, + &_e_desktop_shell_interface, id, shell))) + return; + + resource->destroy = _e_wl_shell_cb_unbind_desktop; +} + +static void +_e_wl_shell_cb_unbind_desktop(struct wl_resource *resource) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); + + free(resource); +} + +static void +_e_wl_shell_shell_surface_get(struct wl_client *client, struct wl_resource *resource, unsigned int id, struct wl_resource *surf_resource) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static E_Wayland_Shell_Surface * +_e_wl_shell_shell_surface_create(void *shell, E_Wayland_Surface *ews, const void *client) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); + + return NULL; +} + +static void +_e_wl_shell_shell_surface_toplevel_set(E_Wayland_Shell_Surface *ewss) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static void +_e_wl_shell_shell_surface_transient_set(E_Wayland_Shell_Surface *ewss, E_Wayland_Surface *ews, int x, int y, unsigned int flags) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static void +_e_wl_shell_shell_surface_fullscreen_set(E_Wayland_Shell_Surface *ewss, unsigned int method, unsigned int framerate, void *output) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static int +_e_wl_shell_shell_surface_move(E_Wayland_Shell_Surface *ewss, void *seat) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static int +_e_wl_shell_shell_surface_resize(E_Wayland_Shell_Surface *ewss, void *seat, unsigned int edges) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static void +_e_wl_shell_desktop_background_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *output_resource, struct wl_resource *surf_resource) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static void +_e_wl_shell_desktop_panel_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *output_resource, struct wl_resource *surf_resource) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static void +_e_wl_shell_desktop_lock_surface_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surf_resource) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static void +_e_wl_shell_desktop_unlock(struct wl_client *client, struct wl_resource *resource) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} + +static void +_e_wl_shell_desktop_grab_surface_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surf_resource) +{ + SLOGFN(__FILE__, __LINE__, __FUNCTION__); +} diff --git a/src/modules/wl_shell/e_mod_main.h b/src/modules/wl_shell/e_mod_main.h index 876367f..74ce278 100644 --- a/src/modules/wl_shell/e_mod_main.h +++ b/src/modules/wl_shell/e_mod_main.h @@ -10,4 +10,16 @@ # define SLOGFN(fl, ln, fn) # endif +typedef struct _E_Wayland_Desktop_Shell E_Wayland_Desktop_Shell; + +struct _E_Wayland_Desktop_Shell +{ + E_Wayland_Compositor *compositor; + + struct + { + struct wl_listener destroy_listener; + } wl; +}; + #endif -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:02
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit c20d723927de4b7c8b32425e156d71af54fab86c Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 12:02:36 2013 +0000 Make the E Wayland Compositor variable external so we can access the compositor from the shell. Add Shell_Surface and Shell_Interface structures. Move the structure for Compositor to After the above shell structures are defined. Signed-off-by: Chris Michael <cp....@sa...> --- src/bin/e_comp_wl.c | 4 +-- src/bin/e_comp_wl.h | 81 +++++++++++++++++++++++++++++++++++------------------ 2 files changed, 56 insertions(+), 29 deletions(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index ca23a7d..8d0e551 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -51,8 +51,8 @@ static const struct wl_region_interface _e_wl_region_interface = _e_comp_wl_region_cb_subtract }; -/* local variables */ -static E_Wayland_Compositor *_e_wl_comp = NULL; +/* external variables */ +E_Wayland_Compositor *_e_wl_comp; Eina_Bool e_comp_wl_init(void) diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h index 29598cf..5bf06cf 100644 --- a/src/bin/e_comp_wl.h +++ b/src/bin/e_comp_wl.h @@ -20,10 +20,12 @@ /* local structures */ typedef enum _E_Wayland_Compositor_State E_Wayland_Compositor_State; -typedef struct _E_Wayland_Compositor E_Wayland_Compositor; typedef struct _E_Wayland_Surface E_Wayland_Surface; +typedef struct _E_Wayland_Shell_Surface E_Wayland_Shell_Surface; +typedef struct _E_Wayland_Shell_Interface E_Wayland_Shell_Interface; typedef struct _E_Wayland_Region E_Wayland_Region; typedef struct _E_Wayland_Frame_Cb E_Wayland_Frame_Cb; +typedef struct _E_Wayland_Compositor E_Wayland_Compositor; enum _E_Wayland_Compositor_State { @@ -32,32 +34,6 @@ enum _E_Wayland_Compositor_State E_WAYLAND_COMPOSITOR_STATE_SLEEPING }; -struct _E_Wayland_Compositor -{ - struct - { - struct wl_display *display; - - struct - { - struct wl_signal destroy; - struct wl_signal activate; - struct wl_signal kill; - struct wl_signal idle; - struct wl_signal wake; - struct wl_signal seat; - } signals; - - struct - { - struct wl_list surface; - } lists; - - } wl; - - Ecore_Fd_Handler *fd_handler; -}; - struct _E_Wayland_Surface { struct @@ -87,6 +63,26 @@ struct _E_Wayland_Surface } pending; }; +struct _E_Wayland_Shell_Surface +{ + struct + { + struct wl_resource resource; + } wl; +}; + +struct _E_Wayland_Shell_Interface +{ + void *shell; + + E_Wayland_Shell_Surface *(*shell_surface_create) (void *shell, E_Wayland_Surface *ews, const void *client); + void (*toplevel_set) (E_Wayland_Shell_Surface *ewss); + void (*transient_set) (E_Wayland_Shell_Surface *ewss, E_Wayland_Surface *ews, int x, int y, unsigned int flags); + void (*fullscreen_set) (E_Wayland_Shell_Surface *ewss, unsigned int method, unsigned int framerate, void *output); + int (*move) (E_Wayland_Shell_Surface *ewss, void *seat); + int (*resize) (E_Wayland_Shell_Surface *ewss, void *seat, unsigned int edges); +}; + struct _E_Wayland_Region { struct @@ -106,6 +102,37 @@ struct _E_Wayland_Frame_Cb } wl; }; +struct _E_Wayland_Compositor +{ + struct + { + struct wl_display *display; + + struct + { + struct wl_signal destroy; + struct wl_signal activate; + struct wl_signal kill; + struct wl_signal idle; + struct wl_signal wake; + struct wl_signal seat; + } signals; + + struct + { + struct wl_list surface; + } lists; + + E_Wayland_Shell_Interface shell_interface; + + } wl; + + Ecore_Fd_Handler *fd_handler; +}; + +/* external variables */ +extern E_Wayland_Compositor *_e_wl_comp; + /* external function prototypes */ Eina_Bool e_comp_wl_init(void); void e_comp_wl_shutdown(void); -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:07
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit dcd3c1de1bbf3ea90662b21a4963869bc076d1e0 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 08:49:11 2013 +0000 Update desktop_shell protocol code & header. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/e_desktop_shell_protocol.c | 42 ++++++++++++++----------- src/modules/wl_shell/e_desktop_shell_protocol.h | 36 +++++++++++++++++++-- 2 files changed, 57 insertions(+), 21 deletions(-) diff --git a/src/modules/wl_shell/e_desktop_shell_protocol.c b/src/modules/wl_shell/e_desktop_shell_protocol.c index 3ad8687..ae531cf 100644 --- a/src/modules/wl_shell/e_desktop_shell_protocol.c +++ b/src/modules/wl_shell/e_desktop_shell_protocol.c @@ -3,54 +3,58 @@ #include "wayland-util.h" extern const struct wl_interface wl_output_interface; -extern const struct wl_interface wl_shell_surface_interface; +extern const struct wl_interface wl_surface_interface; extern const struct wl_interface wl_output_interface; -extern const struct wl_interface wl_shell_surface_interface; -extern const struct wl_interface wl_shell_surface_interface; -extern const struct wl_interface wl_shell_surface_interface; -extern const struct wl_interface wl_shell_surface_interface; +extern const struct wl_interface wl_surface_interface; +extern const struct wl_interface wl_surface_interface; +extern const struct wl_interface wl_surface_interface; +extern const struct wl_interface wl_surface_interface; +extern const struct wl_interface wl_surface_interface; extern const struct wl_interface wl_output_interface; static const struct wl_interface *types[] = { + NULL, &wl_output_interface, - &wl_shell_surface_interface, + &wl_surface_interface, &wl_output_interface, - &wl_shell_surface_interface, - &wl_shell_surface_interface, - NULL, + &wl_surface_interface, + &wl_surface_interface, + &wl_surface_interface, NULL, - &wl_shell_surface_interface, + &wl_surface_interface, NULL, NULL, - &wl_shell_surface_interface, + &wl_surface_interface, &wl_output_interface, }; static const struct wl_message desktop_shell_requests[] = { - { "set_background", "oo", types + 0 }, - { "set_panel", "oo", types + 2 }, - { "set_lock_surface", "o", types + 4 }, + { "set_background", "oo", types + 1 }, + { "set_panel", "oo", types + 3 }, + { "set_lock_surface", "o", types + 5 }, { "unlock", "", types + 0 }, + { "set_grab_surface", "o", types + 6 }, }; static const struct wl_message desktop_shell_events[] = { - { "configure", "uuoii", types + 5 }, + { "configure", "uoii", types + 7 }, { "prepare_lock_surface", "", types + 0 }, + { "grab_cursor", "u", types + 0 }, }; WL_EXPORT const struct wl_interface desktop_shell_interface = { "desktop_shell", 1, - ARRAY_LENGTH(desktop_shell_requests), desktop_shell_requests, - ARRAY_LENGTH(desktop_shell_events), desktop_shell_events, + 5, desktop_shell_requests, + 3, desktop_shell_events, }; static const struct wl_message screensaver_requests[] = { - { "set_surface", "oo", types + 10 }, + { "set_surface", "oo", types + 11 }, }; WL_EXPORT const struct wl_interface screensaver_interface = { "screensaver", 1, - ARRAY_LENGTH(screensaver_requests), screensaver_requests, + 1, screensaver_requests, 0, NULL, }; diff --git a/src/modules/wl_shell/e_desktop_shell_protocol.h b/src/modules/wl_shell/e_desktop_shell_protocol.h index fcb310a..e42f75d 100644 --- a/src/modules/wl_shell/e_desktop_shell_protocol.h +++ b/src/modules/wl_shell/e_desktop_shell_protocol.h @@ -18,6 +18,24 @@ struct screensaver; extern const struct wl_interface desktop_shell_interface; extern const struct wl_interface screensaver_interface; +#ifndef DESKTOP_SHELL_CURSOR_ENUM +#define DESKTOP_SHELL_CURSOR_ENUM +enum desktop_shell_cursor { + DESKTOP_SHELL_CURSOR_NONE = 0, + DESKTOP_SHELL_CURSOR_RESIZE_TOP = 1, + DESKTOP_SHELL_CURSOR_RESIZE_BOTTOM = 2, + DESKTOP_SHELL_CURSOR_ARROW = 3, + DESKTOP_SHELL_CURSOR_RESIZE_LEFT = 4, + DESKTOP_SHELL_CURSOR_RESIZE_TOP_LEFT = 5, + DESKTOP_SHELL_CURSOR_RESIZE_BOTTOM_LEFT = 6, + DESKTOP_SHELL_CURSOR_MOVE = 7, + DESKTOP_SHELL_CURSOR_RESIZE_RIGHT = 8, + DESKTOP_SHELL_CURSOR_RESIZE_TOP_RIGHT = 9, + DESKTOP_SHELL_CURSOR_RESIZE_BOTTOM_RIGHT = 10, + DESKTOP_SHELL_CURSOR_BUSY = 11, +}; +#endif /* DESKTOP_SHELL_CURSOR_ENUM */ + struct desktop_shell_interface { /** * set_background - (none) @@ -49,15 +67,23 @@ struct desktop_shell_interface { */ void (*unlock)(struct wl_client *client, struct wl_resource *resource); + /** + * set_grab_surface - (none) + * @surface: (none) + */ + void (*set_grab_surface)(struct wl_client *client, + struct wl_resource *resource, + struct wl_resource *surface); }; #define DESKTOP_SHELL_CONFIGURE 0 #define DESKTOP_SHELL_PREPARE_LOCK_SURFACE 1 +#define DESKTOP_SHELL_GRAB_CURSOR 2 static inline void -desktop_shell_send_configure(struct wl_resource *resource_, uint32_t time, uint32_t edges, struct wl_resource *surface, int32_t width, int32_t height) +desktop_shell_send_configure(struct wl_resource *resource_, uint32_t edges, struct wl_resource *surface, int32_t width, int32_t height) { - wl_resource_post_event(resource_, DESKTOP_SHELL_CONFIGURE, time, edges, surface, width, height); + wl_resource_post_event(resource_, DESKTOP_SHELL_CONFIGURE, edges, surface, width, height); } static inline void @@ -66,6 +92,12 @@ desktop_shell_send_prepare_lock_surface(struct wl_resource *resource_) wl_resource_post_event(resource_, DESKTOP_SHELL_PREPARE_LOCK_SURFACE); } +static inline void +desktop_shell_send_grab_cursor(struct wl_resource *resource_, uint32_t cursor) +{ + wl_resource_post_event(resource_, DESKTOP_SHELL_GRAB_CURSOR, cursor); +} + struct screensaver_interface { /** * set_surface - (none) -- |
From: Chris M. - E. G. <no-...@en...> - 2013-03-07 12:08:07
|
devilhorns pushed a commit to branch devs/devilhorns/wayland. commit 7f9e641fce7435f5b24b394db28c1d2701919477 Author: Chris Michael <cp....@sa...> Date: Thu Mar 7 08:31:56 2013 +0000 Nuke all previous Shell code. Signed-off-by: Chris Michael <cp....@sa...> --- src/modules/wl_shell/e_mod_main.c | 1118 +------------------------------------ 1 file changed, 1 insertion(+), 1117 deletions(-) diff --git a/src/modules/wl_shell/e_mod_main.c b/src/modules/wl_shell/e_mod_main.c index 100cd9d..0b7535b 100644 --- a/src/modules/wl_shell/e_mod_main.c +++ b/src/modules/wl_shell/e_mod_main.c @@ -2,129 +2,20 @@ #include "e_mod_main.h" /* local function prototypes */ -static void _shell_cb_lock(E_Shell *base); -static void _shell_cb_unlock(E_Shell *base); -/* static void _shell_cb_map(E_Shell *base, E_Surface *surface, int w, int h, int sx, int sy); */ -/* static void _shell_cb_configure(E_Shell *base, E_Surface *surface, GLfloat x, GLfloat y, int w, int h); */ -static void _shell_cb_destroy(E_Shell *base); -static void _shell_cb_destroy_shell_surface(struct wl_resource *resource); -static void _shell_cb_bind(struct wl_client *client, void *data, unsigned int version __UNUSED__, unsigned int id); -static void _shell_cb_bind_desktop(struct wl_client *client, void *data, unsigned int version __UNUSED__, unsigned int id); -static void _shell_cb_unbind_desktop(struct wl_resource *resource); -static void _shell_cb_get_shell_surface(struct wl_client *client, struct wl_resource *resource, unsigned int id, struct wl_resource *surface_resource); -static void _shell_cb_handle_surface_destroy(struct wl_listener *listener, void *data __UNUSED__); -static void _shell_cb_handle_lock_surface_destroy(struct wl_listener *listener, void *data __UNUSED__); -/* static void _shell_cb_activate(E_Shell *base, E_Surface *es, E_Input_Device *eid, unsigned int timestamp); */ - -static void _shell_cb_desktop_set_background(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *output_resource, struct wl_resource *surface_resource); -static void _shell_cb_desktop_set_panel(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *output_resource, struct wl_resource *surface_resource); -static void _shell_cb_desktop_set_lock_surface(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *surface_resource); -static void _shell_cb_desktop_unlock(struct wl_client *client __UNUSED__, struct wl_resource *resource); - -static void _shell_cb_shell_surface_pong(struct wl_client *client __UNUSED__, struct wl_resource *resource, unsigned int serial); -static void _shell_cb_shell_surface_move(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *input_resource, unsigned int timestamp); -static void _shell_cb_shell_surface_resize(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *input_resource, unsigned int timestamp, unsigned int edges); -static void _shell_cb_shell_surface_set_toplevel(struct wl_client *client __UNUSED__, struct wl_resource *resource); -static void _shell_cb_shell_surface_set_transient(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *parent_resource, int x, int y, unsigned int flags __UNUSED__); -static void _shell_cb_shell_surface_set_fullscreen(struct wl_client *client __UNUSED__, struct wl_resource *resource, unsigned int method, unsigned int framerate, struct wl_resource *output_resource); -static void _shell_cb_shell_surface_set_popup(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *input_device_resource __UNUSED__, unsigned int timestamp __UNUSED__, struct wl_resource *parent_resource, int x, int y, unsigned int flags __UNUSED__); -static void _shell_cb_shell_surface_set_maximized(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *output_resource); - -static E_Shell_Surface *_shell_get_shell_surface(E_Surface *es); -static int _shell_reset_shell_surface_type(E_Shell_Surface *ess); -/* static void _shell_center_on_output(E_Surface *es, E_Output *output); */ -/* static void _shell_map_fullscreen(E_Shell_Surface *ess); */ -/* static void _shell_configure_fullscreen(E_Shell_Surface *ess); */ -/* static void _shell_stack_fullscreen(E_Shell_Surface *ess); */ -static void _shell_unset_fullscreen(E_Shell_Surface *ess); -/* static struct wl_shell *_shell_surface_get_shell(E_Shell_Surface *ess); */ -/* static E_Surface *_shell_create_black_surface(E_Compositor *comp, GLfloat x, GLfloat y, int w, int h); */ -/* static E_Shell_Surface_Type _shell_get_shell_surface_type(E_Surface *es); */ - -/* static void _shell_map_popup(E_Shell_Surface *ess, unsigned int timestamp __UNUSED__); */ -static void _shell_cb_popup_grab_focus(struct wl_pointer_grab *grab, struct wl_surface *surface, int x, int y); -static void _shell_cb_popup_grab_motion(struct wl_pointer_grab *grab, unsigned int timestamp, int sx, int sy); -static void _shell_cb_popup_grab_button(struct wl_pointer_grab *grab, unsigned int timestamp, unsigned int button, int state); /* local variables */ /* wayland interfaces */ -static const struct wl_shell_interface _e_shell_interface = -{ - _shell_cb_get_shell_surface -}; -static const struct desktop_shell_interface _e_desktop_shell_interface = -{ - _shell_cb_desktop_set_background, - _shell_cb_desktop_set_panel, - _shell_cb_desktop_set_lock_surface, - _shell_cb_desktop_unlock -}; -static const struct wl_shell_surface_interface _e_shell_surface_interface = -{ - _shell_cb_shell_surface_pong, - _shell_cb_shell_surface_move, - _shell_cb_shell_surface_resize, - _shell_cb_shell_surface_set_toplevel, - _shell_cb_shell_surface_set_transient, - _shell_cb_shell_surface_set_fullscreen, - _shell_cb_shell_surface_set_popup, - _shell_cb_shell_surface_set_maximized -}; -static const struct wl_pointer_grab_interface _e_popup_grab_interface = -{ - _shell_cb_popup_grab_focus, - _shell_cb_popup_grab_motion, - _shell_cb_popup_grab_button, -}; /* external variables */ -EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Shell" }; +EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Wl_Shell" }; EAPI void * e_modapi_init(E_Module *m) { - E_Compositor *comp; - struct wl_shell *shell; - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - if (!(comp = m->data)) return NULL; - - if (!(shell = malloc(sizeof(*shell)))) return NULL; - - memset(shell, 0, sizeof(*shell)); - - shell->compositor = comp; - shell->shell.lock = _shell_cb_lock; - shell->shell.unlock = _shell_cb_unlock; - /* shell->shell.map = _shell_cb_map; */ - /* shell->shell.configure = _shell_cb_configure; */ - shell->shell.destroy = _shell_cb_destroy; - - wl_list_init(&shell->backgrounds); - wl_list_init(&shell->panels); - - e_layer_init(&shell->fullscreen_layer, &comp->cursor_layer.link); - e_layer_init(&shell->panel_layer, &shell->fullscreen_layer.link); - e_layer_init(&shell->toplevel_layer, &shell->panel_layer.link); - e_layer_init(&shell->background_layer, &shell->toplevel_layer.link); - - wl_list_init(&shell->lock_layer.surfaces); - - if (!wl_display_add_global(comp->display, &wl_shell_interface, - shell, _shell_cb_bind)) - return NULL; - - if (!wl_display_add_global(comp->display, &desktop_shell_interface, - shell, _shell_cb_bind_desktop)) - return NULL; - - comp->shell = &shell->shell; - - /* m->data = &shell->shell; */ - return m; } @@ -145,1010 +36,3 @@ e_modapi_save(E_Module *m __UNUSED__) } /* local functions */ -static void -_shell_cb_lock(E_Shell *base) -{ - struct wl_shell *shell; - unsigned int timestamp; - E_Input_Device *device; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - shell = container_of(base, struct wl_shell, shell); - - if (shell->locked) - { - E_Output *output; - - wl_list_for_each(output, &shell->compositor->outputs, link) - if (output->set_dpms) output->set_dpms(output, E_DPMS_STANDBY); - - return; - } - - shell->locked = EINA_TRUE; - - wl_list_remove(&shell->panel_layer.link); - wl_list_remove(&shell->toplevel_layer.link); - wl_list_remove(&shell->fullscreen_layer.link); - wl_list_insert(&shell->compositor->cursor_layer.link, - &shell->lock_layer.link); - - /* TODO: launch screensaver */ - /* TODO: shell screensaver */ - /* TODO: loop screensaver surfaces */ - - e_compositor_schedule_repaint(shell->compositor); - - timestamp = e_compositor_get_time(); - wl_list_for_each(device, &shell->compositor->inputs, link) - wl_input_device_set_keyboard_focus(&device->input_device, NULL); -} - -static void -_shell_cb_unlock(E_Shell *base) -{ - struct wl_shell *shell; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - shell = container_of(base, struct wl_shell, shell); - if ((!shell->locked) || (shell->lock_surface)) - { - e_compositor_wake(shell->compositor); - return; - } - - /* TODO: handle desktop shell going away ? */ - - if (shell->prepare_event_sent) return; - - /* TODO: handle desktop_shell_send_prepare_lock_surface */ - /* desktop_shell_send_prepare_lock_surface(shell->); */ - - shell->prepare_event_sent = EINA_TRUE; -} - -/* static void */ -/* _shell_cb_map(E_Shell *base, E_Surface *surface, int w, int h, int sx, int sy) */ -/* { */ -/* struct wl_shell *shell; */ -/* E_Compositor *comp; */ -/* E_Shell_Surface *ess; */ -/* E_Shell_Surface_Type type = E_SHELL_SURFACE_NONE; */ -/* E_Surface *parent; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* shell = container_of(base, struct wl_shell, shell); */ -/* comp = shell->compositor; */ - -/* if ((ess = _shell_get_shell_surface(surface))) */ -/* type = ess->type; */ - -/* surface->geometry.w = w; */ -/* surface->geometry.h = h; */ -/* surface->geometry.dirty = EINA_TRUE; */ - -/* switch (type) */ -/* { */ -/* case E_SHELL_SURFACE_TOPLEVEL: */ -/* e_surface_set_position(surface, surface->geometry.x, surface->geometry.y); */ -/* break; */ -/* case E_SHELL_SURFACE_SCREENSAVER: */ -/* _shell_center_on_output(surface, ess->fullscreen_output); */ -/* break; */ -/* case E_SHELL_SURFACE_FULLSCREEN: */ -/* _shell_map_fullscreen(ess); */ -/* break; */ -/* case E_SHELL_SURFACE_MAXIMIZED: */ -/* e_surface_set_position(surface, surface->output->x, surface->output->y); */ -/* break; */ -/* case E_SHELL_SURFACE_LOCK: */ -/* _shell_center_on_output(surface, e_output_get_default(comp)); */ -/* break; */ -/* case E_SHELL_SURFACE_POPUP: */ -/* _shell_map_popup(ess, ess->popup.timestamp); */ -/* break; */ -/* case E_SHELL_SURFACE_NONE: */ -/* e_surface_set_position(surface, surface->geometry.x + sx, */ -/* surface->geometry.y + sy); */ -/* break; */ -/* default: */ -/* break; */ -/* } */ - -/* switch (type) */ -/* { */ -/* case E_SHELL_SURFACE_BACKGROUND: */ -/* wl_list_insert(&shell->background_layer.surfaces, &surface->layers); */ -/* break; */ -/* case E_SHELL_SURFACE_PANEL: */ -/* wl_list_insert(&shell->panel_layer.surfaces, &surface->layers); */ -/* break; */ -/* case E_SHELL_SURFACE_LOCK: */ -/* wl_list_insert(&shell->lock_layer.surfaces, &surface->layers); */ -/* e_compositor_wake(comp); */ -/* break; */ -/* case E_SHELL_SURFACE_SCREENSAVER: */ -/* if (shell->locked) */ -/* { */ -/* e_compositor_wake(comp); */ -/* if (!shell->lock_surface) */ -/* comp->state = E_COMPOSITOR_STATE_IDLE; */ -/* } */ -/* break; */ -/* case E_SHELL_SURFACE_POPUP: */ -/* case E_SHELL_SURFACE_TRANSIENT: */ -/* parent = ess->parent->surface; */ -/* wl_list_insert(parent->layers.prev, &surface->layers); */ -/* break; */ -/* case E_SHELL_SURFACE_FULLSCREEN: */ -/* case E_SHELL_SURFACE_NONE: */ -/* break; */ -/* default: */ -/* wl_list_insert(&shell->toplevel_layer.surfaces, &surface->layers); */ -/* break; */ -/* } */ - -/* if (type != E_SHELL_SURFACE_NONE) */ -/* { */ -/* e_surface_assign_output(surface); */ -/* if (type == E_SHELL_SURFACE_MAXIMIZED) */ -/* surface->output = ess->output; */ -/* } */ - -/* switch (type) */ -/* { */ -/* case E_SHELL_SURFACE_TOPLEVEL: */ -/* case E_SHELL_SURFACE_TRANSIENT: */ -/* case E_SHELL_SURFACE_FULLSCREEN: */ -/* case E_SHELL_SURFACE_MAXIMIZED: */ -/* if (!shell->locked) */ -/* _shell_cb_activate(base, surface, */ -/* (E_Input_Device *)comp->input_device, */ -/* e_compositor_get_time()); */ -/* break; */ -/* default: */ -/* break; */ -/* } */ - -/* if (type == E_SHELL_SURFACE_TOPLEVEL) */ -/* { */ -/* } */ -/* } */ - -/* static void */ -/* _shell_cb_configure(E_Shell *base, E_Surface *surface, GLfloat x, GLfloat y, int w, int h) */ -/* { */ -/* struct wl_shell *shell; */ -/* E_Shell_Surface_Type type = E_SHELL_SURFACE_NONE; */ -/* E_Shell_Surface_Type ptype = E_SHELL_SURFACE_NONE; */ -/* E_Shell_Surface *ess; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* shell = container_of(base, struct wl_shell, shell); */ - -/* if ((ess = _shell_get_shell_surface(surface))) */ -/* type = ess->type; */ - -/* surface->geometry.x = x; */ -/* surface->geometry.y = y; */ -/* surface->geometry.w = w; */ -/* surface->geometry.h = h; */ -/* surface->geometry.dirty = EINA_TRUE; */ - -/* switch (type) */ -/* { */ -/* case E_SHELL_SURFACE_SCREENSAVER: */ -/* _shell_center_on_output(surface, ess->fullscreen_output); */ -/* break; */ -/* case E_SHELL_SURFACE_FULLSCREEN: */ -/* _shell_configure_fullscreen(ess); */ -/* if (ptype != E_SHELL_SURFACE_FULLSCREEN) */ -/* _shell_stack_fullscreen(ess); */ -/* break; */ -/* case E_SHELL_SURFACE_MAXIMIZED: */ -/* surface->geometry.x = surface->output->x; */ -/* surface->geometry.y = surface->output->y; */ -/* break; */ -/* case E_SHELL_SURFACE_TOPLEVEL: */ -/* break; */ -/* default: */ -/* break; */ -/* } */ - -/* if (surface->output) */ -/* { */ -/* e_surface_assign_output(surface); */ -/* if (type == E_SHELL_SURFACE_SCREENSAVER) */ -/* surface->output = ess->output; */ -/* else if (type == E_SHELL_SURFACE_MAXIMIZED) */ -/* surface->output = ess->output; */ -/* } */ -/* } */ - -static void -_shell_cb_destroy(E_Shell *base) -{ - struct wl_shell *shell; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - shell = container_of(base, struct wl_shell, shell); - free(shell); -} - -static void -_shell_cb_destroy_shell_surface(struct wl_resource *resource) -{ - E_Shell_Surface *ess; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess = resource->data; - if (ess->popup.grab.input_device) - wl_input_device_end_pointer_grab(ess->popup.grab.input_device); - if (ess->surface) - wl_list_remove(&ess->surface_destroy_listener.link); - if (ess->fullscreen.black_surface) - e_surface_destroy(ess->fullscreen.black_surface); - wl_list_remove(&ess->link); - free(ess); -} - -static void -_shell_cb_bind(struct wl_client *client, void *data, unsigned int version __UNUSED__, unsigned int id) -{ - struct wl_shell *shell; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - if (!(shell = data)) return; - wl_client_add_object(client, &wl_shell_interface, - &_e_shell_interface, id, shell); -} - -static void -_shell_cb_bind_desktop(struct wl_client *client, void *data, unsigned int version __UNUSED__, unsigned int id) -{ - struct wl_shell *shell; - struct wl_resource *resource; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - if (!(shell = data)) return; - resource = wl_client_add_object(client, &desktop_shell_interface, - &_e_desktop_shell_interface, id, shell); - resource->destroy = _shell_cb_unbind_desktop; -} - -static void -_shell_cb_unbind_desktop(struct wl_resource *resource) -{ - struct wl_shell *shell; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - shell = resource->data; - if (shell->locked) - { - /* TODO: resume desktop */ - } - shell->prepare_event_sent = EINA_FALSE; - free(resource); -} - -static void -_shell_cb_get_shell_surface(struct wl_client *client, struct wl_resource *resource, unsigned int id, struct wl_resource *surface_resource) -{ - E_Surface *es; - E_Shell_Surface *ess; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - es = surface_resource->data; - - if (_shell_get_shell_surface(es)) - { - wl_resource_post_error(surface_resource, - WL_DISPLAY_ERROR_INVALID_OBJECT, - "wl_shell::shell_surface already requested"); - return; - } - - if (!(ess = calloc(1, sizeof(E_Shell_Surface)))) - { - wl_resource_post_no_memory(resource); - return; - } - - ess->resource.destroy = _shell_cb_destroy_shell_surface; - ess->resource.object.id = id; - ess->resource.object.interface = &wl_shell_surface_interface; - ess->resource.object.implementation = - (void (**)(void)) &_e_shell_surface_interface; - ess->resource.data = ess; - - ess->saved_pos_valid = EINA_FALSE; - ess->surface = es; - ess->fullscreen.type = WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT; - ess->fullscreen.framerate = 0; - ess->fullscreen.black_surface = NULL; - wl_list_init(&ess->fullscreen.transform.link); - - ess->surface_destroy_listener.notify = _shell_cb_handle_surface_destroy; - wl_signal_add(&es->surface.resource.destroy_signal, - &ess->surface_destroy_listener); - - wl_list_init(&ess->link); - wl_list_init(&ess->rotation.transform.link); - e_matrix_init(&ess->rotation.rotation); - - ess->type = E_SHELL_SURFACE_NONE; - - wl_client_add_resource(client, &ess->resource); -} - -static void -_shell_cb_handle_surface_destroy(struct wl_listener *listener, void *data __UNUSED__) -{ - E_Shell_Surface *ess; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess = container_of(listener, E_Shell_Surface, surface_destroy_listener); - ess->surface = NULL; - wl_resource_destroy(&ess->resource); -} - -static void -_shell_cb_handle_lock_surface_destroy(struct wl_listener *listener, void *data __UNUSED__) -{ - struct wl_shell *shell; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - shell = container_of(listener, struct wl_shell, lock_surface_listener); - shell->lock_surface = NULL; -} - -/* static void */ -/* _shell_cb_activate(E_Shell *base, E_Surface *es, E_Input_Device *eid, unsigned int timestamp) */ -/* { */ -/* struct wl_shell *shell; */ -/* E_Compositor *comp; */ -/* E_Shell_Surface_Type type = E_SHELL_SURFACE_NONE; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* shell = container_of(base, struct wl_shell, shell); */ -/* comp = shell->compositor; */ - -/* e_surface_activate(es, eid, timestamp); */ - -/* type = _shell_get_shell_surface_type(es); */ -/* switch (type) */ -/* { */ -/* case E_SHELL_SURFACE_BACKGROUND: */ -/* case E_SHELL_SURFACE_PANEL: */ -/* case E_SHELL_SURFACE_LOCK: */ -/* break; */ -/* case E_SHELL_SURFACE_SCREENSAVER: */ -/* if (shell->lock_surface) */ -/* e_surface_restack(es, &shell->lock_surface->surface->layers); */ -/* break; */ -/* case E_SHELL_SURFACE_FULLSCREEN: */ -/* break; */ -/* default: */ -/* e_surface_restack(es, &shell->toplevel_layer.surfaces); */ -/* break; */ -/* } */ -/* } */ - -static void -_shell_cb_desktop_set_background(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *output_resource, struct wl_resource *surface_resource) -{ - struct wl_shell *shell; - E_Shell_Surface *ess, *priv; - E_Surface *es; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - shell = resource->data; - ess = surface_resource->data; - es = ess->surface; - - if (_shell_reset_shell_surface_type(ess)) return; - - wl_list_for_each(priv, &shell->backgrounds, link) - { - if (priv->output == output_resource->data) - { - priv->surface->output = NULL; - wl_list_remove(&priv->surface->layers); - wl_list_remove(&priv->link); - break; - } - } - - ess->type = E_SHELL_SURFACE_BACKGROUND; - ess->output = output_resource->data; - wl_list_insert(&shell->backgrounds, &ess->link); - - e_surface_set_position(es, ess->output->x, ess->output->y); - - desktop_shell_send_configure(resource, e_compositor_get_time(), 0, - surface_resource, ess->output->current->w, - ess->output->current->h); -} - -static void -_shell_cb_desktop_set_panel(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *output_resource, struct wl_resource *surface_resource) -{ - struct wl_shell *shell; - E_Shell_Surface *ess, *priv; - E_Surface *es; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - shell = resource->data; - ess = surface_resource->data; - es = ess->surface; - - if (_shell_reset_shell_surface_type(ess)) return; - - wl_list_for_each(priv, &shell->panels, link) - { - if (priv->output == output_resource->data) - { - priv->surface->output = NULL; - wl_list_remove(&priv->surface->layers); - wl_list_remove(&priv->link); - break; - } - } - - ess->type = E_SHELL_SURFACE_PANEL; - ess->output = output_resource->data; - - wl_list_insert(&shell->panels, &ess->link); - - e_surface_set_position(es, ess->output->x, ess->output->y); - - desktop_shell_send_configure(resource, e_compositor_get_time(), 0, - surface_resource, ess->output->current->w, - ess->output->current->h); -} - -static void -_shell_cb_desktop_set_lock_surface(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *surface_resource) -{ - struct wl_shell *shell; - E_Shell_Surface *ess; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - shell = resource->data; - ess = surface_resource->data; - - if (_shell_reset_shell_surface_type(ess)) return; - - shell->prepare_event_sent = EINA_FALSE; - if (!shell->locked) return; - - shell->lock_surface = ess; - shell->lock_surface_listener.notify = _shell_cb_handle_lock_surface_destroy; - wl_signal_add(&surface_resource->destroy_signal, - &shell->lock_surface_listener); - - shell->lock_surface->type = E_SHELL_SURFACE_LOCK; -} - -static void -_shell_cb_desktop_unlock(struct wl_client *client __UNUSED__, struct wl_resource *resource) -{ - struct wl_shell *shell; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - shell = resource->data; - shell->prepare_event_sent = EINA_FALSE; - if (shell->locked) - { - /* TODO: resume desktop */ - } -} - -static void -_shell_cb_shell_surface_pong(struct wl_client *client __UNUSED__, struct wl_resource *resource, unsigned int serial) -{ - E_Shell_Surface *ess; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess = resource->data; - /* TODO: handle ping timer */ -} - -static void -_shell_cb_shell_surface_move(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *input_resource, unsigned int timestamp) -{ - E_Input_Device *eid; - E_Shell_Surface *ess; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - eid = input_resource->data; - ess = resource->data; - - if ((eid->input_device.button_count == 0) || - (eid->input_device.grab_time != timestamp) || - (eid->input_device.pointer_focus != &ess->surface->surface)) - return; - - if (!e_surface_move(ess->surface, eid, timestamp)) - wl_resource_post_no_memory(resource); -} - -static void -_shell_cb_shell_surface_resize(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *input_resource, unsigned int timestamp, unsigned int edges) -{ - E_Input_Device *eid; - E_Shell_Surface *ess; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - eid = input_resource->data; - ess = resource->data; - - if (ess->type == E_SHELL_SURFACE_FULLSCREEN) return; - - if ((eid->input_device.button_count == 0) || - (eid->input_device.grab_time != timestamp) || - (eid->input_device.pointer_focus != &ess->surface->surface)) - return; - - if (!e_surface_resize(ess->surface, eid, timestamp, edges)) - wl_resource_post_no_memory(resource); -} - -static void -_shell_cb_shell_surface_set_toplevel(struct wl_client *client __UNUSED__, struct wl_resource *resource) -{ - E_Shell_Surface *ess; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess = resource->data; - - if (_shell_reset_shell_surface_type(ess)) return; - ess->type = E_SHELL_SURFACE_TOPLEVEL; -} - -static void -_shell_cb_shell_surface_set_transient(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *parent_resource, int x, int y, unsigned int flags __UNUSED__) -{ - E_Shell_Surface *ess, *pess; - E_Surface *es, *pes; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess = resource->data; - es = ess->surface; - pess = parent_resource->data; - pes = pess->surface; - - if (_shell_reset_shell_surface_type(ess)) return; - - ess->output = pes->output; - e_surface_set_position(es, pes->geometry.x + x, pes->geometry.y + y); - ess->type = E_SHELL_SURFACE_TRANSIENT; -} - -static void -_shell_cb_shell_surface_set_fullscreen(struct wl_client *client __UNUSED__, struct wl_resource *resource, unsigned int method, unsigned int framerate, struct wl_resource *output_resource) -{ - E_Shell_Surface *ess; - E_Surface *es; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess = resource->data; - es = ess->surface; - - if (output_resource) - ess->output = output_resource->data; - else - ess->output = e_output_get_default(es->compositor); - - if (_shell_reset_shell_surface_type(ess)) return; - - ess->fullscreen_output = ess->output; - ess->fullscreen.type = method; - ess->fullscreen.framerate = framerate; - ess->type = E_SHELL_SURFACE_FULLSCREEN; - ess->sx = es->geometry.x; - ess->sy = es->geometry.y; - ess->saved_pos_valid = EINA_TRUE; - - if (es->output) ess->surface->force_configure = EINA_TRUE; - - wl_shell_surface_send_configure(&ess->resource, 0, - ess->output->current->w, - ess->output->current->h); -} - -static void -_shell_cb_shell_surface_set_popup(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *input_device_resource __UNUSED__, unsigned int timestamp __UNUSED__, struct wl_resource *parent_resource, int x, int y, unsigned int flags __UNUSED__) -{ - E_Shell_Surface *ess; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess = resource->data; - ess->type = E_SHELL_SURFACE_POPUP; - ess->parent = parent_resource->data; - ess->popup.x = x; - ess->popup.y = y; -} - -static void -_shell_cb_shell_surface_set_maximized(struct wl_client *client __UNUSED__, struct wl_resource *resource, struct wl_resource *output_resource) -{ - E_Shell_Surface *ess; - E_Surface *es; - /* struct wl_shell *shell = NULL; */ - unsigned int edges = 0; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess = resource->data; - es = ess->surface; - - if (output_resource) - ess->output = output_resource->data; - else - ess->output = e_output_get_default(es->compositor); - - if (_shell_reset_shell_surface_type(ess)) return; - - ess->sx = es->geometry.x; - ess->sy = es->geometry.y; - ess->saved_pos_valid = EINA_TRUE; - - /* TODO: handle getting panel size ?? */ - - edges = WL_SHELL_SURFACE_RESIZE_TOP | WL_SHELL_SURFACE_RESIZE_LEFT; - wl_shell_surface_send_configure(&ess->resource, edges, - es->output->current->w, - es->output->current->h); - ess->type = E_SHELL_SURFACE_MAXIMIZED; -} - -static E_Shell_Surface * -_shell_get_shell_surface(E_Surface *es) -{ - struct wl_listener *listener; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - listener = wl_signal_get(&es->surface.resource.destroy_signal, - _shell_cb_handle_surface_destroy); - if (listener) - return container_of(listener, E_Shell_Surface, surface_destroy_listener); - - return NULL; -} - -static int -_shell_reset_shell_surface_type(E_Shell_Surface *ess) -{ - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - switch (ess->type) - { - case E_SHELL_SURFACE_FULLSCREEN: - _shell_unset_fullscreen(ess); - break; - case E_SHELL_SURFACE_MAXIMIZED: - ess->output = e_output_get_default(ess->surface->compositor); - e_surface_set_position(ess->surface, ess->sx, ess->sy); - break; - case E_SHELL_SURFACE_PANEL: - case E_SHELL_SURFACE_BACKGROUND: - wl_list_remove(&ess->link); - wl_list_init(&ess->link); - break; - case E_SHELL_SURFACE_SCREENSAVER: - case E_SHELL_SURFACE_LOCK: - wl_resource_post_error(&ess->resource, - WL_DISPLAY_ERROR_INVALID_METHOD, - "cannot reassign surface type"); - return -1; - break; - case E_SHELL_SURFACE_NONE: - case E_SHELL_SURFACE_TOPLEVEL: - case E_SHELL_SURFACE_TRANSIENT: - case E_SHELL_SURFACE_POPUP: - break; - } - - ess->type = E_SHELL_SURFACE_NONE; - return 0; -} - -/* static void */ -/* _shell_center_on_output(E_Surface *es, E_Output *output) */ -/* { */ -/* E_Output_Mode *mode; */ -/* GLfloat x, y; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* mode = output->current; */ -/* x = (mode->w - es->geometry.w) / 2; */ -/* y = (mode->h - es->geometry.h) / 2; */ -/* e_surface_set_position(es, output->x + x, output->y + y); */ -/* } */ - -/* static void */ -/* _shell_map_fullscreen(E_Shell_Surface *ess) */ -/* { */ -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* _shell_configure_fullscreen(ess); */ -/* _shell_stack_fullscreen(ess); */ -/* } */ - -/* static void */ -/* _shell_configure_fullscreen(E_Shell_Surface *ess) */ -/* { */ -/* E_Output *output; */ -/* E_Surface *es; */ -/* E_Matrix *matrix; */ -/* float scale; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* output = ess->fullscreen_output; */ -/* es = ess->surface; */ - -/* _shell_center_on_output(es, output); */ - -/* if (!ess->fullscreen.black_surface) */ -/* { */ -/* ess->fullscreen.black_surface = */ -/* _shell_create_black_surface(es->compositor, output->x, output->y, */ -/* output->current->w, output->current->h); */ -/* } */ - -/* wl_list_remove(&ess->fullscreen.black_surface->layers); */ -/* wl_list_insert(&es->layers, &ess->fullscreen.black_surface->layers); */ -/* ess->fullscreen.black_surface->output = output; */ - -/* switch (ess->fullscreen.type) */ -/* { */ -/* case WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT: */ -/* break; */ -/* case WL_SHELL_SURFACE_FULLSCREEN_METHOD_SCALE: */ -/* matrix = &ess->fullscreen.transform.matrix; */ -/* e_matrix_init(matrix); */ -/* scale = (float)output->current->w / (float)es->geometry.w; */ -/* e_matrix_scale(matrix, scale, scale, 1); */ -/* wl_list_remove(&ess->fullscreen.transform.link); */ -/* wl_list_insert(es->geometry.transforms.prev, */ -/* &ess->fullscreen.transform.link); */ -/* e_surface_set_position(es, output->x, output->y); */ -/* break; */ -/* case WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER: */ -/* break; */ -/* case WL_SHELL_SURFACE_FULLSCREEN_METHOD_FILL: */ -/* break; */ -/* default: */ -/* break; */ -/* } */ -/* } */ - -/* static void */ -/* _shell_stack_fullscreen(E_Shell_Surface *ess) */ -/* { */ -/* E_Surface *es; */ -/* struct wl_shell *shell; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* es = ess->surface; */ -/* shell = _shell_surface_get_shell(ess); */ - -/* wl_list_remove(&es->layers); */ -/* wl_list_remove(&ess->fullscreen.black_surface->layers); */ - -/* wl_list_insert(&shell->fullscreen_layer.surfaces, &es->layers); */ -/* wl_list_insert(&es->layers, &ess->fullscreen.black_surface->layers); */ - -/* e_surface_damage(es); */ -/* e_surface_damage(ess->fullscreen.black_surface); */ -/* } */ - -static void -_shell_unset_fullscreen(E_Shell_Surface *ess) -{ - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess->fullscreen.type = WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT; - ess->fullscreen.framerate = 0; - wl_list_remove(&ess->fullscreen.transform.link); - wl_list_init(&ess->fullscreen.transform.link); - e_surface_destroy(ess->fullscreen.black_surface); - ess->fullscreen.black_surface = NULL; - ess->fullscreen_output = NULL; - ess->surface->force_configure = EINA_TRUE; - e_surface_set_position(ess->surface, ess->sx, ess->sy); -} - -/* static struct wl_shell * */ -/* _shell_surface_get_shell(E_Shell_Surface *ess) */ -/* { */ -/* E_Surface *es; */ -/* E_Shell *shell; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* es = ess->surface; */ -/* shell = es->compositor->shell; */ -/* return (struct wl_shell *)container_of(shell, struct wl_shell, shell); */ -/* } */ - -/* static E_Surface * */ -/* _shell_create_black_surface(E_Compositor *comp, GLfloat x, GLfloat y, int w, int h) */ -/* { */ -/* E_Surface *es = NULL; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* if (!(es = e_surface_create(comp))) */ -/* return NULL; */ - -/* e_surface_configure(es, x, y, w, h); */ -/* e_surface_set_color(es, 0.0, 0.0, 0.0, 1); */ - -/* return es; */ -/* } */ - -/* static E_Shell_Surface_Type */ -/* _shell_get_shell_surface_type(E_Surface *es) */ -/* { */ -/* E_Shell_Surface *ess; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* if (!(ess = _shell_get_shell_surface(es))) */ -/* return E_SHELL_SURFACE_NONE; */ - -/* return ess->type; */ -/* } */ - -/* static void */ -/* _shell_map_popup(E_Shell_Surface *ess, unsigned int timestamp __UNUSED__) */ -/* { */ -/* struct wl_input_device *device; */ -/* E_Surface *es, *parent; */ - -/* SLOGFN(__FILE__, __LINE__, __FUNCTION__); */ - -/* es = ess->surface; */ -/* parent = ess->parent->surface; */ -/* es->output = parent->output; */ -/* device = es->compositor->input_device; */ - -/* ess->popup.grab.interface = &_e_popup_grab_interface; */ -/* e_surface_update_transform(parent); */ -/* if (parent->transform.enabled) */ -/* ess->popup.parent_transform.matrix = parent->transform.matrix; */ -/* else */ -/* { */ -/* e_matrix_init(&ess->popup.parent_transform.matrix); */ -/* ess->popup.parent_transform.matrix.d[12] = parent->geometry.x; */ -/* ess->popup.parent_transform.matrix.d[13] = parent->geometry.y; */ -/* } */ - -/* wl_list_insert(es->geometry.transforms.prev, */ -/* &ess->popup.parent_transform.link); */ -/* e_surface_set_position(es, ess->popup.x, ess->popup.y); */ - -/* ess->popup.grab.input_device = device; */ -/* ess->popup.timestamp = device->grab_time; */ -/* ess->popup.initial_up = EINA_FALSE; */ - -/* wl_input_device_start_pointer_grab(ess->popup.grab.input_device, */ -/* &ess->popup.grab); */ -/* } */ - -static void -_shell_cb_popup_grab_focus(struct wl_pointer_grab *grab, struct wl_surface *surface, int x, int y) -{ - struct wl_input_device *device; - E_Shell_Surface *priv; - struct wl_client *client; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - device = grab->input_device; - priv = container_of(grab, E_Shell_Surface, popup.grab); - client = priv->surface->surface.resource.client; - - if ((surface) && (surface->resource.client == client)) - { - wl_input_device_set_pointer_focus(device, surface, x, y); - grab->focus = surface; - } - else - { - wl_input_device_set_pointer_focus(device, NULL, 0, 0); - grab->focus = NULL; - } -} - -static void -_shell_cb_popup_grab_motion(struct wl_pointer_grab *grab, unsigned int timestamp, int sx, int sy) -{ - /* struct wl_input_device *device; */ - /* E_Surface_Move_Grab *move; */ - /* E_Surface *es; */ - - /* device = grab->input_device; */ - /* move = (E_Surface_Move_Grab *)grab; */ - - /* es = move->surface; */ - /* e_surface_configure(es, device->x + move->dx, device->y + move->dy, */ - /* es->geometry.w, es->geometry.h); */ - - struct wl_resource *resource; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - if ((resource = grab->input_device->pointer_focus_resource)) - wl_input_device_send_motion(resource, timestamp, sx, sy); -} - -static void -_shell_cb_popup_grab_button(struct wl_pointer_grab *grab, unsigned int timestamp, unsigned int button, int state) -{ - /* struct wl_input_device *device; */ - - /* device = grab->input_device; */ - /* if ((device->button_count == 0) && (state == 0)) */ - /* { */ - /* wl_input_device_end_pointer_grab(device, timestamp); */ - /* free(grab); */ - /* } */ - - struct wl_resource *resource; - E_Shell_Surface *ess = NULL; - - SLOGFN(__FILE__, __LINE__, __FUNCTION__); - - ess = container_of(grab, E_Shell_Surface, popup.grab); - - if ((resource = grab->input_device->pointer_focus_resource)) - { - struct wl_display *disp; - unsigned int serial = 0; - - disp = wl_client_get_display(resource->client); - serial = wl_display_get_serial(disp); - wl_input_device_send_button(resource, serial, timestamp, button, state); - } - else if ((state == 0) && - ((ess->popup.initial_up) || - (timestamp - ess->popup.timestamp > 500))) - { - wl_shell_surface_send_popup_done(&ess->resource); - wl_input_device_end_pointer_grab(grab->input_device); - ess->popup.grab.input_device = NULL; - } - - if (state == 0) ess->popup.initial_up = EINA_TRUE; -} -- |