Compare commits

...

90 Commits

Author SHA1 Message Date
Mike Blumenkrantz aebda73e19 set pass_events on client mirrors when beginning zoom hide
fix T7310
2018-08-17 10:08:38 -04:00
Mike Blumenkrantz 53c83301c8 unset client list from zoom object when beginning hide 2018-08-17 10:08:18 -04:00
Mike Blumenkrantz a663cccaf9 grab input during pip editing 2018-02-09 12:26:27 -05:00
Mike Blumenkrantz aafb9954ba remove sandbox base infra 2017-11-03 11:41:14 -04:00
Mike Blumenkrantz 054b72912b add parsing for X-Gadget-Orientations in sandboxed gadgets
specify all supported orientations with semicolons for separators
2017-11-01 13:02:26 -04:00
Mike Blumenkrantz 1a2d94810a force sandbox gadget popup sizing immediately
ensure that first rendered frame is the expected size
2017-10-20 16:13:32 -04:00
Mike Blumenkrantz e46924b357 fix sandbox gadget popup size hints 2017-10-20 16:04:22 -04:00
Mike Blumenkrantz 528e25e0bb send SIGSTOP to sandbox gadgets on load if RUNNER_DEBUG env var is set 2017-10-20 16:03:46 -04:00
Mike Blumenkrantz e2b0c045b5 require efl-wl 1.20.99 2017-10-20 09:35:18 -04:00
Mike Blumenkrantz fb2b5c6772 handle weight hints on sandbox gadget popup surfaces 2017-10-19 14:45:18 -04:00
Mike Blumenkrantz 74bbda4657 add support for opening uris from sandboxed gadgets 2017-10-19 11:13:15 -04:00
Mike Blumenkrantz 2f74316f7d destroy runner child popups when underlying surface is deleted 2017-10-18 12:55:42 -04:00
Mike Blumenkrantz ccebc776aa set all windows to borderless in sandbox loader 2017-10-18 11:47:00 -04:00
Mike Blumenkrantz 036cc63fd9 bump efl-wl req 2017-09-27 12:02:51 -04:00
Mike Blumenkrantz 1cdf98e934 fix perms on meson-installed edj 2017-09-20 00:26:07 -04:00
Mike Blumenkrantz f2c7052be9 don't double grab input on runner popups 2017-09-19 17:45:10 -04:00
Mike Blumenkrantz 67f59ab01e fix runner gadget del callbacks 2017-09-15 13:35:35 -04:00
Mike Blumenkrantz 0b328cb10d feed mouse up to runner gadgets when creating child popup
ensure autoclose doesn't trigger instantly
2017-09-15 13:35:07 -04:00
Mike Blumenkrantz a4c57fba2d use separate pid namespaces when forking runner gadgets
ensure children of gadgets are destroyed when main gadget process exits
2017-09-15 13:34:30 -04:00
Mike Blumenkrantz b751d27463 delete runner popup content on content hide
I don't remember why I did this but efl
2017-09-11 14:53:03 -04:00
Mike Blumenkrantz d32e5de81b use new menu_show_object action for start gadget 2017-08-14 13:47:08 -04:00
Mike Blumenkrantz e352dc07d1 test gadget: delete popup window when main window is clicked while visible 2017-08-14 13:46:47 -04:00
Mike Blumenkrantz a0d72c5d91 add sandbox gadget type for runner gadgets 2017-08-11 18:49:46 -04:00
Mike Blumenkrantz 62128d19d8 set aspect on start gadget window, not layout 2017-08-11 18:49:21 -04:00
Mike Blumenkrantz 1f651fbfe8 SIGTERM sandboxed gadgets on config delete 2017-08-09 16:03:29 -04:00
Mike Blumenkrantz 0ef6c85982 handle popups and child windows in runner gadget 2017-08-09 15:55:03 -04:00
Mike Blumenkrantz b420b4af60 don't disable ds fade object if it doesn't exist 2017-08-09 14:42:07 -04:00
Mike Blumenkrantz 67811b1f3a remove option for disabling events on runner gadgets
I can't think of a way to make this work
2017-08-07 15:33:48 -04:00
Mike Blumenkrantz 26c589e745 support fully sandboxed sub-gadgets in runner gadget
also add demo "start" gadget
2017-08-04 16:03:59 -04:00
Mike Blumenkrantz f1fd2a827a meson formatting 2017-08-04 16:03:45 -04:00
Mike Blumenkrantz 39c65797de set minmax on runner gadgets 2017-08-04 15:57:52 -04:00
Mike Blumenkrantz 49ba605d48 kill runner subprocess on gadget deletion 2017-08-04 15:57:52 -04:00
Mike Blumenkrantz cdaf50cac3 add gadget test 2017-08-04 15:57:52 -04:00
Mike Blumenkrantz 4945d1b257 fix runner entry focus 2017-08-04 15:57:52 -04:00
Mike Blumenkrantz 5807ac7b89 add proto 2017-08-04 15:57:50 -04:00
Mike Blumenkrantz 8ffae277b3 set aspect on runner gadgets 2017-08-01 10:32:19 -04:00
Mike Blumenkrantz 23ef468a29 escape runner cmdline strings 2017-08-01 10:32:09 -04:00
Mike Blumenkrantz 68467df44d meson 2017-07-31 17:04:11 -04:00
Mike Blumenkrantz e63871d929 generate fewer files 2017-07-31 17:02:02 -04:00
Mike Blumenkrantz 4de6a6ef34 temp force events on in runner config 2017-06-30 17:24:49 -04:00
Mike Blumenkrantz ca2e4eb738 add runner gadget for testing
runner is a desktop-only gadget which allows the running of commands
inside a nested wayland compositor inside a gadget using hw accel where
available

it should be possible to use this for things like:

* playing a movie on the desktop
* tailing a log in a terminal
* keeping an always-open terminal on your desktop
* using an external filemanager on the desktop

known issues:
- do not attempt to move the gadget once placed or bad things will happen
- some focus issues with gadget config
2017-06-30 17:22:04 -04:00
Mike Blumenkrantz 3623f8a7e0 bump dep version, use internal efx 2017-06-30 16:14:12 -04:00
Mike Blumenkrantz d8c3317d3c set pass_events on move/resize objects 2017-06-23 17:33:47 -04:00
Mike Blumenkrantz 364c6baefb /EAPI/E_API/ 2016-03-11 16:00:49 -05:00
Mike Blumenkrantz 35b323adfd remove maximize from e21 builds: present in main 2016-03-09 11:51:54 -05:00
Mike Blumenkrantz 6b4bd60895 1.1.0 NEWS updates 2015-12-28 12:12:46 -05:00
Mike Blumenkrantz 76c0e98bf9 1.1.0 release 2015-12-28 12:07:25 -05:00
Mike Blumenkrantz 790d62c67d require E20+ 2015-12-28 12:07:03 -05:00
Mike Blumenkrantz c2a1464d1e switch bzip2->xz in dist 2015-12-28 12:06:57 -05:00
Mike Blumenkrantz 289f356c28 move to single makefile build 2015-12-21 21:55:16 -05:00
Mike Blumenkrantz 6a21290dcd add handling for maintaining sticky windows with superkey
manage sticky windows based on their last-used desk when flipping
2015-12-02 13:52:46 -05:00
Mike Blumenkrantz 26bf74f991 add multipress functionality for superkey
iterate through the focus chain by repeatedly pressing the superkey
2015-12-02 13:52:46 -05:00
Mike Blumenkrantz 29a28405b9 add Super Ultimate Window Management binding under Desksanity actions
the superkey is an optimized way of managing windows when a screen has
<= 4 vdesks. it provides smart desk flipping and greatly reduces wrist
strain from the alt+FX claw binding

the superkey is designed to be bound to the Menu key
2015-12-02 13:49:42 -05:00
Mike Blumenkrantz c82393c2a4 enable pip edit mode when creating a pip
this is the normal use case so do it automatically
2015-12-02 13:41:57 -05:00
Mike Blumenkrantz 7c90ff8136 make pip move/resize while clipped more accurate based on clip geometry 2015-12-02 13:41:56 -05:00
Mike Blumenkrantz 267e84ca6d remove pip delete callback during pip free
fixes crash when unloading module while pips exist
2015-12-02 13:41:55 -05:00
Mike Blumenkrantz 24d4459e61 force sizing of zoom effect tables before adding to layout
this ensures that the table gets the right size prior to setting up
any of the clients in it
2015-11-18 15:25:30 -05:00
Mike Blumenkrantz 3664906fd3 disable maximize effect for x11 csd windows
this is impossible to sanely handle at present
2015-11-16 15:05:48 -05:00
Mike Blumenkrantz 546346d8bc use bring_in for zoom keyboard navigation 2015-11-11 17:40:06 -05:00
Mike Blumenkrantz 2d2ce8c298 improve keyboard navigation for zoom effect 2015-11-11 17:40:06 -05:00
Mike Blumenkrantz d0e3824adf redo "active" signalling for zoom effect to be more easily themable 2015-11-11 17:40:06 -05:00
Mike Blumenkrantz ba54cf5497 use color3 for setting OUTLINE color on zoom text 2015-11-11 17:40:06 -05:00
Mike Blumenkrantz e98d5390de make zoom effect more subtle when indicating which window is "active" 2015-11-11 17:40:06 -05:00
Mike Blumenkrantz 233cd9aac1 don't enable map for zoom client effect
this seems to now do very strange things when enabled...puzzling
2015-11-11 17:40:06 -05:00
Mike Blumenkrantz 32421e0ca5 make zoom focus rect more translucent when active 2015-11-11 17:40:06 -05:00
Mike Blumenkrantz 265a355693 clip zoom client focus rect to clipper 2015-11-11 17:40:06 -05:00
Mike Blumenkrantz 24f89c2361 fix zoom focus rect sizing to be even on all sides 2015-11-11 17:40:06 -05:00
Mike Blumenkrantz 18f1fea269 add scroller indicator for zoom effect 2015-11-11 17:40:06 -05:00
Mike Blumenkrantz a8e8bb1a15 use correct int size for ds effect iterating
fixes selectively disabling desk flip effects
2015-11-10 20:25:05 -05:00
Mike Blumenkrantz 568ee43e6f reorder ds client iterator filter to catch override clients before ec->desk deref
ref D3024 and @Samis2001
2015-09-07 10:19:30 -04:00
Mike Blumenkrantz b88c9bee34 fix zoom key actions
broken due to elm migration...
2015-05-08 18:19:34 -04:00
Mike Blumenkrantz 9ffa7c119a show clients before performing desk flip
see b4e41d52c51a18b6916ab75daaaa07de784a79a8 in e
2015-04-29 17:23:31 -04:00
Mike Blumenkrantz 09f508c2ed maybe fix zoom animation geometries? 2015-03-31 19:00:29 -04:00
Mike Blumenkrantz e86fb3e610 ignore/clean 'compile' file 2015-03-19 17:17:58 -04:00
Mike Blumenkrantz 2662081d22 more api updates 2015-03-19 17:17:25 -04:00
Mike Blumenkrantz e1ae86f80a update to latest api changes 2015-03-13 20:02:46 -04:00
Mike Blumenkrantz 95b961304e disallow pip manage action if no pips exist 2015-02-22 23:24:11 -05:00
Mike Blumenkrantz b2bd0365cd and null the clip pointer because this module is way too smart to crash 2015-02-11 23:15:43 -05:00
Mike Blumenkrantz aec23ab918 make pip crop reset if user shift+clicks without moving 2015-02-11 22:57:44 -05:00
Mike Blumenkrantz b0793df659 update news, bump version 2015-02-03 18:51:45 -05:00
Mike Blumenkrantz 4e991a1d92 bump e version req 2015-02-03 18:32:02 -05:00
Mike Blumenkrantz b7aef3ec51 fix multiscreen zoom and current desks zoom 2015-02-03 18:29:43 -05:00
Mike Blumenkrantz 3165448d4c fix input regions on shaded clients after desk flip 2015-02-02 21:40:31 -05:00
Mike Blumenkrantz 37f6636696 raise client zoom obj on mouse in 2015-01-15 18:24:00 -05:00
Mike Blumenkrantz b38237ae6a more elm conversions 2015-01-15 18:23:48 -05:00
Mike Blumenkrantz f7d0e9f50d fix edje warnings 2015-01-15 18:23:34 -05:00
Mike Blumenkrantz eafb98e32a zsq 2015-01-15 17:12:23 -05:00
Mike Blumenkrantz 14ebb8eecc remove bad comp usage in pip 2015-01-15 17:02:20 -05:00
Mike Blumenkrantz 0371ed95a2 convert zoom to elm widgets 2015-01-15 17:01:17 -05:00
Mike Blumenkrantz 1a63585b60 e_comp_get() -> e_comp 2015-01-15 16:51:11 -05:00
28 changed files with 1337 additions and 885 deletions

3
.gitignore vendored
View File

@ -10,6 +10,7 @@ Makefile
Makefile.in
aclocal.m4
autom4te.cache/
compile
config.guess
config.h
config.h.in
@ -20,7 +21,6 @@ config.sub
configure
configure.ac.orig
depcomp
e-module-desksanity.edj
e_modules-desksanity.spec
install-sh
libtool
@ -28,7 +28,6 @@ ltmain.sh
*.m4
missing
mkinstalldirs
module.desktop
po/Makefile
po/Makefile.in
po/Makefile.in.in

View File

@ -1,9 +1,9 @@
ACLOCAL_AMFLAGS = -I m4
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \
config.sub configure depcomp install-sh ltmain.sh \
missing module.desktop config.rpath mkinstalldirs
AUTOMAKE_OPTIONS = subdir-objects
SUBDIRS = src
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \
config.sub configure compile depcomp install-sh ltmain.sh \
missing config.rpath mkinstalldirs
#if HAVE_PO
@ -18,13 +18,15 @@ EXTRA_DIST = module.desktop.in \
e_modules-desksanity.spec.in \
e-module-desksanity.edc \
epic-e-256.png \
win_shadow.png
win_shadow.png \
glow_bottom.png \
glow_top.png
e-module-desksanity.edj: e-module-desksanity.edc
$(EDJE_CC) -id $(top_srcdir) $< $@
include src/Makefile.mk
clean-local:
rm -rf *.edj module.desktop e_modules-desksanity.spec *~
rm rf e_modules-desksanity.spec *~
uninstall-local:
rm -rf $(DESTDIR)$(module_dir)/$(PACKAGE)

71
NEWS
View File

@ -0,0 +1,71 @@
Release 1.1.0
--------------------
Highlights:
* Convert to Elementary widgets
* Greatly improve PiP UX
* Tweaks to Zoom effect
* Superkey binding for managing window focus
Mike Blumenkrantz (44):
e_comp_get() -> e_comp
convert zoom to elm widgets
remove bad comp usage in pip
zsq
fix edje warnings
more elm conversions
bump e version req
make pip crop reset if user shift+clicks without moving
and null the clip pointer because this module is way too smart to crash
disallow pip manage action if no pips exist
update to latest api changes
more api updates
ignore/clean 'compile' file
maybe fix zoom animation geometries?
show clients before performing desk flip
fix zoom key actions
add scroller indicator for zoom effect
fix zoom focus rect sizing to be even on all sides
clip zoom client focus rect to clipper
make zoom focus rect more translucent when active
don't enable map for zoom client effect
make zoom effect more subtle when indicating which window is "active"
use color3 for setting OUTLINE color on zoom text
redo "active" signalling for zoom effect to be more easily themable
improve keyboard navigation for zoom effect
use bring_in for zoom keyboard navigation
disable maximize effect for x11 csd windows
force sizing of zoom effect tables before adding to layout
remove pip delete callback during pip free
make pip move/resize while clipped more accurate based on clip geometry
enable pip edit mode when creating a pip
add Super Ultimate Window Management binding under Desksanity actions
add multipress functionality for superkey
add handling for maintaining sticky windows with superkey
move to single makefile build
require E20+
Release 1.0.3
--------------------
Mike Blumenkrantz (1):
use correct int size for ds effect iterating
Release 1.0.2
--------------------
Mike Blumenkrantz (1):
reorder ds client iterator filter to catch override clients before ec->desk deref
Release 1.0.1
--------------------
Mike Blumenkrantz (3):
raise client zoom obj on mouse in
fix input regions on shaded clients after desk flip
fix multiscreen zoom and current desks zoom

77
action_route.xml Normal file
View File

@ -0,0 +1,77 @@
<protocol name="zwp_action_route">
<interface name="action_route" version="1">
<enum name="mode">
<description summary="types of state on the surface">
</description>
<entry name="focus_shared" value="1" summary="Activatable by any surface if its wl_client has focus">
</entry>
<entry name="focus_topmost" value="2" summary="Activatable by topmost surface with focus">
<description summary="Restricts activation to only the top-most client"/>
</entry>
<entry name="exclusive" value="3" summary="Activatable by one surface at any time">
<description summary="Allows activation for exactly one client at all times"/>
</entry>
</enum>
<enum name="modifiers">
<entry name="shift" value="1"></entry>
<entry name="control" value="2"></entry>
<entry name="alt" value="4"></entry>
<entry name="win" value="8"></entry>
<entry name="altgr" value="16"></entry>
</enum>
<request name="bind_action">
<description summary="Request a new grab for a key press">
</description>
<arg name="id" type="new_id" interface="action_route_bind"/>
<arg name="action" type="string"/>
</request>
<request name="grab_key">
<description summary="Request a new grab for a key press">
</description>
<arg name="id" type="new_id" interface="action_route_key_grab"/>
<arg name="surface" type="object" interface="wl_surface"/>
<arg name="key" type="string"/>
<arg name="mode" type="uint"/>
<arg name="modifiers" type="uint"/>
<arg name="action" type="string"/>
<arg name="params" type="string" allow-null="true"/>
</request>
</interface>
<interface name="action_route_bind" version="1">
<enum name="state">
<entry name="Rejected" value="0"></entry>
<entry name="Active" value="1"></entry>
<entry name="Queued" value="2"></entry>
</enum>
<event name="status">
<description summary="Status update on a bind request"></description>
<arg name="state" type="uint"/>
</event>
<request name="activate">
<description summary="Activate a bind"/>
<arg name="params" type="string" allow-null="true"/>
</request>
<request name="destroy" type="destructor">
<description summary="Destroy a requested bind">
</description>
</request>
<event name="end">
<description summary="The bind has completed execution"/>
</event>
</interface>
<interface name="action_route_key_grab" version="1">
<enum name="state">
<entry name="Rejected" value="0"></entry>
<entry name="Active" value="1"></entry>
<entry name="Queued" value="2"></entry>
</enum>
<event name="status">
<description summary="Status update on a grab request"></description>
<arg name="state" type="uint"/>
</event>
<request name="destroy" type="destructor">
<description summary="Destroy a requested grab">
</description>
</request>
</interface>
</protocol>

View File

@ -1,4 +1,4 @@
AC_INIT(desksanity, 1.0, zmike@enlightenment.org)
AC_INIT(desksanity, 1.1.0, zmike@enlightenment.org)
AC_CONFIG_MACRO_DIR([m4])
AC_PREREQ(2.52)
AC_CONFIG_SRCDIR(configure.ac)
@ -6,7 +6,7 @@ AC_CANONICAL_BUILD
AC_CANONICAL_HOST
AC_ISC_POSIX
AM_INIT_AUTOMAKE([1.8 dist-bzip2])
AM_INIT_AUTOMAKE([1.8 dist-xz])
AM_CONFIG_HEADER(config.h)
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
@ -30,7 +30,15 @@ AC_PROG_LIBTOOL
#])
#AC_SUBST(LTLIBINTL)
PKG_CHECK_MODULES([E], [efx enlightenment > 0.18.99])
PKG_CHECK_EXISTS([efl-wl], [build_runner="yes"], [build_runner="no"])
if test "x$build_runner" = "xyes" ; then
runner="efl-wl"
AC_DEFINE_UNQUOTED(HAVE_RUNNER, 1, "have runner deps")
fi
AM_CONDITIONAL([BUILD_RUNNER], [test "x${build_runner}" = "xyes"])
PKG_CHECK_MODULES([E], [enlightenment >= 0.21.0 $runner])
release=$(pkg-config --variable=release enlightenment)
MODULE_ARCH="$host_os-$host_cpu-$release"
AC_SUBST(MODULE_ARCH)
@ -39,24 +47,9 @@ AC_DEFINE_UNQUOTED(MODULE_ARCH, "$MODULE_ARCH", "Module architecture")
module_dir="$(pkg-config --variable=modules enlightenment)"
AC_SUBST(module_dir)
datadir="$module_dir/desksanity"
# Find edje_cc
AC_ARG_WITH(edje-cc,
AC_HELP_STRING([--with-edje-cc=PATH], [specify a specific path to edje_cc]),
[
v=$withval;
EDJE_CC=$v
],[
EDJE_CC=$(pkg-config --variable=prefix edje)/bin/edje_cc
]
)
AC_SUBST(EDJE_CC)
AC_MSG_CHECKING([Which edje_cc to use])
AC_MSG_RESULT(${EDJE_CC})
AC_OUTPUT([
Makefile
src/Makefile
module.desktop
e_modules-desksanity.spec
], [
])

38
e-gadget.xml Normal file
View File

@ -0,0 +1,38 @@
<protocol name="e_gadget">
<interface name="e_gadget" version="1">
<enum name="orient">
<entry name="none" value="0"/>
<entry name="horizontal" value="1"/>
<entry name="vertical" value="2"/>
</enum>
<enum name="gravity">
<entry name="none" value="0"/>
<entry name="left" value="1"/>
<entry name="right" value="2"/>
<entry name="top" value="3"/>
<entry name="bottom" value="4"/>
<entry name="center" value="5"/>
</enum>
<enum name="anchor" bitfield="true">
<entry name="none" value="0"/>
<entry name="left" value="1"/>
<entry name="right" value="2"/>
<entry name="top" value="4"/>
<entry name="bottom" value="8"/>
</enum>
<event name="gadget_anchor">
<arg name="anchor" type="uint" enum="anchor"/>
</event>
<event name="gadget_orient">
<arg name="orient" type="uint" enum="orient"/>
</event>
<event name="gadget_gravity">
<arg name="gravity" type="uint" enum="gravity"/>
</event>
<request name="open_uri">
<arg name="uri" type="string"/>
</request>
</interface>
</protocol>

View File

@ -1,504 +0,0 @@
collections {
group { name: "icon";
images.image: "epic-e-256.png" COMP;
parts {
part { name: "icon"; mouse_events: 0;
description { state: "default";
aspect_preference: BOTH;
image.normal: "epic-e-256.png";
}
}
}
}
group { name: "e/modules/desksanity/moveresize";
parts {
part { name: "outline"; type: TEXT; mouse_events: 0;
effect: OUTLINE;
scale: 1;
description { state: "default" 0.0;
rel1.to: "e.text";
rel1.offset: -1 -1;
rel2.to: "e.text";
color: 0 0 0 255;
color2: 0 0 0 255;
color3: 0 0 0 255;
text { font: "Sans"; size: 16;
text_source: "e.text";
min: 1 1;
ellipsis: -1;
}
}
}
part { name: "e.text"; type: TEXT; mouse_events: 0;
effect: GLOW;
scale: 1;
description { state: "default" 0.0;
color: 51 153 255 255;
color2: 51 153 255 24;
color3: 51 153 255 18;
text { font: "Sans"; size: 16;
min: 1 1;
ellipsis: -1;
}
}
}
}
}
group { name: "e/modules/desksanity/zoom/base"; program_source: "e";
parts {
rect { "drag_clip"; nomouse;
desc { hid; }
desc { "vis";
link.base: "e,state,dragging";
}
}
rect { "zoomt"; clip: "drag_clip"; nomouse;
desc {
min: 0 4;
max: -1 4;
rel2.relative: 1 0;
color: 51 153 255 0;
hid;
}
desc { "enable"; inherit: "default";
color: 51 153 255 200;
vis;
}
desc { "anim"; inherit: "enable";
rel1.relative: 0.5 0.5;
rel2.relative: 0.5 0.5;
}
}
rect { "zooml"; clip: "drag_clip"; nomouse;
desc {
min: 4 0;
max: 4 -1;
rel2.relative: 0 1;
color: 51 153 255 0;
hid;
}
desc { "enable"; inherit: "default";
color: 51 153 255 200;
vis;
}
desc { "anim"; inherit: "enable";
rel1.relative: 0.5 0.5;
rel2.relative: 0.5 0.5;
}
}
rect { "zoomr"; clip: "drag_clip"; nomouse;
desc {
min: 4 0;
max: 4 -1;
rel1.relative: 1 0;
color: 51 153 255 0;
hid;
}
desc { "enable"; inherit: "default";
color: 51 153 255 200;
vis;
}
desc { "anim"; inherit: "enable";
rel1.relative: 0.5 0.5;
rel2.relative: 0.5 0.5;
}
}
rect { "zoomb"; clip: "drag_clip"; nomouse;
desc {
min: 0 4;
max: -1 4;;
rel1.relative: 0 1;
color: 51 153 255 0;
hid;
}
desc { "enable"; inherit: "default";
color: 51 153 255 200;
vis;
}
desc { "anim"; inherit: "enable";
rel1.relative: 0.5 0.5;
rel2.relative: 0.5 0.5;
}
}
program { signal: "e,state,current";
after: "drag_start";
}
program { "drag_start"; filter: "drag_clip" "vis";
signal: "mouse,in"; source: "events";
action: STATE_SET "enable";
transition: LINEAR 0.1;
targets: "zoomt" "zooml" "zoomr" "zoomb";
after: "drag_anim";
}
program { filter: "drag_clip" "vis";
signal: "mouse,out"; source: "events";
action: STATE_SET "default";
transition: ACCEL 0.1;
targets: "zoomt" "zooml" "zoomr" "zoomb";
}
program { "drag_anim";
action: STATE_SET "anim";
transition: ACCEL 0.8;
targets: "zoomt" "zooml" "zoomr" "zoomb";
after: "drag_anim2";
}
program { "drag_anim2";
action: STATE_SET "default";
targets: "zoomt" "zooml" "zoomr" "zoomb";
after: "drag_anim";
}
swallow { "e.swallow.background"; clip: "clip";
}
rect { "fader";
desc {
color: 0 0 0 0;
link.base: "e,state,dragging";
link.transition: LINEAR 0.3;
link.base: "e,state,inactive";
link.transition: LINEAR 0.3;
link.after: "fade_post";
}
desc { "fade";
color: 0 0 0 192;
link.base: "e,state,active";
link.transition: LINEAR 0.3;
}
program { "fade_post";
action: SIGNAL_EMIT "e,action,done" "e";
}
}
rect { "clip";
desc { hid; color: 255 255 255 0;
link.base: "e,state,dragging";
link.transition: LINEAR 0.3;
link.base: "e,state,inactive";
link.transition: LINEAR 0.3;
}
desc { "active";
link.base: "e,state,active";
link.transition: LINEAR 0.3;
}
}
swallow { "e.swallow.layout"; clip: "clip"; }
program { signal: "e,state,inactive";
action: SIGNAL_EMIT "e,state,hiding" "e";
}
rect { "events"; repeat;
desc { color: 0 0 0 0; }
}
}
}
group { name: "e/modules/desksanity/zoom/scrollframe";
parts {
rect { "clipper"; nomouse;
desc {
rel1.to: "e.swallow.content";
rel2.to: "e.swallow.content";
}
}
swallow { "e.swallow.content";
clip: "clipper";
}
}
}
group { name: "e/modules/desksanity/zoom/client"; nomouse;
images.image: "win_shadow.png" COMP;
script {
public message(Msg_Type:type, id, ...) {
if (type == MSG_INT_SET) {
/* client diff geom[4] */
new x, y, w, h;
x = getarg(2);
y = getarg(3);
w = getarg(4);
h = getarg(5);
custom_state(PART:"spacer", "default", 0.0);
set_state_val(PART:"spacer", STATE_REL1_OFFSET, x, y);
set_state_val(PART:"spacer", STATE_REL2_OFFSET, w, h);
set_state(PART:"spacer", "custom", 0.0);
}
}
}
parts {
spacer { "spacer";
program { signal: "e,action,show"; source: "e";
action: STATE_SET "default" 0.0;
transition: LINEAR 0.3;
target: "spacer";
//after: "idle";
}
program { signal: "e,action,hide"; source: "e";
action: STATE_SET "custom" 0.0;
transition: LINEAR 0.3;
target: "spacer";
}
}
part { "shadow"; clip: "clip";
desc {
image.normal: "win_shadow.png";
image.border: 14 14 14 14;
image.middle: 0;
rel1.to: "e.swallow.client";
rel1.offset: -7 -3;
rel2.to: "e.swallow.client";
rel2.offset: 6 11;
fill.smooth: 0;
}
}
rect { "outline";
desc {
color: 51 153 255 0;
rel1.to: "e.swallow.client";
rel1.offset: -2 -2;
rel2.to: "e.swallow.client";
rel2.offset: 2 2;
visible: 0;
link.base: "e,state,unfocused" "e";
link.transition: LINEAR 0.2;
}
desc { "active"; inherit: "default";
color: 51 153 255 170;
visible: 1;
link.base: "e,state,focused" "e";
link.transition: LINEAR 0.2;
}
}
rect { "bg";
desc {
color: 0 0 0 255;
rel1.to: "e.swallow.client";
rel2.to: "e.swallow.client";
}
}
swallow { "e.swallow.client"; clip: "clip";
desc {
rel1.to: "spacer";
rel2.to: "spacer";
rel1.offset: 10 10;
rel2.offset: -10 -10;
map.on: 1;
link.base: "mouse,out" "events";
link.transition: LINEAR 0.2;
//link.after: "idle";
}
desc { "active";
rel1.to: "spacer";
rel2.to: "spacer";
rel2.relative: 1.3 1.3;
rel2.offset: -1 -1;
link.base: "mouse,in" "events";
link.transition: LINEAR 0.2;
}
desc { "idle1"; inherit: "default";
map.on: 1;
map.rotation.z: -5;
}
desc { "idle2"; inherit: "idle1";
map.rotation.z: 5;
}
desc { "idle3"; inherit: "idle1";
map.rotation.z: 5;
map.rotation.x: -70;
}
desc { "idle4"; inherit: "idle1";
map.rotation.z: 0;
map.rotation.x: -360;
map.rotation.y: 360;
}
program { "idle";
in: 2.0 10.0;
action: STATE_SET "idle1";
transition: SINUSOIDAL 6.0;
target: "e.swallow.client";
sequence {
action: STATE_SET "idle2";
name: "idle2";
transition: SINUSOIDAL 6.0;
target: "e.swallow.client";
in: 2.0 10.0;
action: STATE_SET "idle3";
name: "idle3";
transition: ACCEL 6.0;
target: "e.swallow.client";
in: 2.0 10.0;
action: STATE_SET "idle4";
name: "idle4";
transition: SINUSOIDAL 6.0;
target: "e.swallow.client";
in: 2.0 10.0;
after: "idle";
}
}
}
rect { "clip";
desc {
rel1.offset: -9999 -9999;
rel2.offset: 9999 9999;
color: 255 255 255 200;
link.base: "mouse,out" "events";
link.transition: LINEAR 0.2;
}
desc { "active"; inherit: "default";
color: 255 255 255 255;
link.base: "mouse,in" "events";
link.transition: LINEAR 0.2;
}
}
proxy { "clone";
desc {
source: "e.swallow.client";
rel1.to: "e.swallow.client";
rel2.to: "e.swallow.client";
hid;
color: 255 255 255 0;
}
desc { "urgent1"; inherit: "default";
vis;
color: 255 255 255 255;
}
desc { "urgent2"; inherit: "default";
vis;
rel1.relative: -0.5 -0.5;
rel2.relative: 1.5 1.5;
color: 255 255 255 0;
}
program { name: "urgent";
signal: "e,state,urgent"; source: "e";
action: ACTION_STOP;
target: "go_big";
target: "go_big2";
after: "go_big";
}
program { name: "go_big";
action: STATE_SET "urgent1" 0.0;
target: "clone";
after: "go_big2";
}
program { name: "go_big2";
action: STATE_SET "urgent2" 0.0;
transition: LINEAR 0.5;
target: "clone";
after: "go_big";
}
program { name: "not_urgent";
signal: "e,state,not_urgent"; source: "e";
action: ACTION_STOP;
target: "go_big";
target: "go_big2";
after: "go_hid";
}
program { name: "go_hid";
action: STATE_SET "default" 0.0;
transition: LINEAR 0.5;
target: "clone";
}
}
text { "e.text.title"; clip: "clip"; effect: OUTLINE;
desc {
fixed: 1 1;
align: 0.0 0.0;
rel1.to_x: "e.swallow.icon";
rel1.to_y: "e.swallow.client";
rel1.relative: 1.0 1.0;
rel1.offset: 0 10;
rel2.to: "e.swallow.client";
color: 255 255 255 255;
color2: 0 0 0 255;
text {
font: "Sans:style=Bold"; size: 12;
}
}
}
swallow { "e.swallow.icon"; clip: "clip";
desc {
fixed: 1 1;
min: 16 16;
align: 0.0 0.0;
rel1.to_x: "e.swallow.client";
rel1.to_y: "e.text.title";
rel1.offset: 0 -6;
rel2.to: "e.swallow.client";
rel2.relative: 0.0 1.0;
}
}
rect { "events"; mouse; repeat;
desc { color: 0 0 0 0; };
program { signal: "mouse,clicked,1"; source: "events";
action: SIGNAL_EMIT "e,action,activate" "e";
}
program { signal: "mouse,in"; source: "events";
action: SIGNAL_EMIT "e,state,active" "e";
sequence {
action: ACTION_STOP;
targets: "idle" "idle2" "idle3" "idle4";
}
}
program { signal: "mouse,out"; source: "events";
action: SIGNAL_EMIT "e,state,inactive" "e";
}
}
}
}
group { "e/modules/desksanity/zoom/client/drag";
images.image: "win_shadow.png" COMP;
script {
public message(Msg_Type:type, id, ...) {
if (type == MSG_INT_SET) {
/* client diff geom[4] */
new x, y, w, h;
x = getarg(2);
y = getarg(3);
w = getarg(4);
h = getarg(5);
custom_state(PART:"e.swallow.client", "default", 0.0);
set_state_val(PART:"e.swallow.client", STATE_REL1_OFFSET, x, y);
set_state_val(PART:"e.swallow.client", STATE_REL2_OFFSET, w, h);
}
}
}
parts {
rect { "clip";
desc {}
desc { "hid"; hid;
color: 255 255 255 0;
link.base: "e,drag,release" "e";
link.transition: LINEAR 0.1;
}
}
image { "shadow"; clip: "clip";
desc {
image.normal: "win_shadow.png";
image.border: 14 14 14 14;
image.middle: 0;
rel1.to: "e.swallow.client";
rel1.offset: -7 -3;
rel2.to: "e.swallow.client";
rel2.offset: 6 11;
fill.smooth: 0;
}
}
swallow { "e.swallow.client"; }
rect { "over"; clip: "clip";
desc {
rel1.to: "e.swallow.client";
rel2.to: "e.swallow.client";
color: 255 255 255 90;
}
}
program { signal: "e,drag,release"; source: "e";
action: STATE_SET "custom";
target: "e.swallow.client";
transition: LINEAR 0.1;
sequence {
action: SIGNAL_EMIT "e,action,done" "e";
}
}
}
}
}

BIN
e-module-desksanity.edj Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

182
loader/start.c Normal file
View File

@ -0,0 +1,182 @@
#include <Elementary.h>
#include <e_gadget_types.h>
static E_Gadget_Site_Orient gorient;
static E_Gadget_Site_Anchor ganchor;
static char *menu_action;
static void
do_orient(Evas_Object *ly, E_Gadget_Site_Orient orient, E_Gadget_Site_Anchor anchor)
{
char buf[4096];
const char *s = "float";
if (anchor & E_GADGET_SITE_ANCHOR_LEFT)
{
if (anchor & E_GADGET_SITE_ANCHOR_TOP)
{
switch (orient)
{
case E_GADGET_SITE_ORIENT_HORIZONTAL:
s = "top_left";
break;
case E_GADGET_SITE_ORIENT_VERTICAL:
s = "left_top";
break;
case E_GADGET_SITE_ORIENT_NONE:
s = "left_top";
break;
}
}
else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM)
{
switch (orient)
{
case E_GADGET_SITE_ORIENT_HORIZONTAL:
s = "bottom_left";
break;
case E_GADGET_SITE_ORIENT_VERTICAL:
s = "left_bottom";
break;
case E_GADGET_SITE_ORIENT_NONE:
s = "left_bottom";
break;
}
}
else
s = "left";
}
else if (anchor & E_GADGET_SITE_ANCHOR_RIGHT)
{
if (anchor & E_GADGET_SITE_ANCHOR_TOP)
{
switch (orient)
{
case E_GADGET_SITE_ORIENT_HORIZONTAL:
s = "top_right";
break;
case E_GADGET_SITE_ORIENT_VERTICAL:
s = "right_top";
break;
case E_GADGET_SITE_ORIENT_NONE:
s = "right_top";
break;
}
}
else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM)
{
switch (orient)
{
case E_GADGET_SITE_ORIENT_HORIZONTAL:
s = "bottom_right";
break;
case E_GADGET_SITE_ORIENT_VERTICAL:
s = "right_bottom";
break;
case E_GADGET_SITE_ORIENT_NONE:
s = "right_bottom";
break;
}
}
else
s = "right";
}
else if (anchor & E_GADGET_SITE_ANCHOR_TOP)
s = "top";
else if (anchor & E_GADGET_SITE_ANCHOR_BOTTOM)
s = "bottom";
else
{
switch (orient)
{
case E_GADGET_SITE_ORIENT_HORIZONTAL:
s = "horizontal";
break;
case E_GADGET_SITE_ORIENT_VERTICAL:
s = "vertical";
break;
default: break;
}
}
snprintf(buf, sizeof(buf), "e,state,orientation,%s", s);
elm_layout_signal_emit(ly, buf, "e");
}
static void
_menu_cb_post(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
{
if (eina_streq(event_info, menu_action))
elm_layout_signal_emit(data, "e,state,unfocused", "e");
}
static void
_button_cb_mouse_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_Down *ev = event_info;
if (ev->button != 1) return;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
if (!menu_action) return;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
evas_object_smart_callback_call(elm_win_get(obj), menu_action, "main");
elm_layout_signal_emit(obj, "e,state,focused", "e");
}
static void
anchor_change(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
{
ganchor = (uintptr_t)event_info;
do_orient(data, gorient, ganchor);
}
static void
orient_change(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
{
gorient = (uintptr_t)event_info;
do_orient(data, gorient, ganchor);
}
static void
action_deleted(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
if (eina_streq(menu_action, event_info))
{
free(menu_action);
menu_action = NULL;
}
}
static void
action_return(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
fprintf(stderr, "AR RETURN: %s\n", (char*)event_info);
menu_action = eina_strdup(event_info);
}
int
main(int argc, char *argv[])
{
Evas_Object *win, *ly;
elm_init(argc, (char**)argv);
win = elm_win_add(NULL, "start", ELM_WIN_BASIC);
elm_win_autodel_set(win, 1);
elm_win_alpha_set(win, 1);
ly = elm_layout_add(win);
evas_object_size_hint_min_set(win, 100, 100);
evas_object_size_hint_aspect_set(win, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
elm_layout_file_set(ly,
elm_theme_group_path_find(NULL, "e/gadget/start/main"), "e/gadget/start/main");
elm_win_resize_object_add(win, ly);
evas_object_show(ly);
evas_object_smart_callback_add(win, "gadget_site_anchor", anchor_change, ly);
evas_object_smart_callback_add(win, "gadget_site_orient", orient_change, ly);
evas_object_smart_callback_add(win, "gadget_action", action_return, NULL);
evas_object_smart_callback_add(win, "gadget_action_end", _menu_cb_post, ly);
evas_object_smart_callback_add(win, "gadget_action_deleted", action_deleted, NULL);
evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_DOWN, _button_cb_mouse_down, NULL);
evas_object_smart_callback_call(win, "gadget_action_request", "menu_show_object");
evas_object_show(win);
ecore_main_loop_begin();
return 0;
}

5
loader/start.desktop.in Normal file
View File

@ -0,0 +1,5 @@
[Desktop Entry]
Type=Application
Name=Start
Exec=@GADGET_DIR@/start/e_gadget_start
Icon=e/gadget/start/main

121
loader/test.c Normal file
View File

@ -0,0 +1,121 @@
#include <Elementary.h>
static Evas_Object *popup;
static Evas_Object *child;
static void
popup_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
popup = NULL;
}
static void
child_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
child = NULL;
}
static void
popup_unfocus(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
evas_object_del(obj);
}
static void
mouse_button(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info)
{
Evas_Object *ic;
Evas_Event_Mouse_Down *ev = event_info;
char buf[PATH_MAX];
int w, h;
Evas_Object *win;
Elm_Win_Type type = ELM_WIN_POPUP_MENU;
if ((ev->button != 1) && (ev->button != 3)) return;
if (ev->button == 3)
{
type = ELM_WIN_BASIC;
if (child)
{
evas_object_del(child);
return;
}
}
else
{
if (popup)
{
evas_object_del(popup);
return;
}
}
win = elm_win_add(elm_win_get(obj), "win", type);
elm_win_alpha_set(win, 1);
if (ev->button == 3)
{
child = win;
evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, child_del, NULL);
}
else
{
popup = win;
evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, popup_del, NULL);
}
if (ev->button == 3)
evas_object_event_callback_add(win, EVAS_CALLBACK_FOCUS_OUT, popup_unfocus, NULL);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/bubble.png", elm_app_data_dir_get());
elm_image_file_set(ic, buf, NULL);
elm_image_object_size_get(ic, &w, &h);
evas_object_size_hint_aspect_set(win, EVAS_ASPECT_CONTROL_BOTH, w, h);
if (ev->button == 1)
{
elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
elm_image_no_scale_set(ic, EINA_TRUE);
}
evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_fill_set(ic, 0.5, 0.5);
evas_object_size_hint_min_set(ic, 100, 100);
elm_win_resize_object_add(win, ic);
evas_object_show(ic);
evas_object_show(win);
}
int
main(int argc, char *argv[])
{
Evas_Object *win, *ic;
char buf[PATH_MAX];
int w, h;
elm_init(argc, (char**)argv);
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_app_info_set(main, "elementary", "images/logo.png");
win = elm_win_add(NULL, "icon-transparent", ELM_WIN_BASIC);
elm_win_title_set(win, "Icon Transparent");
elm_win_autodel_set(win, EINA_TRUE);
elm_win_alpha_set(win, EINA_TRUE);
ic = elm_icon_add(win);
elm_object_tooltip_text_set(ic, "this is some test text which is probably going to be a lot longer than the overall icon size haHAA");
elm_object_tooltip_window_mode_set(ic, 1);
snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());
elm_image_file_set(ic, buf, NULL);
elm_image_object_size_get(ic, &w, &h);
evas_object_size_hint_aspect_set(win, EVAS_ASPECT_CONTROL_BOTH, w, h);
if (argc > 1)
{
elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
elm_image_no_scale_set(ic, EINA_TRUE);
}
evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_fill_set(ic, 0.5, 0.5);
evas_object_size_hint_min_set(ic, 100, 100);
elm_win_resize_object_add(win, ic);
evas_object_show(ic);
evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_DOWN, mouse_button, NULL);
evas_object_show(win);
ecore_main_loop_begin();
return 0;
}

4
loader/test.desktop.in Normal file
View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Test
Exec=@GADGET_DIR@/test/e_gadget_test

182
meson.build Normal file
View File

@ -0,0 +1,182 @@
project('desksanity', 'c',
version: '1.1.99',
license: 'BSD 2 clause',
default_options: [ 'c_std=gnu99', 'warning_level=2' ],
meson_version: '>= 0.40.0')
add_global_arguments('-DHAVE_CONFIG_H=1', language: 'c')
dir_prefix = get_option('prefix')
dir_bin = join_paths(dir_prefix, get_option('bindir'))
dir_sysconf = get_option('sysconfdir')
dir_data = join_paths(dir_prefix, get_option('datadir'))
dir_include = join_paths(dir_prefix, get_option('includedir'))
dir_include_e = join_paths(dir_include, meson.project_name())
dir_lib = join_paths(dir_prefix, get_option('libdir'))
pkgconfig = import('pkgconfig')
cc = meson.get_compiler('c')
# disable for release builds
dev_cflags = []
dev_cflags_try = [
'-Wall',
'-W',
'-Wpointer-arith',
'-Wshadow',
'-Wno-missing-field-initializers',
'-Wfloat-equal',
'-Wuninitialized',
'-Wundef',
'-Wcast-align',
'-Wformat=2',
'-Wno-format-y2k',
]
foreach cf: dev_cflags_try
if cc.has_argument(cf) == true
dev_cflags += cf
endif
endforeach
add_global_arguments(dev_cflags, language: 'c')
dep_e = dependency('enlightenment')
release = dep_e.get_pkgconfig_variable('release')
host_os = host_machine.system()
if host_os == 'linux'
if cc.has_header_symbol('features.h', '__UCLIBC__')
host_os = 'linux-uclibc'
elif cc.has_header_symbol('features.h', '__dietlibc__')
host_os = 'linux-dietlibc'
else
host_os = 'linux-gnu'
endif
endif
module_arch = '@0@-@1@-@2@'.format(host_os, host_machine.cpu_family(), release)
config_h = configuration_data()
config_h.set('_GNU_SOURCE', '1')
config_h.set('_ALL_SOURCE', '1')
config_h.set('_POSIX_PTHREAD_SEMANTICS', '1')
config_h.set('_TANDEM_SOURCE', '1')
config_h.set('__EXTENSIONS__', '1')
config_h.set_quoted('MODULE_ARCH', module_arch)
config_h.set_quoted('PACKAGE', meson.project_name())
config_h.set_quoted('PACKAGE_VERSION', meson.project_version())
config_h.set_quoted('VERSION', meson.project_version())
config_h.set_quoted('PACKAGE_NAME', meson.project_name())
config_h.set_quoted('BINDIR', dir_bin)
config_h.set_quoted('DATADIR', dir_data)
if cc.has_function('setenv') == true
config_h.set('HAVE_SETENV', '1')
endif
if cc.has_function('unsetenv') == true
config_h.set('HAVE_UNSETENV', '1')
endif
if cc.has_function('clearenv') == true
config_h.set('HAVE_CLEARENV', '1')
endif
if cc.has_header('features.h') == true
config_h.set('HAVE_FEATURES_H', '1')
endif
if cc.has_header('sys/ptrace.h') == true
config_h.set('HAVE_SYS_PTRACE_H', '1')
endif
if cc.has_header('arpa/inet.h') == true
config_h.set('HAVE_ARPA_INET_H', '1')
endif
if cc.has_header('netinet/in.h') == true
config_h.set('HAVE_NETINET_IN_H', '1')
endif
if cc.has_header('execinfo.h') == true
config_h.set('HAVE_EXECINFO_H', '1')
elif cc.has_function('backtrace_symbols_fd', dependencies: 'execinfo') == false
execinfo_dep = dependency('execinfo', required: false)
endif
if cc.has_header('fnmatch.h') == false
error('fnmatch.h not found')
endif
if cc.has_function('fnmatch') == false
dep_fnmatch = dependency('fnmatch', required: true)
endif
add_global_arguments('-DPACKAGE_BIN_DIR="@0@"'.format(dir_bin), language: 'c')
add_global_arguments('-DPACKAGE_LIB_DIR="@0@"'.format(dir_lib), language: 'c')
add_global_arguments('-DPACKAGE_DATA_DIR="@0@"'.format(join_paths(dir_data, meson.project_name())), language: 'c')
add_global_arguments('-DPACKAGE_SYSCONF_DIR="@0@"'.format(dir_sysconf), language: 'c')
dep_efl_wl = dependency('efl-wl', required: false)
dir_module_e = join_paths([dep_e.get_pkgconfig_variable('modules'), 'desksanity'])
edje_cc = find_program('edje_cc')
install_data(['e-module-desksanity.edj', 'module.desktop'],
install_dir: dir_module_e,
install_mode: 'rw-rw-r--')
build_files = [
'src/e_mod_main.h',
'src/e_mod_main.c',
'src/ds_config.c',
'src/maximize.c',
'src/moveresize.c',
'src/pip.c',
'src/zoom.c',
'src/magnify.c',
'src/desksanity.c'
]
if dep_efl_wl.found() == true and dep_e.get_pkgconfig_variable('wayland') == 'true'
config_h.set('HAVE_RUNNER', '1')
dir_gadgets = join_paths([dir_lib, 'enlightenment/gadgets', module_arch])
executable('e_gadget_start',
'loader/start.c',
c_args: '-fPIE',
link_args: '-fPIE',
dependencies: [dependency('elementary'), dependency('enlightenment')],
install_dir: join_paths([dir_gadgets, 'start']),
install: true)
executable('e_gadget_test',
'loader/test.c',
c_args: '-fPIE',
link_args: '-fPIE',
dependencies: dependency('elementary'),
install_dir: join_paths([dir_gadgets, 'test']),
install: true)
config_h.set_quoted('GADGET_DIR', dir_gadgets)
desktop_data = configuration_data()
desktop_data.set('GADGET_DIR', dir_gadgets)
configure_file(input: 'loader/test.desktop.in',
output: 'test.desktop',
install: true,
install_dir: join_paths([dir_gadgets, 'test']),
configuration: desktop_data)
configure_file(input: 'loader/start.desktop.in',
output: 'start.desktop',
install: true,
install_dir: join_paths([dir_gadgets, 'start']),
configuration: desktop_data)
endif
configure_file(output: 'config.h',
install: false,
configuration: config_h)
shared_module('desksanity', build_files,
include_directories: include_directories(['src']),
name_prefix: '',
dependencies: [dep_e, dep_efl_wl],
install_dir: join_paths([dir_module_e, module_arch]),
install: true)
meson.add_install_script('meson_modules.sh', join_paths([dir_module_e, module_arch, 'desksanity.so']))

6
meson_modules.sh Normal file
View File

@ -0,0 +1,6 @@
#!/bin/sh
for x in "$@" ; do
dir="$(dirname $x)"
mv "$DESTDIR"/"$x" "$DESTDIR"/"$dir"/module.so
done

View File

@ -1,27 +0,0 @@
MAINTAINERCLEANFILES = Makefile.in
AM_CPPFLAGS = -I. \
-I$(top_srcdir) \
-I$(includedir) \
-DLOCALEDIR=\"$(datadir)/locale\" \
-DPACKAGE_DATA_DIR=\"$(module_dir)/$(PACKAGE)\" \
@E_CFLAGS@
pkgdir = $(module_dir)/$(PACKAGE)/$(MODULE_ARCH)
pkg_LTLIBRARIES = module.la
module_la_SOURCES = e_mod_main.h \
e_mod_main.c \
ds_config.c \
maximize.c \
moveresize.c \
pip.c \
zoom.c \
magnify.c \
desksanity.c
module_la_LIBADD = @E_LIBS@
module_la_LDFLAGS = -module -avoid-version
module_la_DEPENDENCIES = $(top_builddir)/config.h
clean-local:
rm -rf *~

24
src/Makefile.mk Normal file
View File

@ -0,0 +1,24 @@
AM_CPPFLAGS = \
-Isrc \
-I$(top_srcdir) \
-I$(includedir) \
-DLOCALEDIR=\"$(datadir)/locale\" \
-DPACKAGE_DATA_DIR=\"$(module_dir)/$(PACKAGE)\" \
@E_CFLAGS@
pkgdir = $(module_dir)/$(PACKAGE)/$(MODULE_ARCH)
pkg_LTLIBRARIES = module.la
module_la_SOURCES = \
src/e_mod_main.h \
src/e_mod_main.c \
src/ds_config.c \
src/maximize.c \
src/moveresize.c \
src/pip.c \
src/zoom.c \
src/magnify.c \
src/desksanity.c
module_la_LIBADD = @E_LIBS@
module_la_LDFLAGS = -module -avoid-version
module_la_DEPENDENCIES = $(top_builddir)/config.h

View File

@ -8,7 +8,7 @@ static Evas_Object *dm_hide = NULL;
static DS_Type cur_type = DS_PAN;
static void
_ds_end(void *data EINA_UNUSED, Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
_ds_end(void *data EINA_UNUSED, E_Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
{
/* hide/delete previous desk's mirror */
evas_object_hide(dm_hide);
@ -19,7 +19,7 @@ _ds_end(void *data EINA_UNUSED, Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj
if (desk_show)
{
e_desk_flip_end(desk_show);
e_comp_shape_queue_block(e_comp_get(desk_show), 0);
e_comp_shape_queue_block(0);
}
/* hide/delete current desk's mirror */
@ -48,12 +48,12 @@ dm_add(E_Desk *desk)
}
static void
_ds_blink2(void *data EINA_UNUSED, Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj)
_ds_blink2(void *data EINA_UNUSED, E_Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj)
{
E_FREE_FUNC(dm_hide, evas_object_del);
evas_object_show(dm_show);
efx_resize(obj, EFX_EFFECT_SPEED_DECELERATE,
EFX_POINT(desk_show->zone->x, desk_show->zone->y),
e_efx_resize(obj, E_EFX_EFFECT_SPEED_DECELERATE,
E_EFX_POINT(desk_show->zone->x, desk_show->zone->y),
desk_show->zone->w, desk_show->zone->h,
0.45, _ds_end, NULL);
}
@ -63,16 +63,16 @@ _ds_show(E_Desk *desk, int dx, int dy)
{
E_Client *ec;
DS_Type use_type;
DS_Type *disabled_types = (DS_Type*)&ds_config->types;
Eina_Bool *disabled_types = (Eina_Bool*)&ds_config->types;
/* free existing mirror */
E_FREE_FUNC(dm_show, evas_object_del);
/* iterate all clients */
E_CLIENT_FOREACH(desk->zone->comp, ec)
E_CLIENT_FOREACH(ec)
{
/* skip clients from other screens, iconic clients, and ignorable clients */
if ((ec->desk->zone != desk->zone) || (ec->iconic) || e_client_util_ignored_get(ec)) continue;
if (e_client_util_ignored_get(ec) || (ec->desk->zone != desk->zone) || (ec->iconic)) continue;
/* always keep user-moving clients visible */
if (ec->moving)
{
@ -85,7 +85,7 @@ _ds_show(E_Desk *desk, int dx, int dy)
e_comp_object_effect_unclip(ec->frame);
e_comp_object_effect_set(ec->frame, NULL);
/* comp unignore the client */
e_client_comp_hidden_set(ec, EINA_FALSE);
e_client_comp_hidden_set(ec, ec->shaded);
ec->hidden = 0;
evas_object_show(ec->frame);
}
@ -96,7 +96,7 @@ _ds_show(E_Desk *desk, int dx, int dy)
}
desk_show = desk;
e_comp_shape_queue_block(e_comp_get(desk), 1);
e_comp_shape_queue_block(1);
/* guarantee that the user gets to see each flip
* at least once
*/
@ -153,30 +153,30 @@ _ds_show(E_Desk *desk, int dx, int dy)
}
dm_show = dm_add(desk);
evas_object_move(dm_show, x, y);
efx_move(dm_hide, EFX_EFFECT_SPEED_DECELERATE, EFX_POINT(hx, hy), 0.2, NULL, NULL);
efx_move(dm_show, EFX_EFFECT_SPEED_DECELERATE, EFX_POINT(desk->zone->x, desk->zone->y), 0.2, _ds_end, NULL);
e_efx_move(dm_hide, E_EFX_EFFECT_SPEED_DECELERATE, E_EFX_POINT(hx, hy), 0.2, NULL, NULL);
e_efx_move(dm_show, E_EFX_EFFECT_SPEED_DECELERATE, E_EFX_POINT(desk->zone->x, desk->zone->y), 0.2, _ds_end, NULL);
break;
case DS_FADE_OUT:
efx_fade(dm_hide, EFX_EFFECT_SPEED_LINEAR, EFX_COLOR(0, 0, 0), 0, 0.25, _ds_end, NULL);
e_efx_fade(dm_hide, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_COLOR(0, 0, 0), 0, 0.25, _ds_end, NULL);
break;
case DS_FADE_IN:
E_FREE_FUNC(dm_hide, evas_object_del);
dm_show = dm_add(desk);
efx_fade(dm_show, EFX_EFFECT_SPEED_LINEAR, EFX_COLOR(0, 0, 0), 0, 0.0, NULL, NULL);
efx_fade(dm_show, EFX_EFFECT_SPEED_LINEAR, EFX_COLOR(255, 255, 255), 255, 0.25, _ds_end, NULL);
e_efx_fade(dm_show, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_COLOR(0, 0, 0), 0, 0.0, NULL, NULL);
e_efx_fade(dm_show, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_COLOR(255, 255, 255), 255, 0.25, _ds_end, NULL);
break;
case DS_BATMAN:
evas_object_raise(dm_hide);
efx_spin_start(dm_hide, 1080.0, NULL);
efx_zoom(dm_hide, EFX_EFFECT_SPEED_LINEAR, 1.0, 0.00001, NULL, 0.4, _ds_end, NULL);
e_efx_spin_start(dm_hide, 1080.0, NULL);
e_efx_zoom(dm_hide, E_EFX_EFFECT_SPEED_LINEAR, 1.0, 0.00001, NULL, 0.4, _ds_end, NULL);
break;
case DS_ZOOM_IN:
dm_show = dm_add(desk);
efx_zoom(dm_show, EFX_EFFECT_SPEED_LINEAR, 0.000001, 1.0, NULL, 0.4, _ds_end, NULL);
e_efx_zoom(dm_show, E_EFX_EFFECT_SPEED_LINEAR, 0.000001, 1.0, NULL, 0.4, _ds_end, NULL);
break;
case DS_ZOOM_OUT:
evas_object_raise(dm_hide);
efx_zoom(dm_hide, EFX_EFFECT_SPEED_LINEAR, 1.0, 0.0000001, NULL, 0.4, _ds_end, NULL);
e_efx_zoom(dm_hide, E_EFX_EFFECT_SPEED_LINEAR, 1.0, 0.0000001, NULL, 0.4, _ds_end, NULL);
break;
case DS_GROW:
x = hx = desk->zone->x;
@ -192,24 +192,24 @@ _ds_show(E_Desk *desk, int dx, int dy)
else if (!dy)
h = desk->zone->h;
dm_show = dm_add(desk);
o = evas_object_rectangle_add(e_comp_get(desk)->evas);
o = evas_object_rectangle_add(e_comp->evas);
evas_object_geometry_set(o, x, y, w, h);
evas_object_clip_set(dm_show, o);
evas_object_show(o);
e_comp_object_util_del_list_append(dm_show, o);
efx_resize(o, EFX_EFFECT_SPEED_LINEAR, EFX_POINT(hx, hy), desk->zone->w, desk->zone->h, 0.4, _ds_end, NULL);
e_efx_resize(o, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(hx, hy), desk->zone->w, desk->zone->h, 0.4, _ds_end, NULL);
break;
case DS_ROTATE_OUT:
efx_move_circle(dm_hide, EFX_EFFECT_SPEED_LINEAR, EFX_POINT(desk->zone->x + (desk->zone->w / 2), desk->zone->y + (desk->zone->h / 2)),
e_efx_move_circle(dm_hide, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(desk->zone->x + (desk->zone->w / 2), desk->zone->y + (desk->zone->h / 2)),
720, 0.4, NULL, NULL);
efx_resize(dm_hide, EFX_EFFECT_SPEED_LINEAR, NULL, 1, 1, 0.4, _ds_end, NULL);
e_efx_resize(dm_hide, E_EFX_EFFECT_SPEED_LINEAR, NULL, 1, 1, 0.4, _ds_end, NULL);
break;
case DS_ROTATE_IN:
dm_show = dm_add(desk);
evas_object_resize(dm_show, 1, 1);
efx_move_circle(dm_show, EFX_EFFECT_SPEED_LINEAR, EFX_POINT(desk->zone->x + (desk->zone->w / 2), desk->zone->y + (desk->zone->h / 2)),
e_efx_move_circle(dm_show, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_POINT(desk->zone->x + (desk->zone->w / 2), desk->zone->y + (desk->zone->h / 2)),
720, 0.4, NULL, NULL);
efx_resize(dm_show, EFX_EFFECT_SPEED_LINEAR, NULL, desk->zone->w, desk->zone->h, 0.4, _ds_end, NULL);
e_efx_resize(dm_show, E_EFX_EFFECT_SPEED_LINEAR, NULL, desk->zone->w, desk->zone->h, 0.4, _ds_end, NULL);
break;
case DS_SLIDE_SPLIT:
{
@ -235,7 +235,7 @@ _ds_show(E_Desk *desk, int dx, int dy)
dmh = dm_add(desk_hide);
e_comp_object_util_del_list_append(dm_hide, dmh);
}
clip = evas_object_rectangle_add(e_comp_get(desk_show)->evas);
clip = evas_object_rectangle_add(e_comp->evas);
e_comp_object_util_del_list_append(dm_hide, clip);
if (dx)
evas_object_geometry_set(clip, desk->zone->x, desk->zone->y + (i * h), w, h);
@ -259,7 +259,7 @@ _ds_show(E_Desk *desk, int dx, int dy)
else
exy.y = desk_show->zone->y + (dy * desk_show->zone->h);
}
efx_move(dmh, EFX_EFFECT_SPEED_ACCELERATE,
e_efx_move(dmh, E_EFX_EFFECT_SPEED_ACCELERATE,
&exy, 0.5, (i == (num - 1)) ? _ds_end : NULL, NULL);
dmh = NULL;
}
@ -293,14 +293,14 @@ _ds_show(E_Desk *desk, int dx, int dy)
e_comp_object_util_del_list_append(dm_hide, dmh[i]);
}
/* clip the quad */
clip[i] = evas_object_rectangle_add(e_comp_get(desk)->evas);
clip[i] = evas_object_rectangle_add(e_comp->evas);
e_comp_object_util_del_list_append(dm_hide, clip[i]);
/* lay out 2x2 grid */
evas_object_geometry_set(clip[i], cxy[i].x, cxy[i].y, desk->zone->w / 2, desk->zone->h / 2);
evas_object_clip_set(dmh[i], clip[i]);
evas_object_show(clip[i]);
/* apply effect coords */
efx_move(clip[i], EFX_EFFECT_SPEED_ACCELERATE,
e_efx_move(clip[i], E_EFX_EFFECT_SPEED_ACCELERATE,
&exy[i], 0.8, (i == 3) ? _ds_end : NULL, NULL);
}
}
@ -327,15 +327,15 @@ _ds_show(E_Desk *desk, int dx, int dy)
e_comp_object_util_del_list_append(dm_hide, dmh[i]);
}
/* clip the quad */
clip[i] = evas_object_rectangle_add(e_comp_get(desk)->evas);
clip[i] = evas_object_rectangle_add(e_comp->evas);
e_comp_object_util_del_list_append(dm_hide, clip[i]);
/* lay out 2x2 grid */
evas_object_geometry_set(clip[i], cxy[i].x, cxy[i].y, desk->zone->w / 2, desk->zone->h / 2);
evas_object_clip_set(dmh[i], clip[i]);
evas_object_show(clip[i]);
/* resize all quads to 1x1 while moving towards center */
efx_resize(clip[i], EFX_EFFECT_SPEED_ACCELERATE,
EFX_POINT(desk->zone->x + (desk->zone->w / 2), desk->zone->y + (desk->zone->h / 2)),
e_efx_resize(clip[i], E_EFX_EFFECT_SPEED_ACCELERATE,
E_EFX_POINT(desk->zone->x + (desk->zone->w / 2), desk->zone->y + (desk->zone->h / 2)),
1, 1 ,0.8, (i == 3) ? _ds_end : NULL, NULL);
}
}
@ -348,13 +348,13 @@ _ds_show(E_Desk *desk, int dx, int dy)
evas_object_geometry_set(dm_show, desk->zone->x, desk->zone->y, desk->zone->w, desk->zone->h);
evas_object_hide(dm_show);
bg = evas_object_rectangle_add(e_comp_get(desk)->evas);
bg = evas_object_rectangle_add(e_comp->evas);
e_comp_object_util_del_list_append(dm_show, bg);
evas_object_color_set(bg, 0, 0, 0, 255);
evas_object_layer_set(bg, E_LAYER_MENU + 99);
evas_object_geometry_set(bg, desk->zone->x, desk->zone->y, desk->zone->w, desk->zone->h);
evas_object_show(bg);
clip = evas_object_rectangle_add(e_comp_get(desk)->evas);
clip = evas_object_rectangle_add(e_comp->evas);
e_comp_object_util_del_list_append(dm_show, clip);
/* fit clipper to zone */
evas_object_geometry_set(clip, desk->zone->x, desk->zone->y, desk->zone->w, desk->zone->h);
@ -362,8 +362,8 @@ _ds_show(E_Desk *desk, int dx, int dy)
evas_object_clip_set(dm_show, clip);
evas_object_show(clip);
/* resize clip to 1px high while moving towards center */
efx_resize(clip, EFX_EFFECT_SPEED_ACCELERATE,
EFX_POINT(desk->zone->x, desk->zone->y + (desk->zone->h / 2)),
e_efx_resize(clip, E_EFX_EFFECT_SPEED_ACCELERATE,
E_EFX_POINT(desk->zone->x, desk->zone->y + (desk->zone->h / 2)),
desk->zone->w, 1, 0.45, _ds_blink2, NULL);
}
break;
@ -371,15 +371,15 @@ _ds_show(E_Desk *desk, int dx, int dy)
{
Evas_Object *clip;
clip = evas_object_rectangle_add(e_comp_get(desk)->evas);
clip = evas_object_rectangle_add(e_comp->evas);
/* fit clipper to zone */
evas_object_geometry_set(clip, desk->zone->x, desk->zone->y, desk->zone->w, desk->zone->h);
evas_object_clip_set(dm_hide, clip);
e_comp_object_util_del_list_append(dm_hide, clip);
evas_object_show(clip);
/* resize clip to 1x1 while moving towards center */
efx_resize(clip, EFX_EFFECT_SPEED_DECELERATE,
EFX_POINT(desk->zone->x + (desk->zone->w / 2), desk->zone->y + (desk->zone->h / 2)),
e_efx_resize(clip, E_EFX_EFFECT_SPEED_DECELERATE,
E_EFX_POINT(desk->zone->x + (desk->zone->w / 2), desk->zone->y + (desk->zone->h / 2)),
1, 1, 0.6, _ds_end, NULL);
}
break;
@ -394,15 +394,16 @@ _ds_hide(E_Desk *desk)
E_Client *ec;
E_FREE_FUNC(dm_hide, evas_object_del);
E_CLIENT_FOREACH(desk->zone->comp, ec)
E_CLIENT_FOREACH(ec)
{
/* same as above */
if ((ec->desk->zone != desk->zone) || (ec->iconic) || e_client_util_ignored_get(ec)) continue;
if (e_client_util_ignored_get(ec) || (ec->desk->zone != desk->zone) || (ec->iconic)) continue;
if (ec->moving) continue;
if ((ec->desk != desk) || (ec->sticky)) continue;
/* comp hide clients */
e_client_comp_hidden_set(ec, EINA_TRUE);
ec->hidden = 1;
evas_object_show(ec->frame);
evas_object_hide(ec->frame);
}
if (ds_config->disabled_transition_count == DS_LAST) return;

View File

@ -32,7 +32,7 @@ _ds_menu_ruler(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi)
mr_init();
e_config_save_queue();
}
#if E_VERSION_MAJOR == 20
static void
_ds_menu_maximize(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi)
{
@ -43,6 +43,7 @@ _ds_menu_maximize(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi
maximize_init();
e_config_save_queue();
}
#endif
static void
_ds_menu_transitions(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi)
@ -90,13 +91,13 @@ _ds_menu_add(void *data EINA_UNUSED, E_Menu *m)
e_menu_item_check_set(mi, 1);
e_menu_item_toggle_set(mi, ds_config->disable_ruler);
e_menu_item_callback_set(mi, _ds_menu_ruler, NULL);
#if E_VERSION_MAJOR == 20
mi = e_menu_item_new(subm);
e_menu_item_label_set(mi, D_("Disable Maximize Effects"));
e_menu_item_check_set(mi, 1);
e_menu_item_toggle_set(mi, ds_config->disable_maximize);
e_menu_item_callback_set(mi, _ds_menu_maximize, NULL);
#endif
mi = e_menu_item_new(subm);
e_menu_item_label_set(mi, D_("Disable Transition Effects"));
e_menu_item_check_set(mi, 1);

View File

@ -1,6 +1,6 @@
#include "e_mod_main.h"
EAPI E_Module_Api e_modapi = {E_MODULE_API_VERSION, "Desksanity"};
E_API E_Module_Api e_modapi = {E_MODULE_API_VERSION, "Desksanity"};
static E_Config_DD *conf_edd = NULL;
EINTERN Mod *mod = NULL;
@ -8,8 +8,19 @@ EINTERN Config *ds_config = NULL;
static Evas_Object *fade_obj = NULL;
static E_Action *act;
static Eina_List *urgent;
static Eina_List *focus_list;
static Eina_List *handlers;
static Ecore_Timer *ds_key_focus_timeout;
static Eina_List *ds_key_focus_desks;
static Eina_Bool focus_last_focused_per_desktop;
static unsigned int pending_flip;
static void
_ds_fade_end(Ecore_Cb cb, Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
_ds_fade_end(Ecore_Cb cb, E_Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
{
E_FREE_FUNC(fade_obj, evas_object_del);
if (cb)
@ -57,7 +68,169 @@ _e_mod_ds_config_load(void)
ds_config->config_version = MOD_CONFIG_FILE_VERSION;
}
EAPI void *
static E_Client *
ds_client_urgent_pop(E_Client *ec)
{
Eina_List *l;
if (!urgent) return NULL;
l = eina_list_data_find_list(urgent, ec);
if (!l) return NULL;
urgent = eina_list_remove_list(urgent, l);
return !!e_object_unref(E_OBJECT(ec)) ? ec : NULL;
}
static Eina_List *
ds_key_list_init(const E_Zone *zone)
{
int i;
Eina_List *desks = NULL;
for (i = 0; i < zone->desk_x_count * zone->desk_y_count; i++)
{
if (zone->desks[i]->visible) continue;
e_object_ref(E_OBJECT(zone->desks[i]));
desks = eina_list_append(desks, zone->desks[i]);
}
return desks;
}
static Eina_Bool
ds_key_focus_timeout_cb(void *d EINA_UNUSED)
{
E_Client *ec;
e_client_focus_track_thaw();
ec = e_client_focused_get();
if (ec)
e_client_focus_latest_set(ec);
ds_key_focus_timeout = NULL;
E_FREE_LIST(ds_key_focus_desks, e_object_unref);
return EINA_FALSE;
}
static void
ds_key_focus(void)
{
Eina_List *l;
E_Client *ec;
E_Zone *focus_zone = NULL;
static double last;
double t = 0.0;
Eina_Bool skip = EINA_FALSE;
if (!focus_list)
{
focus_zone = e_zone_current_get();
if (!ds_key_focus_desks)
ds_key_focus_desks = ds_key_list_init(focus_zone);
if (!ds_key_focus_timeout)
{
e_client_focus_track_freeze();
ds_key_focus_timeout = ecore_timer_add(0.25, ds_key_focus_timeout_cb, NULL);
}
t = ecore_time_unix_get();
skip = (t - last < 0.25);
if (skip)
ecore_timer_reset(ds_key_focus_timeout);
}
else
{
E_FREE_FUNC(ds_key_focus_timeout, ecore_timer_del);
E_FREE_LIST(ds_key_focus_desks, e_object_unref);
e_client_focus_track_thaw();
}
EINA_LIST_FOREACH(focus_list ?: e_client_focus_stack_get(), l, ec)
if ((!ec->iconic) && (!ec->focused) &&
((!focus_zone) || ((ec->zone == focus_zone) && eina_list_data_find(ds_key_focus_desks, ec->desk))))
{
if (ds_key_focus_desks)
{
ds_key_focus_desks = eina_list_remove(ds_key_focus_desks, ec->desk);
e_object_unref(E_OBJECT(ec->desk));
}
if (!pending_flip)
focus_last_focused_per_desktop = e_config->focus_last_focused_per_desktop;
if (!ec->desk->visible)
{
e_config->focus_last_focused_per_desktop = 0;
pending_flip++;
}
if (ec->sticky)
{
E_Client *tec;
E_CLIENT_FOREACH(tec)
if ((!tec->sticky) && (tec->desk == ec->desk)) break;
/* do not flip to a sticky window if there are no other windows on its desk */
if ((!tec) || (tec->desk != ec->desk)) continue;
e_desk_show(ec->desk);
}
e_client_activate(ec, 1);
break;
}
last = t;
focus_list = eina_list_free(focus_list);
}
static void
ds_key(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
E_Client *ec = NULL;
if (!urgent)
{
ds_key_focus();
return;
}
while (!ec)
ec = ds_client_urgent_pop(eina_list_data_get(urgent));
if (ec)
{
eina_list_free(focus_list);
focus_list = eina_list_clone(e_client_focus_stack_get());
e_client_activate(ec, 1);
}
else
ds_key_focus();
}
static Eina_Bool
ds_desk_after_show(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Desk_After_Show *ev EINA_UNUSED)
{
if (pending_flip)
pending_flip--,
e_config->focus_last_focused_per_desktop = focus_last_focused_per_desktop;
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
ds_client_remove(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Client *ev)
{
ds_client_urgent_pop(ev->ec);
if (focus_list)
focus_list = eina_list_remove(focus_list, ev->ec);
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
ds_client_urgent(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Client_Property *ev)
{
if (!(ev->property & E_CLIENT_PROPERTY_URGENCY)) return ECORE_CALLBACK_RENEW;
if (ev->ec->urgent)
{
e_object_ref(E_OBJECT(ev->ec));
urgent = eina_list_append(urgent, ev->ec);
}
else
ds_client_urgent_pop(ev->ec);
return ECORE_CALLBACK_RENEW;
}
E_API void *
e_modapi_init(E_Module *m)
{
char buf[PATH_MAX];
@ -68,7 +241,7 @@ e_modapi_init(E_Module *m)
snprintf(buf, sizeof(buf), "%s/e-module-desksanity.edj", m->dir);
elm_theme_overlay_add(NULL, buf);
efx_init();
e_efx_init();
_e_mod_ds_config_load();
mod = E_NEW(Mod, 1);
@ -80,24 +253,35 @@ e_modapi_init(E_Module *m)
ds_init();
if (!ds_config->disable_ruler)
mr_init();
#if E_VERSION_MAJOR == 20
if (!ds_config->disable_maximize)
maximize_init();
#endif
pip_init();
zoom_init();
mag_init();
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_PROPERTY, ds_client_urgent, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_REMOVE, ds_client_remove, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_DESK_AFTER_SHOW, ds_desk_after_show, NULL);
act = e_action_add("ds_key");
e_action_predef_name_set(D_("Desksanity"), D_("Manage Window Focus For Me"), "ds_key", NULL, NULL, 0);
act->func.go = ds_key;
return m;
}
EAPI int
E_API int
e_modapi_shutdown(E_Module *m EINA_UNUSED)
{
mag_shutdown();
zoom_shutdown();
pip_shutdown();
#if E_VERSION_MAJOR == 20
if (!ds_config->disable_maximize)
maximize_shutdown();
#endif
if (!ds_config->disable_ruler)
mr_shutdown();
if (!ds_config->disable_transitions)
@ -108,11 +292,18 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED)
E_CONFIG_DD_FREE(conf_edd);
eina_stringshare_del(mod->edje_file);
E_FREE(mod);
//efx_shutdown(); broken...
E_FREE_FUNC(act, e_action_del);
e_action_predef_name_del(D_("Desksanity"), "ds_key");
E_FREE_LIST(handlers, ecore_event_handler_del);
E_FREE_LIST(urgent, e_object_unref);
focus_list = eina_list_free(focus_list);
E_FREE_FUNC(ds_key_focus_timeout, ecore_timer_del);
E_FREE_LIST(ds_key_focus_desks, e_object_unref);
//e_efx_shutdown(); broken...
return 1;
}
EAPI int
E_API int
e_modapi_save(E_Module *m EINA_UNUSED)
{
e_config_domain_save("module.desksanity", conf_edd, ds_config);
@ -120,25 +311,27 @@ e_modapi_save(E_Module *m EINA_UNUSED)
}
EINTERN void
ds_fade_setup(E_Comp *comp, Evas_Object_Event_Cb click_cb)
ds_fade_setup(Evas_Object_Event_Cb click_cb)
{
if (fade_obj) return;
fade_obj = evas_object_rectangle_add(comp->evas);
fade_obj = evas_object_rectangle_add(e_comp->evas);
if (click_cb)
evas_object_event_callback_add(fade_obj, EVAS_CALLBACK_MOUSE_DOWN, click_cb, NULL);
evas_object_name_set(fade_obj, "fade_obj");
evas_object_geometry_set(fade_obj, 0, 0, comp->man->w, comp->man->h);
evas_object_geometry_set(fade_obj, 0, 0, e_comp->w, e_comp->h);
evas_object_layer_set(fade_obj, E_LAYER_MENU + 1);
evas_object_pass_events_set(fade_obj, 1);
evas_object_show(fade_obj);
efx_fade(fade_obj, EFX_EFFECT_SPEED_LINEAR, EFX_COLOR(0, 0, 0), 0, 0.0, NULL, NULL);
efx_fade(fade_obj, EFX_EFFECT_SPEED_LINEAR, EFX_COLOR(0, 0, 0), 192, 0.3, NULL, NULL);
e_efx_fade(fade_obj, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_COLOR(0, 0, 0), 0, 0.0, NULL, NULL);
e_efx_fade(fade_obj, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_COLOR(0, 0, 0), 192, 0.3, NULL, NULL);
}
EINTERN void
ds_fade_end(Ecore_Cb end_cb, Evas_Object_Event_Cb click_cb)
{
if (!fade_obj) return;
evas_object_pass_events_set(fade_obj, 1);
efx_fade(fade_obj, EFX_EFFECT_SPEED_DECELERATE, EFX_COLOR(0, 0, 0), 0, 0.3, (Efx_End_Cb)_ds_fade_end, end_cb);
e_efx_fade(fade_obj, E_EFX_EFFECT_SPEED_DECELERATE, E_EFX_COLOR(0, 0, 0), 0, 0.3, (E_Efx_End_Cb)_ds_fade_end, end_cb);
if (click_cb)
evas_object_event_callback_del(fade_obj, EVAS_CALLBACK_MOUSE_DOWN, click_cb);
}

View File

@ -6,7 +6,6 @@
#endif
#include <e.h>
#include <Efx.h>
#ifdef ENABLE_NLS
# include <libintl.h>
@ -83,7 +82,7 @@ typedef struct Config
extern Mod *mod;
extern Config *ds_config;
EINTERN void ds_fade_setup(E_Comp *comp, Evas_Object_Event_Cb click_cb);
EINTERN void ds_fade_setup(Evas_Object_Event_Cb click_cb);
EINTERN void ds_fade_end(Ecore_Cb cb, Evas_Object_Event_Cb click_cb);
EINTERN void ds_init(void);
@ -91,10 +90,10 @@ EINTERN void ds_shutdown(void);
EINTERN void mr_shutdown(void);
EINTERN void mr_init(void);
#if E_VERSION_MAJOR == 20
EINTERN void maximize_init(void);
EINTERN void maximize_shutdown(void);
#endif
EINTERN void pip_init(void);
EINTERN void pip_shutdown(void);
@ -106,4 +105,5 @@ EINTERN void zoom_shutdown(void);
EINTERN void mag_init(void);
EINTERN void mag_shutdown(void);
#endif

View File

@ -15,11 +15,9 @@ static void
_magnify_end(void)
{
unsigned int n;
E_Comp *comp;
if (!magnifiers) return;
comp = e_comp_get(NULL);
for (n = 0; n < eina_list_count(comp->zones); n++)
for (n = 0; n < eina_list_count(e_comp->zones); n++)
E_FREE_FUNC(magnifiers[n], evas_object_del);
E_FREE(magnifiers);
E_FREE_FUNC(clip, evas_object_del);
@ -32,7 +30,7 @@ static void
_current_update(int n)
{
if (current_mag != -1)
efx_zoom_reset(magnifiers[current_mag]);
e_efx_zoom_reset(magnifiers[current_mag]);
current_mag = n;
}
@ -42,20 +40,20 @@ _magnify_update(int x, int y)
int w, h;
E_Zone *zone;
zone = e_comp_zone_xy_get(e_comp_get(NULL), x, y);
zone = e_comp_zone_xy_get(x, y);
if ((int)zone->num != current_mag)
_current_update(zone->num);
w = zone->w / MAG_SIZE_FACTOR;
h = zone->h / MAG_SIZE_FACTOR;
evas_object_geometry_set(clip, x - (w / 2), y - (h / 2), w, h);
efx_zoom(magnifiers[zone->num], EFX_EFFECT_SPEED_LINEAR, 0, 2.0, EFX_POINT(x, y), 0, NULL, NULL);
e_efx_zoom(magnifiers[zone->num], E_EFX_EFFECT_SPEED_LINEAR, 0, 2.0, E_EFX_POINT(x, y), 0, NULL, NULL);
}
static Eina_Bool
_magnify_move(void *data EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_Move *ev)
{
_magnify_update(e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x), e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y));
_magnify_update(e_comp_canvas_x_root_adjust(ev->root.x), e_comp_canvas_y_root_adjust(ev->root.y));
return ECORE_CALLBACK_RENEW;
}
@ -64,7 +62,7 @@ _magnify_poll(void *d EINA_UNUSED)
{
int x, y;
ecore_evas_pointer_xy_get(e_comp_get(NULL)->ee, &x, &y);
ecore_evas_pointer_xy_get(e_comp->ee, &x, &y);
_magnify_update(x, y);
return ECORE_CALLBACK_RENEW;
}
@ -87,37 +85,35 @@ _magnify_new(E_Desk *desk)
static void
_magnify_cb(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
E_Comp *comp;
E_Zone *zone;
unsigned int n;
int x, y, w, h;
Eina_List *l;
comp = e_comp_get(NULL);
if (magnifiers)
{
_magnify_end();
return;
}
clip = evas_object_rectangle_add(comp->evas);
clip = evas_object_rectangle_add(e_comp->evas);
evas_object_show(clip);
ecore_evas_pointer_xy_get(comp->ee, &x, &y);
magnifiers = malloc(sizeof(void*) * eina_list_count(comp->zones));
for (n = 0, l = comp->zones, zone = eina_list_data_get(l);
n < eina_list_count(comp->zones);
ecore_evas_pointer_xy_get(e_comp->ee, &x, &y);
magnifiers = malloc(sizeof(void*) * eina_list_count(e_comp->zones));
for (n = 0, l = e_comp->zones, zone = eina_list_data_get(l);
n < eina_list_count(e_comp->zones);
n++, l = eina_list_next(l), zone = eina_list_data_get(l))
{
_magnify_new(e_desk_current_get(zone));
evas_object_clip_set(magnifiers[n], clip);
if (zone != e_zone_current_get(comp)) continue;
if (zone != e_zone_current_get()) continue;
w = zone->w / MAG_SIZE_FACTOR;
h = zone->h / MAG_SIZE_FACTOR;
evas_object_geometry_set(clip, x - (w / 2), y - (h / 2), w, h);
_current_update(n);
}
if (comp->comp_type == E_PIXMAP_TYPE_X)
if (e_comp->comp_type == E_PIXMAP_TYPE_X)
timer = ecore_timer_add(0.05, _magnify_poll, NULL);
else
handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, (Ecore_Event_Handler_Cb)_magnify_move, NULL);

View File

@ -1,11 +1,12 @@
#include "e_mod_main.h"
#if E_VERSION_MAJOR == 20
static Ecore_Event_Handler *eh = NULL;
static Eina_Bool
_ds_unmaximize_render(void *d EINA_UNUSED)
{
e_comp_render_queue(e_comp_get(NULL));
e_comp_render_queue();
return EINA_FALSE;
}
@ -18,6 +19,7 @@ _ds_unmaximize_post(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
double time = 0.15;
if (e_comp_config_get()->match.disable_borders) return;
if (e_client_has_xwindow(ec) && (!e_comp_object_frame_allowed(ec->frame))) return;
if (e_comp_config_get()->fast_borders)
time /= 2;
w = ec->w, h = ec->h;
@ -27,7 +29,7 @@ _ds_unmaximize_post(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
if (!rect) return;
evas_object_geometry_set(obj, rect->x, rect->y, rect->w, rect->h);
free(rect);
efx_resize(ec->frame, EFX_EFFECT_SPEED_SINUSOIDAL, EFX_POINT(x, y), w, h, time, NULL, NULL);
e_efx_resize(ec->frame, E_EFX_EFFECT_SPEED_SINUSOIDAL, E_EFX_POINT(x, y), w, h, time, NULL, NULL);
ecore_timer_add(0.1, _ds_unmaximize_render, NULL);
}
@ -53,12 +55,12 @@ _ds_unmaximize_pre(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EI
max = !!evas_object_data_del(ec->frame, "__DSMAX");
if (max)
efx_resize_stop(ec->frame);
e_efx_resize_stop(ec->frame);
ec->maximize_override = 0;
}
static void
_ds_maximize_done(void *data, Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
_ds_maximize_done(void *data, E_Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
{
E_Client *ec = data;
@ -75,6 +77,7 @@ _ds_maximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNU
double time = 0.2;
if (e_comp_config_get()->match.disable_borders) return;
if (e_client_has_xwindow(ec) && (!e_comp_object_frame_allowed(ec->frame))) return;
if (e_comp_config_get()->fast_borders)
time /= 2;
ecx = ec->x, ecy = ec->y, ecw = ec->w, ech = ec->h;
@ -83,7 +86,7 @@ _ds_maximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNU
if ((!w) || (!h)) return; //new client, don't break the universe
ec->maximize_override = 1;
evas_object_geometry_set(ec->frame, x, y, w, h);
efx_resize(ec->frame, EFX_EFFECT_SPEED_SINUSOIDAL, EFX_POINT(ecx, ecy), ecw, ech, time, _ds_maximize_done, ec);
e_efx_resize(ec->frame, E_EFX_EFFECT_SPEED_SINUSOIDAL, E_EFX_POINT(ecx, ecy), ecw, ech, time, _ds_maximize_done, ec);
evas_object_data_set(ec->frame, "__DSMAX", (void*)1);
}
@ -95,7 +98,7 @@ _ds_fullscreen(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_U
evas_object_data_del(ec->frame, "__DSMAX");
free(evas_object_data_del(ec->frame, "__DSUMAX"));
ec->maximize_override = 0;
efx_resize_stop(ec->frame);
e_efx_resize_stop(ec->frame);
}
static void
@ -121,7 +124,7 @@ maximize_init(void)
{
E_Client *ec;
E_CLIENT_FOREACH(e_comp_get(NULL), ec)
E_CLIENT_FOREACH(ec)
_ds_maximize_check(ec);
eh = ecore_event_handler_add(E_EVENT_CLIENT_ADD, (Ecore_Event_Handler_Cb)_ds_maximize_add, NULL);
}
@ -131,7 +134,7 @@ maximize_shutdown(void)
{
E_Client *ec;
E_CLIENT_FOREACH(e_comp_get(NULL), ec)
E_CLIENT_FOREACH(ec)
{
if (e_client_util_ignored_get(ec)) continue;
evas_object_smart_callback_del(ec->frame, "maximize_done", _ds_maximize);
@ -142,3 +145,4 @@ maximize_shutdown(void)
}
E_FREE_FUNC(eh, ecore_event_handler_del);
}
#endif

View File

@ -40,7 +40,7 @@ clear_all(void)
static void
_fade_end(void *d EINA_UNUSED)
{
e_comp_shape_queue_block(client->comp, 0);
e_comp_shape_queue_block(0);
clear_all();
}
@ -51,13 +51,13 @@ move_x_update(E_Client *ec)
int w, h;
E_Zone *zone;
zone = e_comp_zone_xy_get(ec->comp, ec->x, ec->y);
zone = e_comp_zone_xy_get(ec->x, ec->y);
if (!zone) zone = ec->zone;
if (evas_object_clip_get(mr_line_x) != zone->bg_clip_object)
{
evas_object_clip_set(mr_line_x, zone->bg_clip_object);
efx_reclip(mr_line_x);
e_efx_reclip(mr_line_x);
}
evas_object_geometry_set(mr_line_x, ec->x, zone->y, 1, zone->h);
@ -77,13 +77,13 @@ move_y_update(E_Client *ec)
int w, h;
E_Zone *zone;
zone = e_comp_zone_xy_get(ec->comp, ec->x, ec->y);
zone = e_comp_zone_xy_get(ec->x, ec->y);
if (!zone) zone = ec->zone;
if (evas_object_clip_get(mr_line_y) != zone->bg_clip_object)
{
evas_object_clip_set(mr_line_y, zone->bg_clip_object);
efx_reclip(mr_line_y);
e_efx_reclip(mr_line_y);
}
evas_object_geometry_set(mr_line_y, zone->x, ec->y, zone->w, 1);
@ -160,9 +160,9 @@ resize_text_update(E_Client *ec)
if (resize_rect[0])
{
zone1 = e_comp_zone_xy_get(ec->comp, ec->x, ec->y);
zone1 = e_comp_zone_xy_get(ec->x, ec->y);
if (!zone1) zone1 = ec->zone;
zone2 = e_comp_zone_xy_get(ec->comp, ec->x + ec->w, ec->y);
zone2 = e_comp_zone_xy_get(ec->x + ec->w, ec->y);
if (!zone2) zone2 = ec->zone;
if (zone1 == zone2)
x = zone1->w;
@ -174,9 +174,9 @@ resize_text_update(E_Client *ec)
if (resize_rect[1])
{
zone1 = e_comp_zone_xy_get(ec->comp, ec->x + ec->w, ec->y);
zone1 = e_comp_zone_xy_get(ec->x + ec->w, ec->y);
if (!zone1) zone1 = ec->zone;
zone2 = e_comp_zone_xy_get(ec->comp, ec->x + ec->w, ec->y + ec->h);
zone2 = e_comp_zone_xy_get(ec->x + ec->w, ec->y + ec->h);
if (!zone2) zone2 = ec->zone;
if (zone1 == zone2)
y = zone1->h;
@ -188,9 +188,9 @@ resize_text_update(E_Client *ec)
if (resize_rect[2])
{
zone1 = e_comp_zone_xy_get(ec->comp, ec->x, ec->y + ec->h);
zone1 = e_comp_zone_xy_get(ec->x, ec->y + ec->h);
if (!zone1) zone1 = ec->zone;
zone2 = e_comp_zone_xy_get(ec->comp, ec->x + ec->w, ec->y + ec->h);
zone2 = e_comp_zone_xy_get(ec->x + ec->w, ec->y + ec->h);
if (!zone2) zone2 = ec->zone;
if (zone1 == zone2)
x = zone1->w;
@ -202,9 +202,9 @@ resize_text_update(E_Client *ec)
if (resize_rect[3])
{
zone1 = e_comp_zone_xy_get(ec->comp, ec->x, ec->y);
zone1 = e_comp_zone_xy_get(ec->x, ec->y);
if (!zone1) zone1 = ec->zone;
zone2 = e_comp_zone_xy_get(ec->comp, ec->x, ec->y + ec->h);
zone2 = e_comp_zone_xy_get(ec->x, ec->y + ec->h);
if (!zone2) zone2 = ec->zone;
if (zone1 == zone2)
y = zone1->h;
@ -221,6 +221,7 @@ text_add(Evas *e)
Evas_Object *o;
o = edje_object_add(e);
evas_object_pass_events_set(o, 1);
evas_object_layer_set(o, E_LAYER_MENU + 2);
edje_object_file_set(o, mod->edje_file, "e/modules/desksanity/moveresize");
evas_object_show(o);
@ -240,11 +241,11 @@ line_add(Evas *e)
}
static void
pulse(void *d EINA_UNUSED, Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj)
pulse(void *d EINA_UNUSED, E_Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj)
{
efx_queue_append(obj, EFX_EFFECT_SPEED_SINUSOIDAL, EFX_QUEUED_EFFECT(EFX_EFFECT_FADE(255, 255, 255, 255)), 0.6, NULL, NULL);
efx_queue_append(obj, EFX_EFFECT_SPEED_SINUSOIDAL, EFX_QUEUED_EFFECT(EFX_EFFECT_FADE(120, 120, 120, 120)), 0.9, pulse, NULL);
efx_queue_run(obj);
e_efx_queue_append(obj, E_EFX_EFFECT_SPEED_SINUSOIDAL, E_EFX_QUEUED_EFFECT(E_EFX_EFFECT_FADE(255, 255, 255, 255)), 0.6, NULL, NULL);
e_efx_queue_append(obj, E_EFX_EFFECT_SPEED_SINUSOIDAL, E_EFX_QUEUED_EFFECT(E_EFX_EFFECT_FADE(120, 120, 120, 120)), 0.9, pulse, NULL);
e_efx_queue_run(obj);
}
static void
@ -253,20 +254,20 @@ move_start(E_Client *ec)
if (!ec->moving) return;
clear_all();
client = ec;
e_comp_shape_queue_block(ec->comp, 1);
e_comp_shape_queue_block(1);
ds_fade_setup(ec->comp, NULL);
ds_fade_setup(NULL);
ec->layer_block = 1;
evas_object_layer_set(ec->frame, E_LAYER_MENU + 1);
mr_line_x = line_add(ec->comp->evas);
mr_line_y = line_add(ec->comp->evas);
mr_line_x = line_add(e_comp->evas);
mr_line_y = line_add(e_comp->evas);
move_text_x = text_add(ec->comp->evas);
move_text_x = text_add(e_comp->evas);
move_x_update(ec);
move_text_y = text_add(ec->comp->evas);
move_text_y = text_add(e_comp->evas);
move_y_update(ec);
pulse(NULL, NULL, mr_line_x);
@ -289,14 +290,14 @@ move_update(void *d EINA_UNUSED, E_Client *ec)
static void
move_end(void *d EINA_UNUSED, E_Client *ec EINA_UNUSED)
{
efx_queue_clear(mr_line_x);
efx_queue_clear(mr_line_y);
efx_fade_reset(mr_line_x);
efx_fade_reset(mr_line_y);
efx_fade(mr_line_x, EFX_EFFECT_SPEED_DECELERATE, EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
efx_fade(mr_line_y, EFX_EFFECT_SPEED_DECELERATE, EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
efx_fade(move_text_x, EFX_EFFECT_SPEED_DECELERATE, EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
efx_fade(move_text_y, EFX_EFFECT_SPEED_DECELERATE, EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
e_efx_queue_clear(mr_line_x);
e_efx_queue_clear(mr_line_y);
e_efx_fade_reset(mr_line_x);
e_efx_fade_reset(mr_line_y);
e_efx_fade(mr_line_x, E_EFX_EFFECT_SPEED_DECELERATE, E_EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
e_efx_fade(mr_line_y, E_EFX_EFFECT_SPEED_DECELERATE, E_EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
e_efx_fade(move_text_x, E_EFX_EFFECT_SPEED_DECELERATE, E_EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
e_efx_fade(move_text_y, E_EFX_EFFECT_SPEED_DECELERATE, E_EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
ds_fade_end(_fade_end, NULL);
}
@ -308,9 +309,9 @@ resize_start(E_Client *ec)
if (!e_client_util_resizing_get(ec)) return;
clear_all();
client = ec;
e_comp_shape_queue_block(ec->comp, 1);
e_comp_shape_queue_block(1);
ds_fade_setup(ec->comp, NULL);
ds_fade_setup(NULL);
ec->layer_block = 1;
evas_object_layer_set(ec->frame, E_LAYER_MENU + 1);
@ -318,32 +319,32 @@ resize_start(E_Client *ec)
switch (ec->resize_mode)
{
case E_POINTER_RESIZE_TL:
resize_rect[0] = line_add(ec->comp->evas);
resize_rect[3] = line_add(ec->comp->evas);
resize_rect[0] = line_add(e_comp->evas);
resize_rect[3] = line_add(e_comp->evas);
break;
case E_POINTER_RESIZE_T:
resize_rect[0] = line_add(ec->comp->evas);
resize_rect[0] = line_add(e_comp->evas);
break;
case E_POINTER_RESIZE_TR:
resize_rect[0] = line_add(ec->comp->evas);
resize_rect[1] = line_add(ec->comp->evas);
resize_rect[0] = line_add(e_comp->evas);
resize_rect[1] = line_add(e_comp->evas);
break;
case E_POINTER_RESIZE_R:
resize_rect[1] = line_add(ec->comp->evas);
resize_rect[1] = line_add(e_comp->evas);
break;
case E_POINTER_RESIZE_BR:
resize_rect[1] = line_add(ec->comp->evas);
resize_rect[2] = line_add(ec->comp->evas);
resize_rect[1] = line_add(e_comp->evas);
resize_rect[2] = line_add(e_comp->evas);
break;
case E_POINTER_RESIZE_B:
resize_rect[2] = line_add(ec->comp->evas);
resize_rect[2] = line_add(e_comp->evas);
break;
case E_POINTER_RESIZE_BL:
resize_rect[2] = line_add(ec->comp->evas);
resize_rect[3] = line_add(ec->comp->evas);
resize_rect[2] = line_add(e_comp->evas);
resize_rect[3] = line_add(e_comp->evas);
break;
case E_POINTER_RESIZE_L:
resize_rect[3] = line_add(ec->comp->evas);
resize_rect[3] = line_add(e_comp->evas);
break;
default: break;
}
@ -351,7 +352,7 @@ resize_start(E_Client *ec)
if (resize_rect[x])
pulse(NULL, NULL, resize_rect[x]);
resize_text = text_add(ec->comp->evas);
resize_text = text_add(e_comp->evas);
resize_text_update(ec);
}
@ -372,12 +373,12 @@ resize_end(void *d EINA_UNUSED, E_Client *ec EINA_UNUSED)
{
unsigned int x;
efx_fade(resize_text, EFX_EFFECT_SPEED_DECELERATE, EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
e_efx_fade(resize_text, E_EFX_EFFECT_SPEED_DECELERATE, E_EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
for (x = 0; x < 4; x++)
{
if (!resize_rect[x]) continue;
efx_fade(resize_rect[x], EFX_EFFECT_SPEED_DECELERATE, EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
efx_queue_clear(resize_rect[x]);
e_efx_fade(resize_rect[x], E_EFX_EFFECT_SPEED_DECELERATE, E_EFX_COLOR(0, 0, 0), 0, 0.3, NULL, NULL);
e_efx_queue_clear(resize_rect[x]);
}
ds_fade_end(_fade_end, NULL);
}

228
src/pip.c
View File

@ -30,6 +30,7 @@ pips_noedit()
editing = EINA_FALSE;
ds_fade_end(NULL, pips_noedit);
e_comp_ungrab_input(1, 1);
it = eina_hash_iterator_data_new(pips);
EINA_ITERATOR_FOREACH(it, pip)
{
@ -37,7 +38,7 @@ pips_noedit()
evas_object_pass_events_set(pip->pip, 1);
}
eina_iterator_free(it);
e_comp_shape_queue(e_comp_get(NULL));
e_comp_shape_queue();
E_FREE_FUNC(action_handler, ecore_event_handler_del);
}
@ -46,12 +47,11 @@ pips_edit(void)
{
Pip *pip;
Eina_Iterator *it;
E_Comp *comp;
comp = e_comp_get(NULL);
if (comp->nocomp) return;
if (e_comp->nocomp) return;
editing = EINA_TRUE;
ds_fade_setup(comp, pips_noedit);
ds_fade_setup(pips_noedit);
e_comp_grab_input(1, 1);
it = eina_hash_iterator_data_new(pips);
EINA_ITERATOR_FOREACH(it, pip)
{
@ -59,17 +59,87 @@ pips_edit(void)
evas_object_pass_events_set(pip->pip, 0);
}
eina_iterator_free(it);
e_comp_shape_queue(comp);
e_comp_shape_queue();
}
static void
_pip_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
E_Client *ec = data;
eina_hash_del_by_key(pips, &ec->frame);
if (editing && (!eina_hash_population(pips)))
pips_noedit();
}
static void
pip_free(Pip *pip)
{
evas_object_event_callback_del(pip->pip, EVAS_CALLBACK_DEL, _pip_del);
evas_object_del(pip->pip);
evas_object_del(pip->clip);
free(pip);
}
static void
_pip_resize(Pip *pip, int *ox, int *oy, int *ow, int *oh, Ecore_Event_Mouse_Move *ev)
{
int x, y, w, h;
x = *ox, y = *oy, w = *ow, h = *oh;
if ((pip->resize_mode == E_POINTER_RESIZE_B) ||
(pip->resize_mode == E_POINTER_RESIZE_BL) ||
(pip->resize_mode == E_POINTER_RESIZE_BR))
h = MAX(e_comp_canvas_y_root_adjust(ev->root.y) - y, 5);
else if ((pip->resize_mode == E_POINTER_RESIZE_T) ||
(pip->resize_mode == E_POINTER_RESIZE_TL) ||
(pip->resize_mode == E_POINTER_RESIZE_TR))
{
h = MAX((y + h) - (e_comp_canvas_y_root_adjust(ev->root.y) - pip->down.y), 5);
y = e_comp_canvas_y_root_adjust(ev->root.y) - pip->down.y;
}
if ((pip->resize_mode == E_POINTER_RESIZE_R) ||
(pip->resize_mode == E_POINTER_RESIZE_TR) ||
(pip->resize_mode == E_POINTER_RESIZE_BR))
w = MAX(e_comp_canvas_x_root_adjust(ev->root.x) - x, 5);
else if ((pip->resize_mode == E_POINTER_RESIZE_L) ||
(pip->resize_mode == E_POINTER_RESIZE_TL) ||
(pip->resize_mode == E_POINTER_RESIZE_BL))
{
w = MAX((x + w) - (e_comp_canvas_x_root_adjust(ev->root.x) - pip->down.x), 5);
x = e_comp_canvas_x_root_adjust(ev->root.x) - pip->down.x;
}
{
E_Client *ec;
ec = evas_object_data_get(pip->pip, "E_Client");
switch (pip->resize_mode)
{
case E_POINTER_RESIZE_TL:
case E_POINTER_RESIZE_TR:
case E_POINTER_RESIZE_BR:
case E_POINTER_RESIZE_BL:
if (abs(e_comp_canvas_x_root_adjust(ev->root.x) - pip->down.x) > abs(e_comp_canvas_y_root_adjust(ev->root.y) - pip->down.y))
h = (ec->h * w) / ec->w;
else
w = (ec->w * h) / ec->h;
break;
case E_POINTER_RESIZE_T:
case E_POINTER_RESIZE_B:
w = (ec->w * h) / ec->h;
break;
case E_POINTER_RESIZE_R:
case E_POINTER_RESIZE_L:
h = (ec->h * w) / ec->w;
break;
default: break;
}
}
*ox = x, *oy = y, *ow = w, *oh = h;
}
static Eina_Bool
_pip_mouse_move(Pip *pip, int t EINA_UNUSED, Ecore_Event_Mouse_Move *ev)
{
@ -78,78 +148,49 @@ _pip_mouse_move(Pip *pip, int t EINA_UNUSED, Ecore_Event_Mouse_Move *ev)
evas_object_geometry_get(pip->pip, &x, &y, &w, &h);
if (pip->resize)
{
if ((pip->resize_mode == E_POINTER_RESIZE_B) ||
(pip->resize_mode == E_POINTER_RESIZE_BL) ||
(pip->resize_mode == E_POINTER_RESIZE_BR))
h = MAX(e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y) - y, 5);
else if ((pip->resize_mode == E_POINTER_RESIZE_T) ||
(pip->resize_mode == E_POINTER_RESIZE_TL) ||
(pip->resize_mode == E_POINTER_RESIZE_TR))
{
h = MAX((y + h) - (e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y) - pip->down.y), 5);
y = e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y) - pip->down.y;
}
if ((pip->resize_mode == E_POINTER_RESIZE_R) ||
(pip->resize_mode == E_POINTER_RESIZE_TR) ||
(pip->resize_mode == E_POINTER_RESIZE_BR))
w = MAX(e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x) - x, 5);
else if ((pip->resize_mode == E_POINTER_RESIZE_L) ||
(pip->resize_mode == E_POINTER_RESIZE_TL) ||
(pip->resize_mode == E_POINTER_RESIZE_BL))
{
w = MAX((x + w) - (e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x) - pip->down.x), 5);
x = e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x) - pip->down.x;
}
{
E_Client *ec;
ec = evas_object_data_get(pip->pip, "E_Client");
switch (pip->resize_mode)
{
case E_POINTER_RESIZE_TL:
case E_POINTER_RESIZE_TR:
case E_POINTER_RESIZE_BR:
case E_POINTER_RESIZE_BL:
if (abs(e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x) - pip->down.x) > abs(e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y) - pip->down.y))
h = (ec->h * w) / ec->w;
else
w = (ec->w * h) / ec->h;
break;
case E_POINTER_RESIZE_T:
case E_POINTER_RESIZE_B:
w = (ec->w * h) / ec->h;
break;
case E_POINTER_RESIZE_R:
case E_POINTER_RESIZE_L:
h = (ec->h * w) / ec->w;
break;
default: break;
}
}
_pip_resize(pip, &x, &y, &w, &h, ev);
evas_object_geometry_set(pip->pip, x, y, w, h);
if (pip->clip)
{
evas_object_geometry_get(pip->clip, &x, &y, &w, &h);
_pip_resize(pip, &x, &y, &w, &h, ev);
evas_object_geometry_set(pip->clip, x, y, w, h);
}
}
else if (pip->move)
{
E_Comp *comp = e_comp_util_evas_object_comp_get(pip->pip);
evas_object_move(pip->pip,
E_CLAMP(e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x) - pip->down.x, 0, comp->man->w - (w / 2)),
E_CLAMP(e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y) - pip->down.y, 0, comp->man->h - (h / 2)));
if (pip->clip)
{
int cx, cy, cw, ch, dx, dy;
evas_object_geometry_get(pip->clip, &cx, &cy, &cw, &ch);
dx = cx - x, dy = cy - y;
evas_object_move(pip->clip,
E_CLAMP(e_comp_canvas_x_root_adjust(ev->root.x) - pip->down.x, 0, e_comp->w - (cw / 2)),
E_CLAMP(e_comp_canvas_y_root_adjust(ev->root.y) - pip->down.y, 0, e_comp->h - (ch / 2)));
evas_object_geometry_get(pip->clip, &cx, &cy, NULL, NULL);
evas_object_move(pip->pip, cx - dx, cy - dy);
}
else
evas_object_move(pip->pip,
E_CLAMP(e_comp_canvas_x_root_adjust(ev->root.x) - pip->down.x, 0, e_comp->w - (w / 2)),
E_CLAMP(e_comp_canvas_y_root_adjust(ev->root.y) - pip->down.y, 0, e_comp->h - (h / 2)));
}
else if (pip->crop)
{
int cx, cy;
if (x + pip->down.x < e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x))
if (x + pip->down.x < e_comp_canvas_x_root_adjust(ev->root.x))
cx = x + pip->down.x;
else
cx = e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x);
if (y + pip->down.y < e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y))
cx = e_comp_canvas_x_root_adjust(ev->root.x);
if (y + pip->down.y < e_comp_canvas_y_root_adjust(ev->root.y))
cy = y + pip->down.y;
else
cy = e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y);
evas_object_geometry_set(pip->clip, cx, cy, abs(cx - e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x)), abs(cy - e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y)));
cy = e_comp_canvas_y_root_adjust(ev->root.y);
evas_object_geometry_set(pip->clip, cx, cy, abs(cx - e_comp_canvas_x_root_adjust(ev->root.x)), abs(cy - e_comp_canvas_y_root_adjust(ev->root.y)));
}
return ECORE_CALLBACK_RENEW;
}
@ -164,9 +205,9 @@ _pip_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
if (evas_key_modifier_is_set(ev->modifiers, "Control"))
{
if (ev->z < 0)
efx_zoom(pip->pip, EFX_EFFECT_SPEED_LINEAR, 0, pip->zoom -= 0.05, EFX_POINT(ev->output.x, ev->output.y), 0.2, NULL, NULL);
e_efx_zoom(pip->pip, E_EFX_EFFECT_SPEED_LINEAR, 0, pip->zoom -= 0.05, E_EFX_POINT(ev->output.x, ev->output.y), 0.2, NULL, NULL);
else if (ev->z > 0)
efx_zoom(pip->pip, EFX_EFFECT_SPEED_LINEAR, 0, pip->zoom += 0.05, EFX_POINT(ev->output.x, ev->output.y), 0.2, NULL, NULL);
e_efx_zoom(pip->pip, E_EFX_EFFECT_SPEED_LINEAR, 0, pip->zoom += 0.05, E_EFX_POINT(ev->output.x, ev->output.y), 0.2, NULL, NULL);
}
else
{
@ -174,19 +215,29 @@ _pip_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
pip->opacity = E_CLAMP(pip->opacity + 15, 0, 255);
else if (ev->z > 0)
pip->opacity = E_CLAMP(pip->opacity - 15, 0, 255);
efx_fade(pip->pip, EFX_EFFECT_SPEED_LINEAR, EFX_COLOR(pip->opacity, pip->opacity, pip->opacity), pip->opacity, 0.2, NULL, NULL);
e_efx_fade(pip->pip, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_COLOR(pip->opacity, pip->opacity, pip->opacity), pip->opacity, 0.2, NULL, NULL);
}
}
static void
_pip_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
_pip_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
Pip *pip = data;
Evas_Event_Mouse_Up *ev = event_info;
if (pip->crop)
{
evas_object_color_set(pip->clip, 255, 255, 255, 255);
evas_object_clip_set(pip->pip, pip->clip);
int x, y;
evas_object_geometry_get(obj, &x, &y, NULL, NULL);
if ((abs((x + pip->down.x) - ev->output.x) < 3) &&
(abs((y + pip->down.y) - ev->output.y) < 3))
E_FREE_FUNC(pip->clip, evas_object_del);
else
{
evas_object_color_set(pip->clip, 255, 255, 255, 255);
evas_object_clip_set(pip->pip, pip->clip);
}
}
pip->down.x = pip->down.y = 0;
pip->move = pip->resize = pip->crop = 0;
@ -206,9 +257,7 @@ _pip_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
eina_hash_del_by_data(pips, pip);
return;
}
evas_object_geometry_get(obj, &x, &y, &w, &h);
pip->down.x = ev->output.x - x;
pip->down.y = ev->output.y - y;
if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
pip->crop = ev->button == 1;
else if (!evas_key_modifier_is_set(ev->modifiers, "Control"))
@ -216,6 +265,11 @@ _pip_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
pip->move = ev->button == 1;
pip->resize = ev->button == 2;
}
if (pip->clip && (!pip->crop))
obj = pip->clip;
evas_object_geometry_get(obj, &x, &y, &w, &h);
pip->down.x = ev->output.x - x;
pip->down.y = ev->output.y - y;
if (pip->resize)
{
if ((ev->output.x > (x + w / 5)) &&
@ -280,15 +334,6 @@ _pip_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
action_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, (Ecore_Event_Handler_Cb)_pip_mouse_move, pip);
}
static void
_pip_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
E_Client *ec = data;
eina_hash_del_by_key(pips, &ec->frame);
if (editing && (!eina_hash_population(pips)))
pips_noedit();
}
static void
_pip_delete(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED)
{
@ -302,9 +347,9 @@ _pip_manage(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_
}
static void
_pip_fade_end(void *d EINA_UNUSED, Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj)
_pip_fade_end(void *d EINA_UNUSED, E_Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj)
{
ecore_job_add((Ecore_Cb)efx_fade_reset, obj);
ecore_job_add((Ecore_Cb)e_efx_fade_reset, obj);
}
static void
@ -334,10 +379,18 @@ _pip_create(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED)
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_WHEEL, _pip_mouse_wheel, pip);
evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _pip_del, ec);
efx_fade(o, EFX_EFFECT_SPEED_LINEAR, EFX_COLOR(0, 0, 0), 0, 0.0, NULL, NULL);
efx_fade(o, EFX_EFFECT_SPEED_LINEAR, EFX_COLOR(255, 255, 255), 255, 0.2, _pip_fade_end, NULL);
e_efx_fade(o, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_COLOR(0, 0, 0), 0, 0.0, NULL, NULL);
e_efx_fade(o, E_EFX_EFFECT_SPEED_LINEAR, E_EFX_COLOR(255, 255, 255), 255, 0.2, _pip_fade_end, NULL);
eina_hash_add(pips, &ec->frame, pip);
if (editing)
{
evas_object_layer_set(pip->pip, E_LAYER_MENU + 1);
evas_object_pass_events_set(pip->pip, 0);
e_comp_shape_queue();
}
else
pips_edit();
}
static void
@ -380,6 +433,7 @@ _pip_hook(void *d EINA_UNUSED, E_Client *ec)
static void
_pip_action_cb(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
if (!eina_hash_population(pips)) return;
if (editing)
pips_noedit();
else

View File

@ -57,7 +57,7 @@ _edje_custom_setup(Evas_Object *obj, const E_Client *ec, int x, int y, int w, in
static void
_hid(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
{
e_comp_shape_queue(e_comp_util_evas_object_comp_get(obj));
e_comp_shape_queue();
evas_object_hide(obj);
evas_object_del(obj);
}
@ -75,10 +75,10 @@ _zoom_hide(void)
}
else
EINA_LIST_FREE(zoom_objs, zoom_obj)
edje_object_signal_emit(zoom_obj, "e,state,inactive", "e");
elm_layout_signal_emit(zoom_obj, "e,state,inactive", "e");
E_FREE_LIST(handlers, ecore_event_handler_del);
e_comp_ungrab_input(e_comp_get(NULL), 1, 1);
e_comp_shape_queue(e_comp_get(NULL));
e_comp_ungrab_input(1, 1);
e_comp_shape_queue();
current = NULL;
cur_act = NULL;
}
@ -99,6 +99,29 @@ _client_mouse_down(E_Client *ec EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *o
dm = edje_object_part_swallow_get(obj, "e.swallow.client");
}
static void
_client_mouse_out(E_Client *ec EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED)
{
if (current)
edje_object_signal_emit(evas_object_smart_parent_get(eina_list_data_get(current)), "e,state,inactive", "e");
}
static void
_client_mouse_in(E_Client *ec EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *ev EINA_UNUSED)
{
Eina_List *l;
Evas_Object *zoom_obj, *m;
evas_object_raise(obj);
m = edje_object_part_swallow_get(obj, "e.swallow.client");
if (current && (eina_list_data_get(current) != m))
edje_object_signal_emit(evas_object_smart_parent_get(eina_list_data_get(current)), "e,state,inactive", "e");
zoom_obj = evas_object_data_get(obj, "__DSZOOMOBJ");
l = evas_object_data_get(zoom_obj, "__DSCLIENTS");
current = eina_list_data_find_list(l, m);
edje_object_signal_emit(obj, "e,state,active", "e");
}
static void
_client_mouse_up(E_Client *ec, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Evas_Event_Mouse_Up *ev)
{
@ -111,16 +134,16 @@ _client_mouse_up(E_Client *ec, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED
_drag_reset();
return;
}
zone = e_comp_zone_xy_get(e_comp_get(NULL), ev->output.x, ev->output.y);
zone = e_comp_zone_xy_get(ev->output.x, ev->output.y);
desk = e_desk_current_get(zone);
ec->hidden = 0;
e_client_desk_set(ec, desk);
e_client_activate(ec, 1);
evas_object_geometry_get(edje_object_part_swallow_get(dm_drag, "e.swallow.client"), &x, &y, &w, &h);
_edje_custom_setup(dm_drag, ec, x, y, w, h);
evas_object_geometry_get(elm_object_part_content_get(dm_drag, "e.swallow.client"), &x, &y, &w, &h);
_edje_custom_setup(elm_layout_edje_get(dm_drag), ec, x, y, w, h);
edje_object_signal_emit(dm_drag, "e,drag,release", "e");
elm_layout_signal_emit(dm_drag, "e,drag,release", "e");
}
static Eina_Bool
@ -138,29 +161,29 @@ _client_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_Mov
/* no adjust, not X coords */
if ((abs(ev->root.x - dx) < DRAG_RESIST) && (abs(ev->root.y - dy) < DRAG_RESIST)) return ECORE_CALLBACK_RENEW;
dm_drag = edje_object_add(evas_object_evas_get(dm));
dm_drag = elm_layout_add(e_comp->elm);
evas_object_pass_events_set(dm_drag, 1);
evas_object_size_hint_min_get(dm, &w, &h);
e_theme_edje_object_set(dm_drag, NULL, "e/modules/desksanity/zoom/client/drag");
edje_object_signal_callback_add(dm_drag, "e,action,done", "e", _dismiss, NULL);
elm_layout_signal_callback_add(dm_drag, "e,action,done", "e", _dismiss, NULL);
evas_object_layer_set(dm_drag, E_LAYER_POPUP);
evas_object_resize(dm_drag, w, h);
m = e_comp_object_util_mirror_add(dm);
e_comp_object_util_del_list_append(dm_drag, m);
evas_object_size_hint_min_set(m, w, h);
edje_object_part_swallow(dm_drag, "e.swallow.client", m);
elm_object_part_content_set(dm_drag, "e.swallow.client", m);
evas_object_show(dm_drag);
EINA_LIST_FOREACH(zoom_objs, l, zoom_obj)
{
edje_object_signal_emit(zoom_obj, "e,state,dragging", "e");
if (e_comp_object_util_zone_get(zoom_obj) == e_zone_current_get(e_comp_util_evas_object_comp_get(zoom_obj)))
edje_object_signal_emit(zoom_obj, "e,state,current", "e");
elm_layout_signal_emit(zoom_obj, "e,state,dragging", "e");
if (e_comp_object_util_zone_get(zoom_obj) == e_zone_current_get())
elm_layout_signal_emit(zoom_obj, "e,state,current", "e");
}
}
evas_object_move(dm_drag,
e_comp_canvas_x_root_adjust(e_comp_get(NULL), ev->root.x) - (dx - x),
e_comp_canvas_y_root_adjust(e_comp_get(NULL), ev->root.y) - (dy - y));
e_comp_canvas_x_root_adjust(ev->root.x) - (dx - x),
e_comp_canvas_y_root_adjust(ev->root.y) - (dy - y));
return ECORE_CALLBACK_RENEW;
}
@ -171,12 +194,6 @@ _client_activate(void *data, Evas_Object *obj EINA_UNUSED, const char *sig EINA_
_zoom_hide();
}
static void
_client_active(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
{
evas_object_raise(obj);
}
static void
_zoomobj_pack_client(const E_Client *ec, const E_Zone *zone, Evas_Object *tb, Evas_Object *m, unsigned int id, unsigned int cols)
{
@ -200,8 +217,8 @@ _zoomobj_pack_client(const E_Client *ec, const E_Zone *zone, Evas_Object *tb, Ev
r = (id - 1) / cols;
c = (id - 1) % cols;
e_table_pack(tb, e, c, r, 1, 1);
e_table_pack_options_set(e, 0, 0, 0, 0, 0.5, 0.5, zmw + w, zmh + h, 9999, 9999);
evas_object_size_hint_min_set(e, zmw + w, zmh + h);
elm_table_pack(tb, e, c, r, 1, 1);
}
static void
@ -211,30 +228,31 @@ _zoomobj_add_client(Evas_Object *zoom_obj, Eina_List *l, Evas_Object *m)
Evas_Object *ic, *e;
ec = evas_object_data_get(m, "E_Client");
e = edje_object_add(ec->comp->evas);
evas_object_data_set(e, "__DSZOOMOBJ", zoom_obj);
e = elm_layout_add(e_comp->elm);
evas_object_data_set(elm_layout_edje_get(e), "__DSZOOMOBJ", zoom_obj);
e_comp_object_util_del_list_append(zoom_obj, e);
e_comp_object_util_del_list_append(zoom_obj, m);
e_theme_edje_object_set(e, NULL, "e/modules/desksanity/zoom/client");
evas_object_event_callback_add(e, EVAS_CALLBACK_MOUSE_DOWN, (Evas_Object_Event_Cb)_client_mouse_down, ec);
evas_object_event_callback_add(e, EVAS_CALLBACK_MOUSE_UP, (Evas_Object_Event_Cb)_client_mouse_up, ec);
evas_object_event_callback_add(elm_layout_edje_get(e), EVAS_CALLBACK_MOUSE_DOWN, (Evas_Object_Event_Cb)_client_mouse_down, ec);
evas_object_event_callback_add(elm_layout_edje_get(e), EVAS_CALLBACK_MOUSE_UP, (Evas_Object_Event_Cb)_client_mouse_up, ec);
evas_object_event_callback_add(elm_layout_edje_get(e), EVAS_CALLBACK_MOUSE_IN, (Evas_Object_Event_Cb)_client_mouse_in, ec);
evas_object_event_callback_add(elm_layout_edje_get(e), EVAS_CALLBACK_MOUSE_OUT, (Evas_Object_Event_Cb)_client_mouse_out, ec);
if ((!zmw) && (!zmh))
edje_object_size_min_calc(e, &zmw, &zmh);
edje_object_signal_callback_add(e, "e,action,activate", "e", _client_activate, ec);
edje_object_signal_callback_add(e, "e,state,active", "e", _client_active, ec);
edje_object_size_min_calc(elm_layout_edje_get(e), &zmw, &zmh);
elm_layout_signal_callback_add(e, "e,action,activate", "e", _client_activate, ec);
if (e_client_focused_get() == ec)
{
edje_object_signal_emit(e, "e,state,focused", "e");
elm_layout_signal_emit(e, "e,state,focused", "e");
current = l;
}
edje_object_part_swallow(e, "e.swallow.client", m);
edje_object_part_text_set(e, "e.text.title", e_client_util_name_get(ec));
elm_object_part_content_set(e, "e.swallow.client", m);
elm_object_part_text_set(e, "e.text.title", e_client_util_name_get(ec));
if (ec->urgent)
edje_object_signal_emit(e, "e,state,urgent", "e");
ic = e_client_icon_add(ec, ec->comp->evas);
elm_layout_signal_emit(e, "e,state,urgent", "e");
ic = e_client_icon_add(ec, e_comp->evas);
if (ic)
{
edje_object_part_swallow(e, "e.swallow.icon", ic);
elm_object_part_content_set(e, "e.swallow.icon", ic);
e_comp_object_util_del_list_append(zoom_obj, ic);
}
evas_object_show(e);
@ -249,7 +267,8 @@ _zoomobj_position_client(Evas_Object *m)
e = evas_object_smart_parent_get(m);
ec = evas_object_data_get(m, "E_Client");
evas_object_geometry_get(e, &x, &y, &w, &h);
evas_object_geometry_get(e, &x, &y, NULL, NULL);
evas_object_size_hint_min_get(e, &w, &h);
_edje_custom_setup(e, ec, x, y, w, h);
edje_object_signal_emit(e, "e,action,show", "e");
}
@ -262,16 +281,29 @@ _zoom_key(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Key *ev)
if (!e_util_strcmp(ev->key, "Escape"))
_zoom_hide();
else if (!e_util_strcmp(ev->key, "Left"))
n = eina_list_prev(current) ?: eina_list_last(current);
{
if (current)
n = eina_list_prev(current) ?: eina_list_last(current);
else
{
n = evas_object_data_get(eina_list_nth(zoom_objs, e_zone_current_get()->num), "__DSCLIENTS");
n = eina_list_last(n);
}
}
else if (!e_util_strcmp(ev->key, "Right"))
{
n = eina_list_next(current);
if (!n)
if (current)
{
Eina_List *f;
n = eina_list_next(current);
if (!n)
{
Eina_List *f;
for (f = n = current; f; n = f, f = eina_list_prev(f));
for (f = n = current; f; n = f, f = eina_list_prev(f));
}
}
else
n = evas_object_data_get(eina_list_nth(zoom_objs, e_zone_current_get()->num), "__DSCLIENTS");
}
else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter")))
{
@ -286,13 +318,13 @@ _zoom_key(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Key *ev)
E_Zone *zone;
e = evas_object_smart_parent_get(eina_list_data_get(n));
edje_object_signal_emit(e, "e,state,focused", "e");
edje_object_signal_emit(evas_object_smart_parent_get(eina_list_data_get(current)), "e,state,unfocused", "e");
edje_object_signal_emit(e, "e,state,active", "e");
edje_object_signal_emit(evas_object_smart_parent_get(eina_list_data_get(current)), "e,state,inactive", "e");
current = n;
evas_object_geometry_get(e, &x, &y, &w, &h);
scr = edje_object_part_swallow_get(evas_object_data_get(e, "__DSZOOMOBJ"), "e.swallow.layout");
scr = elm_object_part_content_get(evas_object_data_get(e, "__DSZOOMOBJ"), "e.swallow.layout");
zone = e_comp_object_util_zone_get(scr);
e_scrollframe_child_region_show(scr, x - zone->x, y - zone->y, w, h);
elm_scroller_region_bring_in(scr, x - zone->x, y - zone->y, w, h);
}
return ECORE_CALLBACK_DONE;
}
@ -302,25 +334,23 @@ _relayout(Evas_Object *zoom_obj, Evas_Object *scr, Evas_Object *tb)
{
Eina_List *l, *clients;
Evas_Object *m;
int tw, th;
unsigned int id = 1;
clients = evas_object_data_get(zoom_obj, "__DSCLIENTS");
e_comp_object_util_del_list_remove(zoom_obj, tb);
evas_object_del(tb);
tb = e_table_add(evas_object_evas_get(zoom_obj));
tb = elm_table_add(e_comp->elm);
E_EXPAND(tb);
E_FILL(tb);
e_comp_object_util_del_list_append(zoom_obj, tb);
e_table_homogenous_set(tb, 1);
e_table_freeze(tb);
elm_table_homogeneous_set(tb, 1);
EINA_LIST_FOREACH(clients, l, m)
_zoomobj_pack_client(evas_object_data_get(m, "E_Client"),
e_comp_object_util_zone_get(zoom_obj), tb, m, id++,
_cols_calc(eina_list_count(clients)));
e_table_thaw(tb);
e_table_size_min_get(tb, &tw, &th);
evas_object_size_hint_min_set(tb, tw, th);
evas_object_resize(tb, tw, th);
e_scrollframe_child_set(scr, tb);
elm_object_content_set(scr, tb);
evas_object_smart_need_recalculate_set(tb, 1);
evas_object_smart_calculate(tb);
E_LIST_FOREACH(clients, _zoomobj_position_client);
}
@ -338,8 +368,8 @@ _zoom_client_add_post(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *e
if (!m) return;
clients = evas_object_data_get(data, "__DSCLIENTS");
clients = eina_list_append(clients, m);
scr = edje_object_part_swallow_get(data, "e.swallow.layout");
tb = e_pan_child_get(edje_object_part_swallow_get(e_scrollframe_edje_object_get(scr), "e.swallow.content"));
scr = elm_object_part_content_get(data, "e.swallow.layout");
tb = elm_object_content_get(scr);
c = _cols_calc(eina_list_count(clients));
pc = _cols_calc(eina_list_count(clients) - 1);
_zoomobj_add_client(data, eina_list_last(clients), m);
@ -361,7 +391,7 @@ _zoom_client_add(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Client *ev)
if (e_client_util_ignored_get(ev->ec)) return ECORE_CALLBACK_RENEW;
if (ev->ec->iconic && (!e_config->winlist_list_show_iconified)) return ECORE_CALLBACK_RENEW;
if (((cur_act == act_zoom_zone) || (cur_act == act_zoom_desk)) &&
(ev->ec->zone != e_zone_current_get(ev->ec->comp))) return ECORE_CALLBACK_RENEW;
(ev->ec->zone != e_zone_current_get())) return ECORE_CALLBACK_RENEW;
if (((cur_act == act_zoom_desk) || (cur_act == act_zoom_desk_all)) &&
(!ev->ec->desk->visible)) return ECORE_CALLBACK_RENEW;
@ -397,16 +427,15 @@ _zoom_client_del(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Client *ev)
e = evas_object_smart_parent_get(m);
e_comp_object_util_del_list_remove(zoom_obj, m);
e_comp_object_util_del_list_remove(zoom_obj, e);
ic = edje_object_part_swallow_get(e, "e.swallow.icon");
ic = elm_object_part_content_get(e, "e.swallow.icon");
e_comp_object_util_del_list_remove(zoom_obj, ic);
evas_object_del(ic);
evas_object_data_set(zoom_obj, "__DSCLIENTS", eina_list_remove_list(clients, ll));
e_table_unpack(e);
evas_object_del(ic);
evas_object_del(e);
evas_object_del(m);
scr = edje_object_part_swallow_get(zoom_obj, "e.swallow.layout");
tb = e_pan_child_get(edje_object_part_swallow_get(e_scrollframe_edje_object_get(scr), "e.swallow.content"));
scr = elm_object_part_content_get(zoom_obj, "e.swallow.layout");
tb = elm_object_content_get(scr);
_relayout(zoom_obj, scr, tb);
return ECORE_CALLBACK_RENEW;
}
@ -445,12 +474,13 @@ _zoom_client_property(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Client_Pro
static void
_hiding(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
{
Eina_List *clients = evas_object_data_get(obj, "__DSCLIENTS");
Eina_List *clients = evas_object_data_del(obj, "__DSCLIENTS");
Evas_Object *m, *e;
EINA_LIST_FREE(clients, m)
{
e = evas_object_smart_parent_get(m);
evas_object_pass_events_set(e, 1);
edje_object_signal_emit(e, "e,action,hide", "e");
}
}
@ -458,17 +488,15 @@ _hiding(void *data EINA_UNUSED, Evas_Object *obj, const char *sig EINA_UNUSED, c
static void
zoom(Eina_List *clients, E_Zone *zone)
{
E_Comp *comp = zone->comp;
Evas_Object *m, *bg_obj, *scr, *tb, *zoom_obj;
unsigned int cols, id = 1;
int tw, th;
Eina_Stringshare *bgf;
Eina_List *l;
if (!zoom_objs)
{
e_comp_shape_queue(comp);
e_comp_grab_input(comp, 1, 1);
e_comp_shape_queue();
e_comp_grab_input(1, 1);
E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_KEY_DOWN, _zoom_key, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_PROPERTY, _zoom_client_property, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_CLIENT_ADD, _zoom_client_add, NULL);
@ -476,53 +504,52 @@ zoom(Eina_List *clients, E_Zone *zone)
E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_MOUSE_MOVE, _client_mouse_move, NULL);
}
zoom_obj = edje_object_add(comp->evas);
edje_object_signal_callback_add(zoom_obj, "e,state,hiding", "e", _hiding, NULL);
edje_object_signal_callback_add(zoom_obj, "e,action,dismiss", "e", _dismiss, NULL);
edje_object_signal_callback_add(zoom_obj, "e,action,done", "e", _hid, NULL);
evas_object_resize(zoom_obj, zone->w, zone->h);
zoom_obj = elm_layout_add(e_comp->elm);
elm_layout_signal_callback_add(zoom_obj, "e,state,hiding", "e", _hiding, NULL);
elm_layout_signal_callback_add(zoom_obj, "e,action,dismiss", "e", _dismiss, NULL);
elm_layout_signal_callback_add(zoom_obj, "e,action,done", "e", _hid, NULL);
evas_object_geometry_set(zoom_obj, zone->x, zone->y, zone->w, zone->h);
evas_object_layer_set(zoom_obj, E_LAYER_POPUP);
e_theme_edje_object_set(zoom_obj, NULL, "e/modules/desksanity/zoom/base");
bg_obj = e_icon_add(comp->evas);
bgf = e_bg_file_get(comp->man->num, zone->num, zone->desk_x_current, zone->desk_y_current);
bg_obj = e_icon_add(e_comp->evas);
bgf = e_bg_file_get(zone->num, zone->desk_x_current, zone->desk_y_current);
if (eina_str_has_extension(bgf, ".edj"))
e_icon_file_edje_set(bg_obj, bgf, "e/desktop/background");
else
e_icon_file_set(bg_obj, bgf);
eina_stringshare_del(bgf);
e_comp_object_util_del_list_append(zoom_obj, bg_obj);
edje_object_part_swallow(zoom_obj, "e.swallow.background", bg_obj);
elm_object_part_content_set(zoom_obj, "e.swallow.background", bg_obj);
scr = e_scrollframe_add(comp->evas);
e_comp_object_util_del_list_append(zoom_obj, scr);
e_scrollframe_custom_theme_set(scr, NULL, "e/modules/desksanity/zoom/scrollframe");
edje_object_part_swallow(zoom_obj, "e.swallow.layout", scr);
scr = elm_scroller_add(zoom_obj);
e_theme_edje_object_set(scr, NULL, "e/modules/desksanity/zoom/scrollframe");
elm_object_part_content_set(zoom_obj, "e.swallow.layout", scr);
tb = e_table_add(comp->evas);
e_comp_object_util_del_list_append(zoom_obj, tb);
e_table_homogenous_set(tb, 1);
tb = elm_table_add(scr);
E_EXPAND(tb);
E_FILL(tb);
elm_table_homogeneous_set(tb, 1);
evas_object_show(tb);
evas_object_show(zoom_obj);
cols = _cols_calc(eina_list_count(clients));
e_table_freeze(tb);
EINA_LIST_FOREACH(clients, l, m)
{
_zoomobj_add_client(zoom_obj, l, m);
_zoomobj_pack_client(evas_object_data_get(m, "E_Client"), zone, tb, m, id++, cols);
}
e_table_thaw(tb);
e_table_size_min_get(tb, &tw, &th);
evas_object_size_hint_min_set(tb, tw, th);
evas_object_resize(tb, tw, th);
e_scrollframe_child_set(scr, tb);
edje_object_signal_emit(zoom_obj, "e,state,active", "e");
evas_object_geometry_set(tb, zone->x, zone->y, zone->w, zone->h);
evas_object_smart_need_recalculate_set(tb, 1);
evas_object_smart_calculate(tb);
elm_layout_signal_emit(zoom_obj, "e,state,active", "e");
E_LIST_FOREACH(clients, _zoomobj_position_client);
evas_object_data_set(zoom_obj, "__DSCLIENTS", clients);
elm_object_content_set(scr, tb);
zoom_objs = eina_list_append(zoom_objs, zoom_obj);
}
@ -552,13 +579,6 @@ _zoom_begin(Zoom_Filter_Cb cb, E_Zone *zone)
Evas_Object *m;
E_Client *ec;
if (zoom_objs)
{
_zoom_hide();
return;
}
EINA_LIST_FOREACH(e_client_focus_stack_get(), l, ec)
{
if (e_client_util_ignored_get(ec)) continue;
@ -572,41 +592,50 @@ _zoom_begin(Zoom_Filter_Cb cb, E_Zone *zone)
zoom(clients, zone);
}
#define ZOOM_CHECK \
if (zoom_objs) \
{ \
_zoom_hide(); \
return; \
}
static void
_zoom_desk_cb(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
ZOOM_CHECK;
cur_act = act_zoom_desk;
_zoom_begin(_filter_desk, e_zone_current_get(e_comp_get(NULL)));
_zoom_begin(_filter_desk, e_zone_current_get());
}
static void
_zoom_desk_all_cb(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
E_Comp *comp = e_comp_get(NULL);
E_Zone *zone;
Eina_List *l;
ZOOM_CHECK;
cur_act = act_zoom_desk_all;
EINA_LIST_FOREACH(comp->zones, l, zone)
EINA_LIST_FOREACH(e_comp->zones, l, zone)
_zoom_begin(_filter_desk_all, zone);
}
static void
_zoom_zone_cb(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
ZOOM_CHECK;
cur_act = act_zoom_zone;
_zoom_begin(_filter_zone, e_zone_current_get(e_comp_get(NULL)));
_zoom_begin(_filter_zone, e_zone_current_get());
}
static void
_zoom_zone_all_cb(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED)
{
E_Comp *comp = e_comp_get(NULL);
E_Zone *zone;
Eina_List *l;
ZOOM_CHECK;
cur_act = act_zoom_zone_all;
EINA_LIST_FOREACH(comp->zones, l, zone)
EINA_LIST_FOREACH(e_comp->zones, l, zone)
_zoom_begin(_filter_zone, zone);
}
@ -623,7 +652,7 @@ zoom_init(void)
act_zoom_desk_all = e_action_add("zoom_desk_all");
if (act_zoom_desk_all)
{
act_zoom_desk->func.go = _zoom_desk_all_cb;
act_zoom_desk_all->func.go = _zoom_desk_all_cb;
e_action_predef_name_set(D_("Compositor"), D_("Toggle zoom current desks"),
"zoom_desk_all", NULL, NULL, 0);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 501 B