wmusic: Add version 1.5.0 to repository
This commit is contained in:
parent
219e04f6ad
commit
7054a65b90
339
wmusic/COPYING
Normal file
339
wmusic/COPYING
Normal file
|
@ -0,0 +1,339 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
675 Mass Ave, Cambridge, MA 02139, USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
Appendix: How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) 19yy <name of author>
|
||||||
|
|
||||||
|
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) 19yy name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Library General
|
||||||
|
Public License instead of this License.
|
20
wmusic/Makefile.in
Normal file
20
wmusic/Makefile.in
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
RCSS = Makefile.in configure.in README
|
||||||
|
|
||||||
|
all: wmusic
|
||||||
|
|
||||||
|
wmusic:
|
||||||
|
cd src && ${MAKE} wmusic
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *~ *.o core wmusic.spec
|
||||||
|
cd src && ${MAKE} clean
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
rm -f config.status config.log Makefile config.cache
|
||||||
|
cd src && ${MAKE} distclean
|
||||||
|
|
||||||
|
install:
|
||||||
|
cd src && ${MAKE} install
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
cd src && ${MAKE} uninstall
|
184
wmusic/README
Normal file
184
wmusic/README
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
wmusic
|
||||||
|
by Hadess <hadess@hadess.net>
|
||||||
|
maintained by John <john+wmusic@jtan.com>
|
||||||
|
|
||||||
|
wmusic is a dockapp that remote-controls xmms. Here is a list of the features:
|
||||||
|
|
||||||
|
- VCR style controls including fast rewind and fast forward
|
||||||
|
- Time and Playlist position display
|
||||||
|
- Super stylee rotating arrow
|
||||||
|
- Hiding of the xmms windows (on startup and through middle-click)
|
||||||
|
|
||||||
|
- AfterStep users, add this line to your ~/GNUstep/Library/AfterStep/wharf:
|
||||||
|
*Wharf wmusic - Swallow "wmusic" wmusic -w &
|
||||||
|
- Sawfish users, grab Tiger-T's DockMill theme, and apply it to the running
|
||||||
|
dockapp with the -w flag on. See the theme's README for more details.
|
||||||
|
- KDE users can use the "Dock Application Bar" to dock wmusic, don't forget
|
||||||
|
the -w flag to launch wmusic. Right-Click on Kicker, then pick:
|
||||||
|
Add->Extension->Dock Application Bar
|
||||||
|
|
||||||
|
http://home.jtan.com/~john/index.shtml?software.shtml
|
||||||
|
|
||||||
|
Building
|
||||||
|
--------
|
||||||
|
|
||||||
|
Requirements:
|
||||||
|
- xmms >= 1.0.0 and all the appropriate devel packages (glib,
|
||||||
|
gtk+, xmms, glibc...)
|
||||||
|
- xmms > 1.2.4 if you have problems with the prefs window popping up
|
||||||
|
|
||||||
|
Simply type:
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
URLs
|
||||||
|
----
|
||||||
|
XMMS: http://xmms.org
|
||||||
|
DockMill: http://tigert.gimp.org/files/sawmill-themes/DockMill.tar.gz
|
||||||
|
|
||||||
|
Changelog
|
||||||
|
---------
|
||||||
|
- 1.5.0
|
||||||
|
* Added -R option to start xmms when wmusic is started, and to exit wmusic
|
||||||
|
when xmms exits.
|
||||||
|
(Thanks to Mateusz Greszta)
|
||||||
|
* Incremented the minor version number, getting sick of 1.4.xx releases :)
|
||||||
|
|
||||||
|
- 1.4.14
|
||||||
|
* Fixed the configure/manpage issue from 1.4.13 :)
|
||||||
|
|
||||||
|
- 1.4.13
|
||||||
|
* Added Russian/Ukrainian glyph support.
|
||||||
|
(Thanks to Alexey Voinov <voins@voins.program.ru>,
|
||||||
|
Michael Shigorin <mike@altlinux.ru>)
|
||||||
|
|
||||||
|
- 1.4.12
|
||||||
|
* Added patch to make sure xmms is running before calling some functions.
|
||||||
|
(Thanks to Michael Cohrs <<michael@cohrs.de>)
|
||||||
|
* Added patch to fix volume slider overdrawing.
|
||||||
|
(Thanks to Zdik Kudrle <zdik.kudrle@borg.cz>)
|
||||||
|
* Added patch to treat main window just like playlist, equalizer, with regard
|
||||||
|
to visibility after right-clicking the wmusic app.
|
||||||
|
(Thanks to Nicolas Hinz <nicolas-hinz@gmx.de>)
|
||||||
|
|
||||||
|
- 1.4.11
|
||||||
|
* Added patch to show volume slider (-b flag), allowing volume control
|
||||||
|
without a scroll mouse.
|
||||||
|
(Thanks to Alessandro Budai <budai@ingsun1.univ.trieste.it>)
|
||||||
|
|
||||||
|
- 1.4.10
|
||||||
|
* Added patch to fix segfaults caused by wrong size of displayRect array
|
||||||
|
(Thanks to Alexey Voinov <voins@voins.program.ru>)
|
||||||
|
|
||||||
|
- 1.4.9
|
||||||
|
* Added patch to stop rotating arrow when XMMS is paused (-a flag)
|
||||||
|
* Added patch to switch between time left and time elapsed display
|
||||||
|
(-l flag to start with time left)
|
||||||
|
* Changed docs to reflect new maintainership (John Chapin)
|
||||||
|
|
||||||
|
- 1.4.8
|
||||||
|
* Corrected e-mail addresses
|
||||||
|
|
||||||
|
- 1.4.7
|
||||||
|
* KDE support removed (maybe) because it breaks everything else (should fix
|
||||||
|
the "buttons not clickable" problem)
|
||||||
|
|
||||||
|
- 1.4.6
|
||||||
|
* Non-GNU make fixes (thanks to Eric Melville <eric@freebsd.org>)
|
||||||
|
* KDE support in libdockapp (thanks to Alain Schroeder <alain@mini.gt.owl.de>)
|
||||||
|
* KDE testing and README update (thanks to Eric Christopherson from #kde-users)
|
||||||
|
|
||||||
|
- 1.4.5
|
||||||
|
* Fixed another leak (will it ever stop ?)
|
||||||
|
(thanks to Ulrich Seidl for finding it out)
|
||||||
|
|
||||||
|
- 1.4.4
|
||||||
|
* Fixed a leak (thanks to Gerry OKeefe for reporting this one)
|
||||||
|
|
||||||
|
- 1.4.3
|
||||||
|
* Fixed volume flag to be -V (collided with -v/--version)
|
||||||
|
* Updated man page
|
||||||
|
* Fixed a leak
|
||||||
|
* Fixed title "freezing" when emptying the playlist
|
||||||
|
* Changed the separator for the scrolling title (and the code as well)
|
||||||
|
* Added ()*/ to the recognized characters
|
||||||
|
* Fixed a segfault related to the new separator code
|
||||||
|
|
||||||
|
- 1.4.2
|
||||||
|
* Updated manpage
|
||||||
|
* Added manpage by Alain Schroeder
|
||||||
|
* Added -t flag to start with title display (idea by Antoine Labour as well)
|
||||||
|
* Added apostroph in title (Antoine Labour <antoine.labour@m4x.org>)
|
||||||
|
* Fixed 2 segfaults (title related again)
|
||||||
|
|
||||||
|
- 1.4.1
|
||||||
|
* Fixed wmusic.spec.in (thanks to g0sh on OPN)
|
||||||
|
* Really fixed the title display bugs
|
||||||
|
* Make sure to use -w to run it under window managers other than Window Maker
|
||||||
|
* Made the title scrolling speed slower
|
||||||
|
|
||||||
|
- 1.4
|
||||||
|
* Debian fixes and maintainership (Alain Schroeder)
|
||||||
|
* Wheel scroll support for volume change (thanks Marius Aamodt Eriksen)
|
||||||
|
* Added scroll title display, had to rework the GUI a bit
|
||||||
|
|
||||||
|
- 1.2.6
|
||||||
|
* Added hours:minutes display for songs longer than 99 minutes and 59 seconds
|
||||||
|
(idea by Scott Mc Dermott <scottm@octaldream.com>)
|
||||||
|
* Now upstream Debian package
|
||||||
|
|
||||||
|
- 1.2.5
|
||||||
|
* Changed the size of the dockapp to 64x64, now Sawfish compatible
|
||||||
|
|
||||||
|
- 1.2.4
|
||||||
|
* Included libdockapp inside the archive, it is not needed to download and
|
||||||
|
install it separately.
|
||||||
|
* Added AfterStep compatibility
|
||||||
|
|
||||||
|
- 1.2.3
|
||||||
|
* Removed -n option (don't run XMMS on startup)
|
||||||
|
* Added -r option (run XMMS on startup)
|
||||||
|
* Double-click on the display will now run XMMS
|
||||||
|
* Added more differences between XMMS not playing / XMMS not running
|
||||||
|
|
||||||
|
- 1.2.2
|
||||||
|
* fixed a crazy cpu bug, threads are no more used
|
||||||
|
|
||||||
|
- 1.2.1
|
||||||
|
* changed the name from wmplay to wmusic
|
||||||
|
* fixed a bug (uninitialized var. was used on some circumstances)
|
||||||
|
* removed the close-on-xmms-close (click on the display to run xmms)
|
||||||
|
* added -n switch to avoid running xmms on startup
|
||||||
|
|
||||||
|
- 1.2
|
||||||
|
* a little bug fix for transparency
|
||||||
|
* added autoconf support, thanks to Logan
|
||||||
|
|
||||||
|
- 1.1.9
|
||||||
|
* Added -x switch for wmxmms like mouse-bindings
|
||||||
|
(lo_tek wanted it :P)
|
||||||
|
|
||||||
|
- 1.1.8
|
||||||
|
* Now multi-threaded, so that the display is independant of the rest
|
||||||
|
|
||||||
|
- 1.1.0
|
||||||
|
* Rewrote to use libdockapp rather than gdk
|
||||||
|
|
||||||
|
- 0.9.9
|
||||||
|
* Added Stereo/Mono display
|
||||||
|
* Added kbps display
|
||||||
|
|
||||||
|
- 0.9
|
||||||
|
* Added time and pos display, and the rotating arrow
|
||||||
|
* Switched the building to a Makefile
|
||||||
|
|
||||||
|
- 0.1
|
||||||
|
* First version, only the bottom buttons are working
|
||||||
|
|
||||||
|
Copyright
|
||||||
|
---------
|
||||||
|
|
||||||
|
Plain and simple GPL version 2.0, see COPYING for more infos
|
||||||
|
- based on design work of Antoine Nulle and Martjin Pieterse
|
||||||
|
- double-click code from WMpop by Jérôme SAUTRET (jerome@linuxfan.com)
|
1708
wmusic/configure
vendored
Executable file
1708
wmusic/configure
vendored
Executable file
File diff suppressed because it is too large
Load diff
63
wmusic/configure.in
Normal file
63
wmusic/configure.in
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
dnl configure.in for wmusic
|
||||||
|
|
||||||
|
AC_PREREQ(2.12)
|
||||||
|
|
||||||
|
AC_INIT(src/wmusic.c)
|
||||||
|
|
||||||
|
VERSION=1.5.0
|
||||||
|
PACKAGE=wmusic
|
||||||
|
echo
|
||||||
|
echo "Configuring package: $PACKAGE-$VERSION"
|
||||||
|
echo
|
||||||
|
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_CONFIG_HEADER(src/config.h:src/config.h.in)
|
||||||
|
|
||||||
|
AC_PATH_X
|
||||||
|
|
||||||
|
dnl AC_CHECK_LIB(dockapp, DAProcessActionRects, ,
|
||||||
|
dnl echo
|
||||||
|
dnl echo "Error: libdockapp was not found"
|
||||||
|
dnl echo
|
||||||
|
dnl exit 1)
|
||||||
|
|
||||||
|
AC_CHECK_LIB(Xxf86vm,XF86VidModeQueryExtension,[
|
||||||
|
AC_DEFINE(XF86VIDMODE,1,[XF86VidMode extension is present])
|
||||||
|
VM_LIBS="-lXxf86vm"],,-L$x_libraries -lXext)
|
||||||
|
|
||||||
|
AC_CHECK_LIB(Xxf86dga,XF86DGAQueryExtension,[
|
||||||
|
AC_DEFINE(XF86DGA,1,[XF86DGA extension is present])
|
||||||
|
DGA_LIBS="-lXxf86dga"],,-L$x_libraries -lXext)
|
||||||
|
|
||||||
|
AC_PATH_PROG(PATH_XMMSCONFIG,xmms-config, no,
|
||||||
|
$PATH:/usr/X11R6/bin:/usr/local/bin)
|
||||||
|
|
||||||
|
if test $PATH_XMMSCONFIG = "no"; then
|
||||||
|
echo
|
||||||
|
echo "It appears as if Xmms (X Multimedia System - http://www.xmms.org)"
|
||||||
|
echo "is not installed on your computer."
|
||||||
|
echo
|
||||||
|
echo "If you have Xmms, make sure xmms-config is in your \$PATH"
|
||||||
|
echo
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_PATH_PROG(PATH_GTKCONFIG,gtk-config, no,
|
||||||
|
$PATH:/usr/X11R6/bin:/usr/local/bin)
|
||||||
|
|
||||||
|
if test $PATH_GTKCONFIG = "no"; then
|
||||||
|
echo
|
||||||
|
echo "It appears as if GTK+ - http://www.gtk.org)"
|
||||||
|
echo "is not installed on your computer."
|
||||||
|
echo
|
||||||
|
echo "If you have gtk+, make sure gtk-config is in your \$PATH"
|
||||||
|
echo
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(DGA_LIBS)
|
||||||
|
AC_SUBST(VM_LIBS)
|
||||||
|
AC_SUBST(VERSION)
|
||||||
|
AC_SUBST(PACKAGE)
|
||||||
|
AC_OUTPUT(Makefile wmusic.spec src/Makefile src/version.h)
|
115
wmusic/debian/changelog
Normal file
115
wmusic/debian/changelog
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
wmusic (1.4.10-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Use xlibs-dev as Build-Dep instead of xlibs6-dev (Closes: #170164).
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Fri, 7 Mar 2003 20:45:14 +0100
|
||||||
|
|
||||||
|
wmusic (1.4.10-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New Upstream (Fixes Segfaults with gcc-3.0; New Upstream Address)
|
||||||
|
* Changed all addresses in debian/copyright and debian/wmusic.1
|
||||||
|
* Fix hiding of xmms on startup (Closes: #166529).
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Wed, 30 Oct 2002 01:30:27 +0100
|
||||||
|
|
||||||
|
wmusic (1.4.9-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New Upstream (It now includes the arrow-patch from 1.4.7-1 and adds the
|
||||||
|
possibility, to choose if the time left or time elapsed is displayed).
|
||||||
|
* Upped Standart Version.
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Fri, 22 Feb 2002 12:34:49 +0100
|
||||||
|
|
||||||
|
wmusic (1.4.7-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New Upstream (Only changes to included libdockapp, which we don't use
|
||||||
|
since there is an debian package)
|
||||||
|
* Modified patch from (1.2.6-3 / #86939 / Spinning arrow when stopped)
|
||||||
|
to work only, if command line argument -a or --rotate-arrow is given.
|
||||||
|
Upstream is unresponsive at the moment, so I'm releasing this now.
|
||||||
|
* Changed Manpage to reflect the new patch.
|
||||||
|
* Changed debian menu entry to start with --rotate-arrow by default, too
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Thu, 2 Aug 2001 20:22:39 +0200
|
||||||
|
|
||||||
|
wmusic (1.4.6-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New Upstream (No real change - only a few changes to README and
|
||||||
|
Makefile for *BSD)
|
||||||
|
* Linked against libdockapp again - the maintainer included my fixes
|
||||||
|
and fixed my fixes again ;)
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Tue, 24 Apr 2001 19:21:37 +0200
|
||||||
|
|
||||||
|
wmusic (1.4.5-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Patched included libdockapp, to work correctly with KDE. (closes: #89516)
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Sun, 15 Apr 2001 01:59:11 +0200
|
||||||
|
|
||||||
|
wmusic (1.4.5-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New Upstream.
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Mon, 11 Apr 2001 13:50:32 +0200
|
||||||
|
|
||||||
|
wmusic (1.4.4-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fixed menu entry and added a long description.
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Mon, 9 Apr 2001 15:52:48 +0200
|
||||||
|
|
||||||
|
wmusic (1.4.4-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New Upstream, fixes Memory Leak and closes #91826
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Mon, 2 Apr 2001 00:30:38 +0200
|
||||||
|
|
||||||
|
wmusic (1.4.3-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New Upstream
|
||||||
|
* Changed back to libdockapp delivered with wmusic, since it
|
||||||
|
seem to handle some stuff right, this might close 89516, maybe
|
||||||
|
not...
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Wed, 16 Mar 2001 11:29:58 +0100
|
||||||
|
|
||||||
|
wmusic (1.4.2-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New Upstream
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Mon, 12 Mar 2001 10:46:57 +0100
|
||||||
|
|
||||||
|
wmusic (1.4.1-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New Upstream
|
||||||
|
* Upgraded Standarts Version
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Sun, 11 Mar 2001 16:47:29 +0100
|
||||||
|
|
||||||
|
wmusic (1.2.6-4) unstable; urgency=low
|
||||||
|
|
||||||
|
* Wrote a manpage, closes #87140
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Tue, 27 Feb 2001 11:29:12 +0100
|
||||||
|
|
||||||
|
wmusic (1.2.6-3) unstable; urgency=low
|
||||||
|
|
||||||
|
* Now wmusic´s arrow doesn´t spin, if xmms is paused, closes #86939
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Thu, 22 Feb 2001 05:17:45 +0100
|
||||||
|
|
||||||
|
wmusic (1.2.6-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Changed section to sound
|
||||||
|
* Fixed dependencies and compiled wmusic against libdockapp
|
||||||
|
instead of just linking it (changed src/Makefile.in too to this),
|
||||||
|
closes Bug#86101
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Fri, 16 Feb 2001 17:09:44 +0100
|
||||||
|
|
||||||
|
wmusic (1.2.6-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* Initial Release, closes Bug#85266.
|
||||||
|
|
||||||
|
-- Alain Schroeder <alain@debian.org> Sun, 14 Jan 2001 16:23:10 +0000
|
14
wmusic/debian/control
Normal file
14
wmusic/debian/control
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
Source: wmusic
|
||||||
|
Section: sound
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Alain Schroeder <alain@debian.org>
|
||||||
|
Build-Depends: xmms-dev, xlibs-dev, libgtk1.2-dev, debhelper, libdockapp-dev
|
||||||
|
Standards-Version: 3.5.6.0
|
||||||
|
|
||||||
|
Package: wmusic
|
||||||
|
Architecture: any
|
||||||
|
Depends: ${shlibs:Depends}
|
||||||
|
Description: a remote-control DockApp for xmms
|
||||||
|
wmusic is a dockapp that remote-controls xmms. Features include VCR-style
|
||||||
|
controls, Time and Playlist display, supa stylee rotating arrow, hiding of
|
||||||
|
the xmms windows and reactive interface.
|
14
wmusic/debian/copyright
Normal file
14
wmusic/debian/copyright
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
This package was debianized by Bastien Nocera <hadess@hadess.net> on
|
||||||
|
Sun, 14 Jan 2001 16:23:10 +0000 and is now maintained by Alain Schröder
|
||||||
|
<alain@debian.org>.
|
||||||
|
|
||||||
|
It was downloaded from http://home.jtan.com/~john/wmusic/
|
||||||
|
|
||||||
|
Upstream Author(s): John Chapin <john+wmusic@jtan.com>
|
||||||
|
|
||||||
|
Copyright:
|
||||||
|
You are free to distribute this software under the terms of
|
||||||
|
the GNU General Public License.
|
||||||
|
|
||||||
|
On Debian systems, the complete text of the GNU General Public
|
||||||
|
License can be found in /usr/share/common-licenses/GPL file.
|
1
wmusic/debian/docs
Normal file
1
wmusic/debian/docs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
README
|
3
wmusic/debian/menu
Normal file
3
wmusic/debian/menu
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
?package(wmusic):needs=X11 section=Apps/Sound\
|
||||||
|
title="wmusic" command="/usr/bin/wmusic --rotate-arrow" \
|
||||||
|
description="A remote-control DockApp for XMMS"
|
78
wmusic/debian/rules
Executable file
78
wmusic/debian/rules
Executable file
|
@ -0,0 +1,78 @@
|
||||||
|
#!/usr/bin/make -f
|
||||||
|
# Sample debian/rules that uses debhelper.
|
||||||
|
# GNU copyright 1997 to 1999 by Joey Hess.
|
||||||
|
|
||||||
|
# Uncomment this to turn on verbose mode.
|
||||||
|
#export DH_VERBOSE=1
|
||||||
|
|
||||||
|
# This is the debhelper compatability version to use.
|
||||||
|
export DH_COMPAT=1
|
||||||
|
|
||||||
|
build: build-stamp
|
||||||
|
build-stamp:
|
||||||
|
dh_testdir
|
||||||
|
|
||||||
|
./configure --prefix=/usr/X11R6 --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info
|
||||||
|
# Add here commands to compile the package.
|
||||||
|
$(MAKE)
|
||||||
|
|
||||||
|
touch build-stamp
|
||||||
|
|
||||||
|
clean:
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
rm -f build-stamp
|
||||||
|
|
||||||
|
# Add here commands to clean up after the build process.
|
||||||
|
-$(MAKE) distclean
|
||||||
|
|
||||||
|
-rm config.log config.status config.cache Makefile
|
||||||
|
dh_clean
|
||||||
|
|
||||||
|
install: build
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
dh_clean -k
|
||||||
|
dh_installdirs
|
||||||
|
|
||||||
|
# Add here commands to install the package into debian/tmp.
|
||||||
|
$(MAKE) install PREFIX=`pwd`/debian/tmp/usr
|
||||||
|
|
||||||
|
|
||||||
|
# Build architecture-independent files here.
|
||||||
|
binary-indep: build install
|
||||||
|
# We have nothing to do by default.
|
||||||
|
|
||||||
|
# Build architecture-dependent files here.
|
||||||
|
binary-arch: build install
|
||||||
|
# dh_testversion
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
# dh_installdebconf
|
||||||
|
dh_installdocs
|
||||||
|
dh_installexamples
|
||||||
|
dh_installmenu
|
||||||
|
# dh_installemacsen
|
||||||
|
# dh_installpam
|
||||||
|
# dh_installinit
|
||||||
|
dh_installcron
|
||||||
|
dh_installmanpages
|
||||||
|
dh_installinfo
|
||||||
|
# dh_undocumented wmusic.1
|
||||||
|
dh_installchangelogs
|
||||||
|
dh_link
|
||||||
|
dh_strip
|
||||||
|
dh_compress
|
||||||
|
dh_fixperms
|
||||||
|
# You may want to make some executables suid here.
|
||||||
|
# dh_suidregister
|
||||||
|
# dh_makeshlibs
|
||||||
|
dh_installdeb
|
||||||
|
# dh_perl
|
||||||
|
dh_shlibdeps
|
||||||
|
dh_gencontrol
|
||||||
|
dh_md5sums
|
||||||
|
dh_builddeb
|
||||||
|
|
||||||
|
binary: binary-indep binary-arch
|
||||||
|
.PHONY: build clean binary-indep binary-arch binary install
|
73
wmusic/debian/wmusic.1
Normal file
73
wmusic/debian/wmusic.1
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
.TH WMUSIC 1 "February 22, 2002"
|
||||||
|
.SH NAME
|
||||||
|
wmusic \- a remote-control DockApp for xmms
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B wmusic
|
||||||
|
.RI [ options ]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This manual page documents briefly the
|
||||||
|
.B wmusic command.
|
||||||
|
\fBwmusic\fP is a dockapp that remote-controls xmms. Features include
|
||||||
|
VCR-style controls, Time and Playlist display, supa stylee rotating
|
||||||
|
arrow, hiding of the xmms windows and reactive interface.
|
||||||
|
.SH OPTIONS
|
||||||
|
These programs follow the usual GNU command line syntax, with long
|
||||||
|
options starting with two dashes (`-').
|
||||||
|
A summary of options is included below.
|
||||||
|
For a complete description, see the Info files.
|
||||||
|
.TP
|
||||||
|
.B \-h, \-\-help
|
||||||
|
Show summary of options.
|
||||||
|
.TP
|
||||||
|
.B \-v, \-\-version
|
||||||
|
Show version of program.
|
||||||
|
.TP
|
||||||
|
.B \-c, \-\-command <program>
|
||||||
|
Use <program> as the command to launch XMMS. You can start XMMS
|
||||||
|
by a double-click into the status part of \fBwmusic\fP.
|
||||||
|
.TP
|
||||||
|
.B \-d, \-\-display host:display[.screen]
|
||||||
|
specifies the X server to contact; see X(1).
|
||||||
|
.TP
|
||||||
|
.B \-r, \-\-run
|
||||||
|
Run XMMS on startup.
|
||||||
|
.TP
|
||||||
|
.B \-R, \-\-run\-exclusive
|
||||||
|
Run XMMS on startup, exit when xmms exits.
|
||||||
|
.TP
|
||||||
|
.B \-s, \-\-session <number>
|
||||||
|
Wich XMMS Session to use.
|
||||||
|
.TP
|
||||||
|
.B \-t, \-\-title
|
||||||
|
Shows title instead of kbps by default.
|
||||||
|
.TP
|
||||||
|
.B \-u, \-\-hide
|
||||||
|
Hide XMMS windows on startup.
|
||||||
|
.TP
|
||||||
|
.B \-V, \-\-volume
|
||||||
|
Stepping of the wheel volume control (in percent).
|
||||||
|
.TP
|
||||||
|
.B \-x, \-\-wmxmms
|
||||||
|
Use wmxmms-like show and hide. Just hide the main XMMS window.
|
||||||
|
If you do not use this parameter, \fBwmusic\fP show and hide
|
||||||
|
the main, playlist and equaliser windows. You can toggle the hide
|
||||||
|
function by pressing with the middle button into the status part of
|
||||||
|
\fBwmusic\fP.
|
||||||
|
.TP
|
||||||
|
.B \-w, \-\-windowed
|
||||||
|
Run in windowed mode. Use this, if you want to run \fBwmusic\fP in
|
||||||
|
the AfterStep wharf.
|
||||||
|
.TP
|
||||||
|
.B \-a, \-\-rotate-arrow
|
||||||
|
Stop the rotating arrow when \fBwmusic\fP is paused.
|
||||||
|
.TP
|
||||||
|
.B \-l, \-\-time-left
|
||||||
|
Start \fBwmusic\fP with the display showing time left instead of time
|
||||||
|
elapsed.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR xmms (1x), wmaker (1x)
|
||||||
|
.SH AUTHOR
|
||||||
|
wmusic was originally written by Bastien Nocera <hadess@hadess.net> and
|
||||||
|
it is now maintained by John Chapin <john+wmusic@jtan.com>.
|
||||||
|
This manual page was written by Alain Schroeder <alain@debian.org>,
|
||||||
|
for the Debian GNU/Linux system (but may be used by others).
|
250
wmusic/install-sh
Normal file
250
wmusic/install-sh
Normal file
|
@ -0,0 +1,250 @@
|
||||||
|
#! /bin/sh
|
||||||
|
#
|
||||||
|
# install - install a program, script, or datafile
|
||||||
|
# This comes from X11R5 (mit/util/scripts/install.sh).
|
||||||
|
#
|
||||||
|
# Copyright 1991 by the Massachusetts Institute of Technology
|
||||||
|
#
|
||||||
|
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
# documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
# the above copyright notice appear in all copies and that both that
|
||||||
|
# copyright notice and this permission notice appear in supporting
|
||||||
|
# documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
# publicity pertaining to distribution of the software without specific,
|
||||||
|
# written prior permission. M.I.T. makes no representations about the
|
||||||
|
# suitability of this software for any purpose. It is provided "as is"
|
||||||
|
# without express or implied warranty.
|
||||||
|
#
|
||||||
|
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||||
|
# `make' implicit rules from creating a file called install from it
|
||||||
|
# when there is no Makefile.
|
||||||
|
#
|
||||||
|
# This script is compatible with the BSD install script, but was written
|
||||||
|
# from scratch. It can only install one file at a time, a restriction
|
||||||
|
# shared with many OS's install programs.
|
||||||
|
|
||||||
|
|
||||||
|
# set DOITPROG to echo to test this script
|
||||||
|
|
||||||
|
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||||
|
doit="${DOITPROG-}"
|
||||||
|
|
||||||
|
|
||||||
|
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||||
|
|
||||||
|
mvprog="${MVPROG-mv}"
|
||||||
|
cpprog="${CPPROG-cp}"
|
||||||
|
chmodprog="${CHMODPROG-chmod}"
|
||||||
|
chownprog="${CHOWNPROG-chown}"
|
||||||
|
chgrpprog="${CHGRPPROG-chgrp}"
|
||||||
|
stripprog="${STRIPPROG-strip}"
|
||||||
|
rmprog="${RMPROG-rm}"
|
||||||
|
mkdirprog="${MKDIRPROG-mkdir}"
|
||||||
|
|
||||||
|
transformbasename=""
|
||||||
|
transform_arg=""
|
||||||
|
instcmd="$mvprog"
|
||||||
|
chmodcmd="$chmodprog 0755"
|
||||||
|
chowncmd=""
|
||||||
|
chgrpcmd=""
|
||||||
|
stripcmd=""
|
||||||
|
rmcmd="$rmprog -f"
|
||||||
|
mvcmd="$mvprog"
|
||||||
|
src=""
|
||||||
|
dst=""
|
||||||
|
dir_arg=""
|
||||||
|
|
||||||
|
while [ x"$1" != x ]; do
|
||||||
|
case $1 in
|
||||||
|
-c) instcmd="$cpprog"
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-d) dir_arg=true
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-m) chmodcmd="$chmodprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-o) chowncmd="$chownprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-g) chgrpcmd="$chgrpprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-s) stripcmd="$stripprog"
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
*) if [ x"$src" = x ]
|
||||||
|
then
|
||||||
|
src=$1
|
||||||
|
else
|
||||||
|
# this colon is to work around a 386BSD /bin/sh bug
|
||||||
|
:
|
||||||
|
dst=$1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ x"$src" = x ]
|
||||||
|
then
|
||||||
|
echo "install: no input file specified"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]; then
|
||||||
|
dst=$src
|
||||||
|
src=""
|
||||||
|
|
||||||
|
if [ -d $dst ]; then
|
||||||
|
instcmd=:
|
||||||
|
else
|
||||||
|
instcmd=mkdir
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
|
||||||
|
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||||
|
# might cause directories to be created, which would be especially bad
|
||||||
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
|
||||||
|
if [ -f $src -o -d $src ]
|
||||||
|
then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
echo "install: $src does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dst" = x ]
|
||||||
|
then
|
||||||
|
echo "install: no destination specified"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If destination is a directory, append the input filename; if your system
|
||||||
|
# does not like double slashes in filenames, you may need to add some logic
|
||||||
|
|
||||||
|
if [ -d $dst ]
|
||||||
|
then
|
||||||
|
dst="$dst"/`basename $src`
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
## this sed command emulates the dirname command
|
||||||
|
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||||
|
|
||||||
|
# Make sure that the destination directory exists.
|
||||||
|
# this part is taken from Noah Friedman's mkinstalldirs script
|
||||||
|
|
||||||
|
# Skip lots of stat calls in the usual case.
|
||||||
|
if [ ! -d "$dstdir" ]; then
|
||||||
|
defaultIFS='
|
||||||
|
'
|
||||||
|
IFS="${IFS-${defaultIFS}}"
|
||||||
|
|
||||||
|
oIFS="${IFS}"
|
||||||
|
# Some sh's can't handle IFS=/ for some reason.
|
||||||
|
IFS='%'
|
||||||
|
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||||
|
IFS="${oIFS}"
|
||||||
|
|
||||||
|
pathcomp=''
|
||||||
|
|
||||||
|
while [ $# -ne 0 ] ; do
|
||||||
|
pathcomp="${pathcomp}${1}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [ ! -d "${pathcomp}" ] ;
|
||||||
|
then
|
||||||
|
$mkdirprog "${pathcomp}"
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
pathcomp="${pathcomp}/"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]
|
||||||
|
then
|
||||||
|
$doit $instcmd $dst &&
|
||||||
|
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
|
||||||
|
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
|
||||||
|
else
|
||||||
|
|
||||||
|
# If we're going to rename the final executable, determine the name now.
|
||||||
|
|
||||||
|
if [ x"$transformarg" = x ]
|
||||||
|
then
|
||||||
|
dstfile=`basename $dst`
|
||||||
|
else
|
||||||
|
dstfile=`basename $dst $transformbasename |
|
||||||
|
sed $transformarg`$transformbasename
|
||||||
|
fi
|
||||||
|
|
||||||
|
# don't allow the sed command to completely eliminate the filename
|
||||||
|
|
||||||
|
if [ x"$dstfile" = x ]
|
||||||
|
then
|
||||||
|
dstfile=`basename $dst`
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make a temp file name in the proper directory.
|
||||||
|
|
||||||
|
dsttmp=$dstdir/#inst.$$#
|
||||||
|
|
||||||
|
# Move or copy the file name to the temp name
|
||||||
|
|
||||||
|
$doit $instcmd $src $dsttmp &&
|
||||||
|
|
||||||
|
trap "rm -f ${dsttmp}" 0 &&
|
||||||
|
|
||||||
|
# and set any options; do chmod last to preserve setuid bits
|
||||||
|
|
||||||
|
# If any of these fail, we abort the whole thing. If we want to
|
||||||
|
# ignore errors from any of these, just make sure not to ignore
|
||||||
|
# errors from the above "$doit $instcmd $src $dsttmp" command.
|
||||||
|
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
|
||||||
|
|
||||||
|
# Now rename the file to the real destination.
|
||||||
|
|
||||||
|
$doit $rmcmd -f $dstdir/$dstfile &&
|
||||||
|
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
||||||
|
|
||||||
|
fi &&
|
||||||
|
|
||||||
|
|
||||||
|
exit 0
|
3
wmusic/libdockapp/AUTHORS
Normal file
3
wmusic/libdockapp/AUTHORS
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Alfredo K. Kojima <kojima@windowmaker.org>
|
||||||
|
Pascal G. Hofstee <daeron@windowmaker.org>
|
||||||
|
|
19
wmusic/libdockapp/COPYING
Normal file
19
wmusic/libdockapp/COPYING
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) 1999 Alfredo K. Kojima
|
||||||
|
|
||||||
|
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 or substantial portions of the Software.
|
||||||
|
|
||||||
|
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
|
||||||
|
AUTHOR 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.
|
||||||
|
|
48
wmusic/libdockapp/README
Normal file
48
wmusic/libdockapp/README
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
DockApp Making Standard Library
|
||||||
|
|
||||||
|
Alfredo K. Kojima <kojima@windowmaker.org>
|
||||||
|
Pascal G. Hofstee <daeron@windowmaker.org>
|
||||||
|
|
||||||
|
...............................................................................
|
||||||
|
|
||||||
|
You must have the libXpm library installed and the shape extension supported
|
||||||
|
by your X server to be able to build and install libdockapp.
|
||||||
|
|
||||||
|
To compile libDockApp enter the libdockapp directory and type:
|
||||||
|
|
||||||
|
./configure
|
||||||
|
make install
|
||||||
|
|
||||||
|
|
||||||
|
The API is described in dockapp.h wmtest.c is a sample program
|
||||||
|
that shows the library usage.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
License:
|
||||||
|
|
||||||
|
Copyright (c) 1999, 2000 Alfredo K. Kojima, Pascal Hofstee
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
3. The name of the author may not be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
52
wmusic/libdockapp/dacallback.c
Normal file
52
wmusic/libdockapp/dacallback.c
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Alfredo K. Kojima
|
||||||
|
*
|
||||||
|
* 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 or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* AUTHOR 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.
|
||||||
|
|
||||||
|
* $Id: dacallback.c,v 1.1.1.1 2004/02/27 02:53:10 john Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dockapp.h"
|
||||||
|
|
||||||
|
extern DACallbacks d_callbacks;
|
||||||
|
extern int d_timeout;
|
||||||
|
|
||||||
|
void
|
||||||
|
DASetCallbacks(DACallbacks *callbacks)
|
||||||
|
{
|
||||||
|
long mask = 0;
|
||||||
|
|
||||||
|
d_callbacks = *callbacks;
|
||||||
|
|
||||||
|
if (callbacks->buttonPress)
|
||||||
|
mask |= ButtonPressMask;
|
||||||
|
if (callbacks->buttonRelease)
|
||||||
|
mask |= ButtonReleaseMask;
|
||||||
|
if (callbacks->motion)
|
||||||
|
mask |= PointerMotionMask;
|
||||||
|
|
||||||
|
XSelectInput(DADisplay, DAWindow, mask);
|
||||||
|
XFlush(DADisplay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DASetTimeout(int miliseconds)
|
||||||
|
{
|
||||||
|
d_timeout = miliseconds;
|
||||||
|
}
|
||||||
|
|
45
wmusic/libdockapp/dacolor.c
Normal file
45
wmusic/libdockapp/dacolor.c
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Alfredo K. Kojima
|
||||||
|
*
|
||||||
|
* 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 or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* AUTHOR 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.
|
||||||
|
|
||||||
|
* $Id: dacolor.c,v 1.1.1.1 2004/02/27 02:53:10 john Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dockapp.h"
|
||||||
|
|
||||||
|
extern char *progName;
|
||||||
|
|
||||||
|
unsigned long
|
||||||
|
DAGetColor(char *colorName)
|
||||||
|
{
|
||||||
|
XColor color;
|
||||||
|
|
||||||
|
if (!XParseColor(DADisplay,
|
||||||
|
DefaultColormap(DADisplay, DefaultScreen(DADisplay)),
|
||||||
|
colorName, &color))
|
||||||
|
printf("%s: could not parse color %s\n", progName, colorName), exit(1);
|
||||||
|
|
||||||
|
if (!XAllocColor(DADisplay, DefaultColormap(DADisplay, DefaultScreen(DADisplay)), &color)) {
|
||||||
|
printf("%s: could not allocate color %s. Using black\n", progName, colorName);
|
||||||
|
return BlackPixel(DADisplay, DefaultScreen(DADisplay));
|
||||||
|
}
|
||||||
|
|
||||||
|
return color.pixel;
|
||||||
|
}
|
||||||
|
|
122
wmusic/libdockapp/daevent.c
Normal file
122
wmusic/libdockapp/daevent.c
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Alfredo K. Kojima
|
||||||
|
*
|
||||||
|
* 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 or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* AUTHOR 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.
|
||||||
|
|
||||||
|
* $Id: daevent.c,v 1.1.1.1 2004/02/27 02:53:10 john Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include "dockapp.h"
|
||||||
|
|
||||||
|
extern Window DALeader;
|
||||||
|
extern DACallbacks d_callbacks;
|
||||||
|
extern int d_timeout;
|
||||||
|
|
||||||
|
Bool
|
||||||
|
DAProcessEvent(XEvent *event)
|
||||||
|
{
|
||||||
|
if ((event->xany.window != DAWindow) && (event->xany.window != DALeader))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
switch (event->type) {
|
||||||
|
case DestroyNotify:
|
||||||
|
if (d_callbacks.destroy)
|
||||||
|
(*d_callbacks.destroy)();
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
case ButtonPress:
|
||||||
|
if (d_callbacks.buttonPress)
|
||||||
|
(*d_callbacks.buttonPress)(event->xbutton.button,
|
||||||
|
event->xbutton.state,
|
||||||
|
event->xbutton.x,
|
||||||
|
event->xbutton.y);
|
||||||
|
break;
|
||||||
|
case ButtonRelease:
|
||||||
|
if (d_callbacks.buttonRelease)
|
||||||
|
(*d_callbacks.buttonRelease)(event->xbutton.button,
|
||||||
|
event->xbutton.state,
|
||||||
|
event->xbutton.x,
|
||||||
|
event->xbutton.y);
|
||||||
|
break;
|
||||||
|
case MotionNotify:
|
||||||
|
if (d_callbacks.motion)
|
||||||
|
(*d_callbacks.motion)(event->xmotion.x,
|
||||||
|
event->xmotion.y);
|
||||||
|
break;
|
||||||
|
case EnterNotify:
|
||||||
|
if (d_callbacks.enter)
|
||||||
|
(*d_callbacks.enter)();
|
||||||
|
break;
|
||||||
|
case LeaveNotify:
|
||||||
|
if (d_callbacks.leave)
|
||||||
|
(*d_callbacks.leave)();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DAEventLoop(void)
|
||||||
|
{
|
||||||
|
XEvent event;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
if (d_timeout >= 0) {
|
||||||
|
if (!DANextEventOrTimeout(&event, d_timeout)) {
|
||||||
|
if (d_callbacks.timeout)
|
||||||
|
(*d_callbacks.timeout)();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
XNextEvent(DADisplay, &event);
|
||||||
|
|
||||||
|
DAProcessEvent(&event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
DANextEventOrTimeout(XEvent *event, unsigned long miliseconds)
|
||||||
|
{
|
||||||
|
struct timeval timeout;
|
||||||
|
fd_set rset;
|
||||||
|
|
||||||
|
XSync(DADisplay, False);
|
||||||
|
if (XPending(DADisplay)) {
|
||||||
|
XNextEvent(DADisplay, event);
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
timeout.tv_sec = miliseconds / 1000;
|
||||||
|
timeout.tv_usec = (miliseconds % 1000) * 1000;
|
||||||
|
|
||||||
|
FD_ZERO(&rset);
|
||||||
|
FD_SET(ConnectionNumber(DADisplay), &rset);
|
||||||
|
|
||||||
|
if (select(ConnectionNumber(DADisplay)+1, &rset, NULL, NULL, &timeout) > 0) {
|
||||||
|
XNextEvent(DADisplay, event);
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
335
wmusic/libdockapp/damain.c
Normal file
335
wmusic/libdockapp/damain.c
Normal file
|
@ -0,0 +1,335 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Alfredo K. Kojima
|
||||||
|
*
|
||||||
|
* 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 or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* AUTHOR 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.
|
||||||
|
|
||||||
|
* $Id: damain.c,v 1.1.1.1 2004/02/27 02:53:10 john Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dockapp.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define MIN(a, b) (a < b ? a : b)
|
||||||
|
|
||||||
|
|
||||||
|
char *progName = NULL;
|
||||||
|
int d_width, d_height;
|
||||||
|
int d_windowed = 0;
|
||||||
|
int d_timeout = 0;
|
||||||
|
DACallbacks d_callbacks = {NULL, NULL, NULL, NULL, NULL, NULL, NULL};
|
||||||
|
|
||||||
|
DARect DANoRect = {0, 0, 0, 0};
|
||||||
|
Display *DADisplay = NULL;
|
||||||
|
Window DALeader = None;
|
||||||
|
Window DAWindow = None;
|
||||||
|
int DADepth = 0;
|
||||||
|
Visual *DAVisual = NULL;
|
||||||
|
GC DAGC = NULL;
|
||||||
|
DARect DAPreferredIconSizes = {-1, -1, 0, 0};
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DAGetDisplay(char *display, int argc, char **argv)
|
||||||
|
{
|
||||||
|
progName = argv[0];
|
||||||
|
|
||||||
|
/* Open Connection to X Server */
|
||||||
|
DADisplay = XOpenDisplay(display);
|
||||||
|
if (!DADisplay) {
|
||||||
|
printf("%s: could not open display %s!\n", progName,
|
||||||
|
XDisplayName(display));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DAProposeIconSize(unsigned width, unsigned height)
|
||||||
|
{
|
||||||
|
XIconSize *iconSizes;
|
||||||
|
int nrSizes = 0;
|
||||||
|
|
||||||
|
d_width = width;
|
||||||
|
d_height = height;
|
||||||
|
|
||||||
|
/* Get the nearest allowed icon size if the WM specifies such */
|
||||||
|
iconSizes = XAllocIconSize();
|
||||||
|
if (XGetIconSizes(DADisplay, DefaultRootWindow(DADisplay),
|
||||||
|
&iconSizes, &nrSizes)) {
|
||||||
|
int i;
|
||||||
|
int da = -1;
|
||||||
|
int min_w = -1, min_h = -1;
|
||||||
|
int max_w = 0, max_h = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < nrSizes; i++) {
|
||||||
|
int w1, h1, w, h;
|
||||||
|
|
||||||
|
if ((max_w < iconSizes[i].max_width) ||
|
||||||
|
(max_h < iconSizes[i].max_height)) {
|
||||||
|
max_w = iconSizes[i].max_width;
|
||||||
|
max_h = iconSizes[i].max_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((min_w > iconSizes[i].min_width) ||
|
||||||
|
(min_h > iconSizes[i].min_height) ||
|
||||||
|
(min_w == -1)) {
|
||||||
|
min_w = iconSizes[i].min_width;
|
||||||
|
min_h = iconSizes[i].min_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((width > iconSizes[i].max_width) ||
|
||||||
|
(width < iconSizes[i].min_width) ||
|
||||||
|
(height > iconSizes[i].max_height) ||
|
||||||
|
(height < iconSizes[i].min_height))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
w1 = (iconSizes[i].max_width - width ) % iconSizes[i].width_inc;
|
||||||
|
h1 = (iconSizes[i].max_height - height) % iconSizes[i].height_inc;
|
||||||
|
w = MIN(w1, iconSizes[i].width_inc - w1);
|
||||||
|
h = MIN(h1, iconSizes[i].height_inc - h1);
|
||||||
|
|
||||||
|
if ((w * h < da) || (da == -1)) {
|
||||||
|
d_width = width + w;
|
||||||
|
d_height = height + h;
|
||||||
|
da = w * h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DAPreferredIconSizes.x = min_w;
|
||||||
|
DAPreferredIconSizes.y = min_h;
|
||||||
|
DAPreferredIconSizes.width = max_w;
|
||||||
|
DAPreferredIconSizes.height = max_h;
|
||||||
|
|
||||||
|
if (da == -1) { /* requested size is out of bounds */
|
||||||
|
printf("Warning (%s): requested icon-size (%d x %d) is out of the range "
|
||||||
|
"allowed by the window manager\n",
|
||||||
|
progName, d_width, d_height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
XFree(iconSizes);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DACreateIcon(char *name, unsigned width, unsigned height, int argc, char **argv)
|
||||||
|
{
|
||||||
|
XClassHint *classHint;
|
||||||
|
XWMHints *wmHints;
|
||||||
|
XGCValues gcv;
|
||||||
|
|
||||||
|
|
||||||
|
d_width = width;
|
||||||
|
d_height = height;
|
||||||
|
|
||||||
|
/* Create Windows */
|
||||||
|
DAWindow = XCreateSimpleWindow(DADisplay, DefaultRootWindow(DADisplay),
|
||||||
|
0, 0, width, height, 0, 0, 0);
|
||||||
|
DALeader = XCreateSimpleWindow(DADisplay, DefaultRootWindow(DADisplay),
|
||||||
|
0, 0, 1, 1, 0, 0, 0);
|
||||||
|
|
||||||
|
/* Set ClassHint */
|
||||||
|
if (!(classHint = XAllocClassHint()))
|
||||||
|
printf("%s: can't allocate memory for class hints!\n", progName), exit(1);
|
||||||
|
classHint->res_class = "DockApp";
|
||||||
|
classHint->res_name = name;
|
||||||
|
|
||||||
|
XSetClassHint(DADisplay, DALeader, classHint);
|
||||||
|
XFree(classHint);
|
||||||
|
|
||||||
|
/* Set WMHints */
|
||||||
|
if (!(wmHints = XAllocWMHints()))
|
||||||
|
printf("%s: can't allocate memory for wm hints!\n", progName), exit(1);
|
||||||
|
|
||||||
|
wmHints->flags = IconWindowHint|WindowGroupHint;
|
||||||
|
|
||||||
|
if (!d_windowed) {
|
||||||
|
wmHints->flags |= StateHint;
|
||||||
|
wmHints->initial_state = WithdrawnState;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Hadess
|
||||||
|
{
|
||||||
|
Status status;
|
||||||
|
XTextProperty title;
|
||||||
|
|
||||||
|
status = XStringListToTextProperty(&progName, 1, &title);
|
||||||
|
XSetWMName(DADisplay, DALeader, &title);
|
||||||
|
XSetWMName(DADisplay, DAWindow, &title);
|
||||||
|
// XStoreName(DADisplay, DALeader, progName);
|
||||||
|
// XStoreName(DADisplay, DAWindow, progName);
|
||||||
|
}
|
||||||
|
wmHints->window_group = DALeader;
|
||||||
|
wmHints->icon_window = DAWindow;
|
||||||
|
|
||||||
|
XSetWMHints(DADisplay, DALeader, wmHints);
|
||||||
|
|
||||||
|
/* Set Command to start the app so it can be docked properly */
|
||||||
|
XSetCommand(DADisplay, DALeader, argv, argc);
|
||||||
|
|
||||||
|
DADepth = DefaultDepth(DADisplay, DefaultScreen(DADisplay));
|
||||||
|
DAVisual = DefaultVisual(DADisplay, DefaultScreen(DADisplay));
|
||||||
|
DAGC = DefaultGC(DADisplay, DefaultScreen(DADisplay));
|
||||||
|
gcv.graphics_exposures = False;
|
||||||
|
XChangeGC(DADisplay, DAGC, GCGraphicsExposures, &gcv);
|
||||||
|
|
||||||
|
XFlush(DADisplay);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DAShow(void)
|
||||||
|
{
|
||||||
|
if (!d_windowed)
|
||||||
|
XMapRaised(DADisplay, DALeader);
|
||||||
|
else
|
||||||
|
XMapRaised(DADisplay, DAWindow);
|
||||||
|
|
||||||
|
XFlush(DADisplay);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static DAProgramOption defaultOptions[] = {
|
||||||
|
{"-h", "--help", "shows this help text and exit", DONone, False, {NULL}},
|
||||||
|
{"-v", "--version", "shows program version and exit", DONone, False, {NULL}},
|
||||||
|
{"-w", "--windowed", "runs the application in windowed mode", DONone, False, {NULL}}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
printHelp(char *prog, char *description, DAProgramOption *options, int count)
|
||||||
|
{
|
||||||
|
int j;
|
||||||
|
|
||||||
|
printf("Usage: %s [OPTIONS]\n", prog);
|
||||||
|
if (description)
|
||||||
|
puts(description);
|
||||||
|
|
||||||
|
for (j = 0; j < count + 3; j++) {
|
||||||
|
char blank[30];
|
||||||
|
int c;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (j >= count) {
|
||||||
|
options = defaultOptions;
|
||||||
|
i = j - count;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
i = j;
|
||||||
|
|
||||||
|
if (options[i].shortForm && options[i].longForm)
|
||||||
|
c = printf(" %s, %s", options[i].shortForm, options[i].longForm);
|
||||||
|
else if (options[i].shortForm)
|
||||||
|
c = printf(" %s", options[i].shortForm);
|
||||||
|
else if (options[i].longForm)
|
||||||
|
c = printf(" %s", options[i].longForm);
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (options[i].type != DONone) {
|
||||||
|
switch (options[i].type) {
|
||||||
|
case DOInteger:
|
||||||
|
c += printf(" <integer>");
|
||||||
|
break;
|
||||||
|
case DOString:
|
||||||
|
c += printf(" <string>");
|
||||||
|
break;
|
||||||
|
case DONatural:
|
||||||
|
c += printf(" <number>");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(blank, ' ', 30);
|
||||||
|
if (c > 29)
|
||||||
|
c = 1;
|
||||||
|
blank[30-c] = 0;
|
||||||
|
printf("%s %s\n", blank, options[i].description);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DAParseArguments(int argc, char **argv, DAProgramOption *options,
|
||||||
|
int count, char *programDescription, char *versionDescription)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
int found = 0;
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0)
|
||||||
|
printHelp(argv[0], programDescription, options, count), exit(0);
|
||||||
|
if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--version") == 0)
|
||||||
|
puts(versionDescription), exit(0);
|
||||||
|
if (strcmp(argv[i], "-w") == 0 || strcmp(argv[i], "--windowed") == 0) {
|
||||||
|
d_windowed = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
found = 0;
|
||||||
|
for (j = 0; j < count; j++) {
|
||||||
|
if ((options[j].shortForm && strcmp(options[j].shortForm, argv[i]) == 0) ||
|
||||||
|
(options[j].longForm && strcmp(options[j].longForm, argv[i]) == 0)) {
|
||||||
|
found = 1;
|
||||||
|
|
||||||
|
options[j].used = True;
|
||||||
|
|
||||||
|
if (options[j].type == DONone)
|
||||||
|
break;
|
||||||
|
|
||||||
|
i++;
|
||||||
|
if (i >= argc)
|
||||||
|
printf("%s: missing argument for option '%s'\n", argv[0], argv[i-1]), exit(1);
|
||||||
|
|
||||||
|
switch (options[j].type) {
|
||||||
|
case DOInteger:
|
||||||
|
{
|
||||||
|
int integer;
|
||||||
|
|
||||||
|
if (sscanf(argv[i], "%i", &integer) != 1)
|
||||||
|
printf("%s: error parsing argument for option %s\n",
|
||||||
|
argv[0], argv[i-1]), exit(1);
|
||||||
|
*options[j].value.integer = integer;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DONatural:
|
||||||
|
{
|
||||||
|
int integer;
|
||||||
|
|
||||||
|
if (sscanf(argv[i], "%i", &integer) != 1)
|
||||||
|
printf("%s: error oarsing argument for option %s\n",
|
||||||
|
argv[0], argv[i-1]), exit(1);
|
||||||
|
if (integer < 0)
|
||||||
|
printf("%s: argument %s must be >= 0\n",
|
||||||
|
argv[0], argv[i-1]), exit(1);
|
||||||
|
*options[j].value.integer = integer;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DOString:
|
||||||
|
*options[j].value.string = argv[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
printf("%s: unrecognized option '%s'\n", argv[0], argv[i]);
|
||||||
|
printHelp(argv[0], programDescription, options, count), exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
72
wmusic/libdockapp/dapixmap.c
Normal file
72
wmusic/libdockapp/dapixmap.c
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Alfredo K. Kojima
|
||||||
|
*
|
||||||
|
* 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 or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* AUTHOR 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.
|
||||||
|
|
||||||
|
* $Id: dapixmap.c,v 1.1.1.1 2004/02/27 02:53:10 john Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/xpm.h>
|
||||||
|
#include <X11/extensions/shape.h>
|
||||||
|
#include <X11/Xatom.h>
|
||||||
|
#include "dockapp.h"
|
||||||
|
|
||||||
|
extern int d_width, d_height;
|
||||||
|
|
||||||
|
void
|
||||||
|
DASetShapeWithOffset(Pixmap shapeMask, int x_ofs, int y_ofs)
|
||||||
|
{
|
||||||
|
XShapeCombineMask(DADisplay, DAWindow, ShapeBounding, -x_ofs, -y_ofs, shapeMask,
|
||||||
|
ShapeSet);
|
||||||
|
XFlush(DADisplay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DASetPixmap(Pixmap pixmap)
|
||||||
|
{
|
||||||
|
XSetWindowBackgroundPixmap(DADisplay, DAWindow, pixmap);
|
||||||
|
XClearWindow(DADisplay, DAWindow);
|
||||||
|
XFlush(DADisplay);
|
||||||
|
}
|
||||||
|
|
||||||
|
Pixmap
|
||||||
|
DAMakePixmap(void)
|
||||||
|
{
|
||||||
|
return (XCreatePixmap(DADisplay, DAWindow, d_width, d_height, DADepth));
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
DAMakePixmapFromData(char **data, Pixmap *pixmap, Pixmap *mask,
|
||||||
|
unsigned *width, unsigned *height)
|
||||||
|
{
|
||||||
|
XpmAttributes xpmAttr;
|
||||||
|
|
||||||
|
xpmAttr.valuemask = XpmCloseness;
|
||||||
|
xpmAttr.closeness = 40000;
|
||||||
|
|
||||||
|
if (XpmCreatePixmapFromData(DADisplay, DAWindow, data,
|
||||||
|
pixmap, mask, &xpmAttr) != 0)
|
||||||
|
return False;
|
||||||
|
|
||||||
|
*width = xpmAttr.width;
|
||||||
|
*height = xpmAttr.height;
|
||||||
|
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
51
wmusic/libdockapp/darect.c
Normal file
51
wmusic/libdockapp/darect.c
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Alfredo K. Kojima
|
||||||
|
*
|
||||||
|
* 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 or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* AUTHOR 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.
|
||||||
|
|
||||||
|
* $Id: darect.c,v 1.1.1.1 2004/02/27 02:53:10 john Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dockapp.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
DAProcessActionRects(int x, int y, DAActionRect *actionrects, int count,
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
if (!actionrects)
|
||||||
|
return;
|
||||||
|
|
||||||
|
while ( (index < count) &&
|
||||||
|
((x < actionrects[index].rect.x) ||
|
||||||
|
(x > actionrects[index].rect.x + actionrects[index].rect.width) ||
|
||||||
|
(y < actionrects[index].rect.y) ||
|
||||||
|
(y > actionrects[index].rect.y + actionrects[index].rect.height)))
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (index == count)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (actionrects[index].action)
|
||||||
|
(*actionrects[index].action)(x - actionrects[index].rect.x,
|
||||||
|
y - actionrects[index].rect.y,
|
||||||
|
actionrects[index].rect,
|
||||||
|
data);
|
||||||
|
}
|
||||||
|
|
253
wmusic/libdockapp/dockapp.h
Normal file
253
wmusic/libdockapp/dockapp.h
Normal file
|
@ -0,0 +1,253 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Alfredo K. Kojima
|
||||||
|
*
|
||||||
|
* 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 or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* AUTHOR 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.
|
||||||
|
*
|
||||||
|
* $Id: dockapp.h,v 1.1.1.1 2004/02/27 02:53:10 john Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DOCKAPP_H_
|
||||||
|
#define _DOCKAPP_H_
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is a simple (trivial) library for writing Window Maker dock
|
||||||
|
* applications, or dockapps (those that only show up in the dock), easily.
|
||||||
|
*
|
||||||
|
* It is very limited and can be only used for dockapps that open a single
|
||||||
|
* appicon for process in only ibe single display, but this seems to be
|
||||||
|
* enough for most, if not all, dockapps.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/xpm.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the callbacks for events related to the dockapp window your program wants
|
||||||
|
* to handle
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
/* the dockapp window was destroyed */
|
||||||
|
void (*destroy)(void);
|
||||||
|
/* button pressed */
|
||||||
|
void (*buttonPress)(int button, int state, int x, int y);
|
||||||
|
/* button released */
|
||||||
|
void (*buttonRelease)(int button, int state, int x, int y);
|
||||||
|
/* pointer motion */
|
||||||
|
void (*motion)(int x, int y);
|
||||||
|
/* pointer entered dockapp window */
|
||||||
|
void (*enter)(void);
|
||||||
|
/* pointer left dockapp window */
|
||||||
|
void (*leave)(void);
|
||||||
|
/* timer expired */
|
||||||
|
void (*timeout)(void);
|
||||||
|
} DACallbacks;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *shortForm; /* short form for option, like -w */
|
||||||
|
char *longForm; /* long form for option, like --withdrawn */
|
||||||
|
char *description; /* description for the option */
|
||||||
|
|
||||||
|
short type; /* type of argument */
|
||||||
|
Bool used; /* if the argument was passed on the cmd-line */
|
||||||
|
|
||||||
|
/* the following are only set if the "used" field is True */
|
||||||
|
union {
|
||||||
|
void *ptr; /* a ptr for the value that was passed */
|
||||||
|
int *integer; /* on the command line */
|
||||||
|
char **string;
|
||||||
|
} value;
|
||||||
|
} DAProgramOption;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int x, y;
|
||||||
|
int width, height;
|
||||||
|
} DARect;
|
||||||
|
|
||||||
|
typedef void DARectCallback(int x, int y, DARect rect, void *data);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
DARect rect;
|
||||||
|
DARectCallback *action;
|
||||||
|
} DAActionRect;
|
||||||
|
|
||||||
|
|
||||||
|
/* option argument types */
|
||||||
|
enum {
|
||||||
|
DONone, /* simple on/off flag */
|
||||||
|
DOInteger, /* an integer number */
|
||||||
|
DOString, /* a string */
|
||||||
|
DONatural /* positive integer number */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
extern Display *DADisplay;
|
||||||
|
extern Window DAWindow;
|
||||||
|
extern int DADepth;
|
||||||
|
extern Visual *DAVisual;
|
||||||
|
extern GC DAGC;
|
||||||
|
extern DARect DANoRect;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DAParseArguments-
|
||||||
|
* Command line arguments parser. The program is exited if there are
|
||||||
|
* syntax errors.
|
||||||
|
*
|
||||||
|
* -h, --help and --version are automatically handled (causing the program
|
||||||
|
* to exit)
|
||||||
|
* -w is handled automatically as well and causes the dockapp to be run
|
||||||
|
* in windowed mode.
|
||||||
|
*/
|
||||||
|
void DAParseArguments(int argc, char **argv, DAProgramOption *options,
|
||||||
|
int count, char *programDescription, char *versionDescription);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DAInitialize-
|
||||||
|
* Initialize the dockapp, open a connection to the X Server,
|
||||||
|
* create the needed windows and set them up to become an appicon window.
|
||||||
|
* It will automatically detect if Window Maker is present and use
|
||||||
|
* an appropriate window form.
|
||||||
|
*
|
||||||
|
* You must call this always before calling anything else (except for
|
||||||
|
* DAParseArguments())
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* display - the name of the display to connect to.
|
||||||
|
* Use "" to use the default value.
|
||||||
|
* name - the name of your dockapp, used as the instance name
|
||||||
|
* for the WM_CLASS hint. Like wmyaclock.
|
||||||
|
* The ClassName is set to "DockApp" on default.
|
||||||
|
* width, height - the size of the dockapp window. 48x48 is the
|
||||||
|
* preferred size.
|
||||||
|
* argc, argc - the program arguments. argv[0] will be used
|
||||||
|
* as the instance name for the WM_CLASS hint.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DAInitialize(display, name, width, height, argc, argv) \
|
||||||
|
DAGetDisplay(display, argc, argv); \
|
||||||
|
DACreateIcon(name, width, height, argc, argv);
|
||||||
|
|
||||||
|
|
||||||
|
void DAGetDisplay(char *display, int argc, char **argv);
|
||||||
|
|
||||||
|
void DACreateIcon(char *name, unsigned width, unsigned height,
|
||||||
|
int argc, char **argv);
|
||||||
|
|
||||||
|
void DAProposeIconSize(unsigned width, unsigned height);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DASetShapeWithOffset-
|
||||||
|
* Sets the shape mask of the dockapp to the specified one. This is
|
||||||
|
* optional. If you pass None as shapeMask, the dockapp will become
|
||||||
|
* non-shaped.
|
||||||
|
*
|
||||||
|
* This is only needed if you want the dockapp to be shaped.
|
||||||
|
*/
|
||||||
|
#define DASetShape(shapeMask) (DASetShapeWithOffset((shapeMask), 0, 0))
|
||||||
|
void DASetShapeWithOffset(Pixmap shapeMask, int x_ofs, int y_ofs);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DASetPixmap-
|
||||||
|
* Sets the image pixmap for the dockapp. Once you set the image with it,
|
||||||
|
* you don't need to handle expose events.
|
||||||
|
*/
|
||||||
|
void DASetPixmap(Pixmap pixmap);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DAMakePixmap-
|
||||||
|
* Creates a pixmap suitable for use with DASetPixmap()
|
||||||
|
*/
|
||||||
|
Pixmap DAMakePixmap(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DAMakePixmapFromData-
|
||||||
|
* Creates a pixmap and mask from XPM data
|
||||||
|
*/
|
||||||
|
Bool DAMakePixmapFromData(char **data, Pixmap *pixmap, Pixmap *mask,
|
||||||
|
unsigned *width, unsigned *height);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DAGetColor-
|
||||||
|
* Returns a color.
|
||||||
|
*/
|
||||||
|
unsigned long DAGetColor(char *colorName);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DAShow-
|
||||||
|
* Opens the dockapp.
|
||||||
|
*
|
||||||
|
* Always call this function or the dockapp won't show up.
|
||||||
|
*/
|
||||||
|
void DAShow(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DASetCallbacks-
|
||||||
|
* Register a set of callbacks for events like mouse clicks.
|
||||||
|
*
|
||||||
|
* Only needed if you want to receive some event.
|
||||||
|
*/
|
||||||
|
void DASetCallbacks(DACallbacks *callbacks);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DASetTimeout-
|
||||||
|
* Sets a timeout for the DAEventLoop(). The timeout callback
|
||||||
|
* will be called whenever the app doesn't get any events from the
|
||||||
|
* X server in the specified time.
|
||||||
|
*/
|
||||||
|
void DASetTimeout(int miliseconds);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DANextEventOrTimeout-
|
||||||
|
* Waits until a event is received or the timeout limit has
|
||||||
|
* expired. Returns True if an event was received.
|
||||||
|
*/
|
||||||
|
Bool DANextEventOrTimeout(XEvent *event, unsigned long miliseconds);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DAProcessEvent-
|
||||||
|
* Processes an event. Returns True if the event was handled and
|
||||||
|
* False otherwise.
|
||||||
|
*
|
||||||
|
* Must be called from your event loop, unless you use DAEventLoop()
|
||||||
|
*/
|
||||||
|
Bool DAProcessEvent(XEvent *event);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DAEventLoop-
|
||||||
|
* Enters an event loop where events are processed until the dockapp
|
||||||
|
* is closed. This function never returns.
|
||||||
|
*/
|
||||||
|
void DAEventLoop(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DAProcessActionRects-
|
||||||
|
* Processes the current coordinates for the functions in the array of
|
||||||
|
* action rectangles, converting coordinates to relative coordinates in
|
||||||
|
* the rectangles. The last item must be NULL.
|
||||||
|
*/
|
||||||
|
void DAProcessActionRects(int x, int y, DAActionRect *actionrects,
|
||||||
|
int count, void *data);
|
||||||
|
|
||||||
|
#endif
|
37
wmusic/src/Makefile.in
Normal file
37
wmusic/src/Makefile.in
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
RCSS = wmusic.c Makefile.in config.h.in version.h.in
|
||||||
|
|
||||||
|
CC = @CC@
|
||||||
|
|
||||||
|
PREFIX = @prefix@
|
||||||
|
|
||||||
|
SRCS = wmusic.c ../libdockapp/dacallback.c ../libdockapp/dacolor.c \
|
||||||
|
../libdockapp/daevent.c ../libdockapp/damain.c \
|
||||||
|
../libdockapp/dapixmap.c ../libdockapp/darect.c
|
||||||
|
OBJS = $(SRCS:.c=.o)
|
||||||
|
|
||||||
|
CFLAGS = -Wall -g -O2 -I. -I../libdockapp `@PATH_GTKCONFIG@ --cflags` \
|
||||||
|
`@PATH_XMMSCONFIG@ --cflags` \
|
||||||
|
-DDATA_DIR=\"`@PATH_XMMSCONFIG@ --data-dir`\"
|
||||||
|
LDFLAGS = @LIBS@ -lXpm `@PATH_GTKCONFIG@ --libs` `@PATH_XMMSCONFIG@ --libs` \
|
||||||
|
@DGA_LIBS@ @VM_LIBS@
|
||||||
|
|
||||||
|
all: wmusic
|
||||||
|
|
||||||
|
install: all
|
||||||
|
if test ! -d $(PREFIX); then mkdir -p $(PREFIX); fi
|
||||||
|
|
||||||
|
if test ! -d $(PREFIX)/bin; then mkdir -p $(PREFIX)/bin; fi
|
||||||
|
|
||||||
|
@INSTALL@ -c -m 755 -s wmusic $(PREFIX)/bin
|
||||||
|
|
||||||
|
wmusic: $(OBJS) $(IFLAGS)
|
||||||
|
gcc -g -o wmusic $(OBJS) $(LDFLAGS)
|
||||||
|
|
||||||
|
uninstall: clean
|
||||||
|
rm -f $(PREFIX)/bin/wmusic
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *~ *.o ../libdockapp/*~ ../libdockapp/*.o core wmusic
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
rm -f Makefile config.h version.h
|
0
wmusic/src/config.h.in
Normal file
0
wmusic/src/config.h.in
Normal file
1
wmusic/src/version.h.in
Normal file
1
wmusic/src/version.h.in
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#define VERSION "@PACKAGE@ @VERSION@"
|
161
wmusic/src/wmusic-digits.xpm
Normal file
161
wmusic/src/wmusic-digits.xpm
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * wmusic_digits_xpm[] = {
|
||||||
|
"193 101 57 1",
|
||||||
|
" c None",
|
||||||
|
". c #202020",
|
||||||
|
"+ c #1FB1AC",
|
||||||
|
"@ c #23ADA7",
|
||||||
|
"# c #27A8A3",
|
||||||
|
"$ c #2AA39F",
|
||||||
|
"% c #2E9F9B",
|
||||||
|
"& c #319A97",
|
||||||
|
"* c #359593",
|
||||||
|
"= c #38908F",
|
||||||
|
"- c #3C8C8B",
|
||||||
|
"; c #3F8787",
|
||||||
|
"> c #438282",
|
||||||
|
", c #477E7E",
|
||||||
|
"' c #4A797A",
|
||||||
|
") c #4E7476",
|
||||||
|
"! c #516F72",
|
||||||
|
"~ c #556B6E",
|
||||||
|
"{ c #58666A",
|
||||||
|
"] c #5C6166",
|
||||||
|
"^ c #5F5C62",
|
||||||
|
"/ c #63585D",
|
||||||
|
"( c #675359",
|
||||||
|
"_ c #6A4E55",
|
||||||
|
": c #6E4A51",
|
||||||
|
"< c #71454D",
|
||||||
|
"[ c #754049",
|
||||||
|
"} c #783B45",
|
||||||
|
"| c #7C3741",
|
||||||
|
"1 c #7F323D",
|
||||||
|
"2 c #832D38",
|
||||||
|
"3 c #872934",
|
||||||
|
"4 c #8A2430",
|
||||||
|
"5 c #8E1F2C",
|
||||||
|
"6 c #911A28",
|
||||||
|
"7 c #951624",
|
||||||
|
"8 c #981120",
|
||||||
|
"9 c #9C0C1C",
|
||||||
|
"0 c #9F0717",
|
||||||
|
"a c #1F1F1F",
|
||||||
|
"b c #20B2AC",
|
||||||
|
"c c #004841",
|
||||||
|
"d c #188983",
|
||||||
|
"e c #107C78",
|
||||||
|
"f c #004840",
|
||||||
|
"g c #A00818",
|
||||||
|
"h c #FF7F7F",
|
||||||
|
"i c #FF0000",
|
||||||
|
"j c #000000",
|
||||||
|
"k c #808088",
|
||||||
|
"l c #A8A8A8",
|
||||||
|
"m c #F8FCF8",
|
||||||
|
"n c #F0F0F8",
|
||||||
|
"o c #004941",
|
||||||
|
"p c #20B2AE",
|
||||||
|
"q c #007D71",
|
||||||
|
"r c #1A2625",
|
||||||
|
".............................................................+@#$%&*=-;>,')!~{]^/(_:<[}|1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
|
||||||
|
"..bbb...cccd.dbbbd.dbbbd.dcccd.dbbbd.dbbbd.dbbbd.dbbbd.dbbbd.+@#$%&*=-;>,')!~{]^/(_:<[}|1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
|
||||||
|
".b...b.c...b.c...b.c...b.b...b.b...c.b...c.c...b.b...b.b...b.+@#$%&*=-;>,')!~{]^/(_:<[}|1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
|
||||||
|
".b...b.c...b.c...b.c...b.b...b.b...c.b...c.c...b.b...b.b...b.+@#$%&*=-;>,')!~{]^/(_:<[}|1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
|
||||||
|
".dcccd..cccd.dbbbd..bbbd.dbbbd.dbbbd.dbbbd..cccd.dbbbd.dbbbd.+@#$%&*=-;>,')!~{]^/(_:<[}|1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
|
||||||
|
".b...b.c...b.b...c.c...b.c...b.c...b.b...b.c...b.b...b.c...b.+@#$%&*=-;>,')!~{]^/(_:<[}|1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
|
||||||
|
".b...b.c...b.b...c.c...b.c...b.c...b.b...b.c...b.b...b.c...b. ",
|
||||||
|
"..bbb...cccd.dbbbd.dbbbd..cccd.dbbbd.dbbbd..cccd.dbbbd.dbbbd. ",
|
||||||
|
"............................................................. ",
|
||||||
|
"............................................................................. ",
|
||||||
|
"............................................................................. ",
|
||||||
|
"...bbbb...cccce.ebbbbd.ebbbbe.ecccce.ebbbbe.ebbbbd.ebbbbe.ebbbbd.ebbbbd...... ",
|
||||||
|
"..b....b.c....b.c....b.c....b.b....b.b....c.b....c.c....b.b....b.b....b..b... ",
|
||||||
|
"..b....b.c....b.c....b.c....b.b....b.b....c.b....c.c....b.b....b.b....b..b... ",
|
||||||
|
"..b....b.c....b.c....b.c....b.b....b.b....c.b....c.c....b.b....b.b....b...... ",
|
||||||
|
"..ecccce..cccce.ebbbbe.ebbbbe.ebbbbe.ebbbbe.ebbbbe..cccce.ebbbbe.ebbbbe...... ",
|
||||||
|
"..b....b.c....b.b....c.c....b.c....b.c....b.b....b.c....b.b....b.c....b...... ",
|
||||||
|
"..b....b.c....b.b....c.c....b.c....b.c....b.b....b.c....b.b....b.c....b..b... ",
|
||||||
|
"..b....b.c....b.b....c.c....b.c....b.c....b.b....b.c....b.b....b.c....b..b... ",
|
||||||
|
"...bbbb...cccce.ebbbbe.ebbbbe..cccce.ebbbbe.ebbbbe..cccce.ebbbbe.ebbbbe...... ",
|
||||||
|
"............................................................................. ",
|
||||||
|
"............................................................................. ",
|
||||||
|
"...b...f.....b...f.....b...b.....gggg....higg....ihhi....ggih....gggg....gggg. ",
|
||||||
|
"..bb.f..f...bb.b..f...bb.b..b...g....g..h....g..g....g..g....h..g....i..g....g ",
|
||||||
|
"bbbb..f..fbbbb..b..fbbbb..b..b..f....g..f....g..f....g..f....i..f....h..f....g ",
|
||||||
|
"bbbb..f..fbbbb..b..fbbbb..b..b..i....i..g....g..g....g..g....g..g....h..g....g ",
|
||||||
|
"..bb.f..f...bb.b..f...bb.b..b..iii...h.ggg...g.ggg...g.ggg...g.ggg...i.ggg...g ",
|
||||||
|
"...b...f.....b...f.....b...b..iiiii..hggggg..iggggg..gggggg..gggigg..gggggg..g ",
|
||||||
|
" ..g....i..g....h..g....g..g....g..h....g..g....g ",
|
||||||
|
" ..g....g..g....h..g....i..i....g..h....g..g....g ",
|
||||||
|
" ...gggg....gggi....gihh....hhig....iggg....gggg. ",
|
||||||
|
"jjjjjjjjjjjjjkjjjjjjjjjjjjjkjjjjjjjjjjjjkjjjjjjjjjjjjk ",
|
||||||
|
"jllllllllllllmjllllllllllllmjlllllllllllmjlllllllllllm ...f...f.. ",
|
||||||
|
"jlljlljlljlllmjlljlljlljlllmjlllljlljlllmjllljlljllllm ..ff.f..f. ",
|
||||||
|
"jlljljjljjlllmjlljjljjljlllmjllljjljjlllmjllljjljjlllm ffff..f..f ",
|
||||||
|
"jlljjjjjjjlllmjlljjjjjjjlllmjlljjjjjjlllmjllljjjjjjllm ffff..f..f ",
|
||||||
|
"jlljljjljjlllmjlljjljjljlllmjllljjljjlllmjllljjljjlllm ..ff.f..f. ",
|
||||||
|
"jlljlljlljlllmjlljlljlljlllmjlllljlljlllmjllljlljllllm ...f...f.. ",
|
||||||
|
"jllllllllllllmjllllllllllllmjlllllllllllmjlllllllllllm ",
|
||||||
|
"kmmmmmmmmmmmmmkmmmmmmmmmmmmmkmmmmmmmmmmmmkmmmmmmmmmmmm .................. ",
|
||||||
|
"jjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjkjjjjjjjjjjk .................. ",
|
||||||
|
"jlllllllllmjlllllllllllllllllllmjlllllllllmjlllllllllm b...b............. ",
|
||||||
|
"jlllllllllmjlllllllllllllllllllmjlllllllllmjlllllllllm b...b............. ",
|
||||||
|
"jlllljllllmjllllllljjllllllllllmjlljjljjllmjlljjjjjllm b.b.bb..bb..bbb... ",
|
||||||
|
"jllljjjlllmjllllllljjjjllllllllmjlljjljjllmjlljjjjjllm bb..b.b.b.b.fb.... ",
|
||||||
|
"jlljjjjjllmjllllllljjjjjjllllllmjlljjljjllmjlljjjjjllm b.b.bb..bb..bbb... ",
|
||||||
|
"jlllllllllmjllllllljjjjllllllllmjlljjljjllmjlljjjjjllm ........b......... ",
|
||||||
|
"jlljjjjjllmjllllllljjllllllllllmjlljjljjllmjlljjjjjllm ",
|
||||||
|
"jlllllllllmjlllllllllllllllllllmjlllllllllmjlllllllllm ",
|
||||||
|
"jlllllllllmjlllllllllllllllllllmjlllllllllmjlllllllllm ",
|
||||||
|
"kmmmmmmmmmmkmmmmmmmmmmmmmmmmmmmmkmmmmmmmmmmkmmmmmmmmmm ",
|
||||||
|
"nmmmmmmmmnnnnknnnmmmmmnnnnnknmmmmmmmmnnnknnnmmmmmnnnnk ",
|
||||||
|
"nlllllllllllljnlllllllllllljnllllllllllljnlllllllllllj ",
|
||||||
|
"nlljlljlljllljnlljlljlljllljnlllljlljllljnllljlljllllj ",
|
||||||
|
"nlljljjljjllljnlljjljjljllljnllljjljjllljnllljjljjlllj ",
|
||||||
|
"nlljjjjjjjllljnlljjjjjjjllljnlljjjjjjllljnllljjjjjjllj ",
|
||||||
|
"nlljljjljjllljnlljjljjljllljnllljjljjllljnllljjljjlllj ",
|
||||||
|
"nlljlljlljllljnlljlljlljllljnlllljlljllljnllljlljllllj ",
|
||||||
|
"nlllllllllllljnlllllllllllljnllllllllllljnlllllllllllj ",
|
||||||
|
"kjjjjjjjjjjjjjkjjjjjjjjjjjjjkjjjjjjjjjjjjkjjjjjjjjjjjj ",
|
||||||
|
"nnmmmmmnnnknnnnnmmmmmmmmmmmmmmmknnnmmmmnnnknnnmmmmnnnk ",
|
||||||
|
"nllllllllljnllllllllllllllllllljnllllllllljnlllllllllj ",
|
||||||
|
"nllllllllljnllllllllllllllllllljnllllllllljnlllllllllj ",
|
||||||
|
"nlllljlllljnllllllljjlllllllllljnlljjljjlljnlljjjjjllj ",
|
||||||
|
"nllljjjllljnllllllljjjjlllllllljnlljjljjlljnlljjjjjllj ",
|
||||||
|
"nlljjjjjlljnllllllljjjjjjlllllljnlljjljjlljnlljjjjjllj ",
|
||||||
|
"nllllllllljnllllllljjjjlllllllljnlljjljjlljnlljjjjjllj ",
|
||||||
|
"nlljjjjjlljnllllllljjlllllllllljnlljjljjlljnlljjjjjllj ",
|
||||||
|
"nllllllllljnllllllllllllllllllljnllllllllljnlllllllllj ",
|
||||||
|
"nllllllllljnllllllllllllllllllljnllllllllljnlllllllllj ",
|
||||||
|
"kjjjjjjjjjjkjjjjjjjjjjjjjjjjjjjjkjjjjjjjjjjkjjjjjjjjjj ",
|
||||||
|
" ",
|
||||||
|
"............................................................................................................................................................. ",
|
||||||
|
".opppo.qppp..qpppq.qppp..qpppq.qpppq.qpppq.qoooq..oooq..oooq.qoooq.qooo..pooop.qppp..qpppq.qpppq.qpppq.qpppq.qpppq.qpppq.qoooq.qoooq.qoooq.qoooq.qoooq.qpppq. ",
|
||||||
|
".p...p.p...p.p...o.p...p.p...o.p...o.p...o.p...p.o...p.o...p.p...p.p...o.pp.pp.p...p.p...p.p...p.p...p.p...p.p...o.o.p.o.p...p.p...p.p...p.p...p.p...p.o...p. ",
|
||||||
|
".p...p.p...p.p...o.p...p.p...o.p...o.p...o.p...p.o...p.o...p.p..po.p...o.p.p.p.p...p.p...p.p...p.p...p.p...p.p...o.o.p.o.p...p.p...p.p...p.op.po.p...p.o..po. ",
|
||||||
|
".qpppq.qppp..qooo..qoooq.qppp..qppp..qoppq.qpppq..oooq..oooq.qppo..qooo..qoooq.qoooq.qoooq.qpppq.qpooq.qppp..qpppq..oqo..qoooq.qoooq.qoooq..opo..qpppq..opo.. ",
|
||||||
|
".p...p.p...p.p...o.p...p.p...o.p...o.p...p.p...p.o...p.o...p.p..po.p...o.p...p.p...p.p...p.p...o.p.p.p.p...p.o...p.o.p.o.p...p.p...p.p.p.p.op.po.o...p.op..o. ",
|
||||||
|
".p...p.p...p.p...o.p...p.p...o.p...o.p...p.p...p.o...p.o...p.p...p.p...o.p...p.p...p.p...p.p...o.p..pp.p...p.o...p.o.p.o.p...p.p...p.pp.pp.p...p.o...p.p...o. ",
|
||||||
|
".qoooq.qppp..qpppq.pppp..qpppq.pooo..qpppq.qoooq..ooop.qpppq.qoooq.qpppo.qoooq.pooop.qpppq.qooo..qpppq.qoooq.qpppq..oqo..opppp..ppp..pooop.qooopqqpppq.qpppq. ",
|
||||||
|
"............................................................................................................................................................. ",
|
||||||
|
" ",
|
||||||
|
"........................................................................................................................q...... ",
|
||||||
|
"..ppp...oooq.qpppq.qpppq.qoooq.qpppq.qpppq.qpppq.qpppq.qpppq..ooo...ooo...ooo...poo...poo...oop...ooo...oop...p.p..opppq.opopo. ",
|
||||||
|
".p...p.o...p.o...p.o...p.p...p.p...o.p...o.o...p.p...p.p...p.o...o.o...o.o...o.p...o.p...o.o...p.p.q.p.o..po.o.pro.pq..o.qpppq. ",
|
||||||
|
".p...p.o...p.o...p.o...p.p...p.p...o.p...o.o...p.p...p.p...p.o...o.o...o.o...o.p...o.p...o.o...p.oqqqo.o.p.o.o.p.o.p...o.p...o. ",
|
||||||
|
".qoooq..oooq.qpppq..pppq.qpppq.qpppq.qpppq..oooq.opppo.qpppq..ooo..qpppq..ooo...ooo..qooo...oooq.ppppp..opo...oqo..pppq..qppq.. ",
|
||||||
|
".p...p.o...p.p...o.o...p.o...p.o...p.p...p.o...p.p...p.o...p.o...o.o...o.o...o.o...o.p...o.o...p.oqqqo.o.p.o.o.p.o.p...o.p...o. ",
|
||||||
|
".p...p.o...p.p...o.o...p.o...p.o...p.p...p.o...p.p...p.o...p.o...o.o...o.o...o.o...o.p...o.o...p.p.q.p.op..o.o.p.o.pq..o.p...o. ",
|
||||||
|
"..ppp...ooop.qpppq.qpppq..oooq.qpppq.qpppq..oooq.qpppq.qpppq..ooo...ooo...qpq...ooo...poo...oop...ooo...poo...opo..opppq.qpppq. ",
|
||||||
|
"............................................................................................................................... ",
|
||||||
|
" ",
|
||||||
|
"................................................................................................................................................................................................ ",
|
||||||
|
".qoqpq.opppo.qpppq.qooq...qpq..qpppq..opo..qpppq.qoooq.qoooq.qopoq.qoooq..qppq.pooop.qoooq.qpppq.qpppq.qpppq.qpppq.qpppq.qpppq.qoooq.qoqoq.qppp..qooo..qoooq..pppq.qoqoq.qpppq.qoqoq.qoooq.pqoo. ",
|
||||||
|
".p.p.p.p...p.p...o.p..po.op.po.p...o.qpppq.p...o.p...p.p...p.p...p.p...p.opq.p.pp.pp.p...p.p...p.p...p.p...p.p...p.p...o.o.p.o.p...p.p.p.p.p...p.p...o.p...p.q...p.p.p.p.o...p.p.p.p.p...p.op..o ",
|
||||||
|
".p.p.p.p...p.p...o.p..po.op.po.p...o.p.p.p.p...o.op.po.p..pp.p..pp.p..po.op..p.p.p.p.p...p.p...p.p...p.p...p.p...p.p...o.o.p.o.p...p.p.p.p.p...p.p...o.p...p.o...p.p.p.p.o...p.p.p.p.p...p.op..o ",
|
||||||
|
".qpqoq.qpppq.qppp..poop...pop..qppq..qopoq.qooo...opo..qopoq.qopoq.qppo...pooq.qoooq.qpppq.qoooq.qoooq..pppq.qpppq.qooo...oqo..qpppq..ppp..qppp..qpppq.qpqoq..qpp..qoqoq.qpppq.qoqoq.qpppq..qppq ",
|
||||||
|
".p.p.p.p...p.p...p.p..po.op.po.p...o.p.p.p.p...o.op.po.pp..p.pp..p.p..po.op..p.p...p.p...p.p...p.p...p.p...p.p...o.p...o.o.p.o.o...p.p.p.p.p...p.p...p.p.p.p.o...p.p.p.p.o...p.p.p.p.o...p.op..p ",
|
||||||
|
".p.p.p.p...p.p...p.qpppq.qpppq.p...o.qpppq.p...o.p...p.p...p.p...p.p...p.qp..p.p...p.p...p.p...p.p...p.p...p.p...o.p...o.o.p.o.o...p.p.p.p.p...p.p...p.p.p.p.q...p.p.p.p.o...p.qpqpq.o...p.op..p ",
|
||||||
|
".qoqpq.qoooq.qppp...ooqp.pqoqp.qpppq..opo..qooo..qoooq.qoooq.qoooq.qoooq.pqoop.qoooq.qoooq.qpppq.qoooq.qoooq.qooo..qpppq..oqo..qpppq.qoqoq.qppp..qpppq.qpqoq..pppq.qpppq.qpppq..ooop..oooq..qppq ",
|
||||||
|
"................................................................................................................................................................................................ "};
|
83
wmusic/src/wmusic-master.xpm
Normal file
83
wmusic/src/wmusic-master.xpm
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * wmusic_master_xpm[] = {
|
||||||
|
"64 64 16 1",
|
||||||
|
" c None",
|
||||||
|
". c #202020",
|
||||||
|
"+ c #C0C0C0",
|
||||||
|
"@ c #20B0A8",
|
||||||
|
"# c #188880",
|
||||||
|
"$ c #107C78",
|
||||||
|
"% c #004840",
|
||||||
|
"& c #A00818",
|
||||||
|
"* c #20B2AC",
|
||||||
|
"= c #188983",
|
||||||
|
"- c #004841",
|
||||||
|
"; c #000000",
|
||||||
|
"> c #F0F0F8",
|
||||||
|
", c #F8FCF8",
|
||||||
|
"' c #808088",
|
||||||
|
") c #A8A8A8",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ........................................................ ",
|
||||||
|
" .......................................................+ ",
|
||||||
|
" .......................................................+ ",
|
||||||
|
" ....@@@@...@@@@........@@@@...@@@@........@@@...@@@....+ ",
|
||||||
|
" ...@....@.@....@..#@..@....@.@....@......@...@.@...@...+ ",
|
||||||
|
" ...@....@.@....@..$@..@....@.@....@......@...@.@...@...+ ",
|
||||||
|
" ...@....@.@....@......@....@.@....@......$%%%$.$%%%$...+ ",
|
||||||
|
" ...$%%%%$.$%%%%$......$%%%%$.$%%%%$......@...@.@...@...+ ",
|
||||||
|
" ...@....@.@....@......@....@.@....@......@...@.@...@...+ ",
|
||||||
|
" ...@....@.@....@..#@..@....@.@....@.......@@@...@@@....+ ",
|
||||||
|
" ...@....@.@....@..$@..@....@.@....@....................+ ",
|
||||||
|
" ....@@@@...@@@@........@@@@...@@@@.....................+ ",
|
||||||
|
" .......................................................+ ",
|
||||||
|
" .......................................................+ ",
|
||||||
|
" .........%...%.........................................+ ",
|
||||||
|
" ........%%.%..%...............................&&&&.....+ ",
|
||||||
|
" ......%%%%..%..%.............................&....&....+ ",
|
||||||
|
" ......%%%%..%..%.............................%....&....+ ",
|
||||||
|
" ........%%.%..%..............................&....&....+ ",
|
||||||
|
" .........%...%..............................&&&...&....+ ",
|
||||||
|
" ...........................................&&&&&..&....+ ",
|
||||||
|
" .............................................&....&....+ ",
|
||||||
|
" ....***...***...***..........................&....&....+ ",
|
||||||
|
" ...*...*.*...*.*...*..........................&&&&.....+ ",
|
||||||
|
" ...*...*.*...*.*...*.*...*.............................+ ",
|
||||||
|
" ...=---=.=---=.=---=.*...*.............................+ ",
|
||||||
|
" ...*...*.*...*.*...*.*.*.**..**..***...................+ ",
|
||||||
|
" ...*...*.*...*.*...*.**..*.*.*.*.%*....................+ ",
|
||||||
|
" ....***...***...***..*.*.**..**..***...................+ ",
|
||||||
|
" .............................*.........................+ ",
|
||||||
|
" .......................................................+ ",
|
||||||
|
" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ",
|
||||||
|
" ;>,,,,,,,,>>>>'>>>,,,,,>>>>>'>,,,,,,,,>>>'>>>,,,,,>>>>'+ ",
|
||||||
|
" ;>))))))))))));>))))))))))));>)))))))))));>)))))))))));+ ",
|
||||||
|
" ;>));));));)));>));));));)));>))));));)));>)));));))));+ ",
|
||||||
|
" ;>)););;);;)));>));;);;);)));>)));;);;)));>)));;);;)));+ ",
|
||||||
|
" ;>));;;;;;;)));>));;;;;;;)));>));;;;;;)));>)));;;;;;));+ ",
|
||||||
|
" ;>)););;);;)));>));;);;);)));>)));;);;)));>)));;);;)));+ ",
|
||||||
|
" ;>));));));)));>));));));)));>))));));)));>)));));))));+ ",
|
||||||
|
" ;>))))))))))));>))))))))))));>)))))))))));>)))))))))));+ ",
|
||||||
|
" ;';;;;;;;;;;;;;';;;;;;;;;;;;;';;;;;;;;;;;;';;;;;;;;;;;;+ ",
|
||||||
|
" ;>>,,,,,>>>'>>>>>,,,,,,,,,,,,,,,'>>>,,,,>>>'>>>,,,,>>>'+ ",
|
||||||
|
" ;>)))))))));>)))))))))))))))))));>)))))))));>)))))))));+ ",
|
||||||
|
" ;>)))))))));>)))))))))))))))))));>)))))))));>)))))))));+ ",
|
||||||
|
" ;>))));))));>)))))));;))))))))));>));;);;));>));;;;;));+ ",
|
||||||
|
" ;>)));;;)));>)))))));;;;))))))));>));;);;));>));;;;;));+ ",
|
||||||
|
" ;>));;;;;));>)))))));;;;;;))))));>));;);;));>));;;;;));+ ",
|
||||||
|
" ;>)))))))));>)))))));;;;))))))));>));;);;));>));;;;;));+ ",
|
||||||
|
" ;>));;;;;));>)))))));;))))))))));>));;);;));>));;;;;));+ ",
|
||||||
|
" ;>)))))))));>)))))))))))))))))));>)))))))));>)))))))));+ ",
|
||||||
|
" ;>)))))))));>)))))))))))))))))));>)))))))));>)))))))));+ ",
|
||||||
|
" ;';;;;;;;;;;';;;;;;;;;;;;;;;;;;;;';;;;;;;;;;';;;;;;;;;;+ ",
|
||||||
|
" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" "};
|
763
wmusic/src/wmusic.c
Normal file
763
wmusic/src/wmusic.c
Normal file
|
@ -0,0 +1,763 @@
|
||||||
|
/* wmusic - a xmms remote-controlling DockApp
|
||||||
|
* Copyright (C) 2000-2001 Bastien Nocera <hadess@hadess.net>
|
||||||
|
* Maintained by John Chapin <john+wmusic@jtan.com>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DBL_CLICK_INTERVAL 250 /* double click interval in milliseconds */
|
||||||
|
#define ARROW_INTERVAL 100 /* arrow update interval in milliseconds */
|
||||||
|
#define SCROLL_INTERVAL 300 /* scroll update interval in milliseconds */
|
||||||
|
#define SEPARATOR " ** " /* The separator for the scrolling title */
|
||||||
|
#define DISPLAYSIZE 6 /* width of text to display (running title) */
|
||||||
|
|
||||||
|
#include <dockapp.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <xmms/xmmsctrl.h>
|
||||||
|
|
||||||
|
#include "version.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "wmusic-master.xpm"
|
||||||
|
#include "wmusic-digits.xpm"
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/* Prototypes */
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void copyNumArea(int x, int y, int sx, int sy, int dx, int dy);
|
||||||
|
void ActionPlay(int x, int y, DARect rect, void *data);
|
||||||
|
void ActionPause(int x, int y, DARect rect, void *data);
|
||||||
|
void ActionEject(int x, int y, DARect rect, void *data);
|
||||||
|
void ActionPrev(int x, int y, DARect rect, void *data);
|
||||||
|
void ActionNext(int x, int y, DARect rect, void *data);
|
||||||
|
void ActionStop(int x, int y, DARect rect, void *data);
|
||||||
|
void ActionFastr(int x, int y, DARect rect, void *data);
|
||||||
|
void ActionFastf(int x, int y, DARect rect, void *data);
|
||||||
|
void ToggleWins(int x, int y, DARect rect, void *data);
|
||||||
|
void ToggleVol(int x, int y, DARect rect, void *data);
|
||||||
|
void ChangeVol(int x, int y, DARect rect, void *data);
|
||||||
|
void ToggleTitle(int x, int y, DARect rect, void *data);
|
||||||
|
void ToggleTime(int x, int y, DARect rect, void *data);
|
||||||
|
void buttonPress(int button, int state, int x, int y);
|
||||||
|
void buttonRelease(int button, int state, int x, int y);
|
||||||
|
void DisplayRoutine();
|
||||||
|
void DrawPos (int pos);
|
||||||
|
void DrawTime(int time);
|
||||||
|
void DrawArrow(void);
|
||||||
|
void DrawChannels(int channels);
|
||||||
|
void DrawKbps(int bps);
|
||||||
|
void DrawTitle(char *title);
|
||||||
|
void ExecuteXmms(void);
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* Variables */
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* X11 variables */
|
||||||
|
char *displayName = "";
|
||||||
|
GC gc;
|
||||||
|
XEvent ev;
|
||||||
|
|
||||||
|
/* Dockapp variables */
|
||||||
|
unsigned int xmms_session = 0;
|
||||||
|
char *xmms_cmd = "xmms";
|
||||||
|
Bool main_vis=0, pl_vis=0, eq_vis=0;
|
||||||
|
Bool xmms_running;
|
||||||
|
unsigned int volume_step = 5;
|
||||||
|
Bool run_excusive=0;
|
||||||
|
|
||||||
|
Bool t_scroll=0;
|
||||||
|
Bool t_time=0;
|
||||||
|
Bool t_volume=0;
|
||||||
|
float title_pos = 0;
|
||||||
|
unsigned int arrow_pos = 0;
|
||||||
|
Bool pause_norotate = 0;
|
||||||
|
Time click_time=0;
|
||||||
|
|
||||||
|
Pixmap pixmap, mask; /* Pixmap that is displayed */
|
||||||
|
Pixmap pixnum, masknum; /* Pixmap source */
|
||||||
|
|
||||||
|
int left_pressed = 0; /* for pseudo drag callback */
|
||||||
|
int motion_event = 0; /* on motion events we do not want(too fast) display update */
|
||||||
|
|
||||||
|
static DAActionRect buttonRects[] = {
|
||||||
|
{{5, 39, 14, 9}, ActionPrev},
|
||||||
|
{{19, 39, 14, 9}, ActionNext},
|
||||||
|
{{33, 39, 13, 9}, ActionFastr},
|
||||||
|
{{46, 39, 13, 9}, ActionFastf},
|
||||||
|
{{5, 48, 11, 11}, ActionEject},
|
||||||
|
{{16, 48, 21, 11}, ActionPlay},
|
||||||
|
{{37, 48, 11, 11}, ActionPause},
|
||||||
|
{{48, 48, 11, 11}, ActionStop}
|
||||||
|
};
|
||||||
|
|
||||||
|
static DAActionRect toggleRect[] = {
|
||||||
|
{{5, 5, 54, 30}, ToggleWins}
|
||||||
|
};
|
||||||
|
|
||||||
|
static DAActionRect globRect[] = {
|
||||||
|
{{0, 0, 64, 64}, ToggleVol}
|
||||||
|
};
|
||||||
|
|
||||||
|
static DAActionRect displayRects[] = {
|
||||||
|
{{5, 5, 54, 12}, ToggleTime},
|
||||||
|
{{5, 25, 54, 9}, ToggleTitle}
|
||||||
|
};
|
||||||
|
|
||||||
|
static DAActionRect volumeRects[] = {
|
||||||
|
{{5, 17, 38, 8 }, ChangeVol}
|
||||||
|
};
|
||||||
|
|
||||||
|
static DAProgramOption options[] = {
|
||||||
|
{"-c", "--command", "Command to launch xmms", DOString, False,
|
||||||
|
{&xmms_cmd} },
|
||||||
|
{"-d", "--display", "Display to use", DOString, False, {&displayName} },
|
||||||
|
{"-r", "--run", "Run xmms on startup", DONone, False, {NULL} },
|
||||||
|
{"-s", "--session", "Xmms session to use", DONatural, False,
|
||||||
|
{&xmms_session} },
|
||||||
|
{"-t", "--title", "Show title instead of kbps by default", DONone,
|
||||||
|
False, {NULL} },
|
||||||
|
{"-u", "--hide", "Hide xmms windows on startup", DONone, False,
|
||||||
|
{NULL} },
|
||||||
|
{"-V", "--volume", "Stepping of the wheel volume control (in percent)",
|
||||||
|
DONatural, False, {&volume_step} },
|
||||||
|
{"-x", "--wmxmms", "Use wmxmms-like show and hide", DONone, False,
|
||||||
|
{NULL} },
|
||||||
|
{"-a", "--rotate-arrow", "Do not rotate the arrow, when paused",
|
||||||
|
DONone, False, {NULL} },
|
||||||
|
{"-l", "--time-left", "Show time left instead of time remaining by default",
|
||||||
|
DONone, False, {NULL} },
|
||||||
|
{"-b", "--volume-slider", "Show volume slider instead of channels",
|
||||||
|
DONone, False, {NULL}},
|
||||||
|
{"-R", "--run-excusive", "Run xmms on startup, exit when xmms exits", DONone, False, {NULL} }
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
wchar_t c;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
} glyphdescr;
|
||||||
|
|
||||||
|
static glyphdescr glyphs[] = {
|
||||||
|
{L'-', 67, 83}, {L'.', 73, 83}, {L'\x27', 79, 83},
|
||||||
|
{L'(', 85, 83}, {L')', 91, 83}, {L'*', 97, 83}, {L'/', 103, 83},
|
||||||
|
|
||||||
|
{L'0', 1, 83}, {L'1', 7, 83}, {L'2', 13, 83}, {L'3', 19, 83}, {L'4', 25, 83},
|
||||||
|
{L'5', 31, 83}, {L'6', 37, 83}, {L'7', 43, 83}, {L'8', 49, 83}, {L'9', 55, 83},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{L'A', 1, 73}, {L'a', 1, 73},
|
||||||
|
{L'B', 7, 73}, {L'b', 7, 73},
|
||||||
|
{L'C', 13, 73}, {L'c', 13, 73},
|
||||||
|
{L'D', 19, 73}, {L'd', 19, 73},
|
||||||
|
{L'E', 25, 73}, {L'e', 25, 73},
|
||||||
|
|
||||||
|
{L'F', 31, 73}, {L'f', 31, 73},
|
||||||
|
{L'G', 37, 73}, {L'g', 37, 73},
|
||||||
|
{L'H', 43, 73}, {L'h', 43, 73},
|
||||||
|
{L'I', 49, 73}, {L'i', 49, 73},
|
||||||
|
{L'J', 55, 73}, {L'j', 55, 73},
|
||||||
|
|
||||||
|
{L'K', 61, 73}, {L'k', 61, 73},
|
||||||
|
{L'L', 67, 73}, {L'l', 67, 73},
|
||||||
|
{L'M', 73, 73}, {L'm', 73, 73},
|
||||||
|
{L'N', 79, 73}, {L'n', 79, 73},
|
||||||
|
{L'O', 85, 73}, {L'o', 85, 73},
|
||||||
|
|
||||||
|
{L'P', 91, 73}, {L'p', 91, 73},
|
||||||
|
{L'Q', 97, 73}, {L'q', 97, 73},
|
||||||
|
{L'R',103, 73}, {L'r',103, 73},
|
||||||
|
{L'S',109, 73}, {L's',109, 73},
|
||||||
|
{L'T',115, 73}, {L't',115, 73},
|
||||||
|
|
||||||
|
{L'U',121, 73}, {L'u',121, 73},
|
||||||
|
{L'V',127, 73}, {L'v',127, 73},
|
||||||
|
{L'W',133, 73}, {L'w',133, 73},
|
||||||
|
{L'X',139, 73}, {L'x',139, 73},
|
||||||
|
{L'Y',145, 73}, {L'y',145, 73},
|
||||||
|
|
||||||
|
{L'Z',151, 73}, {L'z',151, 73},
|
||||||
|
|
||||||
|
|
||||||
|
{L'\x42e', 1, 93}, {L'\x44e', 1, 93}, /* cyrillic Yu */
|
||||||
|
|
||||||
|
{L'\x410', 7, 93}, {L'\x430', 7, 93}, /* cyrillic A */
|
||||||
|
{L'\x411', 13, 93}, {L'\x431', 13, 93}, /* cyrillic Be */
|
||||||
|
{L'\x426', 19, 93}, {L'\x446', 19, 93}, /* cyrillic Ce */
|
||||||
|
{L'\x414', 25, 93}, {L'\x434', 25, 93}, /* cyrillic De */
|
||||||
|
{L'\x415', 31, 93}, {L'\x435', 31, 93}, /* cyrillic Ye */
|
||||||
|
|
||||||
|
{L'\x424', 37, 93}, {L'\x444', 37, 93}, /* cyrillic eF */
|
||||||
|
{L'\x413', 43, 93}, {L'\x433', 43, 93}, /* cyrillic Ge */
|
||||||
|
{L'\x425', 49, 93}, {L'\x445', 49, 93}, /* cyrillic Ha */
|
||||||
|
{L'\x418', 55, 93}, {L'\x438', 55, 93}, /* cyrillic I */
|
||||||
|
{L'\x419', 61, 93}, {L'\x439', 61, 93}, /* cyrillic I-kratkoe */
|
||||||
|
|
||||||
|
{L'\x41a', 67, 93}, {L'\x43a', 67, 93}, /* cyrillic Ka */
|
||||||
|
{L'\x41b', 73, 93}, {L'\x43b', 73, 93}, /* cyrillic eL */
|
||||||
|
{L'\x41c', 79, 93}, {L'\x43c', 79, 93}, /* cyrillic eM */
|
||||||
|
{L'\x41d', 85, 93}, {L'\x43d', 85, 93}, /* cyrillic eN */
|
||||||
|
{L'\x41e', 91, 93}, {L'\x43e', 91, 93}, /* cyrillic O */
|
||||||
|
|
||||||
|
{L'\x41f', 97, 93}, {L'\x43f', 97, 93}, /* cyrillic Pe */
|
||||||
|
{L'\x42f',103, 93}, {L'\x44f',103, 93}, /* cyrillic Ya */
|
||||||
|
{L'\x420',109, 93}, {L'\x440',109, 93}, /* cyrillic eR */
|
||||||
|
{L'\x421',115, 93}, {L'\x441',115, 93}, /* cyrillic eS */
|
||||||
|
{L'\x422',121, 93}, {L'\x442',121, 93}, /* cyrillic Te */
|
||||||
|
|
||||||
|
{L'\x423',127, 93}, {L'\x443',127, 93}, /* cyrillic U */
|
||||||
|
{L'\x416',133, 93}, {L'\x436',133, 93}, /* cyrillic Je */
|
||||||
|
{L'\x412',139, 93}, {L'\x432',139, 93}, /* cyrillic Ve */
|
||||||
|
{L'\x42c',145, 93}, {L'\x44c',145, 93}, /* cyrillic MyagkijZnak */
|
||||||
|
{L'\x42b',151, 93}, {L'\x44b',151, 93}, /* cyrillic Y */
|
||||||
|
|
||||||
|
{L'\x417',157, 93}, {L'\x437',157, 93}, /* cyrillic Ze */
|
||||||
|
{L'\x428',163, 93}, {L'\x448',163, 93}, /* cyrillic Sha */
|
||||||
|
{L'\x42d',169, 93}, {L'\x44d',169, 93}, /* cyrillic E */
|
||||||
|
{L'\x429',175, 93}, {L'\x449',175, 93}, /* cyrillic Scha */
|
||||||
|
{L'\x427',181, 93}, {L'\x447',181, 93}, /* cyrillic Che */
|
||||||
|
|
||||||
|
{L'\x42a',187, 93}, {L'\x44a',187, 93}, /* cyrillic TvyordyiZnak */
|
||||||
|
{L'\x404',115, 83}, {L'\x454',115, 83}, /* ukrainian IE */
|
||||||
|
{L'\x406', 49, 73}, {L'\x456', 49, 73}, /* ukrainian I */
|
||||||
|
{L'\x407',109, 83}, {L'\x457',109, 83}, /* ukrainian YI */
|
||||||
|
{L'\x491', 43, 93}, {L'\x490', 43, 93}, /* ukrainian GHE with upturn */
|
||||||
|
|
||||||
|
{L'\x401',121, 83}, {L'\x451',121, 83}, /* cyrillic Yo */
|
||||||
|
|
||||||
|
{L' ', 61, 83}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* Functions */
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void copyNumArea(int x, int y, int sx, int sy, int dx, int dy)
|
||||||
|
{
|
||||||
|
XCopyArea(DADisplay, pixnum, pixmap, gc, x, y, sx, sy, dx, dy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void buttonDraw(DARect rect)
|
||||||
|
{
|
||||||
|
copyNumArea((rect.x)-5, (rect.y)-8, rect.width, rect.height,
|
||||||
|
rect.x, rect.y);
|
||||||
|
DASetPixmap(pixmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionPlay(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (data) {
|
||||||
|
buttonDraw(rect);
|
||||||
|
} else {
|
||||||
|
xmms_remote_play(xmms_session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionPause(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (data) {
|
||||||
|
buttonDraw(rect);
|
||||||
|
} else {
|
||||||
|
xmms_remote_pause(xmms_session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionEject(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (data) {
|
||||||
|
buttonDraw(rect);
|
||||||
|
} else {
|
||||||
|
xmms_remote_eject(xmms_session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionPrev(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (data) {
|
||||||
|
buttonDraw(rect);
|
||||||
|
} else {
|
||||||
|
xmms_remote_playlist_prev(xmms_session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionNext(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (data) {
|
||||||
|
buttonDraw(rect);
|
||||||
|
} else {
|
||||||
|
xmms_remote_playlist_next(xmms_session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionStop(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (data) {
|
||||||
|
buttonDraw(rect);
|
||||||
|
} else {
|
||||||
|
xmms_remote_stop(xmms_session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionFastr(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (data) {
|
||||||
|
buttonDraw(rect);
|
||||||
|
} else {
|
||||||
|
xmms_remote_jump_to_time(xmms_session,
|
||||||
|
xmms_remote_get_output_time(xmms_session)-10000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionFastf(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (data) {
|
||||||
|
buttonDraw(rect);
|
||||||
|
} else {
|
||||||
|
xmms_remote_jump_to_time(xmms_session,
|
||||||
|
xmms_remote_get_output_time(xmms_session)+10000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ToggleWins(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (xmms_running)
|
||||||
|
{
|
||||||
|
if (options[7].used)
|
||||||
|
{
|
||||||
|
if (data)
|
||||||
|
xmms_remote_main_win_toggle(xmms_session,
|
||||||
|
!xmms_remote_is_main_win(xmms_session));
|
||||||
|
if (!data)
|
||||||
|
xmms_remote_pl_win_toggle(xmms_session,
|
||||||
|
!xmms_remote_is_pl_win(xmms_session));
|
||||||
|
} else {
|
||||||
|
if (xmms_remote_is_main_win(xmms_session) ||
|
||||||
|
xmms_remote_is_pl_win(xmms_session) ||
|
||||||
|
xmms_remote_is_eq_win(xmms_session))
|
||||||
|
{
|
||||||
|
main_vis = xmms_remote_is_main_win(xmms_session);
|
||||||
|
pl_vis = xmms_remote_is_pl_win(xmms_session);
|
||||||
|
eq_vis = xmms_remote_is_eq_win(xmms_session);
|
||||||
|
|
||||||
|
xmms_remote_main_win_toggle(xmms_session, 0);
|
||||||
|
xmms_remote_pl_win_toggle(xmms_session, 0);
|
||||||
|
xmms_remote_eq_win_toggle(xmms_session, 0);
|
||||||
|
} else {
|
||||||
|
xmms_remote_main_win_toggle(xmms_session, main_vis);
|
||||||
|
xmms_remote_pl_win_toggle(xmms_session, pl_vis);
|
||||||
|
xmms_remote_eq_win_toggle(xmms_session, eq_vis);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ( (ev.xbutton.time-click_time) <= DBL_CLICK_INTERVAL )
|
||||||
|
{
|
||||||
|
click_time=0;
|
||||||
|
ExecuteXmms();
|
||||||
|
} else {
|
||||||
|
click_time=ev.xbutton.time;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ToggleVol(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
int volume;
|
||||||
|
int factor;
|
||||||
|
|
||||||
|
if (*(int*)data == 1)
|
||||||
|
factor = volume_step;
|
||||||
|
else
|
||||||
|
factor = -volume_step;
|
||||||
|
|
||||||
|
/* xmms seems to do the bounds checking for us */
|
||||||
|
|
||||||
|
volume = xmms_remote_get_main_volume(xmms_session);
|
||||||
|
xmms_remote_set_main_volume(xmms_session, volume+factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChangeVol(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
int volume = (int)100*(((float)x)/38);
|
||||||
|
xmms_remote_set_main_volume(xmms_session, volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ToggleTitle(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (t_scroll)
|
||||||
|
t_scroll = 0;
|
||||||
|
else t_scroll =1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ToggleTime(int x, int y, DARect rect, void *data)
|
||||||
|
{
|
||||||
|
if (t_time)
|
||||||
|
t_time = 0;
|
||||||
|
else t_time =1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void buttonPress(int button, int state, int x, int y)
|
||||||
|
{
|
||||||
|
if (button==1)
|
||||||
|
left_pressed=1;
|
||||||
|
if (xmms_running)
|
||||||
|
{
|
||||||
|
if (button == 1)
|
||||||
|
{
|
||||||
|
char *tmp="1";
|
||||||
|
DAProcessActionRects(x, y, buttonRects, sizeof(buttonRects)/sizeof(DAActionRect), tmp);
|
||||||
|
DAProcessActionRects(x, y, displayRects, sizeof(displayRects)/sizeof(DAActionRect), tmp);
|
||||||
|
}
|
||||||
|
if (button == 2)
|
||||||
|
{
|
||||||
|
DAProcessActionRects(x, y, toggleRect, sizeof(toggleRect)/sizeof(DAActionRect), NULL);
|
||||||
|
}
|
||||||
|
if (button == 3)
|
||||||
|
{
|
||||||
|
char *tmp="1";
|
||||||
|
DAProcessActionRects(x, y, toggleRect, sizeof(toggleRect)/sizeof(DAActionRect), tmp);
|
||||||
|
}
|
||||||
|
if ((button == 4) || (button == 5))
|
||||||
|
{
|
||||||
|
if (button == 5)
|
||||||
|
{
|
||||||
|
/* Wheel scrolls down */
|
||||||
|
int tmp=2;
|
||||||
|
DAProcessActionRects(x, y, globRect, sizeof(globRect)/sizeof(DAActionRect), &tmp);
|
||||||
|
} else {
|
||||||
|
/* Wheel scrolls up */
|
||||||
|
int tmp=1;
|
||||||
|
DAProcessActionRects(x, y, globRect, sizeof(globRect)/sizeof(DAActionRect), &tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DAProcessActionRects(x, y, toggleRect, sizeof(toggleRect)/sizeof(DAActionRect), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void buttonRelease(int button, int state, int x, int y)
|
||||||
|
{
|
||||||
|
if (button==1)
|
||||||
|
left_pressed=0;
|
||||||
|
if (xmms_running)
|
||||||
|
{
|
||||||
|
if (button == 1)
|
||||||
|
{
|
||||||
|
copyNumArea(0,51, 54, 20, 5,39);
|
||||||
|
DASetPixmap(pixmap);
|
||||||
|
DAProcessActionRects(x, y, buttonRects, sizeof(buttonRects)/sizeof(DAActionRect), NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void buttonDrag(int x, int y)
|
||||||
|
{
|
||||||
|
motion_event=1;
|
||||||
|
if (t_volume)
|
||||||
|
if (left_pressed==1) {
|
||||||
|
DAProcessActionRects(x,y, volumeRects, 1, NULL);
|
||||||
|
DrawChannels(0); /* volume only update */
|
||||||
|
DASetPixmap(pixmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayRoutine()
|
||||||
|
{
|
||||||
|
int time = 0, length = 0, position = 100;
|
||||||
|
int rate, freq, nch;
|
||||||
|
char *title = NULL;
|
||||||
|
Bool do_scroll=t_scroll;
|
||||||
|
|
||||||
|
xmms_running=xmms_remote_is_running(xmms_session);
|
||||||
|
|
||||||
|
/* Compute diplay */
|
||||||
|
if (!xmms_running)
|
||||||
|
{
|
||||||
|
if (run_excusive)
|
||||||
|
exit(0);
|
||||||
|
position = 100; /* Will display "00" as the current position */
|
||||||
|
do_scroll = 0; /* Will display channel/kbps info */
|
||||||
|
arrow_pos = 5;
|
||||||
|
rate = 0;
|
||||||
|
time = 0;
|
||||||
|
nch = 4;
|
||||||
|
freq = 0;
|
||||||
|
length = 0;
|
||||||
|
} else {
|
||||||
|
/* check again, avoiding xmms_remote_* functions to hang,
|
||||||
|
if xmms was closed in the meantime */
|
||||||
|
if ((xmms_running = xmms_remote_is_running(xmms_session)))
|
||||||
|
{
|
||||||
|
position = xmms_remote_get_playlist_pos(xmms_session);
|
||||||
|
xmms_remote_get_info(xmms_session, &rate, &freq, &nch);
|
||||||
|
time = xmms_remote_get_output_time(xmms_session);
|
||||||
|
length = xmms_remote_get_playlist_time(xmms_session, position);
|
||||||
|
title = xmms_remote_get_playlist_title(xmms_session, position);
|
||||||
|
if (!xmms_remote_is_playing(xmms_session) || (pause_norotate &&
|
||||||
|
xmms_remote_is_paused(xmms_session) ))
|
||||||
|
arrow_pos = 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Draw everything */
|
||||||
|
if (t_time) DrawTime(length-time);
|
||||||
|
else DrawTime(time);
|
||||||
|
DrawPos(position);
|
||||||
|
DrawArrow();
|
||||||
|
DrawChannels(nch);
|
||||||
|
if (do_scroll && (title != NULL))
|
||||||
|
DrawTitle(title);
|
||||||
|
else
|
||||||
|
DrawKbps(rate);
|
||||||
|
|
||||||
|
DASetPixmap(pixmap);
|
||||||
|
|
||||||
|
if (title != NULL)
|
||||||
|
free(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawPos (int pos)
|
||||||
|
{
|
||||||
|
char posstr[16];
|
||||||
|
char *p = posstr;
|
||||||
|
int i=1;
|
||||||
|
|
||||||
|
pos++;
|
||||||
|
if (pos > 99) pos=0;
|
||||||
|
sprintf(posstr, "%02d", pos);
|
||||||
|
|
||||||
|
for (;i<3; i++)
|
||||||
|
{
|
||||||
|
copyNumArea((*p-'0')*6 + 1, 1, 6, 7, (i*6)+39, 7);
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawTime(int time)
|
||||||
|
{
|
||||||
|
char timestr[16];
|
||||||
|
char *p = timestr;
|
||||||
|
int i=0;
|
||||||
|
|
||||||
|
time = time / 1000;
|
||||||
|
|
||||||
|
/* 3 cases:
|
||||||
|
* up to 99 minutes and 59 seconds
|
||||||
|
* up to 99 hours and 59 minutes
|
||||||
|
* more
|
||||||
|
*/
|
||||||
|
if (time < 6000)
|
||||||
|
{
|
||||||
|
sprintf(timestr, "%02d%02d", time / 60, time % 60);
|
||||||
|
} else {
|
||||||
|
if (time < 360000)
|
||||||
|
{
|
||||||
|
sprintf(timestr, "%02d%02d", time / 3600,
|
||||||
|
time % 3600 / 60);
|
||||||
|
} else {
|
||||||
|
sprintf(timestr, "%02d%02d", 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;i<4; i++)
|
||||||
|
{
|
||||||
|
copyNumArea((*p-'0')*7 + 2, 11, 7, 9, i<2 ?(i*7)+7:(i*7)+12, 7);
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawArrow(void)
|
||||||
|
{
|
||||||
|
copyNumArea((arrow_pos*8)+30, 22, 8, 9, 47, 19);
|
||||||
|
arrow_pos++;
|
||||||
|
if (arrow_pos > 4) arrow_pos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawChannels(int channels)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (t_volume) {
|
||||||
|
int volume = (int)(0.36*(float)xmms_remote_get_main_volume(xmms_session));
|
||||||
|
if (volume > 36)
|
||||||
|
volume = 36;
|
||||||
|
copyNumArea(61, 0, volume, 6, 7, 18);
|
||||||
|
copyNumArea(97, 0, 36-volume, 6, 7+volume, 18);
|
||||||
|
} else {
|
||||||
|
if (channels == 4)
|
||||||
|
{
|
||||||
|
copyNumArea(55, 32, 10, 6, 10, 18);
|
||||||
|
} else {
|
||||||
|
copyNumArea((channels*10), 22, 10, 6, 10, 18);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawKbps(int bps)
|
||||||
|
{
|
||||||
|
char kbpstr[16];
|
||||||
|
char *p = kbpstr;
|
||||||
|
int i=1;
|
||||||
|
|
||||||
|
if (bps > 999000) bps=0;
|
||||||
|
sprintf(kbpstr, "%03d", bps / 1000);
|
||||||
|
|
||||||
|
for (;i<4; i++)
|
||||||
|
{
|
||||||
|
copyNumArea((*p-'0')*6 + 1, 1, 6, 7, (i*6)+1, 26);
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
copyNumArea(55, 39, 18, 8, 25, 26);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawChar(wchar_t wc, int x, int y)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < sizeof(glyphs)/sizeof(glyphdescr) - 1; ++i)
|
||||||
|
{
|
||||||
|
if(wc == glyphs[i].c)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
copyNumArea(glyphs[i].x, glyphs[i].y, 6, 8, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
int DrawChars(char *title, int tpos, int pos)
|
||||||
|
{
|
||||||
|
wchar_t wc;
|
||||||
|
|
||||||
|
mbtowc(NULL, NULL, 0);
|
||||||
|
while(*title && (pos <= (tpos + DISPLAYSIZE)))
|
||||||
|
{
|
||||||
|
int len = mbtowc(&wc, title, MB_CUR_MAX);
|
||||||
|
title += len;
|
||||||
|
if(pos > tpos)
|
||||||
|
DrawChar(wc, (pos - tpos)*6 + 1, 26);
|
||||||
|
++pos;
|
||||||
|
}
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawTitle(char *name)
|
||||||
|
{
|
||||||
|
int len, pos, tpos = title_pos;
|
||||||
|
|
||||||
|
if (name == NULL)
|
||||||
|
return;
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf("name: %s\n", name);
|
||||||
|
#endif
|
||||||
|
len = pos = DrawChars(name, tpos, 0);
|
||||||
|
if(pos < 6)
|
||||||
|
{
|
||||||
|
DrawChars(" ", tpos, pos);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pos <= tpos + DISPLAYSIZE)
|
||||||
|
pos = DrawChars(SEPARATOR, tpos, pos);
|
||||||
|
|
||||||
|
if(pos <= tpos + DISPLAYSIZE)
|
||||||
|
DrawChars(name, tpos, pos);
|
||||||
|
|
||||||
|
if(tpos >= len + strlen(SEPARATOR))
|
||||||
|
title_pos = 0;
|
||||||
|
|
||||||
|
title_pos = title_pos + 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExecuteXmms(void)
|
||||||
|
{
|
||||||
|
char *command;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
command=malloc(strlen(xmms_cmd)+5);
|
||||||
|
sprintf(command, "%s &", xmms_cmd);
|
||||||
|
status = system(command);
|
||||||
|
if (status)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "XMMS can't be launched, exiting...");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
while (!xmms_remote_is_running(xmms_session))
|
||||||
|
usleep(10000L);
|
||||||
|
free(command);
|
||||||
|
}
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* Main */
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
unsigned height, width;
|
||||||
|
DACallbacks callbacks={NULL, buttonPress, buttonRelease, buttonDrag,
|
||||||
|
NULL, NULL, NULL};
|
||||||
|
|
||||||
|
/* Initialization */
|
||||||
|
DAParseArguments(argc, argv, options,
|
||||||
|
sizeof(options)/sizeof(DAProgramOption),
|
||||||
|
"XMMS remote control by Bastien Nocera <hadess@hadess.net>",
|
||||||
|
VERSION);
|
||||||
|
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
DAInitialize(displayName, "wmusic", 64, 64, argc, argv);
|
||||||
|
DASetCallbacks(&callbacks);
|
||||||
|
DASetTimeout(100);
|
||||||
|
|
||||||
|
DAMakePixmapFromData(wmusic_master_xpm, &pixmap,
|
||||||
|
&mask, &height, &width);
|
||||||
|
DAMakePixmapFromData(wmusic_digits_xpm, &pixnum,
|
||||||
|
&masknum, &height, &width);
|
||||||
|
gc = DefaultGC(DADisplay, DefaultScreen(DADisplay));
|
||||||
|
DASetShapeWithOffset(mask, 0, 0);
|
||||||
|
|
||||||
|
DASetPixmap(pixmap);
|
||||||
|
DAShow();
|
||||||
|
|
||||||
|
/* End of initialization */
|
||||||
|
|
||||||
|
if (options[4].used) t_scroll=1;
|
||||||
|
if (options[8].used) pause_norotate=1;
|
||||||
|
if (options[9].used) t_time=1;
|
||||||
|
if (options[10].used) t_volume=1;
|
||||||
|
if (options[11].used) run_excusive=1;
|
||||||
|
|
||||||
|
/* Launch xmms if it's not running and -r or -R was used */
|
||||||
|
xmms_running=xmms_remote_is_running(xmms_session);
|
||||||
|
if ((!xmms_running) && (options[2].used || run_excusive))
|
||||||
|
{
|
||||||
|
ExecuteXmms();
|
||||||
|
xmms_running=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(xmms_remote_is_main_win(xmms_session) && (options[6].used))
|
||||||
|
ToggleWins(0, 0, DANoRect, NULL);
|
||||||
|
|
||||||
|
/* Update the display */
|
||||||
|
DisplayRoutine();
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (DANextEventOrTimeout(&ev, 100))
|
||||||
|
DAProcessEvent(&ev);
|
||||||
|
if (!motion_event)
|
||||||
|
DisplayRoutine();
|
||||||
|
else
|
||||||
|
motion_event=0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
43
wmusic/wmusic.spec.in
Normal file
43
wmusic/wmusic.spec.in
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
%define name @PACKAGE@
|
||||||
|
%define version @VERSION@
|
||||||
|
%define release 1
|
||||||
|
%define prefix /usr
|
||||||
|
|
||||||
|
Summary: a remote-control DockApp for xmms
|
||||||
|
Name: %{name}
|
||||||
|
Version: %{version}
|
||||||
|
Release: %{release}
|
||||||
|
Copyright: GPL
|
||||||
|
Source: http://hadess.net/files/wmusic-%{version}.tar.gz
|
||||||
|
Group: Applications/Multimedia
|
||||||
|
BuildRoot: /var/tmp/%{name}-%{version}-root
|
||||||
|
Packager: Hadess <hadess@hadess.net>
|
||||||
|
Requires: xmms >= 1.0.0
|
||||||
|
|
||||||
|
%description
|
||||||
|
wmusic is a dockapp that remote-controls xmms. Here is a list of the features:
|
||||||
|
|
||||||
|
- VCR style controls including fast rewind and fast forward
|
||||||
|
- Time and Playlist position display
|
||||||
|
- Super stylee rotating arrow
|
||||||
|
- Hiding of the xmms windows (on startup and through middle-click)
|
||||||
|
- Multi-threaded
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n %{name}-%{version}
|
||||||
|
%build
|
||||||
|
./configure --prefix=%{prefix}
|
||||||
|
|
||||||
|
%install
|
||||||
|
make PREFIX=$RPM_BUILD_ROOT/%{prefix} install
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
%files
|
||||||
|
%attr(0755,root,root) /%{prefix}/bin/wmusic
|
||||||
|
%doc COPYING README
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Mon Jan 31 2000 Hadess <hadess@writeme.com>
|
||||||
|
- First .spec file
|
Loading…
Reference in a new issue