engage: work for me.

SVN revision: 76221
This commit is contained in:
Cedric BAIL 2012-09-06 06:55:19 +00:00
parent 9902c5b3ff
commit 4238bd3f3b
58 changed files with 11314 additions and 0 deletions

96
.gitignore vendored Normal file
View File

@ -0,0 +1,96 @@
*.o
*~
*.swp
*.swo
Makefile
Makefile.in
aclocal.m4
autom4te.cache/
config.guess
config.h
config.h.in
config.log
config.status
config.sub
configure
data/Makefile
data/Makefile.in
data/themes/Makefile
data/themes/Makefile.in
data/themes/engage.edj
depcomp
e-module-ng.edj
e_modules-engage.spec
install-sh
libtool
ltmain.sh
m4/codeset.m4
m4/gettext.m4
m4/glibc21.m4
m4/iconv.m4
m4/intdiv0.m4
m4/intmax.m4
m4/inttypes-pri.m4
m4/inttypes.m4
m4/inttypes_h.m4
m4/isc-posix.m4
m4/lcmessage.m4
m4/lib-ld.m4
m4/lib-link.m4
m4/lib-prefix.m4
m4/libtool.m4
m4/longdouble.m4
m4/longlong.m4
m4/ltoptions.m4
m4/ltsugar.m4
m4/ltversion.m4
m4/lt~obsolete.m4
m4/nls.m4
m4/po.m4
m4/printf-posix.m4
m4/progtest.m4
m4/signed.m4
m4/size_max.m4
m4/stdint_h.m4
m4/uintmax_t.m4
m4/ulonglong.m4
m4/wchar_t.m4
m4/wint_t.m4
m4/xsize.m4
missing
mkinstalldirs
module.desktop
po/Makefile
po/Makefile.in
po/Makevars.template
po/POTFILES
po/Rules-quot
po/boldquot.sed
po/cs.gmo
po/de.gmo
po/en@boldquot.header
po/en@quot.header
po/engage.pot
po/fr.gmo
po/insert-header.sin
po/it.gmo
po/pt.gmo
po/quot.sed
po/remove-potcdate.sin
po/sl.gmo
po/stamp-po
src/.deps/
src/.libs/
src/Makefile
src/Makefile.in
src/e_mod_main.lo
src/module.la
src/ng_border_menu.lo
src/ng_box.lo
src/ng_config.lo
src/ng_config_instances.lo
src/ng_gadcon.lo
src/ng_item.lo
src/ng_launcher.lo
src/ng_taskbar.lo
stamp-h1

768
ABOUT-NLS Normal file
View File

@ -0,0 +1,768 @@
Notes on the Free Translation Project
*************************************
Free software is going international! The Free Translation Project is
a way to get maintainers of free software, translators, and users all
together, so that will gradually become able to speak many languages.
A few packages already provide translations for their messages.
If you found this `ABOUT-NLS' file inside a distribution, you may
assume that the distributed package does use GNU `gettext' internally,
itself available at your nearest GNU archive site. But you do _not_
need to install GNU `gettext' prior to configuring, installing or using
this package with messages translated.
Installers will find here some useful hints. These notes also
explain how users should proceed for getting the programs to use the
available translations. They tell how people wanting to contribute and
work at translations should contact the appropriate team.
When reporting bugs in the `intl/' directory or bugs which may be
related to internationalization, you should tell about the version of
`gettext' which is used. The information can be found in the
`intl/VERSION' file, in internationalized packages.
Quick configuration advice
==========================
If you want to exploit the full power of internationalization, you
should configure it using
./configure --with-included-gettext
to force usage of internationalizing routines provided within this
package, despite the existence of internationalizing capabilities in the
operating system where this package is being installed. So far, only
the `gettext' implementation in the GNU C library version 2 provides as
many features (such as locale alias, message inheritance, automatic
charset conversion or plural form handling) as the implementation here.
It is also not possible to offer this additional functionality on top
of a `catgets' implementation. Future versions of GNU `gettext' will
very likely convey even more functionality. So it might be a good idea
to change to GNU `gettext' as soon as possible.
So you need _not_ provide this option if you are using GNU libc 2 or
you have installed a recent copy of the GNU gettext package with the
included `libintl'.
INSTALL Matters
===============
Some packages are "localizable" when properly installed; the programs
they contain can be made to speak your own native language. Most such
packages use GNU `gettext'. Other packages have their own ways to
internationalization, predating GNU `gettext'.
By default, this package will be installed to allow translation of
messages. It will automatically detect whether the system already
provides the GNU `gettext' functions. If not, the GNU `gettext' own
library will be used. This library is wholly contained within this
package, usually in the `intl/' subdirectory, so prior installation of
the GNU `gettext' package is _not_ required. Installers may use
special options at configuration time for changing the default
behaviour. The commands:
./configure --with-included-gettext
./configure --disable-nls
will respectively bypass any pre-existing `gettext' to use the
internationalizing routines provided within this package, or else,
_totally_ disable translation of messages.
When you already have GNU `gettext' installed on your system and run
configure without an option for your new package, `configure' will
probably detect the previously built and installed `libintl.a' file and
will decide to use this. This might be not what is desirable. You
should use the more recent version of the GNU `gettext' library. I.e.
if the file `intl/VERSION' shows that the library which comes with this
package is more recent, you should use
./configure --with-included-gettext
to prevent auto-detection.
The configuration process will not test for the `catgets' function
and therefore it will not be used. The reason is that even an
emulation of `gettext' on top of `catgets' could not provide all the
extensions of the GNU `gettext' library.
Internationalized packages have usually many `po/LL.po' files, where
LL gives an ISO 639 two-letter code identifying the language. Unless
translations have been forbidden at `configure' time by using the
`--disable-nls' switch, all available translations are installed
together with the package. However, the environment variable `LINGUAS'
may be set, prior to configuration, to limit the installed set.
`LINGUAS' should then contain a space separated list of two-letter
codes, stating which languages are allowed.
Using This Package
==================
As a user, if your language has been installed for this package, you
only have to set the `LANG' environment variable to the appropriate
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
and `CC' is an ISO 3166 two-letter country code. For example, let's
suppose that you speak German and live in Germany. At the shell
prompt, merely execute `setenv LANG de_DE' (in `csh'),
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
This can be done from your `.login' or `.profile' file, once and for
all.
You might think that the country code specification is redundant.
But in fact, some languages have dialects in different countries. For
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
country code serves to distinguish the dialects.
The locale naming convention of `LL_CC', with `LL' denoting the
language and `CC' denoting the country, is the one use on systems based
on GNU libc. On other systems, some variations of this scheme are
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
locales supported by your system for your country by running the command
`locale -a | grep '^LL''.
Not all programs have translations for all languages. By default, an
English message is shown in place of a nonexistent translation. If you
understand other languages, you can set up a priority list of languages.
This is done through a different environment variable, called
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
for the purpose of message handling, but you still need to have `LANG'
set to the primary language; this is required by other parts of the
system libraries. For example, some Swedish users who would rather
read translations in German than English for when Swedish is not
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
Special advice for Norwegian users: The language code for Norwegian
bokma*l changed from `no' to `nb' recently (in 2003). During the
transition period, while some message catalogs for this language are
installed under `nb' and some older ones under `no', it's recommended
for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
older translations are used.
In the `LANGUAGE' environment variable, but not in the `LANG'
environment variable, `LL_CC' combinations can be abbreviated as `LL'
to denote the language's main dialect. For example, `de' is equivalent
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
(Portuguese as spoken in Portugal) in this context.
Translating Teams
=================
For the Free Translation Project to be a success, we need interested
people who like their own language and write it well, and who are also
able to synergize with other translators speaking the same language.
Each translation team has its own mailing list. The up-to-date list of
teams can be found at the Free Translation Project's homepage,
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
area.
If you'd like to volunteer to _work_ at translating messages, you
should become a member of the translating team for your own language.
The subscribing address is _not_ the same as the list itself, it has
`-request' appended. For example, speakers of Swedish can send a
message to `sv-request@li.org', having this message body:
subscribe
Keep in mind that team members are expected to participate
_actively_ in translations, or at solving translational difficulties,
rather than merely lurking around. If your team does not exist yet and
you want to start one, or if you are unsure about what to do or how to
get started, please write to `translation@iro.umontreal.ca' to reach the
coordinator for all translator teams.
The English team is special. It works at improving and uniformizing
the terminology in use. Proven linguistic skill are praised more than
programming skill, here.
Available Packages
==================
Languages are not equally supported in all packages. The following
matrix shows the current state of internationalization, as of January
2004. The matrix shows, in regard of each package, for which languages
PO files have been submitted to translation coordination, with a
translation percentage of at least 50%.
Ready PO files af am ar az be bg bs ca cs da de el en en_GB eo es
+----------------------------------------------------+
a2ps | [] [] [] [] |
aegis | () |
ant-phone | () |
anubis | |
ap-utils | |
aspell | [] |
bash | [] [] [] [] |
batchelor | |
bfd | [] [] |
binutils | [] [] |
bison | [] [] [] |
bluez-pin | [] [] [] |
clisp | |
clisp | [] [] [] |
console-tools | [] [] |
coreutils | [] [] [] [] |
cpio | [] [] [] |
darkstat | [] () [] |
diffutils | [] [] [] [] [] [] [] |
e2fsprogs | [] [] [] |
enscript | [] [] [] [] |
error | [] [] [] [] [] |
fetchmail | [] () [] [] [] [] |
fileutils | [] [] [] |
findutils | [] [] [] [] [] [] [] |
flex | [] [] [] [] |
fslint | |
gas | [] |
gawk | [] [] [] [] |
gbiff | [] |
gcal | [] |
gcc | [] [] |
gettext | [] [] [] [] [] |
gettext-examples | [] [] [] [] |
gettext-runtime | [] [] [] [] [] |
gettext-tools | [] [] [] |
gimp-print | [] [] [] [] [] |
gliv | |
glunarclock | [] [] |
gnubiff | [] |
gnucash | [] () [] [] |
gnucash-glossary | [] () [] |
gnupg | [] () [] [] [] [] |
gpe-aerial | [] |
gpe-beam | [] [] |
gpe-calendar | [] [] |
gpe-clock | [] [] |
gpe-conf | [] [] |
gpe-contacts | [] [] |
gpe-edit | [] |
gpe-go | [] |
gpe-login | [] [] |
gpe-ownerinfo | [] [] |
gpe-sketchbook | [] [] |
gpe-su | [] [] |
gpe-taskmanager | [] [] |
gpe-timesheet | [] |
gpe-today | [] [] |
gpe-todo | [] [] |
gphoto2 | [] [] [] [] |
gprof | [] [] [] |
gpsdrive | () () () |
gramadoir | [] |
grep | [] [] [] [] [] [] |
gretl | [] |
gtick | [] () |
hello | [] [] [] [] [] [] |
id-utils | [] [] |
indent | [] [] [] [] |
iso_3166 | [] [] [] [] [] [] [] [] [] [] |
iso_3166_1 | [] [] [] [] [] [] |
iso_3166_2 | |
iso_3166_3 | [] |
iso_4217 | [] [] [] [] |
iso_639 | |
jpilot | [] [] [] |
jtag | |
jwhois | [] |
kbd | [] [] [] [] [] |
latrine | () |
ld | [] [] |
libc | [] [] [] [] [] [] |
libgpewidget | [] [] |
libiconv | [] [] [] [] [] |
lifelines | [] () |
lilypond | [] |
lingoteach | |
lingoteach_lessons | () () |
lynx | [] [] [] [] |
m4 | [] [] [] [] |
mailutils | [] [] |
make | [] [] [] |
man-db | [] () [] [] () |
minicom | [] [] [] |
mysecretdiary | [] [] [] |
nano | [] () [] [] [] |
nano_1_0 | [] () [] [] [] |
opcodes | [] |
parted | [] [] [] [] [] |
ptx | [] [] [] [] [] |
python | |
radius | [] |
recode | [] [] [] [] [] [] [] |
rpm | [] [] |
screem | |
scrollkeeper | [] [] [] [] [] [] |
sed | [] [] [] [] [] [] |
sh-utils | [] [] [] |
shared-mime-info | |
sharutils | [] [] [] [] [] [] |
silky | () |
skencil | [] () [] |
sketch | [] () [] |
soundtracker | [] [] [] |
sp | [] |
tar | [] [] [] [] |
texinfo | [] [] [] |
textutils | [] [] [] [] |
tin | () () |
tp-robot | |
tuxpaint | [] [] [] [] [] [] [] |
unicode-han-tra... | |
unicode-transla... | |
util-linux | [] [] [] [] [] |
vorbis-tools | [] [] [] [] |
wastesedge | () |
wdiff | [] [] [] [] |
wget | [] [] [] [] [] [] |
xchat | [] [] [] [] |
xfree86_xkb_xml | [] [] |
xpad | [] |
+----------------------------------------------------+
af am ar az be bg bs ca cs da de el en en_GB eo es
4 0 0 1 9 4 1 40 41 60 78 17 1 5 13 68
et eu fa fi fr ga gl he hr hu id is it ja ko lg
+-------------------------------------------------+
a2ps | [] [] [] () () |
aegis | |
ant-phone | [] |
anubis | [] |
ap-utils | [] |
aspell | [] [] |
bash | [] [] |
batchelor | [] [] |
bfd | [] |
binutils | [] [] |
bison | [] [] [] [] |
bluez-pin | [] [] [] [] [] |
clisp | |
clisp | [] |
console-tools | |
coreutils | [] [] [] [] [] [] |
cpio | [] [] [] [] |
darkstat | () [] [] [] |
diffutils | [] [] [] [] [] [] [] |
e2fsprogs | |
enscript | [] [] |
error | [] [] [] [] |
fetchmail | [] |
fileutils | [] [] [] [] [] [] |
findutils | [] [] [] [] [] [] [] [] [] [] [] |
flex | [] [] [] |
fslint | [] |
gas | [] |
gawk | [] [] [] |
gbiff | [] |
gcal | [] |
gcc | [] |
gettext | [] [] [] |
gettext-examples | [] [] |
gettext-runtime | [] [] [] [] [] |
gettext-tools | [] [] [] |
gimp-print | [] [] |
gliv | () |
glunarclock | [] [] [] [] |
gnubiff | [] |
gnucash | () [] |
gnucash-glossary | [] |
gnupg | [] [] [] [] [] [] [] |
gpe-aerial | [] |
gpe-beam | [] |
gpe-calendar | [] [] [] |
gpe-clock | [] |
gpe-conf | [] |
gpe-contacts | [] [] |
gpe-edit | [] [] |
gpe-go | [] |
gpe-login | [] [] |
gpe-ownerinfo | [] [] [] |
gpe-sketchbook | [] |
gpe-su | [] |
gpe-taskmanager | [] |
gpe-timesheet | [] [] [] |
gpe-today | [] [] |
gpe-todo | [] [] |
gphoto2 | [] [] [] |
gprof | [] [] |
gpsdrive | () () () |
gramadoir | [] [] |
grep | [] [] [] [] [] [] [] [] [] [] [] |
gretl | [] [] |
gtick | [] [] [] |
hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
id-utils | [] [] [] [] |
indent | [] [] [] [] [] [] [] [] [] |
iso_3166 | [] [] [] [] [] [] [] |
iso_3166_1 | [] [] [] [] [] |
iso_3166_2 | |
iso_3166_3 | |
iso_4217 | [] [] [] [] [] [] |
iso_639 | |
jpilot | [] () |
jtag | [] |
jwhois | [] [] [] [] |
kbd | [] |
latrine | [] |
ld | [] |
libc | [] [] [] [] [] [] |
libgpewidget | [] [] [] [] |
libiconv | [] [] [] [] [] [] [] [] [] |
lifelines | () |
lilypond | [] |
lingoteach | [] [] |
lingoteach_lessons | |
lynx | [] [] [] [] |
m4 | [] [] [] [] |
mailutils | |
make | [] [] [] [] [] [] |
man-db | () () |
minicom | [] [] [] [] |
mysecretdiary | [] [] |
nano | [] [] [] [] |
nano_1_0 | [] [] [] [] |
opcodes | [] |
parted | [] [] [] |
ptx | [] [] [] [] [] [] [] |
python | |
radius | [] |
recode | [] [] [] [] [] [] |
rpm | [] [] |
screem | |
scrollkeeper | [] |
sed | [] [] [] [] [] [] [] [] [] |
sh-utils | [] [] [] [] [] [] [] |
shared-mime-info | [] [] [] |
sharutils | [] [] [] [] [] |
silky | () [] () () |
skencil | [] |
sketch | [] |
soundtracker | [] [] |
sp | [] () |
tar | [] [] [] [] [] [] [] [] [] |
texinfo | [] [] [] [] |
textutils | [] [] [] [] [] [] |
tin | [] () |
tp-robot | [] |
tuxpaint | [] [] [] [] [] [] [] [] [] |
unicode-han-tra... | |
unicode-transla... | [] [] |
util-linux | [] [] [] [] () [] |
vorbis-tools | [] |
wastesedge | () |
wdiff | [] [] [] [] [] [] |
wget | [] [] [] [] [] [] [] |
xchat | [] [] [] |
xfree86_xkb_xml | [] [] |
xpad | [] [] |
+-------------------------------------------------+
et eu fa fi fr ga gl he hr hu id is it ja ko lg
22 2 1 26 106 28 24 8 10 41 33 1 26 33 12 0
lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
+-----------------------------------------------------+
a2ps | [] [] () () [] [] [] |
aegis | () () () |
ant-phone | [] [] |
anubis | [] [] [] [] [] [] |
ap-utils | [] () [] |
aspell | [] |
bash | [] [] [] |
batchelor | [] |
bfd | [] |
binutils | [] |
bison | [] [] [] [] [] |
bluez-pin | [] [] [] |
clisp | |
clisp | [] |
console-tools | [] |
coreutils | [] [] |
cpio | [] [] [] [] [] |
darkstat | [] [] [] [] |
diffutils | [] [] [] [] [] [] |
e2fsprogs | [] |
enscript | [] [] [] [] |
error | [] [] [] |
fetchmail | [] [] () [] |
fileutils | [] [] [] |
findutils | [] [] [] [] [] |
flex | [] [] [] [] |
fslint | [] [] |
gas | |
gawk | [] [] [] |
gbiff | [] [] |
gcal | |
gcc | |
gettext | [] [] [] |
gettext-examples | [] [] [] |
gettext-runtime | [] [] [] [] |
gettext-tools | [] [] |
gimp-print | [] |
gliv | [] [] [] |
glunarclock | [] [] [] [] |
gnubiff | [] |
gnucash | [] [] () [] |
gnucash-glossary | [] [] |
gnupg | [] |
gpe-aerial | [] [] [] [] |
gpe-beam | [] [] [] [] |
gpe-calendar | [] [] [] [] |
gpe-clock | [] [] [] [] |
gpe-conf | [] [] [] [] |
gpe-contacts | [] [] [] [] |
gpe-edit | [] [] [] [] |
gpe-go | [] [] [] |
gpe-login | [] [] [] [] |
gpe-ownerinfo | [] [] [] [] |
gpe-sketchbook | [] [] [] [] |
gpe-su | [] [] [] [] |
gpe-taskmanager | [] [] [] [] |
gpe-timesheet | [] [] [] [] |
gpe-today | [] [] [] [] |
gpe-todo | [] [] [] [] |
gphoto2 | [] |
gprof | [] [] |
gpsdrive | () () [] |
gramadoir | () [] |
grep | [] [] [] [] [] |
gretl | |
gtick | [] [] [] |
hello | [] [] [] [] [] [] [] [] [] [] |
id-utils | [] [] [] [] |
indent | [] [] [] [] |
iso_3166 | [] [] [] |
iso_3166_1 | [] [] |
iso_3166_2 | |
iso_3166_3 | [] |
iso_4217 | [] [] [] [] [] [] [] [] |
iso_639 | [] |
jpilot | () () |
jtag | |
jwhois | [] [] [] [] () |
kbd | [] [] [] |
latrine | [] |
ld | |
libc | [] [] [] [] |
libgpewidget | [] [] [] |
libiconv | [] [] [] [] [] |
lifelines | |
lilypond | |
lingoteach | |
lingoteach_lessons | |
lynx | [] [] [] |
m4 | [] [] [] [] [] |
mailutils | [] [] [] |
make | [] [] [] [] |
man-db | [] |
minicom | [] [] [] [] |
mysecretdiary | [] [] [] |
nano | [] [] [] [] [] |
nano_1_0 | [] [] [] [] [] [] |
opcodes | [] [] |
parted | [] [] [] [] |
ptx | [] [] [] [] [] [] [] [] |
python | |
radius | [] [] |
recode | [] [] [] [] |
rpm | [] [] [] |
screem | |
scrollkeeper | [] [] [] [] [] |
sed | [] [] [] |
sh-utils | [] [] |
shared-mime-info | [] [] |
sharutils | [] [] |
silky | () |
skencil | [] [] |
sketch | [] [] |
soundtracker | |
sp | |
tar | [] [] [] [] [] [] |
texinfo | [] [] [] [] |
textutils | [] [] |
tin | |
tp-robot | [] |
tuxpaint | [] [] [] [] [] [] [] [] |
unicode-han-tra... | |
unicode-transla... | |
util-linux | [] [] [] |
vorbis-tools | [] [] [] |
wastesedge | |
wdiff | [] [] [] [] [] |
wget | [] [] [] |
xchat | [] [] [] |
xfree86_xkb_xml | [] [] |
xpad | [] [] |
+-----------------------------------------------------+
lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
1 2 0 3 12 0 10 69 6 7 1 40 26 36 76 63
sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
+-----------------------------------------------------+
a2ps | [] [] [] [] | 16
aegis | | 0
ant-phone | | 3
anubis | [] [] | 9
ap-utils | () | 3
aspell | | 4
bash | | 9
batchelor | | 3
bfd | [] [] | 6
binutils | [] [] [] | 8
bison | [] [] | 14
bluez-pin | [] [] [] | 14
clisp | | 0
clisp | | 5
console-tools | | 3
coreutils | [] [] [] [] | 16
cpio | [] [] | 14
darkstat | [] [] [] () () | 12
diffutils | [] [] [] | 23
e2fsprogs | [] [] | 6
enscript | [] [] | 12
error | [] [] [] | 15
fetchmail | [] [] | 11
fileutils | [] [] [] [] [] | 17
findutils | [] [] [] [] [] [] | 29
flex | [] [] | 13
fslint | | 3
gas | [] | 3
gawk | [] [] | 12
gbiff | | 4
gcal | [] [] | 4
gcc | [] | 4
gettext | [] [] [] [] [] | 16
gettext-examples | [] [] [] [] [] | 14
gettext-runtime | [] [] [] [] [] [] [] [] | 22
gettext-tools | [] [] [] [] [] [] | 14
gimp-print | [] [] | 10
gliv | | 3
glunarclock | [] [] [] | 13
gnubiff | | 3
gnucash | [] [] | 9
gnucash-glossary | [] [] [] | 8
gnupg | [] [] [] [] | 17
gpe-aerial | [] | 7
gpe-beam | [] | 8
gpe-calendar | [] [] [] [] | 13
gpe-clock | [] [] [] | 10
gpe-conf | [] [] | 9
gpe-contacts | [] [] [] | 11
gpe-edit | [] [] [] [] [] | 12
gpe-go | | 5
gpe-login | [] [] [] [] [] | 13
gpe-ownerinfo | [] [] [] [] | 13
gpe-sketchbook | [] [] | 9
gpe-su | [] [] [] | 10
gpe-taskmanager | [] [] [] | 10
gpe-timesheet | [] [] [] [] | 12
gpe-today | [] [] [] [] [] | 13
gpe-todo | [] [] [] [] | 12
gphoto2 | [] [] [] | 11
gprof | [] [] | 9
gpsdrive | [] [] | 3
gramadoir | [] | 5
grep | [] [] [] [] | 26
gretl | | 3
gtick | | 7
hello | [] [] [] [] [] | 34
id-utils | [] [] | 12
indent | [] [] [] [] | 21
iso_3166 | [] [] [] [] [] [] [] | 27
iso_3166_1 | [] [] [] | 16
iso_3166_2 | | 0
iso_3166_3 | | 2
iso_4217 | [] [] [] [] [] [] | 24
iso_639 | | 1
jpilot | [] [] [] [] [] | 9
jtag | [] | 2
jwhois | () [] [] | 11
kbd | [] [] | 11
latrine | | 2
ld | [] [] | 5
libc | [] [] [] [] | 20
libgpewidget | [] [] [] [] | 13
libiconv | [] [] [] [] [] [] [] [] | 27
lifelines | [] | 2
lilypond | [] | 3
lingoteach | | 2
lingoteach_lessons | () | 0
lynx | [] [] [] | 14
m4 | [] [] | 15
mailutils | | 5
make | [] [] [] | 16
man-db | [] | 5
minicom | | 11
mysecretdiary | [] [] | 10
nano | [] [] [] [] | 17
nano_1_0 | [] [] [] | 17
opcodes | [] [] | 6
parted | [] [] [] | 15
ptx | [] [] | 22
python | | 0
radius | | 4
recode | [] [] [] | 20
rpm | [] [] | 9
screem | [] [] | 2
scrollkeeper | [] [] [] | 15
sed | [] [] [] [] [] [] | 24
sh-utils | [] [] | 14
shared-mime-info | [] [] | 7
sharutils | [] [] [] [] | 17
silky | () | 3
skencil | [] | 6
sketch | [] | 6
soundtracker | [] [] | 7
sp | [] | 3
tar | [] [] [] [] [] | 24
texinfo | [] [] [] | 14
textutils | [] [] [] [] | 16
tin | | 1
tp-robot | | 2
tuxpaint | [] [] [] [] [] | 29
unicode-han-tra... | | 0
unicode-transla... | | 2
util-linux | [] [] | 15
vorbis-tools | | 8
wastesedge | | 0
wdiff | [] [] [] | 18
wget | [] [] [] [] [] [] [] [] | 24
xchat | [] [] [] [] [] | 15
xfree86_xkb_xml | [] [] [] [] [] | 11
xpad | | 5
+-----------------------------------------------------+
63 teams sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
131 domains 47 19 28 83 0 0 59 13 1 1 11 0 22 22 0 1373
Some counters in the preceding matrix are higher than the number of
visible blocks let us expect. This is because a few extra PO files are
used for implementing regional variants of languages, or language
dialects.
For a PO file in the matrix above to be effective, the package to
which it applies should also have been internationalized and
distributed as such by its maintainer. There might be an observable
lag between the mere existence a PO file and its wide availability in a
distribution.
If January 2004 seems to be old, you may fetch a more recent copy of
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
matrix with full percentage details can be found at
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
Using `gettext' in new packages
===============================
If you are writing a freely available program and want to
internationalize it you are welcome to use GNU `gettext' in your
package. Of course you have to respect the GNU Library General Public
License which covers the use of the GNU `gettext' library. This means
in particular that even non-free programs can use `libintl' as a shared
library, whereas only free software can use `libintl' as a static
library or use modified versions of `libintl'.
Once the sources are changed appropriately and the setup can handle
the use of `gettext' the only thing missing are the translations. The
Free Translation Project is also available for packages which are not
developed inside the GNU project. Therefore the information given above
applies also for every other Free Software Project. Contact
`translation@iro.umontreal.ca' to make the `.pot' files available to
the translation teams.

7
AUTHORS Normal file
View File

@ -0,0 +1,7 @@
Hannes Janetzek <jeff@tzi.de>
Derived from ibox by
The Rasterman (Carsten Haitzler) <raster@rasterman.com>
The Enlightenment Development Team
and Engage by
Andrew Williams

28
COPYING Normal file
View File

@ -0,0 +1,28 @@
Copyright (C) 2000 Carsten Haitzler and various contributors (see AUTHORS)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies of the Software and its Copyright notices. In addition publicly
documented acknowledgment must be given that this software has been used if no
source code of this software is made available publicly. This includes
acknowledgments in either Copyright notices, Manuals, Publicity and Marketing
documents or any documentation provided with any product containing this
software. This License does not apply to any software that links to the
libraries provided by this software (statically or dynamically), but only to
the software provided.
Please see the COPYING.PLAIN for a plain-english explanation of this notice
and it's intent.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

34
COPYING-PLAIN Normal file
View File

@ -0,0 +1,34 @@
Plain English Copyright Notice
This file is not intended to be the actual License. The reason this file
exists is that we here are programmers and engineers. We aren't lawyers. We
provide licenses that we THINK say the right things, but we have our own
intentions at heart. This is a plain-english explanation of what those
intentions are, and if you follow them you will be within the "spirit" of
the license.
The intent is for us to enjoy writing software that is useful to us (the
AUTHORS) and allow others to use it freely and also benefit from the work we
put into making it. We don't want to restrict others using it. They should
not *HAVE* to make the source code of the applications they write that
simply link to these libraries (be that statically or dynamically), or for
them to be limited as to what license they choose to use (be it open, closed
or anything else). But we would like to know you are using these libraries.
We simply would like to know that it has been useful to someone. This is why
we ask for acknowledgement of some sort.
You can do what you want with the source of this software - it doesn't
matter. We still have it here for ourselves and it is open and free to use
and download and play with. It can't be taken away. We don't really mind what
you do with the source to your software. We would simply like to know that
you are using it - especially if it makes it to a commerical product. If you
simply e-mail all the AUTHORS (see COPYING and AUTHORS files) telling us, and
then make sure you include a paragraph or page in the manual for the product
with the copyright notice and state that you used this software, we will be
very happy. If you want to contribute back modifications and fixes you may have
made we will welcome those too with open arms (generally). If you want help
with changes needed, ports needed or features to be added, arrangements can
be easily made with some dialogue.
Carsten Haitzler <raster@rasterman.com>
Hannes Janetzek <jeff@tzi.de>

3
CREDITS Normal file
View File

@ -0,0 +1,3 @@
This module was started under the name of itask-ng based on itask
and using the zoom functions of the original 'engage' by Andrew Williams.

2
ChangeLog Normal file
View File

@ -0,0 +1,2 @@

10
INSTALL Normal file
View File

@ -0,0 +1,10 @@
COMPILING and INSTALLING:
If you got a official release tar archive do:
./autogen.sh
Then to compile:
make
To install (run this user):
make install

34
Makefile.am Normal file
View File

@ -0,0 +1,34 @@
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
SUBDIRS = src data
if HAVE_PO
SUBDIRS += po
endif
EDJE_FLAGS = -v \
-id $(top_srcdir)
filesdir = $(datadir)
files_DATA = module_icon.png module.desktop e-module-ng.edj
EXTRA_DIST = module.desktop.in \
module_icon.png \
e-module-ng.edc \
e_modules-engage.spec
%.edj: %.edc
$(EDJE_CC) $(EDJE_FLAGS) $< $@
clean-local:
rm -rf e-module-ng.edj module.desktop *~
uninstall:
rm -rf $(DESTDIR)$(datadir)

1
NEWS Normal file
View File

@ -0,0 +1 @@
No news is good news.

22
README Normal file
View File

@ -0,0 +1,22 @@
Engage Module
Engage will hold all of your open applications for fast switching and
is also an apllication launcher.
There are three basic functionalities that you dont want to miss:
1. If you click on an icon the corresponding will be shown and
raised to the top and if its on another desk, then you will
be switched right to it.
2. If you drag an icon out of NG the App will be shown on the
current desktop.
3. Drag an icon to a pagers desk to send it there.
lots of other stuff that you have to find out yourself for now :)
Installation:
./autogen.sh
make
make install

1
TODO Normal file
View File

@ -0,0 +1 @@
- check if below fullscreen works in shaped mode

15
autogen.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/sh
rm -rf autom4te.cache
rm -f aclocal.m4 ltmain.sh
echo "Running autopoint..." ; autopoint -f || :
echo "Running aclocal..." ; aclocal -I m4 $ACLOCAL_FLAGS || exit 1
echo "Running autoheader..." ; autoheader || exit 1
echo "Running autoconf..." ; autoconf || exit 1
echo "Running libtoolize..." ; (libtoolize --copy --automake || glibtoolize --automake) || exit 1
echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1
if [ -z "$NOCONFIGURE" ]; then
./configure "$@"
fi

75
configure.ac Normal file
View File

@ -0,0 +1,75 @@
dnl Process this file with autoconf to produce a configure script.
# get rid of that stupid cache mechanism
rm -f config.cache
AC_INIT(engage, 1.0.0, hannes.janetzek@gmail.com)
AC_PREREQ(2.52)
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE(1.6)
AC_CONFIG_SRCDIR(configure.ac)
AM_CONFIG_HEADER(config.h)
AC_ISC_POSIX
AC_PROG_CC
AM_PROG_CC_STDC
AC_HEADER_STDC
AC_C_CONST
AM_ENABLE_SHARED
AC_PROG_LIBTOOL
m4_ifdef([AM_GNU_GETTEXT_VERSION], [
AM_GNU_GETTEXT_VERSION([0.14])
])
m4_ifdef([AM_GNU_GETTEXT], [
AM_GNU_GETTEXT([external])
po_makefile_in=po/Makefile.in
AM_CONDITIONAL([HAVE_PO], [true])
],[
AM_CONDITIONAL([HAVE_PO], [false])
])
AC_SUBST(LTLIBINTL)
release=$(pkg-config --variable=release enlightenment)
MODULE_ARCH="$host_os-$host_cpu-$release"
AC_SUBST(MODULE_ARCH)
AC_DEFINE_UNQUOTED(MODULE_ARCH, "$MODULE_ARCH", "Module architecture")
# Find edje_cc
PKG_CHECK_MODULES(EDJE, [edje >= 0.5.0])
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})
PKG_CHECK_MODULES(E, [enlightenment])
datadir=$(pkg-config --variable=modules enlightenment)/${PACKAGE}
AC_ARG_ENABLE(homedir-install,
AS_HELP_STRING([--enable-homedir-install], [Install module in homedir]),
[ datadir="${HOME}/.e/e/modules/${PACKAGE}" ]
)
AC_OUTPUT([
Makefile
data/Makefile
data/themes/Makefile
src/Makefile
module.desktop
e_modules-engage.spec
$po_makefile_in
],[
])

3
data/Makefile.am Normal file
View File

@ -0,0 +1,3 @@
MAINTAINERCLEANFILES = Makefile.in
SUBDIRS = themes

18
data/themes/Makefile.am Normal file
View File

@ -0,0 +1,18 @@
MAINTAINERCLEANFILES = Makefile.in
EDJE_FLAGS = -v -id $(top_srcdir)/data/themes -fd $(top_srcdir)/data/themes
filesdir = $(datadir)
files_DATA = \
engage.edj
EXTRA_DIST = $(files_DATA)
%.edj: %.edc
$(EDJE_CC) $(EDJE_FLAGS) $< $@
clean-local:
rm -f *.edj

BIN
data/themes/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

BIN
data/themes/bg_detour.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
data/themes/clip_over.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

714
data/themes/engage.edc Normal file
View File

@ -0,0 +1,714 @@
#define BG_OFFSET 12
#define HOVER_EFFECT 0
#define TRANSLUCENT 1
images
{
image:"itask_im0.png" COMP;
image:"itask_im1.png" COMP;
image:"itask_im2.png" COMP;
image:"itask_im3.png" COMP;
image:"itask_im4.png" COMP;
image:"itask_im5.png" COMP;
image:"itask_im6.png" COMP;
image:"bg.png" COMP;
}
collections{
group {
/* bg frame that keeps is not affected by 'Background
* Transparency' setting */
name: "e/modules/engage/frame_bottom";
alias: "e/modules/engage/frame_top";
alias: "e/modules/engage/frame_left";
alias: "e/modules/engage/frame_right";
data {
/* space between icons */
item: "icon_spacing" "3";
/* space between boxes */
item: "separator_width" "24";
/* space between screen edge and icons */
item: "edge_offset" "5";
/* clip separator to background group
* change opacity with background transparency */
item: "clip_separator" "1";
/* extra space between icons and bg
(required for autohide to hide the whole background) */
item: "bg_offset" "10";
}
parts {
part {
name: "frame";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
visible: 0;
}
}
}
}
group {
name: "e/modules/engage/bg_bottom";
alias: "e/modules/engage/bg_top";
alias: "e/modules/engage/bg_left";
alias: "e/modules/engage/bg_right";
parts {
part {
name: "bg";
mouse_events: 0;
description {
state: "default" 0.0;
rel1.offset: (-BG_OFFSET) (-BG_OFFSET);
rel2.offset: (-1 + BG_OFFSET) (-1 + BG_OFFSET);
image {
normal: "bg.png";
border: 6 6 6 6;
}
}
}
}
}
/* the vertical and horizontal separator image. it can be a rectangle
* as it is in this example.
*/
#define SEPARATOR(NAME, MAX, ALIGN, OFF1, OFF2) \
group { \
name: NAME; \
parts { \
part { \
name: "separator"; \
type: RECT; \
mouse_events: 0; \
description { \
state: "default" 0.0; \
color: 255 255 255 200; \
max: MAX; \
align: ALIGN; \
rel1.offset: OFF1; \
rel2.offset: OFF2; \
} \
} \
} \
}
SEPARATOR("e/modules/engage/separator_bottom", 2 999, 0.5 0.0, 0 -8, -1 -1);
SEPARATOR("e/modules/engage/separator_top", 2 999, 0.5 0.0, 0 0, -1 7);
SEPARATOR("e/modules/engage/separator_left", 999 2, 0.0 0.5, 0 0, 7 -1);
SEPARATOR("e/modules/engage/separator_right", 999 2, 0.0 0.5, -8 0, -1 -1);
#define LABEL(NAME, DECOR, ALIGN) \
group { \
name: "e/modules/engage/label_"NAME""; \
parts { \
part { \
name: "label"; \
type: IMAGE; \
mouse_events: 0; \
clip_to: "label.clip"; \
description { \
state: "default" 0.0; \
align: 0.5 0.5; \
color: 0 0 0 148; \
max: 999 26; \
rel1 { \
to: "e.text.label"; \
offset: -8 -2; \
} \
rel2 { \
to: "e.text.label"; \
offset: 4 -1; \
} \
image { \
normal: "itask_im4.png"; \
border: 5 5 5 5; \
} \
} \
} \
part { \
name: "label_decoration"; \
type: IMAGE; \
mouse_events: 0; \
clip_to: "label.clip"; \
description { \
state: "default" 0.0; \
align: 0.5 1.0; \
color: 255 0 0 148; \
min: 11 6; \
max: 11 6; \
fixed: 1 1; \
visible: DECOR; \
rel1 { \
to: "label"; \
offset: 0 0; \
} \
rel2 { \
to: "label"; \
offset: -1 4; \
} \
image { \
normal: "itask_im5.png"; \
} \
} \
} \
part { \
name: "e.text.label"; \
type: TEXT; \
effect: SHADOW; \
mouse_events: 0; \
clip_to: "label.clip"; \
scale: 1; \
description { \
state: "default" 0.0; \
align: ALIGN; \
color: 255 255 255 255; \
color3: 0 0 0 0; \
rel1.offset: 0 2; \
rel2.offset: -1 -1; \
text { \
text: ""; \
font: "Sans:style=Bold"; \
size: 11; \
min: 1 1; \
align: 0.5 0.5; \
text_class: "module_large"; \
} \
} \
} \
part { \
name: "label.clip"; \
type: RECT; \
mouse_events: 0; \
description { \
state: "default" 0.0; \
align: 0.5 0.5; \
color: 255 255 255 0; \
min: 0 33; \
rel1 { \
to: "e.text.label"; \
offset: -12 -4; \
} \
rel2 { \
to: "e.text.label"; \
offset: 11 -1; \
} \
} \
description { \
state: "visible" 0.0; \
inherit: "default" 0.0; \
color: 255 255 255 255; \
} \
} \
} \
programs { \
program { \
name: "go_label_show"; \
signal: "e,state,label,show"; \
source: "e"; \
action: STATE_SET "visible" 0.0; \
transition: DECELERATE 0.5; \
target: "label.clip"; \
} \
program { \
name: "go_label_hide"; \
signal: "e,state,label,hide"; \
source: "e"; \
action: STATE_SET "default" 0.0; \
transition: ACCELERATE 0.25; \
target: "label.clip"; \
} \
} \
}
LABEL("bottom", 1, 0.5 1.0);
LABEL("top", 0, 0.5 0.0);
LABEL("left", 0, 0.0 0.5);
LABEL("right", 0, 1.0 0.5);
/* group {
name: "e/modules/engage/label_top";
parts {
part {
name: "label";
type: IMAGE;
mouse_events: 0;
clip_to: "label.clip";
description {
state: "default" 0.0;
align: 0.5 0.5;
color: 0 0 0 148;
max: 999 26;
rel1 {
to: "e.text.label";
offset: -8 -2;
}
rel2 {
to: "e.text.label";
offset: 4 -1;
}
image {
normal: "itask_im4.png";
border: 5 5 5 5;
}
}
}
part {
name: "e.text.label";
type: TEXT;
effect: SHADOW;
mouse_events: 0;
clip_to: "label.clip";
scale: 1;
description {
state: "default" 0.0;
align: 0.5 0.5;
color: 255 255 255 255;
color3: 0 0 0 0;
rel1.offset: 0 2;
rel2.offset: -1 -1;
text {
text: "";
font: "Sans:style=Bold";
size: 11;
min: 1 1;
align: 0.5 0.5;
text_class: "module_large";
}
}
}
part {
name: "label.clip";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
align: 0.5 0.5;
color: 255 255 255 0;
min: 0 33;
rel1 {
to: "e.text.label";
offset: -12 -4;
}
rel2 {
to: "e.text.label";
offset: 11 -1;
}
}
description {
state: "visible" 0.0;
inherit: "default" 0.0;
color: 255 255 255 255;
}
}
}
programs {
program {
name: "go_label_show";
signal: "e,state,label,show";
source: "e";
action: STATE_SET "visible" 0.0;
transition: DECELERATE 0.5;
target: "label.clip";
}
program {
name: "go_label_hide";
signal: "e,state,label,hide";
source: "e";
action: STATE_SET "default" 0.0;
transition: ACCELERATE 0.25;
target: "label.clip";
}
}
}
*/
/* TODO needs to be supported in code */
/* group {
* name: "e/modules/engage/label_left";
* alias: "e/modules/engage/label_right";
* } */
group {
name: "e/modules/engage/icon";
alias: "e/modules/engage/icon_top";
alias: "e/modules/engage/icon_left";
alias: "e/modules/engage/icon_right";
alias: "e/modules/engage/icon_bottom";
min: 32 32;
max: 128 128;
parts {
part {
name: "clip";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 255 255 255 128;
}
description {
state: "visible" 0.0;
color: 255 255 255 255;
}
}
part {
name: "focus_clip";
type: RECT;
clip_to: "clip";
mouse_events: 0;
description {
state: "default" 0.0;
color: 255 255 255 255;
}
description {
state: "focused" 0.0;
color: 200 200 255 255;
}
}
part {
name: "iconic_clip";
type: RECT;
clip_to: "focus_clip";
mouse_events: 0;
description {
state: "default" 0.0;
color: 255 255 255 255;
}
description {
state: "iconic" 0.0;
color: 200 200 200 255;
}
}
part {
name: "urgent_clip";
type: RECT;
clip_to: "iconic_clip";
mouse_events: 0;
description {
state: "default" 0.0;
color: 255 255 255 255;
}
description {
state: "urgent" 0.0;
color: 255 180 180 255;
}
}
part {
name: "input_clip";
type: RECT;
clip_to: "urgent_clip";
mouse_events: 0;
description {
state: "default" 0.0;
color: 255 255 255 255;
}
description {
state: "mouse_down" 0.0;
color: 200 200 200 255;
}
}
part {
name: "e.swallow.content";
type: SWALLOW;
clip_to: "input_clip";
description {
state: "default" 0.0;
aspect: 1.0 1.0;
aspect_preference: BOTH;
}
}
}
programs {
program {
name: "go_show";
signal: "e,state,item,show";
source: "e";
action: STATE_SET "visible" 0.0;
transition: SINUSOIDAL 0.2;
target: "clip";
}
program {
name: "go_hide";
signal: "e,state,item,hide";
source: "e";
action: STATE_SET "default" 0.0;
transition: SINUSOIDAL 0.3;
target: "clip";
}
/* when minimizing an application */
program {
name: "go_iconic1";
signal: "e,state,taskbar,iconic,on";
source: "e";
action: STATE_SET "iconic" 0.0;
transition: LINEAR 0.3;
target: "iconic_clip";
}
program {
name: "go_iconic0";
signal: "e,state,taskbar,iconic,off";
source: "e";
action: STATE_SET "default" 0.0;
transition: LINEAR 0.3;
target: "iconic_clip";
}
/* when an application got focus */
program {
name: "go_focused1";
signal: "e,state,taskbar,focus,on";
source: "e";
action: STATE_SET "focused" 0.0;
transition: SINUSOIDAL 0.3;
target: "focus_clip";
}
program {
name: "go_focused0";
signal: "e,state,taskbar,focus,off";
source: "e";
action: STATE_SET "default" 0.0;
transition: SINUSOIDAL 0.3;
target: "focus_clip";
}
/* application is sending urgent signal */
program {
name: "go_urgent";
signal: "e,state,taskbar,urgent,on";
source: "e";
action: ACTION_STOP;
target: "go_urgent1";
target: "go_urgent0";
after: "go_urgent1";
}
program {
name: "go_urgent1";
action: STATE_SET "urgent" 0.0;
transition: LINEAR 1.0;
target: "urgent_clip";
after: "go_urgent2";
}
program {
name: "go_urgent2";
action: STATE_SET "default" 0.0;
transition: LINEAR 1.0;
target: "urgent_clip";
after: "go_urgent1";
}
program {
name: "go_urgent0";
signal: "e,state,taskbar,urgent,off";
source: "e";
action: ACTION_STOP;
target: "go_urgent1";
target: "go_urgent0";
after: "go_urgent_end";
}
program {
name: "go_urgent_end";
action: STATE_SET "default" 0.0;
transition: LINEAR 0.2;
target: "urgent_clip";
}
program {
name: "go_mouse_down";
signal: "e,state,mouse,down";
source: "e";
action: STATE_SET "mouse_down" 0.0;
transition: LINEAR 0.2;
target: "input_clip";
after: "go_mouse_down2";
}
program {
name: "go_mouse_down2";
action: STATE_SET "default" 0.0;
transition: LINEAR 0.3;
target: "input_clip";
}
/* program {
* name: "go_mouse_up";
* signal: "e,state,mouse,up";
* source: "e";
* action: STATE_SET "mouse_up" 0.0;
* transition: LINEAR 0.2;
* target: "input_clip";
* } */
}
}
group {
name: "e/modules/engage/icon_over_top";
alias: "e/modules/engage/icon_over_left";
alias: "e/modules/engage/icon_over_right";
alias: "e/modules/engage/icon_over_bottom";
parts {
part {
name: "icon_clip";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 255 255 255 255;
visible: 0;
rel1.offset: -256 -256;
rel2.offset: 256 256;
}
}
part {
name: "background";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 255 255 255 0;
visible: 0;
}
description {
state: "visible" 0.0;
color: 255 255 255 255;
}
description {
state: "hidden" 0.0;
visible: 1;
rel1.relative: -0.5 -0.5;
rel2.relative: 1.5 1.5;
color: 255 255 255 0;
}
description {
state: "huge" 0.0;
color: 255 255 255 0;
rel1.relative: -1.5 -1.5;
rel2.relative: 2.5 2.5;
}
}
part {
name: "e.swallow.content";
type: SWALLOW;
clip_to: "background";
description {
state: "default" 0.0;
rel1.to: "background";
rel2.to: "background";
}
}
}
programs {
program {
name: "go_active";
signal: "e,state,animate,in";
source: "e";
action: STATE_SET "visible" 0.0;
target: "background";
after: "go_active2";
}
program {
name: "go_active2";
action: STATE_SET "hidden" 0.0;
transition: LINEAR 0.5;
target: "background";
after: "go_active";
}
program {
name: "go_passive";
signal: "e,state,animate,out";
source: "e";
action: ACTION_STOP;
target: "go_active";
target: "go_active2";
after: "go_passive2";
}
program {
name: "go_passive2";
action: STATE_SET "default" 0.0;
target: "background";
}
program {
name: "go_big";
action: STATE_SET "visible" 0.0;
target: "background";
after: "go_big2";
}
program {
name: "go_big2";
action: STATE_SET "huge" 0.0;
transition: DECELERATE 0.4;
target: "background";
after: "go_big3";
}
program {
name: "go_big3";
action: STATE_SET "default" 0.0;
target: "background";
}
program {
name: "exec_start";
signal: "e,action,start";
source: "e";
action: ACTION_STOP;
target: "go_big";
target: "go_big2";
target: "go_big3";
after: "go_big";
}
}
}
}

BIN
data/themes/ibar_im0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

BIN
data/themes/itask_im0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

BIN
data/themes/itask_im1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

BIN
data/themes/itask_im2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 861 B

BIN
data/themes/itask_im3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

BIN
data/themes/itask_im4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

BIN
data/themes/itask_im5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

BIN
data/themes/itask_im6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
data/themes/module_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

19
e-module-ng.edc Normal file
View File

@ -0,0 +1,19 @@
images {
image: "module_icon.png" COMP;
}
collections {
group {
name: "icon";
parts {
part {
name: "image";
mouse_events: 0;
description {
state: "default" 0.0;
aspect_preference: BOTH;
image.normal: "module_icon.png";
}
}
}
}
}

62
e_modules-engage.spec.in Normal file
View File

@ -0,0 +1,62 @@
%define module_name engage
Summary: %{module_name} module for the Enlightenment window manager
Name: e_modules-%{module_name}
Version: @VERSION@
Release: 0.%(date '+%Y%m%d')
License: BSD
Group: User Interface/Desktops
URL: http://www.enlightenment.org/
Source: ftp://ftp.enlightenment.org/pub/enlightenment/%{module_name}-%{version}.tar.gz
Packager: %{?_packager:%{_packager}}%{!?_packager:Rui Seabra <rms@1407.org>}
Vendor: %{?_vendorinfo:%{_vendorinfo}}%{!?_vendorinfo:The Enlightenment Project (http://www.enlightenment.org/)}
Distribution: %{?_distribution:%{_distribution}}%{!?_distribution:%{_vendor}}
Requires: enlightenment >= 0.16.999
BuildRequires: edje, enlightenment-devel >= 0.16.999
BuildRoot: %{_tmppath}/%{name}-%{version}-root
%description
%{module_name} is a module for the Enlightenment window manager.
Engage will hold all of your open applications for fast switching and
is also an apllication launcher.
There are three basic functionalities that you dont want to miss:
1. If you click on an icon the corresponding will be shown and
raised to the top and if its on another desk, then you will
be switched right to it.
2. If you drag an icon out of NG the App will be shown on the
current desktop.
3. Drag an icon to a pagers desk to send it there.
And lots of other stuff that you have to find out yourself for now :)
%prep
%setup -q -n %{module_name}-%{version}
%build
%{configure}
%{__make} %{?_smp_mflags} %{?mflags}
%install
%{__make} %{?mflags_install} DESTDIR=$RPM_BUILD_ROOT install
%{find_lang} %{module_name} || true > %{module_name}.lang
%clean
test "x$RPM_BUILD_ROOT" != "x/" && rm -rf $RPM_BUILD_ROOT
%post
/sbin/ldconfig
%postun
/sbin/ldconfig
%files -f %{module_name}.lang
%defattr(-, root, root)
%doc AUTHORS ChangeLog COPYING* INSTALL NEWS README
%if "%{module_name}" == "emu"
%{_bindir}/%{module_name}*
%endif
%{_libdir}/enlightenment/modules/%{module_name}*
%changelog

0
m4/.svnignore Normal file
View File

12
module.desktop.in Normal file
View File

@ -0,0 +1,12 @@
[Desktop Entry]
Type=Link
Name=Engage
Name[de]=Engage
Icon=e-module-ng
Comment=A dock that holds a taskbar and application launcher<br>Add instances with: Config Panel > Extensions > Engage
Comment[ru]=Док содержащий панель задач и запуск приложений<br>Добавлять экземпляры через: Панель параметров → Расширения → Engage
Comment[de]=Ein Dock mit einer Taskbar und Anwendungsstartern<br>Instanzen können hinzugefügt werden über: Enlightenment-Einstellungen → Erweiterungen → Itask-NG
Comment[it]=Contiene una taskbar ed un lanciatore di applicazioni<br>Per aggiungerne istanze: Pannello di configurazione → Estensioni → Engage
Comment[fr]=Un dock contenant une barre des tâches et un lanceur.<br>Pour ajouter des instances : Panneau de contrôle → Extensions → Engage
Comment[pt]=Uma barra de tarefas e lançador de aplicações<br>Pode adicionar as barras em: Painel de configuração > Extensões > Engage
X-Enlightenment-ModuleType=utils

BIN
module_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

1
po/LINGUAS Normal file
View File

@ -0,0 +1 @@
ar cs de fr it pt sl

366
po/Makefile.in.in Normal file
View File

@ -0,0 +1,366 @@
# Makefile for PO directory in any package using GNU gettext.
# Copyright (C) 1995-1997, 2000-2004 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
#
# This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU General Public
# License but which still want to provide support for the GNU gettext
# functionality.
# Please note that the actual code of GNU gettext is covered by the GNU
# General Public License and is *not* in the public domain.
#
# Origin: gettext-0.14
PACKAGE = @PACKAGE@
VERSION = @VERSION@
SHELL = /bin/sh
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
datadir = @datadir@
localedir = $(datadir)/locale
gettextsrcdir = $(datadir)/gettext/po
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
MKINSTALLDIRS = @MKINSTALLDIRS@
mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
GMSGFMT = @GMSGFMT@
MSGFMT = @MSGFMT@
XGETTEXT = @XGETTEXT@
MSGMERGE = msgmerge
MSGMERGE_UPDATE = @MSGMERGE@ --update
MSGINIT = msginit
MSGCONV = msgconv
MSGFILTER = msgfilter
POFILES = @POFILES@
GMOFILES = @GMOFILES@
UPDATEPOFILES = @UPDATEPOFILES@
DUMMYPOFILES = @DUMMYPOFILES@
DISTFILES.common = Makefile.in.in remove-potcdate.sin \
$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \
$(POFILES) $(GMOFILES) \
$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
POTFILES = \
CATALOGS = @CATALOGS@
# Makevars gets inserted here. (Don't remove this line!)
.SUFFIXES:
.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
.po.mo:
@echo "$(MSGFMT) -c -o $@ $<"; \
$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
.po.gmo:
@lang=`echo $* | sed -e 's,.*/,,'`; \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
.sin.sed:
sed -e '/^#/d' $< > t-$@
mv t-$@ $@
all: all-@USE_NLS@
all-yes: stamp-po
all-no:
# stamp-po is a timestamp denoting the last time at which the CATALOGS have
# been loosely updated. Its purpose is that when a developer or translator
# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
# invocations of "make" will do nothing. This timestamp would not be necessary
# if updating the $(CATALOGS) would always touch them; however, the rule for
# $(POFILES) has been designed to not touch files that don't need to be
# changed.
stamp-po: $(srcdir)/$(DOMAIN).pot
test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
@echo "touch stamp-po"
@echo timestamp > stamp-poT
@mv stamp-poT stamp-po
# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
# otherwise packages like GCC can not be built if only parts of the source
# have been downloaded.
# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
--add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
--files-from=$(srcdir)/POTFILES.in \
--copyright-holder='$(COPYRIGHT_HOLDER)' \
--msgid-bugs-address='$(MSGID_BUGS_ADDRESS)'
test ! -f $(DOMAIN).po || { \
if test -f $(srcdir)/$(DOMAIN).pot; then \
sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
else \
rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
fi; \
else \
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
fi; \
}
# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
# every "make" invocation, only create it when it is missing.
# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
$(srcdir)/$(DOMAIN).pot:
$(MAKE) $(DOMAIN).pot-update
# This target rebuilds a PO file if $(DOMAIN).pot has changed.
# Note that a PO file is not touched if it doesn't need to be changed.
$(POFILES): $(srcdir)/$(DOMAIN).pot
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
if test -f "$(srcdir)/$${lang}.po"; then \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
else \
$(MAKE) $${lang}.po-create; \
fi
install: install-exec install-data
install-exec:
install-data: install-data-@USE_NLS@
if test "$(PACKAGE)" = "gettext-tools"; then \
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
for file in $(DISTFILES.common) Makevars.template; do \
$(INSTALL_DATA) $(srcdir)/$$file \
$(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
for file in Makevars; do \
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
else \
: ; \
fi
install-data-no: all
install-data-yes: all
$(mkinstalldirs) $(DESTDIR)$(datadir)
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
dir=$(localedir)/$$lang/LC_MESSAGES; \
$(mkinstalldirs) $(DESTDIR)$$dir; \
if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
$(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
if test -n "$$lc"; then \
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
for file in *; do \
if test -f $$file; then \
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
fi; \
done); \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
else \
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
:; \
else \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
fi; \
fi; \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
fi; \
done; \
done
install-strip: install
installdirs: installdirs-exec installdirs-data
installdirs-exec:
installdirs-data: installdirs-data-@USE_NLS@
if test "$(PACKAGE)" = "gettext-tools"; then \
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
else \
: ; \
fi
installdirs-data-no:
installdirs-data-yes:
$(mkinstalldirs) $(DESTDIR)$(datadir)
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
dir=$(localedir)/$$lang/LC_MESSAGES; \
$(mkinstalldirs) $(DESTDIR)$$dir; \
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
if test -n "$$lc"; then \
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
for file in *; do \
if test -f $$file; then \
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
fi; \
done); \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
else \
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
:; \
else \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
fi; \
fi; \
fi; \
done; \
done
# Define this as empty until I found a useful application.
installcheck:
uninstall: uninstall-exec uninstall-data
uninstall-exec:
uninstall-data: uninstall-data-@USE_NLS@
if test "$(PACKAGE)" = "gettext-tools"; then \
for file in $(DISTFILES.common) Makevars.template; do \
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
else \
: ; \
fi
uninstall-data-no:
uninstall-data-yes:
catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
done; \
done
check: all
info dvi ps pdf html tags TAGS ctags CTAGS ID:
mostlyclean:
rm -f remove-potcdate.sed
rm -f stamp-poT
rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
rm -fr *.o
clean: mostlyclean
distclean: clean
rm -f Makefile Makefile.in POTFILES *.mo
maintainer-clean: distclean
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
rm -f stamp-po $(GMOFILES)
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
dist distdir:
$(MAKE) update-po
@$(MAKE) dist2
# This is a separate target because 'update-po' must be executed before.
dist2: $(DISTFILES)
dists="$(DISTFILES)"; \
if test "$(PACKAGE)" = "gettext-tools"; then \
dists="$$dists Makevars.template"; \
fi; \
if test -f $(srcdir)/ChangeLog; then \
dists="$$dists ChangeLog"; \
fi; \
for i in 0 1 2 3 4 5 6 7 8 9; do \
if test -f $(srcdir)/ChangeLog.$$i; then \
dists="$$dists ChangeLog.$$i"; \
fi; \
done; \
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
for file in $$dists; do \
if test -f $$file; then \
cp -p $$file $(distdir); \
else \
cp -p $(srcdir)/$$file $(distdir); \
fi; \
done
update-po: Makefile
$(MAKE) $(DOMAIN).pot-update
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
$(MAKE) update-gmo
# General rule for creating PO files.
.nop.po-create:
@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
exit 1
# General rule for updating PO files.
.nop.po-update:
@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
tmpdir=`pwd`; \
echo "$$lang:"; \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
cd $(srcdir); \
if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
rm -f $$tmpdir/$$lang.new.po; \
else \
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
:; \
else \
echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
exit 1; \
fi; \
fi; \
else \
echo "msgmerge for $$lang.po failed!" 1>&2; \
rm -f $$tmpdir/$$lang.new.po; \
fi
$(DUMMYPOFILES):
update-gmo: Makefile $(GMOFILES)
@:
Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
$(SHELL) ./config.status
force:
# Tell versions [3.59,3.63) of GNU make not to export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

41
po/Makevars Normal file
View File

@ -0,0 +1,41 @@
# Makefile variables for PO directory in any package using GNU gettext.
# Usually the message domain is the same as the package name.
DOMAIN = $(PACKAGE)
# These two variables depend on the location of this directory.
subdir = po
top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = --keyword=N_ --keyword=D_ --from-code=UTF-8 --foreign-user
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
# package. (Note that the msgstr strings, extracted from the package's
# sources, belong to the copyright holder of the package.) Translators are
# expected to transfer the copyright for their translations to this person
# or entity, or to disclaim their copyright. The empty string stands for
# the public domain; in this case the translators are expected to disclaim
# their copyright.
COPYRIGHT_HOLDER = Hannes Janetzek
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
# - Strings which are not entire sentences, see the maintainer guidelines
# in the GNU gettext documentation, section 'Preparing Strings'.
# - Strings which use unclear terms or require additional context to be
# understood.
# - Strings which make invalid assumptions about notation of date, time or
# money.
# - Pluralisation problems.
# - Incorrect English spelling.
# - Incorrect formatting.
# It can be your email address, or a mailing list address where translators
# can write to without being subscribed, or the URL of a web page through
# which the translators can contact you.
MSGID_BUGS_ADDRESS = hannes.janetzek@gmail.com
# This is the list of locale categories, beyond LC_MESSAGES, for which the
# message catalogs shall be used. It is usually empty.
EXTRA_LOCALE_CATEGORIES =

12
po/POTFILES.in Normal file
View File

@ -0,0 +1,12 @@
# List of source files which contain translatable strings.
src/e_mod_main.c
src/e_mod_main.h
src/ng_taskbar.c
src/ng_launcher.c
src/ng_item.c
src/ng_box.c
src/ng_border_menu.c
src/ng_gadcon.c
src/ng_config.c
src/ng_config_instances.c
src/ng_launcher.c

397
po/ar.po Normal file
View File

@ -0,0 +1,397 @@
# Arabic translation for Engage.
# This file is put in the public domain.
# sameeer hussain <almusalimalmusalimah> 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: Engage module\n"
"Report-Msgid-Bugs-To: hannes.janetzek@gmail.com\n"
"POT-Creation-Date: 2011-09-04 16:46+0200\n"
"PO-Revision-Date: 2012-01-24 20:45+0300\n"
"Last-Translator: سمير حسين <almusalimalmusalimah@gmail.com>\n"
"Language-Team: Arabic <almusalimalmusalimah@gmail.com>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Arabic\n"
"X-Poedit-Country: SAUDI ARABIA\n"
"X-Poedit-SourceCharset: utf-8\n"
#: src/e_mod_main.c:1666
#: src/e_mod_main.c:1824
#: src/e_mod_main.c:1851
msgid "Engage"
msgstr "Engage"
#: src/ng_taskbar.c:641
msgid "No name!"
msgstr "بلا اسم!"
#: src/ng_launcher.c:275
msgid "Open folder with EFM"
msgstr "افتح المجلد بواسطة EFM"
#: src/ng_launcher.c:561
msgid "Configure Bar"
msgstr "أعدّ شريطا"
#: src/ng_launcher.c:565
msgid "Lock Dragging"
msgstr "أقفل السحب"
#: src/ng_launcher.c:574
msgid "Applications"
msgstr "التطبيقات"
#: src/ng_launcher.c:578
msgid "Edit Icon"
msgstr "عدّل ايقونة"
#: src/ng_border_menu.c:30
msgid "Fullscreen"
msgstr "ملء الشاشة"
#: src/ng_border_menu.c:45
msgid "Close"
msgstr "اغلق"
#: src/ng_border_menu.c:66
msgid "Maximized"
msgstr "مكبرة"
#: src/ng_border_menu.c:86
msgid "Uniconify"
msgstr "استعد"
#: src/ng_border_menu.c:88
msgid "Iconify"
msgstr "صغِّر"
#: src/ng_gadcon.c:299
msgid "Available Gadgets"
msgstr "أدوات متاحة"
#: src/ng_gadcon.c:306
msgid "Add Gadget"
msgstr "أضف أداة"
#: src/ng_gadcon.c:312
msgid "Selected Gadgets"
msgstr "أدوات مُختارة"
#: src/ng_gadcon.c:319
msgid "Remove Gadget"
msgstr "أزل أداة"
#: src/ng_gadcon.c:327
#: src/ng_gadcon.c:370
#: src/ng_gadcon.c:394
msgid "Description: Unavailable"
msgstr "الوصف: غير متاحة"
#: src/ng_config.c:98
msgid "Engage Configuration"
msgstr "إعداد Engage"
#: src/ng_config.c:164
#: src/ng_config.c:225
msgid "Appearance"
msgstr "المظهر"
#: src/ng_config.c:165
msgid "Icon Size:"
msgstr "حجم اﻷيقونة:"
#: src/ng_config.c:167
#, c-format
msgid "%1.0f px"
msgstr "%1.0f px"
#: src/ng_config.c:181
msgid "Background Opacity:"
msgstr "تعتيم الخلفية:"
#: src/ng_config.c:183
msgid "%1.0f \\%"
msgstr "%1.0f \\%"
#: src/ng_config.c:191
msgid "Show Background Box"
msgstr "اعرض صندوق الخلفية"
#: src/ng_config.c:194
msgid "Show Mouse-Over Animation"
msgstr "اعرض التأثير الحركي عند تحويم الفأرة"
#: src/ng_config.c:199
msgid "Orientation"
msgstr "ارشاد"
#: src/ng_config.c:201
msgid "Bottom Edge"
msgstr "الحافة السفلية"
#: src/ng_config.c:203
msgid "Top Edge"
msgstr "الحافة العلوية"
#: src/ng_config.c:205
msgid "Left Edge"
msgstr "الحافة اليسرى"
#: src/ng_config.c:207
msgid "Right Edge"
msgstr "الحافة اليمنى"
#: src/ng_config.c:228
#: src/ng_config.c:247
msgid "Zoom"
msgstr "قرّب"
#: src/ng_config.c:229
msgid "Factor:"
msgstr "عامل:"
#: src/ng_config.c:235
msgid "Range:"
msgstr "مدى:"
#: src/ng_config.c:241
msgid "Duration:"
msgstr "مدة:"
#: src/ng_config.c:250
#: src/ng_config.c:278
msgid "Bar Items"
msgstr "عناصر الشريط"
#: src/ng_config.c:258
#: src/ng_config.c:538
#: src/ng_config_instances.c:104
msgid "Delete"
msgstr "امحِ"
#: src/ng_config.c:260
#: src/ng_config.c:540
#: src/ng_config_instances.c:106
msgid "Configure"
msgstr "اعدّ"
#: src/ng_config.c:262
msgid "Up"
msgstr "أعلى"
#: src/ng_config.c:264
msgid "Down"
msgstr "أسفل"
#: src/ng_config.c:269
#: src/ng_config.c:536
#: src/ng_config_instances.c:102
msgid "Add"
msgstr "أضِف"
#: src/ng_config.c:271
msgid "Taskbar"
msgstr "شريط المهام"
#: src/ng_config.c:273
msgid "Launcher"
msgstr "مُطلق"
#: src/ng_config.c:275
msgid "Gadcon"
msgstr "Gadcon"
#: src/ng_config.c:281
#: src/ng_config.c:300
msgid "Auto Hide"
msgstr "اخفاء تلقائي"
#: src/ng_config.c:298
msgid "Show Bar when Urgent"
msgstr "اعرض الشريط حال كونه مستعجلا"
#: src/ng_config.c:306
msgid "Stacking"
msgstr "تكديس"
#: src/ng_config.c:308
msgid "Above All"
msgstr "فوق الكل"
#: src/ng_config.c:310
msgid "Below Fullscreen"
msgstr "تحت نافذة ملء الشاشة"
#: src/ng_config.c:314
#: src/ng_config.c:321
msgid "Other"
msgstr "أخرى"
#: src/ng_config.c:315
msgid "Ecomorph Features"
msgstr "وظائف Ecomorph"
#: src/ng_config.c:317
msgid "Show Icon Label"
msgstr "اعرض عنوان اﻷيقونة"
#: src/ng_config.c:528
msgid "Launcher Settings"
msgstr "إعدادات المطلق"
#: src/ng_config.c:548
msgid "Taskbar Settings"
msgstr "إعدادات شريط المهام"
#: src/ng_config.c:550
msgid "Dont Show Dialogs"
msgstr "لا تعرض الحوارات"
#: src/ng_config.c:553
msgid "Advanced Window Menu"
msgstr "قائمةُ نافذةٍ متقدمةٌ"
#: src/ng_config.c:556
msgid "Only Show Current Desk"
msgstr "اعرض السطح الحالي فقط"
#: src/ng_config.c:559
msgid "Group Applications by Window Class"
msgstr "اجمع التطبيقات حسب فئة النافذة"
#: src/ng_config.c:562
msgid "Append new Applications on the right Side"
msgstr "ألحِق التطبيقات الجديدة بالجانب اﻷيمن"
#: src/ng_config.c:568
msgid "Iconified Applications"
msgstr "تطبيقات مُصغَّرة"
#: src/ng_config.c:643
#: src/ng_config.c:683
msgid "Engage Bar Configuration"
msgstr "أعدّ شريط Engage"
#: src/ng_config.c:788
msgid "Create new source"
msgstr "أنشئ مصدرا جديدا"
#: src/ng_config.c:789
msgid "Enter a name for this new Application Launcher:"
msgstr "أدخل اسما لمطلق التطبيق الجديد هذا:"
#: src/ng_config.c:798
#, c-format
msgid "You requested to delete \"%s\".<br><br>Are you sure you want to delete this source?"
msgstr "يُطلب منك اﻵن محو \"%s\".<br><br>هل تريد محو هذا المصدر؟"
#: src/ng_config.c:802
msgid "Are you sure you want to delete this source?"
msgstr "هل تريد محو هذا المصدر؟"
#: src/ng_config_instances.c:64
#: src/ng_config_instances.c:94
#, fuzzy
msgid "Engage Instances"
msgstr "مثيلات Engage"
#: src/ng_config_instances.c:164
msgid "Bar"
msgstr "شريط"
#: src/ng_config_instances.c:271
#, fuzzy, c-format
msgid "You requested to delete \"%s\".<br><br>Are you sure you want to delete this Instance?"
msgstr "يُطلب منك اﻵن محو \"%s\".<br><br>هل تريد محو هذه المثيلات؟"
#: src/ng_config_instances.c:275
#, fuzzy
msgid "Are you sure you want to delete this Instance?"
msgstr "هل تريد محو هذه المثيلات؟"
#~ msgid "Reflection Opacity:"
#~ msgstr "Opacité du reflet:"
#~ msgid "%1.0f"
#~ msgstr "%1.0f"
#~ msgid "Itask NG"
#~ msgstr "Itask NG"
#~ msgid "Configure Launcher"
#~ msgstr "Configurer le lanceur"
#~ msgid "Window Locks"
#~ msgstr "Verrous de la fenêtre"
#~ msgid "Remember"
#~ msgstr "Mémoriser"
#~ msgid "Borders"
#~ msgstr "Bordures"
#~ msgid "Send to Desktop"
#~ msgstr "Envoyer sur le bureau"
#~ msgid "Pin to Desktop"
#~ msgstr "Épingler au bureau"
#~ msgid "Unpin from Desktop"
#~ msgstr "Désépingler du bureau"
#~ msgid "State"
#~ msgstr "État"
#~ msgid "Sticky"
#~ msgstr "Ancré"
#~ msgid "Skip Window List"
#~ msgstr "Ne pas afficher dans la liste des fenêtres"
#~ msgid "Add To Favorites Menu"
#~ msgstr "Ajouter au menu des favoris"
#~ msgid "Add To Launcher"
#~ msgstr "Ajouter au lanceur"
#~ msgid "Create Icon"
#~ msgstr "Créer un icone"
#~ msgid "Window Properties"
#~ msgstr "Propriétés de la fenêtre"
#~ msgid "Kill"
#~ msgstr "Tuer"
#~ msgid "Shaded"
#~ msgstr "Enroulée"
#~ msgid "Zoom only one icon"
#~ msgstr "Ne zoomer qu'un seul icone"
#~ msgid "%0.01f"
#~ msgstr "%0.01f"
#~ msgid "%0.1f"
#~ msgstr "%0.1f"
#~ msgid "Hide Behavior"
#~ msgstr "Comportement du masquage"
#~ msgid "Hide Timeout:"
#~ msgstr "Délai avant masquage :"
#~ msgid "Show Iconified"
#~ msgstr "Afficher la minimisation"
#~ msgid "Are you sure you want to delete this Itask NG source?"
#~ msgstr "Voulez-vous vraiment supprimer cette source ?"
#~ msgid "Itask NG Instances"
#~ msgstr "Instances de Itask NG"
#~ msgid "Itask NG - Instances"
#~ msgstr "Itask NG - Instances"

335
po/cs.po Normal file
View File

@ -0,0 +1,335 @@
# Czech translation.
# This file is put in the public domain.
# quaker66@gmail.com
# Vít Pelčák <vit@pelcak.org>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: Itask-ng\n"
"Report-Msgid-Bugs-To: hannes.janetzek@gmail.com\n"
"POT-Creation-Date: 2011-10-16 14:36+0200\n"
"PO-Revision-Date: 2011-10-15 15:42+0200\n"
"Last-Translator: Vít Pelčák <vit@pelcak.org>\n"
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.2\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: ../src/e_mod_main.c:1691 ../src/e_mod_main.c:1849 ../src/e_mod_main.c:1876
msgid "Engage"
msgstr "Engage"
#: ../src/ng_taskbar.c:641
msgid "No name!"
msgstr "Beze jména!"
#: ../src/ng_launcher.c:275
msgid "Open folder with EFM"
msgstr ""
#: ../src/ng_launcher.c:561
msgid "Configure Bar"
msgstr "Nastavit panel"
#: ../src/ng_launcher.c:565
msgid "Lock Dragging"
msgstr "Uzamknout přesun"
#: ../src/ng_launcher.c:574
msgid "Applications"
msgstr "Aplikace"
#: ../src/ng_launcher.c:578
msgid "Edit Icon"
msgstr "Upravit ikonu"
#: ../src/ng_border_menu.c:30
msgid "Fullscreen"
msgstr "Celá obrazovka"
#: ../src/ng_border_menu.c:45
msgid "Close"
msgstr "Zavřít"
#: ../src/ng_border_menu.c:66
msgid "Maximized"
msgstr "Maximalizováno"
#: ../src/ng_border_menu.c:86
msgid "Uniconify"
msgstr "Deminimalizovat"
#: ../src/ng_border_menu.c:88
msgid "Iconify"
msgstr "Minimalizovat"
#: ../src/ng_gadcon.c:299
msgid "Available Gadgets"
msgstr "Dostupné gadgety"
#: ../src/ng_gadcon.c:306
msgid "Add Gadget"
msgstr "Přidat gadget"
#: ../src/ng_gadcon.c:312
msgid "Selected Gadgets"
msgstr "Vybrané gadgety"
#: ../src/ng_gadcon.c:319
msgid "Remove Gadget"
msgstr "Odstranit gadget"
#: ../src/ng_gadcon.c:327 ../src/ng_gadcon.c:370 ../src/ng_gadcon.c:394
msgid "Description: Unavailable"
msgstr "Popis: nedostupný"
#: ../src/ng_config.c:98
msgid "Engage Configuration"
msgstr "Nastavení Engage"
#: ../src/ng_config.c:164 ../src/ng_config.c:225
msgid "Appearance"
msgstr "Vzhled"
#: ../src/ng_config.c:165
msgid "Icon Size:"
msgstr "Velikost ikon:"
#: ../src/ng_config.c:167
#, c-format
msgid "%1.0f px"
msgstr "%1.0f px"
#: ../src/ng_config.c:181
msgid "Background Opacity:"
msgstr "Neprůhlednost pozadí:"
#: ../src/ng_config.c:183
msgid "%1.0f \\%"
msgstr "%1.0f \\%"
#: ../src/ng_config.c:191
msgid "Show Background Box"
msgstr "Zobrazit pozadí"
#: ../src/ng_config.c:194
msgid "Show Mouse-Over Animation"
msgstr ""
#: ../src/ng_config.c:199
msgid "Orientation"
msgstr "Orientace"
#: ../src/ng_config.c:201
msgid "Bottom Edge"
msgstr "Spodní okraj"
#: ../src/ng_config.c:203
msgid "Top Edge"
msgstr "Horní okraj"
#: ../src/ng_config.c:205
msgid "Left Edge"
msgstr "Levý okraj"
#: ../src/ng_config.c:207
msgid "Right Edge"
msgstr "Pravý okraj"
#: ../src/ng_config.c:228 ../src/ng_config.c:247
msgid "Zoom"
msgstr "Přiblížení"
#: ../src/ng_config.c:229
msgid "Factor:"
msgstr "Faktor:"
#: ../src/ng_config.c:235
msgid "Range:"
msgstr "Šířka:"
#: ../src/ng_config.c:241
msgid "Duration:"
msgstr "Trvání:"
#: ../src/ng_config.c:250 ../src/ng_config.c:278
msgid "Bar Items"
msgstr "Položky panelu"
#: ../src/ng_config.c:258 ../src/ng_config.c:538
#: ../src/ng_config_instances.c:104
msgid "Delete"
msgstr "Odstranit"
#: ../src/ng_config.c:260 ../src/ng_config.c:540
#: ../src/ng_config_instances.c:106
msgid "Configure"
msgstr "Nastavit"
#: ../src/ng_config.c:262
msgid "Up"
msgstr "Nahoru"
#: ../src/ng_config.c:264
msgid "Down"
msgstr "Dolů"
#: ../src/ng_config.c:269 ../src/ng_config.c:536
#: ../src/ng_config_instances.c:102
msgid "Add"
msgstr "Přidat"
#: ../src/ng_config.c:271
msgid "Taskbar"
msgstr "Správce úloh"
#: ../src/ng_config.c:273
msgid "Launcher"
msgstr "Spouštěč"
#: ../src/ng_config.c:275
msgid "Gadcon"
msgstr "Gadcon"
#: ../src/ng_config.c:281 ../src/ng_config.c:300
msgid "Auto Hide"
msgstr "Automaticky skrývat"
#: ../src/ng_config.c:298
msgid "Show Bar when Urgent"
msgstr "Zobrazit panel při naléhavé notifikaci"
#: ../src/ng_config.c:306
msgid "Stacking"
msgstr "Skládání"
#: ../src/ng_config.c:308
msgid "Above All"
msgstr "Nad vším"
#: ../src/ng_config.c:310
msgid "Below Fullscreen"
msgstr "Pod celoobrazovkovými"
#: ../src/ng_config.c:314 ../src/ng_config.c:321
msgid "Other"
msgstr "Ostatní"
#: ../src/ng_config.c:315
msgid "Ecomorph Features"
msgstr "Funkce Ecomorphu"
#: ../src/ng_config.c:317
msgid "Show Icon Label"
msgstr "Zobrazit text ikony"
#: ../src/ng_config.c:528
msgid "Launcher Settings"
msgstr "Nastavení spouštěče"
#: ../src/ng_config.c:548
msgid "Taskbar Settings"
msgstr "Nastavení správce úloh"
#: ../src/ng_config.c:550
msgid "Dont Show Dialogs"
msgstr "Nezobrazovat dialogy"
#: ../src/ng_config.c:553
msgid "Advanced Window Menu"
msgstr "Pokročilé menu okna"
#: ../src/ng_config.c:556
msgid "Only Show Current Desk"
msgstr "Zobrazit jen aktuální plochu"
#: ../src/ng_config.c:559
msgid "Group Applications by Window Class"
msgstr "Seskupovat aplikace podle třídy okna"
#: ../src/ng_config.c:562
msgid "Append new Applications on the right Side"
msgstr "Přidávat nové aplikace na pravém okraji"
#: ../src/ng_config.c:568
msgid "Iconified Applications"
msgstr "Ikonifikované aplikace"
#: ../src/ng_config.c:643 ../src/ng_config.c:683
msgid "Engage Bar Configuration"
msgstr "Nastavení panelu Engage"
#: ../src/ng_config.c:788
msgid "Create new source"
msgstr "Vytvořit nový zdroj"
#: ../src/ng_config.c:789
msgid "Enter a name for this new Application Launcher:"
msgstr "Zadejte název tohoto nového spouštěče aplikací:"
#: ../src/ng_config.c:798
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"source?"
msgstr ""
"Vyžádali jste si smazání \"%s\".<br><br>Opravdu chcete tento zdroj smazat?"
#: ../src/ng_config.c:802
msgid "Are you sure you want to delete this source?"
msgstr "Opravdu chcete tento zdroj smazat?"
#: ../src/ng_config_instances.c:64 ../src/ng_config_instances.c:94
msgid "Engage Instances"
msgstr "Instance Engage"
#. FIXME
#. if(ci->launcher)
#. label = D_("Launcher NG");
#. else if(ci->taskbar)
#. label = D_("Taskbar NG");
#.
#: ../src/ng_config_instances.c:164
msgid "Bar"
msgstr "Panel"
#: ../src/ng_config_instances.c:271
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"Instance?"
msgstr ""
"Vyžádali jste si smazání \"%s\".<br><br>Opravdu chcete tuto instanci smazat?"
#: ../src/ng_config_instances.c:275
msgid "Are you sure you want to delete this Instance?"
msgstr "Opravdu chcete smazat tuto Itask NG instanci?"
#~ msgid "Reflection Opacity:"
#~ msgstr "Neprůhlednost zrcadlení:"
#~ msgid "%1.0f"
#~ msgstr "%1.0f"
#~ msgid "Itask-NG"
#~ msgstr "Itask-NG"
#~ msgid "Itask NG"
#~ msgstr "Itask NG"
#~ msgid "Zoom only one icon"
#~ msgstr "Přiblížit pouze jednu ikonu"
#~ msgid "Hide Timeout:"
#~ msgstr "Časový limit skrytí:"
#~ msgid "Lock Deskflip on Edge"
#~ msgstr "Zamknout přepnutí plochy na okraji"
#~ msgid "Are you sure you want to delete this Itask NG source?"
#~ msgstr "Opravdu chcete smazat tento Itask NG zdroj?"
#~ msgid "Itask NG - Instances"
#~ msgstr "Itask NG - Instance"

309
po/de.po Normal file
View File

@ -0,0 +1,309 @@
# translation of de.po to German
# Copyright (C) YEAR Enlightenment development team
# This file is distributed under the same license as the PACKAGE package.
#
# hannes janetzek <hannes.janetzek@gmail.com>, 2008.
# Fabian Nowak <timystery@arcor.de>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: de\n"
"Report-Msgid-Bugs-To: hannes.janetzek@gmail.com\n"
"POT-Creation-Date: 2011-01-15 23:37+0100\n"
"PO-Revision-Date: 2008-09-02 17:25+0200\n"
"Last-Translator: Fabian Nowak <timystery@arcor.de>\n"
"Language-Team: German\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/e_mod_main.c:398
msgid "Engage"
msgstr "Engage"
#: src/ng_taskbar.c:731
msgid "No name!"
msgstr "Kein Name!"
#: src/ng_launcher.c:619
msgid "Configure Bar"
msgstr "Engage Einstellungen"
#: src/ng_launcher.c:623
msgid "Lock Dragging"
msgstr "Verschieben von Elementen sperren"
#: src/ng_launcher.c:632
msgid "Applications"
msgstr "Anwendungen"
#: src/ng_launcher.c:636
msgid "Edit Icon"
msgstr "Icon bearbeiten"
#: src/ng_border_menu.c:30
msgid "Fullscreen"
msgstr "Vollbildmodus"
#: src/ng_border_menu.c:45
msgid "Close"
msgstr "Schließen"
#: src/ng_border_menu.c:66
msgid "Maximized"
msgstr "Maximiert"
#: src/ng_border_menu.c:86
msgid "Uniconify"
msgstr "Wiederherstellen"
#: src/ng_border_menu.c:88
msgid "Iconify"
msgstr "Zu Icon minimieren"
#: src/ng_gadcon.c:302
msgid "Available Gadgets"
msgstr "Verfügbare Helfer"
#: src/ng_gadcon.c:309
msgid "Add Gadget"
msgstr "Helfer hinzufügen"
#: src/ng_gadcon.c:315
msgid "Selected Gadgets"
msgstr "Ausgewählte Helfer"
#: src/ng_gadcon.c:322
msgid "Remove Gadget"
msgstr "Helfer entfernen"
#: src/ng_gadcon.c:330 src/ng_gadcon.c:373 src/ng_gadcon.c:397
msgid "Description: Unavailable"
msgstr "Beschreibung: Nicht verfügbar"
#: src/ng_config.c:101
msgid "Engage Configuration"
msgstr "Einstellungen für Engage"
#: src/ng_config.c:168
msgid "Bar Items"
msgstr "Leisteninhalte"
#: src/ng_config.c:177 src/ng_config.c:634 src/ng_config_instances.c:104
msgid "Delete"
msgstr "Entfernen"
#: src/ng_config.c:179 src/ng_config.c:636 src/ng_config_instances.c:106
msgid "Configure"
msgstr "Einstellen"
#: src/ng_config.c:181
msgid "Up"
msgstr "Hoch"
#: src/ng_config.c:183
msgid "Down"
msgstr "Runter"
#: src/ng_config.c:188 src/ng_config.c:632 src/ng_config_instances.c:102
msgid "Add"
msgstr "Hinzufügen"
#: src/ng_config.c:190
msgid "Taskbar"
msgstr "Taskbar"
#: src/ng_config.c:192
msgid "Launcher"
msgstr "Starter"
#: src/ng_config.c:194
msgid "Gadcon"
msgstr "Bereich für Helfer"
#: src/ng_config.c:205
msgid "Appearance"
msgstr "Erscheinungsbild"
#: src/ng_config.c:206
msgid "Show Icon Label"
msgstr "Icon-Beschriftung zeigen"
#: src/ng_config.c:209
msgid "Show Background Box"
msgstr "Hintergrundbox zeigen"
#: src/ng_config.c:215
msgid "Icon Size:"
msgstr "Symbolgröße:"
#: src/ng_config.c:217
#, c-format
msgid "%1.0f px"
msgstr "%1.0f px"
#: src/ng_config.c:224
msgid "Background Transparency:"
msgstr "Hintergrundtransparenz:"
#: src/ng_config.c:226
msgid "%1.0f \\%"
msgstr "%1.0f \\%"
#: src/ng_config.c:234
msgid "Stacking"
msgstr "Anordnung"
#: src/ng_config.c:237
msgid "Above All"
msgstr "Über allen"
#: src/ng_config.c:239
msgid "Below Fullscreen"
msgstr "Unterhalb Vollbild"
#: src/ng_config.c:244
msgid "Orientation"
msgstr "Ausrichtung"
#: src/ng_config.c:260
msgid "Zoom"
msgstr "Vergrößerung"
#: src/ng_config.c:261
msgid "Zoom only one icon"
msgstr "Nur ein Symbol vergrößern"
#: src/ng_config.c:263
msgid "Factor:"
msgstr "Faktor:"
#: src/ng_config.c:269
msgid "Range:"
msgstr "Bereich:"
#: src/ng_config.c:275
msgid "Duration:"
msgstr "Dauer:"
#: src/ng_config.c:283
msgid "Auto Hide"
msgstr "Automatisch verbergen"
#: src/ng_config.c:307
msgid "Show Bar when Urgent"
msgstr "Leiste zeigen bei wichtigen Ereignissen"
#: src/ng_config.c:314
msgid "Hide Timeout:"
msgstr "Zeit bis zum Verbergen:"
#: src/ng_config.c:322
msgid "Other"
msgstr "Weitere Einstellungen"
#: src/ng_config.c:323
msgid "Lock Deskflip on Edge"
msgstr "Arbeitsflächenwechsel an Engage-Kante verhindern"
#: src/ng_config.c:325
msgid "Ecomorph Features"
msgstr "\"Ecomorphe\" Eigenschaften"
#: src/ng_config.c:624
msgid "Launcher Settings"
msgstr "Startereinstellungen"
#: src/ng_config.c:644
msgid "Taskbar Settings"
msgstr "Taskbar-Einstellungen"
#: src/ng_config.c:646
msgid "Dont Show Dialogs"
msgstr "Dialoge nicht zeigen"
#: src/ng_config.c:648
msgid "Advanced Window Menu"
msgstr "Erweitertes Fenstermenü"
#: src/ng_config.c:650
msgid "Only Show Current Desk"
msgstr "Nur die aktuelle Arbeitsfläche zeigen"
#: src/ng_config.c:652
msgid "Group Applications by Window Class"
msgstr "Anwendungen nach Fensterklasse gruppieren"
#: src/ng_config.c:654
msgid "Append new Applications on the right Side"
msgstr "Neue Anwendungen an der \"rechten\" Seite anhängen"
#: src/ng_config.c:659
msgid "Iconified Applications"
msgstr "Zu Icon verkleinerte Anwendungen"
#: src/ng_config.c:734 src/ng_config.c:774
msgid "Engage Bar Configuration"
msgstr "Einstellungen für Engage-Taskbar"
#: src/ng_config.c:852
#, c-format
msgid "%i Launcher"
msgstr "%i Starter"
#: src/ng_config.c:859
#, c-format
msgid "%i Taskbar"
msgstr "%i Taskbar"
#: src/ng_config.c:865
#, c-format
msgid "%i Gadcon"
msgstr "%i Bereich für Helfer"
#: src/ng_config.c:879
msgid "Create new source"
msgstr "Neue Anwendungen-Liste erstellen"
#: src/ng_config.c:880
msgid "Enter a name for this new Application Launcher:"
msgstr "Geben Sie einen neuen Namen für diesen Anwendungsstarter an:"
#: src/ng_config.c:889
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"source?"
msgstr "Sie möchten \"%s\" löschen.<br><br>Sind Sie wirklich sicher?"
#: src/ng_config.c:893
msgid "Are you sure you want to delete this source?"
msgstr "Möchten Sie diese Anwendungen-Liste wirklich löschen?"
#: src/ng_config_instances.c:64
msgid "Engage Instances"
msgstr "Engage-Instanzen"
#: src/ng_config_instances.c:94
msgid "Engage - Instances"
msgstr "Engage-Instanzen"
#: src/ng_config_instances.c:164
msgid "Bar"
msgstr "Leiste"
#: src/ng_config_instances.c:363
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"Instance?"
msgstr "Sie möchten \"%s\" löschen.<br><br>Sind Sie wirklich sicher?"
#: src/ng_config_instances.c:367
msgid "Are you sure you want to delete this Instance?"
msgstr "Möchten Sie diese Instanz wirklich löschen?"
#~ msgid "Configure Launcher"
#~ msgstr "Konfiguriere Anwendungsstarter"

387
po/fr.po Normal file
View File

@ -0,0 +1,387 @@
# French translation for Engage.
# This file is put in the public domain.
# batden <batden@orange.fr>, 2010, 2011.
# dazibao <dazibao@sfr.fr>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: Engage\n"
"Report-Msgid-Bugs-To: hannes.janetzek@gmail.com\n"
"POT-Creation-Date: 2011-09-04 16:46+0200\n"
"PO-Revision-Date: 2011-09-11 15:36+0200\n"
"Last-Translator: dazibao <dazibao@sfr.fr>\n"
"Language-Team: French <sansgourou@gmail.com>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
"X-Poedit-Language: French\n"
"X-Poedit-Country: FRANCE\n"
"X-Poedit-SourceCharset: utf-8\n"
#: src/e_mod_main.c:1666 src/e_mod_main.c:1824 src/e_mod_main.c:1851
msgid "Engage"
msgstr "Engage"
#: src/ng_taskbar.c:641
msgid "No name!"
msgstr "Pas de nom !"
#: src/ng_launcher.c:275
msgid "Open folder with EFM"
msgstr "Ouvrir les dossiers avec EFM"
#: src/ng_launcher.c:561
msgid "Configure Bar"
msgstr "Configurer la barre"
#: src/ng_launcher.c:565
msgid "Lock Dragging"
msgstr "Verrouiller le glisser"
#: src/ng_launcher.c:574
msgid "Applications"
msgstr "Applications"
#: src/ng_launcher.c:578
msgid "Edit Icon"
msgstr "Éditer l'icone"
#: src/ng_border_menu.c:30
msgid "Fullscreen"
msgstr "Plein écran"
#: src/ng_border_menu.c:45
msgid "Close"
msgstr "Fermer"
#: src/ng_border_menu.c:66
msgid "Maximized"
msgstr "Maximisée"
#: src/ng_border_menu.c:86
msgid "Uniconify"
msgstr "Restaurer"
#: src/ng_border_menu.c:88
msgid "Iconify"
msgstr "Minimiser"
#: src/ng_gadcon.c:299
msgid "Available Gadgets"
msgstr "Gadgets disponibles"
#: src/ng_gadcon.c:306
msgid "Add Gadget"
msgstr "Ajouter un gadget"
#: src/ng_gadcon.c:312
msgid "Selected Gadgets"
msgstr "Gadgets sélectionnés"
#: src/ng_gadcon.c:319
msgid "Remove Gadget"
msgstr "Supprimer ce gadget"
#: src/ng_gadcon.c:327 src/ng_gadcon.c:370 src/ng_gadcon.c:394
msgid "Description: Unavailable"
msgstr "Description : non disponible"
#: src/ng_config.c:98
msgid "Engage Configuration"
msgstr "Configuration de Engage"
#: src/ng_config.c:164 src/ng_config.c:225
msgid "Appearance"
msgstr "Aspect"
#: src/ng_config.c:165
msgid "Icon Size:"
msgstr "Taille de l'icone :"
#: src/ng_config.c:167
#, c-format
msgid "%1.0f px"
msgstr "%1.0f px"
#: src/ng_config.c:181
msgid "Background Opacity:"
msgstr "Opacité du fond :"
#: src/ng_config.c:183
msgid "%1.0f \\%"
msgstr "%1.0f \\%"
#: src/ng_config.c:191
msgid "Show Background Box"
msgstr "Afficher le fond"
#: src/ng_config.c:194
msgid "Show Mouse-Over Animation"
msgstr "Afficher l'animation au survol"
#: src/ng_config.c:199
msgid "Orientation"
msgstr "Disposition"
#: src/ng_config.c:201
msgid "Bottom Edge"
msgstr "Bord inférieur"
#: src/ng_config.c:203
msgid "Top Edge"
msgstr "Bord supérieur"
#: src/ng_config.c:205
msgid "Left Edge"
msgstr "Bord gauche"
#: src/ng_config.c:207
msgid "Right Edge"
msgstr "Bord droit"
#: src/ng_config.c:228 src/ng_config.c:247
msgid "Zoom"
msgstr "Zoom"
#: src/ng_config.c:229
msgid "Factor:"
msgstr "Facteur :"
#: src/ng_config.c:235
msgid "Range:"
msgstr "Étendue :"
#: src/ng_config.c:241
msgid "Duration:"
msgstr "Durée :"
#: src/ng_config.c:250 src/ng_config.c:278
msgid "Bar Items"
msgstr "Éléments de la barre"
#: src/ng_config.c:258 src/ng_config.c:538 src/ng_config_instances.c:104
msgid "Delete"
msgstr "Supprimer"
#: src/ng_config.c:260 src/ng_config.c:540 src/ng_config_instances.c:106
msgid "Configure"
msgstr "Configurer"
#: src/ng_config.c:262
msgid "Up"
msgstr "Monter"
#: src/ng_config.c:264
msgid "Down"
msgstr "Descendre"
#: src/ng_config.c:269 src/ng_config.c:536 src/ng_config_instances.c:102
msgid "Add"
msgstr "Ajouter"
#: src/ng_config.c:271
msgid "Taskbar"
msgstr "Barre des tâches"
#: src/ng_config.c:273
msgid "Launcher"
msgstr "Lanceur"
#: src/ng_config.c:275
msgid "Gadcon"
msgstr "Gadcon"
#: src/ng_config.c:281 src/ng_config.c:300
msgid "Auto Hide"
msgstr "Auto-masquage"
#: src/ng_config.c:298
msgid "Show Bar when Urgent"
msgstr "Afficher la barre si événement urgent"
#: src/ng_config.c:306
msgid "Stacking"
msgstr "Empilement"
#: src/ng_config.c:308
msgid "Above All"
msgstr "Toujours au-dessus"
#: src/ng_config.c:310
msgid "Below Fullscreen"
msgstr "Sous les fenêtres plein écran"
#: src/ng_config.c:314 src/ng_config.c:321
msgid "Other"
msgstr "Autres"
#: src/ng_config.c:315
msgid "Ecomorph Features"
msgstr "Fonctionnalités à la Ecomorph"
#: src/ng_config.c:317
msgid "Show Icon Label"
msgstr "Montrer l'étiquette de l'icone"
#: src/ng_config.c:528
msgid "Launcher Settings"
msgstr "Paramétrage du lanceur"
#: src/ng_config.c:548
msgid "Taskbar Settings"
msgstr "Paramétrage de la barre des tâches"
#: src/ng_config.c:550
msgid "Dont Show Dialogs"
msgstr "Ne pas afficher les boîtes de dialogue"
#: src/ng_config.c:553
msgid "Advanced Window Menu"
msgstr "Menu avancé de la fenêtre"
#: src/ng_config.c:556
msgid "Only Show Current Desk"
msgstr "Afficher uniquement le bureau actuel"
#: src/ng_config.c:559
msgid "Group Applications by Window Class"
msgstr "Grouper les applis par classe de fenêtre"
#: src/ng_config.c:562
msgid "Append new Applications on the right Side"
msgstr "Ajouter les nouvelles applis par la droite"
#: src/ng_config.c:568
msgid "Iconified Applications"
msgstr "Applications minimisées"
#: src/ng_config.c:643 src/ng_config.c:683
msgid "Engage Bar Configuration"
msgstr "Configuration de la barre"
#: src/ng_config.c:788
msgid "Create new source"
msgstr "Créer une nouvelle source"
#: src/ng_config.c:789
msgid "Enter a name for this new Application Launcher:"
msgstr "Entrer un nom pour ce nouveau lanceur :"
#: src/ng_config.c:798
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"source?"
msgstr ""
"Vous avez demandé à supprimer « %s ».<br><br>Voulez-vous vraiment supprimer "
"cette source ?"
#: src/ng_config.c:802
msgid "Are you sure you want to delete this source?"
msgstr "Voulez-vous vraiment supprimer cette source ?"
#: src/ng_config_instances.c:64 src/ng_config_instances.c:94
msgid "Engage Instances"
msgstr "Instances de Engage"
#: src/ng_config_instances.c:164
msgid "Bar"
msgstr "Barre"
#: src/ng_config_instances.c:271
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"Instance?"
msgstr ""
"Vous avez demandé à supprimer « %s ».<br><br>Voulez-vous vraiment le faire ?"
#: src/ng_config_instances.c:275
msgid "Are you sure you want to delete this Instance?"
msgstr "Voulez-vous vraiment supprimer cette instance ?"
#~ msgid "Reflection Opacity:"
#~ msgstr "Opacité du reflet:"
#~ msgid "%1.0f"
#~ msgstr "%1.0f"
#~ msgid "Itask NG"
#~ msgstr "Itask NG"
#~ msgid "Configure Launcher"
#~ msgstr "Configurer le lanceur"
#~ msgid "Window Locks"
#~ msgstr "Verrous de la fenêtre"
#~ msgid "Remember"
#~ msgstr "Mémoriser"
#~ msgid "Borders"
#~ msgstr "Bordures"
#~ msgid "Send to Desktop"
#~ msgstr "Envoyer sur le bureau"
#~ msgid "Pin to Desktop"
#~ msgstr "Épingler au bureau"
#~ msgid "Unpin from Desktop"
#~ msgstr "Désépingler du bureau"
#~ msgid "State"
#~ msgstr "État"
#~ msgid "Sticky"
#~ msgstr "Ancré"
#~ msgid "Skip Window List"
#~ msgstr "Ne pas afficher dans la liste des fenêtres"
#~ msgid "Add To Favorites Menu"
#~ msgstr "Ajouter au menu des favoris"
#~ msgid "Add To Launcher"
#~ msgstr "Ajouter au lanceur"
#~ msgid "Create Icon"
#~ msgstr "Créer un icone"
#~ msgid "Window Properties"
#~ msgstr "Propriétés de la fenêtre"
#~ msgid "Kill"
#~ msgstr "Tuer"
#~ msgid "Shaded"
#~ msgstr "Enroulée"
#~ msgid "Zoom only one icon"
#~ msgstr "Ne zoomer qu'un seul icone"
#~ msgid "%0.01f"
#~ msgstr "%0.01f"
#~ msgid "%0.1f"
#~ msgstr "%0.1f"
#~ msgid "Hide Behavior"
#~ msgstr "Comportement du masquage"
#~ msgid "Hide Timeout:"
#~ msgstr "Délai avant masquage :"
#~ msgid "Show Iconified"
#~ msgstr "Afficher la minimisation"
#~ msgid "Are you sure you want to delete this Itask NG source?"
#~ msgstr "Voulez-vous vraiment supprimer cette source ?"
#~ msgid "Itask NG Instances"
#~ msgstr "Instances de Itask NG"
#~ msgid "Itask NG - Instances"
#~ msgstr "Itask NG - Instances"

299
po/it.po Normal file
View File

@ -0,0 +1,299 @@
# Italian translation for E17 engage module.
# This file is put in the public domain.
# Massimo Maiurana <maiurana@gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Engage\n"
"Report-Msgid-Bugs-To: hannes.janetzek@gmail.com\n"
"POT-Creation-Date: 2011-09-11 21:49+0200\n"
"PO-Revision-Date: 2011-09-11 21:50+0200\n"
"Last-Translator: Massimo Maiurana <maiurana@gmail.com>\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
#: src/e_mod_main.c:1666 src/e_mod_main.c:1824 src/e_mod_main.c:1851
msgid "Engage"
msgstr "Engage"
#: src/ng_taskbar.c:641
msgid "No name!"
msgstr "Nessun nome!"
#: src/ng_launcher.c:275
msgid "Open folder with EFM"
msgstr "Apri directory con EFM"
#: src/ng_launcher.c:561
msgid "Configure Bar"
msgstr "Configura barra"
#: src/ng_launcher.c:565
msgid "Lock Dragging"
msgstr "Blocca trascinamento"
#: src/ng_launcher.c:574
msgid "Applications"
msgstr "Applicazioni"
#: src/ng_launcher.c:578
msgid "Edit Icon"
msgstr "Modifica icona"
#: src/ng_border_menu.c:30
msgid "Fullscreen"
msgstr "A tutto schermo"
#: src/ng_border_menu.c:45
msgid "Close"
msgstr "Chiudi"
#: src/ng_border_menu.c:66
msgid "Maximized"
msgstr "Massimizzata"
#: src/ng_border_menu.c:86
msgid "Uniconify"
msgstr "Disiconifica"
#: src/ng_border_menu.c:88
msgid "Iconify"
msgstr "Iconifica"
#: src/ng_gadcon.c:299
msgid "Available Gadgets"
msgstr "Gadget disponibili"
#: src/ng_gadcon.c:306
msgid "Add Gadget"
msgstr "Aggiungi gadget"
#: src/ng_gadcon.c:312
msgid "Selected Gadgets"
msgstr "Gadget selezionati"
#: src/ng_gadcon.c:319
msgid "Remove Gadget"
msgstr "Rimuovi gadget"
#: src/ng_gadcon.c:327 src/ng_gadcon.c:370 src/ng_gadcon.c:394
msgid "Description: Unavailable"
msgstr "Descrizione: non disponibile"
#: src/ng_config.c:98
msgid "Engage Configuration"
msgstr "Configurazione di Engage"
#: src/ng_config.c:164 src/ng_config.c:225
msgid "Appearance"
msgstr "Aspetto"
#: src/ng_config.c:165
msgid "Icon Size:"
msgstr "Dimensione icona:"
#: src/ng_config.c:167
#, c-format
msgid "%1.0f px"
msgstr "%1.0f px"
#: src/ng_config.c:181
msgid "Background Opacity:"
msgstr "Trasparenza sfondo:"
#: src/ng_config.c:183
msgid "%1.0f \\%"
msgstr "%1.0f \\%"
#: src/ng_config.c:191
msgid "Show Background Box"
msgstr "Mostra box di sfondo"
#: src/ng_config.c:194
msgid "Show Mouse-Over Animation"
msgstr "Animazione al passaggio del mouse"
#: src/ng_config.c:199
msgid "Orientation"
msgstr "Orientamento"
#: src/ng_config.c:201
msgid "Bottom Edge"
msgstr "Bordo inferiore"
#: src/ng_config.c:203
msgid "Top Edge"
msgstr "Bordo superiore"
#: src/ng_config.c:205
msgid "Left Edge"
msgstr "Bordo sinistro"
#: src/ng_config.c:207
msgid "Right Edge"
msgstr "Bordo destro"
#: src/ng_config.c:228 src/ng_config.c:247
msgid "Zoom"
msgstr "Zoom"
#: src/ng_config.c:229
msgid "Factor:"
msgstr "Fattore:"
#: src/ng_config.c:235
msgid "Range:"
msgstr "Intervallo:"
#: src/ng_config.c:241
msgid "Duration:"
msgstr "Durata:"
#: src/ng_config.c:250 src/ng_config.c:278
msgid "Bar Items"
msgstr "Elementi nella barra"
#: src/ng_config.c:258 src/ng_config.c:538 src/ng_config_instances.c:104
msgid "Delete"
msgstr "Elimina"
#: src/ng_config.c:260 src/ng_config.c:540 src/ng_config_instances.c:106
msgid "Configure"
msgstr "Configura"
#: src/ng_config.c:262
msgid "Up"
msgstr "Su"
#: src/ng_config.c:264
msgid "Down"
msgstr "Giù"
#: src/ng_config.c:269 src/ng_config.c:536 src/ng_config_instances.c:102
msgid "Add"
msgstr "Aggiungi"
#: src/ng_config.c:271
msgid "Taskbar"
msgstr "Taskbar"
#: src/ng_config.c:273
msgid "Launcher"
msgstr "Lanciatore"
#: src/ng_config.c:275
msgid "Gadcon"
msgstr "Gadcon"
#: src/ng_config.c:281 src/ng_config.c:300
msgid "Auto Hide"
msgstr "Nascondi automaticamente"
#: src/ng_config.c:298
msgid "Show Bar when Urgent"
msgstr "Mostra barra su Urgenti"
#: src/ng_config.c:306
msgid "Stacking"
msgstr "Livello"
#: src/ng_config.c:308
msgid "Above All"
msgstr "Sopra tutto"
#: src/ng_config.c:310
msgid "Below Fullscreen"
msgstr "Sotto finestre a tutto schermo"
#: src/ng_config.c:314 src/ng_config.c:321
msgid "Other"
msgstr "Altro"
#: src/ng_config.c:315
msgid "Ecomorph Features"
msgstr "Funzionalità Ecomorph"
#: src/ng_config.c:317
msgid "Show Icon Label"
msgstr "Mostra etichetta icona"
#: src/ng_config.c:528
msgid "Launcher Settings"
msgstr "Impostazioni lanciatore"
#: src/ng_config.c:548
msgid "Taskbar Settings"
msgstr "Impostazioni taskbar"
#: src/ng_config.c:550
msgid "Dont Show Dialogs"
msgstr "Non mostrare finestre dialogo"
#: src/ng_config.c:553
msgid "Advanced Window Menu"
msgstr "Menù finestra avanzato"
#: src/ng_config.c:556
msgid "Only Show Current Desk"
msgstr "Mostra solo desktop corrente"
#: src/ng_config.c:559
msgid "Group Applications by Window Class"
msgstr "Raggruppa applicazioni per classe finestra"
#: src/ng_config.c:562
msgid "Append new Applications on the right Side"
msgstr "Aggiungi nuove applicazioni sul lato destro"
#: src/ng_config.c:568
msgid "Iconified Applications"
msgstr "Applicazioni iconificate"
#: src/ng_config.c:643 src/ng_config.c:683
msgid "Engage Bar Configuration"
msgstr "Configurazione barra Engage"
#: src/ng_config.c:788
msgid "Create new source"
msgstr "Crea nuova fonte"
#: src/ng_config.c:789
msgid "Enter a name for this new Application Launcher:"
msgstr "Inserire un nome per il nuovo lanciatore:"
#: src/ng_config.c:798
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"source?"
msgstr ""
"Avete richiesto di eliminare \"%s\".<br><br>Siete sicuri di voler eliminare "
"questa fonte?"
#: src/ng_config.c:802
msgid "Are you sure you want to delete this source?"
msgstr "Siete sicuri di voler eliminare questa fonte?"
#: src/ng_config_instances.c:64 src/ng_config_instances.c:94
msgid "Engage Instances"
msgstr "Istanze di Engage"
#: src/ng_config_instances.c:164
msgid "Bar"
msgstr "Barra"
#: src/ng_config_instances.c:271
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"Instance?"
msgstr ""
"Avete richiesto di eliminare \"%s\".<br><br>Siete sicuri di voler eliminare "
"questa istanza?"
#: src/ng_config_instances.c:275
msgid "Are you sure you want to delete this Instance?"
msgstr "Siete sicuri di voler eliminare questa istanza?"

326
po/itask-ng.pot Normal file
View File

@ -0,0 +1,326 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Hannes Janetzek
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: hannes.janetzek@gmail.com\n"
"POT-Creation-Date: 2008-09-02 16:42+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: src/e_mod_main.c:338
msgid "Itask NG"
msgstr ""
#: src/ng_taskbar.c:851
msgid "No name!"
msgstr ""
#: src/ng_launcher.c:726
msgid "Configure Bar"
msgstr ""
#: src/ng_launcher.c:733
msgid "Configure Launcher"
msgstr ""
#: src/ng_launcher.c:737
msgid "Lock Dragging"
msgstr ""
#: src/ng_launcher.c:746
msgid "Set Single Instance"
msgstr ""
#: src/ng_launcher.c:752 src/ng_border_menu.c:307
msgid "Edit Icon"
msgstr ""
#: src/ng_border_menu.c:154
msgid "Window Locks"
msgstr ""
#: src/ng_border_menu.c:161
msgid "Remember"
msgstr ""
#: src/ng_border_menu.c:170
msgid "Borders"
msgstr ""
#: src/ng_border_menu.c:184
msgid "Send to Desktop"
msgstr ""
#: src/ng_border_menu.c:196
msgid "Pin to Desktop"
msgstr ""
#: src/ng_border_menu.c:208
msgid "Unpin from Desktop"
msgstr ""
#: src/ng_border_menu.c:241
msgid "State"
msgstr ""
#: src/ng_border_menu.c:255 src/ng_border_menu.c:750
msgid "Sticky"
msgstr ""
#: src/ng_border_menu.c:268 src/ng_border_menu.c:763
msgid "Fullscreen"
msgstr ""
#: src/ng_border_menu.c:288
msgid "Skip Window List"
msgstr ""
#: src/ng_border_menu.c:312
msgid "Add To Favorites Menu"
msgstr ""
#: src/ng_border_menu.c:317
msgid "Add To Launcher"
msgstr ""
#: src/ng_border_menu.c:324
msgid "Create Icon"
msgstr ""
#: src/ng_border_menu.c:334
msgid "Window Properties"
msgstr ""
#: src/ng_border_menu.c:347
msgid "Kill"
msgstr ""
#: src/ng_border_menu.c:357 src/ng_border_menu.c:372
msgid "Close"
msgstr ""
#: src/ng_border_menu.c:395
msgid "Maximized"
msgstr ""
#: src/ng_border_menu.c:419
msgid "Uniconify"
msgstr ""
#: src/ng_border_menu.c:421
msgid "Iconify"
msgstr ""
#: src/ng_border_menu.c:737
msgid "Shaded"
msgstr ""
#: src/ng_gadcon.c:429
msgid "Available Gadgets"
msgstr ""
#: src/ng_gadcon.c:436
msgid "Add Gadget"
msgstr ""
#: src/ng_gadcon.c:442
msgid "Selected Gadgets"
msgstr ""
#: src/ng_gadcon.c:449
msgid "Remove Gadget"
msgstr ""
#: src/ng_gadcon.c:457 src/ng_gadcon.c:492 src/ng_gadcon.c:514
msgid "Description: Unavailable"
msgstr ""
#: src/ng_config.c:83
msgid "Itask NG Configuration"
msgstr ""
#: src/ng_config.c:153
msgid "Bar Items"
msgstr ""
#: src/ng_config.c:161 src/ng_config.c:613 src/ng_config_instances.c:92
msgid "Delete"
msgstr ""
#: src/ng_config.c:163 src/ng_config.c:615 src/ng_config_instances.c:94
msgid "Configure"
msgstr ""
#: src/ng_config.c:165
msgid "Up"
msgstr ""
#: src/ng_config.c:167
msgid "Down"
msgstr ""
#: src/ng_config.c:174 src/ng_config.c:611 src/ng_config_instances.c:90
msgid "Add"
msgstr ""
#: src/ng_config.c:176
msgid "Taskbar"
msgstr ""
#: src/ng_config.c:178
msgid "Launcher"
msgstr ""
#: src/ng_config.c:180
msgid "Gadcon"
msgstr ""
#: src/ng_config.c:187
msgid "Zooming"
msgstr ""
#: src/ng_config.c:188
msgid "Zoom only one icon"
msgstr ""
#: src/ng_config.c:190
msgid "Zoomfactor:"
msgstr ""
#: src/ng_config.c:192
#, c-format
msgid "%0.01f"
msgstr ""
#: src/ng_config.c:196
msgid "Zoom Range:"
msgstr ""
#: src/ng_config.c:198 src/ng_config.c:204 src/ng_config.c:284
#, c-format
msgid "%0.1f"
msgstr ""
#: src/ng_config.c:202
msgid "Zoom Duration:"
msgstr ""
#: src/ng_config.c:215
msgid "Appearance"
msgstr ""
#: src/ng_config.c:216
msgid "Show Icon Label"
msgstr ""
#: src/ng_config.c:219
msgid "Show Background Box"
msgstr ""
#: src/ng_config.c:225
msgid "Icon Size:"
msgstr ""
#: src/ng_config.c:227
#, c-format
msgid "%1.0f px"
msgstr ""
#: src/ng_config.c:234
msgid "Background Transparency:"
msgstr ""
#: src/ng_config.c:236
msgid "%1.0f \\%"
msgstr ""
#: src/ng_config.c:261
msgid "Hide Behavior"
msgstr ""
#: src/ng_config.c:282
msgid "Hide Timeout:"
msgstr ""
#: src/ng_config.c:291
msgid "Orientation"
msgstr ""
#: src/ng_config.c:603
msgid "Launcher Settings"
msgstr ""
#: src/ng_config.c:623
msgid "Taskbar Settings"
msgstr ""
#: src/ng_config.c:625
msgid "Dont Show Dialogs"
msgstr ""
#: src/ng_config.c:627
msgid "Advanced Window Menu"
msgstr ""
#: src/ng_config.c:629
msgid "Only Show Current Desk"
msgstr ""
#: src/ng_config.c:634
msgid "Show Iconified"
msgstr ""
#: src/ng_config.c:720 src/ng_config.c:761
msgid "Itask NG Bar Configuration"
msgstr ""
#: src/ng_config.c:869
msgid "Create new Itask NG source"
msgstr ""
#: src/ng_config.c:870
msgid "Enter a name for this new Application Launcher:"
msgstr ""
#: src/ng_config.c:881
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"ng source?"
msgstr ""
#: src/ng_config.c:885
msgid "Are you sure you want to delete this Itask NG source?"
msgstr ""
#: src/ng_config_instances.c:49
msgid "Itask NG Instances"
msgstr ""
#: src/ng_config_instances.c:82
msgid "Itask NG - Instances"
msgstr ""
#: src/ng_config_instances.c:152
msgid "Bar"
msgstr ""
#: src/ng_config_instances.c:336
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"Instance?"
msgstr ""
#: src/ng_config_instances.c:340
msgid "Are you sure you want to delete this Instance?"
msgstr ""

314
po/pt.po Normal file
View File

@ -0,0 +1,314 @@
# Portuguese translation for engage
# This file is distributed under the same license as the enlightenment package.
# Sérgio Marques <sarquespt@gmail.com>, 2010-2011.
msgid ""
msgstr ""
"Project-Id-Version: engage\n"
"Report-Msgid-Bugs-To: hannes.janetzek@gmail.com\n"
"POT-Creation-Date: 2011-04-04 14:24+0200\n"
"PO-Revision-Date: 2012-08-26 00:02+0100\n"
"Last-Translator: Sérgio Marques <smarquespt@gmail.com>\n"
"Language-Team: Portuguese <>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Poedit-Language: Portuguese\n"
"X-Poedit-Country: Portugal\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Generator: Lokalize 1.1\n"
#: src/e_mod_main.c:1695
#: src/e_mod_main.c:1786
#: src/e_mod_main.c:1810
msgid "Engage"
msgstr "Engage"
#: src/ng_taskbar.c:684
msgid "No name!"
msgstr "Sem nome!"
#: src/ng_launcher.c:529
msgid "Configure Bar"
msgstr "Configurar barra"
#: src/ng_launcher.c:533
msgid "Lock Dragging"
msgstr "Bloquear arrastamento"
#: src/ng_launcher.c:542
msgid "Applications"
msgstr "Aplicações"
#: src/ng_launcher.c:546
msgid "Edit Icon"
msgstr "Editar ícone"
#: src/ng_border_menu.c:30
msgid "Fullscreen"
msgstr "Ecrã completo"
#: src/ng_border_menu.c:45
msgid "Close"
msgstr "Fechar"
#: src/ng_border_menu.c:66
msgid "Maximized"
msgstr "Maximizada"
#: src/ng_border_menu.c:86
msgid "Uniconify"
msgstr "Restaurar"
#: src/ng_border_menu.c:88
msgid "Iconify"
msgstr "Minimizar"
#: src/ng_gadcon.c:299
msgid "Available Gadgets"
msgstr "\"Gadgets\" disponíveis"
#: src/ng_gadcon.c:306
msgid "Add Gadget"
msgstr "Adicionar \"gadget\""
#: src/ng_gadcon.c:312
msgid "Selected Gadgets"
msgstr "\"Gadgets\" selecionados"
#: src/ng_gadcon.c:319
msgid "Remove Gadget"
msgstr "Remover \"gadget\""
#: src/ng_gadcon.c:327
#: src/ng_gadcon.c:370
#: src/ng_gadcon.c:394
msgid "Description: Unavailable"
msgstr "Descrição: indisponível"
#: src/ng_config.c:101
msgid "Engage Configuration"
msgstr "Configuração do Engage"
#: src/ng_config.c:171
#: src/ng_config.c:229
msgid "Appearance"
msgstr "Aparência"
#: src/ng_config.c:172
msgid "Icon Size:"
msgstr "Tamanho dos ícones:"
#: src/ng_config.c:174
#, c-format
msgid "%1.0f px"
msgstr "%1.0f px"
#: src/ng_config.c:179
msgid "Reflection Opacity:"
msgstr "Opacidade do reflexo:"
#: src/ng_config.c:181
#, c-format
msgid "%1.0f"
msgstr "%1.0f"
#: src/ng_config.c:188
msgid "Background Opacity:"
msgstr "Opacidade do fundo:"
#: src/ng_config.c:190
msgid "%1.0f \\%"
msgstr "%1.0f \\%"
#: src/ng_config.c:198
msgid "Show Background Box"
msgstr "Mostrar caixa de fundo"
#: src/ng_config.c:203
msgid "Orientation"
msgstr "Orientação"
#: src/ng_config.c:205
msgid "Bottom Edge"
msgstr "Em baixo"
#: src/ng_config.c:207
msgid "Top Edge"
msgstr "Em cima"
#: src/ng_config.c:209
msgid "Left Edge"
msgstr "À esquerda"
#: src/ng_config.c:211
msgid "Right Edge"
msgstr "À direita"
#: src/ng_config.c:232
#: src/ng_config.c:251
msgid "Zoom"
msgstr "Ampliação"
#: src/ng_config.c:233
msgid "Factor:"
msgstr "Fator:"
#: src/ng_config.c:239
msgid "Range:"
msgstr "Intervalo:"
#: src/ng_config.c:245
msgid "Duration:"
msgstr "Duração:"
#: src/ng_config.c:254
#: src/ng_config.c:282
msgid "Bar Items"
msgstr "Itens da barra"
#: src/ng_config.c:262
#: src/ng_config.c:539
#: src/ng_config_instances.c:104
msgid "Delete"
msgstr "Apagar"
#: src/ng_config.c:264
#: src/ng_config.c:541
#: src/ng_config_instances.c:106
msgid "Configure"
msgstr "Configurar"
#: src/ng_config.c:266
msgid "Up"
msgstr "Subir"
#: src/ng_config.c:268
msgid "Down"
msgstr "Descer"
#: src/ng_config.c:273
#: src/ng_config.c:537
#: src/ng_config_instances.c:102
msgid "Add"
msgstr "Adicionar"
#: src/ng_config.c:275
msgid "Taskbar"
msgstr "Barra de tarefas"
#: src/ng_config.c:277
msgid "Launcher"
msgstr "Lançador"
#: src/ng_config.c:279
msgid "Gadcon"
msgstr "Gadcon"
#: src/ng_config.c:285
#: src/ng_config.c:301
msgid "Auto Hide"
msgstr "Ocultar automaticamente"
#: src/ng_config.c:299
msgid "Show Bar when Urgent"
msgstr "Mostrar barra se for urgente"
#: src/ng_config.c:307
msgid "Stacking"
msgstr "Empilhamento"
#: src/ng_config.c:309
msgid "Above All"
msgstr "Por cima de tudo"
#: src/ng_config.c:311
msgid "Below Fullscreen"
msgstr "Por baixo de ecrã completo"
#: src/ng_config.c:315
#: src/ng_config.c:322
msgid "Other"
msgstr "Outras"
#: src/ng_config.c:316
msgid "Ecomorph Features"
msgstr "Opções Ecomorph"
#: src/ng_config.c:318
msgid "Show Icon Label"
msgstr "Mostrar texto dos ícones"
#: src/ng_config.c:529
msgid "Launcher Settings"
msgstr "Definições do lançador"
#: src/ng_config.c:549
msgid "Taskbar Settings"
msgstr "Definições da barra de tarefas"
#: src/ng_config.c:551
msgid "Dont Show Dialogs"
msgstr "Não mostrar diálogos"
#: src/ng_config.c:554
msgid "Advanced Window Menu"
msgstr "Menu avançado"
#: src/ng_config.c:557
msgid "Only Show Current Desk"
msgstr "Mostrar na área de trabalho atual"
#: src/ng_config.c:560
msgid "Group Applications by Window Class"
msgstr "Agrupar aplicações por classe de janela"
#: src/ng_config.c:563
msgid "Append new Applications on the right Side"
msgstr "Colocar novas aplicações no lado direito"
#: src/ng_config.c:569
msgid "Iconified Applications"
msgstr "Aplicações miniminizadas"
#: src/ng_config.c:644
#: src/ng_config.c:684
msgid "Engage Bar Configuration"
msgstr "Configuração do Engage"
#: src/ng_config.c:789
msgid "Create new source"
msgstr "Criar nova fonte"
#: src/ng_config.c:790
msgid "Enter a name for this new Application Launcher:"
msgstr "Indique o nome para este lançador de aplicações:"
#: src/ng_config.c:799
#, c-format
msgid "You requested to delete \"%s\".<br><br>Are you sure you want to delete this source?"
msgstr "Solicitou a eliminação de \"%s\".<br><br>Tem a certeza que quer eliminar esta fonte?"
#: src/ng_config.c:803
msgid "Are you sure you want to delete this source?"
msgstr "Tem a certeza que quer eliminar esta fonte?"
#: src/ng_config_instances.c:64
#: src/ng_config_instances.c:94
msgid "Engage Instances"
msgstr "Instâncias Engage"
#: src/ng_config_instances.c:164
msgid "Bar"
msgstr "Barra"
#: src/ng_config_instances.c:338
#, c-format
msgid "You requested to delete \"%s\".<br><br>Are you sure you want to delete this Instance?"
msgstr "Solicitou a eliminação de \"%s\".<br><br>Tem a certeza que quer eliminar esta instância?"
#: src/ng_config_instances.c:342
msgid "Are you sure you want to delete this Instance?"
msgstr "Tem a certeza que quer eliminar esta instância?"

11
po/remove-potcdate.sed Normal file
View File

@ -0,0 +1,11 @@
/^"POT-Creation-Date: .*"$/{
x
s/P/P/
ta
g
d
bb
:a
x
:b
}

319
po/sl.po Normal file
View File

@ -0,0 +1,319 @@
# Slovenian translation of itask_ng.
# This file is put in the public domain.
# r1to <renato.rener@gmail.com>, 2011.
# , fuzzy
#
#
msgid ""
msgstr ""
"Project-Id-Version: itask_ng 1.0\n"
"Report-Msgid-Bugs-To: hannes.janetzek@gmail.com\n"
"POT-Creation-Date: 2011-04-04 14:24+0200\n"
"PO-Revision-Date: 2011-02-24 16:58+0100\n"
"Last-Translator: r1to <renato.rener@gmail.com>\n"
"Language-Team: Slovenian <sl@li.org>\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: src/e_mod_main.c:1695 src/e_mod_main.c:1786 src/e_mod_main.c:1810
msgid "Engage"
msgstr ""
#: src/ng_taskbar.c:684
msgid "No name!"
msgstr "Ni imena !"
#: src/ng_launcher.c:529
msgid "Configure Bar"
msgstr "Nastavi vrstico"
#: src/ng_launcher.c:533
msgid "Lock Dragging"
msgstr "Zakleni vleko"
#: src/ng_launcher.c:542
msgid "Applications"
msgstr "Programi"
#: src/ng_launcher.c:546
msgid "Edit Icon"
msgstr "Uredi ikono"
#: src/ng_border_menu.c:30
msgid "Fullscreen"
msgstr "Celozaslonsko"
#: src/ng_border_menu.c:45
msgid "Close"
msgstr "Zapri"
#: src/ng_border_menu.c:66
msgid "Maximized"
msgstr "Razpeto"
#: src/ng_border_menu.c:86
msgid "Uniconify"
msgstr "Deikoniziraj"
#: src/ng_border_menu.c:88
msgid "Iconify"
msgstr "Ikoniziraj"
#: src/ng_gadcon.c:299
msgid "Available Gadgets"
msgstr "Dostopni gadgeti"
#: src/ng_gadcon.c:306
msgid "Add Gadget"
msgstr "Dodaj gadget"
#: src/ng_gadcon.c:312
msgid "Selected Gadgets"
msgstr "Izbrani gadgeti"
#: src/ng_gadcon.c:319
msgid "Remove Gadget"
msgstr "Odstrani gadget"
#: src/ng_gadcon.c:327 src/ng_gadcon.c:370 src/ng_gadcon.c:394
msgid "Description: Unavailable"
msgstr "Opis: Nedostopno"
#: src/ng_config.c:101
#, fuzzy
msgid "Engage Configuration"
msgstr "Itask·NG·nastavitve"
#: src/ng_config.c:171 src/ng_config.c:229
msgid "Appearance"
msgstr "Videz"
#: src/ng_config.c:172
msgid "Icon Size:"
msgstr "Velikost ikone"
#: src/ng_config.c:174
#, c-format
msgid "%1.0f px"
msgstr "%1.0f·pik."
#: src/ng_config.c:179
msgid "Reflection Opacity:"
msgstr "Prozornost zrcaljenja"
#: src/ng_config.c:181
#, c-format
msgid "%1.0f"
msgstr "%1.0f"
#: src/ng_config.c:188
msgid "Background Opacity:"
msgstr "Prozornost ozadja"
#: src/ng_config.c:190
msgid "%1.0f \\%"
msgstr "%1.0f·\\%"
#: src/ng_config.c:198
msgid "Show Background Box"
msgstr "Prikaži škatlo ozadja"
#: src/ng_config.c:203
msgid "Orientation"
msgstr "Usmeritev"
#: src/ng_config.c:205
msgid "Bottom Edge"
msgstr ""
#: src/ng_config.c:207
msgid "Top Edge"
msgstr ""
#: src/ng_config.c:209
msgid "Left Edge"
msgstr ""
#: src/ng_config.c:211
msgid "Right Edge"
msgstr ""
#: src/ng_config.c:232 src/ng_config.c:251
msgid "Zoom"
msgstr "Povečava"
#: src/ng_config.c:233
msgid "Factor:"
msgstr "Dejavnik:"
#: src/ng_config.c:239
msgid "Range:"
msgstr "Domet:"
#: src/ng_config.c:245
msgid "Duration:"
msgstr "Trajanje:"
#: src/ng_config.c:254 src/ng_config.c:282
msgid "Bar Items"
msgstr "Predmeti vrstice"
#: src/ng_config.c:262 src/ng_config.c:539 src/ng_config_instances.c:104
msgid "Delete"
msgstr "Izbriši"
#: src/ng_config.c:264 src/ng_config.c:541 src/ng_config_instances.c:106
msgid "Configure"
msgstr "Nastavi"
#: src/ng_config.c:266
msgid "Up"
msgstr "Gor"
#: src/ng_config.c:268
msgid "Down"
msgstr "Dol"
#: src/ng_config.c:273 src/ng_config.c:537 src/ng_config_instances.c:102
msgid "Add"
msgstr "Dodaj"
#: src/ng_config.c:275
msgid "Taskbar"
msgstr "Opravilna vrstica"
#: src/ng_config.c:277
msgid "Launcher"
msgstr "Zaganjalnik"
#: src/ng_config.c:279
msgid "Gadcon"
msgstr "Gadcon"
#: src/ng_config.c:285 src/ng_config.c:301
msgid "Auto Hide"
msgstr "Samodejno skrij"
#: src/ng_config.c:299
msgid "Show Bar when Urgent"
msgstr "Pokaži vrstico ko je nujno"
#: src/ng_config.c:307
msgid "Stacking"
msgstr "Skladanje"
#: src/ng_config.c:309
msgid "Above All"
msgstr "Nad vsem"
#: src/ng_config.c:311
msgid "Below Fullscreen"
msgstr "Pod celozaslonskim"
#: src/ng_config.c:315 src/ng_config.c:322
msgid "Other"
msgstr "Drugo"
#: src/ng_config.c:316
msgid "Ecomorph Features"
msgstr "Ecomorph funkcije"
#: src/ng_config.c:318
msgid "Show Icon Label"
msgstr "Prikaži oznako ikone"
#: src/ng_config.c:529
msgid "Launcher Settings"
msgstr "Nastavitve zaganjalnika"
#: src/ng_config.c:549
msgid "Taskbar Settings"
msgstr "Nastavitve opravilne vrstice"
#: src/ng_config.c:551
msgid "Dont Show Dialogs"
msgstr "Ne prikaži pojavnih oken"
#: src/ng_config.c:554
msgid "Advanced Window Menu"
msgstr "Napreden meni oken"
#: src/ng_config.c:557
msgid "Only Show Current Desk"
msgstr "Prikaži le trenutno namizje"
#: src/ng_config.c:560
msgid "Group Applications by Window Class"
msgstr "Uskupini programe po razredih okna"
#: src/ng_config.c:563
msgid "Append new Applications on the right Side"
msgstr "Dodaj nove programe na desni strani"
#: src/ng_config.c:569
msgid "Iconified Applications"
msgstr "Ikonizirani programi"
#: src/ng_config.c:644 src/ng_config.c:684
#, fuzzy
msgid "Engage Bar Configuration"
msgstr "Nastavitve Itask·NG vrstice"
#: src/ng_config.c:789
#, fuzzy
msgid "Create new source"
msgstr "Ustvari nov vir·Itask·NG"
#: src/ng_config.c:790
msgid "Enter a name for this new Application Launcher:"
msgstr "Vnesi ime za ta novi zaganjalnik programov"
#: src/ng_config.c:799
#, fuzzy, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"source?"
msgstr ""
"Zahtevali ste izbris·\"%s\".<br><br>Ali ste prepričani da hočete izbrisati "
"ta vir·ng ?"
#: src/ng_config.c:803
#, fuzzy
msgid "Are you sure you want to delete this source?"
msgstr "Ali ste prepričani da hočete izbrisati ta primerek?"
#: src/ng_config_instances.c:64 src/ng_config_instances.c:94
#, fuzzy
msgid "Engage Instances"
msgstr "Primerki Itask·NG"
#: src/ng_config_instances.c:164
msgid "Bar"
msgstr "Vrstica"
#: src/ng_config_instances.c:338
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"Instance?"
msgstr ""
"Zahtevali ste izbris·\"%s\".<br><br>Ali ste prepričani da hočete izbrisati "
"ta primerek?"
#: src/ng_config_instances.c:342
msgid "Are you sure you want to delete this Instance?"
msgstr "Ali ste prepričani da hočete izbrisati ta primerek?"
#~ msgid "Itask-NG"
#~ msgstr "Itask-NG"
#~ msgid "Itask NG"
#~ msgstr "Itask·NG"
#~ msgid "Are you sure you want to delete this Itask NG source?"
#~ msgstr "Ali ste prepričani da hočete izbrisati ta vir·Itask·NG?"
#~ msgid "Itask NG - Instances"
#~ msgstr "Itask·NG·-·Primerki"

28
src/Makefile.am Normal file
View File

@ -0,0 +1,28 @@
MAINTAINERCLEANFILES = Makefile.in
INCLUDES = -I. \
-I$(top_srcdir) \
-I$(includedir) \
@E_CFLAGS@
pkgdir = $(datadir)/$(MODULE_ARCH)
pkg_LTLIBRARIES = module.la
module_la_SOURCES = e_mod_main.c \
e_mod_main.h \
ng_config.c \
ng_item.c \
ng_launcher.c \
ng_taskbar.c \
ng_config_instances.c \
ng_box.c \
ng_border_menu.c \
ng_gadcon.c
module_la_LIBADD = @E_LIBS@
module_la_LDFLAGS = -module -avoid-version
module_la_DEPENDENCIES = $(top_builddir)/config.h
clean-local:
rm -rf *~

1957
src/e_mod_main.c Normal file

File diff suppressed because it is too large Load Diff

352
src/e_mod_main.h Normal file
View File

@ -0,0 +1,352 @@
#ifndef E_MOD_MAIN_H
#define E_MOD_MAIN_H
#include <e.h>
#include <X11/Xlib.h>
#ifdef ENABLE_NLS
# include <libintl.h>
# define D_(string) dgettext(PACKAGE, string)
#else
# define bindtextdomain(domain,dir)
# define bind_textdomain_codeset(domain,codeset)
# define D_(string) (string)
#endif
#define MOD_CONFIG_FILE_EPOCH 0x0001
#define MOD_CONFIG_FILE_GENERATION 0x0001
#define MOD_CONFIG_FILE_VERSION \
((MOD_CONFIG_FILE_EPOCH << 16) | MOD_CONFIG_FILE_GENERATION)
#define AUTOHIDE_NONE 0
#define AUTOHIDE_NORMAL 1
#define AUTOHIDE_FULLSCREEN 2
#define AUTOHIDE_OVERLAP 3
typedef struct _Config Config;
typedef struct _Config_Item Config_Item;
typedef struct _Config_Box Config_Box;
typedef struct _Config_Gadcon Config_Gadcon;
typedef struct _Ng Ng;
typedef struct _Ngi_Item Ngi_Item;
typedef struct _Ngi_Item_Launcher Ngi_Item_Launcher;
typedef struct _Ngi_Item_Taskbar Ngi_Item_Taskbar;
typedef struct _Ngi_Item_Gadcon Ngi_Item_Gadcon;
typedef struct _Ngi_Win Ngi_Win;
typedef struct _Ngi_Box Ngi_Box;
struct _Config
{
int version;
E_Module *module;
Eina_List *instances;
E_Menu *menu;
Eina_List *items;
char *theme_path;
int use_composite;
E_Config_Dialog *cfd;
Eina_List *handlers;
};
struct _Config_Item
{
Ng *ng;
int show_label;
int show_background;
int container;
int zone;
int orient;
int size;
int window_size;
int autohide;
int autohide_show_urgent;
int hide_below_windows;
float zoomfactor;
float zoom_range;
float hide_timeout;
float zoom_duration;
int alpha;
int mouse_over_anim;
enum { above_all, below_fullscreen } stacking;
int lock_deskswitch;
int ecomorph_features;
Eina_List *boxes;
E_Config_Dialog *config_dialog;
};
struct _Config_Box
{
enum { launcher, taskbar, gadcon } type;
int taskbar_skip_dialogs;
int taskbar_adv_bordermenu;
int taskbar_show_iconified;
int taskbar_show_desktop;
int taskbar_append_right;
int taskbar_group_apps;
const char *launcher_app_dir;
int launcher_lock_dnd;
Eina_List *gadcon_items;
Ngi_Box *box;
};
struct _Config_Gadcon
{
const char *name;
};
struct _Ngi_Win
{
Ng *ng;
E_Popup *popup;
Ecore_X_Window input;
Ecore_X_Rectangle rect;
E_Win *fake_iwin;
E_Object *drop_win;
};
struct _Ng
{
Ngi_Win *win;
Evas *evas;
Eina_List *boxes;
Config_Item *cfg;
E_Zone *zone;
E_Shelf *es;
Evas_Object *o_bg;
Evas_Object *o_frame;
Evas_Object *o_label;
Evas_Object *clip;
Evas_Object *bg_clip;
unsigned char changed : 1;
int pos; /* mouse position */
double size; /* current icon size */
enum { unzoomed, zooming, zoomed, unzooming } state;
enum { hidden, hiding, showing, show } hide_state;
int hide;
double zoom;
double start_zoom;
double start_hide;
Eina_List *items_show;
Eina_List *items_remove;
Ngi_Item *item_active;
int hide_step;
int w, h, start;
int horizontal;
int mouse_in;
int show_bar;
int dnd;
Ngi_Item *item_drag;
Eina_List *handlers;
Ecore_Animator *animator;
Ecore_Timer *mouse_in_timer;
Ecore_Timer *menu_wait_timer;
Ecore_Timer *effect_timer;
struct
{
int clip_separator;
int separator_width;
int item_spacing;
int edge_offset;
int bg_offset;
int reflection_offset;
double keep_overlay_pos;
double fade_duration;
} opt;
};
struct _Ngi_Item
{
Ngi_Box *box;
Evas_Object *obj;
Evas_Object *over;
const char *label;
unsigned int mouse_down;
int pos;
double displace;
double scale;
struct
{
unsigned char start : 1;
unsigned char dnd : 1;
int x, y;
int dx, dy;
} drag;
void (*cb_free) (Ngi_Item *it);
void (*cb_mouse_down) (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
void (*cb_mouse_up) (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
void (*cb_mouse_in) (Ngi_Item *it);
void (*cb_mouse_out) (Ngi_Item *it);
void (*cb_drag_start) (Ngi_Item *it);
double start_time;
int delete_me;
};
struct _Ngi_Item_Launcher
{
Ngi_Item base;
Evas_Object *o_icon;
Evas_Object *o_proxy;
Efreet_Desktop *app;
};
struct _Ngi_Item_Taskbar
{
Ngi_Item base;
Evas_Object *o_icon;
Evas_Object *o_proxy;
E_Border *border;
unsigned int border_was_fullscreen;
unsigned int urgent;
const char *class; /* store icccm.class...*/
};
struct _Ngi_Item_Gadcon
{
Ngi_Item base;
Evas_Object *o_icon;
Evas_Object *o_proxy;
E_Gadcon *gadcon;
Config_Gadcon *cfg_gadcon;
};
struct _Ngi_Box
{
Ng *ng;
Config_Box *cfg;
Eina_List *handlers;
Eina_List *items;
Ecore_Timer *dnd_timer;
E_Drop_Handler *drop_handler;
Ngi_Item *item_drop;
Evas_Object *separator;
Evas_Coord pos, w;
E_Order *apps;
E_Config_Dialog *cfd;
};
EAPI extern E_Module_Api e_modapi;
EAPI void *e_modapi_init (E_Module *m);
EAPI int e_modapi_shutdown (E_Module *m);
EAPI int e_modapi_save (E_Module *m);
EAPI int e_modapi_about (E_Module *m);
EAPI int e_modapi_config (E_Module *m);
EAPI E_Config_Dialog *ngi_instances_config(E_Container *con, const char *params);
Ng *ngi_new (Config_Item *ci);
void ngi_free (Ng *ng);
void ngi_reposition (Ng *ng);
void ngi_input_extents_calc (Ng *ng);
void ngi_freeze (Ng *ng);
void ngi_thaw (Ng *ng);
void ngi_animate (Ng *ng);
void ngi_mouse_in (Ng *ng);
void ngi_mouse_out (Ng *ng);
Ngi_Item * ngi_item_at_position_get (Ng *ng);
void ngi_bar_lock (Ng *ng, int lock);
Config_Item *ngi_bar_config_new (int container_num, int zone_num);
void ngi_win_show (Ngi_Win *win);
void ngi_win_hide (Ngi_Win *win);
void ngi_win_position_calc (Ngi_Win *win);
Ngi_Box *ngi_box_new (Ng *ng);
void ngi_box_free (Ngi_Box *box);
void ngi_configure_module (Config_Item *ci);
void ngi_configure_box (Ngi_Box *box);
void ngi_item_init_defaults (Ngi_Item *it);
void ngi_item_label_set(Ngi_Item *it, const char *label);
void ngi_item_free (Ngi_Item *it);
void ngi_item_show (Ngi_Item *it, int instant);
void ngi_item_remove (Ngi_Item *it);
void ngi_item_del_icon (Ngi_Item *it);
void ngi_item_mouse_down (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
void ngi_item_mouse_up (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
void ngi_item_mouse_in (Ngi_Item *it);
void ngi_item_mouse_out (Ngi_Item *it);
void ngi_item_signal_emit (Ngi_Item *it, char *sig);
void ngi_item_activate (Ng *ng);
void ngi_launcher_new (Ng *ng, Config_Box *cfg_box);
void ngi_launcher_remove (Ngi_Box *box);
void ngi_taskbar_init (void);
void ngi_taskbar_new (Ng *ng, Config_Box *cfg_box);
void ngi_taskbar_remove (Ngi_Box *box);
void ngi_gadcon_init (void);
void ngi_gadcon_shutdown (void);
void ngi_gadcon_new (Ng *ng, Config_Box *cfg_box);
void ngi_gadcon_remove (Ngi_Box *box);
void ngi_gadcon_config (Ngi_Box *box);
void ngi_border_menu_show (Ngi_Box *box, E_Border *bd,
Evas_Coord x, Evas_Coord y,
int dir, Ecore_X_Time timestamp);
Eina_Bool ngi_object_theme_set(Evas_Object *obj, const char *part);
extern Config *ngi_config;
extern E_Config_DD *ngi_conf_edd;
extern E_Config_DD *ngi_conf_item_edd;
extern E_Config_DD *ngi_conf_box_edd;
extern E_Config_DD *ngi_conf_gadcon_edd;
#endif

176
src/ng_border_menu.c Normal file
View File

@ -0,0 +1,176 @@
#include "e_mod_main.h"
static void _ng_border_cb_border_menu_end(void *data, E_Menu *m);
static void _ng_border_menu_cb_close(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ng_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ng_border_menu_cb_maximize(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ng_border_menu_cb_unmaximize(void *data, E_Menu *m, E_Menu_Item *mi);
static void _ng_border_menu_cb_fullscreen(void *data, E_Menu *m, E_Menu_Item *mi);
void
ngi_border_menu_show(Ngi_Box *box, E_Border *bd, Evas_Coord x, Evas_Coord y, int dir, Ecore_X_Time timestamp)
{
E_Menu *m;
E_Menu_Item *mi;
Ng *ng = box->ng;
if (bd->border_menu)
return;
m = e_menu_new();
e_menu_category_set(m,"border");
e_menu_category_data_set("border",bd);
e_object_data_set(E_OBJECT(m), bd);
bd->border_menu = m;
e_menu_post_deactivate_callback_set(m, _ng_border_cb_border_menu_end, ng); /* FIXME */
if ((!bd->lock_user_fullscreen) && (!bd->shaded))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, D_("Fullscreen"));
e_menu_item_check_set(mi, 1);
e_menu_item_toggle_set(mi, bd->fullscreen);
e_menu_item_callback_set(mi, _ng_border_menu_cb_fullscreen, bd);
e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/fullscreen"),
"e/widgets/border/default/fullscreen");
}
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
if (!bd->lock_close)
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, D_("Close"));
e_menu_item_callback_set(mi, _ng_border_menu_cb_close, bd);
e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/close"),
"e/widgets/border/default/close");
}
if (!bd->internal)
{
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
if (!(((bd->client.icccm.min_w == bd->client.icccm.max_w) &&
(bd->client.icccm.min_h == bd->client.icccm.max_h)) ||
(bd->lock_user_maximize)))
{
if ((!bd->lock_user_maximize) && (!bd->shaded) &&
((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, D_("Maximized"));
e_menu_item_check_set(mi, 1);
e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH);
if((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
e_menu_item_callback_set(mi, _ng_border_menu_cb_unmaximize, bd);
else
e_menu_item_callback_set(mi, _ng_border_menu_cb_maximize, bd);
e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/maximize"),
"e/widgets/border/default/maximize");
}
}
}
if (!bd->lock_user_iconify)
{
mi = e_menu_item_new(m);
if(bd->iconic)
e_menu_item_label_set(mi, D_("Uniconify"));
else
e_menu_item_label_set(mi, D_("Iconify"));
e_menu_item_callback_set(mi, _ng_border_menu_cb_iconify, bd);
e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/minimize"),
"e/widgets/border/default/minimize");
}
e_menu_activate_mouse(m, ng->zone, ng->zone->x + x, ng->zone->y + y, 1, 1,
dir, timestamp);
}
static void
_ng_border_cb_border_menu_end(void *data, E_Menu *m)
{
E_Border *bd;
bd = (E_Border *)e_object_data_get(E_OBJECT(m));
if (bd)
{
/* If the border exists, delete all associated menus */
e_int_border_menu_del(bd);
}
else
{
/* Just delete this menu */
e_object_del(E_OBJECT(m));
}
// if (ng) ngi_thaw(ng);
}
static void
_ng_border_menu_cb_close(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Border *bd = (E_Border *)data;
if (!bd->lock_close)
e_border_act_close_begin(bd);
}
static void
_ng_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Border *bd = (E_Border *)data;
if (!bd->lock_user_iconify)
{
if (bd->iconic)
e_border_uniconify(bd);
else
e_border_iconify(bd);
}
}
static void
_ng_border_menu_cb_maximize(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Border *bd = (E_Border *)data;
if (!bd->lock_user_maximize)
e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
E_MAXIMIZE_BOTH);
}
static void
_ng_border_menu_cb_unmaximize(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Border *bd = (E_Border *)data;
e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
}
static void
_ng_border_menu_cb_fullscreen(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Border *bd = (E_Border *)data;
int toggle;
if (!bd)
return;
if (!bd->lock_user_fullscreen)
{
toggle = e_menu_item_toggle_get(mi);
if (toggle)
e_border_fullscreen(bd, (E_Fullscreen)e_config->fullscreen_policy);
else
e_border_unfullscreen(bd);
}
}

59
src/ng_box.c Normal file
View File

@ -0,0 +1,59 @@
#include "e_mod_main.h"
Ngi_Box *
ngi_box_new(Ng *ng)
{
Ngi_Box *box;
box = E_NEW(Ngi_Box, 1);
box->ng = ng;
box->pos = 0;
box->apps = NULL;
box->drop_handler = NULL;
box->item_drop = NULL;
box->dnd_timer = NULL;
box->items = NULL;
box->separator = edje_object_add(ng->evas);
switch(box->ng->cfg->orient)
{
case E_GADCON_ORIENT_BOTTOM:
ngi_object_theme_set(box->separator, "e/modules/engage/separator_bottom");
break;
case E_GADCON_ORIENT_TOP:
ngi_object_theme_set(box->separator, "e/modules/engage/separator_top");
break;
case E_GADCON_ORIENT_LEFT:
ngi_object_theme_set(box->separator, "e/modules/engage/separator_left");
break;
case E_GADCON_ORIENT_RIGHT:
ngi_object_theme_set(box->separator, "e/modules/engage/separator_right");
break;
}
const char *clip_to = edje_object_data_get(box->separator, "clip_to_background");
if (clip_to && atoi(clip_to))
evas_object_clip_set(box->separator, ng->bg_clip);
evas_object_clip_set(box->separator, ng->bg_clip);
ng->boxes = eina_list_append(ng->boxes, box);
return box;
}
void
ngi_box_free(Ngi_Box *box)
{
box->ng->boxes = eina_list_remove(box->ng->boxes, box);
while(box->items)
ngi_item_free(box->items->data);
if (box->separator)
evas_object_del(box->separator);
E_FREE(box);
}

932
src/ng_config.c Normal file
View File

@ -0,0 +1,932 @@
#include "e_mod_main.h"
struct _E_Config_Dialog_Data
{
int show_label;
int show_background;
int orient;
int size;
double zoomfactor;
int autohide;
int autohide_show_urgent;
int lock_deskswitch;
int ecomorph_features;
double hide_timeout;
double zoom_duration;
double zoom_range;
int hide_below_windows;
int hide_mode;
int alpha;
int stacking;
int mouse_over_anim;
Eina_List *boxes;
Evas_Object *ilist;
Evas_Object *tlist_box;
Config_Box *cfg_box;
Config_Item *cfg;
E_Config_Dialog *cfd;
const char *app_dir;
};
static void * _create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object * _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static void _cb_add(void *data, void *data2);
static void _cb_del(void *data, void *data2);
static void _cb_config(void *data, void *data2);
static void _cb_entry_ok(void *data, char *text);
static void _cb_confirm_dialog_yes(void *data);
static void _load_ilist(E_Config_Dialog_Data *cfdata);
static void _cb_slider_change(void *data, Evas_Object *obj);
static void _cb_box_add_launcher(void *data, void *data2);
static void _cb_box_add_taskbar(void *data, void *data2);
static void _cb_box_add_gadcon(void *data, void *data2);
static void _cb_box_del(void *data, void *data2);
static void _cb_box_config(void *data, void *data2);
static void _cb_box_up(void *data, void *data2);
static void _cb_box_down(void *data, void *data2);
static void _load_box_tlist(E_Config_Dialog_Data *cfdata);
void
ngi_configure_module(Config_Item *ci)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View *v;
Eina_List *l;
char buf[4096];
char path[128];
Config_Item *ci2;
int i = 0;
if (!ci->ng)
return;
if (ci->config_dialog)
return;
EINA_LIST_FOREACH(ngi_config->items, l, ci2)
if (ci == ci2)
break;
else i++;
snprintf(path, sizeof(path), "extensions/engage::%d", i);
if (e_config_dialog_find("E", path))
return;
v = E_NEW(E_Config_Dialog_View, 1);
/* Dialog Methods */
v->create_cfdata = _create_data;
v->free_cfdata = _free_data;
v->basic.apply_cfdata = _basic_apply_data;
v->basic.create_widgets = _basic_create_widgets;
v->advanced.apply_cfdata = NULL;
v->advanced.create_widgets = NULL;
/* Create The Dialog */
snprintf(buf, sizeof(buf), "%s/e-module-ng.edj", e_module_dir_get(ngi_config->module));
cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
D_("Engage Configuration"),
"E", path, buf, 0, v, ci);
ci->config_dialog = cfd;
ngi_bar_lock(ci->ng, 1);
}
static void
_fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata)
{
#define C(_name) cfdata->_name = ci->_name;
C(show_background);
C(show_label);
C(orient);
C(size);
C(zoomfactor);
C(autohide);
C(autohide_show_urgent);
C(hide_below_windows);
C(hide_timeout);
C(zoom_duration);
C(zoom_range);
C(alpha);
C(stacking);
C(mouse_over_anim);
C(lock_deskswitch);
C(ecomorph_features);
#undef C
cfdata->cfg = ci;
cfdata->cfd = ci->config_dialog;
cfdata->ilist = NULL;
cfdata->tlist_box = NULL;
}
static void *
_create_data(E_Config_Dialog *cfd)
{
E_Config_Dialog_Data *cfdata;
Config_Item *ci;
ci = (Config_Item *)cfd->data;
cfdata = E_NEW(E_Config_Dialog_Data, 1);
_fill_data(ci, cfdata);
return cfdata;
}
static void
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
cfdata->cfg->config_dialog = NULL;
if (cfdata->cfg->ng)
ngi_bar_lock(cfdata->cfg->ng, 0);
free(cfdata);
}
static Evas_Object *
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
E_Radio_Group *rg;
Evas_Object *ol, *of, *ob, *ot, *otb;
otb = e_widget_toolbook_add(evas, 0, 0);
/* _______ first column __________________________________________________*/
ol = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, D_("Appearance"), 0);
ob = e_widget_label_add (evas, D_("Icon Size:"));
e_widget_framelist_object_append (of, ob);
ob = e_widget_slider_add (evas, 1, 0, D_("%1.0f px"), 16.0, 128,
1.0, 0, NULL, &(cfdata->size), 100);
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
e_widget_framelist_object_append (of, ob);
/* ob = e_widget_label_add (evas, D_("Reflection Opacity:"));
* e_widget_framelist_object_append (of, ob);
* ob = e_widget_slider_add (evas, 1, 0, D_("%1.0f"), 0, 255,
* 1.0, 0, NULL, &(cfdata->rflxn_alpha), 100);
* e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
* e_widget_framelist_object_append (of, ob); */
if (ngi_config->use_composite)
{
ob = e_widget_label_add (evas, D_("Background Opacity:"));
e_widget_framelist_object_append (of, ob);
ob = e_widget_slider_add (evas, 1, 0, D_("%1.0f \%"), 0, 255,
1.0, 0, NULL, &(cfdata->alpha), 100);
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
e_widget_framelist_object_append (of, ob);
}
else
cfdata->alpha = 255;
ob = e_widget_check_add(evas, D_("Show Background Box"), &(cfdata->show_background));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, D_("Show Mouse-Over Animation"), &(cfdata->mouse_over_anim));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(ol, of, 1, 0, 0.0);
of = e_widget_framelist_add(evas, D_("Orientation"), 0);
rg = e_widget_radio_group_new(&(cfdata->orient));
ob = e_widget_radio_add(evas, D_("Bottom Edge"), E_GADCON_ORIENT_BOTTOM, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, D_("Top Edge"), E_GADCON_ORIENT_TOP, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, D_("Left Edge"), E_GADCON_ORIENT_LEFT, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, D_("Right Edge"), E_GADCON_ORIENT_RIGHT, rg);
e_widget_framelist_object_append(of, ob);
/* of = e_widget_frametable_add(evas, D_("Orientation"), 1);
* ob = e_widget_radio_icon_add(evas, NULL, "enlightenment/shelf_position_left",
* 24, 24, E_GADCON_ORIENT_LEFT, rg);
* e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 0);
* ob = e_widget_radio_icon_add(evas, NULL, "enlightenment/shelf_position_right",
* 24, 24, E_GADCON_ORIENT_RIGHT, rg);
* e_widget_frametable_object_append(of, ob, 2, 1, 1, 1, 1, 1, 1, 0);
* ob = e_widget_radio_icon_add(evas, NULL, "enlightenment/shelf_position_top",
* 24, 24, E_GADCON_ORIENT_TOP, rg);
* e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 0);
* ob = e_widget_radio_icon_add(evas, NULL, "enlightenment/shelf_position_bottom",
* 24, 24, E_GADCON_ORIENT_BOTTOM, rg);
* e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 0); */
e_widget_list_object_append(ol, of, 1, 0, 0.0);
e_widget_toolbook_page_append(otb, NULL, D_("Appearance"), ol, 1, 1, 1, 1, 0.5, 0.5);
of = e_widget_framelist_add(evas, D_("Zoom"), 0);
ob = e_widget_label_add (evas, D_("Factor:"));
e_widget_framelist_object_append (of, ob);
ob = e_widget_slider_add (evas, 1, 0, "%1.2f", 1.0, 5.0,
0.01, 0, &(cfdata->zoomfactor), NULL, 100);
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
e_widget_framelist_object_append (of, ob);
ob = e_widget_label_add (evas, D_("Range:"));
e_widget_framelist_object_append (of, ob);
ob = e_widget_slider_add (evas, 1, 0, "%1.2f", 1.0, 4.0,
0.01, 0, &(cfdata->zoom_range), NULL, 100);
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
e_widget_framelist_object_append (of, ob);
ob = e_widget_label_add (evas, D_("Duration:"));
e_widget_framelist_object_append (of, ob);
ob = e_widget_slider_add (evas, 1, 0, "%1.2f", 0.1, 0.5,
0.01, 0, &(cfdata->zoom_duration), NULL, 100);
e_widget_on_change_hook_set(ob, _cb_slider_change, cfdata);
e_widget_framelist_object_append (of, ob);
e_widget_toolbook_page_append(otb, NULL, D_("Zoom"), of, 1, 0, 1, 0, 0.5, 0.0);
of = e_widget_frametable_add(evas, D_("Bar Items"), 0);
ol = e_widget_ilist_add(evas, 0, 0, NULL);
cfdata->ilist = ol;
_load_box_tlist(cfdata);
e_widget_size_min_set(ol, 300, 80);
e_widget_frametable_object_append(of, ol, 0, 0, 1, 1, 1, 1, 1, 1);
ot = e_widget_table_add(evas, 0);
ob = e_widget_button_add(evas, D_("Delete"), "widget/del", _cb_box_del, cfdata, NULL);
e_widget_table_object_append(ot, ob, 0, 1, 1, 1, 1, 1, 1, 0);
ob = e_widget_button_add(evas, D_("Configure"), "widget/config", _cb_box_config, cfdata, NULL);
e_widget_table_object_append(ot, ob, 0, 0, 1, 1, 1, 1, 1, 0);
ob = e_widget_button_add(evas, D_("Up"), "widget/up_arrow", _cb_box_up, cfdata, NULL);
e_widget_table_object_append(ot, ob, 1, 0, 1, 1, 1, 1, 1, 0);
ob = e_widget_button_add(evas, D_("Down"), "widget/down_arrow", _cb_box_down, cfdata, NULL);
e_widget_table_object_append(ot, ob, 1, 1, 1, 1, 1, 1, 1, 0);
e_widget_frametable_object_append(of, ot, 0, 1, 1, 1, 1, 1, 1, 0);
ot = e_widget_table_add(evas, 0);
ob = e_widget_label_add(evas, D_("Add"));
e_widget_table_object_append(ot, ob, 0, 0, 1, 1, 1, 1, 1, 0);
ob = e_widget_button_add(evas, D_("Taskbar"), "widget/add", _cb_box_add_taskbar, cfdata, NULL);
e_widget_table_object_append(ot, ob, 0, 1, 1, 1, 1, 1, 1, 0);
ob = e_widget_button_add(evas, D_("Launcher"), "widget/add", _cb_box_add_launcher, cfdata, NULL);
e_widget_table_object_append(ot, ob, 1, 1, 1, 1, 1, 1, 1, 0);
ob = e_widget_button_add(evas, D_("Gadcon"), "widget/add", _cb_box_add_gadcon, cfdata, NULL);
e_widget_table_object_append(ot, ob, 0, 2, 1, 1, 1, 1, 1, 0);
e_widget_frametable_object_append(of, ot, 0, 2, 1, 1, 1, 1, 1, 0);
e_widget_toolbook_page_append(otb, NULL, D_("Bar Items"), of, 1, 1, 1, 1, 0.5, 0.5);
of = e_widget_framelist_add(evas, D_("Auto Hide"), 0);
cfdata->hide_mode = cfdata->autohide;
rg = e_widget_radio_group_new(&cfdata->hide_mode);
ob = e_widget_radio_add(evas, "None",
AUTOHIDE_NONE, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, "Autohide",
AUTOHIDE_NORMAL, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, "Hide when Window overlaps",
AUTOHIDE_OVERLAP, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, "Hide on Fullscreen",
AUTOHIDE_FULLSCREEN, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, D_("Show Bar when Urgent"), &(cfdata->autohide_show_urgent));
e_widget_framelist_object_append(of, ob);
e_widget_toolbook_page_append(otb, NULL, D_("Auto Hide"), of, 1, 0, 1, 0, 0.5, 0.0);
/* e_widget_toolbook_page_append(otb, NULL, D_("Orientation"), of, 1, 1, 1, 0, 0.5, 0.0); */
ol = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, D_("Stacking"), 0);
rg = e_widget_radio_group_new(&cfdata->stacking);
ob = e_widget_radio_add(evas, D_("Above All"), 0, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, D_("Below Fullscreen"), 1, rg);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(ol, of, 1, 0, 0.0);
of = e_widget_framelist_add(evas, D_("Other"), 0);
ob = e_widget_check_add(evas, D_("Ecomorph Features"), &(cfdata->ecomorph_features));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, D_("Show Icon Label"), &(cfdata->show_label));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(ol, of, 1, 0, 0.0);
e_widget_toolbook_page_append(otb, NULL, D_("Other"), ol, 1, 0, 1, 0, 0.5, 0.0);
e_widget_toolbook_page_show(otb, 0);
return otb;
}
static int
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
Config_Item *ci;
Ng *ng;
ci = cfd->data;
ng = ci->ng;
ci->size = cfdata->size;
ci->zoomfactor = cfdata->zoomfactor;
ci->hide_timeout = cfdata->hide_timeout;
ci->zoom_duration = cfdata->zoom_duration;
ci->zoom_range = cfdata->zoom_range;
ci->alpha = cfdata->alpha;
ci->mouse_over_anim = cfdata->mouse_over_anim;
ci->autohide = cfdata->hide_mode;
ci->lock_deskswitch = cfdata->lock_deskswitch;
ci->ecomorph_features = cfdata->ecomorph_features;
ci->show_background = cfdata->show_background;
ci->show_label = cfdata->show_label;
ci->stacking = cfdata->stacking;
ci->autohide_show_urgent = cfdata->autohide_show_urgent;
if (ci->show_label)
evas_object_show(ng->o_label);
else
evas_object_hide(ng->o_label);
if (ci->show_background)
evas_object_show(ng->bg_clip);
else
evas_object_hide(ng->bg_clip);
if (ci->orient != cfdata->orient)
{
ci->orient = cfdata->orient;
ngi_free(ng);
ngi_new(ci);
}
else
{
if (ci->autohide == AUTOHIDE_NORMAL)
ng->hide = EINA_TRUE;
if (ng->es)
{
ng->es->cfg->autohide = ng->cfg->autohide;
ng->es->cfg->overlap = (ng->cfg->autohide == AUTOHIDE_OVERLAP);
}
ng->hide_step = 0;
ng->hide_state = show;
ngi_reposition(ng);
ngi_input_extents_calc(ng);
ngi_thaw(ng);
}
e_config_domain_save("module.ng", ngi_conf_edd, ngi_config);
return 1;
}
static void
_update_boxes(Ng *ng)
{
Eina_List *l;
Ngi_Box *box;
Config_Box *cfg_box;
while(ng->boxes)
{
box = ng->boxes->data;
if (box->cfg->type == taskbar)
ngi_taskbar_remove(box);
else if (box->cfg->type == launcher)
ngi_launcher_remove(box);
else if (box->cfg->type == gadcon)
ngi_gadcon_remove(box);
}
ngi_freeze(ng);
EINA_LIST_FOREACH (ng->cfg->boxes, l, cfg_box)
{
switch (cfg_box->type)
{
case launcher:
ngi_launcher_new(ng, cfg_box);
break;
case taskbar:
ngi_taskbar_new(ng, cfg_box);
break;
case gadcon:
ngi_gadcon_new(ng, cfg_box);
break;
} /* switch */
}
ngi_thaw(ng);
}
/***************************************************************************************/
static void
_cb_box_add_taskbar(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
Config_Box *cfg_box;
cfg_box = E_NEW(Config_Box, 1);
cfg_box->type = taskbar;
cfg_box->taskbar_adv_bordermenu = 0;
cfg_box->taskbar_skip_dialogs = 0;
cfg_box->taskbar_skip_dialogs = 1;
cfg_box->taskbar_show_iconified = 1;
cfg_box->taskbar_show_desktop = 0;
cfdata->cfg->boxes = eina_list_append(cfdata->cfg->boxes, cfg_box);
_update_boxes(cfdata->cfg->ng);
_load_box_tlist(cfdata);
}
static void
_cb_box_add_launcher(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
Config_Box *cfg_box;
cfg_box = E_NEW(Config_Box, 1);
cfg_box->type = launcher;
cfg_box->launcher_app_dir = eina_stringshare_add("default");
cfdata->cfg->boxes = eina_list_append(cfdata->cfg->boxes, cfg_box);
_update_boxes(cfdata->cfg->ng);
_load_box_tlist(cfdata);
}
static void
_cb_box_add_gadcon(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
Config_Box *cfg_box;
cfg_box = E_NEW(Config_Box, 1);
cfg_box->type = gadcon;
//cfg_box->gadcon_items = eina_stringshare_add("ng_gadcon-tmp");
cfdata->cfg->boxes = eina_list_append(cfdata->cfg->boxes, cfg_box);
_update_boxes(cfdata->cfg->ng);
_load_box_tlist(cfdata);
}
static void
_cb_box_del(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
int selected = e_widget_ilist_selected_get(cfdata->ilist);
if (selected < 0)
return;
Eina_List *boxes = cfdata->cfg->boxes;
Config_Box *cfg_box = eina_list_nth(boxes, selected);
if (!cfg_box)
return;
cfdata->cfg->boxes = eina_list_remove(boxes, cfg_box);
switch(cfg_box->type)
{
case launcher:
ngi_launcher_remove(cfg_box->box);
break;
case taskbar:
ngi_taskbar_remove(cfg_box->box);
break;
case gadcon:
ngi_gadcon_remove(cfg_box->box);
} /* switch */
ngi_thaw(cfdata->cfg->ng);
_load_box_tlist(cfdata);
}
static Evas_Object *
_basic_create_box_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
Evas_Object *o, *ol, *of, *ob, *ot;
E_Radio_Group *rg;
o = e_widget_list_add(evas, 0, 0);
if (cfdata->cfg_box->type == launcher)
{
cfdata->app_dir = eina_stringshare_add(cfdata->cfg_box->launcher_app_dir);
of = e_widget_frametable_add(evas, D_("Launcher Settings"), 0);
ol = e_widget_ilist_add(evas, 0, 0, &cfdata->app_dir);
cfdata->tlist_box = ol;
_load_ilist(cfdata);
e_widget_size_min_set(ol, 140, 140);
e_widget_frametable_object_append(of, ol, 0, 0, 1, 2, 1, 1, 1, 1);
ot = e_widget_table_add(evas, 0);
ob = e_widget_button_add(evas, D_("Add"), "widget/add", _cb_add, cfdata, NULL);
e_widget_table_object_append(ot, ob, 0, 0, 1, 1, 1, 1, 1, 0);
ob = e_widget_button_add(evas, D_("Delete"), "widget/del", _cb_del, cfdata, NULL);
e_widget_table_object_append(ot, ob, 0, 1, 1, 1, 1, 1, 1, 0);
ob = e_widget_button_add(evas, D_("Configure"), "widget/config", _cb_config, cfdata, NULL);
e_widget_table_object_append(ot, ob, 0, 2, 1, 1, 1, 1, 1, 0);
e_widget_frametable_object_append(of, ot, 2, 0, 1, 1, 1, 1, 1, 0);
e_widget_list_object_append(o, of, 0, 1, 0.5);
}
else if (cfdata->cfg_box->type == taskbar)
{
of = e_widget_framelist_add(evas, D_("Taskbar Settings"), 0);
ob = e_widget_check_add(evas, D_("Dont Show Dialogs"),
&(cfdata->cfg_box->taskbar_skip_dialogs));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, D_("Advanced Window Menu"),
&(cfdata->cfg_box->taskbar_adv_bordermenu));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, D_("Only Show Current Desk"),
&(cfdata->cfg_box->taskbar_show_desktop));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, D_("Group Applications by Window Class"),
&(cfdata->cfg_box->taskbar_group_apps));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, D_("Append new Applications on the right Side"),
&(cfdata->cfg_box->taskbar_append_right));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, D_("Iconified Applications"), 0);
rg = e_widget_radio_group_new(&cfdata->cfg_box->taskbar_show_iconified);
ob = e_widget_radio_add(evas, "Not Shown", 0, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, "Show", 1, rg);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, "Only Iconified", 2, rg);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
}
return o;
}
static int
_basic_apply_box_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
eina_stringshare_replace(&cfdata->cfg_box->launcher_app_dir, cfdata->app_dir);
_update_boxes(cfdata->cfg->ng);
return 1;
}
/* urgh */
static void *
_create_box_data(E_Config_Dialog *cfd)
{
return cfd->data;
}
static void
_free_box_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
eina_stringshare_del(cfdata->app_dir);
}
static void
_cb_box_config(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
E_Config_Dialog *cfd;
E_Config_Dialog_View *v;
char buf[4096];
int selected = e_widget_ilist_selected_get(cfdata->ilist);
if (selected < 0)
return;
Eina_List *boxes = cfdata->cfg->boxes;
cfdata->cfg_box = eina_list_nth(boxes, selected);
if (!cfdata->cfg_box)
return;
if (cfdata->cfg_box->type == gadcon)
{
ngi_gadcon_config(cfdata->cfg_box->box);
}
else
{
v = E_NEW(E_Config_Dialog_View, 1);
v->create_cfdata = _create_box_data;
v->free_cfdata = _free_box_data;
v->basic.apply_cfdata = _basic_apply_box_data;
v->basic.create_widgets = _basic_create_box_widgets;
v->advanced.apply_cfdata = NULL;
v->advanced.create_widgets = NULL;
snprintf(buf, sizeof(buf), "%s/e-module-ng.edj", e_module_dir_get(ngi_config->module));
cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
D_("Engage Bar Configuration"),
"e", "_e_mod_ngi_config_dialog_add_box", buf, 0, v, cfdata);
}
}
static void *
_create_data2(E_Config_Dialog *cfd)
{
E_Config_Dialog_Data *cfdata;
Config_Item *ci;
Ngi_Box *box = cfd->data;
ci = (Config_Item *)box->ng->cfg;
cfdata = E_NEW(E_Config_Dialog_Data, 1);
_fill_data(ci, cfdata);
cfdata->cfg_box = box->cfg;
return cfdata;
}
void
ngi_configure_box(Ngi_Box *box)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View *v;
char buf[4096];
v = E_NEW(E_Config_Dialog_View, 1);
v->create_cfdata = _create_data2;
v->free_cfdata = _free_data;
v->basic.apply_cfdata = _basic_apply_box_data;
v->basic.create_widgets = _basic_create_box_widgets;
v->advanced.apply_cfdata = NULL;
v->advanced.create_widgets = NULL;
snprintf(buf, sizeof(buf), "%s/e-module-ng.edj", e_module_dir_get(ngi_config->module));
cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
D_("Engage Bar Configuration"),
"e", "_e_mod_ngi_config_dialog_add_box", buf, 0, v, box);
}
static void
_cb_box_up(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
int selected = e_widget_ilist_selected_get(cfdata->ilist);
if (selected < 0)
return;
Eina_List *boxes = cfdata->cfg->boxes;
Eina_List *l = eina_list_nth_list(boxes, selected);
if (!l || !l->prev)
return;
Config_Box *cfg_box = l->data;
boxes = eina_list_remove(boxes, cfg_box);
cfdata->cfg->boxes = eina_list_prepend_relative(boxes, cfg_box, l->prev->data);
_update_boxes(cfdata->cfg->ng);
_load_box_tlist(cfdata);
e_widget_ilist_selected_set(cfdata->ilist, selected - 1);
}
static void
_cb_box_down(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
int selected = e_widget_ilist_selected_get(cfdata->ilist);
if (selected < 0)
return;
Eina_List *boxes = cfdata->cfg->boxes;
Eina_List *l = eina_list_nth_list(boxes, selected);
if (!l || !l->next)
return;
Config_Box *cfg_box = l->data;
boxes = eina_list_remove(boxes, cfg_box);
cfdata->cfg->boxes = eina_list_append_relative(boxes, cfg_box, l->next->data);
_update_boxes(cfdata->cfg->ng);
_load_box_tlist(cfdata);
e_widget_ilist_selected_set(cfdata->ilist, selected + 1);
}
static void
_load_box_tlist(E_Config_Dialog_Data *cfdata)
{
char buf[4096];
e_widget_ilist_clear(cfdata->ilist);
int cnt = 1;
Eina_List *l;
Config_Box *cfg_box;
char *blub;
for(l = cfdata->cfg->boxes; l; l = l->next)
{
cfg_box = l->data;
switch (cfg_box->type)
{
case launcher:
snprintf(buf, sizeof(buf), "%i Launcher", cnt);
blub = strdup(buf);
e_widget_ilist_append(cfdata->ilist, NULL, blub, NULL, cfg_box, blub);
break;
case taskbar:
snprintf(buf, sizeof(buf), "%i Taskbar", cnt);
blub = strdup(buf);
e_widget_ilist_append(cfdata->ilist, NULL, blub, NULL, cfg_box, blub);
break;
case gadcon:
snprintf(buf, sizeof(buf), "%i Gadcon", cnt);
blub = strdup(buf);
e_widget_ilist_append(cfdata->ilist, NULL, blub, NULL, cfg_box, blub);
break;
} /* switch */
cnt++;
}
e_widget_ilist_go(cfdata->ilist);
}
static void
_cb_add(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
e_entry_dialog_show(D_("Create new source"), "enlightenment/e",
D_("Enter a name for this new Application Launcher:"), "", NULL, NULL,
_cb_entry_ok, NULL, cfdata);
}
static void
_cb_del(void *data, void *data2)
{
char buf[4096];
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
snprintf(buf, sizeof(buf), D_("You requested to delete \"%s\".<br><br>"
"Are you sure you want to delete this source?"),
cfdata->app_dir);
e_confirm_dialog_show(D_("Are you sure you want to delete this source?"),
"enlightenment/exit", buf, NULL, NULL,
_cb_confirm_dialog_yes, NULL, cfdata, NULL, NULL, NULL);
}
static void
_cb_config(void *data, void *data2)
{
char path[4096];
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
snprintf(path, sizeof(path), "%s/.e/e/applications/bar/%s/.order",
e_user_homedir_get(), cfdata->app_dir);
e_configure_registry_call("internal/ibar_other",
e_container_current_get(e_manager_current_get()),
path);
}
static void
_cb_entry_ok(void *data, char *text)
{
char buf[4096];
char tmp[4096];
FILE *f;
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s",
e_user_homedir_get(), text);
if (!ecore_file_exists(buf))
{
ecore_file_mkdir(buf);
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order",
e_user_homedir_get(), text);
f = fopen(buf, "w");
if (f)
{
// Populate this .order file with some defaults
snprintf(tmp, sizeof(tmp), "xterm.desktop\n"
"firefox.desktop\n"
"gimp.desktop\n" "xmms.desktop\n");
fwrite(tmp, sizeof(char), strlen(tmp), f);
fclose(f);
}
}
_load_ilist((E_Config_Dialog_Data *)data);
}
static void
_cb_confirm_dialog_yes(void *data)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
char buf[4096];
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s", e_user_homedir_get(), cfdata->app_dir);
if (ecore_file_is_dir(buf))
ecore_file_recursive_rm(buf);
_load_ilist(cfdata);
}
static void
_load_ilist(E_Config_Dialog_Data *cfdata)
{
Eina_List *dirs, *l;
char buf[4096], *file;
int selnum = -1;
const char *home;
int i = 0;
e_widget_ilist_clear(cfdata->tlist_box);
home = e_user_homedir_get();
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar", home);
dirs = ecore_file_ls(buf);
EINA_LIST_FOREACH(dirs, l, file)
{
if (file[0] == '.')
continue;
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s", home, file);
if (ecore_file_is_dir(buf))
{
e_widget_ilist_append(cfdata->tlist_box, NULL, file, NULL, NULL, file);
if ((cfdata->app_dir) && (!strcmp(cfdata->app_dir, file)))
selnum = i;
i++;
}
}
e_widget_ilist_go(cfdata->tlist_box);
if (selnum >= 0)
e_widget_ilist_selected_set(cfdata->tlist_box, selnum);
}
static void
_cb_slider_change(void *data, Evas_Object *obj)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
Ng *ng = cfdata->cfg->ng;
int a;
ng->cfg->size = (int)cfdata->size;
ng->size = ng->cfg->size;
ng->cfg->zoomfactor = cfdata->zoomfactor;
ng->cfg->zoom_duration = cfdata->zoom_duration;
ng->cfg->zoom_range = cfdata->zoom_range;
ng->cfg->hide_timeout = cfdata->hide_timeout;
ng->cfg->alpha = cfdata->alpha;
a = ng->cfg->alpha;
evas_object_color_set(ng->bg_clip, a, a, a, a);
ngi_win_position_calc(ng->win);
ngi_thaw(ng);
}

321
src/ng_config_instances.c Normal file
View File

@ -0,0 +1,321 @@
#include "e_mod_main.h"
static void * _create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object * _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static void _ilist_fill(E_Config_Dialog_Data *cfdata);
static void _ilist_cb_selected(void *data);
static void _cb_add(void *data, void *data2);
static void _cb_delete(void *data, void *data2);
static void _cb_dialog_yes(void *data);
static void _cb_dialog_destroy(void *data);
static void _cb_config(void *data, void *data2);
struct _E_Config_Dialog_Data
{
Evas_Object *o_list;
Evas_Object *o_delete;
Evas_Object *o_config;
const char *cur_ng;
};
typedef struct _Ngi_Del_Confirm_Data Ngi_Del_Confirm_Data;
struct _Ngi_Del_Confirm_Data
{
E_Config_Dialog_Data *cfdata;
Config_Item *cfg;
};
EAPI E_Config_Dialog *
ngi_instances_config(E_Container *con, const char *params)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View *v;
if (params)
{
int i = atoi(params);
Config_Item *ci = eina_list_nth(ngi_config->items, i);
if (ci)
{
ngi_configure_module(ci);
return ci->config_dialog;
}
return NULL;
}
if(ngi_config->cfd)
return NULL;
if (e_config_dialog_find("E", "extensions/engage"))
return NULL;
v = E_NEW(E_Config_Dialog_View, 1);
if (!v)
return NULL;
v->create_cfdata = _create_data;
v->free_cfdata = _free_data;
v->basic.create_widgets = _basic_create_widgets;
cfd = e_config_dialog_new(con,
D_("Engage Instances"),
"E", "extensions/engage",
"enlightenment/module/ng-instances", 0, v, NULL);
ngi_config->cfd = cfd;
return cfd;
}
static void *
_create_data(E_Config_Dialog *cfd)
{
E_Config_Dialog_Data *cfdata;
cfdata = E_NEW(E_Config_Dialog_Data, 1);
return cfdata;
}
static void
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
ngi_config->cfd = NULL;
E_FREE(cfdata);
}
static Evas_Object *
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
Evas_Object *o, *of, *ot, *ob;
o = e_widget_list_add(evas, 0, 1);
of = e_widget_framelist_add(evas, D_("Engage Instances"), 0);
cfdata->o_list = e_widget_ilist_add(evas, 24, 24, &(cfdata->cur_ng));
e_widget_ilist_selector_set(cfdata->o_list, 1);
e_widget_size_min_set(cfdata->o_list, 200, 250);
e_widget_framelist_object_append(of, cfdata->o_list);
e_widget_list_object_append(o, of, 1, 1, 0.5);
ot = e_widget_table_add(evas, 0);
ob = e_widget_button_add(evas, D_("Add"), "widget/add", _cb_add, cfdata, NULL);
e_widget_table_object_append(ot, ob, 0, 0, 1, 1, 1, 1, 0, 0);
cfdata->o_delete = e_widget_button_add(evas, D_("Delete"), "widget/del", _cb_delete, cfdata, NULL);
e_widget_table_object_append(ot, cfdata->o_delete, 0, 1, 1, 1, 1, 1, 0, 0);
cfdata->o_config = e_widget_button_add(evas, D_("Configure"), "widget/config", _cb_config, cfdata, NULL);
e_widget_table_object_append(ot, cfdata->o_config, 0, 2, 1, 1, 1, 1, 0, 0);
e_widget_disabled_set(cfdata->o_delete, 1);
e_widget_disabled_set(cfdata->o_config, 1);
e_widget_list_object_append(o, ot, 1, 0, 0.0);
_ilist_fill(cfdata);
e_dialog_resizable_set(cfd->dia, 1);
return o;
}
/* private functions */
static void
_ilist_fill(E_Config_Dialog_Data *cfdata)
{
Evas *evas;
Eina_List *l;
int n = -1;
char buf[256];
Ng *ng;
Config_Item *ci;
Evas_Object *ob;
const char *label;
if (!cfdata)
return;
if (!cfdata->o_list)
return;
evas = evas_object_evas_get(cfdata->o_list);
if (e_widget_ilist_count(cfdata->o_list) > 0)
n = e_widget_ilist_selected_get(cfdata->o_list);
evas_event_freeze(evas);
edje_freeze();
e_widget_ilist_freeze(cfdata->o_list);
e_widget_ilist_clear(cfdata->o_list);
e_widget_ilist_go(cfdata->o_list);
EINA_LIST_FOREACH (ngi_config->items, l, ci)
{
if (!ci)
continue;
ng = ci->ng;
/* FIXME*/
/*if(ci->launcher)
label = D_("Launcher NG");
else if(ci->taskbar)
label = D_("Taskbar NG");
*/
label = D_("Bar");
snprintf(buf, sizeof(buf), "%s / Zone %d", label, ci->zone);
ob = edje_object_add(evas);
switch (ci->orient)
{
case E_GADCON_ORIENT_LEFT:
e_util_edje_icon_set(ob, "enlightenment/shelf_position_left");
break;
case E_GADCON_ORIENT_RIGHT:
e_util_edje_icon_set(ob, "enlightenment/shelf_position_right");
break;
case E_GADCON_ORIENT_TOP:
e_util_edje_icon_set(ob, "enlightenment/shelf_position_top");
break;
case E_GADCON_ORIENT_BOTTOM:
e_util_edje_icon_set(ob, "enlightenment/shelf_position_bottom");
break;
default:
e_util_edje_icon_set(ob, "enlightenment/e");
break;
} /* switch */
e_widget_ilist_append(cfdata->o_list, ob, buf, _ilist_cb_selected, cfdata, buf);
}
e_widget_size_min_set(cfdata->o_list, 155, 250);
e_widget_ilist_go(cfdata->o_list);
e_widget_ilist_thaw(cfdata->o_list);
edje_thaw();
evas_event_thaw(evas);
if (n > -1)
{
e_widget_disabled_set(cfdata->o_delete, 0);
e_widget_disabled_set(cfdata->o_config, 0);
e_widget_ilist_selected_set(cfdata->o_list, n);
}
else
{
e_widget_disabled_set(cfdata->o_delete, 1);
e_widget_disabled_set(cfdata->o_config, 1);
}
}
static void
_ilist_cb_selected(void *data)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
if (!cfdata)
return;
e_widget_disabled_set(cfdata->o_delete, 0);
e_widget_disabled_set(cfdata->o_config, 0);
}
static void
_cb_add(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
Config_Item *cfg;
Config_Box *cfg_box;
E_Container *con;
E_Zone *zone;
if (!cfdata)
return;
con = e_container_current_get(e_manager_current_get());
zone = e_zone_current_get(con);
cfg = ngi_bar_config_new(con->num, zone->num);
ngi_new(cfg);
_ilist_fill(cfdata);
}
static void
_cb_delete(void *data, void *data2)
{
Ngi_Del_Confirm_Data *d;
char buf[4096];
Config_Item *ci;
d = E_NEW(Ngi_Del_Confirm_Data, 1);
if (!d)
return;
d->cfdata = (E_Config_Dialog_Data *)data;
if (!d->cfdata)
return;
if (!d->cfdata->cur_ng)
return;
ci = (Config_Item *)eina_list_nth(ngi_config->items, e_widget_ilist_selected_get(d->cfdata->o_list));
if (!ci)
return;
d->cfg = ci;
snprintf(buf, sizeof(buf), D_("You requested to delete \"%s\".<br><br>"
"Are you sure you want to delete this Instance?"),
d->cfdata->cur_ng);
e_confirm_dialog_show(D_("Are you sure you want to delete this Instance?"),
"enlightenment/exit", buf, NULL, NULL, _cb_dialog_yes, NULL, d, NULL,
_cb_dialog_destroy, d);
}
static void
_cb_dialog_yes(void *data)
{
Ngi_Del_Confirm_Data *d = (Ngi_Del_Confirm_Data *)data;
if (!data)
return;
if(d->cfg->ng)
ngi_free(d->cfg->ng);
ngi_config->items = eina_list_remove(ngi_config->items, d->cfg);
e_config_domain_save("module.ng", ngi_conf_edd, ngi_config);
}
static void
_cb_dialog_destroy(void *data)
{
Ngi_Del_Confirm_Data *d = (Ngi_Del_Confirm_Data *)data;
_ilist_fill(d->cfdata);
E_FREE(d);
}
static void
_cb_config(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data *)data;
Config_Item *ci;
int item = 0;
if (!cfdata)
return;
item = e_widget_ilist_selected_get(cfdata->o_list);
ci = (Config_Item *)eina_list_nth(ngi_config->items, item);
if (!ci)
return;
ngi_configure_module(ci);
}

687
src/ng_gadcon.c Normal file
View File

@ -0,0 +1,687 @@
#include "e_mod_main.h"
#include <string.h>
static void _ngi_gadcon_cb_gadcon_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
static void _ngi_gadcon_cb_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
static Evas_Object * _ngi_gadcon_cb_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style);
static void * _create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object * _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static Eina_Bool _cb_mod_update(void *data, int type, void *event);
static void _avail_list_cb_change(void *data, Evas_Object *obj);
static void _sel_list_cb_change(void *data, Evas_Object *obj);
static void _load_avail_gadgets(void *data);
static void _load_sel_gadgets(void *data);
static void _cb_add(void *data, void *data2);
static void _cb_del(void *data, void *data2);
static void _set_description(void *data, const char *name);
static Eina_Hash *ngi_gadcon_hash = NULL;
void
ngi_gadcon_init(void)
{
Eina_List *l, *ll, *lll;
Config_Item *ci;
Config_Box *cb;
Config_Gadcon *cg;
ngi_gadcon_hash = eina_hash_string_superfast_new(NULL);
EINA_LIST_FOREACH (ngi_config->items, l, ci)
{
EINA_LIST_FOREACH (ci->boxes, ll, cb)
{
if (cb->type != gadcon)
continue;
EINA_LIST_FOREACH(cb->gadcon_items, lll, cg)
eina_hash_add(ngi_gadcon_hash, cg->name, cg);
}
}
}
void
ngi_gadcon_shutdown(void)
{
if (ngi_gadcon_hash)
eina_hash_free(ngi_gadcon_hash);
}
static char *
_ngi_gadcon_name_new()
{
char name[256];
int cnt = 0;
while(cnt < 1000)
{
snprintf(name, 256, "ng_gadcon-%d", cnt++);
if (!eina_hash_find(ngi_gadcon_hash, name))
return strdup(name);
}
return NULL;
}
static void
_ngi_gadcon_item_cb_mouse_down(Ngi_Item *it, Ecore_Event_Mouse_Button *ev)
{
}
static void
_ngi_gadcon_item_cb_mouse_up(Ngi_Item *it, Ecore_Event_Mouse_Button *ev)
{
}
static void
_ngi_gadcon_item_cb_mouse_in(Ngi_Item *it)
{
}
static void
_ngi_gadcon_item_cb_mouse_out(Ngi_Item *it)
{
}
static void
_ngi_gadcon_item_cb_free(Ngi_Item *item)
{
Ngi_Item_Gadcon *it = (Ngi_Item_Gadcon *) item;
if (it->gadcon)
e_object_del(E_OBJECT(it->gadcon));
if (it->o_icon)
evas_object_del(it->o_icon);
if (it->o_proxy)
evas_object_del(it->o_proxy);
E_FREE(it);
}
static void
_ngi_gadcon_locked_set(void *data, int lock)
{
Ng *ng = data;
ngi_bar_lock(ng, lock);
ngi_animate(ng);
}
static Ngi_Item_Gadcon *
_ngi_gadcon_item_new(Ngi_Box *box, Config_Gadcon *cg, Ngi_Item *after)
{
Ngi_Item_Gadcon *it;
Evas_Object *o;
Ng *ng = box->ng;
it = E_NEW(Ngi_Item_Gadcon, 1);
it->base.box = box;
it->cfg_gadcon = cg;
ngi_item_init_defaults((Ngi_Item*)it);
it->base.cb_mouse_in = _ngi_gadcon_item_cb_mouse_in;
it->base.cb_mouse_out = _ngi_gadcon_item_cb_mouse_out;
it->base.cb_mouse_down = _ngi_gadcon_item_cb_mouse_down;
it->base.cb_mouse_up = _ngi_gadcon_item_cb_mouse_up;
it->base.cb_drag_start = NULL; //_ngi_gadcon_item_cb_drag_start;
it->base.cb_free = _ngi_gadcon_item_cb_free;
it->gadcon = e_gadcon_swallowed_new(cg->name, 0, it->base.obj, "e.swallow.content");
it->gadcon->instant_edit = 0;
/* edje_extern_object_min_size_set(it->gadcon->o_container, ng->size, ng->size); */
e_gadcon_min_size_request_callback_set(it->gadcon, _ngi_gadcon_cb_gadcon_min_size_request, it);
e_gadcon_size_request_callback_set(it->gadcon, _ngi_gadcon_cb_gadcon_size_request, it);
e_gadcon_frame_request_callback_set(it->gadcon, _ngi_gadcon_cb_gadcon_frame_request, it);
e_gadcon_orient(it->gadcon, ng->cfg->orient);
e_gadcon_zone_set(it->gadcon, box->ng->zone);
e_gadcon_ecore_evas_set(it->gadcon, box->ng->win->popup->ecore_evas);
e_gadcon_util_lock_func_set(it->gadcon, _ngi_gadcon_locked_set, ng);
if (after)
box->items = eina_list_prepend_relative(box->items, it, after);
else
box->items = eina_list_append(box->items, it);
e_gadcon_populate(it->gadcon);
/* if(it->gadcon->clients)
* {
* char buf[256];
* E_Gadcon_Client *gcc = it->gadcon->clients->data;
* snprintf(buf, 256, "%s-%d", gcc->name, gcc->id);
* it->label = e_datastore_get(buf);
* } */
evas_object_show(it->gadcon->o_container);
it->o_proxy = e_icon_add(ng->evas);
o = evas_object_image_add(ng->evas);
evas_object_image_source_set(o, it->base.obj);
evas_object_resize(o, 128, 128);
evas_object_image_fill_set(o, 0,0,128,128);
e_icon_object_set(it->o_proxy, o);
edje_object_part_swallow(it->base.over, "e.swallow.content", it->o_proxy);
evas_object_pass_events_set(it->o_proxy, 1);
evas_object_show(it->o_proxy);
ngi_item_show((Ngi_Item*)it, 0);
return it;
}
void
ngi_gadcon_new(Ng *ng, Config_Box *cfg)
{
Eina_List *l;
Config_Gadcon *cg;
Ngi_Box *box = ngi_box_new(ng);
if(!box) return;
box->cfg = cfg;
cfg->box = box;
if(!cfg->gadcon_items)
return;
EINA_LIST_FOREACH (cfg->gadcon_items, l, cg)
_ngi_gadcon_item_new(box, cg, NULL);
}
void
ngi_gadcon_remove(Ngi_Box *box)
{
ngi_box_free(box);
}
static void
_ngi_gadcon_cb_gadcon_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h)
{
Ngi_Item *it;
it = data;
return;
}
static void
_ngi_gadcon_cb_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h)
{
Ngi_Item *it;
it = data;
return;
}
static Evas_Object *
_ngi_gadcon_cb_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style)
{
/* FIXME: provide an inset look edje thing */
return NULL;
}
struct _E_Config_Dialog_Data
{
Evas_Object *o_avail, *o_sel;
Evas_Object *o_add, *o_del;
Evas_Object *o_desc;
E_Gadcon *gc;
Ngi_Box *box;
Ecore_Event_Handler *hdl;
};
void
ngi_gadcon_config(Ngi_Box *box)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View *v;
E_Container *con;
v = E_NEW(E_Config_Dialog_View, 1);
if (!v)
return;
con = e_container_current_get(e_manager_current_get());
v->create_cfdata = _create_data;
v->free_cfdata = _free_data;
v->basic.create_widgets = _basic_create;
cfd = e_config_dialog_new(con, "Gadcon Config", "E", "_ngi_gadcon_config_dialog",
"enlightenment/shelf", 0, v, box);
box->cfd = cfd;
e_dialog_resizable_set(cfd->dia, 1);
}
static void *
_create_data(E_Config_Dialog *cfd)
{
E_Config_Dialog_Data *cfdata;
cfdata = E_NEW(E_Config_Dialog_Data, 1);
cfdata->box = cfd->data;
return cfdata;
}
static void
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
Ngi_Box *box;
if (cfdata->hdl)
ecore_event_handler_del(cfdata->hdl);
E_FREE(cfdata);
if (!(box = cfd->data))
return;
box->cfd = NULL;
}
static Evas_Object *
_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
Evas_Object *o = NULL, *of = NULL;
Evas_Object *ow = NULL;
o = e_widget_table_add(evas, 0);
of = e_widget_frametable_add(evas, D_("Available Gadgets"), 0);
ow = e_widget_ilist_add(evas, 24, 24, NULL);
e_widget_ilist_multi_select_set(ow, 1);
e_widget_on_change_hook_set(ow, _avail_list_cb_change, cfdata);
cfdata->o_avail = ow;
_load_avail_gadgets(cfdata);
e_widget_frametable_object_append(of, ow, 0, 0, 1, 1, 1, 1, 1, 1);
ow = e_widget_button_add(evas, D_("Add Gadget"), NULL, _cb_add, cfdata, NULL);
e_widget_disabled_set(ow, 1);
cfdata->o_add = ow;
e_widget_frametable_object_append(of, ow, 0, 1, 1, 1, 1, 1, 1, 0);
e_widget_table_object_append(o, of, 0, 0, 1, 1, 1, 1, 1, 1);
of = e_widget_frametable_add(evas, D_("Selected Gadgets"), 0);
ow = e_widget_ilist_add(evas, 24, 24, NULL);
e_widget_ilist_multi_select_set(ow, 1);
e_widget_on_change_hook_set(ow, _sel_list_cb_change, cfdata);
cfdata->o_sel = ow;
_load_sel_gadgets(cfdata);
e_widget_frametable_object_append(of, ow, 0, 0, 1, 1, 1, 1, 1, 1);
ow = e_widget_button_add(evas, D_("Remove Gadget"), NULL, _cb_del, cfdata, NULL);
e_widget_disabled_set(ow, 1);
cfdata->o_del = ow;
e_widget_frametable_object_append(of, ow, 0, 1, 1, 1, 1, 1, 1, 0);
e_widget_table_object_append(o, of, 1, 0, 1, 1, 1, 1, 1, 1);
ow = e_widget_textblock_add(evas);
e_widget_size_min_set(ow, 200, 70);
e_widget_textblock_markup_set(ow, D_("Description: Unavailable"));
cfdata->o_desc = ow;
e_widget_table_object_append(o, ow, 0, 1, 2, 1, 1, 1, 1, 0);
if (cfdata->hdl)
ecore_event_handler_del(cfdata->hdl);
cfdata->hdl = ecore_event_handler_add(E_EVENT_MODULE_UPDATE,
_cb_mod_update, cfdata);
return o;
}
static Eina_Bool
_cb_mod_update(void *data, int type, void *event)
{
E_Config_Dialog_Data *cfdata = NULL;
if (type != E_EVENT_MODULE_UPDATE)
return EINA_TRUE;
if (!(cfdata = data))
return EINA_TRUE;
_load_avail_gadgets(cfdata);
_load_sel_gadgets(cfdata);
return EINA_TRUE;
}
static void
_avail_list_cb_change(void *data, Evas_Object *obj)
{
E_Config_Dialog_Data *cfdata = NULL;
const char *name;
int sel, count;
if (!(cfdata = data))
return;
e_widget_ilist_unselect(cfdata->o_sel);
e_widget_disabled_set(cfdata->o_del, 1);
e_widget_disabled_set(cfdata->o_add, 0);
count = e_widget_ilist_selected_count_get(cfdata->o_avail);
if ((count > 1) || (count == 0))
e_widget_textblock_markup_set(cfdata->o_desc, D_("Description: Unavailable"));
else
{
sel = e_widget_ilist_selected_get(cfdata->o_avail);
name = (char *)e_widget_ilist_nth_data_get(cfdata->o_avail, sel);
_set_description(cfdata, name);
}
}
static void
_sel_list_cb_change(void *data, Evas_Object *obj)
{
E_Config_Dialog_Data *cfdata = NULL;
const char *name;
int sel, count;
if (!(cfdata = data))
return;
e_widget_ilist_unselect(cfdata->o_avail);
e_widget_disabled_set(cfdata->o_add, 1);
e_widget_disabled_set(cfdata->o_del, 0);
count = e_widget_ilist_selected_count_get(cfdata->o_sel);
if ((count > 1) || (count == 0))
e_widget_textblock_markup_set(cfdata->o_desc, D_("Description: Unavailable"));
else
{
sel = e_widget_ilist_selected_get(cfdata->o_sel);
name = (char *)e_widget_ilist_nth_data_get(cfdata->o_sel, sel);
_set_description(cfdata, name);
}
}
static void
_load_avail_gadgets(void *data)
{
E_Config_Dialog_Data *cfdata = NULL;
E_Gadcon_Client_Class *cc;
Eina_List *l = NULL;
Evas_Object *icon = NULL;
const char *lbl = NULL;
Evas *evas;
int w;
if (!(cfdata = data))
return;
evas = evas_object_evas_get(cfdata->o_avail);
evas_event_freeze(evas);
edje_freeze();
e_widget_ilist_freeze(cfdata->o_avail);
e_widget_ilist_clear(cfdata->o_avail);
EINA_LIST_FOREACH (e_gadcon_provider_list(), l, cc)
{
if (!cc)
continue;
if (cc->func.label)
lbl = cc->func.label(cc);
if (!lbl)
lbl = cc->name;
if (cc->func.icon)
icon = cc->func.icon(cc, evas);
e_widget_ilist_append(cfdata->o_avail, icon, lbl, NULL,
(void *)cc->name, NULL);
}
e_widget_ilist_go(cfdata->o_avail);
e_widget_size_min_get(cfdata->o_avail, &w, NULL);
if (w < 200)
w = 200;
e_widget_size_min_set(cfdata->o_avail, w, 250);
e_widget_ilist_thaw(cfdata->o_avail);
edje_thaw();
evas_event_thaw(evas);
}
static void
_load_sel_gadgets(void *data)
{
E_Config_Dialog_Data *cfdata = NULL;
Eina_List *ll = NULL, *l = NULL, *l2 = NULL;
Evas *evas;
int w;
Ngi_Item_Gadcon *it;
E_Config_Gadcon_Client *cgc;
E_Gadcon_Client_Class *gcc;
if (!(cfdata = data))
return;
evas = evas_object_evas_get(cfdata->o_sel);
evas_event_freeze(evas);
edje_freeze();
e_widget_ilist_freeze(cfdata->o_sel);
e_widget_ilist_clear(cfdata->o_sel);
EINA_LIST_FOREACH(cfdata->box->items, ll, it)
{
EINA_LIST_FOREACH(it->gadcon->cf->clients, l, cgc)
{
if (!cgc) continue;
EINA_LIST_FOREACH(e_gadcon_provider_list(), l2, gcc)
{
Evas_Object *icon = NULL;
const char *lbl = NULL;
if (!gcc) continue;
if ((cgc->name) && (gcc->name) &&
(!strcmp(cgc->name, gcc->name)))
{
if (gcc->func.label)
lbl = gcc->func.label(gcc);
if (!lbl)
lbl = gcc->name;
if (gcc->func.icon)
icon = gcc->func.icon(gcc, evas);
e_widget_ilist_append(cfdata->o_sel, icon, lbl, NULL,
(void *)gcc->name, NULL);
}
}
}
}
e_widget_ilist_go(cfdata->o_sel);
e_widget_size_min_get(cfdata->o_sel, &w, NULL);
if (w < 200)
w = 200;
e_widget_size_min_set(cfdata->o_sel, w, 250);
e_widget_ilist_thaw(cfdata->o_sel);
edje_thaw();
evas_event_thaw(evas);
if (l)
eina_list_free(l);
if (l2)
eina_list_free(l2);
}
static void
_cb_add(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = NULL;
Eina_List *l, *ll;
char *gadcon_name;
Ngi_Box *box;
E_Ilist_Item *item;
int i = 0, update = 0;
if (!(cfdata = data))
return;
box = cfdata->box;
EINA_LIST_FOREACH(e_widget_ilist_items_get(cfdata->o_avail), l, item)
{
Config_Gadcon *cg;
E_Config_Gadcon_Client *cgc;
Ngi_Item_Gadcon *it;
const char *name;
if (!item->selected) continue;
name = (char *) e_widget_ilist_item_data_get(item);
if (!name) continue;
gadcon_name = _ngi_gadcon_name_new();
if (!gadcon_name) continue;
cg = E_NEW(Config_Gadcon, 1);
cg->name = eina_stringshare_add(gadcon_name);
eina_hash_add(ngi_gadcon_hash, cg->name, cg);
box->cfg->gadcon_items = eina_list_append(box->cfg->gadcon_items, cg);
it = _ngi_gadcon_item_new(box, cg, NULL);
if (it->gadcon->cf->clients)
e_gadcon_unpopulate(it->gadcon);
EINA_LIST_FOREACH(it->gadcon->cf->clients, ll, cgc)
e_gadcon_client_config_del(it->gadcon->cf, cgc);
if (!e_gadcon_client_config_new(it->gadcon, name))
{
// FIXME free item
}
else
{
e_gadcon_populate(it->gadcon);
update = 1;
}
}
if (update)
{
e_config_save_queue();
_load_sel_gadgets(cfdata);
e_widget_ilist_selected_set(cfdata->o_sel, i);
ngi_thaw(box->ng);
}
}
static void
_cb_del(void *data, void *data2)
{
E_Config_Dialog_Data *cfdata = NULL;
Eina_List *l = NULL, *g = NULL;
int i = 0, update = 0;
Ngi_Item_Gadcon *it;
if (!(cfdata = data))
return;
for (i = 0, l = e_widget_ilist_items_get(cfdata->o_sel); l; l = l->next, i++)
{
E_Ilist_Item *item = NULL;
E_Config_Gadcon_Client *cgc;
const char *name = NULL;
if (!(item = l->data))
continue;
if (!item->selected)
continue;
name = (char *)e_widget_ilist_nth_data_get(cfdata->o_sel, i);
if (!name)
continue;
it = eina_list_nth(cfdata->box->items, i);
if (!it)
continue;
EINA_LIST_FOREACH (it->gadcon->cf->clients, g, cgc)
{
if (!cgc)
continue;
if (strcmp(name, cgc->name))
continue;
e_gadcon_client_config_del(it->gadcon->cf, cgc);
cfdata->box->cfg->gadcon_items =
eina_list_remove(cfdata->box->cfg->gadcon_items, it->cfg_gadcon);
eina_hash_del_by_key(ngi_gadcon_hash, it->cfg_gadcon->name);
e_gadcon_unpopulate(it->gadcon);
/* it->base.obj = NULL;
* it->box->items = eina_list_remove(it->box->items, it);
* ngi_item_free(it); */
ngi_item_remove((Ngi_Item*)it);
e_config_save_queue();
update = 1;
}
}
if (update)
{
_load_sel_gadgets(cfdata);
/* we just default to selecting first one here as the user may have had
* more than one selected */
e_widget_ilist_selected_set(cfdata->o_sel, 0);
ngi_thaw(cfdata->box->ng);
}
if (g)
eina_list_free(g);
if (l)
eina_list_free(l);
}
static void
_set_description(void *data, const char *name)
{
E_Config_Dialog_Data *cfdata = NULL;
E_Module *mod = NULL;
Efreet_Desktop *desk = NULL;
char buf[4096];
if (!(cfdata = data))
return;
if (!name)
return;
if (!(mod = e_module_find(name)))
return;
snprintf(buf, sizeof(buf), "%s/module.desktop", e_module_dir_get(mod));
if (!ecore_file_exists(buf))
return;
if (!(desk = efreet_desktop_get(buf)))
return;
if (desk->comment)
e_widget_textblock_markup_set(cfdata->o_desc, desk->comment);
efreet_desktop_free(desk);
}

223
src/ng_item.c Normal file
View File

@ -0,0 +1,223 @@
#include "e_mod_main.h"
void
ngi_item_init_defaults(Ngi_Item *it)
{
Ng *ng = it->box->ng;
int ok = 0;
it->obj = edje_object_add(ng->evas);
switch(ng->cfg->orient)
{
case E_GADCON_ORIENT_BOTTOM:
ok = ngi_object_theme_set(it->obj, "e/modules/engage/icon_bottom");
break;
case E_GADCON_ORIENT_TOP:
ok = ngi_object_theme_set(it->obj, "e/modules/engage/icon_top");
break;
case E_GADCON_ORIENT_LEFT:
ok = ngi_object_theme_set(it->obj, "e/modules/engage/icon_left");
break;
case E_GADCON_ORIENT_RIGHT:
ok = ngi_object_theme_set(it->obj, "e/modules/engage/icon_right");
break;
}
/* TODO remove fallback */
if (!ok)
{
if (!e_theme_edje_object_set(it->obj, "base/theme/modules/engage", "e/modules/engage/icon"))
edje_object_file_set(it->obj, ngi_config->theme_path, "e/modules/engage/icon");
}
it->over = edje_object_add(ng->evas);
switch(ng->cfg->orient)
{
case E_GADCON_ORIENT_BOTTOM:
ok = ngi_object_theme_set(it->over, "e/modules/engage/icon_over_bottom");
break;
case E_GADCON_ORIENT_TOP:
ok = ngi_object_theme_set(it->over, "e/modules/engage/icon_over_top");
break;
case E_GADCON_ORIENT_LEFT:
ok = ngi_object_theme_set(it->over, "e/modules/engage/icon_over_left");
break;
case E_GADCON_ORIENT_RIGHT:
ok = ngi_object_theme_set(it->over, "e/modules/engage/icon_over_right");
break;
}
if (!ok)
{
if (!e_theme_edje_object_set(it->over, "base/theme/modules/engage", "e/modules/engage/icon_overlay"))
edje_object_file_set(it->over, ngi_config->theme_path, "e/modules/engage/icon_overlay");
}
evas_object_layer_set(it->over, 9999);
evas_object_show(it->over);
evas_object_show(it->obj);
}
void
ngi_item_show(Ngi_Item *it, int instant)
{
Ng *ng = it->box->ng;
evas_object_show(it->obj);
evas_object_show(it->over);
ngi_item_signal_emit(it, "e,state,item,show");
if (eina_list_data_find(ng->items_remove, it))
ng->items_remove = eina_list_remove(ng->items_remove, it);
if (instant)
{
it->scale = 1.0;
ngi_animate(ng);
return;
}
it->start_time = ecore_time_get();
it->scale = 0.0;
ng->items_show = eina_list_append(ng->items_show, it);
ngi_animate(ng);
}
void
ngi_item_remove(Ngi_Item *it)
{
if (!it) return;
Ng *ng = it->box->ng;
double now = ecore_time_get();
edje_object_signal_emit(it->obj, "e,state,item,hide", "e");
if (now - it->start_time < ng->opt.fade_duration)
it->start_time = now - (ng->opt.fade_duration - (now - it->start_time));
else
it->start_time = now;
it->delete_me = 1;
if (eina_list_data_find(ng->items_show, it))
ng->items_show = eina_list_remove(ng->items_show, it);
if (!eina_list_data_find(ng->items_remove, it))
ng->items_remove = eina_list_append(ng->items_remove, it);
if (it == ng->item_active)
ng->item_active = NULL;
if (it == ng->item_drag)
ng->item_drag = NULL;
ngi_animate(ng);
}
void
ngi_item_free(Ngi_Item *it)
{
Ng *ng = it->box->ng;
if (it == ng->item_active)
ng->item_active = NULL;
if (it == ng->item_drag)
ng->item_drag = NULL;
if (eina_list_data_find(ng->items_remove, it))
ng->items_remove = eina_list_remove(ng->items_remove, it);
if (eina_list_data_find(ng->items_show, it))
ng->items_show = eina_list_remove(ng->items_show, it);
it->box->items = eina_list_remove(it->box->items, it);
if (it->obj)
evas_object_del(it->obj);
if (it->over)
evas_object_del(it->over);
if (it->label)
eina_stringshare_del(it->label);
if (it->cb_free) it->cb_free(it);
}
void
ngi_item_label_set(Ngi_Item *it, const char *label)
{
if (it->label)
eina_stringshare_del(it->label);
if (label)
it->label = eina_stringshare_add(label);
else
it->label = NULL;
}
void
ngi_item_signal_emit(Ngi_Item *it, char *sig)
{
if (it->obj)
edje_object_signal_emit(it->obj, sig, "e");
if (it->over)
edje_object_signal_emit(it->over, sig, "e");
}
void
ngi_item_mouse_in(Ngi_Item *it)
{
if (!it || it->delete_me) return;
ngi_item_signal_emit(it,"e,state,mouse,in");
if (it->box->ng->cfg->mouse_over_anim)
ngi_item_signal_emit(it,"e,state,animate,in");
if (it->cb_mouse_in)
it->cb_mouse_in(it);
}
void
ngi_item_mouse_out(Ngi_Item *it)
{
if (!it || it->delete_me) return;
ngi_item_signal_emit(it,"e,state,mouse,out");
if (it->box->ng->cfg->mouse_over_anim)
ngi_item_signal_emit(it,"e,state,animate,out");
if (it->cb_mouse_out)
it->cb_mouse_out(it);
}
void
ngi_item_mouse_down(Ngi_Item *it, Ecore_Event_Mouse_Button *ev)
{
if (!it || it->delete_me) return;
ngi_item_signal_emit(it,"e,state,mouse,down");
if (it->cb_mouse_down)
it->cb_mouse_down(it, ev);
}
void
ngi_item_mouse_up(Ngi_Item *it, Ecore_Event_Mouse_Button *ev)
{
if (!it || it->delete_me) return;
ngi_item_signal_emit(it,"e,state,mouse,up");
if (it->cb_mouse_up)
it->cb_mouse_up(it, ev);
}

604
src/ng_launcher.c Normal file
View File

@ -0,0 +1,604 @@
#include "e_mod_main.h"
/*
TODO
- update on icon changes
*/
static void _box_fill (Ngi_Box *box);
static void _app_change_cb (void *data, E_Order *eo);
static void _item_new (Ngi_Box *box, Efreet_Desktop *dekstop, int instant, Ngi_Item_Launcher *after);
static void _item_fill (Ngi_Item_Launcher *it);
static void _item_cb_free (Ngi_Item *it);
static void _item_cb_drag_start (Ngi_Item *it);
static void _item_cb_mouse_up (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
static void _item_cb_mouse_down (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
static void _cb_drop_enter (void *data, const char *type, void *event_info);
static void _cb_drop_leave (void *data, const char *type, void *event_info);
static void _cb_drop_move (void *data, const char *type, void *event_info);
static void _cb_drop_end (void *data, const char *type, void *event_info);
static Eina_Bool _cb_icons_update(void *data, int type, void *event);
void
ngi_launcher_new(Ng *ng, Config_Box *cfg)
{
char buf[4096];
Ecore_Event_Handler *h;
Ngi_Box *box = ngi_box_new(ng);
box->cfg = cfg;
cfg->box = box;
const char *drop[] =
{ "enlightenment/desktop",
"enlightenment/border",
"text/uri-list" };
box->drop_handler = e_drop_handler_add
(ng->win->drop_win, box,
_cb_drop_enter, _cb_drop_move,
_cb_drop_leave, _cb_drop_end,
drop, 3, 0, 0, 0, 0);
h = ecore_event_handler_add(E_EVENT_CONFIG_ICON_THEME, _cb_icons_update, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(EFREET_EVENT_ICON_CACHE_UPDATE, _cb_icons_update, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE, _cb_icons_update, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
if (!cfg->launcher_app_dir || strlen(cfg->launcher_app_dir) == 0)
return;
if (cfg->launcher_app_dir[0] != '/')
{
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order",
e_user_homedir_get(), cfg->launcher_app_dir);
}
else
snprintf(buf, sizeof(buf), "%s", cfg->launcher_app_dir);
box->apps = e_order_new(buf);
e_order_update_callback_set(box->apps, _app_change_cb, box);
_box_fill(box);
}
void
ngi_launcher_remove(Ngi_Box *box)
{
Ecore_Event_Handler *h;
e_drop_handler_del(box->drop_handler);
if (box->apps)
{
e_order_update_callback_set(box->apps, NULL, NULL);
e_object_del(E_OBJECT(box->apps));
}
EINA_LIST_FREE(box->handlers, h)
ecore_event_handler_del(h);
ngi_box_free(box);
}
static void
_box_fill(Ngi_Box *box)
{
Efreet_Desktop *desktop;
Eina_List *l;
if (!box->apps)
return;
ngi_freeze(box->ng);
EINA_LIST_FOREACH(box->apps->desktops, l, desktop)
_item_new(box, desktop, 1, NULL);
ngi_thaw(box->ng);
}
static Eina_Bool
_cb_icons_update(void *data, int type, void *event)
{
Ngi_Box *box = (Ngi_Box *)data;
Eina_List *l;
Ngi_Item_Launcher *it;
EINA_LIST_FOREACH(box->items, l, it)
_item_fill(it);
return ECORE_CALLBACK_PASS_ON;
}
static void
_app_change_cb(void *data, E_Order *eo)
{
Ngi_Box *box = (Ngi_Box *)data;
if (box->item_drop)
return;
while(box->items)
ngi_item_free(box->items->data);
_box_fill(box);
}
/* ******************************* LAUNCHER DROP HANDLER ******************** */
static Ngi_Item *
_drop_item_new(Ngi_Box *box)
{
Ngi_Item *it;
it = (Ngi_Item*)E_NEW(Ngi_Item_Launcher, 1);
it->box = box;
ngi_item_show(it, 0);
it->delete_me = EINA_TRUE;
return it;
}
static void
_drop_handle_move(Ngi_Box *box, int x, int y)
{
Ngi_Item *item;
Ngi_Item_Launcher *it, *it2;
Eina_List *l;
if (box->ng->horizontal)
box->ng->pos = x + box->ng->size/2 - box->ng->zone->x;
else
box->ng->pos = y + box->ng->size/2 - box->ng->zone->y;
item = ngi_item_at_position_get(box->ng);
if (item && (item->box != box))
{
l = eina_list_last(box->items);
if (l && (it = l->data) && (!it->app)) return;
ngi_item_remove(box->item_drop);
box->item_drop = _drop_item_new(box);
box->items = eina_list_append(box->items, box->item_drop);
}
else if (item && item->box == box)
{
it = (Ngi_Item_Launcher*)item;
l = eina_list_data_find_list(box->items, it);
if (l) it2 = eina_list_data_get(l->prev);
if (it->app && (!it2 || it2->app))
{
ngi_item_remove(box->item_drop);
box->item_drop = _drop_item_new(box);
box->items = eina_list_prepend_relative(box->items, box->item_drop, it);
}
}
}
static void
_cb_drop_enter(void *data, const char *type, void *event_info)
{
E_Event_Dnd_Enter *ev = (E_Event_Dnd_Enter *)event_info;
Ngi_Box *box = (Ngi_Box *)data;
if (!strcmp(type, "text/uri-list"))
return;
_drop_handle_move(box, ev->x, ev->y);
box->ng->dnd = 1;
ngi_mouse_in(box->ng);
}
static void
_cb_drop_move(void *data, const char *type, void *event_info)
{
E_Event_Dnd_Move *ev = (E_Event_Dnd_Move *)event_info;
Ngi_Box *box = (Ngi_Box *)data;
if (!strcmp(type, "text/uri-list"))
return;
_drop_handle_move(box, ev->x, ev->y);
ngi_thaw(box->ng);
}
static void
_cb_drop_leave(void *data, const char *type, void *event_info)
{
Ngi_Box *box = (Ngi_Box *)data;
if (!strcmp(type, "text/uri-list"))
return;
if (box->item_drop)
ngi_item_remove(box->item_drop);
box->item_drop = NULL;
ngi_reposition(box->ng);
ngi_input_extents_calc(box->ng);
box->ng->dnd = 0;
ngi_mouse_out(box->ng);
}
static void
_cb_drop_end(void *data, const char *type, void *event_info)
{
E_Event_Dnd_Drop *ev = (E_Event_Dnd_Drop *)event_info;
Ngi_Box *box = data;
Efreet_Desktop *app = NULL;
Ngi_Item_Launcher *it = NULL;
Eina_List *l;
if (!strcmp(type, "enlightenment/desktop"))
{
app = (Efreet_Desktop *)ev->data;
}
else if (!strcmp(type, "enlightenment/border"))
{
E_Border *bd = (E_Border *)ev->data;
app = bd->desktop;
if (bd->internal)
{
const char *class = bd->client.icccm.class;
if ((class) && (!strncmp(class, "e_fwin::", 8)) &&
(ecore_file_exists(class+8)))
{
const char *file = class+8;
char buf[PATH_MAX];
if (!app)
{
app = e_desktop_border_create(bd);
if (app->name) free(app->name);
app->name = strdup(ecore_file_file_get(file));
if (app->icon) free(app->icon);
app->icon = strdup("folder");
if (app->comment)free(app->comment);
app->comment = strdup(D_("Open folder with EFM"));
if (app->exec) free(app->exec);
snprintf(buf, PATH_MAX, "enlightenment_remote -efm-open-dir %s", file);
app->exec = strdup(buf);
efreet_desktop_save(app);
}
}
}
else if (!app)
{
app = e_desktop_border_create(bd);
efreet_desktop_save(app);
e_desktop_edit(e_container_current_get(e_manager_current_get()), app);
}
}
else if (!strcmp(type, "text/uri-list"))
return;
if (!app)
return;
l = eina_list_data_find_list(box->items, box->item_drop);
if (l) it = eina_list_data_get(l->next);
if (box->item_drop)
ngi_item_free(box->item_drop);
if (it && it->app)
e_order_prepend_relative(box->apps, app, it->app);
else
e_order_append(box->apps, app);
/* _save_order(box); */
_item_new(box, app, 1, it);
box->ng->dnd = 0;
ngi_reposition(box->ng);
ngi_input_extents_calc(box->ng);
}
/* ******************************* LAUNCHER ITEM ********************************** */
static void
_item_new(Ngi_Box *box, Efreet_Desktop *desktop, int instant, Ngi_Item_Launcher *after)
{
Ngi_Item_Launcher *it;
it = E_NEW(Ngi_Item_Launcher, 1);
it->base.box = box;
ngi_item_init_defaults((Ngi_Item*)it);
it->base.cb_free = _item_cb_free;
it->base.cb_mouse_down = _item_cb_mouse_down;
it->base.cb_mouse_up = _item_cb_mouse_up;
it->base.cb_drag_start = _item_cb_drag_start;
efreet_desktop_ref(desktop);
it->app = desktop;
_item_fill(it);
if (after)
box->items = eina_list_prepend_relative(box->items, it, after);
else
box->items = eina_list_append(box->items, it);
ngi_item_show((Ngi_Item*)it, instant);
}
static void
_item_cb_free(Ngi_Item *item)
{
Ngi_Item_Launcher *it = (Ngi_Item_Launcher *) item;
if (it->app)
efreet_desktop_unref(it->app);
if (it->o_icon)
evas_object_del(it->o_icon);
if (it->o_proxy)
evas_object_del(it->o_proxy);
E_FREE(it);
}
static void
_item_fill(Ngi_Item_Launcher *it)
{
Evas_Object *o;
Evas *e = it->base.box->ng->evas;
if (it->o_icon)
{
edje_object_part_unswallow(it->base.obj, it->o_icon);
evas_object_del(it->o_icon);
}
if (it->o_proxy)
{
edje_object_part_unswallow(it->base.obj, it->o_proxy);
evas_object_del(it->o_proxy);
}
o = e_util_desktop_icon_add(it->app, 128, e);
if (o)
{
edje_object_part_swallow(it->base.obj, "e.swallow.content", o);
evas_object_show(o);
it->o_icon = o;
o = evas_object_image_filled_add(e);
evas_object_image_fill_set(o, 0, 0, 1, 1);
evas_object_image_source_set(o, it->base.obj);
edje_object_part_swallow(it->base.over, "e.swallow.content", o);
evas_object_show(o);
it->o_proxy = o;
}
if (it->app->name && it->app->name[0])
ngi_item_label_set((Ngi_Item*)it, it->app->name);
else if (it->app->generic_name && it->app->generic_name[0])
ngi_item_label_set((Ngi_Item*)it, it->app->generic_name);
}
static void
_cb_drag_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Ngi_Box *box = data;
ngi_bar_lock(box->ng, 0);
ngi_thaw(box->ng);
}
static void
_cb_drag_finished(E_Drag *d, int dropped)
{
efreet_desktop_unref((Efreet_Desktop*)d->data);
}
static void
_item_cb_drag_start(Ngi_Item *item)
{
Ngi_Item_Launcher *it = (Ngi_Item_Launcher*) item;
E_Drag *d;
Evas_Object *o;
Evas_Coord x, y, w, h, px, py;
Ngi_Box *box = item->box;
const char *drag_types[] = { "enlightenment/desktop" };
if (item->box->cfg->launcher_lock_dnd)
return;
evas_object_geometry_get(it->o_icon, &x, &y, &w, &h);
if (!ngi_config->use_composite)
{
x -= box->ng->win->rect.x;
y -= box->ng->win->rect.y;
}
d = e_drag_new(box->ng->zone->container, x, y, drag_types, 1,
it->app, -1, NULL,
_cb_drag_finished);
efreet_desktop_ref(it->app);
o = e_util_desktop_icon_add(it->app, MIN(w, h), e_drag_evas_get(d));
e_drag_object_set(d, o);
e_drag_resize(d, w, h);
evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _cb_drag_del, box);
e_order_remove(item->box->apps, it->app);
evas_object_hide(it->base.obj);
ngi_item_remove(&(it->base));
ecore_x_pointer_xy_get(box->ng->win->input, &px, &py);
e_drag_start(d, px, py);
box->ng->item_drag = NULL;
ngi_bar_lock(box->ng, 1);
ngi_thaw(box->ng);
}
static void
_menu_cb_lock_dnd(void *data, E_Menu *m, E_Menu_Item *mi)
{
Ngi_Box *box = (Ngi_Box *)data;
if (box) box->cfg->launcher_lock_dnd = e_menu_item_toggle_get(mi);
}
static void
_menu_cb_edit_icon(void *data, E_Menu *m, E_Menu_Item *mi)
{
Ngi_Item_Launcher *it = data;
if (it) e_desktop_edit(e_container_current_get(e_manager_current_get()), it->app);
}
static void
_menu_cb_configure_bar(void *data, E_Menu *m, E_Menu_Item *mi)
{
Ng *ng = (Ng *)data;
if (ng) ngi_configure_module(ng->cfg);
}
static void
_menu_cb_configure_launcher(void *data, E_Menu *m, E_Menu_Item *mi)
{
Ngi_Box *box = (Ngi_Box *)data;
char path[4096];
if (!box)
return;
snprintf(path, sizeof(path), "%s/.e/e/applications/bar/%s/.order",
e_user_homedir_get(), box->cfg->launcher_app_dir);
e_configure_registry_call("internal/ibar_other",
e_container_current_get(e_manager_current_get()),
path);
}
static void
_menu_cb_menu_end(void *data, E_Menu *m)
{
Ng *ng = (Ng *)data;
e_object_del(E_OBJECT(m));
ngi_thaw(ng);
}
static void
_item_cb_mouse_down(Ngi_Item *item, Ecore_Event_Mouse_Button *ev)
{
Ngi_Item_Launcher *it = (Ngi_Item_Launcher *) item;
Evas_Coord x, y, w, h;
E_Menu *m;
E_Menu_Item *mi;
Ngi_Box *box = item->box;
if (!(ev->buttons == 3))
{
item->mouse_down = 1;
return;
}
if (!it->app)
return;
evas_object_geometry_get(item->obj, &x, &y, &w, &h);
x += box->ng->win->popup->x + box->ng->zone->x;
y += box->ng->win->popup->y + box->ng->zone->y;
int dir = E_MENU_POP_DIRECTION_AUTO;
switch(box->ng->cfg->orient)
{
case E_GADCON_ORIENT_TOP:
dir = E_MENU_POP_DIRECTION_DOWN;
y += h;
break;
case E_GADCON_ORIENT_BOTTOM:
dir = E_MENU_POP_DIRECTION_UP;
break;
case E_GADCON_ORIENT_LEFT:
dir = E_MENU_POP_DIRECTION_RIGHT;
x += w;
break;
case E_GADCON_ORIENT_RIGHT:
dir = E_MENU_POP_DIRECTION_LEFT;
break;
}
m = e_menu_new();
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, D_("Configure Bar"));
e_menu_item_callback_set(mi, _menu_cb_configure_bar, box->ng);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, D_("Lock Dragging"));
e_menu_item_check_set(mi, 1);
e_menu_item_toggle_set(mi, box->cfg->launcher_lock_dnd);
e_menu_item_callback_set(mi, _menu_cb_lock_dnd, box);
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, D_("Applications"));
e_menu_item_callback_set(mi, _menu_cb_configure_launcher, box);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, D_("Edit Icon"));
e_menu_item_callback_set(mi, _menu_cb_edit_icon, it);
e_menu_post_deactivate_callback_set(m, _menu_cb_menu_end, box->ng);
e_menu_activate_mouse(m, box->ng->zone, x, y, 1, 1,
dir, ev->timestamp);
}
static void
_item_cb_mouse_up(Ngi_Item *item, Ecore_Event_Mouse_Button *ev)
{
Ngi_Item_Launcher *it = (Ngi_Item_Launcher *) item;
if (!item->mouse_down)
return;
item->mouse_down = 0;
if (ev->buttons == 1)
{
e_exec(e_util_zone_current_get(e_manager_current_get()), it->app, NULL, NULL, NULL);
ngi_item_signal_emit((Ngi_Item*)it, "e,action,start");
}
}

934
src/ng_taskbar.c Normal file
View File

@ -0,0 +1,934 @@
#include "e_mod_main.h"
#include <X11/Xlib.h>
static int _border_check (Ngi_Box *box, E_Border *bd);
static Ngi_Item_Taskbar *_border_find (Ngi_Box *box, E_Border *bd);
static Eina_Bool _cb_border_event (void *data, int type, void *event);
static Eina_Bool _cb_desk_show (void *data, int type, void *event);
static void _item_new (Ngi_Box *box, E_Border *bd);
static void _item_cb_free (Ngi_Item *it);
static void _item_set_icon (Ngi_Item_Taskbar *it);
static void _item_set_label (Ngi_Item_Taskbar *it);
static void _item_cb_mouse_down (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
static void _item_cb_mouse_up (Ngi_Item *it, Ecore_Event_Mouse_Button *ev);
static void _item_cb_mouse_in (Ngi_Item *it);
static void _item_cb_mouse_out (Ngi_Item *it);
static void _item_cb_drag_start (Ngi_Item *it);
static void _item_cb_drag_end (E_Drag *drag, int dropped);
static Eina_Bool _cb_show_window (void *data);
static void _cb_drop_enter (void *data, const char *type, void *event_info);
static void _cb_drop_move (void *data, const char *type, void *event_info);
static void _cb_drop_end (void *data, const char *type, void *event_info);
static void _cb_drop_leave (void *data, const char *type, void *event_info);
static Ecore_X_Atom ECOMORPH_ATOM_THUMBNAIL = 0;
void
ngi_taskbar_init(void)
{
ECOMORPH_ATOM_THUMBNAIL = ecore_x_atom_get("__ECOMORPH_THUMBNAIL");
}
void
ngi_taskbar_new(Ng *ng, Config_Box *cfg)
{
Ngi_Box *box = ngi_box_new(ng);
E_Border *bd;
E_Border_List *bl;
Ecore_Event_Handler *h;
if (!box) return;
box->cfg = cfg;
cfg->box = box;
// "enlightenment/border", "enlightenment/desktop",
const char *drop[] = {"text/uri-list","text/x-moz-url", "enlightenment/x-file"};
box->drop_handler = e_drop_handler_add(ng->win->drop_win, box,
_cb_drop_enter, _cb_drop_move,
_cb_drop_leave, _cb_drop_end,
drop, 3, 0, 0, 0, 0);
#define HANDLE(_event, _cb) \
box->handlers = eina_list_append(box->handlers, ecore_event_handler_add(_event, _cb, box));
HANDLE(E_EVENT_BORDER_ADD, _cb_border_event);
HANDLE(E_EVENT_BORDER_REMOVE, _cb_border_event);
HANDLE(E_EVENT_BORDER_ICONIFY, _cb_border_event);
HANDLE(E_EVENT_BORDER_UNICONIFY, _cb_border_event);
HANDLE(E_EVENT_BORDER_ICON_CHANGE, _cb_border_event);
HANDLE(E_EVENT_BORDER_PROPERTY, _cb_border_event);
HANDLE(E_EVENT_BORDER_ZONE_SET, _cb_border_event);
HANDLE(E_EVENT_BORDER_URGENT_CHANGE, _cb_border_event);
HANDLE(E_EVENT_BORDER_FOCUS_IN, _cb_border_event);
HANDLE(E_EVENT_BORDER_FOCUS_OUT, _cb_border_event);
HANDLE(E_EVENT_DESK_SHOW, _cb_desk_show);
#undef HANDLE
bl = e_container_border_list_first(box->ng->zone->container);
while ((bd = e_container_border_list_next(bl)))
{
if (box->ng->zone == bd->zone)
_item_new(box, bd);
}
e_container_border_list_free(bl);
}
void
ngi_taskbar_remove(Ngi_Box *box)
{
Ecore_Event_Handler *h;
e_drop_handler_del(box->drop_handler);
EINA_LIST_FREE(box->handlers, h)
ecore_event_handler_del(h);
ngi_box_free(box);
}
static int
_border_check(Ngi_Box *box, E_Border *bd)
{
if (box->ng->zone != bd->zone)
return 0;
if (box->cfg->taskbar_show_iconified == 0 && bd->iconic)
return 0;
if (box->cfg->taskbar_show_iconified == 2 && !bd->iconic)
return 0;
if ((box->cfg->taskbar_skip_dialogs && bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DIALOG)
|| (bd->user_skip_winlist)
|| (bd->client.netwm.state.skip_taskbar))
return 0;
/* XXX Xitk menu windows act like normal windows... */
if (bd->client.icccm.transient_for &&
bd->client.icccm.class &&
!strcmp(bd->client.icccm.class, "Xitk"))
return 0;
return 1;
}
static Ngi_Item_Taskbar *
_border_find(Ngi_Box *box, E_Border *bd)
{
Eina_List *l;
Ngi_Item_Taskbar *it;
EINA_LIST_FOREACH(box->items, l, it)
if (it->border == bd) return it;
return NULL;
}
/* ************************* DND CALLBACKS ************************** */
static void
_cb_drop_enter(void *data, const char *type, void *event_info)
{
E_Event_Dnd_Enter *ev = (E_Event_Dnd_Enter *)event_info;
Ngi_Box *box = (Ngi_Box *)data;
Ng *ng = box->ng;
ng->pos = (ng->horizontal ? ev->x : ev->y);
ng->item_active = ngi_item_at_position_get(ng);
if (!ng->item_active)
return; /* FIXME set edge_in before ?*/
if (box->dnd_timer)
ecore_timer_del(box->dnd_timer);
box->dnd_timer = ecore_timer_add(0.5, _cb_show_window, ng->item_active);
ng->dnd = 1;
ngi_mouse_in(ng);
}
static void
_cb_drop_leave(void *data, const char *type, void *event_info)
{
Ngi_Box *box = (Ngi_Box *)data;
Ng *ng = box->ng;
if (box->dnd_timer)
{
ecore_timer_del(box->dnd_timer);
box->dnd_timer = NULL;
}
ng->item_active = NULL;
ngi_mouse_out(ng);
}
static void
_cb_drop_move(void *data, const char *type, void *event_info)
{
E_Event_Dnd_Move *ev = (E_Event_Dnd_Move *)event_info;
Ngi_Box *box = (Ngi_Box *)data;
Ng *ng = box->ng;
Ngi_Item *it;
ng->pos = (ng->horizontal ? ev->x : ev->y);
it = ngi_item_at_position_get(ng);
if (!it || !ng->item_active)
return;
if (ng->item_active != it)
{
if (box->dnd_timer)
ecore_timer_del(box->dnd_timer);
box->dnd_timer = NULL;
if (it)
{
ngi_item_activate(ng);
box->dnd_timer = ecore_timer_add(0.5, _cb_show_window, it);
}
}
ngi_animate(ng);
}
static void
_cb_drop_end(void *data, const char *type, void *event_info)
{
Ngi_Box *box = (Ngi_Box *)data;
Ng *ng = box->ng;
if (!ng->item_active)
return;
if (box->dnd_timer)
{
ecore_timer_del(box->dnd_timer);
box->dnd_timer = NULL;
}
ng->item_active = NULL;
ngi_mouse_out(ng);
}
static Eina_Bool
_cb_show_window(void *data)
{
Ngi_Item_Taskbar *it = (Ngi_Item_Taskbar*) data;
E_Desk *desk;
if (!it) return EINA_FALSE;
desk = e_desk_current_get(it->border->zone);
if (desk != it->border->desk && !it->border->sticky)
{
e_desk_show(it->border->desk);
}
if (it->border->shaded)
{
e_border_unshade(it->border, E_DIRECTION_UP);
}
if (!it->border->visible)
{
e_border_show(it->border);
}
if (it->border->iconic)
{
e_border_uniconify(it->border);
}
else
{
e_border_raise(it->border);
}
e_border_focus_set(it->border, 1, 1);
it->base.box->dnd_timer = NULL;
return EINA_FALSE;
}
/* ************************** BORDER CALLBACKS ************************* */
static Eina_Bool
_cb_border_event(void *data, int type, void *event)
{
E_Event_Border_Add *ev = event;
Ngi_Box *box = data;
Ngi_Item *it;
E_Border *bd = ev->border;
/* XXX workaround for e sending event after the
* border_remove event */
/* if (bd->already_unparented)
* return ECORE_CALLBACK_PASS_ON; */
it = (Ngi_Item*)_border_find(box, bd);
if (type == E_EVENT_BORDER_FOCUS_IN)
{
if (it) ngi_item_signal_emit(it, "e,state,taskbar,focus,on");
}
else if (type == E_EVENT_BORDER_FOCUS_OUT)
{
if (it) ngi_item_signal_emit(it, "e,state,taskbar,focus,off");
}
else if (type == E_EVENT_BORDER_ICONIFY)
{
if (it) ngi_item_signal_emit(it, "e,state,taskbar,iconic,on");
}
else if (type == E_EVENT_BORDER_UNICONIFY)
{
if (it) ngi_item_signal_emit(it, "e,state,taskbar,iconic,off");
}
else if (type == E_EVENT_BORDER_ICON_CHANGE)
{
if (it) _item_set_icon((Ngi_Item_Taskbar *)it);
}
else if (type == E_EVENT_BORDER_ADD)
{
_item_new(box, bd);
}
else if (type == E_EVENT_BORDER_REMOVE)
{
if (it) ngi_item_remove(it);
}
else if (type == E_EVENT_BORDER_ZONE_SET)
{
if (box->ng->zone == bd->zone)
_item_new(box, bd);
else if (it)
ngi_item_remove(it);
}
else if ((type == E_EVENT_BORDER_URGENT_CHANGE) && (it))
{
if (bd->client.icccm.urgent)
{
((Ngi_Item_Taskbar *)it)->urgent = 1;
ngi_item_signal_emit(it, "e,state,taskbar,urgent,on");
if (box->ng->cfg->autohide_show_urgent)
{
ngi_bar_lock(box->ng, 1);
ngi_animate(box->ng);
}
}
else
{
((Ngi_Item_Taskbar *)it)->urgent = 0;
ngi_item_signal_emit(it, "e,state,taskbar,urgent,off");
if (box->ng->cfg->autohide_show_urgent)
{
ngi_bar_lock(box->ng, 0);
ngi_animate(box->ng);
}
}
}
else if (type == E_EVENT_BORDER_PROPERTY)
{
if (it)
{
if (!_border_check(box, bd))
ngi_item_remove(it);
else
_item_set_label((Ngi_Item_Taskbar *)it);
}
else
{
_item_new(box, ev->border);
}
}
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_cb_desk_show(void *data, int type, void *event)
{
E_Event_Desk_Show *ev = event;
Ngi_Box *box = data;
Ngi_Item_Taskbar *it;
Eina_List *l;
if (ev->desk->zone != box->ng->zone)
return ECORE_CALLBACK_PASS_ON;
if (!box->cfg->taskbar_show_desktop)
return ECORE_CALLBACK_PASS_ON;
EINA_LIST_FOREACH(box->items, l, it)
{
if ((it->border->desk == ev->desk) || (it->border->sticky))
{
evas_object_show(it->base.obj);
evas_object_show(it->base.over);
it->base.scale = 1.0;
}
else
{
evas_object_hide(it->base.obj);
evas_object_hide(it->base.over);
it->base.scale = 0.0;
}
}
ngi_thaw(box->ng);
return ECORE_CALLBACK_PASS_ON;
}
/* *************************** TASKBAR ITEM *************************** */
static void
_item_new(Ngi_Box *box, E_Border *bd)
{
Ngi_Item_Taskbar *it, *l_it = NULL, *ll_it = NULL;
Ngi_Item *item;
Eina_List *l;
if (!_border_check(box, bd))
return;
if (_border_find(box, bd))
return;
it = E_NEW(Ngi_Item_Taskbar, 1);
it->base.box = box;
item = (Ngi_Item*) it;
ngi_item_init_defaults(item);
e_object_ref(E_OBJECT(bd));
it->border = bd;
it->base.cb_free = _item_cb_free;
it->base.cb_mouse_in = _item_cb_mouse_in;
it->base.cb_mouse_out = _item_cb_mouse_out;
it->base.cb_mouse_down = _item_cb_mouse_down;
it->base.cb_mouse_up = _item_cb_mouse_up;
it->base.cb_drag_start = _item_cb_drag_start;
_item_set_icon(it);
_item_set_label(it);
if ((box->cfg->taskbar_group_apps) &&
(bd->client.icccm.class && bd->client.icccm.class[0]))
{
it->class = eina_stringshare_ref(bd->client.icccm.class);
EINA_LIST_FOREACH(box->items, l, l_it)
{
if (!l_it->class)
{
continue;
}
else if (l_it->class == it->class)
{
ll_it = l_it;
}
else if ((ll_it) && (l_it->class != it->class))
{
break;
}
}
}
if (ll_it)
box->items = eina_list_append_relative(box->items, it, ll_it);
else if (box->cfg->taskbar_append_right)
box->items = eina_list_append(box->items, it);
else
box->items = eina_list_prepend(box->items, it);
if ((box->cfg->taskbar_show_desktop) &&
(bd->desk != e_desk_current_get(box->ng->zone)) &&
(!bd->sticky))
{
ngi_item_show(item, 1);
item->scale = 0.0;
}
else
{
ngi_item_show(item, 0);
}
if (bd->iconic)
ngi_item_signal_emit(item, "e,state,taskbar,iconic,on");
it->urgent = bd->client.icccm.urgent;
if (it->urgent)
ngi_item_signal_emit(item, "e,state,taskbar,urgent,on");
}
static void
_item_cb_free(Ngi_Item *item)
{
Ngi_Item_Taskbar *it = (Ngi_Item_Taskbar *) item;
if (it->urgent)
ngi_bar_lock(item->box->ng, 0);
if (it->border)
e_object_unref(E_OBJECT(it->border));
if (it->o_icon)
evas_object_del(it->o_icon);
if (it->o_proxy)
edje_object_part_unswallow(it->base.obj, it->o_proxy);
E_FREE(it);
}
Evas_Object *
_border_icon_add(E_Border *bd, Evas *evas)
{
Evas_Object *o;
E_OBJECT_CHECK_RETURN(bd, NULL);
E_OBJECT_TYPE_CHECK_RETURN(bd, E_BORDER_TYPE, NULL);
o = NULL;
if (bd->internal)
{
if (!bd->internal_icon)
{
o = e_icon_add(evas);
e_util_icon_theme_set(o, "enlightenment");
}
else if (!bd->internal_icon_key)
{
char *ext;
ext = strrchr(bd->internal_icon, '.');
if ((ext) && ((!strcmp(ext, ".edj"))))
{
o = edje_object_add(evas);
if (!edje_object_file_set(o, bd->internal_icon, "icon"))
e_util_icon_theme_set(o, "enlightenment");
}
else if (ext)
{
o = e_icon_add(evas);
e_icon_file_set(o, bd->internal_icon);
}
else
{
o = e_icon_add(evas);
e_icon_scale_size_set(o, 128);
if (!e_util_icon_theme_set(o, bd->internal_icon))
e_util_icon_theme_set(o, "enlightenment");
}
}
else
{
o = edje_object_add(evas);
edje_object_file_set(o, bd->internal_icon, bd->internal_icon_key);
}
return o;
}
if (bd->client.netwm.icons)
{
if (e_config->use_app_icon)
goto _use_netwm_icon;
if (bd->remember && (bd->remember->prop.icon_preference == E_ICON_PREF_NETWM))
goto _use_netwm_icon;
}
if (bd->desktop)
{
o = e_util_desktop_icon_add(bd->desktop, 128, evas);
if (o) return o;
}
_use_netwm_icon:
if (bd->client.netwm.icons)
{
int i, size, tmp, found = 0;
o = e_icon_add(evas);
size = bd->client.netwm.icons[0].width;
for (i = 1; i < bd->client.netwm.num_icons; i++)
{
if ((tmp = bd->client.netwm.icons[i].width) > size)
{
size = tmp;
found = i;
}
}
e_icon_data_set(o, bd->client.netwm.icons[found].data,
bd->client.netwm.icons[found].width,
bd->client.netwm.icons[found].height);
e_icon_alpha_set(o, 1);
return o;
}
o = e_border_icon_add(bd, evas);
if (o) return o;
o = edje_object_add(evas);
e_util_icon_theme_set(o, "unknown");
return o;
}
static void
_item_set_icon(Ngi_Item_Taskbar *it)
{
Evas_Object *o, *oo;
Evas *e = it->base.box->ng->evas;
if (it->o_icon)
{
edje_object_part_unswallow(it->base.obj, it->o_icon);
evas_object_del(it->o_icon);
}
if (it->o_proxy)
{
edje_object_part_unswallow(it->base.obj, it->o_proxy);
evas_object_del(it->o_proxy);
}
o = _border_icon_add(it->border, e);
edje_object_part_swallow(it->base.obj, "e.swallow.content", o);
evas_object_show(o);
it->o_icon = o;
oo = evas_object_image_filled_add(e);
evas_object_image_fill_set(oo, 0, 0, 1, 1);
evas_object_image_source_set(oo, it->base.obj);
edje_object_part_swallow(it->base.over, "e.swallow.content", oo);
evas_object_show(oo);
it->o_proxy = oo;
if (it->border->iconic)
ngi_item_signal_emit((Ngi_Item*)it, "e,state,taskbar,iconic,on");
if (it->urgent)
ngi_item_signal_emit((Ngi_Item*)it, "e,state,taskbar,urgent,on");
}
static void
_item_set_label(Ngi_Item_Taskbar *it)
{
const char *title;
unsigned int max_len = 36;
title = e_border_name_get(it->border);
if ((!title) || (!title[0]))
title = D_("No name!");
if (strlen(title) > max_len)
{
char *abbv;
const char *left, *right;
abbv = E_NEW(char, E_CLIENTLIST_MAX_CAPTION_LEN + 4);
left = title;
right = title + (strlen(title) - (max_len / 2));
strncpy(abbv, left, max_len / 2);
strncat(abbv, "...", 3);
strncat(abbv, right, max_len / 2);
ngi_item_label_set((Ngi_Item*)it, abbv);
E_FREE(abbv);
return;
}
ngi_item_label_set((Ngi_Item*)it, title);
}
/* ************************** ITEM CALLBACKS ************************** */
static void
_item_cb_mouse_down(Ngi_Item *item, Ecore_Event_Mouse_Button *ev)
{
Ngi_Item_Taskbar *it = (Ngi_Item_Taskbar *) item;
Evas_Coord x, y, w, h;
E_Border *bd;
Ng *ng;
ng = item->box->ng;
bd = it->border;
if (ev->buttons == 3 && bd)
{
int dir = E_MENU_POP_DIRECTION_AUTO;
evas_object_geometry_get(item->obj, &x, &y, &w, &h);
x += ng->win->popup->x + ng->zone->x;
y += ng->win->popup->y + ng->zone->y;
switch(ng->cfg->orient)
{
case E_GADCON_ORIENT_TOP:
dir = E_MENU_POP_DIRECTION_DOWN;
y += h;
break;
case E_GADCON_ORIENT_BOTTOM:
dir = E_MENU_POP_DIRECTION_UP;
break;
case E_GADCON_ORIENT_LEFT:
dir = E_MENU_POP_DIRECTION_RIGHT;
x += w;
break;
case E_GADCON_ORIENT_RIGHT:
dir = E_MENU_POP_DIRECTION_LEFT;
break;
} /* switch */
ngi_border_menu_show(item->box, it->border, x, y, dir, ev->timestamp);
}
else if (ev->buttons == 1 && ev->double_click && !it->border->iconic)
{
e_border_iconify(it->border);
}
else
item->mouse_down = 1;
}
static void
_item_cb_mouse_up(Ngi_Item *item, Ecore_Event_Mouse_Button *ev)
{
Ngi_Item_Taskbar *it = (Ngi_Item_Taskbar *) item;
E_Border *bd = it->border;
if (!item->mouse_down)
return;
item->mouse_down = 0;
if (it->urgent)
{
it->urgent = 0;
ngi_item_signal_emit((Ngi_Item*)it, "e,state,taskbar,urgent,off");
ngi_bar_lock(item->box->ng, 0);
}
if (ev->buttons != 1)
return;
if (bd->shaded)
e_border_unshade(bd, E_DIRECTION_UP);
if (bd->shaded)
e_border_unshade(bd, E_DIRECTION_UP);
if ((e_desk_current_get(bd->zone) != bd->desk) && (!bd->sticky))
e_desk_show(bd->desk);
if (bd->iconic)
{
e_border_uniconify(bd);
if (it->border_was_fullscreen)
e_border_fullscreen(bd, (E_Fullscreen)e_config->fullscreen_policy);
it->border_was_fullscreen = 0;
}
else
{
e_border_raise(bd);
}
if (bd->focused)
{
char buf[1024];
E_Action *act = e_action_find("scale-windows");
if (!act) return;
if (!bd->client.icccm.class) return;
snprintf(buf, 1024, "go_scale_class:%s", bd->client.icccm.class);
act->func.go(NULL, buf);
}
else
e_border_focus_set(bd, 1, 1);
}
static void
_item_cb_drag_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Ng *ng = data;
ngi_bar_lock(ng, 0);
ngi_thaw(ng);
}
static void
_item_cb_drag_start(Ngi_Item *item)
{
Ngi_Item_Taskbar *it = (Ngi_Item_Taskbar *) item;
E_Drag *d;
Evas_Object *o;
Evas_Coord x, y, w, h, px, py;
Ng *ng = item->box->ng;
if (!it->border)
return;
edje_object_signal_emit(ng->o_label, "e,state,label,hide", "e");
evas_object_geometry_get(it->o_icon, &x, &y, &w, &h);
if (!ngi_config->use_composite)
{
x -= ng->win->rect.x;
y -= ng->win->rect.y;
}
const char *drag_types[] = { "enlightenment/border" };
d = e_drag_new(ng->zone->container, x, y, drag_types, 1,
it->border, -1, NULL, _item_cb_drag_end);
o = _border_icon_add(it->border,e_drag_evas_get(d));
e_object_ref(E_OBJECT(it->border));
e_drag_object_set(d, o);
e_drag_resize(d, w, h);
evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _item_cb_drag_del, ng);
ecore_x_pointer_xy_get(ng->win->input, &px, &py);
e_drag_start(d, px, py);
ngi_bar_lock(ng, 1);
}
static void
_item_cb_drag_end(E_Drag *drag, int dropped)
{
E_Border *bd = (E_Border *)drag->data;
if (dropped)
{
e_object_unref(E_OBJECT(bd));
return;
}
E_Desk *desk = e_desk_current_get(bd->zone);
int w = bd->zone->w;
int h = bd->zone->h;
if (desk != bd->desk)
e_border_desk_set(bd, desk);
if ((bd->w < w) && (bd->h < w))
{
int dx = abs(drag->x - w/2);
int dy = abs(drag->y - h/2);
if (sqrt(dx*dx + dy*dy) < w/8)
{
drag->x = w/2;
drag->y = h/2;
}
int x = drag->x - bd->w/2;
if (bd->w < w - 50)
{
if (x < 50) x = 50;
if (x + bd->w > w) x = w - bd->w - 50;
}
else x = bd->x;
int y = drag->y - bd->h/2;
if (bd->h < h - 50)
{
if (y < 50) y = 50;
if (y + bd->h > h) y = h - bd->h - 50;
}
else y = bd->y;
e_border_move(bd, x, y);
}
if (bd->iconic)
e_border_uniconify(bd);
else
e_border_raise(bd);
if (bd->shaded)
e_border_unshade(bd, E_DIRECTION_UP);
e_object_unref(E_OBJECT(bd));
}
static Eina_Bool
_cb_preview_hide(void *data)
{
Ng *ng = data;
ng->effect_timer = NULL;
ecore_x_client_message32_send(e_manager_current_get()->root,
ECORE_X_ATOM_NET_WM_ICON_GEOMETRY,
SubstructureNotifyMask,
0, 0, 0, 0, 0);
return EINA_FALSE;
}
static void
_item_cb_mouse_in(Ngi_Item *item)
{
Ngi_Item_Taskbar *it = (Ngi_Item_Taskbar *) item;
Ng *ng = item->box->ng;
if (ng->cfg->ecomorph_features)
{
if (ng->effect_timer)
ecore_timer_del(ng->effect_timer);
ng->effect_timer = NULL;
ecore_x_client_message32_send(e_manager_current_get()->root,
ECORE_X_ATOM_NET_WM_ICON_GEOMETRY,
SubstructureNotifyMask,
it->border->win, item->pos,
(double)ng->size * item->scale,
ng->cfg->orient,0);
}
}
static void
_item_cb_mouse_out(Ngi_Item *it)
{
Ng *ng = it->box->ng;
if (ng->cfg->ecomorph_features)
{
if (ng->effect_timer)
ecore_timer_del(ng->effect_timer);
ng->effect_timer = ecore_timer_add(0.2, _cb_preview_hide, ng);
}
}