e-modules/engage: svn cp itask-ng engage

SVN revision: 58323
This commit is contained in:
Hannes Janetzek 2011-04-04 11:55:50 +00:00
parent 0b596e6d17
commit de1dbc9eae
55 changed files with 11463 additions and 0 deletions

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>

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

27
Makefile.am Normal file
View File

@ -0,0 +1,27 @@
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 po
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
%.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.

54
README Normal file
View File

@ -0,0 +1,54 @@
Itask NG Module
This is the NG module for Enlightenment.
It 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
when having troubles: check the wiki on:
http://code.google.com/p/itask-module/wiki/ItaskNG
This module is based on ibox and on engages algorithms. though thats
where it started. you'll not find much common code anymore
_______ATTENTION______________________________________________
you SHOULD have composite manager running like for example
bling (from e_modules) xcompmgr or kompmgr(kdebase).
run enlightenment_remote -use-composite-set 1
and then restart e to enable the use of composite
you dont need it, just looks way cooler B-) otherwise you should
at least some kind of grey bg so that your friends dont see the
uggly pixel shaped borders
______________________________________________________________
Use middle click on the module to get to the configuration dialog.
!!!!!!!!!!! CONFIGURATION: ADD A BAR:!!!!!!!!!!!!!!!!!!
- enable the module in e's module configuration dialog
- Goto E-menu->Configuration->Extensions->Itask NG->Add

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

548
config.rpath Executable file
View File

@ -0,0 +1,548 @@
#! /bin/sh
# Output a system dependent set of variables, describing how to set the
# run time search path of shared libraries in an executable.
#
# Copyright 1996-2003 Free Software Foundation, Inc.
# Taken from GNU libtool, 2001
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
#
# The first argument passed to this file is the canonical host specification,
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
# should be set by the caller.
#
# The set of defined variables is at the end of this script.
# Known limitations:
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
# than 256 bytes, otherwise the compiler driver will dump core. The only
# known workaround is to choose shorter directory names for the build
# directory and/or the installation directory.
# All known linkers require a `.a' archive for static linking (except M$VC,
# which needs '.lib').
libext=a
shrext=.so
host="$1"
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
wl=
if test "$GCC" = yes; then
wl='-Wl,'
else
case "$host_os" in
aix*)
wl='-Wl,'
;;
mingw* | pw32* | os2*)
;;
hpux9* | hpux10* | hpux11*)
wl='-Wl,'
;;
irix5* | irix6* | nonstopux*)
wl='-Wl,'
;;
newsos6)
;;
linux*)
case $CC in
icc|ecc)
wl='-Wl,'
;;
ccc)
wl='-Wl,'
;;
esac
;;
osf3* | osf4* | osf5*)
wl='-Wl,'
;;
sco3.2v5*)
;;
solaris*)
wl='-Wl,'
;;
sunos4*)
wl='-Qoption ld '
;;
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
wl='-Wl,'
;;
sysv4*MP*)
;;
uts4*)
;;
esac
fi
# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
hardcode_direct=no
hardcode_minus_L=no
case "$host_os" in
cygwin* | mingw* | pw32*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
if test "$GCC" != yes; then
with_gnu_ld=no
fi
;;
openbsd*)
with_gnu_ld=no
;;
esac
ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
case "$host_os" in
aix3* | aix4* | aix5*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs=no
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
# that the semantics of dynamic libraries on AmigaOS, at least up
# to version 4, is to share data among multiple programs linked
# with the same dynamic library. Since this doesn't match the
# behavior of shared libraries on other platforms, we can use
# them.
ld_shlibs=no
;;
beos*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
cygwin* | mingw* | pw32*)
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec='-L$libdir'
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
netbsd*)
;;
solaris* | sysv5*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
sunos4*)
hardcode_direct=yes
;;
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
esac
if test "$ld_shlibs" = yes; then
# Unlike libtool, we use -rpath here, not --rpath, since the documented
# option of GNU ld is called -rpath, not --rpath.
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
fi
else
case "$host_os" in
aix3*)
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L=yes
if test "$GCC" = yes; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct=unsupported
fi
;;
aix4* | aix5*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
else
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
case $host_os in aix4.[23]|aix4.[23].*|aix5*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
esac
fi
hardcode_direct=yes
hardcode_libdir_separator=':'
if test "$GCC" = yes; then
case $host_os in aix4.[012]|aix4.[012].*)
collect2name=`${CC} -print-prog-name=collect2`
if test -f "$collect2name" && \
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
hardcode_direct=yes
else
# We have old collect2
hardcode_direct=unsupported
hardcode_minus_L=yes
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
esac
fi
# Begin _LT_AC_SYS_LIBPATH_AIX.
echo 'int main () { return 0; }' > conftest.c
${CC} ${LDFLAGS} conftest.c -o conftest
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
if test -z "$aix_libpath"; then
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
fi
if test -z "$aix_libpath"; then
aix_libpath="/usr/lib:/lib"
fi
rm -f conftest.c conftest
# End _LT_AC_SYS_LIBPATH_AIX.
if test "$aix_use_runtimelinking" = yes; then
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
else
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
fi
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# see comment about different semantics on the GNU ld section
ld_shlibs=no
;;
bsdi4*)
;;
cygwin* | mingw* | pw32*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec=' '
libext=lib
;;
darwin* | rhapsody*)
if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
hardcode_direct=no
fi
;;
dgux*)
hardcode_libdir_flag_spec='-L$libdir'
;;
freebsd1*)
ld_shlibs=no
;;
freebsd2.2*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
freebsd2*)
hardcode_direct=yes
hardcode_minus_L=yes
;;
freebsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
hpux9*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
hpux10* | hpux11*)
if test "$with_gnu_ld" = no; then
case "$host_cpu" in
hppa*64*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=no
;;
ia64*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=no
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
esac
fi
;;
irix5* | irix6* | nonstopux*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
netbsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
newsos6)
hardcode_direct=yes
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
openbsd*)
hardcode_direct=yes
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
else
case "$host_os" in
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
hardcode_libdir_flag_spec='-R$libdir'
;;
*)
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
esac
fi
;;
os2*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
;;
osf3*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
osf4* | osf5*)
if test "$GCC" = yes; then
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
else
# Both cc and cxx compiler support -rpath directly
hardcode_libdir_flag_spec='-rpath $libdir'
fi
hardcode_libdir_separator=:
;;
sco3.2v5*)
;;
solaris*)
hardcode_libdir_flag_spec='-R$libdir'
;;
sunos4*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
;;
sysv4)
case $host_vendor in
sni)
hardcode_direct=yes # is this really true???
;;
siemens)
hardcode_direct=no
;;
motorola)
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
;;
esac
;;
sysv4.3*)
;;
sysv4*MP*)
if test -d /usr/nec; then
ld_shlibs=yes
fi
;;
sysv4.2uw2*)
hardcode_direct=yes
hardcode_minus_L=no
;;
sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
;;
sysv5*)
hardcode_libdir_flag_spec=
;;
uts4*)
hardcode_libdir_flag_spec='-L$libdir'
;;
*)
ld_shlibs=no
;;
esac
fi
# Check dynamic linker characteristics
# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
libname_spec='lib$name'
case "$host_os" in
aix3*)
;;
aix4* | aix5*)
;;
amigaos*)
;;
beos*)
;;
bsdi4*)
;;
cygwin* | mingw* | pw32*)
shrext=.dll
;;
darwin* | rhapsody*)
shrext=.dylib
;;
dgux*)
;;
freebsd1*)
;;
freebsd*)
;;
gnu*)
;;
hpux9* | hpux10* | hpux11*)
case "$host_cpu" in
ia64*)
shrext=.so
;;
hppa*64*)
shrext=.sl
;;
*)
shrext=.sl
;;
esac
;;
irix5* | irix6* | nonstopux*)
case "$host_os" in
irix5* | nonstopux*)
libsuff= shlibsuff=
;;
*)
case $LD in
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
*) libsuff= shlibsuff= ;;
esac
;;
esac
;;
linux*oldld* | linux*aout* | linux*coff*)
;;
linux*)
;;
netbsd*)
;;
newsos6)
;;
nto-qnx)
;;
openbsd*)
;;
os2*)
libname_spec='$name'
shrext=.dll
;;
osf3* | osf4* | osf5*)
;;
sco3.2v5*)
;;
solaris*)
;;
sunos4*)
;;
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
;;
sysv4*MP*)
;;
uts4*)
;;
esac
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
# How to pass a linker flag through the compiler.
wl="$escaped_wl"
# Static library suffix (normally "a").
libext="$libext"
# Shared library suffix (normally "so").
shlibext="$shlibext"
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator="$hardcode_libdir_separator"
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
# resulting binary.
hardcode_direct="$hardcode_direct"
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L="$hardcode_minus_L"
EOF

64
configure.ac Normal file
View File

@ -0,0 +1,64 @@
dnl Process this file with autoconf to produce a configure script.
# get rid of that stupid cache mechanism
rm -f config.cache
AC_INIT(itask-ng, 0.3.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
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION(0.14)
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
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 = \
itask-ng.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: 3.1 KiB

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

BIN
data/themes/ibar_im0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

895
data/themes/itask-ng.edc Normal file
View File

@ -0,0 +1,895 @@
#define BG_OFFSET 20
#define HOVER_EFFECT 0
#define RELECTION 0
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;
}
collections{
group {
/* bg frame that keeps is not affected by 'Background
* Transparency' setting */
name: "e/modules/itask-ng/frame_bottom";
alias: "e/modules/itask-ng/frame_top";
alias: "e/modules/itask-ng/frame_left";
alias: "e/modules/itask-ng/frame_right";
data {
/* space between icons */
item: "icon_spacing" "1";
/* space between boxes */
item: "separator_width" "6";
/* space between screen edge and icons */
item: "edge_offset" "6";
/* 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;
}
}
}
}
#if REFLECTION
group {
name: "e/modules/itask-ng/frame_bottom";
data {
item: "icon_spacing" "2";
item: "separator_width" "15";
item: "edge_offset" "15";
item: "clip_separator" "1";
item: "bg_offset" "0";
/* clip reflection at bottom edge */
item: "reflection_offset" "1";
}
parts {
part {
name: "frame";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
visible: 0;
}
}
}
}
group {
name: "e/modules/itask-ng/bg_bottom";
parts {
part {
name: "bg";
mouse_events: 0;
description {
state: "default" 0.0;
rel1.relative: 0.0 1.0;
rel1.offset: -40 -40;
rel2.offset: 40 -1;
color: 255 255 255 255;
image {
normal: "itask_im6.png";
border: 36 36 7 2;
}
}
}
}
}
#else
group {
name: "e/modules/itask-ng/bg_bottom";
parts {
part {
name: "bg";
mouse_events: 0;
description {
state: "default" 0.0;
rel1.offset: (-BG_OFFSET) -10;
rel2.offset: (-1 + BG_OFFSET) -1;
image {
normal: "itask_im0.png";
border: 18 18 20 0;
}
}
}
}
}
#endif
group {
name: "e/modules/itask-ng/bg_top";
parts {
part {
name: "bg";
mouse_events: 0;
description {
state: "default" 0.0;
rel1.offset: (-BG_OFFSET) 0;
rel2.offset: (-1 + BG_OFFSET) (-1 + BG_OFFSET);
image {
normal: "itask_im1.png";
border: 18 18 0 28;
}
}
}
}
}
group {
name: "e/modules/itask-ng/bg_left";
parts {
part {
name: "bg";
mouse_events: 0;
description {
state: "default" 0.0;
rel1.offset: 0 (-BG_OFFSET);
rel2.offset: (-1 + BG_OFFSET) (-1 + BG_OFFSET);
image {
normal: "itask_im2.png";
border: 0 20 32 18;
}
}
}
}
}
group {
name: "e/modules/itask-ng/bg_right";
parts {
part {
name: "bg";
mouse_events: 0;
description {
state: "default" 0.0;
rel1.offset: (-BG_OFFSET) (-BG_OFFSET);
rel2.offset: -1 (-1 + BG_OFFSET);
image {
normal: "itask_im3.png";
border: 20 0 32 18;
}
}
}
}
}
/* the vertical and horizontal separator image. it can be a rectangle
* as it is in this example.
*/
#if REFLECTION
group {
name: "e/modules/itask-ng/separator_bottom";
}
#else
group {
name: "e/modules/itask-ng/separator_bottom";
parts {
part {
name: "separator";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 182 182 182 255;
max: 1 999;
align: 0.5 0.0;
rel1.offset: 0 -5;
rel2.offset: 0 2;
}
}
}
}
#endif
group {
name: "e/modules/itask-ng/separator_top";
parts {
part {
name: "separator";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 182 182 182 255;
max: 1 999;
align: 0.5 0.0;
rel1.offset: 0 0;
rel2.offset: 0 2;
}
}
}
}
group {
name: "e/modules/itask-ng/separator_left";
alias: "e/modules/itask-ng/separator_right";
parts {
part {
name: "separator";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 182 182 182 255;
max: 999 1;
align: 0.0 0.5;
rel1.offset: -4 0;
rel2.offset: 3 0;
}
}
}
}
group {
name: "e/modules/itask-ng/label_bottom";
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;
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: 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";
}
}
}
group {
name: "e/modules/itask-ng/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/itask-ng/label_left";
* alias: "e/modules/itask-ng/label_right";
* } */
group {
name: "e/modules/itask-ng/icon";
alias: "e/modules/itask-ng/icon_top";
alias: "e/modules/itask-ng/icon_left";
alias: "e/modules/itask-ng/icon_right";
alias: "e/modules/itask-ng/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/itask-ng/icon_over_top";
alias: "e/modules/itask-ng/icon_over_left";
alias: "e/modules/itask-ng/icon_over_right";
alias: "e/modules/itask-ng/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 {
#if HOVER_EFFECT == 1
program {
name: "go_active";
signal: "e,state,mouse,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,mouse,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";
}
#endif
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/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";
}
}
}
}
}

0
m4/.svnignore Normal file
View File

12
module.desktop.in Normal file
View File

@ -0,0 +1,12 @@
[Desktop Entry]
Type=Link
Name=Itask NG
Name[de]=Itask-NG
Icon=e-module-ng
Comment=A dock that holds a taskbar and application launcher<br>Add instances with: Config Panel > Extensions > Itask NG
Comment[ru]=Док содержащий панель задач и запуск приложений<br>Добавлять экземпляры через: Панель параметров → Расширения → Itask NG
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 → Itask NG
Comment[fr]=Un dock contenant une barre des tâches et un lanceur.<br>Pour ajouter des instances : Panneau de contrôle → Extensions → Itask NG
Comment[pt]=Uma barra de tarefas e lançador de aplicações<br>Adicione instâncias em: Painel de configuração > Extensões > Itask NG
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 @@
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

310
po/cs.po Normal file
View File

@ -0,0 +1,310 @@
# Czech translation.
# This file is put in the public domain.
# quaker66@gmail.com
msgid ""
msgstr ""
"Project-Id-Version: Itask-ng\n"
"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2011-01-04 18:31+0100\n"
"PO-Revision-Date: 2011-01-04 18:48+0100\n"
"Last-Translator: quaker66 <quaker66@gmail.com>\n"
"Language-Team: Czech <quaker66@gmail.com>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/e_mod_main.c:398
msgid "Itask-NG"
msgstr "Itask-NG"
#: ../src/e_mod_main.c:477
msgid "Itask NG"
msgstr "Itask NG"
#: ../src/ng_taskbar.c:731
msgid "No name!"
msgstr "Beze jména!"
#: ../src/ng_launcher.c:619
msgid "Configure Bar"
msgstr "Nastavit panel"
#: ../src/ng_launcher.c:623
msgid "Lock Dragging"
msgstr "Uzamknout přesun"
#: ../src/ng_launcher.c:632
msgid "Applications"
msgstr "Aplikace"
#: ../src/ng_launcher.c:636
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:302
msgid "Available Gadgets"
msgstr "Dostupné gadgety"
#: ../src/ng_gadcon.c:309
msgid "Add Gadget"
msgstr "Přidat gadget"
#: ../src/ng_gadcon.c:315
msgid "Selected Gadgets"
msgstr "Vybrané gadgety"
#: ../src/ng_gadcon.c:322
msgid "Remove Gadget"
msgstr "Odstranit gadget"
#: ../src/ng_gadcon.c:330
#: ../src/ng_gadcon.c:373
#: ../src/ng_gadcon.c:397
msgid "Description: Unavailable"
msgstr "Popis: nedostupný"
#: ../src/ng_config.c:101
msgid "Itask NG Configuration"
msgstr "Volby Itask NG"
#: ../src/ng_config.c:168
msgid "Bar Items"
msgstr "Položky panelu"
#: ../src/ng_config.c:177
#: ../src/ng_config.c:634
#: ../src/ng_config_instances.c:104
msgid "Delete"
msgstr "Odstranit"
#: ../src/ng_config.c:179
#: ../src/ng_config.c:636
#: ../src/ng_config_instances.c:106
msgid "Configure"
msgstr "Konfigurovat"
#: ../src/ng_config.c:181
msgid "Up"
msgstr "Nahoru"
#: ../src/ng_config.c:183
msgid "Down"
msgstr "Dolů"
#: ../src/ng_config.c:188
#: ../src/ng_config.c:632
#: ../src/ng_config_instances.c:102
msgid "Add"
msgstr "Přidat"
#: ../src/ng_config.c:190
msgid "Taskbar"
msgstr "Správce úloh"
#: ../src/ng_config.c:192
msgid "Launcher"
msgstr "Spouštěč"
#: ../src/ng_config.c:194
msgid "Gadcon"
msgstr "Gadcon"
#: ../src/ng_config.c:205
msgid "Appearance"
msgstr "Vzhled"
#: ../src/ng_config.c:206
msgid "Show Icon Label"
msgstr "Zobrazit text ikony"
#: ../src/ng_config.c:209
msgid "Show Background Box"
msgstr "Zobrazit pozadí"
#.
#. ob = e_widget_check_add(evas, D_("Mouse-Over Animation"), &(cfdata->mouse_over_anim));
#. e_widget_framelist_object_append(of, ob);
#.
#: ../src/ng_config.c:215
msgid "Icon Size:"
msgstr "Velikost ikon:"
#: ../src/ng_config.c:217
#, c-format
msgid "%1.0f px"
msgstr "%1.0f px"
#: ../src/ng_config.c:224
msgid "Background Transparency:"
msgstr "Průhlednost pozadí:"
#: ../src/ng_config.c:226
msgid "%1.0f \\%"
msgstr "%1.0f \\%"
#: ../src/ng_config.c:234
msgid "Stacking"
msgstr "Skládání"
#: ../src/ng_config.c:237
msgid "Above All"
msgstr "Nad vším"
#: ../src/ng_config.c:239
msgid "Below Fullscreen"
msgstr "Pod celoobrazovkovými"
#: ../src/ng_config.c:244
msgid "Orientation"
msgstr "Orientace"
#: ../src/ng_config.c:260
msgid "Zoom"
msgstr "Přiblížení"
#: ../src/ng_config.c:261
msgid "Zoom only one icon"
msgstr "Přiblížit pouze jednu ikonu"
#: ../src/ng_config.c:263
msgid "Factor:"
msgstr "Faktor:"
#: ../src/ng_config.c:269
msgid "Range:"
msgstr "Šířka:"
#: ../src/ng_config.c:275
msgid "Duration:"
msgstr "Trvání:"
#: ../src/ng_config.c:283
msgid "Auto Hide"
msgstr "Automaticky skrýt"
#: ../src/ng_config.c:307
msgid "Show Bar when Urgent"
msgstr "Zobrazit panel při naléhavé notifikaci"
#. ob = e_widget_radio_add(evas, "Hide Below Windows", 2, rg);
#. e_widget_framelist_object_append(of, ob);
#. // e_widget_on_change_hook_set(ob, _cb_check_if_launcher_source, cfdata);
#.
#: ../src/ng_config.c:314
msgid "Hide Timeout:"
msgstr "Časový limit skrytí:"
#: ../src/ng_config.c:322
msgid "Other"
msgstr "Ostatní"
#: ../src/ng_config.c:323
msgid "Lock Deskflip on Edge"
msgstr "Zamknout přepnutí plochy na okraji"
#: ../src/ng_config.c:325
msgid "Ecomorph Features"
msgstr "Funkce Ecomorphu"
#: ../src/ng_config.c:624
msgid "Launcher Settings"
msgstr "Nastavení spouštěče"
#: ../src/ng_config.c:644
msgid "Taskbar Settings"
msgstr "Nastavení správce úloh"
#: ../src/ng_config.c:646
msgid "Dont Show Dialogs"
msgstr "Nezobrazovat dialogy"
#: ../src/ng_config.c:648
msgid "Advanced Window Menu"
msgstr "Pokročilé menu okna"
#: ../src/ng_config.c:650
msgid "Only Show Current Desk"
msgstr "Zobrazit jen aktuální plochu"
#: ../src/ng_config.c:652
msgid "Group Applications by Window Class"
msgstr "Seskupovat aplikace podle třídy okna"
#: ../src/ng_config.c:654
msgid "Append new Applications on the right Side"
msgstr "Přidávat nové aplikace na pravém okraji"
#: ../src/ng_config.c:659
msgid "Iconified Applications"
msgstr "Ikonifikované aplikace"
#: ../src/ng_config.c:734
#: ../src/ng_config.c:774
msgid "Itask NG Bar Configuration"
msgstr "Itask NG Panel nastavení"
#: ../src/ng_config.c:879
msgid "Create new Itask NG source"
msgstr "Vytvořit nový zdroj Itask NG"
#: ../src/ng_config.c:880
msgid "Enter a name for this new Application Launcher:"
msgstr "Zadejte jméno pro tento nový spouštěč:"
#: ../src/ng_config.c:889
#, c-format
msgid "You requested to delete \"%s\".<br><br>Are you sure you want to delete this ng source?"
msgstr "Opravdu chcete smazat Itask NG zdroj \"%s\"?"
#: ../src/ng_config.c:893
msgid "Are you sure you want to delete this Itask NG source?"
msgstr "Opravdu chcete smazat tento Itask NG zdroj?"
#: ../src/ng_config_instances.c:64
msgid "Itask NG Instances"
msgstr "Instance Itask NG"
#: ../src/ng_config_instances.c:94
msgid "Itask NG - Instances"
msgstr "Itask NG - Instance"
#. 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:363
#, c-format
msgid "You requested to delete \"%s\".<br><br>Are you sure you want to delete this Instance?"
msgstr "Opravdu chcete smazat Itask NG instanci \"%s\"?"
#: ../src/ng_config_instances.c:367
msgid "Are you sure you want to delete this Instance?"
msgstr "Opravdu chcete smazat tuto Itask NG instanci?"

313
po/de.po Normal file
View File

@ -0,0 +1,313 @@
# 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 "Itask-NG"
msgstr "Itask-NG"
#: src/e_mod_main.c:477
msgid "Itask NG"
msgstr "Itask-NG"
#: src/ng_taskbar.c:731
msgid "No name!"
msgstr "Kein Name!"
#: src/ng_launcher.c:619
msgid "Configure Bar"
msgstr "Itask-Leiste einstellen"
#: 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 "Itask NG Configuration"
msgstr "Einstellungen für Itask-NG"
#: 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 Itask-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 "Itask NG Bar Configuration"
msgstr "Einstellungen für Itask-NG-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 Itask NG source"
msgstr "Neue Itask-NG-Quelle 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 "
"ng 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 Itask NG source?"
msgstr "Möchten Sie diese Itask-NG-Quelle wirklich löschen?"
#: src/ng_config_instances.c:64
msgid "Itask NG Instances"
msgstr "Itask-NG-Instanzen"
#: src/ng_config_instances.c:94
msgid "Itask NG - Instances"
msgstr "Itask-NG-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"

340
po/fr.po Normal file
View File

@ -0,0 +1,340 @@
# French translation for Itask-ng.
# This file is put in the public domain.
# batden <batden@orange.fr>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Itask-ng\n"
"Report-Msgid-Bugs-To: hannes.janetzek@gmail.com\n"
"POT-Creation-Date: 2008-09-02 16:42+0200\n"
"PO-Revision-Date: 2010-07-12 10:20+0400\n"
"Last-Translator: batden <batden@orange.fr>\n"
"Language-Team: French <pourunmondesansgourou@orange.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:338
msgid "Itask NG"
msgstr "Itask NG"
#: src/ng_taskbar.c:851
msgid "No name!"
msgstr "Pas de nom !"
#: src/ng_launcher.c:726
msgid "Configure Bar"
msgstr "Configurer la barre"
#: src/ng_launcher.c:733
msgid "Configure Launcher"
msgstr "Configurer le lanceur"
#: src/ng_launcher.c:737
msgid "Lock Dragging"
msgstr "Verrouiller le glisser"
#: src/ng_launcher.c:746
msgid "Set Single Instance"
msgstr "N'autoriser qu'une seule instance"
#: src/ng_launcher.c:752
#: src/ng_border_menu.c:307
msgid "Edit Icon"
msgstr "Éditer l'icone"
#: src/ng_border_menu.c:154
msgid "Window Locks"
msgstr "Verrous de la fenêtre"
#: src/ng_border_menu.c:161
msgid "Remember"
msgstr "Mémoriser"
#: src/ng_border_menu.c:170
msgid "Borders"
msgstr "Bordures"
#: src/ng_border_menu.c:184
msgid "Send to Desktop"
msgstr "Envoyer sur le bureau"
#: src/ng_border_menu.c:196
msgid "Pin to Desktop"
msgstr "Épingler au bureau"
#: src/ng_border_menu.c:208
msgid "Unpin from Desktop"
msgstr "Désépingler du bureau"
#: src/ng_border_menu.c:241
msgid "State"
msgstr "État"
#: src/ng_border_menu.c:255
#: src/ng_border_menu.c:750
msgid "Sticky"
msgstr "Ancré"
#: src/ng_border_menu.c:268
#: src/ng_border_menu.c:763
msgid "Fullscreen"
msgstr "Plein écran"
#: src/ng_border_menu.c:288
msgid "Skip Window List"
msgstr "Ne pas afficher dans la liste des fenêtres"
#: src/ng_border_menu.c:312
msgid "Add To Favorites Menu"
msgstr "Ajouter au menu des favoris"
#: src/ng_border_menu.c:317
msgid "Add To Launcher"
msgstr "Ajouter au lanceur"
#: src/ng_border_menu.c:324
msgid "Create Icon"
msgstr "Créer un icone"
#: src/ng_border_menu.c:334
msgid "Window Properties"
msgstr "Propriétés de la fenêtre"
#: src/ng_border_menu.c:347
msgid "Kill"
msgstr "Tuer"
#: src/ng_border_menu.c:357
#: src/ng_border_menu.c:372
msgid "Close"
msgstr "Fermer"
#: src/ng_border_menu.c:395
msgid "Maximized"
msgstr "Maximisée"
#: src/ng_border_menu.c:419
msgid "Uniconify"
msgstr "Restaurer"
#: src/ng_border_menu.c:421
msgid "Iconify"
msgstr "Minimiser"
#: src/ng_border_menu.c:737
msgid "Shaded"
msgstr "Enroulée"
#: src/ng_gadcon.c:429
msgid "Available Gadgets"
msgstr "Gadgets disponibles"
#: src/ng_gadcon.c:436
msgid "Add Gadget"
msgstr "Ajouter un gadget"
#: src/ng_gadcon.c:442
msgid "Selected Gadgets"
msgstr "Gadgets sélectionnés"
#: src/ng_gadcon.c:449
msgid "Remove Gadget"
msgstr "Supprimer ce gadget"
#: src/ng_gadcon.c:457
#: src/ng_gadcon.c:492
#: src/ng_gadcon.c:514
msgid "Description: Unavailable"
msgstr "Description : non disponible"
#: src/ng_config.c:83
msgid "Itask NG Configuration"
msgstr "Configuration de Itask NG"
#: src/ng_config.c:153
msgid "Bar Items"
msgstr "Éléments de la barre"
#: src/ng_config.c:161
#: src/ng_config.c:613
#: src/ng_config_instances.c:92
msgid "Delete"
msgstr "Supprimer"
#: src/ng_config.c:163
#: src/ng_config.c:615
#: src/ng_config_instances.c:94
msgid "Configure"
msgstr "Configurer"
#: src/ng_config.c:165
msgid "Up"
msgstr "Monter"
#: src/ng_config.c:167
msgid "Down"
msgstr "Descendre"
#: src/ng_config.c:174
#: src/ng_config.c:611
#: src/ng_config_instances.c:90
msgid "Add"
msgstr "Ajouter"
#: src/ng_config.c:176
msgid "Taskbar"
msgstr "Barre des tâches"
#: src/ng_config.c:178
msgid "Launcher"
msgstr "Lanceur"
#: src/ng_config.c:180
msgid "Gadcon"
msgstr "Gadcon"
#: src/ng_config.c:187
msgid "Zooming"
msgstr "Zoom"
#: src/ng_config.c:188
msgid "Zoom only one icon"
msgstr "Ne zoomer qu'un seul icone"
#: src/ng_config.c:190
msgid "Zoomfactor:"
msgstr "Facteur de zoom :"
#: src/ng_config.c:192
#, c-format
msgid "%0.01f"
msgstr "%0.01f"
#: src/ng_config.c:196
msgid "Zoom Range:"
msgstr "Étendue du zoom :"
#: src/ng_config.c:198
#: src/ng_config.c:204
#: src/ng_config.c:284
#, c-format
msgid "%0.1f"
msgstr "%0.1f"
#: src/ng_config.c:202
msgid "Zoom Duration:"
msgstr "Durée du zoom :"
#: src/ng_config.c:215
msgid "Appearance"
msgstr "Aspect"
#: src/ng_config.c:216
msgid "Show Icon Label"
msgstr "Montrer l'étiquette de l'icone"
#: src/ng_config.c:219
msgid "Show Background Box"
msgstr "Afficher le fond"
#: src/ng_config.c:225
msgid "Icon Size:"
msgstr "Taille de l'icone :"
#: src/ng_config.c:227
#, c-format
msgid "%1.0f px"
msgstr "%1.0f px"
#: src/ng_config.c:234
msgid "Background Transparency:"
msgstr "Transparence du fond :"
#: src/ng_config.c:236
msgid "%1.0f \\%"
msgstr "%1.0f \\%"
#: src/ng_config.c:261
msgid "Hide Behavior"
msgstr "Comportement du masquage"
#: src/ng_config.c:282
msgid "Hide Timeout:"
msgstr "Délai avant masquage :"
#: src/ng_config.c:291
msgid "Orientation"
msgstr "Disposition"
#: src/ng_config.c:603
msgid "Launcher Settings"
msgstr "Paramétrage du lanceur"
#: src/ng_config.c:623
msgid "Taskbar Settings"
msgstr "Paramétrage de la barre des tâches"
#: src/ng_config.c:625
msgid "Dont Show Dialogs"
msgstr "Ne pas afficher les boîtes de dialogue"
#: src/ng_config.c:627
msgid "Advanced Window Menu"
msgstr "Menu avancé de la fenêtre"
#: src/ng_config.c:629
msgid "Only Show Current Desk"
msgstr "Afficher uniquement le bureau actuel"
#: src/ng_config.c:634
msgid "Show Iconified"
msgstr "Afficher la minimisation"
#: src/ng_config.c:720
#: src/ng_config.c:761
msgid "Itask NG Bar Configuration"
msgstr "Configuration de la barre NG"
#: src/ng_config.c:869
msgid "Create new Itask NG source"
msgstr "Créer une nouvelle source"
#: src/ng_config.c:870
msgid "Enter a name for this new Application Launcher:"
msgstr "Entrer un nom pour ce nouveau lanceur :"
#: 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 "Vous avez demandé à supprimer « %s ».<br><br>Voulez-vous vraiment supprimer cette source ?"
#: src/ng_config.c:885
msgid "Are you sure you want to delete this Itask NG source?"
msgstr "Voulez-vous vraiment supprimer cette source ?"
#: src/ng_config_instances.c:49
msgid "Itask NG Instances"
msgstr "Instances de Itask NG"
#: src/ng_config_instances.c:82
msgid "Itask NG - Instances"
msgstr "Itask NG - Instances"
#: src/ng_config_instances.c:152
msgid "Bar"
msgstr "Barre"
#: 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 "Vous avez demandé à supprimer « %s ».<br><br>voulez-vous vraiment le faire ?"
#: src/ng_config_instances.c:340
msgid "Are you sure you want to delete this Instance?"
msgstr "Voulez-vous vraiment supprimer cette instance ?"

316
po/it.po Normal file
View File

@ -0,0 +1,316 @@
# Italian translation for E17 itask-ng module.
# This file is put in the public domain.
# Massimo Maiurana <maiurana@gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Itask-ng\n"
"Report-Msgid-Bugs-To: http://trac.enlightenment.org/e\n"
"POT-Creation-Date: 2011-03-24 05:00-0700\n"
"PO-Revision-Date: 2011-03-24 13:27+0100\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"
#: ../src/e_mod_main.c:1695 ../src/e_mod_main.c:1786
msgid "Itask-NG"
msgstr "Itask-NG"
#: ../src/e_mod_main.c:1810
msgid "Itask NG"
msgstr "Itask NG"
#: ../src/ng_taskbar.c:685
msgid "No name!"
msgstr "Nessun nome!"
#: ../src/ng_launcher.c:528
msgid "Configure Bar"
msgstr "Configura barra"
#: ../src/ng_launcher.c:532
msgid "Lock Dragging"
msgstr "Blocca trascinamento"
#: ../src/ng_launcher.c:541
msgid "Applications"
msgstr "Applicazioni"
#: ../src/ng_launcher.c:545
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:101
msgid "Itask NG Configuration"
msgstr "Configurazione di Itask NG"
#: ../src/ng_config.c:171 ../src/ng_config.c:229
msgid "Appearance"
msgstr "Aspetto"
#: ../src/ng_config.c:172
msgid "Icon Size:"
msgstr "Dimensione icona:"
#: ../src/ng_config.c:174
#, c-format
msgid "%1.0f px"
msgstr "%1.0f px"
#: ../src/ng_config.c:179
msgid "Reflection Opacity:"
msgstr "Trasparenza riflesso:"
#: ../src/ng_config.c:181
#, c-format
msgid "%1.0f"
msgstr "%1.0f"
#: ../src/ng_config.c:188
msgid "Background Opacity:"
msgstr "Trasparenza sfondo:"
#: ../src/ng_config.c:190
msgid "%1.0f \\%"
msgstr "%1.0f \\%"
#: ../src/ng_config.c:198
msgid "Show Background Box"
msgstr "Mostra box di sfondo"
#: ../src/ng_config.c:203
msgid "Orientation"
msgstr "Orientamento"
#: ../src/ng_config.c:205
msgid "Bottom Edge"
msgstr "Bordo inferiore"
#: ../src/ng_config.c:207
msgid "Top Edge"
msgstr "Bordo superiore"
#: ../src/ng_config.c:209
msgid "Left Edge"
msgstr "Bordo sinistro"
#: ../src/ng_config.c:211
msgid "Right Edge"
msgstr "Bordo destro"
#: ../src/ng_config.c:232 ../src/ng_config.c:251
msgid "Zoom"
msgstr "Zoom"
#: ../src/ng_config.c:233
msgid "Factor:"
msgstr "Fattore:"
#: ../src/ng_config.c:239
msgid "Range:"
msgstr "Intervallo:"
#: ../src/ng_config.c:245
msgid "Duration:"
msgstr "Durata:"
#: ../src/ng_config.c:254 ../src/ng_config.c:282
msgid "Bar Items"
msgstr "Elementi nella barra"
#: ../src/ng_config.c:262 ../src/ng_config.c:538
#: ../src/ng_config_instances.c:104
msgid "Delete"
msgstr "Elimina"
#: ../src/ng_config.c:264 ../src/ng_config.c:540
#: ../src/ng_config_instances.c:106
msgid "Configure"
msgstr "Configura"
#: ../src/ng_config.c:266
msgid "Up"
msgstr "Su"
#: ../src/ng_config.c:268
msgid "Down"
msgstr "Giù"
#: ../src/ng_config.c:273 ../src/ng_config.c:536
#: ../src/ng_config_instances.c:102
msgid "Add"
msgstr "Aggiungi"
#: ../src/ng_config.c:275
msgid "Taskbar"
msgstr "Taskbar"
#: ../src/ng_config.c:277
msgid "Launcher"
msgstr "Lanciatore"
#: ../src/ng_config.c:279
msgid "Gadcon"
msgstr "Gadcon"
#: ../src/ng_config.c:285 ../src/ng_config.c:301
msgid "Auto Hide"
msgstr "Nascondi automaticamente"
#: ../src/ng_config.c:299
msgid "Show Bar when Urgent"
msgstr "Mostra barra su Urgenti"
#: ../src/ng_config.c:307
msgid "Stacking"
msgstr "Livello"
#: ../src/ng_config.c:309
msgid "Above All"
msgstr "Sopra tutto"
#: ../src/ng_config.c:311
msgid "Below Fullscreen"
msgstr "Sotto finestre a tutto schermo"
#: ../src/ng_config.c:315 ../src/ng_config.c:322
msgid "Other"
msgstr "Altro"
#: ../src/ng_config.c:316
msgid "Ecomorph Features"
msgstr "Funzionalità Ecomorph"
#: ../src/ng_config.c:318
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 "Itask NG Bar Configuration"
msgstr "Configurazione barra Itask NG"
#: ../src/ng_config.c:788
msgid "Create new Itask NG source"
msgstr "Crea nuova fonte per Itask NG"
#: ../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 "
"ng 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 Itask NG source?"
msgstr "Siete sicuri di voler eliminare questa fonte per Itask NG?"
#: ../src/ng_config_instances.c:64
msgid "Itask NG Instances"
msgstr "Istanze di Itask NG"
#: ../src/ng_config_instances.c:94
msgid "Itask NG - Instances"
msgstr "Itask NG - Istanze"
#. 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 "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 ""
"Avete richiesto di eliminare \"%s\".<br><br>Siete sicuri di voler eliminare "
"questa istanza?"
#: ../src/ng_config_instances.c:342
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 ""

327
po/pt.po Normal file
View File

@ -0,0 +1,327 @@
# Portuguese translation for itaskng
# This file is distributed under the same license as the enlightenment package.
#
# Sérgio Marques <smarquespt@gmail.com>, 2010.
# Sérgio Marques <sarquespt@gmail.com>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: Itask-ng\n"
"Report-Msgid-Bugs-To: http://trac.enlightenment.org/e\n"
"POT-Creation-Date: 2011-03-18 23:00-0700\n"
"PO-Revision-Date: 2011-03-24 02:10-0000\n"
"Last-Translator: Sérgio Marques <smarquespt@gmail.com>\n"
"Language-Team: Portuguese <>\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
msgid "Itask-NG"
msgstr "Itask-NG"
#: ../src/e_mod_main.c:1810
msgid "Itask NG"
msgstr "Itask NG"
#: ../src/ng_taskbar.c:701
msgid "No name!"
msgstr "Sem nome!"
#: ../src/ng_launcher.c:538
msgid "Configure Bar"
msgstr "Configurar barra"
#: ../src/ng_launcher.c:542
msgid "Lock Dragging"
msgstr "Bloquear o arrastamento"
#: ../src/ng_launcher.c:551
msgid "Applications"
msgstr "Aplicações"
#: ../src/ng_launcher.c:555
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 "Itask NG Configuration"
msgstr "Configuração do Itask NG"
#: ../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 "Limite inferior"
#: ../src/ng_config.c:207
msgid "Top Edge"
msgstr "Limite superior"
#: ../src/ng_config.c:209
msgid "Left Edge"
msgstr "Limite esquerdo"
#: ../src/ng_config.c:211
msgid "Right Edge"
msgstr "Limite direito"
#: ../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 na barra"
#: ../src/ng_config.c:262
#: ../src/ng_config.c:538
#: ../src/ng_config_instances.c:104
msgid "Delete"
msgstr "Apagar"
#: ../src/ng_config.c:264
#: ../src/ng_config.c:540
#: ../src/ng_config_instances.c:106
msgid "Configure"
msgstr "Configurar"
#: ../src/ng_config.c:266
msgid "Up"
msgstr "Cima"
#: ../src/ng_config.c:268
msgid "Down"
msgstr "Baixo"
#: ../src/ng_config.c:273
#: ../src/ng_config.c:536
#: ../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 a barra se for urgente"
#: ../src/ng_config.c:307
msgid "Stacking"
msgstr "Empilhamento"
#: ../src/ng_config.c:309
msgid "Above All"
msgstr "Acima 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 "Funcionalidades Ecomorph"
#: ../src/ng_config.c:318
msgid "Show Icon Label"
msgstr "Mostrar texto nos ícones"
#: ../src/ng_config.c:528
msgid "Launcher Settings"
msgstr "Definições do lançador"
#: ../src/ng_config.c:548
msgid "Taskbar Settings"
msgstr "Definições da barra de tarefas"
#: ../src/ng_config.c:550
msgid "Dont Show Dialogs"
msgstr "Não mostrar diálogos"
#: ../src/ng_config.c:553
msgid "Advanced Window Menu"
msgstr "Menu avançado"
#: ../src/ng_config.c:556
msgid "Only Show Current Desk"
msgstr "Mostrar apenas na área de trabalho atual"
#: ../src/ng_config.c:559
msgid "Group Applications by Window Class"
msgstr "Agrupar aplicações por classes de janela"
#: ../src/ng_config.c:562
msgid "Append new Applications on the right Side"
msgstr "Colocar as novas aplicações no lado direito"
#: ../src/ng_config.c:568
msgid "Iconified Applications"
msgstr "Aplicações miniminizadas"
#: ../src/ng_config.c:643
#: ../src/ng_config.c:683
msgid "Itask NG Bar Configuration"
msgstr "Configuração da barra Itask NG"
#: ../src/ng_config.c:788
msgid "Create new Itask NG source"
msgstr "Criar nova fonte Itask NG"
#: ../src/ng_config.c:789
msgid "Enter a name for this new Application Launcher:"
msgstr "Indique o nome para este lançador de aplicações:"
#: ../src/ng_config.c:798
#, c-format
msgid "You requested to delete \"%s\".<br><br>Are you sure you want to delete this ng source?"
msgstr "Solicitou a eliminação de \"%s\".<br><br>Tem a certeza que quer eliminar esta fonte?"
#: ../src/ng_config.c:802
msgid "Are you sure you want to delete this Itask NG source?"
msgstr "Tem a certeza que quer eliminar esta fonte Itask NG?"
#: ../src/ng_config_instances.c:64
msgid "Itask NG Instances"
msgstr "Instâncias Itask NG"
#: ../src/ng_config_instances.c:94
msgid "Itask NG - Instances"
msgstr "Itask NG - Instâncias"
#. 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 "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
}

306
po/sl.po Normal file
View File

@ -0,0 +1,306 @@
# 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: http://trac.enlightenment.org/e\n"
"POT-Creation-Date: 2011-02-22 20:00-0800\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit"
#: ../src/e_mod_main.c:1641 ../src/e_mod_main.c:1732
msgid "Itask-NG"
msgstr "Itask-NG"
#: ../src/e_mod_main.c:1756
msgid "Itask NG"
msgstr "Itask·NG"
#: ../src/ng_taskbar.c:702
msgid "No name!"
msgstr "Ni imena !"
#: ../src/ng_launcher.c:508
msgid "Configure Bar"
msgstr "Nastavi vrstico"
#: ../src/ng_launcher.c:512
msgid "Lock Dragging"
msgstr "Zakleni vleko"
#: ../src/ng_launcher.c:521
msgid "Applications"
msgstr "Programi"
#: ../src/ng_launcher.c:525
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
msgid "Itask NG Configuration"
msgstr "Itask·NG·nastavitve"
#: ../src/ng_config.c:174
msgid "Bar Items"
msgstr "Predmeti vrstice"
#: ../src/ng_config.c:183 ../src/ng_config.c:537
#: ../src/ng_config_instances.c:104
msgid "Delete"
msgstr "Izbriši"
#: ../src/ng_config.c:185 ../src/ng_config.c:539
#: ../src/ng_config_instances.c:106
msgid "Configure"
msgstr "Nastavi"
#: ../src/ng_config.c:187
msgid "Up"
msgstr "Gor"
#: ../src/ng_config.c:189
msgid "Down"
msgstr "Dol"
#: ../src/ng_config.c:194 ../src/ng_config.c:535
#: ../src/ng_config_instances.c:102
msgid "Add"
msgstr "Dodaj"
#: ../src/ng_config.c:196
msgid "Taskbar"
msgstr "Opravilna vrstica"
#: ../src/ng_config.c:198
msgid "Launcher"
msgstr "Zaganjalnik"
#: ../src/ng_config.c:200
msgid "Gadcon"
msgstr "Gadcon"
#: ../src/ng_config.c:211
msgid "Appearance"
msgstr "Videz"
#: ../src/ng_config.c:212
msgid "Show Icon Label"
msgstr "Prikaži oznako ikone"
#: ../src/ng_config.c:215
msgid "Show Background Box"
msgstr "Prikaži škatlo ozadja"
#.
#. ob = e_widget_check_add(evas, D_("Mouse-Over Animation"), &(cfdata->mouse_over_anim));
#. e_widget_framelist_object_append(of, ob);
#.
#: ../src/ng_config.c:221
msgid "Icon Size:"
msgstr "Velikost ikone"
#: ../src/ng_config.c:223
#, c-format
msgid "%1.0f px"
msgstr "%1.0f·pik."
#: ../src/ng_config.c:228
msgid "Reflection Opacity:"
msgstr "Prozornost zrcaljenja"
#: ../src/ng_config.c:230
#, c-format
msgid "%1.0f"
msgstr "%1.0f"
#: ../src/ng_config.c:237
msgid "Background Opacity:"
msgstr "Prozornost ozadja"
#: ../src/ng_config.c:239
msgid "%1.0f \\%"
msgstr "%1.0f·\\%"
#: ../src/ng_config.c:247
msgid "Stacking"
msgstr "Skladanje"
#: ../src/ng_config.c:250
msgid "Above All"
msgstr "Nad vsem"
#: ../src/ng_config.c:252
msgid "Below Fullscreen"
msgstr "Pod celozaslonskim"
#: ../src/ng_config.c:257
msgid "Auto Hide"
msgstr "Samodejno skrij"
#: ../src/ng_config.c:271
msgid "Show Bar when Urgent"
msgstr "Pokaži vrstico ko je nujno"
#: ../src/ng_config.c:279
msgid "Zoom"
msgstr "Povečava"
#: ../src/ng_config.c:281
msgid "Factor:"
msgstr "Dejavnik:"
#: ../src/ng_config.c:287
msgid "Range:"
msgstr "Domet:"
#: ../src/ng_config.c:293
msgid "Duration:"
msgstr "Trajanje:"
#: ../src/ng_config.c:301
msgid "Orientation"
msgstr "Usmeritev"
#: ../src/ng_config.c:317
msgid "Other"
msgstr "Drugo"
#: ../src/ng_config.c:318
msgid "Ecomorph Features"
msgstr "Ecomorph funkcije"
#: ../src/ng_config.c:527
msgid "Launcher Settings"
msgstr "Nastavitve zaganjalnika"
#: ../src/ng_config.c:547
msgid "Taskbar Settings"
msgstr "Nastavitve opravilne vrstice"
#: ../src/ng_config.c:549
msgid "Dont Show Dialogs"
msgstr "Ne prikaži pojavnih oken"
#: ../src/ng_config.c:552
msgid "Advanced Window Menu"
msgstr "Napreden meni oken"
#: ../src/ng_config.c:555
msgid "Only Show Current Desk"
msgstr "Prikaži le trenutno namizje"
#: ../src/ng_config.c:558
msgid "Group Applications by Window Class"
msgstr "Uskupini programe po razredih okna"
#: ../src/ng_config.c:561
msgid "Append new Applications on the right Side"
msgstr "Dodaj nove programe na desni strani"
#: ../src/ng_config.c:567
msgid "Iconified Applications"
msgstr "Ikonizirani programi"
#: ../src/ng_config.c:642 ../src/ng_config.c:682
msgid "Itask NG Bar Configuration"
msgstr "Nastavitve Itask·NG vrstice"
#: ../src/ng_config.c:787
msgid "Create new Itask NG source"
msgstr "Ustvari nov vir·Itask·NG"
#: ../src/ng_config.c:788
msgid "Enter a name for this new Application Launcher:"
msgstr "Vnesi ime za ta novi zaganjalnik programov"
#: ../src/ng_config.c:797
#, c-format
msgid ""
"You requested to delete \"%s\".<br><br>Are you sure you want to delete this "
"ng source?"
msgstr ""
"Zahtevali ste izbris·\"%s\".<br><br>Ali ste prepričani da hočete izbrisati "
"ta vir·ng ?"
#: ../src/ng_config.c:801
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?"
#: ../src/ng_config_instances.c:64
msgid "Itask NG Instances"
msgstr "Primerki Itask·NG"
#: ../src/ng_config_instances.c:94
msgid "Itask NG - Instances"
msgstr "Itask·NG·-·Primerki"
#. 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 "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?"

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 *~

1878
src/e_mod_main.c Normal file

File diff suppressed because it is too large Load Diff

379
src/e_mod_main.h Normal file
View File

@ -0,0 +1,379 @@
#include <e.h>
#include <X11/Xlib.h>
#define D_(str) dgettext(PACKAGE, str)
#ifndef E_MOD_MAIN_H
#define E_MOD_MAIN_H
#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 ITEM_MOUSE_DOWN(_item, _ev) \
* if(_item && _item->cb_mouse_down) \
* _item->cb_mouse_down(_item, _ev); \
*
* #define ITEM_MOUSE_UP(_item, _ev) \
* if(_item && _item->cb_mouse_up) \
* _item->cb_mouse_up(_item, _ev); \
*
* #define ITEM_MOUSE_OUT(_item) \
* if(_item && _item->cb_mouse_out) \
* _item->cb_mouse_out(_item); \
*
* #define ITEM_MOUSE_IN(_item) \
* if(_item && _item->cb_mouse_in) \
* _item->cb_mouse_in(_item); \ */
#define ITEM_MOUSE_WHEEL(_item, ev) \
if(_item && _item->cb_mouse_wheel) \
_item->cb_mouse_wheel(_item, ev); \
#define ITEM_DRAG_START(_item) \
if(_item && _item->cb_drag_start) \
_item->cb_drag_start(_item); \
#define ITEM_FREE(_item) \
if(_item && _item->cb_free) \
_item->cb_free(_item); \
_item = NULL; \
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;
int rflxn_alpha;
float rflxn_foc;
float rflxn_dist;
float rflxn_rot;
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;
XRectangle 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;
Evas_Object *o_bg;
Evas_Object *o_proxy;
Evas_Object *o_icons;
Evas_Object *o_frame;
Evas_Object *o_label;
Evas_Object *clip;
Evas_Object *bg_clip;
unsigned char changed : 1;
int pos; /* mouse position */
int size; /* current icon size */
enum { unzoomed, zooming, zoomed, unzooming } state;
enum { hidden, hiding, showing, show } hide_state;
int hide_fullscreen;
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);
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/itask-ng/separator_bottom");
break;
case E_GADCON_ORIENT_TOP:
ngi_object_theme_set(box->separator, "e/modules/itask-ng/separator_top");
break;
case E_GADCON_ORIENT_LEFT:
ngi_object_theme_set(box->separator, "e/modules/itask-ng/separator_left");
break;
case E_GADCON_ORIENT_RIGHT:
ngi_object_theme_set(box->separator, "e/modules/itask-ng/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);
}

933
src/ng_config.c Normal file
View File

@ -0,0 +1,933 @@
#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;
int rflxn_alpha;
double rflxn_foc;
double rflxn_dist;
double rflxn_rot;
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(char *text, void *data);
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->config_dialog)
return;
EINA_LIST_FOREACH(ngi_config->items, l, ci2)
if (ci == ci2)
break;
else
i++;
snprintf(path, sizeof(path), "extensions/itask_ng::%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_("Itask NG 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);
C(rflxn_alpha);
C(rflxn_rot);
C(rflxn_dist);
C(rflxn_foc);
#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);
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, "Autohide 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
{
ngi_bar_lock(ng, 0);
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_("Itask NG 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_("Itask NG 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 Itask NG 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 ng source?"),
cfdata->app_dir);
e_confirm_dialog_show(D_("Are you sure you want to delete this Itask NG 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(char *text, void *data)
{
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;
ng->cfg->rflxn_alpha = cfdata->rflxn_alpha;
a = ng->cfg->alpha;
evas_object_color_set(ng->bg_clip, a, a, a, a);
a = ng->cfg->rflxn_alpha;
if (a > 0)
evas_object_show(ng->o_proxy);
else
evas_object_hide(ng->o_proxy);
evas_object_color_set(ng->o_proxy, a, a, a, a);
ngi_win_position_calc(ng->win);
ngi_thaw(ng);
}

388
src/ng_config_instances.c Normal file
View File

@ -0,0 +1,388 @@
#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/itask_ng"))
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_("Itask NG Instances"),
"E", "extensions/itask_ng",
"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_("Itask NG - 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 = E_NEW(Config_Item, 1);
cfg->show_label = 1;
cfg->show_background = 1;
cfg->container = con->num;
cfg->zone = zone->num;
cfg->orient = E_GADCON_ORIENT_BOTTOM;
cfg->size = 36;
cfg->autohide = AUTOHIDE_FULLSCREEN;
cfg->autohide_show_urgent = 0;
cfg->hide_below_windows = 0;
cfg->zoom_duration = 0.3;
cfg->zoom_range = 1.5;
cfg->hide_timeout = 0.1;
cfg->zoomfactor = 2.0;
cfg->alpha = 255;
cfg->stacking = above_all;
cfg->mouse_over_anim = 1;
cfg->lock_deskswitch = 1;
cfg->ecomorph_features = 0;
cfg->boxes = NULL;
cfg_box = E_NEW(Config_Box, 1);
cfg_box->type = launcher;
cfg_box->launcher_app_dir = eina_stringshare_add("default");
cfg_box->launcher_lock_dnd = 0;
cfg->boxes = eina_list_append(cfg->boxes, 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_show_iconified = 1;
cfg_box->taskbar_show_desktop = 0;
cfg_box->taskbar_append_right = 0;
cfg_box->taskbar_group_apps = 1;
cfg->boxes = eina_list_append(cfg->boxes, cfg_box);
ngi_config->items = eina_list_append(ngi_config->items, cfg);
e_config_domain_save("module.ng", ngi_conf_edd, ngi_config);
char buf[4096];
char tmp[4096];
FILE *f;
char *app_dir = "default";
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s",
e_user_homedir_get(), app_dir);
if (!ecore_file_exists(buf))
{
ecore_file_mkdir(buf);
snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order",
e_user_homedir_get(), app_dir);
f = fopen(buf, "w");
if (f)
{
/* Populate this .order file with some defaults */
snprintf(tmp, sizeof(tmp), "xterm.desktop\n" "sylpheed.desktop\n"
"firefox.desktop\n" "openoffice.desktop\n" "xchat.desktop\n"
"gimp.desktop\n" "xmms.desktop\n");
fwrite(tmp, sizeof(char), strlen(tmp), f);
fclose(f);
}
}
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);
}

213
src/ng_item.c Normal file
View File

@ -0,0 +1,213 @@
#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/itask-ng/icon_bottom");
break;
case E_GADCON_ORIENT_TOP:
ok = ngi_object_theme_set(it->obj, "e/modules/itask-ng/icon_top");
break;
case E_GADCON_ORIENT_LEFT:
ok = ngi_object_theme_set(it->obj, "e/modules/itask-ng/icon_left");
break;
case E_GADCON_ORIENT_RIGHT:
ok = ngi_object_theme_set(it->obj, "e/modules/itask-ng/icon_right");
break;
}
/* TODO remove fallback */
if (!ok)
{
if (!e_theme_edje_object_set(it->obj, "base/theme/modules/itask-ng", "e/modules/itask-ng/icon"))
edje_object_file_set(it->obj, ngi_config->theme_path, "e/modules/itask-ng/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/itask-ng/icon_over_bottom");
break;
case E_GADCON_ORIENT_TOP:
ok = ngi_object_theme_set(it->over, "e/modules/itask-ng/icon_over_top");
break;
case E_GADCON_ORIENT_LEFT:
ok = ngi_object_theme_set(it->over, "e/modules/itask-ng/icon_over_left");
break;
case E_GADCON_ORIENT_RIGHT:
ok = ngi_object_theme_set(it->over, "e/modules/itask-ng/icon_over_right");
break;
}
if (!ok)
{
if (!e_theme_edje_object_set(it->over, "base/theme/modules/itask-ng", "e/modules/itask-ng/icon_overlay"))
edje_object_file_set(it->over, ngi_config->theme_path, "e/modules/itask-ng/icon_overlay");
}
evas_object_layer_set(it->over, 9999);
evas_object_show(it->over);
evas_object_smart_member_add(it->obj, ng->o_icons);
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);
}
EAPI void
ngi_item_free(Ngi_Item *it)
{
Ng *ng = it->box->ng;
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->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->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);
}

572
src/ng_launcher.c Normal file
View File

@ -0,0 +1,572 @@
#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);
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;
printf(">>>>>>>> icons update %s\n", e_config->icon_theme);
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;
else
box->ng->pos = y + box->ng->size/2;
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 (!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);
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");
}
}

975
src/ng_taskbar.c Normal file
View File

@ -0,0 +1,975 @@
#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);
h = ecore_event_handler_add(E_EVENT_BORDER_ADD, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_BORDER_REMOVE, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_BORDER_ICONIFY, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_BORDER_UNICONIFY, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_BORDER_ICON_CHANGE, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_BORDER_PROPERTY, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_BORDER_ZONE_SET, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_BORDER_URGENT_CHANGE, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_BORDER_FOCUS_IN, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_BORDER_FOCUS_OUT, _cb_border_event, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
h = ecore_event_handler_add(E_EVENT_DESK_SHOW, _cb_desk_show, box);
if (h) box->handlers = eina_list_append(box->handlers, h);
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->cfg->taskbar_show_desktop && bd->desk != e_desk_current_get(box->ng->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;
}
/* FIXME set it->visible to skip icons */
static Eina_Bool
_cb_desk_show(void *data, int type, void *event)
{
/* E_Event_Desk_Show *ev = (E_Event_Desk_Show*) event; */
Ng *ng;
Ngi_Box *box;
Ngi_Item_Taskbar *it;
Eina_List *l, *ll, *lll;
E_Desk *desk;
int changed = 0;
EINA_LIST_FOREACH (ngi_config->instances, l, ng)
{
EINA_LIST_FOREACH (ng->boxes, ll, box)
{
if ((box->cfg->type != taskbar) ||
(!box->cfg->taskbar_show_desktop))
continue;
desk = e_desk_current_get(ng->zone);
EINA_LIST_FOREACH (box->items, lll, it)
{
if (it->border->desk == desk)
{
changed = 1;
it->base.scale = 1.0;
}
else
{
changed = 1;
it->base.scale = 0.0;
}
}
if (changed)
ngi_thaw(ng);
changed = 0;
}
}
return EINA_TRUE;
}
/* *************************** TASKBAR ITEM *************************** */
static void
_item_new(Ngi_Box *box, E_Border *bd)
{
Ngi_Item_Taskbar *it, *l_it = NULL, *ll_it = NULL;
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;
ngi_item_init_defaults((Ngi_Item*)it);
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_add(bd->client.icccm.class);
EINA_LIST_FOREACH (box->items, l, l_it)
{
if (box->cfg->taskbar_append_right)
{
if (ll_it && l_it->class && ll_it->class &&
ll_it->class == it->class &&
l_it->class != it->class)
break;
}
else
{
if (l_it->class && l_it->class == it->class)
break;
ll_it = l_it;
l_it = NULL;
}
}
}
if (l_it)
{
if (box->cfg->taskbar_append_right)
box->items = eina_list_append_relative(box->items, it, l_it);
else
box->items = eina_list_prepend_relative(box->items, it, l_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);
}
ngi_item_show((Ngi_Item*)it, 0);
if (bd->iconic)
ngi_item_signal_emit((Ngi_Item*)it, "e,state,taskbar,iconic,on");
it->urgent = bd->client.icccm.urgent;
if (it->urgent)
ngi_item_signal_emit((Ngi_Item*)it, "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(((Ngi_Item*)it)->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)
{
o = edje_object_add(evas);
if (!bd->internal_icon)
e_util_edje_icon_set(o, "enlightenment");
else
{
if (!bd->internal_icon_key)
{
char *ext;
ext = strrchr(bd->internal_icon, '.');
if ((ext) && ((!strcmp(ext, ".edj"))))
{
if (!edje_object_file_set(o, bd->internal_icon, "icon"))
e_util_edje_icon_set(o, "enlightenment");
}
else if (ext)
{
evas_object_del(o);
o = e_icon_add(evas);
e_icon_file_set(o, bd->internal_icon);
}
else
{
evas_object_del(o);
o = e_icon_add(evas);
double tmp = e_scale;
e_scale = 3.0;
if (!e_util_icon_theme_set(o, bd->internal_icon))
e_util_icon_theme_set(o, "enlightenment");
e_scale = tmp;
}
}
else
{
edje_object_file_set(o, bd->internal_icon,
bd->internal_icon_key);
}
}
return o;
}
if ((bd->client.netwm.icons) &&
((e_config->use_app_icon) ||
(bd->remember && (bd->remember->prop.icon_preference == E_ICON_PREF_NETWM))))
{
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;
}
if (bd->desktop)
{
o = e_util_desktop_icon_add(bd->desktop, 128, evas);
if (o) return o;
}
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_edje_icon_set(o, "enlightenment/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 = (char *)calloc(E_CLIENTLIST_MAX_CAPTION_LEN + 4, sizeof(char));
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);
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);
}
}