mirror of
https://github.com/gryf/wmaker.git
synced 2026-03-12 04:25:47 +01:00
Compare commits
320 Commits
release-0.
...
wmaker-0.9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c95b464680 | ||
|
|
59609280a2 | ||
|
|
bb0c0dafae | ||
|
|
5f3c54af13 | ||
|
|
d8862b0bdf | ||
|
|
bbd1e5dada | ||
|
|
087a16400f | ||
|
|
b89f3e6df5 | ||
|
|
4bc0bcfbc2 | ||
|
|
9ff9fcda48 | ||
|
|
ac6b5afd32 | ||
|
|
0d9b73cd74 | ||
|
|
12b8b8ba58 | ||
|
|
f274afdd1d | ||
|
|
e3c67d55de | ||
|
|
8bf6071c48 | ||
|
|
897e75d554 | ||
|
|
363b6032f5 | ||
|
|
4638216209 | ||
|
|
67a9ea74a3 | ||
|
|
f89cf06299 | ||
|
|
cb7f34e237 | ||
|
|
7401a1329f | ||
|
|
df1228f387 | ||
|
|
9ead135f51 | ||
|
|
193a63511d | ||
|
|
b00076b32a | ||
|
|
51c2edf868 | ||
|
|
11b464a002 | ||
|
|
c3cff33f99 | ||
|
|
663df7b4cb | ||
|
|
b79524ce6f | ||
|
|
65a113f9a3 | ||
|
|
45c55a3e76 | ||
|
|
e93e16de06 | ||
|
|
620a280d64 | ||
|
|
4bda625076 | ||
|
|
b034bb077f | ||
|
|
d08691d5a5 | ||
|
|
08e811aae7 | ||
|
|
6de693a24d | ||
|
|
3a7749b0fc | ||
|
|
f555ccb9b9 | ||
|
|
f6682a9ade | ||
|
|
1166a58ec7 | ||
|
|
59d2a5cbe5 | ||
|
|
85f72d6576 | ||
|
|
435aee107e | ||
|
|
6cd91272a6 | ||
|
|
7908c9a66b | ||
|
|
f6fb9fbb3e | ||
|
|
9de3560d9f | ||
|
|
88e207f9e0 | ||
|
|
66ec682107 | ||
|
|
1076645853 | ||
|
|
30247c5886 | ||
|
|
1e3a40370d | ||
|
|
27b9e27ae0 | ||
|
|
28050dab72 | ||
|
|
bc6aeab722 | ||
|
|
737328566f | ||
|
|
6cfad0b10f | ||
|
|
19c7a99197 | ||
|
|
7929d55f3f | ||
|
|
1f12617065 | ||
|
|
944737dde7 | ||
|
|
a91a34732c | ||
|
|
744c0726a1 | ||
|
|
7055530895 | ||
|
|
9402724e40 | ||
|
|
cd36d73886 | ||
|
|
0c09179f01 | ||
|
|
884a3f1647 | ||
|
|
2e572717c5 | ||
|
|
8502709884 | ||
|
|
5f4a3f6777 | ||
|
|
067fc41354 | ||
|
|
36b55dc1e6 | ||
|
|
3a97c33072 | ||
|
|
62590be0db | ||
|
|
440f2abe6f | ||
|
|
f54f0856c1 | ||
|
|
62994167c5 | ||
|
|
00e709cec4 | ||
|
|
2b51c21ee5 | ||
|
|
3ed1d3e25c | ||
|
|
3088277b1e | ||
|
|
879b00a57b | ||
|
|
6830b05716 | ||
|
|
5912898b06 | ||
|
|
f614cb8341 | ||
|
|
9ff85407b7 | ||
|
|
d211420261 | ||
|
|
1ef52e0aec | ||
|
|
9aca0d5f6e | ||
|
|
c7c68c6fe7 | ||
|
|
95897acc30 | ||
|
|
57869b667b | ||
|
|
2c8a70b743 | ||
|
|
0445dd5c18 | ||
|
|
b6e06d4beb | ||
|
|
b75b7cbc01 | ||
|
|
eb646a6682 | ||
|
|
7b88cd8afd | ||
|
|
f5a6724142 | ||
|
|
afbab71401 | ||
|
|
20fe42df2b | ||
|
|
d0c5bedab6 | ||
|
|
ef31cd1323 | ||
|
|
427a42ab58 | ||
|
|
474c4caf94 | ||
|
|
109bb540ec | ||
|
|
9b7b9f6815 | ||
|
|
32973f6e15 | ||
|
|
5b26a68910 | ||
|
|
59014546aa | ||
|
|
e4483de406 | ||
|
|
90d830837a | ||
|
|
752163dfc6 | ||
|
|
6d02fe98f2 | ||
|
|
500d569c79 | ||
|
|
f54b0de7b4 | ||
|
|
b8193865f6 | ||
|
|
e7d0c5d9e9 | ||
|
|
791bb6a444 | ||
|
|
a018eff89d | ||
|
|
1096cfa991 | ||
|
|
5d9354f362 | ||
|
|
0b42849a3e | ||
|
|
df75c86ef0 | ||
|
|
20975c4918 | ||
|
|
1dfaec332e | ||
|
|
3d6d775f08 | ||
|
|
1f393ac4f7 | ||
|
|
847479b886 | ||
|
|
6aed0cd713 | ||
|
|
39b9edfdcd | ||
|
|
090cc27f00 | ||
|
|
08225948bc | ||
|
|
18d07e04a6 | ||
|
|
74ba4f8eef | ||
|
|
0852957ea1 | ||
|
|
7efcf57c18 | ||
|
|
44f636e91e | ||
|
|
8457611316 | ||
|
|
bd7943d9a7 | ||
|
|
b0d72a3db2 | ||
|
|
396b011610 | ||
|
|
c131f14d3e | ||
|
|
a4c986fa1b | ||
|
|
64468fcf63 | ||
|
|
8904783aee | ||
|
|
40c89b3399 | ||
|
|
27a396d7ed | ||
|
|
2cf5931890 | ||
|
|
d159da8671 | ||
|
|
ed0d234d7f | ||
|
|
4d701d8306 | ||
|
|
5dbb770aa4 | ||
|
|
479ccbda82 | ||
|
|
001cb65271 | ||
|
|
bc3ab27364 | ||
|
|
669d542408 | ||
|
|
3dcab96180 | ||
|
|
7f1d621f43 | ||
|
|
b0063c83c7 | ||
|
|
f06c9a1953 | ||
|
|
e1958b22c5 | ||
|
|
528243bb98 | ||
|
|
f058fdf72c | ||
|
|
5f79f1bcde | ||
|
|
18ed046356 | ||
|
|
277d0055fd | ||
|
|
e727cbadb6 | ||
|
|
fdeb749da7 | ||
|
|
dee8c6e770 | ||
|
|
fe4cd695af | ||
|
|
1902325087 | ||
|
|
5b28616212 | ||
|
|
ad05cc3b44 | ||
|
|
56f73aa4b9 | ||
|
|
40111188ec | ||
|
|
80c09f1075 | ||
|
|
b5ef388711 | ||
|
|
7a8bde44fa | ||
|
|
b381674375 | ||
|
|
e54a0954e6 | ||
|
|
c0965cd48b | ||
|
|
4153e2fde4 | ||
|
|
f3487c1ea2 | ||
|
|
0898a3d475 | ||
|
|
064f79ebae | ||
|
|
55d37178a0 | ||
|
|
90e8cfc5b8 | ||
|
|
ab511aca5e | ||
|
|
39d250888e | ||
|
|
00638fa5d3 | ||
|
|
ca43aba088 | ||
|
|
96c64e15ef | ||
|
|
dd1ccd2fd6 | ||
|
|
c0442b1c59 | ||
|
|
bde9b8a21a | ||
|
|
83d3625e1a | ||
|
|
5ad557c6c8 | ||
|
|
1fa3937001 | ||
|
|
a10214a502 | ||
|
|
0fe70d2b4e | ||
|
|
18b3753227 | ||
|
|
0bfa12a1fc | ||
|
|
4d6cd7f326 | ||
|
|
2fe1b0e3f8 | ||
|
|
3929660f39 | ||
|
|
c2ec1cfe8a | ||
|
|
d597c61cb7 | ||
|
|
5e18eadf22 | ||
|
|
19f7fbc949 | ||
|
|
55f3cb9577 | ||
|
|
811e508c84 | ||
|
|
60ee69979f | ||
|
|
4f80ec9178 | ||
|
|
5e37991b6c | ||
|
|
a4bc7f6a07 | ||
|
|
6724ec5a6d | ||
|
|
879d13ef45 | ||
|
|
a1d78d102a | ||
|
|
3af4aa7846 | ||
|
|
0f0afc48ab | ||
|
|
55efa1f268 | ||
|
|
ffa1a610c0 | ||
|
|
0bb76c0a76 | ||
|
|
7be0a97998 | ||
|
|
5230a57599 | ||
|
|
3bed15d673 | ||
|
|
1e92274495 | ||
|
|
2b2fecac12 | ||
|
|
17f26077b0 | ||
|
|
a2b404b5b3 | ||
|
|
e98da5a628 | ||
|
|
b9e7a1d3ca | ||
|
|
1941aaf34a | ||
|
|
11c466ec26 | ||
|
|
feaa80addc | ||
|
|
92b012e800 | ||
|
|
3fc803c0d8 | ||
|
|
a07b262a87 | ||
|
|
851835c7a5 | ||
|
|
d4de3d0a45 | ||
|
|
048b43aea4 | ||
|
|
579eb01c6c | ||
|
|
ca212985df | ||
|
|
c32806ae14 | ||
|
|
ee5b28b0af | ||
|
|
750917986e | ||
|
|
6e72c20248 | ||
|
|
ad0ad5af22 | ||
|
|
e4a53ba71e | ||
|
|
208ee16849 | ||
|
|
f9acc9313e | ||
|
|
92fb96eb69 | ||
|
|
18d347ecd5 | ||
|
|
97e20d94de | ||
|
|
65e65c4e9d | ||
|
|
84fa789cd6 | ||
|
|
efcf27f854 | ||
|
|
5fe90167a3 | ||
|
|
f857012f7a | ||
|
|
efb0090f8c | ||
|
|
1cd1f16c3c | ||
|
|
0c1881e224 | ||
|
|
5bb35d94a5 | ||
|
|
321bb04586 | ||
|
|
77b8fe05ac | ||
|
|
9466c00f2b | ||
|
|
a8950af8ac | ||
|
|
58e719654f | ||
|
|
ad58481487 | ||
|
|
5402fccd1e | ||
|
|
cf7859d145 | ||
|
|
5db8b5660f | ||
|
|
5873385d32 | ||
|
|
a26b723c5a | ||
|
|
bc3d012e7c | ||
|
|
c08b3c5f32 | ||
|
|
f37b4cf5d0 | ||
|
|
06f1bf91a9 | ||
|
|
8b5f31ad8b | ||
|
|
2cc90e649a | ||
|
|
9d41f432b9 | ||
|
|
b4f540ddd6 | ||
|
|
03f534c0bf | ||
|
|
9078b1a5a7 | ||
|
|
da02e76051 | ||
|
|
9c19d14d1a | ||
|
|
bc88390918 | ||
|
|
a1b9bf23a9 | ||
|
|
511a06628b | ||
|
|
8a25fdc672 | ||
|
|
a1a7ba7689 | ||
|
|
4f84c48ccb | ||
|
|
9b63a77d6a | ||
|
|
89a32e3663 | ||
|
|
501c3f48b8 | ||
|
|
cab71ba6a1 | ||
|
|
96f8ab167f | ||
|
|
a8c7375623 | ||
|
|
365556b676 | ||
|
|
7b00d9ec12 | ||
|
|
89cb6559cc | ||
|
|
372da5ca39 | ||
|
|
514258fd35 | ||
|
|
0b0002f75a | ||
|
|
cf2322ee03 | ||
|
|
c9dfd7f3a4 | ||
|
|
7eb705472f | ||
|
|
d35dd84ae5 | ||
|
|
0613a758f4 | ||
|
|
9e615bcff9 | ||
|
|
9031641ba6 | ||
|
|
9bfa0b6efb | ||
|
|
60409e290d |
@@ -2,6 +2,7 @@ Makefile Makefile.in
|
||||
aclocal.m4
|
||||
configure config.log config.cache config.guess config.status config.sub
|
||||
libtool ltconfig ltmain.sh
|
||||
.psrc .inslog2 tca.map tca.log
|
||||
*.rpt
|
||||
update update-autoconf
|
||||
autom4te.cache
|
||||
.psrc .inslog2 tca.map tca.log pchdir *.rpt
|
||||
update
|
||||
WindowMaker*.tar.gz
|
||||
|
||||
2
AUTHORS
2
AUTHORS
@@ -217,7 +217,7 @@ FRBall <frb@umr.edu>
|
||||
dgradient fix
|
||||
|
||||
|
||||
"]d" <id@maliwan.org>
|
||||
"]d" <id@windowmaker.org>
|
||||
Window list menu miniaturized/hidden hints, XDE support, XKB lock
|
||||
language status, WINGs enhancements, bug fixes, window commands menu
|
||||
enhancement, window move/resize by keyboard. GNUstepGlow.tiff icon,
|
||||
|
||||
3
BUGFORM
3
BUGFORM
@@ -35,9 +35,6 @@ to bugs@windowmaker.org
|
||||
[ ] --enable-kanji
|
||||
[ ] --disable-shape
|
||||
[ ] --enable-single-icon
|
||||
[ ] --enable-kde
|
||||
[ ] --enable-gnome
|
||||
[ ] --enable-openlook
|
||||
[ ] --enable-modelock
|
||||
[ ] Others: .......................
|
||||
|
||||
|
||||
8
BUGS
8
BUGS
@@ -1,8 +1,12 @@
|
||||
Newly added
|
||||
- after a crash, wmaker will forget the hidden state of the apps and just
|
||||
show their windows minimized. normal restart is unaffected
|
||||
- after a crash, wmaker will completely mess the window's saved geometries
|
||||
and maximizing will have weird results. restart is unaffected
|
||||
|
||||
- wmaker will not stop managing a screen even if another window manager
|
||||
requests that, through the ICCCM 2.0 manager selection stuff
|
||||
- stacking code is buggy (or XFree is buggy)
|
||||
- after restart focus is losed or switched to another window. May be related
|
||||
to the one above.
|
||||
- save session doesnt work on some platforms (Alpha and Sparc)
|
||||
- texture pixmaps are being incorrectly freed somewhere. Either
|
||||
fix bug (to support broken MetroX servers) or remove all useless references
|
||||
|
||||
@@ -29,7 +29,16 @@ xpm/textr.xpm
|
||||
xpm/tnew.xpm
|
||||
inside Resources/Images.tiff "the little house", "the trash can",
|
||||
"the folder", "the floppies"
|
||||
|
||||
Ear.png
|
||||
Ftp.png
|
||||
ICQ.png
|
||||
Jabber.png
|
||||
Mozilla.png
|
||||
Pen.png
|
||||
Pencil.png
|
||||
Shell.png
|
||||
Speaker.png
|
||||
XChat.png
|
||||
|
||||
do What The Fuck you want to Public License
|
||||
|
||||
|
||||
251
ChangeLog
251
ChangeLog
@@ -1,3 +1,244 @@
|
||||
Changes since version 0.90.0:
|
||||
.............................
|
||||
|
||||
- added _NET_WM_NAME, _NET_WM_ICON_NAME and _NET_WM_ICON to WINGs
|
||||
- new WPrefs icon (thanks to Largo)
|
||||
- replaced VirtualEdgeThickness option, with EnableVirtualDesktop (boolean)
|
||||
- enhanced alt-tab panel, added theming ability
|
||||
- fixed issues with broken crash dialog
|
||||
- removed obsoleted options from wconfig.h
|
||||
- changed animation delay constants to fix issues with 2.6.x linux kernels
|
||||
(patch provided by Eric Piel <Eric.Piel@lifl.fr>)
|
||||
- fixed several broken po files
|
||||
- increased libwraster version number to 3.1.0 (added a RCopyArea function)
|
||||
|
||||
|
||||
Changes since version 0.80.2:
|
||||
.............................
|
||||
|
||||
- Some updates to WINGs WMConnection. See WINGs/ChangeLog for details.
|
||||
- Fixed empty window list menu, if the window list menu was launched through
|
||||
the root menu (sent by "Marc-Christian Petersen" <m.c.p@wolk-project.de>)
|
||||
- Fixed dock's menu mapping position when dock is on the right side.
|
||||
- Map clip's menu so that it never gets out of screen on the left or the right.
|
||||
- Patch to add binary mode on opening files (needed for Windows with Cygwin)
|
||||
(sent by luke <luke@posh.optushome.com.au>)
|
||||
- Updated French translations (Antoine Hulin <antoine@origan.fdn.org>)
|
||||
- Removed Hermes lib dependency in wrlib
|
||||
- Put back asm/MMX code in wrlib
|
||||
- Updated Russian locale files ("Andrew W. Nosenko" <awn@bcs.zp.ua>)
|
||||
- API change in WINGs for WMDraw*String(). Details in WINGs/Changelog
|
||||
- Removed obsoleted acconfig.h and implemented its functionality using
|
||||
AC_DEFINE and AC_DEFINE_UNQUOTED as autoconf 2.5x recommends.
|
||||
This will definitely enforce the need to use autoconf 2.5x
|
||||
- Added Xft2 support to WINGs, for rendering antialiased fonts with
|
||||
transparency. Details in WINGs/ChangeLog.
|
||||
- Fixed problem with long, preset workspace names (Wanderlei Antonio Cavassin
|
||||
<cavassin@conectiva.com.br>)
|
||||
- Added kinput2 bug workaround to stock WMWindowAttributes (Seiichi SATO
|
||||
<sato@cvs-net.co.jp>)
|
||||
- Added Belarusian translation (Ihar Viarheichyk <iverg@mail.ru>)
|
||||
- Fixed wrlib not to load braindead images with 0 sized width or height
|
||||
- Removed double no-position-display when cycling position display types
|
||||
with Shift key while moving windows.
|
||||
- Changed the default position display while moving a window to 'Center'.
|
||||
- Better outline when drawing balloons.
|
||||
- Fixed wrlib to not accept too large images (fixes buffer overflow)
|
||||
- Patched FAQ (David Coe <davidc@debian.org>)
|
||||
- Fixed bug with resizebars appearing out of nothing when reloading configs
|
||||
- Fixed sloppy focus bug (Pawel S. Veselov <Pawel.Veselov@Sun.COM>)
|
||||
- Applied Xinerama patch (after fixes) from (Peter Zijlstra
|
||||
<a.p.zijlstra@chello.nl>)
|
||||
- Added switch to enable/disable antialiased fonts in WPrefs's Expert Settings
|
||||
panel. (Temporary until the Font Settings panel in WPrefs is finished).
|
||||
- Added a check that only %d is used in a font specification in WMGLOBAL and at
|
||||
most once for each font in a fontset (eliminates a possible security exploit)
|
||||
- Added fontpanel callback
|
||||
- Fixed focus handling for windows that set WM_HINTS.take_focus = False.
|
||||
- Fixed a problem in the stacking code which could lead to segmentation faults
|
||||
(Jeff Teunissen <deek@d2dc.net>)
|
||||
- Fixed a crashing bug in the menu code with modal panels involved.
|
||||
- Fixed incorrect focusing of application's windows after an unhide (sometimes
|
||||
the incorrect window got focus instead of the apps's last focused window)
|
||||
- Unshade application's shaded windows when Dbl-MiddleClick-ing its appicon.
|
||||
(this is to be consistent with deminiaturizing application's miniwindows
|
||||
which also happens in this case, since shading is a form of miniaturization)
|
||||
- Fixed bug with tpixmap from previous xinerama patch (reported by g0sh)
|
||||
- Fixed edge resistance and move/resize frame drawing for borderless windows
|
||||
- Fixed wrong display position for the move/resize widgets after xinerama
|
||||
patch (Peter Zijlstra <a.p.zijlstra@chello.nl>)
|
||||
- Fixed bug with cursor locked in drag mode after Alt-dragging a window
|
||||
- Added Catalan translation (Ernest Adrogué <eadrogue@gmx.net>)
|
||||
- Fixed a bug with deminiaturizing windows when the application is hidden and
|
||||
the miniaturized window is selected from the window list menu
|
||||
- Fixed a bug with not showing shaded window frames when the application is
|
||||
hidden and another window belonging to the app is selected in the window
|
||||
list menu
|
||||
- Autoarrange icons after unhiding an application that has miniaturized
|
||||
windows, else they may cover other icons which are now in the positions
|
||||
they have occupied before hiding
|
||||
- Fixed Clip's workspace menu mapping to be consistent with the others
|
||||
- Fixed bug in wmsetbg that caused scale and maxscale to both do maxscale
|
||||
(Alexey Voinov <voins@voins.program.ru>)
|
||||
- Fixed bug with scrolling menus introduced by the xinerama patch.
|
||||
- Fixed bug that could cause SIGSEGV by accessing beyond the end of text in
|
||||
a WINGs textfield widget.
|
||||
- Fixed small memory leak in WINGs' font panel code.
|
||||
- Fixed memory leak in WINGs' file panel code.
|
||||
- Updated Bulgarian translations (Anton Zinoviev <zinoviev@debian.org>)
|
||||
- Fixed a bug in WINGs' hashtable which free'd the wrong memory in the
|
||||
WMResetHashTable() function (possible source of SIGSEGVs)
|
||||
- Fixed 2 syntax errors in plmenu.zh_TW.Big5 (Mike FABIAN <mfabian@suse.de>)
|
||||
- Some .po file fixes (Mike FABIAN <mfabian@suse.de>)
|
||||
- Fixed the problem with the root menu code changing the locale setting as
|
||||
a side effect of loading a localized menu
|
||||
- Fixed e memory leak in the code that reads a localized root menu
|
||||
- Added support for generating pkgconfig files for WINGS, wmlib and wrlib.
|
||||
("Marcelo E. Magallon" <mmagallo@debian.org>)
|
||||
- Support for multiline balloons (Vitaly Ovtchinnikov <ov@rbcmail.ru>)
|
||||
- Improved wsetfont (Mike FABIAN <mfabian@suse.de>)
|
||||
- Updated single-click contrib patch (steve lion <steve.lion@verizon.net>
|
||||
and vlaad)
|
||||
- Updated French translations (Antoine Hulin <antoine@origan.fdn.org>)
|
||||
- Xinerama support for Solaris
|
||||
- Added global menu support (see NEWS)
|
||||
- Fixed sloppy focus bug
|
||||
- Made maximize behave differently with keyboard/mouse for xinerama
|
||||
(Peter Zijlstra <a.p.zijlstra@chello.nl>)
|
||||
- A few leftover xinerama fixes (Peter Zijlstra <a.p.zijlstra@chello.nl>)
|
||||
- Extended the 'strut' to multiple heads
|
||||
(Peter Zijlstra <a.p.zijlstra@chello.nl>)
|
||||
- Icon placement now takes into account the new xinerama extended 'strut'
|
||||
(Peter Zijlstra <a.p.zijlstra@chello.nl>)
|
||||
- Icon arrangement that takes the new extended xinerama 'strut' into account
|
||||
(Peter Zijlstra <a.p.zijlstra@chello.nl>)
|
||||
- Fixed the 'KDE omnipresent' bug.
|
||||
- Fixed bug with focusing a deminiaturized window with sloppy focus mode
|
||||
- Fixed aspect of window list menu (window name was too close to workspace
|
||||
indicator)
|
||||
- Fixed menu panel in WPrefs.app. Explanatory text did not fit into the label
|
||||
- Implemented a better logic to preserve the window's old geometry when
|
||||
maximizing to support succesive maximizations in different directions
|
||||
without the need to do an intermediary un-maximize step (eliminates flicker)
|
||||
- Made keyboard/mouse maximization behavior consinstent relative to each other
|
||||
- Enhanced wmsetbg's man page with description for -b | --back-color
|
||||
(Marcelo E. Magallon <marcelo.magallon@bigfoot.com>)
|
||||
- Do not use the disabled clip color for the clip's workspace navigation arrows
|
||||
when the clip is collapsed (it made them look like disabled)
|
||||
- Fixed bug with incorrect un-escaping if there is a dot in wm_class.
|
||||
- Updated Catalan translations (Ernest Adrogue <eadrogue@gmx.net>)
|
||||
- Updated Spanish translation of WPrefs (Alberto Gimenez <algibe@teleline.es>)
|
||||
- Fixed synchronization problem between hair cursor and mouse cursor in
|
||||
wmagnify with mouse cursor at the screen edge (Jon Diercks <jon@diercks.net>)
|
||||
- Fixed 2 focus switching related bugs (Allan Peramaki <aperamak@cc.hut.fi>)
|
||||
- Fixed a bug that made the crash panel to be shown again and again when the
|
||||
'Restart Window Maker' option was selected, under some circumstances.
|
||||
- Added workaround in global WMWindowAttributes, to avoid creating a second
|
||||
appicon when a KDE3 application opens a config panel.
|
||||
- Updated slovak translation (Jan Tomka <judas@linux.sk>)
|
||||
- Added xdnd v3 support in WINGs (Sylvain Reynal <sreynal@nerim.net>)
|
||||
- Check whether libXft is at least version 2.1.2 else refuse to compile.
|
||||
- Fixed bug in icon chooser dialog that could cause a segmentation fault
|
||||
in some cases (Pascal Hofstee <caelian@gmail.com>)
|
||||
- Fixed crash in asm code in wrlib, with new versions of gcc.
|
||||
- Fixed bug in the x86_PseudoColor_32_to_8() function which incorrectly
|
||||
used the r, g, b fields in the conversion.
|
||||
- Fixed x86 ASM code in wrlib to work on 64 bit architectures.
|
||||
- Fixed the focus flicker seen with some apps (notably gtk2)
|
||||
(Alexey Spiridonov <snarkmaster@gmail.com>)
|
||||
- Fixed all crashing bugs that were generated by wmaker starting with the
|
||||
WMState file missing.
|
||||
- Added NetWM support (a modified version of the patch originaly written
|
||||
by Peter Zijlstra <a.p.zijlstra@chello.nl>)
|
||||
- Applied patch to enhance the Virtual Desktop behaviour, and to integrate
|
||||
it with the NetWM code (Peter Zijlstra <a.p.zijlstra@chello.nl>)
|
||||
- Applied a few xinerama and placement fixes (Peter Zijlstra
|
||||
<a.p.zijlstra@chello.nl>)
|
||||
- Fixed memory leak in dock code.
|
||||
- Fixed and enhanced the text wrapping in WINGs.
|
||||
- Fixed the layout of some elements in WPrefs.app
|
||||
- Added workaround for aplications that don't set the required hints on the
|
||||
client leader window, but they set them on normal windows (observer with
|
||||
KDE 3.3.0 mainly). This will allow these apps to get an appicon again.
|
||||
(they should be fixed still)
|
||||
- Added workaround for applications that do not set a command with
|
||||
XSetCommand(), but instead they set the _NET_WM_PID property. This works
|
||||
with operating systems that offer a /proc interface similar to what linux
|
||||
has. (This also is to fix problems with KDE 3.3.0 apps, but not only them).
|
||||
- Fixed bug with autostart and exit scripts not being executed if user
|
||||
GNUstep path was different from ~/GNUstep (when setting GNUSTEP_USER_ROOT)
|
||||
- Removed legacy OFFIX_DND support code
|
||||
- Fixed the signal handler for crashes (ie, removed it) and made wmaker
|
||||
restarting be made automatically by a monitoring process.
|
||||
- Made NetWM support be enabled by default
|
||||
- Removed old code to store/restore workspace state (now relies on netwm)
|
||||
- Added a (simple) Font Configuration for fontconfig fonts
|
||||
- MacOS X style window switching panel (navigate through windows with Alt-Tab
|
||||
or arrow keys)
|
||||
- Added support for NET_WM_NAME/NET_WM_ICON_NAME
|
||||
- Moved out font name conversion code from getstyle/setstyle/convertfonts and
|
||||
made it support fontsets
|
||||
- Converted all menu and po files to UTF-8
|
||||
- Updated de.po (Thomas Otto <3.1415926535897932384626433832@gmx.net>)
|
||||
- Fixed a crash bug when switching workspaces
|
||||
- Removed obsoleted scripts from util: wsetfont, wmchlocale, wcopy, wpaste
|
||||
|
||||
|
||||
Changes since version 0.80.1:
|
||||
.............................
|
||||
|
||||
- Fixed a buffer overflow when allocating a RImage struct.
|
||||
|
||||
|
||||
Changes since version 0.80.0:
|
||||
.............................
|
||||
|
||||
- Fixed a bug that crashed wmaker when closing a window if multiple screens
|
||||
were managed by wmaker (Valery Kotchiev <aggregator@nospam.dk>)
|
||||
- Fixed a problem that crashed wmaker when trying to read an unexisting
|
||||
WMState.<number> file on multihead system.
|
||||
- Fixed problem with keyboard shortcuts executed an every screen for
|
||||
multihead systems.
|
||||
- Updated traditional chinese translations
|
||||
- Fixed buglet in non-caching rootmenu option
|
||||
("John H. Robinson, IV" <jhriv@ucsd.edu>)
|
||||
- Added Malay translation
|
||||
- Fixed problem with kcalc not having a miniaturize button.
|
||||
- Added "Hide Others" to the window menu.
|
||||
- Fixed text in info panel for multibyte (Seiichi SATO <ssato@sh.rim.or.jp>)
|
||||
- Separated the font caches for normal fonts and fontsets in WINGs (they can
|
||||
have the same names and collide in the cache giving unwanted results)
|
||||
- Fixed Legal Panel not to display rectangles in place of new lines.
|
||||
- Fixed problem with losing focus when changing to an empty workspace and back.
|
||||
- Fixed another focus related problem when changing workspaces.
|
||||
- Fixed problem with saving session when shared appicon is enabled (not
|
||||
all instances were saved in the session, only one per shared appicon)
|
||||
- Added support for the ukrainian language in wsetfont
|
||||
(Bohdan Vlasyuk <bohdan@bodq.vstu.vinnica.ua>)
|
||||
- Fixed a bug that crashed Window Maker when setting the "Emulate AppIcon"
|
||||
option for a window using the window Inspector.
|
||||
- Let XRender transparent window be see-through to desktop
|
||||
- Added Greek (el) language pixmap (Michalis Kabrianis <Michalis@bigfoot.com>)
|
||||
- Fixes icons being reduced twice when icon size != 64x64
|
||||
Eduardo Pereira Habkost <ehabkost@conectiva.com.br>
|
||||
- Fixed a bug that crashed wmaker when selecting the "Start alternate window
|
||||
manager" option in the crashing dialog panel.
|
||||
- Window Maker will now use the WINDOWMAKER_ALT_WM environment variable (if
|
||||
it is defined) to overwrite the default hardcoded fallback window manager.
|
||||
- Fixed marks for menu entries to be grayed as the text for disabled entries.
|
||||
- Fixed Clip's "Autoraise" option to be marked as disabled when the
|
||||
"Keep on Top" option is active.
|
||||
- Added ability to browse for files/directories in the WPrefs menu editor.
|
||||
- Added Czech translations of documentation (Jiri Hnidek <Jiri.Hnidek@vslib.cz>)
|
||||
- Fixed segfault with incomplete WM_CLASS specifications.
|
||||
- Fixed a bug about arranging subviews in a WMBox after removing a subview
|
||||
and a memleak occuring in the same situation.
|
||||
- Fixed a bug in wdread
|
||||
- Fixed bug with windows that have WM_HINTS.take_focus = False. These windows
|
||||
will not receive focus at all.
|
||||
- Fixed a buffer overflow in winmenu.c
|
||||
|
||||
|
||||
Changes since version 0.70.0:
|
||||
.............................
|
||||
|
||||
@@ -24,6 +265,7 @@ Changes since version 0.70.0:
|
||||
default.
|
||||
- Mapping a new window that belongs to a running application that is hidden,
|
||||
will unhide the application.
|
||||
- Added || pipe menu for generating non-cached menus
|
||||
- Removed the collapse appicons thing.
|
||||
- Added real appicon sharing (apps of the same kind will have a single shared
|
||||
appicon).
|
||||
@@ -39,6 +281,7 @@ Changes since version 0.70.0:
|
||||
adapt to newer/faster machines. Also used wusleep(10) when the delay was 0
|
||||
to get rid of the jerky animation when there was no delay.
|
||||
- Fixed bug with Unhide mapping windows from other workspaces.
|
||||
- keyboard shortcuts are active during mouse window drag
|
||||
- Saving a domain file will first strip all entries that are also present in
|
||||
the global domain as well and are exactly the same. This fixes a bug where
|
||||
settings from the global domain file were merged in the user domain file
|
||||
@@ -47,7 +290,6 @@ Changes since version 0.70.0:
|
||||
using the global domains.
|
||||
- Fixed bug with improper setting of root/titlebar cursor (definable cursors).
|
||||
|
||||
|
||||
Changes since version 0.65.1:
|
||||
.............................
|
||||
|
||||
@@ -66,10 +308,15 @@ Changes since version 0.65.1:
|
||||
- added spanish INSTALL file (Efrain Maximiliano Palermo <max_drake2001@yahoo.com.ar>)
|
||||
- updated Finnish pots (Tomi Kajala <tomi@iki.fi>)
|
||||
- copy/paste launching in Dock
|
||||
- fixed switch to wrong workspace bug (Masashi Shimbo <shimbo@cis.ibaraki.ac.jp>)
|
||||
- added snprintf and removed XConvertCase usage for portability
|
||||
- added wcopy/wpaste scripts from (<luke@research.canon.com.au>)
|
||||
- added Xinerama support: see details in NEWS
|
||||
- fixed artifact pattern left in TrueColor dithering code (visible with
|
||||
tiled gradients)
|
||||
- fixed bug in positioning of window list menu when opened by kbd
|
||||
- internal code clean-up with notifications for window state change and other
|
||||
stuff
|
||||
- added snprintf implementation for systems that don't have this function
|
||||
- removed the libPropList dependancy by adding property list handling
|
||||
code to WINGs. This code is not only better integrated with the other
|
||||
WINGs data structures, but it's also more robust. Also a backward
|
||||
|
||||
52
FAQ
52
FAQ
@@ -365,8 +365,8 @@ for your convenience.
|
||||
|
||||
|
||||
2.8 Can I use WindowMaker with KDE or GNOME or CDE?
|
||||
----------------------------------
|
||||
Contrary to a lot of people thinks, KDE is NOT a window manager. KDE is
|
||||
---------------------------------------------------
|
||||
Contrary to a lot of people think, KDE is NOT a window manager. KDE is
|
||||
a suite of various applications that includes a custom window manager (kwm).
|
||||
The same is true for CDE.
|
||||
|
||||
@@ -386,7 +386,7 @@ mouse.
|
||||
|
||||
|
||||
2.9 How do I get Window Maker working with xdm in Redhat 5.[01]?
|
||||
----------------------------------
|
||||
----------------------------------------------------------------
|
||||
After running wmaker.inst and letting it write to .xinitrc,
|
||||
cp .xinitrc .xsession
|
||||
and make sure that /usr/local/bin is in your $PATH for the Xserver. You can
|
||||
@@ -1074,27 +1074,40 @@ to force the modification time into the future.
|
||||
4.16 How can I set dock/clip to use single click to launch
|
||||
applications, instead of double click?
|
||||
----------------------------------
|
||||
You cannot do this. This is because single click is used to select app-icons,
|
||||
or to raise/lower the app-icon or the dock/clip.
|
||||
If this is impelmented then you will be unable to select or raise/lower
|
||||
dock/clip or app-icons, without also launching the application it represents.
|
||||
This question was officially answered as follows:
|
||||
|
||||
So don't ask for this to be implemented, because it will not be. Double
|
||||
click is used for a reason, is not just some weird idea we got in a morning
|
||||
when we wake up too early.
|
||||
You cannot do this. This is because single click is used to select
|
||||
app-icons, or to raise/lower the app-icon or the dock/clip. If
|
||||
this is impelmented then you will be unable to select or
|
||||
raise/lower dock/clip or app-icons, without also launching the
|
||||
application it represents.
|
||||
|
||||
So don't ask for this to be implemented, because it will not
|
||||
be. Double click is used for a reason, is not just some weird idea
|
||||
we got in a morning when we wake up too early.
|
||||
|
||||
Regardless of that, there is now an option in WPrefs, under "Expert
|
||||
User Preferences," which allows you to set "Launch applications and
|
||||
restore windows with a single click." (See the files contrib/README
|
||||
and contrib/single_click.diff in the source package for details.)
|
||||
|
||||
If you set that option, a left button single click will launch or
|
||||
restore, rather than select, the app-icon. You can use other methods
|
||||
(or temporarily turn the option off again) to select app-icons or
|
||||
raise/lower the dock/clip. You can toggle the selected state of any
|
||||
app-icon via its right button menu, and there are auto-raise and
|
||||
keep-on-top options for the dock and clip.
|
||||
|
||||
|
||||
4.18 How do I restore the configuration app to the dock?
|
||||
----------------------------------]
|
||||
You should start it from a terminal using its full path name, which is
|
||||
/usr/local/GNUstep/Apps/WPrefs.app/WPrefs
|
||||
/usr/local/GNUstep/Applications/WPrefs.app/WPrefs
|
||||
by default.
|
||||
|
||||
|
||||
4.19 How do I define my own icon for a program? I don't like the one it
|
||||
supplies.
|
||||
supplies.
|
||||
----------------------------------
|
||||
Right-click the titlebar of the running application and start the Attributes
|
||||
Editor. Check the "Ignore client supplied icon" box. "Apply" and "Save",
|
||||
@@ -1298,14 +1311,8 @@ in routines/xsci/jpc_SGraph.c
|
||||
5.12 Netscape shows black and white icons
|
||||
----------------------------------
|
||||
|
||||
This is because Netscape uses monochrome icons when running under olwm
|
||||
and you are using the OPEN LOOK emulation option. If you do not use any XView
|
||||
apps anyway, recompile Window Maker without the --enable-openlook option.
|
||||
If you need OPEN LOOK emulation, you will have to get used to the monochrome
|
||||
icons or change then manually in the Attributes panel for each window.
|
||||
I have also seen this happen on some systems if you run Netscape in a high
|
||||
colour depth (32bpp) regardless of whether you're using openlook or not.
|
||||
That is a Netscape bug. Therefore, bug Netscape.
|
||||
I have seen this happen on some systems if you run Netscape in a high
|
||||
colour depth (32bpp). That is a Netscape bug. Therefore, bug Netscape.
|
||||
|
||||
|
||||
5.13 Snow flakes from xsnow don't acumulate on titlebars!
|
||||
@@ -1457,11 +1464,14 @@ the files manually. Or download the whole distribution.
|
||||
|
||||
|
||||
7.5 Will you add GNOME or KDE support?
|
||||
----------------------------------
|
||||
--------------------------------------
|
||||
|
||||
Support for GNOME (and KDE) hints is included since 0.50.0. You have to
|
||||
enable them at compile-time using the appropriate arguments to ./configure.
|
||||
Please read the INSTALL file for more details.
|
||||
Note: starting with version 0.90.0, support for legacy Gnome-1.x and KDE-2.x
|
||||
was dropped in favor of NETWM support (used by both Gnome-2.x and KDE-3.x)
|
||||
|
||||
|
||||
-=-=-=-=-
|
||||
Themes:
|
||||
|
||||
35
FAQ.I18N
35
FAQ.I18N
@@ -32,24 +32,35 @@ If I18N support does not work for you, check these:
|
||||
here:
|
||||
ftp://ftp.linux.or.jp/pub/RPM/glibc
|
||||
|
||||
- if you'd like to display multibyte characters, set the
|
||||
MultiByteText option to YES in ~/GNUstep/Defaults/WindowMaker
|
||||
and ~/GNUstep/Defaults/WMGLOBAL
|
||||
|
||||
- the fonts you're using support your locale. if your font
|
||||
setting on $HOME/GNUstep/Defaults/WindowMaker is like..
|
||||
|
||||
WindowTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*";
|
||||
MenuTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*";
|
||||
WindowTitleFont = "Trebuchet MS:bold:pixelsize=12";
|
||||
MenuTitleFont = "Trebuchet MS:bold:pixelsize=12";
|
||||
......................................................
|
||||
|
||||
then you can't display non iso8859-x charcters by helvetica.
|
||||
so quick way to display various languages' font is to change
|
||||
all the font settings into:
|
||||
|
||||
"-*-*-medium-r-normal-*-14-*-*-*-*-*-*-*"
|
||||
then you can't display asian language (ja,ko,ch) characters using
|
||||
Trebuchet MS. A font that is guaranteed to work for any language is
|
||||
sans (or sans-serif). sans is not a font itself, but an alias which
|
||||
points to multiple fonts and will load the first in that list that
|
||||
has the ability to show glyphs in your language. If you don't know
|
||||
a font that is suited for you language you can always set all your
|
||||
fonts to something like:
|
||||
|
||||
and also you need to change font settings in style files in
|
||||
"sans:pixelsize=12"
|
||||
|
||||
However, please note that if your font is something like:
|
||||
|
||||
"Trebuchet MS,Luxi Sans,sans:pixelsize=12"
|
||||
|
||||
this will not be able to display asian languages if any of the
|
||||
previous fonts before sans are installed. This is because unlike
|
||||
the proper font pickup that sans guarantees for your language,
|
||||
this construct only allows a font fallback mechanism, which tries
|
||||
all the fonts in the list in order, until it finds one that is
|
||||
available, even if it doesn't support your language.
|
||||
|
||||
Also you need to change font settings in style files in
|
||||
the "$HOME/Library/WindowMaker/Style" directory.
|
||||
|
||||
- the LC_CTYPE environment variable is unset or it has the correct
|
||||
|
||||
64
FAQ.I18N.cs
Normal file
64
FAQ.I18N.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
Často kladené otázky na podporu místního nastavení
|
||||
==================================================
|
||||
|
||||
Pokud vám nefunguje podpora I18N, tak zkontrolujte tato nastavení:
|
||||
|
||||
- systémová proměnná LANG musí být nastavená tak, aby odpovídala vašemu
|
||||
místnímu nastavení (čeština = czech), vaše místní nastavení musí být
|
||||
podporovatelné vaším operačním systémem nebo X emulací. Všechny
|
||||
podporovatelné lokalizace zobrazíte příkazem "locale -a". Měli byste
|
||||
také zkontrolovat, zda-li je vaše místní nastavení podporované
|
||||
X emulací. Soubor: "/usr/X11R6/lib/X11/locale/locale.alias" by měl
|
||||
obsahovat podobnou sekvenci (podpora pro češtinu):
|
||||
|
||||
cs cs_CZ.ISO8859-2
|
||||
cs_CS cs_CZ.ISO8859-2
|
||||
cs_CS.ISO8859-2 cs_CZ.ISO8859-2
|
||||
cs_CZ cs_CZ.ISO8859-2
|
||||
cs_CZ.iso88592 cs_CZ.ISO8859-2
|
||||
cz cz_CZ.ISO8859-2
|
||||
cz_CZ cz_CZ.ISO8859-2
|
||||
|
||||
- zkontrolujte použití správných fontů pro vaše místní nastavení.
|
||||
Pokud nepoužíváte správné fonty s kódováním, které je nastaveno v
|
||||
Xlib nebo libc, tak se můžou dít "dost divné věci". Zkuste explicitně
|
||||
zadat kování do proměnné LANG: LANG=cs_CS.ISO8859-2 nebo
|
||||
LANG=cs_CZ.iso88592 a znovu zkontrolujte:
|
||||
"/usr/X11R6/lib/X11/locale/locale.alias"
|
||||
|
||||
- pokud váš operační systém nepodporuje místní nastavení (locales), nebo
|
||||
pokud váš OS nepodporuje místní nastavení pro váš jazyk, můžete
|
||||
použít emulaci místního nastavení X Window Systému. Zprovoznit tuto
|
||||
emulaci je možné spuštěním ./configure s volbou "--witn-x-locale".
|
||||
Pokud používáte nějaký komerční systém jako je například IRIX, AIX,
|
||||
Solaris, ...,tak asi X emulaci nebudete potřebovat. Ovšem pokud je
|
||||
vaším operačním systémem Linux, NetBSD nebo jiný užasný, volně
|
||||
šiřitelný operační systém, tak je možné, že vaše místní nastavení
|
||||
zatím není podporované. Potom použijte volbu "--witn-x-locale".
|
||||
|
||||
Pozn: Aby jste mohli používat X emulaci místních nastavení, tak vaše
|
||||
Xlib musí být zkompilované s touto podporou. Xlib v RedHat 5.0
|
||||
tak zkompilované nejsou (RH4.x jsou OK). Překompilované Xlib
|
||||
s podporou pro emulací místních nastavení pro RH5.0 jsou
|
||||
dostupné na adrese:
|
||||
|
||||
ftp://ftp.linux.or.jp/pub/RPM/glibc
|
||||
|
||||
- fonty, které používáte by měli být podporované vaším místním nastavením.
|
||||
Jestliže vaše nastavení fontů v souboru ~/GNUstep/Defaults/WindowMaker
|
||||
vypadá takto:
|
||||
|
||||
WindowTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*";
|
||||
MenuTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*"; ,
|
||||
|
||||
nemůžete zobrazovat znaky jiné než iso8859-x ve fontu helvetica.
|
||||
Jednoduchý způsob, jak zobrazovat znaky různých jazyků, je nastavit všechny
|
||||
fonty takto:
|
||||
|
||||
"-*-*-medium-r-normal-*-14-*-*-*-*-*-*-*"
|
||||
|
||||
Také je nutné změnit nastavení fontů v souborech stylů v adresáři:
|
||||
~/Library/WindowMaker/Style.
|
||||
|
||||
- pokud si nejste jisti, zda-li má systémová proměnná LC_TYPE správnou
|
||||
hodnotu, tak ji nenastavujte.
|
||||
@@ -35,10 +35,6 @@ Ak v
|
||||
|
||||
ftp://ftp.linux.or.jp/pub/RPM/glibc
|
||||
|
||||
- ak chcete zobrazovať multibyte znaky, nastavte možnosť
|
||||
MultiByteText YES v ~/GNUstep/Defaults/WindowMaker a
|
||||
~/GNUstep/Defaults/WMGLOBAL
|
||||
|
||||
- fonty, ktoré používate, podporujú vaše miesne nastavenia.
|
||||
Ak vaše nastavenia fontov v ~/GNUstep/Defaults/WindowMaker
|
||||
vyzerajú takto:
|
||||
|
||||
110
INSTALL
110
INSTALL
@@ -40,6 +40,7 @@ SUPPORTED PLATFORMS
|
||||
- IBM S/390 running Linux
|
||||
- IBM S/390 running Conectiva Linux (experimental)
|
||||
- iBook running Darwin
|
||||
- Darwin PPC / Macos X
|
||||
- Windows NT with Cygwin/XFree86
|
||||
- Sony PlayStation2 running Linux
|
||||
|
||||
@@ -63,23 +64,18 @@ The following software is required to use Window Maker:
|
||||
The following is required to build Window Maker:
|
||||
|
||||
- Basic obvious stuff
|
||||
If you will build Window Maker, make sure you have gcc (or some
|
||||
other ANSI C compiler) and the X header files installed. Specially
|
||||
for newbie Linux users: you must install all X development packages
|
||||
and the gcc suite. Otherwise you won't be able to build any X
|
||||
program, including Window Maker.
|
||||
gcc (or some other ANSI C compiler)
|
||||
glibc development files (usually glibc-devel in Linux distributions)
|
||||
X development files (XFree86-devel or something similar)
|
||||
|
||||
- autoconf, automake and libtool
|
||||
These tools are NOT needed, but IF you have one or
|
||||
more of them installed, make sure you have ALL of the following
|
||||
with exactly these versions:
|
||||
autoconf 2.13
|
||||
automake 1.4
|
||||
libtool 1.3
|
||||
If you have a different version, disable them by temporarily
|
||||
renaming them to something else or uninstalling them from your
|
||||
system. If you don't develop software you don't need them,
|
||||
so you can safely uninstall.
|
||||
autoconf 2.54
|
||||
automake 1.4
|
||||
libtool 1.4.2
|
||||
|
||||
- Xft2
|
||||
and its dependencies (such as freetype2 and fontconfig)
|
||||
You will also need the development files for it (xft2-devel)
|
||||
|
||||
|
||||
OPTIONAL:
|
||||
@@ -114,11 +110,6 @@ might work too.
|
||||
For GIF image support
|
||||
ftp://prtr-13.ucsc.edu/pub/libungif/
|
||||
|
||||
- libHermes 1.3.2 or newer
|
||||
For faster pixel conversion in the wraster library
|
||||
(its used only in some conversions - for TrueColor visuals)
|
||||
http://www.clanlib.org/hermes/
|
||||
|
||||
- GNU xgettext
|
||||
If you want to use translated messages, you will need GNU gettext.
|
||||
Other versions of gettext are not compatible and will not work.
|
||||
@@ -132,10 +123,10 @@ CONFIGURE OPTIONS:
|
||||
These options can be passed to the configure script to enable/disable
|
||||
some Window Maker features. Example:
|
||||
|
||||
./configure --enable-kde --enable-gnome
|
||||
|
||||
will configure Window Maker with KDE and GNOME supported compiled in.
|
||||
./configure --enable-modelock --disable-gif
|
||||
|
||||
will configure Window Maker with modelock supported and disable gif support.
|
||||
Normally, you won't need any of them.
|
||||
|
||||
To get a list of other options, run ./configure --help
|
||||
|
||||
@@ -149,12 +140,6 @@ To get a list of other options, run ./configure --help
|
||||
The -I flag must precede each paths, like:
|
||||
--with-incs-from="-I/opt/headers -I/usr/local/include"
|
||||
|
||||
--enable-single-icon
|
||||
enables the collapsing of all appicons of the WM_CLASS+WM_INSTANCE
|
||||
into a single one. This feature is not supported at all by the
|
||||
developers. If you have some trouble with it, contact it's author:
|
||||
Christopher Seawood <cls@seawood.org>
|
||||
|
||||
--disable-shm
|
||||
disable use of the MIT shared memory extension. This will slow down
|
||||
texture generation a little bit, but in some cases it seems to be
|
||||
@@ -163,15 +148,6 @@ To get a list of other options, run ./configure --help
|
||||
--disable-motif
|
||||
disable support for mwm window manager hints
|
||||
|
||||
--enable-openlook
|
||||
enable support for OPEN LOOK(tm) window manager hints
|
||||
|
||||
--enable-gnome
|
||||
enable support for GNOME window manager hints
|
||||
|
||||
--enable-kde
|
||||
enable support for kde/kwm window manager hints
|
||||
|
||||
--enable-lite
|
||||
remove things that are already supported in desktop environments,
|
||||
like KDE and GNOME. Disabled things are: window list, root
|
||||
@@ -184,9 +160,6 @@ To get a list of other options, run ./configure --help
|
||||
XKB language status lock support. If you don't know what it is you
|
||||
probably don't need it.
|
||||
|
||||
--enable-sound
|
||||
enable support of sound effects module
|
||||
|
||||
--disable-xpm
|
||||
disables use of the XPM library even if it is available on your
|
||||
system.
|
||||
@@ -291,27 +264,6 @@ apply.
|
||||
* make sure you have /usr/local/lib in /etc/ld.so.conf before running
|
||||
ldconfig;
|
||||
|
||||
* if you have problems that mention an error message with --no-reexec
|
||||
uninstall libtool-1.2b and install libtool-1.3 instead. libtool-1.3
|
||||
can be found in ftp.gnu.org Also read the TROUBLESHOOTING section;
|
||||
|
||||
* if you installed the Window Maker package from RedHat and are
|
||||
installing a new version of it by hand (compiling yourself), uninstall
|
||||
the package from RedHat before.
|
||||
|
||||
* make sure you have a symbolic link from /usr/include/X11 to
|
||||
/usr/X11R6/include/X11 (if not, type ln -s /usr/X11R6/include/X11
|
||||
/usr/include/X11 )
|
||||
|
||||
* make sure you have /lib/cpp pointing to the cpp program
|
||||
|
||||
If you have any doubts in doing any of the stuff above, please
|
||||
don't hesitate to contact the RedHat user support. They will
|
||||
kindly answer to all your questions regarding their system.
|
||||
They also know much more about their own system than us
|
||||
(we don't use RedHat).
|
||||
|
||||
|
||||
- PowerPC MkLinux
|
||||
You will need to have the latest version of Xpmac. Older versions
|
||||
seem to have bugs that cause the system to hang.
|
||||
@@ -365,9 +317,9 @@ following.
|
||||
to get a complete listing of other options that are available.
|
||||
|
||||
2. Run configure with the options you want. For example, if you
|
||||
want to use the --enable-kde option, type:
|
||||
want to use the --enable-modelock option, type:
|
||||
|
||||
./configure --enable-kde
|
||||
./configure --enable-modelock
|
||||
|
||||
3. (optional) Edit src/wconfig.h with your favorite text editor
|
||||
and browse through it for some options you might want to change.
|
||||
@@ -431,7 +383,7 @@ when running configure in step 2 of building Window Maker. You will
|
||||
also need to supply the --with-appspath option, to specify the path for
|
||||
WPrefs.app Example:
|
||||
|
||||
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Apps
|
||||
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Applications
|
||||
|
||||
|
||||
Then make /home/jshmoe/bin be included in your search PATH, add
|
||||
@@ -580,31 +532,3 @@ menu.pt
|
||||
menu
|
||||
|
||||
|
||||
5 - If you chose a language that uses multi-byte characters, you must
|
||||
configure the fonts appropriately. Read the manual page for XCreateFontSet
|
||||
to have more details about it. You must change the ~/G/D/WindowMaker file
|
||||
for fonts used in titlebars, menus and other things. For fonts used in
|
||||
dialog windows, change ~/G/D/WMGLOBAL. The %d in the font names must not be
|
||||
removed. You can also use the supplied wsetfont script for the task.
|
||||
Read the script itself for instructions.
|
||||
|
||||
For example, you can specify the following in ~/G/D/WindowMaker:
|
||||
|
||||
WindowTitleFont = "-*-helvetica-bold-r-normal-*-12-*,-*-*-medium-r-normal-*-14-*";
|
||||
MenuTitleFont = "-*-helvetica-bold-r-normal-*-12-*,-*-*-medium-r-normal-*-14-*";
|
||||
MenuTextFont = "-*-helvetica-medium-r-normal-*-12-*,-*-*-medium-r-normal-*-14-*";
|
||||
IconTitleFont = "-*-helvetica-medium-r-normal-*-8-*,-*-*-medium-r-normal-*-12-*";
|
||||
ClipTitleFont = "-*-helvetica-bold-r-normal-*-10-*,-*-*-medium-r-normal-*-12-*";
|
||||
DisplayFont = "-*-helvetica-medium-r-normal-*-12-*,-*-*-medium-r-normal-*-12-*";
|
||||
|
||||
and in ~/G/D/WMGLOBAL:
|
||||
|
||||
SystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
|
||||
BoldSystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
|
||||
|
||||
The above 2 fonts are only used by applications that use WINGs (WindowMaker
|
||||
and WPrefs.app)
|
||||
|
||||
The wsetfont script that's supplied will allow you to change the font
|
||||
settings in a easier way. Take a look in the script for details on usage.
|
||||
|
||||
|
||||
604
INSTALL.cs
Normal file
604
INSTALL.cs
Normal file
@@ -0,0 +1,604 @@
|
||||
Instrukce pro instalaci okenního manažera Window Maker
|
||||
|
||||
PODPOROVANÉ PLATFORMY
|
||||
=====================
|
||||
("Podporované" znamená, že už to na dané platformě někdo zprovoznil...)
|
||||
|
||||
- Intel GNU/Linux Conectiva 5.9 (beta)
|
||||
- Intel GNU/Linux Slackware
|
||||
- Intel GNU/Linux Debian
|
||||
- Intel GNU/Linux ostatní distribuce
|
||||
- Sparc GNU/Linux RedHat 5.1
|
||||
- PowerPC GNU/MkLinux
|
||||
- Alpha GNU/Linux RedHat 5.1
|
||||
- FreeBSD
|
||||
- NetBSD
|
||||
- OpenBSD
|
||||
- BSDI 4.0
|
||||
- Solaris 2.5.1, 2.5.2
|
||||
- Solaris 2.6.0
|
||||
- Solaris 2.7beta
|
||||
- SCO Unix
|
||||
- SGI Irix 5.x, 6.5
|
||||
- OSF/1
|
||||
- HP-UX
|
||||
- AIX 3.2.5
|
||||
- AIX 4.1.4 / IBM PowerPC
|
||||
- AIX 4.3.1 / IBM CC compiler
|
||||
- AIX 4.3.2 / IBM PowerPC
|
||||
- AIX 5.3
|
||||
- DEC Alpha/Digital UNIX 4.x
|
||||
- XFree86 / OS/2
|
||||
- Corel NetWinder
|
||||
- SunOS 4.x
|
||||
- PowerMac / Power MachTen 4.1.1 over MacOS
|
||||
- Amiga 3000 running RedHat Linux 5.1 (Rawhide)
|
||||
- IBM S/390 s Linuxem
|
||||
- iBook s OS Darwin
|
||||
|
||||
Patche pro rozběhání na jiných platformách jsou vítané.
|
||||
|
||||
POŽADAVKY
|
||||
=========
|
||||
|
||||
Následující software je potřebný/nezbytný pro běh Window Makeru:
|
||||
|
||||
- X11R6.x
|
||||
Window Maker může být zkompilován na starších verzích X, jako
|
||||
je X11R5 (Solaris) nebo X11R4 (OpenWindows), ale nebude to pracovat
|
||||
100% spolehlivě. Na těchto systémech nebudou fungovat ikony
|
||||
aplikací a budete mít problémy s používáním doku. Upgrade
|
||||
uživatelských knihoven (Xlib, Xt atd.) zlepší tyto problémy pokud
|
||||
nemůžete aktualizovat váš X server.
|
||||
|
||||
Následující software je potřebný ke zkompilování Window Makeru:
|
||||
|
||||
- Zákládní běžné věci
|
||||
Když budete komplivat Window Maker, tak se ujistěte, že máte gcc
|
||||
(nebo jiný ANCI C kompilátor) a nainstalované hlavičkové soubory
|
||||
pro X. Hlavně pro začátečníky v Linuxu: musíte nainstalovat všechny
|
||||
X-devel balíky a gcc. Jinak nebudete schopni zkompilovat žádný
|
||||
program s grafickým rozhraním, tedy ani Window Maker.
|
||||
|
||||
- autoconf, automake a libtool
|
||||
Tyto nástroje NEJSOU POTŘEBA, ale když máte jeden nebo dva nebo
|
||||
všechny tři nainstalované, tak se UJISTĚTE, že máte přesně
|
||||
následující VERZE:
|
||||
autoconf 2.54
|
||||
automake 1.4
|
||||
libtool 1.4.2
|
||||
Máte-li odlišnou verzi, tak ji dočasně přejmenujte, nebo ji rovnou
|
||||
odinstalujte z vašeho systému. Pokud nebudete programovat, tak ji
|
||||
stejně nebudete potřebovat, takže ji můžete bezpečně odinstalovat.
|
||||
|
||||
Pozn. libProblist už není potřeba ke zkompilování Window Makeru, protože
|
||||
libProblist byl přímo zabudován do WINGs. Z toho důvodu už není
|
||||
potřeba ani lex (flex) a yacc (nebo bison).
|
||||
|
||||
|
||||
NEPOVINNÉ
|
||||
=========
|
||||
|
||||
Tyto knihovny nejsou nutné pro běh Windo Makeru, ale jsou podporované, když
|
||||
je budete chtít použít. Tyto verze jsou používané vývojovým týmem, který
|
||||
garantuje, že budou fungovat. Ostatní verze by měli fungovat také.
|
||||
|
||||
- libXPM 4.7 nebo novější
|
||||
Starší verze nemusí fungovat!!!
|
||||
Dostupné na ftp://sunsite.unc.edu/pub/Linux/libs/X/
|
||||
|
||||
Je zde zabudovaná podpora pro soubory XPM, ale nenačte obrázky s
|
||||
nestandardním formátem kódování.
|
||||
|
||||
- libpng 0.96 nebo novější a zlib
|
||||
Pro podporu PNG obrázků
|
||||
http://www.cdrom.com/pub/png/
|
||||
|
||||
- libtiff 3.4 nebo novější
|
||||
Pro podporu TIFF obrázků
|
||||
Dostupné na ftp://ftp.sgi.com/graphics/tiff
|
||||
|
||||
- libjpeg 6.0.1 nebo novější
|
||||
Pro podporu JPEG obrázků
|
||||
http://www.ijg.org/
|
||||
|
||||
- libgif 2.2 nebo libungif
|
||||
Pro podporu GIF obrázků
|
||||
Dostupné na ftp://prtr-13.ucsc.edu/pub/libungif/
|
||||
|
||||
-GNU xgettxt
|
||||
Když chcete používat češtinu nebo jiné jazyky kromě angličtiny,
|
||||
tak potřebujete GNU xgettext.
|
||||
Ostatní verze nejsou kompatibilní a nebudou fungovat
|
||||
GNU verze je dostupná na ftp://ftp.gnu.org
|
||||
|
||||
|
||||
KONFIGURAČNÍ NASTAVENÍ
|
||||
======================
|
||||
|
||||
Tyto volby mohou být předané konfiguračnímu skriptu jako argumenty za
|
||||
účelem povolení/zakázání určité vlastnosti Window Makera.
|
||||
|
||||
Příklad:
|
||||
|
||||
./configura --enable-kde --enable-gnome
|
||||
|
||||
nakonfiguruje Window Maker s podporou KDE a GNOME
|
||||
|
||||
Seznam ostatních možností dostanete spuštěním ./configure --help
|
||||
|
||||
--with-libs-from
|
||||
specifikuje, které další adresáře s knihovnami se mají
|
||||
prohledávat. Řetězec -L musí předcházet každému adresáři,
|
||||
např:
|
||||
--with-libs-from="-L/opt/libs -L/usr/local/lib"
|
||||
|
||||
--with-incs-from
|
||||
určuje, které další adresáře s hlavičkovými soubory se mají
|
||||
prohledat. Řetězec -I musí předcházet každému adresáři,
|
||||
např:
|
||||
--with-incs-from="-I/opt/headers -I/usr/local/include"
|
||||
|
||||
--enable-single-icon
|
||||
umožňuje skrýt všechny ikony aplikací WM_CLASS+WM_INSTANCE
|
||||
do jedné jediné. Tato vlastnost není podporovaná ze strany vývojářů.
|
||||
Když budete mít s touto funkcí problémy, tak se obraťte na jejího
|
||||
autora: Christopher Seawood <cls@seawood.org>
|
||||
|
||||
--disable-shm
|
||||
zakáže používání zdílené paměti MIT. To trochu zpomalí generování
|
||||
textur, ale v některých případech se to jeví jako nezbytnost z důvodu
|
||||
chyby, která způsobuje špatné zobrazování ikon a textur.
|
||||
|
||||
--disable-motif
|
||||
zakáže podporu pokynů pro okenní manažer mwm.
|
||||
|
||||
--enable-lite
|
||||
odstraní nástroje a funkce, které jsou už dostupné v desktopových
|
||||
prosředích KDE a GNOME. Odstraní se: seznam oken, menu aplikací,
|
||||
výběr více oken. Uvědomte si, že takto už nebudete schopni ukončit
|
||||
samotný Window Maker pomocí aplikačního menu. Budete muset zabít Window
|
||||
Maker z textové konzole nebo ho ukončit z KDE nebo GNOME.
|
||||
Nedoporučuje se povolit tuto vlastnost.
|
||||
|
||||
--enable-modelock
|
||||
podpora pro XKB nastavení jazyka. Když nevíte, o co jde, tak to
|
||||
pravděpodobně nebudete potřebovat.
|
||||
|
||||
--enable-sound
|
||||
povolí podporu modulu zvukových efektů.
|
||||
|
||||
--disable-xpm
|
||||
zakáže podporu knihovny XPM, pokud je dostupná na vašem systému.
|
||||
|
||||
--disable-png
|
||||
zakáže podporu knihovny PNG.
|
||||
|
||||
--disable-tiff
|
||||
zakáže podporu knihovny TIFF.
|
||||
|
||||
--disable-gif
|
||||
zakáže podporu knihovny GIF.
|
||||
|
||||
--disable-jpeg
|
||||
zakáže podporu knihovny JPEG.
|
||||
|
||||
--disable-shape
|
||||
zakáže tvarovaná okna (pro oclock, xeyes, atd.).
|
||||
|
||||
POŽADAVKY PRO SPECIFICKÉ PLATFORMY
|
||||
==================================
|
||||
|
||||
-DEC/Alpha
|
||||
|
||||
Následující mail není přeložen, ale hovoří se v něm, že pravděpodobně
|
||||
není potřeba konfigurovat Window Maker na Alphě s volbou --disable-shm.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
From: Anton Ivanov <aivanov@eu.level3.net>
|
||||
To: Marcelo E. Magallon <mmagallo@debian.org>
|
||||
Subject: Re: Is the WindowMaker package working ok on Alpha?
|
||||
|
||||
> Hi,
|
||||
>
|
||||
> I was reading some docs on the WindowMaker tarball, and found this:
|
||||
>
|
||||
> | - DEC/Alpha machines
|
||||
> | You might need to pass the --disable-shm flag to configure,
|
||||
> | like ./configure --disable-shm
|
||||
>
|
||||
> is anyone having problems with WindowMaker on Alpha? Can someone
|
||||
> please test this? Should the flag be passed when building on Alpha?
|
||||
|
||||
Disclaimer: alphas under my command have never run X and are least likely to
|
||||
suddenly start running it anytime soon.
|
||||
|
||||
Alpha used to have some ridiculously low amount of shared memory
|
||||
configured.
|
||||
So quite a lot of apps used to barf. Namely - cdrecord, mysql server, etc.
|
||||
|
||||
Check where is yours at the moment and raise it to a more appropriate
|
||||
value by either catting to the appropriate /proc entry or changing the
|
||||
/usr/src/linux/include/asm/shmparam.h.
|
||||
|
||||
Otherwise the shared memory on alpha should be fully functional and I
|
||||
see no reason to disable it. Mine are bumped up to 32 or more on most
|
||||
machines.
|
||||
|
||||
And If I recall correctly the comments in that file are actually
|
||||
wrong. Value is not bytes, but in machine size word. For alpha *8.
|
||||
|
||||
As I said - I do not run X on them so all #include "stdisclaimer.h"
|
||||
apply.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
- SCO Unix - configure spusťte takto:
|
||||
CFLAGS="-belf -DANSICPP" ./configure
|
||||
|
||||
- SunOS, Solaris
|
||||
Když máte naistalovaný gcc, tak configure spusťte takto:
|
||||
CPP_PATH="gcc -E -x c" ./configure
|
||||
Preprocesoru cpp od Sunu chybějí některé vlastnosti, které Window Maker
|
||||
potřebuje, a to může způsobit problémy během parsování konfiguračních
|
||||
souborů. Je možné, že budete muset použít --with-libs-from a
|
||||
--with-incs-from k nahrazení adresáře s libtiff.
|
||||
Někdo doporučuje použít /usr/local/lib jako první cestu v LD_LIBRARY_PATH.
|
||||
|
||||
Když máte Ultra Creator 3D nebo jinou high-end grafickou kartu, tak se
|
||||
ujistěte, že X server startuje s 24 bitovou barevnou hloubkou, jinak
|
||||
můžete mít problémy s pomícháním barev. Toto je chyba Window Makeru,
|
||||
která bude odstraněna.
|
||||
|
||||
- GNU/Linux obecně
|
||||
Ujistěte se, že soubor /etc/ld.so.conf obsahuje řádek "/usr/local/lib".
|
||||
Odinstalujte jakoukoliv starší verzi balíčku Window Makeru před instalací
|
||||
novější verze.
|
||||
Nezapomeňte spustit ldconfig po instalaci Window Makeru.
|
||||
|
||||
- RedHat GNU/Linux
|
||||
RedHat má několik obtěžujících chyb. Pokud ho používáte dodržujte několik
|
||||
následujících kroků, jinak vám Window Maker nebude fungovat.
|
||||
|
||||
* pokud máte nainstalovaný Window Maker z distribuce RedHat, tak ho před
|
||||
upgradem odinstalujte
|
||||
|
||||
* ujistěte se, že nemáte systémové proměnné LANG a LINGUAS nastavené
|
||||
na en_RN
|
||||
|
||||
* ujistěte se, že vaše systémová proměnná PATH obsahuje položku
|
||||
/usr/local/bin
|
||||
|
||||
* ujistěte se, že soubor /etc/ld.so.conf obsahuje řádek "/usr/local/lib"
|
||||
před tím, než spustíte ldconfig (na konci instalace)
|
||||
|
||||
* pokud máte problémy, které se projevují chybovou hláškou, která
|
||||
obsahuje text --no-reexec, tak odinstalujte libtool-1.2b a nainstalujte
|
||||
si novější verzi libtool-1.3. libtool-1.3 můžete nalézt na adrese:
|
||||
ftp.gnu.org . Přečtěte si také odstavec ŘEŠENÍ PROBLÉMÚ.
|
||||
|
||||
* pokud máte nainstalovaný balíček Window Maker od RedHatu a nyní
|
||||
instalujete novou verzi "ručně" (kompilováním zdrojových kódů), tak
|
||||
nejprve odinstalujte stávající balíček.
|
||||
|
||||
* ujistěte se, že se na vašem systému nachází symbolický link z
|
||||
/usr/include/X11 na /usr/X11R6/include/X11. Pokud tomu tak není, tak
|
||||
na příkazovou řádku napište:
|
||||
|
||||
ln -s /usr/X11R6/include/X11 /usr/include/X11
|
||||
|
||||
* ujistěte se, že máte symbolický link /lib/cpp ukazující na cpp
|
||||
program
|
||||
|
||||
Pokud pochybujete o nějakém z předcházejích kroků, tak neváhejte
|
||||
kontaktovat uživatelskou podporu distribuce RedHat. Oni vám laskavě
|
||||
zodpoví všechny vaše dotazy zohledňující váš systém. Oni vědí
|
||||
mnohem více o vašem (jejich) systému než my (my nepoužíváme
|
||||
RedHat).
|
||||
|
||||
- PowerPC MkLinux
|
||||
Budete potřebovat poslední verzi Xpma. Starší verze pravděpodobně
|
||||
obsahují chybu, která způsobuje zamrznutí systému.
|
||||
|
||||
- Debian GNU/Linux
|
||||
Pokud chcete podporu JPEG a TIFF, tak se ujistěte, že máte nainstalovány
|
||||
balíčky libtiff-dev a libjpeg-dev.
|
||||
|
||||
- SuSE GNU/Linux
|
||||
Pokud máte již nainstalován baliček Window Maker od SuSE, tak ho
|
||||
odstraňte než se pustíte do kompilace Window Makeru. když tak
|
||||
neučiníte, budete mít problémy.
|
||||
|
||||
- MetroX (neznámá verze)
|
||||
Metrox obsahuje chybu, která zapřičiňuje, že obrázky, které jsou
|
||||
nastaveny jako pozadí, jsou poškozeny. Pokud používáte Metrox a
|
||||
máte podivné problémy s texturami, tak nepoužívejte textury v
|
||||
titulcích nebo používejte jiný X server.
|
||||
|
||||
INSTALACE
|
||||
=========
|
||||
|
||||
Nejjednodušší způsob, jak nainstalovat Window Maker, je spustit skript
|
||||
Install nebo Install.cs (ten s vámi komunikuje česky). Oba skripty
|
||||
vás jednoduše provedou celou instalací.
|
||||
|
||||
su
|
||||
Install.cs
|
||||
|
||||
Poznámka: tato metoda neposkytuje všechny možnosti konfigurace a pokud
|
||||
se setkáte s nějakými problémy, tak stejně budete muset
|
||||
použít následující způsob kompilace.
|
||||
|
||||
Kompilace Window Makeru
|
||||
-----------------------
|
||||
Pro osvědčený způsob zadejte následující příkazy v shellu:
|
||||
|
||||
./configure
|
||||
make
|
||||
|
||||
pak se přihlašte jako root a zadejte:
|
||||
|
||||
make install
|
||||
ldconfig
|
||||
|
||||
pokud nejste programátor a nebudete ladit Window Maker, tak se můžete zbavit
|
||||
ladících symbolů v binárních souborech a zmenšit jejich velikost:
|
||||
|
||||
make install-strip
|
||||
ldconfig
|
||||
|
||||
Takto zkompilujete a nainstalujete Window Maker se standartními parametry.
|
||||
|
||||
Pokud chcete upravit některé vlastnosti, tak musíte učinit následující:
|
||||
|
||||
1. (volitelné) Podívejte se na část MOŽNOSTI KONFIGURACE, kde jsou
|
||||
uvedené možnosti konfigurace. Nebo spusťte:
|
||||
|
||||
./configure --help
|
||||
|
||||
tak dostanete kompletní seznam všech dostupných možností konfigurace.
|
||||
|
||||
2. Spusťte ./configure s možností, kterou jste si vybrali. Například,
|
||||
pokud chcete použít možnost --enable-kde, tak zadejte:
|
||||
|
||||
./configure --enable-kde
|
||||
|
||||
3. (volitelné) Otevřete soubor ./src/wconfig.h vaším oblíbeným editorem
|
||||
a upravte některé možnosti, které si přejete změnit.
|
||||
|
||||
4. Kompilace. Zadejte pouze:
|
||||
|
||||
make
|
||||
|
||||
5. Přihlaste se jako root (pokud tak nemůžetet učinit, tak si přečtěte
|
||||
část "Nemám rootovské helso :-(") a nainstalujte Window Maker na váš
|
||||
systém:
|
||||
|
||||
su root
|
||||
make install
|
||||
|
||||
Nastavení specifické pro uživatele
|
||||
----------------------------------
|
||||
|
||||
Tyto instrukce nejsou povinné, pokud upgradujete Window Maker ze starší
|
||||
verze na novější a pokud není uvedeno jinak v souboru NEWS.
|
||||
|
||||
Každý uživatel na vašem systému, který si přeje používat Window Maker musí
|
||||
udělat následující:
|
||||
|
||||
1. Nainsatlovat konfigurační soubory Window Makeru do jeho domovského
|
||||
adresáře:
|
||||
|
||||
wmaker.inst
|
||||
|
||||
wmaker.inst nainstaluje konfigurační soubory a nastaví X server tak,
|
||||
aby automaticky spouštěl Window Maker při jejich spuštění.
|
||||
|
||||
To je všechno, přátelé.
|
||||
|
||||
Informace o konfiguraci a spoustě ostatních věcí vám poskytne:
|
||||
|
||||
man wmaker
|
||||
|
||||
Pro hlubší úvod do Window Makeru si přečtěte Uživatelskou příručku (User Guide).
|
||||
|
||||
Měli byste se také podívat na FAQ (Frequently Asked Questions = často kladené
|
||||
otázky), pokud budete mít nějaké problémy/potíže jak při samotné kompilaci,
|
||||
tak s užíváním Window Makeru.
|
||||
|
||||
Instalování speciálního balíčku
|
||||
-------------------------------
|
||||
|
||||
Rozbalte WindowMaker-extra-<číslo_verze>.tar.gz v adresáři /usr/local/share
|
||||
|
||||
Tento soubor si můžete sehnat na adrese: ftp://ftp.windowmaker.org. Instalace
|
||||
tohoto souboru vůbec není nutná. tento balíček obsahuje několik ikon a témat.
|
||||
Hledejte poslední dostupnou verzi. V balíčku také naleznete soubor
|
||||
WindowMaker-extra.readme, který vám poradí, co máte udělat.
|
||||
|
||||
Nemám rootovské helso :-(
|
||||
-------------------------
|
||||
|
||||
Pokud nemáte superuživatelská privilegia (nemůžete se přihlásit jako root),
|
||||
tak nezoufejte, protože můžete nainstalovat Window Maker do vašeho vlastního
|
||||
domovského adresáře. K tomu musíte použít volbu --prefix při spuštění
|
||||
./configure. Také musíte použít volbu --with-appspath, která specifikuje
|
||||
cestu pro WPrefs.app.
|
||||
Příklad:
|
||||
|
||||
./configure --prefix=/home/karel --with-appspath=/home/karel/GNUstep/Applications
|
||||
|
||||
Potom přidejte adresář /home/karel/bin do systémové proměnné PATH a adresář
|
||||
/home/karel/lib do sytémové proměnné LD_LIBRARY_PATH a nakonec spusťte
|
||||
~/bin/wmaker.inst.
|
||||
|
||||
Samozřejmě, že adresář /home/karel bude ve vašem případě nahrazen vaším
|
||||
vlastním domovským adresářem.
|
||||
|
||||
|
||||
UPGRADE
|
||||
=======
|
||||
|
||||
Pokud upgradujete ze starší verze Window Makeru:
|
||||
|
||||
1. Nakonfigurujte a zkompilujte Window Maker jako obvykle.
|
||||
2. Nainstalujte Window Maker (ale nespouštějte wmaker.inst).
|
||||
3. Přečtěte si soubor NEWS a aktualizujte vaše konfigurační soubory,
|
||||
pokud je to nezbytné.
|
||||
|
||||
ŘEŠENÍ PROBLÉMÚ
|
||||
===============
|
||||
|
||||
Pokud máte nějaké problémy během konfigurace (když běží configure), jako
|
||||
například neschopnost použít knihovnu grafického formátu, o kterém víte, že
|
||||
ho máte nainstalován, tak se podívejte do souboru config.log. Možná zde
|
||||
najdete příčinu svých problémů.
|
||||
|
||||
== Error with loading fonts, even if they exist.
|
||||
|
||||
Zkuste kompilaci bez podpory NLS (národního prostředí).
|
||||
|
||||
== Error when configuring
|
||||
|
||||
ltconfig: unrecognized option `--no-reexec'
|
||||
Try `ltconfig --help' for more information.
|
||||
configure: error: libtool configure failed
|
||||
|
||||
odstraňte volbu --no-reexec ze souboru aclocal.mc a spusťte znovu configure.
|
||||
Také zkontrolujte, zda verze autoconfu a automaku, které máte nainsatlované
|
||||
odpovídají níže uvedeným hodnotám:
|
||||
autoconf 2.13
|
||||
automake 1.4
|
||||
libtool 1.3
|
||||
|
||||
Poznámka: nemůže to být libtool 1.2b, ale musí to být libtool 1.3 ze stránek
|
||||
GNU.
|
||||
|
||||
== configure doesn't detect libtiff, or other graphic libraries.
|
||||
|
||||
Smažte soubor config.cache, pak znovu spusťte configure s následujícími
|
||||
volbami (a jinými, které používáte):
|
||||
--with-libs-from="-L/usr/local/lib"
|
||||
--with-incs-from="-I/usr/local/include -I/usr/local/include/tiff"
|
||||
Na příslušná místa vložte cesty k vaším grafickým knihovnám a odpovídajícím
|
||||
hlavičkovým souborům. Můžete zadat několik cest do těchto voleb, jako je to
|
||||
ve výše uvedeném příkladě --with-incs-from. Jenom je nezapomeňte oddělit
|
||||
mezerou.
|
||||
|
||||
== configure doesn't detect libXpm.
|
||||
|
||||
* Zkontrolujte, jestli máte symbolický link ze souboru libXpm.so.4.9 na
|
||||
soubor libXpm.so
|
||||
|
||||
== Segmentation fault on startup
|
||||
|
||||
* Zkontrolujte, jestli verze knihovny libXPM je vyšší než 4.7
|
||||
|
||||
* Zkontrolujte, zda-li máte upravenou verzi ~/GNUstep/Defaults/WindowMaker
|
||||
Pokud si nejste jisti, tak zkuste přejmenovat ~/GNUstep na ~/GNUtmp a
|
||||
spusťte wmaker.inst
|
||||
|
||||
== "...: your machine is misconfigured. gethostname() returned (none)"
|
||||
|
||||
* Jméno vašeho počítače je nastaveno nesprávně, protože začíná uvozovkami.
|
||||
Spusťte man hostname a zde se dozvíte, jak změnit jméno vašeho počítače.
|
||||
|
||||
== The root menu contains only 2 entries. ("XTerm" and "Exit...")
|
||||
|
||||
* Window Maker nemůže nalézt cpp (preprocesor jazyka C). Pokud se váš cpp
|
||||
nenachází v /lib/cpp, tak otevřte soubor src/config.h a nastavte správně
|
||||
cestu CPP_PATH.
|
||||
|
||||
== checking lex output file root... configure: error: cannot find output from true; giving up
|
||||
|
||||
* Přečtěte si odstavec POŽADAVKY na začátku tohoto souboru.
|
||||
|
||||
MÍSTNÍ NASTAVENÍ / INTERNACIONALIZACE
|
||||
=====================================
|
||||
|
||||
Window Maker má podporu národních jazyků. Aby jste ji povolili, tak
|
||||
musíte zkompilovat Window Maker s několika dalšími parametry.
|
||||
Seznam podporovaných jazyků naleznete v souboru ./po/README.
|
||||
|
||||
0 - Musíte mít nainstalovaný balíček GNU gettextu. Tento balíček
|
||||
můžete nalézt na ftp://prep.ai.mit.edu/pub/gnu/gettext-nnn.tar.gz
|
||||
|
||||
Kroky 1,2 a 3 můžete vynechat, pokud používáte skript Install.cs nebo
|
||||
skript Install.
|
||||
|
||||
1 - Vyberte si jazyky, které budete chtít používat. Zadejte seznam
|
||||
těchto jazyků do systémové proměnné LINGUAS. Angličtina je
|
||||
podporována vždy. Příklady
|
||||
|
||||
C - shell:
|
||||
|
||||
setenv LINGUAS "pt ja de"
|
||||
|
||||
Bash(sh):
|
||||
|
||||
export LINGUAS
|
||||
LINGUAS="pt ja de"
|
||||
|
||||
Přečtěte si soubor po/README pokud chcete přeložit Window Maker
|
||||
pro nějaký další jazyk.
|
||||
|
||||
2 - Navíc, pokud váš jazyk používá multi-byte znaky, například Japonština
|
||||
nebo Korejština, tak musíte nastavit volbu the MultiByteText na YES
|
||||
v souboru ~/GNUstep/Defaults/WMGLOBAL
|
||||
|
||||
3 - Nakonfigurujte, zkompilujte a nainstalujte Window Maker jako obvykle.
|
||||
|
||||
4 - Národní prostředí si můžete změnit i za běhu Window Makeru. Systémovou
|
||||
proměnnou LANG nastavíte na vámi zvolenou hodnotu. Například, pokud
|
||||
chcete použít portugalské prostředí, musíte spustit:
|
||||
|
||||
C - shell:
|
||||
|
||||
setenv LANG pt
|
||||
|
||||
Bourne shell a podobné:
|
||||
|
||||
export LANG
|
||||
LANG=pt
|
||||
|
||||
Nakonec musíte restartovat/spustit Window Maker.
|
||||
|
||||
Poznámka: Když máte nastavenou systémovou proměnnou LC_TYPE, tak jí
|
||||
musíte zrušit před spuštěním Window Makeru.
|
||||
|
||||
Window Maker hledá soubory s definicí menu v tomto pořadí (pro
|
||||
brazilskou portugalštinu):
|
||||
|
||||
menu.pt_BR
|
||||
menu.pt
|
||||
menu
|
||||
|
||||
5 - Pokud si vyberete jazyk, který používá multi-byte znaky, tak musíte
|
||||
příslušným způsobem nastavit fonty. Přečtěte si manuálové stránky
|
||||
o XCreateFontSet k získání většího množství informací o daném
|
||||
problému. Musíte změnit v souboru ~/GNUstep/Default/WindowMaker
|
||||
nastavení fontů pro titulky, menu, atd. Fonty pro dialogy nastavíte
|
||||
v souboru ~/GNUstep/Default/WMGLOBAL. Řetězce %d ve jménech fontů
|
||||
nemusí být odstraněné. Také můžete použít skript wsetfont, který
|
||||
toto vše učiní za vás. Pokud se ho rozhodnote použít, tak si k němu
|
||||
přečtěte instrukce tak, že spustíte wsetfont bez argumentů.
|
||||
|
||||
Příklad části souboru ~/GNUstep/Default/WindowMaker:
|
||||
|
||||
WindowTitleFont = "-*-helvetica-bold-r-normal-*-12-*,-*-*-medium-r-normal-*-14-*";
|
||||
MenuTitleFont = "-*-helvetica-bold-r-normal-*-12-*,-*-*-medium-r-normal-*-14-*";
|
||||
MenuTextFont = "-*-helvetica-medium-r-normal-*-12-*,-*-*-medium-r-normal-*-14-*";
|
||||
IconTitleFont = "-*-helvetica-medium-r-normal-*-8-*,-*-*-medium-r-normal-*-12-*";
|
||||
ClipTitleFont = "-*-helvetica-bold-r-normal-*-10-*,-*-*-medium-r-normal-*-12-*";
|
||||
DisplayFont = "-*-helvetica-medium-r-normal-*-12-*,-*-*-medium-r-normal-*-12-*";
|
||||
|
||||
a souboru ~/GNUstep/Default/WMGLOBAL:
|
||||
|
||||
SystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
|
||||
BoldSystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
|
||||
|
||||
Tyto dva fonty jsou používány v aplikacích, které používají WINGs (WindowMaker a
|
||||
WPrefs.app).
|
||||
|
||||
Skript wsetfont vám umožní nastavit fonty mnohem jednoduším způsobem. Podívejte
|
||||
se na jeho manuálové stránku k získání bližších informací.
|
||||
24
INSTALL.es
24
INSTALL.es
@@ -78,9 +78,9 @@ Lo siguiente se necesita para compilar Window Maker:
|
||||
instaladas, asegúrese de tener TODO lo siguiente con estas versiones
|
||||
exactas:
|
||||
|
||||
autoconf 2.13
|
||||
autoconf 2.54
|
||||
automake 1.4
|
||||
libtool 1.3
|
||||
libtool 1.4.2
|
||||
|
||||
Si tiene una versión distinta, desactívelas temporalemte renombrándolas
|
||||
a otras cosa o desinstalándolas desde su sistema. Si no desarrolla
|
||||
@@ -122,11 +122,6 @@ Estas bibliotecas no son necesarias para hacer que Window Maker funcione,
|
||||
Para soporte de imagen GIF.
|
||||
ftp://prtr-13.ucsc.edu/pub/libungif/
|
||||
|
||||
- libHermes 1.3.2 o más actual
|
||||
Para conversión a pixel más rápida en la biblioteca wraster.
|
||||
(se usa solo en algunas conversiones - para visuales Color Verdadero)
|
||||
http://www.clanlib.org/hermes/
|
||||
|
||||
- GNU xgettext
|
||||
Si quiere usar mensajes traducidos, necesitará GNU gettext.
|
||||
Otras versiones de gettext no son compatibles y no funcionarán.
|
||||
@@ -170,15 +165,6 @@ Para obtener una lista de otras opciones, ejecute ./configure --help
|
||||
--disable-motif
|
||||
desactiva el soporte para el gestor de ventanas mwm.
|
||||
|
||||
--enable-openlook
|
||||
activa el soporte para el gestor de ventanas OPEN LOOK(tm)
|
||||
|
||||
--enable-gnome
|
||||
activa el soporte para el gestor de ventanas GNOME.
|
||||
|
||||
--enable-kde
|
||||
activa el soporte para el gestor de ventanas kde/kwm.
|
||||
|
||||
--enable-lite
|
||||
quita cosas que ya están soportadas en los entornos de escritorio,
|
||||
tal como KDE y Gnome. Desactiva cosas como: lista de ventanas,
|
||||
@@ -235,8 +221,8 @@ Subject: Re: El paquete WindowMaker funciona bien en Alpha?
|
||||
> por favor probar esto? Debería el parámetro ser pasado al compilar
|
||||
> en Alpha?
|
||||
|
||||
Descargo de responsabilidad: alphas bajo mi mando nunca han ejecutado X y are
|
||||
least likely to suddenly start running it anytime soon.
|
||||
Descargo de responsabilidad: alphas bajo mi mando nunca han ejecutado X
|
||||
y es poco probable de que las ejecute repentinamente en algún momento.
|
||||
|
||||
Alpha suele tener alguna ridícula poca cantidad de memoria compartida
|
||||
configurada.
|
||||
@@ -427,7 +413,7 @@ opci
|
||||
También necesitará proporcionar la opción --with-appspath, para especificar la ruta
|
||||
para WPrefs.app. Ejemplo:
|
||||
|
||||
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Apps
|
||||
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Applications
|
||||
|
||||
Luego haga /home/jshmoe/bin para que se lo incluya en su ruta de búsqueda, agregue
|
||||
/home/jshmoe/lib a su variable de entorno LD_LIBRARY_PATH y ejecute bin/wmaker.inst
|
||||
|
||||
54
INSTALL.fr
54
INSTALL.fr
@@ -3,9 +3,9 @@
|
||||
|
||||
|
||||
|
||||
PLATEFORMES SUPPORTEES
|
||||
PLATEFORMES SUPPORTÉES
|
||||
======================
|
||||
(c.a.d : j'ai entendu dire que la compilation a été réalisée avec succès sur..)
|
||||
(c.à.d. : j'ai entendu dire que la compilation a été réalisée avec succès sur..)
|
||||
|
||||
- Intel GNU/Linux Conectiva 5.9 (beta)
|
||||
- Intel GNU/Linux Slackware
|
||||
@@ -49,7 +49,7 @@ Tout patch qui pourrait faciliter l'adaptation
|
||||
est le bienvenu.
|
||||
|
||||
|
||||
PRE-REQUIS
|
||||
PRÉ-REQUIS
|
||||
==========
|
||||
|
||||
Les logiciels suivants sont nécessaires à l'utilisation de Window Maker :
|
||||
@@ -77,9 +77,9 @@ Les
|
||||
Ces outils ne sont pas indispensables, mais si au moins l'un d'eux
|
||||
est installé sur votre système, assurez-vous que TOUS le sont, et
|
||||
que les versions de ces outils sont exactement :
|
||||
autoconf 2.13
|
||||
autoconf 2.54
|
||||
automake 1.4
|
||||
libtool 1.3
|
||||
libtool 1.4.2
|
||||
Si les versions installées sur votre système différent, désactivez-les
|
||||
provisoirement, par exemple en les renommant, ou en les désinstallant
|
||||
de votre système. Si vous ne développez ni de compilez de logiciels,
|
||||
@@ -120,18 +120,10 @@ fonctionner aussi bien.
|
||||
Pour pouvoir utiliser les images au format GIF.
|
||||
ftp://prtr-13.ucsc.edu/pub/libungif/
|
||||
|
||||
- libHermes 1.3.2 ou plus récent
|
||||
Pour une conversion de pixels plus rapide dans la librairie wraster.
|
||||
(utilisé uniquement pour des conversions spécifiques dont les modes
|
||||
vidéo TrueColor)
|
||||
http://www.clanlib.org/hermes/
|
||||
|
||||
- GNU xgettext
|
||||
Si vous voulez disposer des traductions en d'autres langues, GNU gettext
|
||||
est nécessaire. Les autres versions de gettext sont incompatibles et ne
|
||||
fonctionneront pas.
|
||||
If you want to use translated messages, you will need GNU gettext.
|
||||
Other versions of gettext are not compatible and will not work.
|
||||
Vous trouverez la version GNU sur ftp://ftp.gnu.org
|
||||
|
||||
|
||||
@@ -149,12 +141,12 @@ configurera Window Maker avec le support int
|
||||
Afin d'obtenir la liste des autres options, exécutez ./configure --help
|
||||
|
||||
--with-libs-from
|
||||
ajoute des chemins d"accès pour la recherche des librairies.
|
||||
ajoute des chemins d'accès pour la recherche des librairies.
|
||||
L'option -L doit précéder chaque chemin d'accès, comme suit :
|
||||
--with-libs-from="-L/opt/libs -L/usr/local/lib"
|
||||
|
||||
--with-incs-from
|
||||
ajoute des chemins d"accès pour la recherche des fichiers d'en-tête.
|
||||
ajoute des chemins d'accès pour la recherche des fichiers d'en-tête.
|
||||
L'option -I doit précéder chaque chemin d'accès, comme suit :
|
||||
--with-incs-from="-I/opt/headers -I/usr/local/include"
|
||||
|
||||
@@ -175,18 +167,6 @@ Afin d'obtenir la liste des autres options, ex
|
||||
désactive le support pour les fonctionnalités en rapport avec le gestionnaire
|
||||
de fenêtres mwm.
|
||||
|
||||
--enable-openlook
|
||||
désactive le support pour les fonctionnalités en rapport avec le gestionnaire
|
||||
de fenêtres OPEN LOOK(tm).
|
||||
|
||||
--enable-gnome
|
||||
désactive le support pour les fonctionnalités en rapport avec le gestionnaire
|
||||
de fenêtres GNOME.
|
||||
|
||||
--enable-kde
|
||||
désactive le support pour les fonctionnalités en rapport avec le gestionnaire
|
||||
de fenêtres kde/kwm.
|
||||
|
||||
--enable-lite
|
||||
désactive des fonctionnalités déjà prises en compte par les gestionnaires de
|
||||
bureau tels que KDE et GNOME. Celà concerne : la liste de fenêtres, le menu
|
||||
@@ -223,7 +203,7 @@ Afin d'obtenir la liste des autres options, ex
|
||||
désactive l'utilisation de "shaped windows" (pour oclock, xeyes, etc.).
|
||||
|
||||
|
||||
NOTES SPECIFIQUES AUX PLATEFORMES
|
||||
NOTES SPÉCIFIQUES AUX PLATEFORMES
|
||||
=================================
|
||||
|
||||
- machines DEC/Alpha
|
||||
@@ -248,7 +228,7 @@ Sujet : Re : Est-ce que le paquetage WindowMaker fonctionne correctement sur Alp
|
||||
> pour compiler sur Alpha?
|
||||
|
||||
Notez bien : les Alphas dont je me sers ne sont jamais sous X et ne sont pas près
|
||||
de le faire.
|
||||
de l'être.
|
||||
|
||||
Bien souvent, la configuration des Alphas n'inclut qu'un volume ridiculement
|
||||
petit de mémoire partagée. Aussi il n'est pas étonnant qu'un grand nombre
|
||||
@@ -319,7 +299,7 @@ est soumis
|
||||
* si vous rencontrez des messages d'erreur en rapport avec "--no-reexec",
|
||||
désinstallez libtool-1.2b et installez libtool-1.3.
|
||||
libtool-1.3 peut être trouvé sur ftp.gnu.org.
|
||||
Consultez aussi la section PROBLEMES;
|
||||
Consultez aussi la section PROBLÈMES;
|
||||
|
||||
* si vous aviez auparavant installé le paquetage de Window Maker livré
|
||||
avec RedHat et que vous voulez installer maintenant manuellement une nouvelle
|
||||
@@ -365,7 +345,7 @@ INSTALLATION
|
||||
|
||||
Compiler Window Maker
|
||||
---------------------
|
||||
Pour aller vite, tapez ce qui suit sous un prompt shell :
|
||||
Pour aller vite, tapez ce qui suit dans un prompt shell :
|
||||
|
||||
./configure
|
||||
make
|
||||
@@ -375,7 +355,7 @@ puis, loguez-vous en tant que root and tapez :
|
||||
make install
|
||||
ldconfig
|
||||
|
||||
ou, si vous voulez ôter les infos de débogage des exécutables et les
|
||||
ou, si vous voulez ôter les infos de débogage des exécutables et ainsi les
|
||||
rendre plus petits, tapez plutôt :
|
||||
|
||||
make install-strip
|
||||
@@ -398,7 +378,7 @@ pouvez faire :
|
||||
|
||||
./configure --enable-kde
|
||||
|
||||
3. (optionnel) Editez src/wconfig.h avec votre editeur de texte favori et
|
||||
3. (optionnel) Éditez src/wconfig.h avec votre éditeur de texte favori et
|
||||
et modifiez sont contenu à votre guise.
|
||||
|
||||
4. Compilez. Il faut juste taper :
|
||||
@@ -467,7 +447,7 @@ l'option --prefix correctement renseign
|
||||
Il est aussi nécessaire d'utiliser l'option --with-appspath, afin de préciser
|
||||
le chemin d'accès à WPrefs.app. Par exemple :
|
||||
|
||||
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Apps
|
||||
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Applications
|
||||
|
||||
|
||||
Puis, faites en sorte que /home/jshmoe/bin soit inclus dans votre PATH, ajoutez
|
||||
@@ -477,7 +457,7 @@ bin/wmaker.inst
|
||||
Bien sûr, /home/jshmoe est supposé être remplacé par votre répertoire personnel.
|
||||
|
||||
|
||||
MISE A JOUR
|
||||
MISE À JOUR
|
||||
===========
|
||||
|
||||
Si vous mettez à jour une version plus ancienne de Window Maker :
|
||||
@@ -488,7 +468,7 @@ Si vous mettez
|
||||
si nécessaire.
|
||||
|
||||
|
||||
PROBLEMES
|
||||
PROBLÈMES
|
||||
=========
|
||||
|
||||
Si vous rencontrez des problèmes pendant la phase de configuration, comme par
|
||||
@@ -498,7 +478,7 @@ du fichier config.log, vous y trouverez peut-
|
||||
ce problème.
|
||||
|
||||
|
||||
== erreur de chargement de polices, même si elles existent
|
||||
== erreur de chargement de polices, alors qu'elles existent
|
||||
|
||||
Essayez de recompiler sans le support pour le NLS.
|
||||
|
||||
|
||||
15
INSTALL.pt
15
INSTALL.pt
@@ -68,9 +68,9 @@ Para compilar o Window Maker voc
|
||||
- autoconf, automake and libtool
|
||||
Estes pacotes não são necessários, mas se você tiver um ou mais deles instalados,
|
||||
verifique se todos eles são das seguintes versões:
|
||||
autoconf 2.13
|
||||
autoconf 2.54
|
||||
automake 1.4
|
||||
libtool 1.3
|
||||
libtool 1.4.2
|
||||
Se você possui uma versão diferente, desative-os mudando os nomes dos arquivos
|
||||
para outra coisa ou removendo-os do seu sistema. Se você não desenvolve
|
||||
software você não precisa deles, logo, você pode desinstalá-los com segurança.
|
||||
@@ -155,15 +155,6 @@ Para obter uma lista com outras opcoes, execute ./configure --help:
|
||||
--disable-motif
|
||||
Desativa compatibilidade com gerenciador de janelas mwm.
|
||||
|
||||
--enable-openlook
|
||||
Ativa compatibilidade com gerenciador de janelas OPEN LOOK(tm).
|
||||
|
||||
--enable-gnome
|
||||
Ativa compatibilidade com gerenciador de janelas GNOME.
|
||||
|
||||
--enable-kde
|
||||
Ativa compatibilidade com gerenciador de janelas kde/kwm.
|
||||
|
||||
--enable-lite
|
||||
Remove coisas que já são suportadas em ambientes desktops como o KDE
|
||||
e o GNOME. As opções desativadas são: lista de janelas (window list), menu de
|
||||
@@ -382,7 +373,7 @@ Compilando o Window Maker.
|
||||
Você ainda precisará fornecer a opção --with-appspath, para especificar o
|
||||
caminho do WPrefs.app. Exemplo:
|
||||
|
||||
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Apps
|
||||
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Applications
|
||||
|
||||
Depois faça com que /home/jshome/bin seja incluído na variável PATH, adicione
|
||||
/home/jshome/lib na variável de ambiente LD_LIBRARY_PATH e rode bin/wmaker.inst
|
||||
|
||||
15
INSTALL.sk
15
INSTALL.sk
@@ -71,9 +71,9 @@ Nasledovn
|
||||
- autoconf, automake a libtool
|
||||
Tieto nástroje NIE sú potrebné, ale ak máte niektoré z nich nain¹talo-
|
||||
vané, uistite sa, ¾e V©ETKY sú presne nasledovné verzie:
|
||||
autoconf 2.13
|
||||
autoconf 2.54
|
||||
automake 1.4
|
||||
libtool 1.3
|
||||
libtool 1.4.2
|
||||
Ak máte odli¹né verzie, odin¹talujte ich alebo ich doèasne premenujte.
|
||||
Ak neprogramujete, nebudete ich potrebova» a teda ich mô¾ete
|
||||
odin¹talova».
|
||||
@@ -161,15 +161,6 @@ Zoznam v
|
||||
--disable-motif
|
||||
zaká¾e podporu pre pokyny mana¾éra okien wmw
|
||||
|
||||
--enable-openlook
|
||||
povolí podporu pre pokyny mana¾éra okien OPEN LOOK(tm)
|
||||
|
||||
--enable-gnome
|
||||
povolí podporu pre pokyny mana¾éra okien GNOME
|
||||
|
||||
--enable-kde
|
||||
povolí podporu pre pokyny mana¾éra okien kde/kwm
|
||||
|
||||
--enable-lite
|
||||
odstráni veci, ktoré sa u¾ nachádzajú v desktopových prostrediach
|
||||
ako KDE a GNOME. Odstránené veci sú: zoznam okien, menu aplikácií,
|
||||
@@ -426,7 +417,7 @@ v druhom kroku kompil
|
||||
--with-appspath, pomocou ktorej ¹pecifikujete cestu pre WPrefs.app.
|
||||
Príklad:
|
||||
|
||||
./configure --prefix=/home/jshome --with-appspath=/home/jshome/GNUstep/Apps
|
||||
./configure --prefix=/home/jshome --with-appspath=/home/jshome/GNUstep/Applications
|
||||
|
||||
Poto pridajte adresár /home/jshome/bin do premennej PATH, /home/jshome/lib
|
||||
do premennej LD_LIBRARY_PATH a spustite bin/wmaker.inst
|
||||
|
||||
304
Install
304
Install
@@ -1,304 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# WindowMaker configuration and compilation script.
|
||||
#
|
||||
# Copyright (c) 1997, 1998, 1999 Alfredo K. Kojima
|
||||
#
|
||||
|
||||
export LINGUAS;LINGUAS=""
|
||||
if test "$NLSDIR" = ""; then
|
||||
export NLSDIR;NLSDIR="/usr/lib/locale"
|
||||
fi
|
||||
|
||||
|
||||
OPTIONS=""
|
||||
PREFIX="/usr/local"
|
||||
|
||||
perai() {
|
||||
echo "Type <Return> to continue"
|
||||
read nada
|
||||
}
|
||||
|
||||
|
||||
perform() {
|
||||
if ! $* ; then
|
||||
echo
|
||||
echo "Window Maker installation failed or aborted by user."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
help() {
|
||||
echo "Usage: $(basename $0) <switch>"
|
||||
echo "Where switches are:"
|
||||
echo " -s --quiet make silent build"
|
||||
echo " -h --help show this message"
|
||||
echo ""
|
||||
exit $1
|
||||
}
|
||||
|
||||
|
||||
OPTIONS=""
|
||||
MAKE_OPTIONS=""
|
||||
while [ -n "$1" ]
|
||||
do
|
||||
case "$1" in
|
||||
"-s"|"--quiet") OPTIONS="--quiet"
|
||||
MAKE_OPTIONS="-s";;
|
||||
"-h"|"--help") help 0;;
|
||||
*) echo "bad command-line parameter $1"
|
||||
help 1;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
trap "echo Window Maker installation aborted. ; exit 1" 2 3
|
||||
|
||||
echo
|
||||
echo "========================="
|
||||
echo "Window Maker Installation"
|
||||
echo "========================="
|
||||
echo
|
||||
echo "NOTE: If this script fails, read the INSTALL file and"
|
||||
echo "install by hand."
|
||||
echo
|
||||
echo "Please read the README, INSTALL and FAQ files before e-mailing "
|
||||
echo "questions. We will IGNORE any questions that are already"
|
||||
echo "answered in the documentation."
|
||||
echo
|
||||
perai
|
||||
echo
|
||||
echo "Did you install libPropList? If not, please install it now."
|
||||
echo
|
||||
perai
|
||||
echo "Did you read the INSTALL file?"
|
||||
echo -n "<y/n> "
|
||||
read rtfm
|
||||
if [ "$rtfm" != y ]; then
|
||||
echo "Please read the INSTALL file before installing"
|
||||
exit
|
||||
fi
|
||||
echo "Are you sure?"
|
||||
echo -n "<y/n> "
|
||||
read rtfm
|
||||
if [ "$rtfm" != y ]; then
|
||||
echo "Please read the INSTALL file before installing"
|
||||
exit
|
||||
fi
|
||||
echo "Are you lying?"
|
||||
echo -n "<y/n> "
|
||||
read rtfm
|
||||
if [ "$rtfm" != n ]; then
|
||||
echo "What a shame!"
|
||||
echo "Please read the INSTALL file before installing"
|
||||
exit
|
||||
fi
|
||||
echo "Do you *swear* that you really read the INSTALL file?"
|
||||
echo -n "<y/n> "
|
||||
read rtfm
|
||||
if [ "$rtfm" != y ]; then
|
||||
echo "Please read the INSTALL file before installing"
|
||||
exit
|
||||
fi
|
||||
echo "Last chance. You will not get help if you have some problem"
|
||||
echo "because you didn't read that file. Even if your computer explodes."
|
||||
echo "Do you *really* read it?"
|
||||
echo -n "<y/n> "
|
||||
read rtfm
|
||||
if [ "$rtfm" != y ]; then
|
||||
echo "Please read the INSTALL file before installing"
|
||||
exit
|
||||
fi
|
||||
echo
|
||||
echo "Ok, you have been warned."
|
||||
echo
|
||||
perai
|
||||
|
||||
|
||||
if test "$USER" != "root"; then
|
||||
echo
|
||||
echo "Warning: you must run this script as root to install"
|
||||
echo "Window Maker. Hit <Control>-<C> to quit this script."
|
||||
perai
|
||||
echo
|
||||
fi
|
||||
|
||||
|
||||
echo
|
||||
echo "Option Selection"
|
||||
echo "================"
|
||||
|
||||
######################## KDE
|
||||
echo
|
||||
echo "Do you want KDE support?"
|
||||
echo -n "<y/n> [n] "
|
||||
read kde
|
||||
if [ "$kde" = y -o "$kde" = Y ]; then
|
||||
OPTIONS="$OPTIONS --enable-kde"
|
||||
fi
|
||||
|
||||
######################## GNOME
|
||||
echo
|
||||
echo "Do you want GNOME support?"
|
||||
echo -n "<y/n> [n] "
|
||||
read gnome
|
||||
if [ "$gnome" = y -o "$gnome" = Y ]; then
|
||||
OPTIONS="$OPTIONS --enable-gnome"
|
||||
fi
|
||||
|
||||
######################## OLWM
|
||||
echo
|
||||
echo "Do you want OPEN LOOK(tm)/olwm support?"
|
||||
echo -n "<y/n> [n] "
|
||||
read olwm
|
||||
if [ "$olwm" = y -o "$olwm" = Y ]; then
|
||||
OPTIONS="$OPTIONS --enable-openlook"
|
||||
fi
|
||||
|
||||
######################## NLS
|
||||
echo
|
||||
echo "Do you want National Language Support?"
|
||||
echo -n "<y/n> [n] "
|
||||
read NLS
|
||||
|
||||
if [ "$NLS" = "y" -o "$NLS" = "Y" ]; then
|
||||
NLS="Y"
|
||||
echo "The supported locales are:"
|
||||
ling=` (cd po; /bin/ls *.po) `
|
||||
ALL_LINGUAS=""
|
||||
for l in $ling; do
|
||||
lname=`(cd po; grep Language-Team $l|cut -f2- -d:|cut -f1 -d\\\\|cut -f1 -d\<)`
|
||||
lname=`echo $lname`
|
||||
lcode=`basename $l .po`
|
||||
ALL_LINGUAS="$ALL_LINGUAS $lcode"
|
||||
echo "$lcode $lname"
|
||||
done
|
||||
echo "Type in the locales you want (all will install everything) [none]"
|
||||
read foo
|
||||
if test "$foo" = "all"; then
|
||||
LINGUAS="$ALL_LINGUAS"
|
||||
else
|
||||
LINGUAS="$foo"
|
||||
fi
|
||||
echo "Selected locales are: $LINGUAS"
|
||||
|
||||
MB=""
|
||||
for i in $LINGUAS; do
|
||||
ok=0
|
||||
for b in $ALL_LINGUAS; do
|
||||
if test "$b" = "$i"; then
|
||||
ok=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test "$ok" = "0"; then
|
||||
echo
|
||||
echo "$i is not a supported locale"
|
||||
perai
|
||||
continue
|
||||
fi
|
||||
|
||||
done
|
||||
echo
|
||||
echo "Where do you want to put the message files? [$NLSDIR]"
|
||||
echo -n "? "
|
||||
read foo
|
||||
if test "x$foo" != "x"; then
|
||||
NLSDIR=$foo
|
||||
fi
|
||||
fi
|
||||
##################### Installation path
|
||||
|
||||
done=0
|
||||
while [ $done = 0 ]; do
|
||||
echo
|
||||
echo "Where do you want to install Window Maker? [$PREFIX]"
|
||||
echo "Don't change it if you don't know what you're doing."
|
||||
if test "$USER" != "root"; then
|
||||
echo "Make sure to specify a path where you have write permission."
|
||||
fi
|
||||
echo "(The default will put Window Maker in $PREFIX/bin, $PREFIX/lib etc.)"
|
||||
echo -n "? "
|
||||
read foo
|
||||
if test "x$foo" != "x"; then
|
||||
if [ "$foo" = "y" -o "$foo" = "n" ]; then
|
||||
echo
|
||||
echo "Hmm... I don't think you really want to install Window Maker into \"$foo\""
|
||||
echo
|
||||
else
|
||||
done=1
|
||||
PREFIX=$foo
|
||||
fi
|
||||
else
|
||||
done=1
|
||||
fi
|
||||
echo
|
||||
echo " $PREFIX/bin must be in the PATH environment variable"
|
||||
echo "of all users who will use Window Maker"
|
||||
perai
|
||||
done
|
||||
|
||||
OPTIONS="$OPTIONS --prefix=$PREFIX"
|
||||
|
||||
|
||||
##################### Install stripped binaries?
|
||||
|
||||
INSTALL="install"
|
||||
echo "Do you want stripped binaries to be installed?"
|
||||
echo "Installed binaries will be smaller (with debug info removed)."
|
||||
echo -n "<y/n> [n] "
|
||||
read foo
|
||||
if [ "$foo" = y -o "$foo" = Y ]; then
|
||||
INSTALL="install-strip"
|
||||
fi
|
||||
|
||||
|
||||
##################### Configure
|
||||
echo "--------------------------"
|
||||
echo "Configuring Window Maker..."
|
||||
echo "--------------------------"
|
||||
if [ `uname -s` = "SCO_SV" ]; then
|
||||
echo "CFLAGS=\"$CFLAGS -belf -DANSICPP\" ./configure $OPTIONS"
|
||||
|
||||
CFLAGS="$CFLAGS -belf -DANSICPP"
|
||||
|
||||
perform ./configure $OPTIONS
|
||||
else
|
||||
echo "CFLAGS=\"$CFLAGS $GCCFLAGS\" ./configure $OPTIONS"
|
||||
|
||||
CFLAGS="$CFLAGS $GCCFLAGS"
|
||||
|
||||
perform ./configure $OPTIONS
|
||||
fi
|
||||
|
||||
|
||||
#################### Compile
|
||||
echo "-------------------------"
|
||||
echo "Compiling Window Maker..."
|
||||
echo "-------------------------"
|
||||
(cd src; perform make $MAKE_OPTIONS clean)
|
||||
perform make $MAKE_OPTIONS
|
||||
|
||||
echo "--------------------------"
|
||||
echo "Installing Window Maker..."
|
||||
echo "--------------------------"
|
||||
|
||||
perform make $MAKE_OPTIONS $INSTALL
|
||||
|
||||
if [ `uname -s` = "Linux" ]; then
|
||||
echo
|
||||
echo " Make sure $PREFIX/lib is in the /etc/ld.so.conf file"
|
||||
/sbin/ldconfig
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Installation Finished!"
|
||||
echo
|
||||
echo "Now, each user that wishes to use WindowMaker must run the wmaker.inst"
|
||||
echo "script that was just installed."
|
||||
|
||||
|
||||
if test "$NLS" = "Y"; then
|
||||
echo "Don't forget to set the LANG environment variable to your locale"
|
||||
fi
|
||||
|
||||
23
Makefile.am
23
Makefile.am
@@ -3,25 +3,8 @@
|
||||
SUBDIRS = wrlib WINGs src util po WindowMaker wmlib test WPrefs.app doc\
|
||||
contrib
|
||||
|
||||
EXTRA_DIST = TODO BUGS BUGFORM FAQ FAQ.I18N MIRRORS COPYING.WTFPL \
|
||||
Install acconfig.h INSTALL.pt README.pt\
|
||||
mkpatch README.KDE README.GNOME WindowMaker.lsm.in\
|
||||
README.definable-cursor \
|
||||
FAQ.I18N.sk INSTALL.sk INSTALL.es INSTALL.fr
|
||||
EXTRA_DIST = TODO BUGS BUGFORM FAQ FAQ.I18N FAQ.I18N.cs FAQ.I18N.sk \
|
||||
INSTALL.cs INSTALL.fr INSTALL.es INSTALL.pt INSTALL.sk \
|
||||
README.definable-cursor README.pt MIRRORS COPYING.WTFPL mkpatch
|
||||
# libwmfun-0.0.3.tar.gz
|
||||
|
||||
WindowMaker.lsm: WindowMaker.lsm.in
|
||||
size=`wc -c $(distdir).tar.gz|cut -d\ -f1`;\
|
||||
size=`echo scale=2\;$$size/1048576|bc`;\
|
||||
sed -e "s/VERSION/"$(VERSION)"/" \
|
||||
-e "s/DATE/`date +%d%b%Y|tr a-z A-Z`/"\
|
||||
-e "s/SIZE/$$size M/"\
|
||||
WindowMaker.lsm.in > WindowMaker-$(VERSION).lsm
|
||||
|
||||
#dist-hook:
|
||||
# touch `find -name configure.in -print`
|
||||
# touch `find -name aclocal.m4 -print`
|
||||
# touch `find -name Makefile.am -print`
|
||||
# touch `find -name Makefile.in -print`
|
||||
# touch `find -name configure -print`
|
||||
|
||||
|
||||
145
NEWS
145
NEWS
@@ -2,10 +2,128 @@
|
||||
NEWS for veteran Window Maker users
|
||||
-----------------------------------
|
||||
|
||||
--- 0.91.0
|
||||
|
||||
Alt-Tab Window Switching
|
||||
------------------------
|
||||
|
||||
You can change the appearance of the panel shown during Alt-Tab window switching
|
||||
with the SwitchPanelImages option:
|
||||
|
||||
(selected_icon_tile_image, background_image, width, height)
|
||||
|
||||
selected_icon_tile_image is the image used to highlight the currently selected
|
||||
window icon. It must be 64x64 pixels.
|
||||
|
||||
background_image is the image used in the background of the panel. It must
|
||||
be at least 64x80.
|
||||
|
||||
width and height are the width and size of the central part of the image.
|
||||
When drawing the panel, the image will be split as:
|
||||
|W |
|
||||
+--+--+--+
|
||||
| | | |
|
||||
+--+--+--+ -
|
||||
| | | | H
|
||||
+--+--+--+ -
|
||||
| | | |
|
||||
+--+--+--+
|
||||
|
||||
The 4 corner images will be copied in their original sizes and the rest will
|
||||
be scaled to the final panel size.
|
||||
|
||||
background_image, width and height are optional. If you leave them out,
|
||||
a gray panel will be used. If your machine is not very fast, you may want
|
||||
to use it.
|
||||
|
||||
|
||||
--- 0.90.0
|
||||
|
||||
|
||||
NetWM / EWMH Support
|
||||
--------------------
|
||||
|
||||
Support for the EWMH standard has been added. Applications from GNOME 2.x and
|
||||
KDE 3.x should now interoperate better with Window Maker.
|
||||
|
||||
Support for the obsolete/legacy GNOME 1.x, KDE 1.x and OpenLook(!) hints was
|
||||
wiped out for the sake of sanity.
|
||||
|
||||
|
||||
Antialiased font support
|
||||
------------------------
|
||||
|
||||
With the addition of Xft2 support in the WINGs library, now
|
||||
Window Maker can display antialiased text with TrueType or any scalable fonts.
|
||||
|
||||
You can pick fonts for Window Maker in the Font configuration section of
|
||||
WPrefs.
|
||||
|
||||
Antialiased text is enabled by default, but can be disabled by adding
|
||||
|
||||
AntialiasedText = NO; in ~/GNUstep/Defaults/WMGLOBAL
|
||||
|
||||
This will disable antialiased text for any WINGs based application. If you
|
||||
only want to disable them for a specific application only, like WindowMaker
|
||||
for example, then add the same option in the applications configuration file,
|
||||
in this case ~/GNUstep/Defaults/WindowMaker
|
||||
For WindowMaker, this can also be achieved from the Expert panel in WPrefs.
|
||||
|
||||
Note that bitmapped fonts look much better than TrueType when antialiasing is
|
||||
disabled.
|
||||
|
||||
Global Submenus
|
||||
---------------
|
||||
|
||||
Global menus allow for system wide menus that are added to every users
|
||||
application menus. They are located in /usr/etc/WindowMaker/,
|
||||
/usr/local/etc/WindowMaker or whatever is your sysconf directory
|
||||
for WindowMaker. There are 2 files:
|
||||
|
||||
GlobalMenu.pre, which is added to the beginning of the menu and
|
||||
GlobalMenu.post, which is added to the end of the menu.
|
||||
|
||||
These are to be proplist format menus, for example:
|
||||
|
||||
(("Foobar", EXEC, foobar),
|
||||
("Blabla", EXEC, blabla))
|
||||
|
||||
or, in case you want a submenu:
|
||||
|
||||
(("Submenu",
|
||||
("Foobar", EXEC, foobar),
|
||||
("Blabla", EXEC, blabla)))
|
||||
|
||||
|
||||
UTF-8 Support
|
||||
-------------
|
||||
|
||||
Window Maker now uses UTF-8 internally (and thus can display UTF-8 text
|
||||
in window titles and other places). Menus and po files must now be
|
||||
encoded in UTF-8. If your menus contain non ASCII characters, you can convert
|
||||
them to UTF-8 with the following command:
|
||||
|
||||
iconv -f <current-file-encoding> -t utf-8 <filename> > <filename>.utf8
|
||||
|
||||
For example:
|
||||
|
||||
iconv -f iso-8859-1 -t utf-8 menu > menu.utf
|
||||
mv menu.utf menu
|
||||
|
||||
|
||||
Icon Panel for Alt-Tabbing
|
||||
--------------------------
|
||||
|
||||
A panel with icons for the windows that you can switch to will appear
|
||||
when you press Alt-Tab. You can navigate through the windows with Alt-Tab
|
||||
(Alt-Shift-Tab) or with the left/right keys once the panel is shown.
|
||||
|
||||
|
||||
|
||||
--- 0.80.0
|
||||
|
||||
Shading/Unshading windows using mouse wheel on their titlebar
|
||||
---------------------------------------------------------
|
||||
-------------------------------------------------------------
|
||||
|
||||
In addition to the known methods of shading/unshading a window, one can now
|
||||
do this by using the mouse wheel on the window's titlebar. The mouse events
|
||||
@@ -92,10 +210,27 @@ that this happened.
|
||||
New dock option
|
||||
---------------
|
||||
|
||||
Copy/paste launch in dock. For example, put
|
||||
netscape %s in the Docked icon for Netscape,
|
||||
select an url somewhere and then middle-click the icon.
|
||||
The command will be launched with the "pasted" string.
|
||||
Copy/paste launch in dock.
|
||||
==========================
|
||||
|
||||
For example, put netscape %s in the Docked icon for Netscape, select an url
|
||||
somewhere and then middle-click the icon. The command will be launched with
|
||||
the "pasted" string.
|
||||
|
||||
|
||||
Xinerama Support
|
||||
================
|
||||
|
||||
Supported Xinerama features:
|
||||
|
||||
- Normal maximization of windows will maximize to only one of the screens,
|
||||
the one where the cursor pointer is.
|
||||
|
||||
- Full Maximize command in window menu
|
||||
|
||||
- Place dialogs in the middle of the head where the pointer is
|
||||
|
||||
- Try to place windows inside one head in non-manual placement modes
|
||||
|
||||
|
||||
Less dependancies
|
||||
|
||||
31
README
31
README
@@ -13,7 +13,6 @@
|
||||
|
||||
Dan Pascu
|
||||
|
||||
]d
|
||||
|
||||
|
||||
Web/FTP Master
|
||||
@@ -52,7 +51,8 @@ Window Maker was designed keeping integration with GNUstep in mind and is the
|
||||
(www.gnu.org) Read more about GNUstep further on this file.
|
||||
|
||||
Hints (information given by applications to integrate well with the window
|
||||
manager) for Motif(tm), OPEN LOOK(tm), KDE and GNOME are also supported.
|
||||
manager) for Motif(tm) and NETWM are also supported (NETWM is used by KDE
|
||||
and GNOME, so they are automatically supported as a result).
|
||||
So you can replace any of the window managers for these environments
|
||||
with Window Maker while keeping most, if not all, of the native window manager
|
||||
functionality.
|
||||
@@ -221,31 +221,6 @@ Note that you must compile Window Maker with the --enable-sound configure
|
||||
flag and set the DisableSound option to NO.
|
||||
|
||||
|
||||
OpenL**k support
|
||||
================
|
||||
|
||||
I guess many users, mainly from the academic world, have to use
|
||||
applications written using the OpenL**k toolkits, so having support
|
||||
for these apps must be of some use.
|
||||
|
||||
To enable, use --enable-openlook when doing the configure. Note that
|
||||
not everything is implemented.
|
||||
|
||||
Implemented stuff include decoration hints and the push-pin. Not implemented
|
||||
stuff include _SUN_WINDOW_STATE (the compose led state stuff), drag and drop
|
||||
interest stuff, header (not sure what's it) and footer strings.
|
||||
|
||||
Please give me feedback if something doesn't work. If the feature is
|
||||
already implemented, but is not working because of a bug, I'll try to
|
||||
have that fixed. If it's a non-implemented feature and you mention that
|
||||
it's important (ie: not just cosmetical), I'll consider implementing it.
|
||||
|
||||
The "out" state of the pushpin is emulated as a pushed-in close button.
|
||||
Just click on the button to make it pushed-out, which corresponds
|
||||
to the pinned-in state of the pushpin. If you push again in the pushed-out
|
||||
close button, it will act as a normal close button: it will close the window.
|
||||
|
||||
|
||||
Performance Tuning
|
||||
==================
|
||||
|
||||
@@ -271,7 +246,7 @@ bellow:
|
||||
- to reduce memory usage, disable the icon cache, by setting the RIMAGE_CACHE
|
||||
environment variable to 0. If you want to increase performance at the cost
|
||||
of memory usage, set it's value to a value like the number of different
|
||||
icons you use.
|
||||
icons you use. Also, disable anti-aliased text support in ~/GNUstep/Defaults/WMGLOBAL.
|
||||
|
||||
|
||||
Keyboard Mouse Control
|
||||
|
||||
53
README.GNOME
53
README.GNOME
@@ -1,53 +0,0 @@
|
||||
|
||||
Information on Using Window Maker with GNOME
|
||||
--------------------------------------------
|
||||
|
||||
|
||||
Status of GNOME support
|
||||
-----------------------
|
||||
|
||||
|
||||
GNOME window manager protocols seem to be a work in progress.
|
||||
Things still change fairly frequently, so, the stuff implemented
|
||||
may not reflect the latest protocol. If something doesn't work,
|
||||
that's probably because the protocols have changed again and I still
|
||||
didn't have time to reimplement everything or noticed that it
|
||||
changed. If that happens, please tell me exactly what doesn't work.
|
||||
|
||||
Other than that, the so called "GNOME Window Manager Compliance - How to
|
||||
write a GNOME compliant Window Manager" document, says this:
|
||||
|
||||
"There are currently a set of other hints available that are, at the
|
||||
current time, not essential and therefore not documented here. It is,
|
||||
however envisaged that they will be finalized and added to this
|
||||
document, but for now are not needed."
|
||||
|
||||
Since they are non-essential and undocumented they are not yet implemented.
|
||||
|
||||
|
||||
Implemented stuff:
|
||||
|
||||
- GNOME window manager hints
|
||||
- Motif window manager hints
|
||||
|
||||
On the works:
|
||||
|
||||
- R6 style session management
|
||||
|
||||
|
||||
Compilation/Installation
|
||||
------------------------
|
||||
|
||||
To compile Window Maker with GNOME support, just configure it as:
|
||||
./configure --enable-gnome
|
||||
|
||||
before compiling.
|
||||
|
||||
Also, do not disable mwm hints support (they are enabled by default).
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
In WPrefs, go to the last section and toggle the "Disable miniwindows" option.
|
||||
|
||||
125
README.KDE
125
README.KDE
@@ -1,125 +0,0 @@
|
||||
|
||||
|
||||
Information on Using Window Maker with KDE
|
||||
------------------------------------------
|
||||
|
||||
|
||||
Window Maker supports almost all KDE/KWM specific client
|
||||
communication protocols, so you can simply replace kwm with
|
||||
Window Maker, if you think these advantages are worthy:
|
||||
|
||||
Window Maker KWM
|
||||
=============================================================================
|
||||
Looks NEXTSTEP(tm)/NEXTSTEP(tm) Original, but reminds
|
||||
enhanced Windows(tm)
|
||||
|
||||
Decoration solid, gradient, multi-color solid, vertical and
|
||||
Textures gradient, pixmaps, textured horizontal gradient,
|
||||
gradient - all gradients are pixmap
|
||||
supported in horizontal,
|
||||
vertical and diagonal
|
||||
directions
|
||||
|
||||
Configurable No Yes, but not totally
|
||||
Titlebar Buttons
|
||||
|
||||
Mini CLI Yes, but limited Yes
|
||||
|
||||
Window Specific Yes In KDE 1.1, yes.
|
||||
Configuration In KDE 1.0, no.
|
||||
|
||||
Quick Keyboard Yes In KDE 1.1, yes
|
||||
Navigation In KDE 1.0, no.
|
||||
|
||||
Pager KDE pagers will work as Yes
|
||||
well as GNOME pagers
|
||||
|
||||
Session Not yet supported, but Yes, old (pre-X11R6) style
|
||||
Management X11R6 style SM is being worked.
|
||||
|
||||
Dock kpanel, GNOME panel and Dock kpanel
|
||||
|
||||
Built-in Yes No
|
||||
krootbgwm
|
||||
|
||||
GNOME support Yes No
|
||||
|
||||
Memory Usage(1) 1.85Mb In KDE 1.0, 3.13Mb
|
||||
In KDE 1.1, probably more
|
||||
|
||||
|
||||
(1) Memory usage was tested by running wmaker and kwm at the same machine
|
||||
with the same windows, on the same screen and similar window texture
|
||||
configurations (at different times, of course). I looked in the output of
|
||||
ps -m, in the SIZE field, right after starting the window managers.
|
||||
|
||||
|
||||
|
||||
Enabling KDE Support
|
||||
--------------------
|
||||
|
||||
To enable KDE support in Window Maker, you must compile it after
|
||||
configuring it as follows:
|
||||
./configure --enable-kde
|
||||
|
||||
Then, just replace kwm with wmaker in your startkde script.
|
||||
If you are going to use Window Makers sound server, comment out
|
||||
kwmsound in startkde. Also if wmaker sets your root window
|
||||
background, comment out kbgndwm, kde's wallpaper setter.
|
||||
|
||||
Make sure to disable workspace background setting in KDE. If you
|
||||
wont be using Window Maker themes anyway, you can set
|
||||
WorkspaceBack = (none);
|
||||
|
||||
in ~/GNUstep/Defaults/WindowMaker
|
||||
|
||||
|
||||
Enhancing Integration
|
||||
---------------------
|
||||
|
||||
Window Maker adds some extensions to KDE's messaging stuff, so you can run
|
||||
Window Maker specific commands from places like kpanel, krootwm or even
|
||||
kwmcom. Recently KDE developers have kindly added support for these extensions
|
||||
in the more recent KDE versions from CVS. The added stuff are the following
|
||||
kwm like commands:
|
||||
|
||||
wm:wmaker - select Window Maker support mode
|
||||
wmaker:info - show info panel
|
||||
wmaker:legal - show legal panel
|
||||
wmaker:arrangeIcons - arrange icons
|
||||
wmaker:showAll - show all windows
|
||||
wmaker:hideOthers - hide others
|
||||
wmaker:restart - restart wmaker
|
||||
wmaker:exit - exit wmaker
|
||||
|
||||
You can test them with kwmcom, like:
|
||||
kwmcom wmaker:info
|
||||
|
||||
|
||||
Problems
|
||||
--------
|
||||
|
||||
* kpanel will not be kept always on top. That's because kpanel is an
|
||||
OverrideRedirect window, so Window Maker can't do anything about that.
|
||||
|
||||
Before requesting for a hack to work around that in Window Maker, please
|
||||
request the kpanel author to fix it.
|
||||
|
||||
* because the KDE protocol for letting the window manager know the usable
|
||||
window region is broken, you might find some problems with the window
|
||||
positioning/maximization code and kpanel's position.
|
||||
|
||||
* It seems kpanel (and maybe KDE in general) doesn't like dynamically
|
||||
changing the number of workspaces. So, don't create or destroy workspaces
|
||||
while running on KDE, unless you really need.
|
||||
|
||||
* If kpanel, kwmpager or kpager becomes confused about the number of
|
||||
windows present, restart them.
|
||||
|
||||
* Wmaker opens windows by default under/over the panel, when the panel is
|
||||
at top or left of screen. Use the GUI configuration tool WPrefs to change
|
||||
this.
|
||||
|
||||
* Some commands, such as cascade windows and rearrange windows are not
|
||||
yet implemented.
|
||||
|
||||
345
README.es
Normal file
345
README.es
Normal file
@@ -0,0 +1,345 @@
|
||||
|
||||
|
||||
|
||||
GNU Window Maker
|
||||
X11 Window Manager
|
||||
|
||||
<http://windowmaker.org>
|
||||
<ftp://ftp.windowmaker.org>
|
||||
|
||||
por
|
||||
|
||||
Alfredo K. Kojima
|
||||
|
||||
Dan Pascu
|
||||
|
||||
]d
|
||||
|
||||
|
||||
Web/FTP Master
|
||||
|
||||
Phillip Smith
|
||||
|
||||
|
||||
|
||||
¡Felicitaciones! Ha adquirido un dispositivo
|
||||
excelentísimo que le proporcionará miles de años de uso sin
|
||||
problemas, si no fuera porque indudablemente lo destruirá a
|
||||
través de alguna maniobra estúpida típica de consumidor. Por
|
||||
eso le pedimos por EL AMOR DE DIOS LEA ESTE MANUAL DEL
|
||||
PROPIETARIO CUIDADOSAMENTE ANTES DE DESEMPAQUETAR EL
|
||||
DISPOSITIVO. ¿YA LO DESEMPAQUETÓ, NO? LO DESEMPAQUETÓ Y LO
|
||||
ENCHUFÓ Y LO ENCENDIÓ Y TOQUETEÓ LAS PERILLAS, Y AHORA SU
|
||||
CHICO, EL MISMO CHICO QUE UNA VEZ METIÓ UNA SALCHICHA EN SU
|
||||
VIDEOCASETERA Y ACCIONÓ "AVANCE RÁPIDO", ESTE CHICO
|
||||
TAMBIÉN ESTÁ TUOQUETEANDO LAS PERILLAS, ¿CIERTO? Y RECIÉN
|
||||
AHORA ESTÁ COMENZANDO A LEER LAS INSTRUCCIONES, ¿¿¿CIERTO???
|
||||
NOSOTROS PODRÍAMOS SIMPLEMENTE ROMPER ESTOS DISPOSITIVOS EN LA
|
||||
FÁBRICA ANTES DE DESPACHARLOS, ¿SABE?
|
||||
-- Dave Barry, "¡Lea Esto Primero!"
|
||||
|
||||
|
||||
Descripción
|
||||
===========
|
||||
|
||||
Window Maker es el gestor de ventanas GNU para el Sistema de Ventanas X. Fue
|
||||
diseñado para emular la apariencia y funcionalidad de parte del GUI de NEXTSTEP(mr).
|
||||
Procura ser relativamente rápido y pequeño, rico en características, fácil de configurar
|
||||
y usar, con una simple y elegante apariencia sacada desde NEXTSTEP(mr).
|
||||
|
||||
Window Maker fue diseñado teniendo en mente la integración con GNUstep y por eso
|
||||
es el gestor de ventanas "oficial". Es también parte del proyecto GNU (www.gnu.org)
|
||||
. Lea mas sobre GNUstep más adelante en este archivo.
|
||||
|
||||
|
||||
Pistas (información dada por las aplicaciones para integrarse bien con el gestor de
|
||||
ventanas) para Motif(tm), OPEN LOOK(tm), KDE y GNOME también son soportados.
|
||||
Entonces puede reemplazar cualquiera de los gestores de ventana para estos entornos
|
||||
con Window Maker manteniendo la mayoría, si no todo, de la funcionalidad del
|
||||
gestor de ventanas nativo.
|
||||
|
||||
Window Maker antes se llamaba WindowMaker.
|
||||
|
||||
Window Maker no tiene relación con Windowmaker, el software para
|
||||
hacer ventanas y puertas.
|
||||
|
||||
|
||||
Documentación
|
||||
=============
|
||||
|
||||
Lea antes de preguntar.
|
||||
|
||||
* Los archivos README distribuidos por todas partes del árbol de fuentes
|
||||
contienen información relacionada al contenido en los directorios.
|
||||
|
||||
* INSTALL tiene instrucciones de instalación y algunos consejos cuando tenga
|
||||
algún problema. Significa que debería leerlo antes de la instalación.
|
||||
No fue escrito solo para ocupar espacio en el paquete...
|
||||
|
||||
* FAQ: Preguntas Frecuentes. LEALO!!! FAQ.I18N es para
|
||||
preguntas relacionadas con la internacionalización.
|
||||
|
||||
* NEWS: lista los cambios visibles por el usuario desde la versión anterior.
|
||||
Léalo si está actualizando.
|
||||
|
||||
* MIRRORS: algunos lugares alternativos donde puede obtener Window Maker,
|
||||
incluyendo paquetes de Window Maker específicos para ciertas plataformas.
|
||||
|
||||
* BUGFORM: uselo para enviar reportes de errores. Por favor uselo.
|
||||
|
||||
* ChangeLog: ¿que cambió desde la versión anterior?
|
||||
|
||||
* BUGS: lista de errores conocidos.
|
||||
|
||||
*** Tutorial
|
||||
|
||||
Hay un tutorial mantenido por Georges Tarbouriech en:
|
||||
|
||||
http://www.linuxfocus.org/~georges.t/
|
||||
|
||||
*** Guía del Usuario
|
||||
|
||||
La Guía del Usuario de Window Maker puede ser bajada desde el ftp oficial
|
||||
o por sitios web.
|
||||
Puede también ser vista en formato HTML en:
|
||||
|
||||
http://people.delphi.com/crc3419/WMUserGuide/index.htm
|
||||
|
||||
La Guía del Usuario explica como usar Window Maker, los archivos de configuración
|
||||
y opciones.
|
||||
|
||||
*** man pages
|
||||
|
||||
Tipee "man wmaker" en el prompt del shell para obtener ayuda general sobre Window Maker.
|
||||
|
||||
|
||||
Directorios y Archivos en el Árbol de Fuentes
|
||||
=============================================
|
||||
|
||||
* Install es un script para configurar y compilar Window Maker de una forma
|
||||
fácil (no es que la forma normal sea difícil, pero...).
|
||||
|
||||
* AUTORES: los créditos
|
||||
|
||||
* TODO: planes para el futuro.
|
||||
|
||||
* contrib/ tiene algunos parches aportados que no están soportados por Window Maker
|
||||
porque entran en conflicto con la filosofía de diseño de los desarrolladores o por
|
||||
alguna otra razón.
|
||||
|
||||
* util/ tiene varios programas utilitarios.
|
||||
|
||||
* WPrefs.app/ es el programa de configuración.
|
||||
|
||||
* src/wconfig.h posee opciones de compilación que puede cambiar para
|
||||
seleccionar algunas opciones/caracteristicas y otras cosas.
|
||||
|
||||
* WINGs/ biblioteca widget para imitación de NEXTSTEP.
|
||||
|
||||
* wrlib/ biblioteca de procesamiento de imagen.
|
||||
|
||||
* po/ posee catálogos de mensajes que son las versiones traducidas de los mensajes
|
||||
mostrados por Window Maker.
|
||||
|
||||
* docklib-x.x.tar.gz es una biblioteca para escribir dockapps.
|
||||
|
||||
SOCORRO!!!
|
||||
==========
|
||||
|
||||
Hay una lista de correo para discutir sobre Window Maker en
|
||||
wm-user@windowmaker.org. Para suscribirse, envie un mensaje que contenga:
|
||||
|
||||
subscribe
|
||||
en el tema del mensaje a wm-user-request@windowmaker.org
|
||||
|
||||
Si tiene algun problema, pregunte aquí (después de leer los docs, por supuesto). Es
|
||||
más probable que las personas de la lista sepan contestar sus preguntas
|
||||
que nosotros. Para reportes de errores use el BUGFORM.
|
||||
|
||||
Si tiene un problema con una versión precompilada de Window Maker
|
||||
(rpm, deb etc), primero pregunte a la persona que hizo el paquete.
|
||||
|
||||
NOTA IMPORTANTE: cuando pida ayuda (en la lista de correo o a los desarrolladores,
|
||||
directamente) *siempre* envie información sobre el sistema que está usando. Puede
|
||||
usar la sección de información del sistema al final del BUGFORM como una guía.
|
||||
Otra cosa: por favor no envie correo HTML.
|
||||
|
||||
También hay un canal de IRC #windowmaker en openprojects. Únase aquí,
|
||||
conecte su cliente de irc a irc.openprojects.net, irc.linux.com o algún otro
|
||||
servidor de esa red.
|
||||
|
||||
GNUstep
|
||||
=======
|
||||
|
||||
GNUStep es un completo sistema de desarrollo orientado a objetos, basado en la
|
||||
especificación OpenStep liberada por NeXT(tm) (ahora Apple(tm) y Sun(tm)). Ello
|
||||
proveerá todo lo que se necesita para producir aplicaciones multiplataforma,
|
||||
orientadas a objetos, gráficas (y no gráficas); suministrando dentro de otras cosas,
|
||||
bibliotecas base del sistema, una estructura de alto nivel para aplicaciones GUI que
|
||||
usan un modelo de imagenes de tipo Display PostScript(tm) (DGS), objetos para acceso
|
||||
a bases de datos relacionales, objetos distribuidos y un entorno de desarrollo gráfico,
|
||||
con herramientas como un modelador de interfaces, un sistema para administración del
|
||||
proyecto (central de proyecto) y otras herramientas.
|
||||
|
||||
El sistema de desarrollo de GNUStep será usado para crear un entorno de usuario,
|
||||
con todo lo necesario para una completa interface gráfica de usuario, tal como
|
||||
un visualizador de archivos, editores de texto y otras aplicaciones. Note que el
|
||||
entorno de usuario (o "entorno de escritorio") es solo un pequeña parte de todo
|
||||
el proyecto GNUStep y por lo tanto no "compite" con otros proyectos como KDE o GNOME,
|
||||
simplemente porque son cosas completamente diferentes.
|
||||
|
||||
Para más información sobre el proyecto GNUStep, visite: http://www.gnustep.org y
|
||||
http://gnustep.current.nu
|
||||
|
||||
|
||||
Ejecutando multiples instancias de Window Maker
|
||||
===============================================
|
||||
|
||||
No es una buena idea eejcutar más de una instancia de Window Maker desde
|
||||
el mismo usuario (ya que wmaker usará los mismos archivos de configuración)
|
||||
al mismo tiempo. Podría obtener un comportamiento inesperado cuando Window
|
||||
Maker actualiza sus archivos de configuración.
|
||||
|
||||
Si de verdad desea hacer esto, intente ejecutar Window Maker con la opción
|
||||
de linea de comando --static ya que así no actualizará o cambiará ninguno de los
|
||||
archivos de configuración.
|
||||
|
||||
Soporte para Sonido
|
||||
===================
|
||||
|
||||
El sonido es soportado por los sistemas Linux y FreeBSD con el uso de
|
||||
un módulo distribuido separadamente llamado WSoundServer. Hay también
|
||||
una herramienta de configuracion gráfica para definir sus sonidos llamada
|
||||
WSoundPref.
|
||||
Puede bajar esto en:
|
||||
http://shadowmere.student.utwente.nl/
|
||||
|
||||
Note que debe compilar Window Maker con el parámetro --enable-sound
|
||||
y definir la opción DisableSound a NO.
|
||||
|
||||
|
||||
Ajuste de Rendimiento.
|
||||
=====================
|
||||
Si quiere disminuir el uso de memoria por parte de Window Maker y mejorar el
|
||||
rendimiento, manteniendo una linda apariencia y buena funcionalidad, siga los
|
||||
items de abajo:
|
||||
|
||||
- use texturas sólidas para todo, principalmente barras de título y menúes.
|
||||
Si quiere un escritorio de aspecto lindo, use el estilo Tradicional.
|
||||
- Apague NewStyle y Superfluous
|
||||
- No una muchos atajos al menú y mantenga solo los items esenciales en el menú.
|
||||
- Active DisableClip
|
||||
- edite wconfig.h y desactive el NUMLOCK_HACK y lo mismo con las características
|
||||
que no use (tenga en mente que algunos de los #defines podrían no funcionar,
|
||||
ya que ellos no están completamente soportados). Asegúrese de mantener siempre
|
||||
Numlock y ScrollLock apagados.
|
||||
- Active DisableAnimations. Puede también #undefine ANIMATIONS en wconfig.h
|
||||
- quite las entradas por defecto IconPath y PixmapPath para contener solo las
|
||||
rutas que en verdad tiene en su sistema.
|
||||
- no use imágenes grandes en el fondo raíz.
|
||||
- quite el soporte para los formatos de imagen que no use.
|
||||
- para reducir el uso de la memoria, desactive el caché de ícono, definiendo
|
||||
la variable de entorno RIMAGE_CACHE a 0. Si quiere aumentar el rendimiento
|
||||
a expensas del uso de la memoria, defina este valor a un valor igual al
|
||||
número de íconos distintos que use.
|
||||
|
||||
Control del Mouse por Teclado
|
||||
=============================
|
||||
|
||||
Muchas personas preguntan sobre agregar control por teclado al mouse, como
|
||||
en fvwm, pero Window Maker no tendrá tal característica. La extensión XKB
|
||||
soporta simulación de mouse desde el teclado, de una manera mucho más poderosa
|
||||
que cualquier otra simulación hecha por un administrador de ventanas.
|
||||
|
||||
Para activarlo, presione la combinación de teclas Control+Shift+NumLock o
|
||||
Shift+NumLock. Debiera escuchar el beep del parlante. Para desactivarlo,
|
||||
haga lo mismo.
|
||||
|
||||
Para controlar el mouse el teclado numérico se usa así:
|
||||
- 4 (flecha izquierda), 7 (Home), 8 (flecha arriba), 9 (PgUP), 6 (flecha derecha),
|
||||
3 (PgDn), 2 (flecha abajo) y 1 (Fin) mueve el mouse a la correspondiente
|
||||
dirección;
|
||||
- sosteniendo una de las teclas de arriba y luego sosteniendo la tecla 5 moverá
|
||||
el puntero más rápido;
|
||||
- / seleccionará el primer botón del mouse (botón izquierdo);
|
||||
- * seleccionará el segundo botón del mouse (botón del medio);
|
||||
- - seleccionará el tercer botón del mouse (botón derecho);
|
||||
- 5 hará un click con el botón actualmente seleccionado del mouse;
|
||||
- + hará un doble click con el botón actualmente seleccionado;
|
||||
- 0 (Ins) cliqueará y mantendrá el botón seleccionado actualmente;
|
||||
- . (Del) liberará el botón seleccionado actualmente que fue anteriormente
|
||||
cliqueado con la tecla 0 (Ins).
|
||||
|
||||
Los valores anteriores de las teclas funcionarán en un servidor X XFree86 3.2
|
||||
(X11R6.1) pero su alcance puede variar.
|
||||
|
||||
Como hacer un gdb backtrace
|
||||
===========================
|
||||
|
||||
Backtraces pueden ayudarnos a arreglar errores que hicieron que Window Maker falle.
|
||||
Si encuentra un bug que hace fallar a Window Maker, por favor envie un backtrace con su
|
||||
reporte de error.
|
||||
|
||||
Para hacer un backtrace útil, necesita un archivo core con información de depuración
|
||||
producida por Window Maker cuando falló. Debería haber sido instalado sin stripping también.
|
||||
|
||||
Para compilar wmaker con información de depuración:
|
||||
|
||||
./configure
|
||||
make CFLAGS=-g
|
||||
|
||||
Si obtiene el cuadro de diálogo que le dice que wmaker falló y le
|
||||
pregunta que hacer, respóndale "Abortar y dejar un archivo core"
|
||||
|
||||
script
|
||||
cd src
|
||||
gdb .libs/wmaker path_to_the_core_file
|
||||
|
||||
Luego, en el prompt gdb escriba "bt". Salga de gdb escribiendo "quit"
|
||||
y luego, en el prompt del shell, scriba "exit"
|
||||
|
||||
El archivo llamado typescript contendrá el backtrace.
|
||||
|
||||
Derechos de Autor y Descargo de Responsabilidad
|
||||
===============================================
|
||||
|
||||
Window Maker está registrado por Alfredo K. Kojima y está licensiado por la
|
||||
Licensia Pública General GNU. Lea el archivo COPYING para leer la licensia
|
||||
completa.
|
||||
|
||||
Los íconos que son distribuidos con este programa y fueron hechos por Marco
|
||||
van Hylckama Vlieg, están licenciados por la Licencia Pública General GNU.
|
||||
Lea el archivo COPYING para leer la licencia completa.
|
||||
|
||||
Los íconos listados en COPYING.WTFPL y son distribuidos en este programa
|
||||
fueron hechos por Banlu Kemiyatorn (]d), están licenciados por la
|
||||
"do What The Fuck you want to Public License". Lea el archivo COPYING.WTFPL
|
||||
para leer la licencia completa.
|
||||
|
||||
NeXT, OpenStep y NEXTSTEP son marcas registradas de NeXT Computer, Inc.
|
||||
Todas las otras marcas registradas son propiedad de sus respectivos dueños.
|
||||
|
||||
Los autores se reservan el derecho de hacer cambios en el software sin previo
|
||||
aviso.
|
||||
|
||||
Autores
|
||||
=======
|
||||
|
||||
Alfredo K. Kojima <kojima@windowmaker.org>
|
||||
Dan Pascu <dan@windowmaker.org>
|
||||
]d <id@windowmaker.org>
|
||||
|
||||
Por favor no nos haga preguntas antes de leer la documentación (especialmente
|
||||
la FAQ, este archivo y los archivos INSTALL) y sobre cosas "cool" que ve en
|
||||
las capturas de pantalla del escritorio de las personas.
|
||||
|
||||
El archivo AUTHORS contiene una lista de las personas que han contribuido
|
||||
con el proyecto. El nombre de las personas que han ayudado con localization
|
||||
(traducción) se puede encontrar en po/README y Window Maker/README
|
||||
|
||||
Si tiene algún comentario, arreglos y reportes de errores (complete BUGFORMs)
|
||||
y enviémelos a developers@windowmaker.org
|
||||
|
||||
|
||||
|
||||
traducido por Efraín Maximiliano Palermo <max_drake2001@yahoo.com.ar>
|
||||
28
README.pt
28
README.pt
@@ -210,34 +210,6 @@ Observe que voc
|
||||
flag --enable-sound e definindo a opção DisableSound para NO.
|
||||
|
||||
|
||||
Suporte ao OpenL**k
|
||||
===================
|
||||
|
||||
Acredito que muitos usuários, principalmente os do mundo acadêmico,
|
||||
tenham que usar aplicações escritas em toolkits OpenL**k, então o suporte
|
||||
para estes aplicativos deve ser de algum uso.
|
||||
|
||||
Para ativar, use o --enable-openlook quando rodar o configure. Note
|
||||
que nem tudo está implementado.
|
||||
|
||||
As opções implementadas incluem hints de decoração e o push-pin.
|
||||
Coisas não implementadas incluem _SUN_WINDOW_STATE (the compose led
|
||||
state stuff), coisas relacionadas ao "drag and drop", cabeçalho (não
|
||||
tenho certeza do que é) e o string footer.
|
||||
|
||||
Por favor me dêem retorno se algo não funcionar. Se a opção já está
|
||||
implementada, mas não está funcionando por causa de um bug, eu tentarei
|
||||
corrigí-la. Se é uma característica ainda não implementada e você mencionar
|
||||
que é importante (ie: não somente cosmética), eu considerarei a sua
|
||||
implementação.
|
||||
|
||||
O estado "out" do pushpin é emulado como um botão de fechar pressionado.
|
||||
Clique no botão para fazer com que ele fique despressionado, o que
|
||||
corresponde ao estado "pinned-in" do pushpin. Se você pressionar de novo
|
||||
o botão de fechar despressionado, ele vai agir como um botão de fechar
|
||||
normal: vai fechar a janela.
|
||||
|
||||
|
||||
Ajuste da Performance
|
||||
====================
|
||||
|
||||
|
||||
7
TODO
7
TODO
@@ -7,11 +7,16 @@ Do ASAP:
|
||||
- fix RemakeStackList() to account for transient windows
|
||||
- blink border of clients with UrgencyHint set between red and black
|
||||
- finish session stuff
|
||||
- add multiline support for balloons
|
||||
- remove colors_per_channel stuff from wmaker after?
|
||||
+ finish the ability to browse for files/dirs in the WPrefs menu editor
|
||||
- check whether window states are being saved/restored properly via netwm
|
||||
on restart/crash-restart (grep for XXX/TODO)
|
||||
|
||||
Need to do:
|
||||
===========
|
||||
- figure out a better gnustep path for wprefs.app installation
|
||||
- impelment a generic pixmap type, which receives attributes
|
||||
(scaled/maxscaled/centered/tiled, smoothed, size/position, ...)
|
||||
- allow user to select/restore default root menu from wprefs
|
||||
- support for X11R6.4 extension for getting extra visual info in wrlib's
|
||||
automatic best context guessing
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
Makefile Makefile.in
|
||||
get-wings-flags get-wutil-flags
|
||||
.libs
|
||||
.psrc .inslog2 tca.map tca.log
|
||||
*.rpt
|
||||
.libs *.pc
|
||||
.psrc .inslog2 tca.map tca.log pchdir *.rpt
|
||||
|
||||
@@ -1,3 +1,85 @@
|
||||
Changes since wmaker 0.80.1:
|
||||
............................
|
||||
|
||||
- Added WMSetConnectionShutdownOnClose()
|
||||
- Added an extra member to the ConnectionDelegate: canResumeSending
|
||||
see NEWS for details.
|
||||
- WMDrawString() and WMDrawImageString() now take WMColor instead of GC as
|
||||
arguments. WMDrawImageString() receives 2 colors (text & background).
|
||||
This is to allow easy extension for Xft/Xrender and hide X low level details
|
||||
Read NEWS for details since this will break backward compatibility.
|
||||
- Added alpha channel to WMColor. 2 new functions also:
|
||||
WMCreateRGBAColor() and WMSetColorAlpha()
|
||||
- Miscelaneous code cleanups in wtext.c
|
||||
- Added Xft2 support in WINGs (for drawing antialiased fonts with transparency).
|
||||
- New options in WMGLOBAL: AntialiasedText. Check NEWS for details.
|
||||
- Fixed some improper calls to snprintf in wfont.c
|
||||
- Added double buffering when drawing a WMFrame title with an antialiased font
|
||||
to avoid flickering.
|
||||
- Added double buffering when drawing WMList items to avoid flickering.
|
||||
Double buffering for list also works for user drawn lists. Read NEWS for
|
||||
details and incompatibilities introduced by this change.
|
||||
- Added WMGetColorAlpha(WMColor *color)
|
||||
- Better outline when drawing balloons.
|
||||
- Added WMCreateFontWithAttributes()
|
||||
- You can now pass "SystemFont", "BoldSystemFont", "SystemFont-##" or
|
||||
"BoldSystemFont-##", with ## being the font size to any font creating
|
||||
function to create a font with the (bold) system font font specification.
|
||||
- Added WMCopyFontWithChanges(). This is a more generic and powerful function
|
||||
meant to replaces the obsoleted WMEmphasizeFont(), WMNormalizeFont(),
|
||||
WMStrenghtenFont() and the other similar functions. To get the same effect
|
||||
you pass some predefined structs to it: WFANormal, WFABold, WFAEmphasized,
|
||||
etc which are declared in WINGs.h).
|
||||
- Fixed a bug with empty frame titles (Alexey Voinov <voins@voins.program.ru>)
|
||||
- Added WMGetWidgetBackgroundColor()
|
||||
- Code cleanup in wtext.c
|
||||
- Fixed a memory leak in wfontpanel.c
|
||||
- Fixed WMGetTextDefaultColor() not to retain the returned color. It returns
|
||||
only a reference to the internal color, which you shouldn't release
|
||||
- Added wstrndup()
|
||||
- Added WMGetFontName()
|
||||
- Added fontpanel callback
|
||||
- Added WMSetTableViewHasHorizontalScroller()
|
||||
- Fixed bug that could cause SIGSEGV by accessing beyond the end of text in
|
||||
a WINGs textfield widget.
|
||||
- Fixed small memory leak in the font panel code.
|
||||
- Fixed call to qsort in WMSortArray.
|
||||
- Fixed a memleak in the file panel.
|
||||
- Double/triple-click selection in text widgets
|
||||
(Vitaly Ovtchinnikov <ov@rbcmail.ru>)
|
||||
- Fixed bug in tableview (clicked row callback got incorrect row)
|
||||
(Carlos Torres <vlaadbrain@operamail.com>)
|
||||
- Fixed bug in resizing a scrollview
|
||||
- Fixed bug with wrong text wrapping (Alexey Voinov <voins@voins.program.ru>)
|
||||
- Added wmkrect()
|
||||
- Added xdnd v3 support (Sylvain Reynal <sreynal@nerim.net>)
|
||||
- Fixed and enhanced text wrapping.
|
||||
|
||||
|
||||
Changes since wmaker 0.80.0:
|
||||
............................
|
||||
|
||||
- fixed a bug in wfindfile() (rewrote wfindfile() with better logic).
|
||||
- separated the font caches for normal fonts and fontsets in WINGs (they can
|
||||
have the same names and collide in the cache giving unwanted results)
|
||||
- fixed labels not to display '\n' as a character if multiple '\n' are passed
|
||||
but just skip to the next line.
|
||||
- better warning when importing non-digit characters in PropList Data.
|
||||
- rewrote WMBox to use a WMArray for subviews. with this change fixed a bug
|
||||
about arranging subviews after removing one and a memleak occuring in the
|
||||
same case.
|
||||
- Fixed WMGetViewScreenPosition() to consider the window decorations.
|
||||
- Added ability to enable/disable individual WMTableViewItems.
|
||||
- Fixed textfields regarding interpretation of special keys with modifiers.
|
||||
- Fixed some functions that accept a boolean flag as a paramater, to set only
|
||||
1 or 0 for the flag value, not the flag passed by the user.
|
||||
- Added 2 functions to retrieve the default system fonts:
|
||||
WMDefaultSystemFont(WMScreen *scr) and WMDefaultBoldSystemFont(WMScreen *scr)
|
||||
- Added WMSetButtonImageDimsWhenDisabled() and WMGetButtonEnabled()
|
||||
- Cleaned-up the header files of functions/vars declared but not implemented
|
||||
- Added WMGetTextFieldDelegate()
|
||||
|
||||
|
||||
Changes since wmaker 0.70.0:
|
||||
............................
|
||||
|
||||
@@ -180,7 +262,8 @@ changes since wmaker 0.62.1:
|
||||
as a result the shaded windows didn't go away when closed. The non-shaded
|
||||
windows were unmapped on close but not destroyed either so they only
|
||||
apparently went away, but continued to use memory).
|
||||
|
||||
- Fixed a bug in the hashtable code which free'd the whole item instead of
|
||||
just the item key in WMResetHashTable() (possible source of SIGSEGVs)
|
||||
|
||||
|
||||
changes since wmaker 0.62.0:
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
Makefile Makefile.in
|
||||
.psrc .inslog2 tca.map tca.log
|
||||
*.rpt
|
||||
.psrc .inslog2 tca.map tca.log pchdir *.rpt
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Makefile Makefile.in
|
||||
connect server fontl puzzle UserTime.plist
|
||||
colorpick
|
||||
.libs
|
||||
.psrc .inslog2 tca.map tca.log
|
||||
*.rpt
|
||||
.psrc .inslog2 tca.map tca.log pchdir *.rpt
|
||||
|
||||
@@ -3,12 +3,13 @@
|
||||
AUTOMAKE_OPTIONS = no-dependencies
|
||||
|
||||
|
||||
noinst_PROGRAMS = connect server fontl puzzle
|
||||
noinst_PROGRAMS = connect server fontl puzzle colorpick
|
||||
|
||||
|
||||
LDADD= $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la \
|
||||
@INTLIBS@
|
||||
@XFTLIBS@ @INTLIBS@
|
||||
|
||||
colorpick_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a
|
||||
|
||||
fontl_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a
|
||||
|
||||
|
||||
42
WINGs/Examples/colorpick.c
Normal file
42
WINGs/Examples/colorpick.c
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <WINGs/WINGs.h>
|
||||
|
||||
|
||||
|
||||
void showSelectedColor(void *self, void *cdata)
|
||||
{
|
||||
WMColorPanel *panel= (WMColorPanel*)self;
|
||||
|
||||
printf("Selected Color: %s\n", WMGetColorRGBDescription(WMGetColorPanelColor(panel)));
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
Display *dpy;
|
||||
WMScreen *scr;
|
||||
|
||||
WMInitializeApplication("wmcolorpick", &argc, argv);
|
||||
|
||||
dpy = XOpenDisplay("");
|
||||
if (!dpy) {
|
||||
printf("could not open display\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
scr = WMCreateScreen(dpy, DefaultScreen(dpy));
|
||||
|
||||
{
|
||||
WMColorPanel *panel= WMGetColorPanel(scr);
|
||||
|
||||
WMSetColorPanelAction(panel, showSelectedColor, NULL);
|
||||
|
||||
WMShowColorPanel(panel);
|
||||
}
|
||||
|
||||
WMScreenMainLoop(scr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,12 +1,13 @@
|
||||
/*
|
||||
* WINGs connect.c: example how to create a network client using WMConnection
|
||||
*
|
||||
* Copyright (c) 1999-2001 Dan Pascu
|
||||
*
|
||||
*
|
||||
* Copyright (c) 1999-2003 Dan Pascu
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -28,6 +29,7 @@ static void didInitialize(ConnectionDelegate *self, WMConnection *cPtr);
|
||||
|
||||
static ConnectionDelegate socketDelegate = {
|
||||
NULL, /* data */
|
||||
NULL, /* canResumeSending */
|
||||
NULL, /* didCatchException */
|
||||
connectionDidDie, /* didDie */
|
||||
didInitialize, /* didInitialize */
|
||||
@@ -38,7 +40,7 @@ static ConnectionDelegate socketDelegate = {
|
||||
|
||||
|
||||
void
|
||||
wAbort(Bool foo) /*FOLD00*/
|
||||
wAbort(Bool foo)
|
||||
{
|
||||
exit(1);
|
||||
}
|
||||
@@ -89,7 +91,7 @@ inputHandler(int fd, int mask, void *clientData)
|
||||
|
||||
|
||||
static void
|
||||
didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr) /*FOLD00*/
|
||||
didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr)
|
||||
{
|
||||
char *buffer;
|
||||
|
||||
@@ -106,7 +108,7 @@ didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
connectionDidDie(ConnectionDelegate *self, WMConnection *cPtr) /*FOLD00*/
|
||||
connectionDidDie(ConnectionDelegate *self, WMConnection *cPtr)
|
||||
{
|
||||
WMCloseConnection(cPtr);
|
||||
|
||||
@@ -138,7 +140,7 @@ didInitialize(ConnectionDelegate *self, WMConnection *cPtr)
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char **argv) /*FOLD00*/
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
char *ProgName, *host, *port;
|
||||
int i;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* WINGs demo: font lister
|
||||
*
|
||||
* Copyright (c) 1998 Alfredo K. Kojima
|
||||
*
|
||||
*
|
||||
* Copyright (c) 1998-2003 Alfredo K. Kojima
|
||||
*
|
||||
* 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
|
||||
@@ -15,7 +15,7 @@
|
||||
*
|
||||
* 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,
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
|
||||
@@ -64,10 +64,10 @@ main(int argc, char **argv)
|
||||
|
||||
dpy = XOpenDisplay("");
|
||||
if (!dpy) {
|
||||
wfatal("cant open display");
|
||||
exit(0);
|
||||
wfatal("cant open display");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
scr = WMCreateSimpleApplicationScreen(dpy);
|
||||
|
||||
win = WMCreateWindow(scr, "main");
|
||||
@@ -80,25 +80,25 @@ main(int argc, char **argv)
|
||||
|
||||
c = 0;
|
||||
for (y=0; y<8; y++) {
|
||||
for (x=0; x<32; x++, c++) {
|
||||
lab = WMCreateCustomButton(win, WBBStateLightMask);
|
||||
WMResizeWidget(lab, 20, 20);
|
||||
WMMoveWidget(lab, 10+x*20, 30+y*20);
|
||||
sprintf(buf, "%c", c);
|
||||
WMSetButtonText(lab, buf);
|
||||
WMSetButtonAction(lab, show, pos);
|
||||
WMHangData(lab, (void*)c);
|
||||
if (c>0) {
|
||||
WMGroupButtons(l0, lab);
|
||||
} else {
|
||||
l0 = lab;
|
||||
}
|
||||
}
|
||||
for (x=0; x<32; x++, c++) {
|
||||
lab = WMCreateCustomButton(win, WBBStateLightMask);
|
||||
WMResizeWidget(lab, 20, 20);
|
||||
WMMoveWidget(lab, 10+x*20, 30+y*20);
|
||||
sprintf(buf, "%c", c);
|
||||
WMSetButtonText(lab, buf);
|
||||
WMSetButtonAction(lab, show, pos);
|
||||
WMHangData(lab, (void*)c);
|
||||
if (c>0) {
|
||||
WMGroupButtons(l0, lab);
|
||||
} else {
|
||||
l0 = lab;
|
||||
}
|
||||
}
|
||||
}
|
||||
WMRealizeWidget(win);
|
||||
WMMapSubwidgets(win);
|
||||
WMMapWidget(win);
|
||||
WMScreenMainLoop(scr);
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,59 +21,62 @@ int MoveCount;
|
||||
int WinSize = 120;
|
||||
|
||||
|
||||
Bool CheckWin(void)
|
||||
Bool
|
||||
CheckWin(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
||||
for (i = 0; i < Size*Size-1; i++) {
|
||||
if (Map[i] != i)
|
||||
return False;
|
||||
if (Map[i] != i)
|
||||
return False;
|
||||
}
|
||||
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
||||
void MoveButton(int button, int x, int y)
|
||||
void
|
||||
MoveButton(int button, int x, int y)
|
||||
{
|
||||
WMMoveWidget(Button[button], x*(WinSize/Size), y*(WinSize/Size));
|
||||
}
|
||||
|
||||
|
||||
Bool SlideButton(int button)
|
||||
Bool
|
||||
SlideButton(int button)
|
||||
{
|
||||
int x, y, done = 0;
|
||||
|
||||
int x=0, y=0, done = 0;
|
||||
|
||||
/* locate the button */
|
||||
for (y = 0; y < Size; y++) {
|
||||
for (x = 0; x < Size; x++) {
|
||||
if (MAP(x,y) == button) {
|
||||
done = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (done)
|
||||
break;
|
||||
for (x = 0; x < Size; x++) {
|
||||
if (MAP(x,y) == button) {
|
||||
done = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (done)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (x > 0 && MAP(x-1, y) < 0) {
|
||||
MAP(x,y) = -1;
|
||||
MoveButton(button, x-1, y);
|
||||
MAP(x-1,y) = button;
|
||||
MAP(x,y) = -1;
|
||||
MoveButton(button, x-1, y);
|
||||
MAP(x-1,y) = button;
|
||||
} else if (x < Size-1 && MAP(x+1, y) < 0) {
|
||||
MAP(x,y) = -1;
|
||||
MoveButton(button, x+1, y);
|
||||
MAP(x+1,y) = button;
|
||||
MAP(x,y) = -1;
|
||||
MoveButton(button, x+1, y);
|
||||
MAP(x+1,y) = button;
|
||||
} else if (y > 0 && MAP(x, y-1) < 0) {
|
||||
MAP(x,y) = -1;
|
||||
MoveButton(button, x, y-1);
|
||||
MAP(x,y-1) = button;
|
||||
MAP(x,y) = -1;
|
||||
MoveButton(button, x, y-1);
|
||||
MAP(x,y-1) = button;
|
||||
} else if (y < Size-1 && MAP(x, y+1) < 0) {
|
||||
MAP(x,y) = -1;
|
||||
MoveButton(button, x, y+1);
|
||||
MAP(x,y+1) = button;
|
||||
MAP(x,y) = -1;
|
||||
MoveButton(button, x, y+1);
|
||||
MAP(x,y+1) = button;
|
||||
} else {
|
||||
return False;
|
||||
return False;
|
||||
}
|
||||
return True;
|
||||
}
|
||||
@@ -84,46 +87,46 @@ Bool SlideButton(int button)
|
||||
void ResetGame(void)
|
||||
{
|
||||
int i, x, y, ox, oy;
|
||||
|
||||
|
||||
|
||||
|
||||
MoveCount = 0;
|
||||
|
||||
|
||||
for (i = 0; i < Size*Size-1; i++) {
|
||||
Map[i] = i;
|
||||
Map[i] = i;
|
||||
}
|
||||
Map[i] = -1;
|
||||
ox = x = Size-1;
|
||||
oy = y = Size-1;
|
||||
for (i = 0; i < 1000; i++) {
|
||||
int ok;
|
||||
ok = 1;
|
||||
switch (rand()%4) {
|
||||
case 0:
|
||||
if (x > 0) x--; else ok = 0;
|
||||
break;
|
||||
case 2:
|
||||
if (x < Size-1) x++; else ok = 0;
|
||||
break;
|
||||
case 1:
|
||||
if (y > 0) y--; else ok = 0;
|
||||
break;
|
||||
case 3:
|
||||
if (y < Size-1) y++; else ok = 0;
|
||||
break;
|
||||
}
|
||||
if (ok) {
|
||||
MoveButton(MAP(x,y), ox, oy);
|
||||
int ok;
|
||||
ok = 1;
|
||||
switch (rand()%4) {
|
||||
case 0:
|
||||
if (x > 0) x--; else ok = 0;
|
||||
break;
|
||||
case 2:
|
||||
if (x < Size-1) x++; else ok = 0;
|
||||
break;
|
||||
case 1:
|
||||
if (y > 0) y--; else ok = 0;
|
||||
break;
|
||||
case 3:
|
||||
if (y < Size-1) y++; else ok = 0;
|
||||
break;
|
||||
}
|
||||
if (ok) {
|
||||
MoveButton(MAP(x,y), ox, oy);
|
||||
|
||||
SWAP(MAP(ox, oy), MAP(x, y));
|
||||
|
||||
while (XPending(WMScreenDisplay(WMWidgetScreen(win)))) {
|
||||
XEvent ev;
|
||||
WMNextEvent(WMScreenDisplay(WMWidgetScreen(win)), &ev);
|
||||
WMHandleEvent(&ev);
|
||||
}
|
||||
ox = x;
|
||||
oy = y;
|
||||
}
|
||||
SWAP(MAP(ox, oy), MAP(x, y));
|
||||
|
||||
while (XPending(WMScreenDisplay(WMWidgetScreen(win)))) {
|
||||
XEvent ev;
|
||||
WMNextEvent(WMScreenDisplay(WMWidgetScreen(win)), &ev);
|
||||
WMHandleEvent(&ev);
|
||||
}
|
||||
ox = x;
|
||||
oy = y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,18 +136,18 @@ void buttonClick(WMWidget *w, void *ptr)
|
||||
char buffer[300];
|
||||
|
||||
if (SlideButton((int)ptr)) {
|
||||
MoveCount++;
|
||||
MoveCount++;
|
||||
|
||||
if (CheckWin()) {
|
||||
sprintf(buffer, "You finished the game in %i moves.", MoveCount);
|
||||
if (CheckWin()) {
|
||||
sprintf(buffer, "You finished the game in %i moves.", MoveCount);
|
||||
|
||||
if (WMRunAlertPanel(WMWidgetScreen(w), win, "You Won!", buffer,
|
||||
"Wee!", "Gah! Lemme retry!", NULL) == WAPRDefault) {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
ResetGame();
|
||||
}
|
||||
if (WMRunAlertPanel(WMWidgetScreen(w), win, "You Won!", buffer,
|
||||
"Wee!", "Gah! Lemme retry!", NULL) == WAPRDefault) {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
ResetGame();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,17 +156,17 @@ static void resizeObserver(void *self, WMNotification *notif)
|
||||
{
|
||||
WMSize size = WMGetViewSize(WMWidgetView(win));
|
||||
int x, y;
|
||||
|
||||
|
||||
WinSize = size.width;
|
||||
for (y = 0; y < Size; y++) {
|
||||
for (x = 0; x < Size; x++) {
|
||||
if (MAP(x,y) >= 0) {
|
||||
WMResizeWidget(Button[(int)MAP(x,y)],
|
||||
WinSize/Size, WinSize/Size);
|
||||
WMMoveWidget(Button[(int)MAP(x,y)],
|
||||
x*(WinSize/Size), y*(WinSize/Size));
|
||||
}
|
||||
}
|
||||
for (x = 0; x < Size; x++) {
|
||||
if (MAP(x,y) >= 0) {
|
||||
WMResizeWidget(Button[(int)MAP(x,y)],
|
||||
WinSize/Size, WinSize/Size);
|
||||
WMMoveWidget(Button[(int)MAP(x,y)],
|
||||
x*(WinSize/Size), y*(WinSize/Size));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -174,18 +177,18 @@ int main(int argc, char **argv)
|
||||
Display *dpy;
|
||||
WMScreen *scr;
|
||||
int x, y, i;
|
||||
|
||||
|
||||
WMInitializeApplication("Puzzle", &argc, argv);
|
||||
|
||||
|
||||
|
||||
dpy = XOpenDisplay("");
|
||||
if (!dpy) {
|
||||
printf("could not open display\n");
|
||||
exit(1);
|
||||
printf("could not open display\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
scr = WMCreateScreen(dpy, DefaultScreen(dpy));
|
||||
|
||||
|
||||
win = WMCreateWindow(scr, "puzzle");
|
||||
WMResizeWidget(win, WinSize, WinSize);
|
||||
WMSetWindowTitle(win, "zuPzel");
|
||||
@@ -194,48 +197,49 @@ int main(int argc, char **argv)
|
||||
WMSetWindowResizeIncrements(win, Size, Size);
|
||||
WMSetViewNotifySizeChanges(WMWidgetView(win), True);
|
||||
WMAddNotificationObserver(resizeObserver, NULL,
|
||||
WMViewSizeDidChangeNotification,
|
||||
WMWidgetView(win));
|
||||
|
||||
|
||||
|
||||
WMViewSizeDidChangeNotification,
|
||||
WMWidgetView(win));
|
||||
|
||||
|
||||
|
||||
for (i = y = 0; y < Size && i < Size*Size-1; y++) {
|
||||
for (x = 0; x < Size && i < Size*Size-1; x++) {
|
||||
char buf[32];
|
||||
WMColor *color;
|
||||
RColor col;
|
||||
RHSVColor hsv;
|
||||
|
||||
hsv.hue = i*360/(Size*Size-1);
|
||||
hsv.saturation = 120;
|
||||
hsv.value = 200;
|
||||
|
||||
RHSVtoRGB(&hsv, &col);
|
||||
for (x = 0; x < Size && i < Size*Size-1; x++) {
|
||||
char buf[32];
|
||||
WMColor *color;
|
||||
RColor col;
|
||||
RHSVColor hsv;
|
||||
|
||||
color = WMCreateRGBColor(scr, col.red<<8, col.green<<8,
|
||||
col.blue<<8, False);
|
||||
hsv.hue = i*360/(Size*Size-1);
|
||||
hsv.saturation = 120;
|
||||
hsv.value = 200;
|
||||
|
||||
MAP(x,y) = i;
|
||||
Button[i] = WMCreateButton(win, WBTMomentaryLight);
|
||||
WMSetWidgetBackgroundColor(Button[i], color);
|
||||
WMReleaseColor(color);
|
||||
WMSetButtonAction(Button[i], buttonClick, (void*)i);
|
||||
WMResizeWidget(Button[i], WinSize/Size, WinSize/Size);
|
||||
WMMoveWidget(Button[i], x*(WinSize/Size), y*(WinSize/Size));
|
||||
sprintf(buf, "%i", i+1);
|
||||
WMSetButtonText(Button[i], buf);
|
||||
WMSetButtonTextAlignment(Button[i], WACenter);
|
||||
i++;
|
||||
}
|
||||
RHSVtoRGB(&hsv, &col);
|
||||
|
||||
color = WMCreateRGBColor(scr, col.red<<8, col.green<<8,
|
||||
col.blue<<8, False);
|
||||
|
||||
MAP(x,y) = i;
|
||||
Button[i] = WMCreateButton(win, WBTMomentaryLight);
|
||||
WMSetWidgetBackgroundColor(Button[i], color);
|
||||
WMReleaseColor(color);
|
||||
WMSetButtonAction(Button[i], buttonClick, (void*)i);
|
||||
WMResizeWidget(Button[i], WinSize/Size, WinSize/Size);
|
||||
WMMoveWidget(Button[i], x*(WinSize/Size), y*(WinSize/Size));
|
||||
sprintf(buf, "%i", i+1);
|
||||
WMSetButtonText(Button[i], buf);
|
||||
WMSetButtonTextAlignment(Button[i], WACenter);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WMMapSubwidgets(win);
|
||||
WMMapWidget(win);
|
||||
WMRealizeWidget(win);
|
||||
|
||||
|
||||
ResetGame();
|
||||
|
||||
WMScreenMainLoop(scr);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
/*
|
||||
* WINGs server.c: example how to create a network server using WMConnection
|
||||
*
|
||||
* Copyright (c) 2001 Dan Pascu
|
||||
* Copyright (c) 2001-2003 Dan Pascu
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -42,6 +43,7 @@ static WMConnection *serverPtr = NULL;
|
||||
|
||||
static ConnectionDelegate socketDelegate = {
|
||||
NULL, /* client data */
|
||||
NULL, /* canResumeSending */
|
||||
NULL, /* didCatchException */
|
||||
connectionDidDie, /* didDie */
|
||||
NULL, /* didInitialize */
|
||||
@@ -52,14 +54,14 @@ static ConnectionDelegate socketDelegate = {
|
||||
|
||||
|
||||
void
|
||||
wAbort(Bool foo) /*FOLD00*/
|
||||
wAbort(Bool foo)
|
||||
{
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
printHelp(char *progname) /*FOLD00*/
|
||||
printHelp(char *progname)
|
||||
{
|
||||
printf(_("usage: %s [options]\n\n"), progname);
|
||||
puts(_(" --help print this message"));
|
||||
@@ -226,7 +228,7 @@ getAvailableMessages(WMConnection *cPtr)
|
||||
|
||||
|
||||
static void
|
||||
complainAboutBadArgs(WMConnection *cPtr, char *cmdName, char *badArgs) /*FOLD00*/
|
||||
complainAboutBadArgs(WMConnection *cPtr, char *cmdName, char *badArgs)
|
||||
{
|
||||
char *buf = wmalloc(strlen(cmdName) + strlen(badArgs) + 100);
|
||||
|
||||
@@ -238,7 +240,7 @@ complainAboutBadArgs(WMConnection *cPtr, char *cmdName, char *badArgs) /*FOLD00*
|
||||
|
||||
|
||||
static void
|
||||
sendUpdateMessage(WMConnection *cPtr, char *id, int time) /*FOLD00*/
|
||||
sendUpdateMessage(WMConnection *cPtr, char *id, int time)
|
||||
{
|
||||
char *buf = wmalloc(strlen(id) + 100);
|
||||
|
||||
@@ -256,7 +258,7 @@ showId(WMConnection *cPtr)
|
||||
|
||||
|
||||
static void
|
||||
showHelp(WMConnection *cPtr) /*FOLD00*/
|
||||
showHelp(WMConnection *cPtr)
|
||||
{
|
||||
char *buf = wmalloc(strlen(WMGetApplicationName()) + 16);
|
||||
|
||||
@@ -307,7 +309,7 @@ listUsers(WMConnection *cPtr)
|
||||
|
||||
|
||||
static void
|
||||
setTimeForUser(WMConnection *cPtr, char *cmdArgs) /*FOLD00*/
|
||||
setTimeForUser(WMConnection *cPtr, char *cmdArgs)
|
||||
{
|
||||
char *id;
|
||||
int i, time;
|
||||
@@ -332,7 +334,7 @@ setTimeForUser(WMConnection *cPtr, char *cmdArgs) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
addTimeToUser(WMConnection *cPtr, char *cmdArgs) /*FOLD00*/
|
||||
addTimeToUser(WMConnection *cPtr, char *cmdArgs)
|
||||
{
|
||||
char *id;
|
||||
int i, time, newTime;
|
||||
@@ -359,7 +361,7 @@ addTimeToUser(WMConnection *cPtr, char *cmdArgs) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
subTimeFromUser(WMConnection *cPtr, char *cmdArgs) /*FOLD00*/
|
||||
subTimeFromUser(WMConnection *cPtr, char *cmdArgs)
|
||||
{
|
||||
char *id;
|
||||
int i, time, newTime;
|
||||
@@ -386,7 +388,7 @@ subTimeFromUser(WMConnection *cPtr, char *cmdArgs) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
removeTimeForUser(WMConnection *cPtr, char *cmdArgs) /*FOLD00*/
|
||||
removeTimeForUser(WMConnection *cPtr, char *cmdArgs)
|
||||
{
|
||||
char *ptr;
|
||||
int i;
|
||||
@@ -412,7 +414,7 @@ removeTimeForUser(WMConnection *cPtr, char *cmdArgs) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
getTimeForUser(WMConnection *cPtr, char *cmdArgs) /*FOLD00*/
|
||||
getTimeForUser(WMConnection *cPtr, char *cmdArgs)
|
||||
{
|
||||
char *ptr;
|
||||
int time;
|
||||
@@ -525,7 +527,7 @@ isAllowedToConnect(WMConnection *cPtr)
|
||||
|
||||
|
||||
static void
|
||||
didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr) /*FOLD00*/
|
||||
didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr)
|
||||
{
|
||||
if (cPtr == serverPtr) {
|
||||
WMConnection *newPtr = WMAcceptConnection(cPtr);
|
||||
@@ -548,7 +550,7 @@ didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
connectionDidTimeout(ConnectionDelegate *self, WMConnection *cPtr) /*FOLD00*/
|
||||
connectionDidTimeout(ConnectionDelegate *self, WMConnection *cPtr)
|
||||
{
|
||||
WMHost *hPtr;
|
||||
|
||||
@@ -600,7 +602,7 @@ updatedDomain(void *observer, WMNotification *notification)
|
||||
|
||||
#if 0
|
||||
static Bool
|
||||
isDifferent(char *str1, char *str2) /*FOLD00*/
|
||||
isDifferent(char *str1, char *str2)
|
||||
{
|
||||
if ((!str1 && !str2) || (str1 && str2 && strcmp(str1, str2)==0))
|
||||
return False;
|
||||
@@ -611,7 +613,7 @@ isDifferent(char *str1, char *str2) /*FOLD00*/
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char **argv) /*FOLD00*/
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
Makefile Makefile.in
|
||||
.libs
|
||||
test
|
||||
.psrc .inslog2 tca.map tca.log
|
||||
*.rpt
|
||||
.psrc .inslog2 tca.map tca.log pchdir *.rpt
|
||||
|
||||
@@ -22,12 +22,13 @@ libExtraWINGs_a_SOURCES = \
|
||||
wtableview.h \
|
||||
wtabledelegates.h
|
||||
|
||||
AM_CFLAGS = @NOSTRICTALIASING@
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/wrlib -I$(top_srcdir)/WINGs \
|
||||
-DRESOURCE_PATH=\"$(datadir)/WINGs\" @HEADER_SEARCH_PATH@ -DDEBUG
|
||||
|
||||
LDADD= $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la \
|
||||
@INTLIBS@
|
||||
@XFTLIBS@ @INTLIBS@
|
||||
|
||||
test_LDADD = wtableview.o wtabledelegates.o $(LDADD)
|
||||
|
||||
|
||||
@@ -12,61 +12,65 @@ static int col2[20];
|
||||
|
||||
static char *options[] = {
|
||||
"Option1",
|
||||
"Option2",
|
||||
"Option3",
|
||||
"Option4",
|
||||
"Option5"
|
||||
"Option2",
|
||||
"Option3",
|
||||
"Option4",
|
||||
"Option5"
|
||||
};
|
||||
|
||||
|
||||
int numberOfRows(WMTableViewDelegate *self, WMTableView *table)
|
||||
int
|
||||
numberOfRows(WMTableViewDelegate *self, WMTableView *table)
|
||||
{
|
||||
return 20;
|
||||
}
|
||||
|
||||
|
||||
void *valueForCell(WMTableViewDelegate *self, WMTableColumn *column, int row)
|
||||
void*
|
||||
valueForCell(WMTableViewDelegate *self, WMTableColumn *column, int row)
|
||||
{
|
||||
/*WMTableView *table = (WMTableView*)WMGetTableColumnTableView(column);*/
|
||||
int i;
|
||||
if (col1[0] == 0) {
|
||||
for (i = 0; i < 20; i++) {
|
||||
char buf[128];
|
||||
for (i = 0; i < 20; i++) {
|
||||
char buf[128];
|
||||
|
||||
sprintf(buf, "Test row %i", i);
|
||||
sprintf(buf, "Test row %i", i);
|
||||
|
||||
col1[i] = wstrdup(buf);
|
||||
col2[i] = 0;
|
||||
}
|
||||
col1[i] = wstrdup(buf);
|
||||
col2[i] = 0;
|
||||
}
|
||||
}
|
||||
if ((int)WMGetTableColumnId(column) == 1)
|
||||
return col1[row];
|
||||
return col1[row];
|
||||
else
|
||||
return (void*)col2[row];
|
||||
return (void*)col2[row];
|
||||
}
|
||||
|
||||
|
||||
void setValueForCell(WMTableViewDelegate *self, WMTableColumn *column, int row,
|
||||
void *data)
|
||||
void
|
||||
setValueForCell(WMTableViewDelegate *self, WMTableColumn *column, int row,
|
||||
void *data)
|
||||
{
|
||||
if ((int)WMGetTableColumnId(column) == 1)
|
||||
col1[row] = data;
|
||||
col1[row] = data;
|
||||
else
|
||||
col2[row] = (int)data;
|
||||
col2[row] = (int)data;
|
||||
}
|
||||
|
||||
|
||||
static WMTableViewDelegate delegate = {
|
||||
NULL,
|
||||
numberOfRows,
|
||||
valueForCell,
|
||||
setValueForCell
|
||||
numberOfRows,
|
||||
valueForCell,
|
||||
setValueForCell
|
||||
};
|
||||
|
||||
|
||||
|
||||
void clickedTable(WMWidget *w, void *self)
|
||||
{
|
||||
void
|
||||
clickedTable(WMWidget *w, void *self)
|
||||
{
|
||||
int row = WMGetTableViewClickedRow((WMTableView*)self);
|
||||
|
||||
WMEditTableViewRow(self, row);
|
||||
@@ -82,30 +86,31 @@ main(int argc, char **argv)
|
||||
WMTableView *table;
|
||||
WMTableColumn *col;
|
||||
WMTableColumnDelegate *colDeleg;
|
||||
|
||||
|
||||
WMInitializeApplication("test", &argc, argv);
|
||||
|
||||
|
||||
scr = WMOpenScreen(NULL);
|
||||
|
||||
XSynchronize(WMScreenDisplay(scr), 1);
|
||||
|
||||
|
||||
win = WMCreateWindow(scr, "eweq");
|
||||
WMResizeWidget(win, 400, 200);
|
||||
WMMapWidget(win);
|
||||
|
||||
|
||||
table = WMCreateTableView(win);
|
||||
WMSetTableViewHasHorizontalScroller(table, 0);
|
||||
WMSetViewExpandsToParent(WMWidgetView(table), 10, 10, 10, 10);
|
||||
WMSetTableViewBackgroundColor(table, WMWhiteColor(scr));
|
||||
/*WMSetTableViewGridColor(table, WMGrayColor(scr));*/
|
||||
WMSetTableViewHeaderHeight(table, 20);
|
||||
WMSetTableViewDelegate(table, &delegate);
|
||||
WMSetTableViewAction(table, clickedTable, table);
|
||||
|
||||
|
||||
colDeleg = WTCreateStringEditorDelegate(table);
|
||||
|
||||
|
||||
col = WMCreateTableColumn("Group");
|
||||
WMSetTableColumnWidth(col, 180);
|
||||
WMAddTableViewColumn(table, col);
|
||||
WMAddTableViewColumn(table, col);
|
||||
WMSetTableColumnDelegate(col, colDeleg);
|
||||
WMSetTableColumnId(col, (void*)1);
|
||||
|
||||
@@ -114,15 +119,15 @@ main(int argc, char **argv)
|
||||
|
||||
col = WMCreateTableColumn("Package");
|
||||
WMSetTableColumnWidth(col, 140);
|
||||
WMAddTableViewColumn(table, col);
|
||||
WMAddTableViewColumn(table, col);
|
||||
WMSetTableColumnDelegate(col, colDeleg);
|
||||
WMSetTableColumnId(col, (void*)2);
|
||||
WMSetTableColumnId(col, (void*)2);
|
||||
|
||||
colDeleg = WTCreateBooleanSwitchDelegate(table);
|
||||
|
||||
col = WMCreateTableColumn("Bool");
|
||||
WMSetTableColumnWidth(col, 50);
|
||||
WMAddTableViewColumn(table, col);
|
||||
WMAddTableViewColumn(table, col);
|
||||
WMSetTableColumnDelegate(col, colDeleg);
|
||||
WMSetTableColumnId(col, (void*)2);
|
||||
|
||||
@@ -132,3 +137,4 @@ main(int argc, char **argv)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ typedef struct {
|
||||
WMFont *font;
|
||||
GC gc;
|
||||
GC selGC;
|
||||
GC textGC;
|
||||
WMColor *textColor;
|
||||
} StringData;
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ typedef struct {
|
||||
WMFont *font;
|
||||
GC gc;
|
||||
GC selGC;
|
||||
GC textGC;
|
||||
WMColor *textColor;
|
||||
} StringEditorData;
|
||||
|
||||
|
||||
@@ -37,10 +37,10 @@ typedef struct {
|
||||
WMTableView *table;
|
||||
WMFont *font;
|
||||
char **options;
|
||||
int count;
|
||||
int count;
|
||||
GC gc;
|
||||
GC selGC;
|
||||
GC textGC;
|
||||
WMColor *textColor;
|
||||
} EnumSelectorData;
|
||||
|
||||
|
||||
@@ -57,9 +57,9 @@ static char *SelectionColor = "#bbbbcc";
|
||||
|
||||
|
||||
|
||||
static void stringDraw(WMScreen *scr, Drawable d, GC gc,
|
||||
GC sgc, GC stgc, WMFont *font, void *data,
|
||||
WMRect rect, Bool selected)
|
||||
static void
|
||||
stringDraw(WMScreen *scr, Drawable d, GC gc, GC sgc, WMColor *textColor,
|
||||
WMFont *font, void *data, WMRect rect, Bool selected)
|
||||
{
|
||||
int x, y;
|
||||
XRectangle rects[1];
|
||||
@@ -73,26 +73,27 @@ static void stringDraw(WMScreen *scr, Drawable d, GC gc,
|
||||
rects[0].width = rect.size.width-1;
|
||||
rects[0].height = rect.size.height-1;
|
||||
XSetClipRectangles(dpy, gc, 0, 0, rects, 1, YXSorted);
|
||||
|
||||
|
||||
if (!selected) {
|
||||
XFillRectangles(dpy, d, gc, rects, 1);
|
||||
|
||||
WMDrawString(scr, d, stgc, font, x, y,
|
||||
data, strlen(data));
|
||||
XFillRectangles(dpy, d, gc, rects, 1);
|
||||
|
||||
WMDrawString(scr, d, textColor, font, x, y,
|
||||
data, strlen(data));
|
||||
} else {
|
||||
XFillRectangles(dpy, d, sgc, rects, 1);
|
||||
|
||||
WMDrawString(scr, d, stgc, font, x, y,
|
||||
data, strlen(data));
|
||||
XFillRectangles(dpy, d, sgc, rects, 1);
|
||||
|
||||
WMDrawString(scr, d, textColor, font, x, y,
|
||||
data, strlen(data));
|
||||
}
|
||||
|
||||
|
||||
XSetClipMask(dpy, gc, None);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void pixmapDraw(WMScreen *scr, Drawable d, GC gc, GC sgc,
|
||||
WMPixmap *pixmap, WMRect rect, Bool selected)
|
||||
static void
|
||||
pixmapDraw(WMScreen *scr, Drawable d, GC gc, GC sgc, WMPixmap *pixmap,
|
||||
WMRect rect, Bool selected)
|
||||
{
|
||||
int x, y;
|
||||
XRectangle rects[1];
|
||||
@@ -104,29 +105,29 @@ static void pixmapDraw(WMScreen *scr, Drawable d, GC gc, GC sgc,
|
||||
rects[0].width = rect.size.width-1;
|
||||
rects[0].height = rect.size.height-1;
|
||||
XSetClipRectangles(dpy, gc, 0, 0, rects, 1, YXSorted);
|
||||
|
||||
|
||||
if (!selected) {
|
||||
XFillRectangles(dpy, d, gc, rects, 1);
|
||||
|
||||
if (pixmap) {
|
||||
size = WMGetPixmapSize(pixmap);
|
||||
x = rect.pos.x + (rect.size.width - size.width) / 2;
|
||||
y = rect.pos.y + (rect.size.height - size.height) / 2;
|
||||
|
||||
WMDrawPixmap(pixmap, d, x, y);
|
||||
}
|
||||
XFillRectangles(dpy, d, gc, rects, 1);
|
||||
|
||||
if (pixmap) {
|
||||
size = WMGetPixmapSize(pixmap);
|
||||
x = rect.pos.x + (rect.size.width - size.width) / 2;
|
||||
y = rect.pos.y + (rect.size.height - size.height) / 2;
|
||||
|
||||
WMDrawPixmap(pixmap, d, x, y);
|
||||
}
|
||||
} else {
|
||||
XFillRectangles(dpy, d, sgc, rects, 1);
|
||||
|
||||
if (pixmap) {
|
||||
size = WMGetPixmapSize(pixmap);
|
||||
x = rect.pos.x + (rect.size.width - size.width) / 2;
|
||||
y = rect.pos.y + (rect.size.height - size.height) / 2;
|
||||
|
||||
WMDrawPixmap(pixmap, d, x, y);
|
||||
}
|
||||
XFillRectangles(dpy, d, sgc, rects, 1);
|
||||
|
||||
if (pixmap) {
|
||||
size = WMGetPixmapSize(pixmap);
|
||||
x = rect.pos.x + (rect.size.width - size.width) / 2;
|
||||
y = rect.pos.y + (rect.size.height - size.height) / 2;
|
||||
|
||||
WMDrawPixmap(pixmap, d, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
XSetClipMask(dpy, gc, None);
|
||||
}
|
||||
|
||||
@@ -135,38 +136,40 @@ static void pixmapDraw(WMScreen *scr, Drawable d, GC gc, GC sgc,
|
||||
|
||||
|
||||
|
||||
static void SECellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
SECellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
StringEditorData *strdata = (StringEditorData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
|
||||
|
||||
stringDraw(WMWidgetScreen(table), d,
|
||||
strdata->gc, strdata->selGC, strdata->textGC, strdata->font,
|
||||
WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
False);
|
||||
strdata->gc, strdata->selGC, strdata->textColor, strdata->font,
|
||||
WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
False);
|
||||
}
|
||||
|
||||
|
||||
static void selectedSECellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
selectedSECellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
StringEditorData *strdata = (StringEditorData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
|
||||
|
||||
stringDraw(WMWidgetScreen(table), d,
|
||||
strdata->gc, strdata->selGC, strdata->textGC, strdata->font,
|
||||
WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
True);
|
||||
strdata->gc, strdata->selGC, strdata->textColor, strdata->font,
|
||||
WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
True);
|
||||
}
|
||||
|
||||
|
||||
static void beginSECellEdit(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row)
|
||||
static void
|
||||
beginSECellEdit(WMTableColumnDelegate *self, WMTableColumn *column, int row)
|
||||
{
|
||||
StringEditorData *strdata = (StringEditorData*)self->data;
|
||||
StringEditorData *strdata = (StringEditorData*)self->data;
|
||||
WMRect rect = WMTableViewRectForCell(strdata->table, column, row);
|
||||
void *data = WMTableViewDataForCell(strdata->table, column, row);
|
||||
|
||||
@@ -178,35 +181,36 @@ static void beginSECellEdit(WMTableColumnDelegate *self,
|
||||
}
|
||||
|
||||
|
||||
static void endSECellEdit(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row)
|
||||
static void
|
||||
endSECellEdit(WMTableColumnDelegate *self, WMTableColumn *column, int row)
|
||||
{
|
||||
StringEditorData *strdata = (StringEditorData*)self->data;
|
||||
char *text;
|
||||
|
||||
WMUnmapWidget(strdata->widget);
|
||||
|
||||
|
||||
text = WMGetTextFieldText(strdata->widget);
|
||||
WMSetTableViewDataForCell(strdata->table, column, row, (void*)text);
|
||||
}
|
||||
|
||||
|
||||
WMTableColumnDelegate *WTCreateStringEditorDelegate(WMTableView *parent)
|
||||
WMTableColumnDelegate*
|
||||
WTCreateStringEditorDelegate(WMTableView *parent)
|
||||
{
|
||||
WMTableColumnDelegate *delegate = wmalloc(sizeof(WMTableColumnDelegate));
|
||||
WMScreen *scr = WMWidgetScreen(parent);
|
||||
StringEditorData *data = wmalloc(sizeof(StringEditorData));
|
||||
|
||||
|
||||
data->widget = WMCreateTextField(parent);
|
||||
W_ReparentView(WMWidgetView(data->widget),
|
||||
WMGetTableViewDocumentView(parent),
|
||||
0, 0);
|
||||
W_ReparentView(WMWidgetView(data->widget),
|
||||
WMGetTableViewDocumentView(parent),
|
||||
0, 0);
|
||||
data->table = parent;
|
||||
data->font = WMSystemFontOfSize(scr, 12);
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
data->textGC = WMColorGC(WMBlackColor(scr));
|
||||
data->gc = WMColorGC(WMWhiteColor(scr));
|
||||
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
data->textColor = WMBlackColor(scr);
|
||||
|
||||
delegate->data = data;
|
||||
delegate->drawCell = SECellPainter;
|
||||
delegate->drawSelectedCell = selectedSECellPainter;
|
||||
@@ -221,47 +225,49 @@ WMTableColumnDelegate *WTCreateStringEditorDelegate(WMTableView *parent)
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
|
||||
static void ESCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
ESCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
EnumSelectorData *strdata = (EnumSelectorData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
int i = (int)WMTableViewDataForCell(table, column, row);
|
||||
|
||||
|
||||
stringDraw(WMWidgetScreen(table), d,
|
||||
strdata->gc, strdata->selGC, strdata->textGC, strdata->font,
|
||||
strdata->options[i],
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
False);
|
||||
strdata->gc, strdata->selGC, strdata->textColor, strdata->font,
|
||||
strdata->options[i],
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
False);
|
||||
}
|
||||
|
||||
|
||||
static void selectedESCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
selectedESCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
EnumSelectorData *strdata = (EnumSelectorData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
int i = (int)WMTableViewDataForCell(table, column, row);
|
||||
|
||||
|
||||
stringDraw(WMWidgetScreen(table), d,
|
||||
strdata->gc, strdata->selGC, strdata->textGC, strdata->font,
|
||||
strdata->options[i],
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
True);
|
||||
strdata->gc, strdata->selGC, strdata->textColor, strdata->font,
|
||||
strdata->options[i],
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
True);
|
||||
}
|
||||
|
||||
|
||||
static void beginESCellEdit(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row)
|
||||
static void
|
||||
beginESCellEdit(WMTableColumnDelegate *self, WMTableColumn *column, int row)
|
||||
{
|
||||
EnumSelectorData *strdata = (EnumSelectorData*)self->data;
|
||||
EnumSelectorData *strdata = (EnumSelectorData*)self->data;
|
||||
WMRect rect = WMTableViewRectForCell(strdata->table, column, row);
|
||||
int data = (int)WMTableViewDataForCell(strdata->table, column, row);
|
||||
|
||||
wassertr(data < strdata->count);
|
||||
|
||||
|
||||
WMSetPopUpButtonSelectedItem(strdata->widget, data);
|
||||
|
||||
|
||||
WMMoveWidget(strdata->widget, rect.pos.x, rect.pos.y);
|
||||
WMResizeWidget(strdata->widget, rect.size.width, rect.size.height+1);
|
||||
|
||||
@@ -269,37 +275,38 @@ static void beginESCellEdit(WMTableColumnDelegate *self,
|
||||
}
|
||||
|
||||
|
||||
static void endESCellEdit(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row)
|
||||
static void
|
||||
endESCellEdit(WMTableColumnDelegate *self, WMTableColumn *column, int row)
|
||||
{
|
||||
EnumSelectorData *strdata = (EnumSelectorData*)self->data;
|
||||
int option;
|
||||
|
||||
WMUnmapWidget(strdata->widget);
|
||||
|
||||
|
||||
option = WMGetPopUpButtonSelectedItem(strdata->widget);
|
||||
WMSetTableViewDataForCell(strdata->table, column, row, (void*)option);
|
||||
}
|
||||
|
||||
|
||||
WMTableColumnDelegate *WTCreateEnumSelectorDelegate(WMTableView *parent)
|
||||
WMTableColumnDelegate*
|
||||
WTCreateEnumSelectorDelegate(WMTableView *parent)
|
||||
{
|
||||
WMTableColumnDelegate *delegate = wmalloc(sizeof(WMTableColumnDelegate));
|
||||
WMScreen *scr = WMWidgetScreen(parent);
|
||||
EnumSelectorData *data = wmalloc(sizeof(EnumSelectorData));
|
||||
|
||||
|
||||
data->widget = WMCreatePopUpButton(parent);
|
||||
W_ReparentView(WMWidgetView(data->widget),
|
||||
WMGetTableViewDocumentView(parent),
|
||||
0, 0);
|
||||
W_ReparentView(WMWidgetView(data->widget),
|
||||
WMGetTableViewDocumentView(parent),
|
||||
0, 0);
|
||||
data->table = parent;
|
||||
data->font = WMSystemFontOfSize(scr, 12);
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
data->textGC = WMColorGC(WMBlackColor(scr));
|
||||
data->gc = WMColorGC(WMWhiteColor(scr));
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
data->textColor = WMBlackColor(scr);
|
||||
data->count = 0;
|
||||
data->options = NULL;
|
||||
|
||||
|
||||
delegate->data = data;
|
||||
delegate->drawCell = ESCellPainter;
|
||||
delegate->drawSelectedCell = selectedESCellPainter;
|
||||
@@ -310,23 +317,24 @@ WMTableColumnDelegate *WTCreateEnumSelectorDelegate(WMTableView *parent)
|
||||
}
|
||||
|
||||
|
||||
void WTSetEnumSelectorOptions(WMTableColumnDelegate *delegate,
|
||||
char **options, int count)
|
||||
void
|
||||
WTSetEnumSelectorOptions(WMTableColumnDelegate *delegate, char **options,
|
||||
int count)
|
||||
{
|
||||
EnumSelectorData *data = (EnumSelectorData*)delegate->data;
|
||||
int i;
|
||||
|
||||
|
||||
for (i = 0;
|
||||
i < WMGetPopUpButtonNumberOfItems(data->widget);
|
||||
i++) {
|
||||
WMRemovePopUpButtonItem(data->widget, 0);
|
||||
i < WMGetPopUpButtonNumberOfItems(data->widget);
|
||||
i++) {
|
||||
WMRemovePopUpButtonItem(data->widget, 0);
|
||||
}
|
||||
|
||||
|
||||
data->options = options;
|
||||
data->count = count;
|
||||
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
WMAddPopUpButtonItem(data->widget, options[i]);
|
||||
WMAddPopUpButtonItem(data->widget, options[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -334,51 +342,53 @@ void WTSetEnumSelectorOptions(WMTableColumnDelegate *delegate,
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
static void BSCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
BSCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
BooleanSwitchData *strdata = (BooleanSwitchData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
int i = (int)WMTableViewDataForCell(table, column, row);
|
||||
WMScreen *scr = WMWidgetScreen(table);
|
||||
|
||||
|
||||
if (i) {
|
||||
pixmapDraw(scr, d,
|
||||
strdata->gc, strdata->selGC, WMGetSystemPixmap(scr, WSICheckMark),
|
||||
WMTableViewRectForCell(table, column, row), False);
|
||||
pixmapDraw(scr, d,
|
||||
strdata->gc, strdata->selGC, WMGetSystemPixmap(scr, WSICheckMark),
|
||||
WMTableViewRectForCell(table, column, row), False);
|
||||
} else {
|
||||
pixmapDraw(scr, d,
|
||||
strdata->gc, strdata->selGC, NULL,
|
||||
WMTableViewRectForCell(table, column, row), False);
|
||||
pixmapDraw(scr, d,
|
||||
strdata->gc, strdata->selGC, NULL,
|
||||
WMTableViewRectForCell(table, column, row), False);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void selectedBSCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
selectedBSCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
BooleanSwitchData *strdata = (BooleanSwitchData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
int i = (int)WMTableViewDataForCell(table, column, row);
|
||||
WMScreen *scr = WMWidgetScreen(table);
|
||||
|
||||
|
||||
if (i) {
|
||||
pixmapDraw(scr, d,
|
||||
strdata->gc, strdata->selGC, WMGetSystemPixmap(scr, WSICheckMark),
|
||||
WMTableViewRectForCell(table, column, row), True);
|
||||
pixmapDraw(scr, d,
|
||||
strdata->gc, strdata->selGC, WMGetSystemPixmap(scr, WSICheckMark),
|
||||
WMTableViewRectForCell(table, column, row), True);
|
||||
} else {
|
||||
pixmapDraw(scr, d,
|
||||
strdata->gc, strdata->selGC, NULL,
|
||||
WMTableViewRectForCell(table, column, row), True);
|
||||
}
|
||||
pixmapDraw(scr, d,
|
||||
strdata->gc, strdata->selGC, NULL,
|
||||
WMTableViewRectForCell(table, column, row), True);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void beginBSCellEdit(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row)
|
||||
static void
|
||||
beginBSCellEdit(WMTableColumnDelegate *self, WMTableColumn *column, int row)
|
||||
{
|
||||
BooleanSwitchData *strdata = (BooleanSwitchData*)self->data;
|
||||
BooleanSwitchData *strdata = (BooleanSwitchData*)self->data;
|
||||
WMRect rect = WMTableViewRectForCell(strdata->table, column, row);
|
||||
int data = (int)WMTableViewDataForCell(strdata->table, column, row);
|
||||
|
||||
@@ -390,19 +400,20 @@ static void beginBSCellEdit(WMTableColumnDelegate *self,
|
||||
}
|
||||
|
||||
|
||||
static void endBSCellEdit(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row)
|
||||
static void
|
||||
endBSCellEdit(WMTableColumnDelegate *self, WMTableColumn *column, int row)
|
||||
{
|
||||
BooleanSwitchData *strdata = (BooleanSwitchData*)self->data;
|
||||
BooleanSwitchData *strdata = (BooleanSwitchData*)self->data;
|
||||
int value;
|
||||
|
||||
|
||||
value = WMGetButtonSelected(strdata->widget);
|
||||
WMSetTableViewDataForCell(strdata->table, column, row, (void*)value);
|
||||
WMUnmapWidget(strdata->widget);
|
||||
}
|
||||
|
||||
|
||||
WMTableColumnDelegate *WTCreateBooleanSwitchDelegate(WMTableView *parent)
|
||||
WMTableColumnDelegate*
|
||||
WTCreateBooleanSwitchDelegate(WMTableView *parent)
|
||||
{
|
||||
WMTableColumnDelegate *delegate = wmalloc(sizeof(WMTableColumnDelegate));
|
||||
WMScreen *scr = WMWidgetScreen(parent);
|
||||
@@ -410,20 +421,20 @@ WMTableColumnDelegate *WTCreateBooleanSwitchDelegate(WMTableView *parent)
|
||||
WMColor *color;
|
||||
|
||||
data->widget = WMCreateSwitchButton(parent);
|
||||
W_ReparentView(WMWidgetView(data->widget),
|
||||
WMGetTableViewDocumentView(parent),
|
||||
0, 0);
|
||||
W_ReparentView(WMWidgetView(data->widget),
|
||||
WMGetTableViewDocumentView(parent),
|
||||
0, 0);
|
||||
WMSetButtonText(data->widget, NULL);
|
||||
WMSetButtonImagePosition(data->widget, WIPImageOnly);
|
||||
WMSetButtonImage(data->widget, NULL);
|
||||
WMSetButtonAltImage(data->widget, WMGetSystemPixmap(scr, WSICheckMark));
|
||||
|
||||
|
||||
data->table = parent;
|
||||
color = WMCreateNamedColor(scr, SelectionColor, False);
|
||||
WMSetWidgetBackgroundColor(data->widget, color);
|
||||
WMSetWidgetBackgroundColor(data->widget, color);
|
||||
data->gc = WMColorGC(WMWhiteColor(scr));
|
||||
data->selGC = WMColorGC(color);
|
||||
|
||||
|
||||
delegate->data = data;
|
||||
delegate->drawCell = BSCellPainter;
|
||||
delegate->drawSelectedCell = selectedBSCellPainter;
|
||||
@@ -437,46 +448,49 @@ WMTableColumnDelegate *WTCreateBooleanSwitchDelegate(WMTableView *parent)
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
|
||||
static void SCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
SCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
StringData *strdata = (StringData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
|
||||
|
||||
stringDraw(WMWidgetScreen(table), d,
|
||||
strdata->gc, strdata->selGC, strdata->textGC, strdata->font,
|
||||
WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
False);
|
||||
strdata->gc, strdata->selGC, strdata->textColor, strdata->font,
|
||||
WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
False);
|
||||
}
|
||||
|
||||
|
||||
static void selectedSCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
selectedSCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
StringData *strdata = (StringData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
|
||||
|
||||
stringDraw(WMWidgetScreen(table), d,
|
||||
strdata->gc, strdata->selGC, strdata->textGC, strdata->font,
|
||||
WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
True);
|
||||
strdata->gc, strdata->selGC, strdata->textColor, strdata->font,
|
||||
WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
True);
|
||||
}
|
||||
|
||||
|
||||
WMTableColumnDelegate *WTCreateStringDelegate(WMTableView *parent)
|
||||
WMTableColumnDelegate*
|
||||
WTCreateStringDelegate(WMTableView *parent)
|
||||
{
|
||||
WMTableColumnDelegate *delegate = wmalloc(sizeof(WMTableColumnDelegate));
|
||||
WMScreen *scr = WMWidgetScreen(parent);
|
||||
StringData *data = wmalloc(sizeof(StringData));
|
||||
|
||||
|
||||
data->table = parent;
|
||||
data->font = WMSystemFontOfSize(scr, 12);
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
data->textGC = WMColorGC(WMBlackColor(scr));
|
||||
data->gc = WMColorGC(WMWhiteColor(scr));
|
||||
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
data->textColor = WMBlackColor(scr);
|
||||
|
||||
delegate->data = data;
|
||||
delegate->drawCell = SCellPainter;
|
||||
delegate->drawSelectedCell = selectedSCellPainter;
|
||||
@@ -490,44 +504,47 @@ WMTableColumnDelegate *WTCreateStringDelegate(WMTableView *parent)
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
|
||||
static void PCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
PCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
StringData *strdata = (StringData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
|
||||
|
||||
pixmapDraw(WMWidgetScreen(table), d,
|
||||
strdata->gc, strdata->selGC,
|
||||
(WMPixmap*)WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
False);
|
||||
strdata->gc, strdata->selGC,
|
||||
(WMPixmap*)WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
False);
|
||||
}
|
||||
|
||||
|
||||
static void selectedPCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
selectedPCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
StringData *strdata = (StringData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
|
||||
|
||||
pixmapDraw(WMWidgetScreen(table), d,
|
||||
strdata->gc, strdata->selGC,
|
||||
(WMPixmap*)WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
True);
|
||||
strdata->gc, strdata->selGC,
|
||||
(WMPixmap*)WMTableViewDataForCell(table, column, row),
|
||||
WMTableViewRectForCell(table, column, row),
|
||||
True);
|
||||
}
|
||||
|
||||
|
||||
WMTableColumnDelegate *WTCreatePixmapDelegate(WMTableView *table)
|
||||
WMTableColumnDelegate*
|
||||
WTCreatePixmapDelegate(WMTableView *table)
|
||||
{
|
||||
WMTableColumnDelegate *delegate = wmalloc(sizeof(WMTableColumnDelegate));
|
||||
WMScreen *scr = WMWidgetScreen(table);
|
||||
StringData *data = wmalloc(sizeof(StringData));
|
||||
|
||||
|
||||
data->table = table;
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
data->gc = WMColorGC(WMWhiteColor(scr));
|
||||
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
|
||||
delegate->data = data;
|
||||
delegate->drawCell = PCellPainter;
|
||||
delegate->drawSelectedCell = selectedPCellPainter;
|
||||
@@ -541,8 +558,9 @@ WMTableColumnDelegate *WTCreatePixmapDelegate(WMTableView *table)
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
|
||||
static void drawPSCell(WMTableColumnDelegate *self, Drawable d,
|
||||
WMTableColumn *column, int row, Bool selected)
|
||||
static void
|
||||
drawPSCell(WMTableColumnDelegate *self, Drawable d, WMTableColumn *column,
|
||||
int row, Bool selected)
|
||||
{
|
||||
StringData *strdata = (StringData*)self->data;
|
||||
WMTableView *table = WMGetTableColumnTableView(column);
|
||||
@@ -554,58 +572,60 @@ static void drawPSCell(WMTableColumnDelegate *self, Drawable d,
|
||||
|
||||
data = WMTableViewDataForCell(table, column, row);
|
||||
|
||||
str = (char*)data[0];
|
||||
str = (char*)data[0];
|
||||
pix = (WMPixmap*)data[1];
|
||||
|
||||
rect = WMTableViewRectForCell(table, column, row);
|
||||
|
||||
|
||||
if (pix) {
|
||||
int owidth = rect.size.width;
|
||||
|
||||
size = WMGetPixmapSize(pix);
|
||||
rect.size.width = size.width;
|
||||
|
||||
pixmapDraw(WMWidgetScreen(table),
|
||||
WMViewXID(WMGetTableViewDocumentView(table)),
|
||||
strdata->gc, strdata->selGC, pix, rect,
|
||||
selected);
|
||||
|
||||
rect.pos.x += size.width-1;
|
||||
rect.size.width = owidth-size.width+1;
|
||||
int owidth = rect.size.width;
|
||||
|
||||
size = WMGetPixmapSize(pix);
|
||||
rect.size.width = size.width;
|
||||
|
||||
pixmapDraw(WMWidgetScreen(table),
|
||||
WMViewXID(WMGetTableViewDocumentView(table)),
|
||||
strdata->gc, strdata->selGC, pix, rect,
|
||||
selected);
|
||||
|
||||
rect.pos.x += size.width-1;
|
||||
rect.size.width = owidth-size.width+1;
|
||||
}
|
||||
|
||||
stringDraw(WMWidgetScreen(table), d,
|
||||
strdata->gc, strdata->selGC, strdata->textGC, strdata->font,
|
||||
str, rect, selected);
|
||||
|
||||
stringDraw(WMWidgetScreen(table), d, strdata->gc, strdata->selGC,
|
||||
strdata->textColor, strdata->font, str, rect, selected);
|
||||
}
|
||||
|
||||
|
||||
static void PSCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
PSCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
drawPSCell(self, d, column, row, False);
|
||||
}
|
||||
|
||||
|
||||
static void selectedPSCellPainter(WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d)
|
||||
static void
|
||||
selectedPSCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row, Drawable d)
|
||||
{
|
||||
drawPSCell(self, d, column, row, True);
|
||||
}
|
||||
|
||||
|
||||
WMTableColumnDelegate *WTCreatePixmapStringDelegate(WMTableView *parent)
|
||||
WMTableColumnDelegate*
|
||||
WTCreatePixmapStringDelegate(WMTableView *parent)
|
||||
{
|
||||
WMTableColumnDelegate *delegate = wmalloc(sizeof(WMTableColumnDelegate));
|
||||
WMScreen *scr = WMWidgetScreen(parent);
|
||||
StringData *data = wmalloc(sizeof(StringData));
|
||||
|
||||
|
||||
data->table = parent;
|
||||
data->font = WMSystemFontOfSize(scr, 12);
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
data->textGC = WMColorGC(WMBlackColor(scr));
|
||||
data->gc = WMColorGC(WMWhiteColor(scr));
|
||||
|
||||
data->selGC = WMColorGC(WMCreateNamedColor(scr, SelectionColor, False));
|
||||
data->textColor = WMBlackColor(scr);
|
||||
|
||||
delegate->data = data;
|
||||
delegate->drawCell = PSCellPainter;
|
||||
delegate->drawSelectedCell = selectedPSCellPainter;
|
||||
@@ -614,3 +634,5 @@ WMTableColumnDelegate *WTCreatePixmapStringDelegate(WMTableView *parent)
|
||||
|
||||
return delegate;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ WMTableColumnDelegate *WTCreateStringEditorDelegate(WMTableView *table);
|
||||
|
||||
WMTableColumnDelegate *WTCreateEnumSelectorDelegate(WMTableView *table);
|
||||
void WTSetEnumSelectorOptions(WMTableColumnDelegate *delegate,
|
||||
char **options, int count);
|
||||
char **options, int count);
|
||||
|
||||
WMTableColumnDelegate *WTCreateBooleanSwitchDelegate(WMTableView *parent);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -18,97 +18,101 @@ extern const char *WMTableViewSelectionDidChangeNotification;
|
||||
typedef struct WMTableColumnDelegate {
|
||||
void *data;
|
||||
void (*drawCell)(struct WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d);
|
||||
WMTableColumn *column, int row, Drawable d);
|
||||
void (*drawSelectedCell)(struct WMTableColumnDelegate *self,
|
||||
WMTableColumn *column, int row, Drawable d);
|
||||
WMTableColumn *column, int row, Drawable d);
|
||||
|
||||
void (*beginCellEdit)(struct WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row);
|
||||
int row);
|
||||
void (*endCellEdit)(struct WMTableColumnDelegate *self, WMTableColumn *column,
|
||||
int row);
|
||||
int row);
|
||||
} WMTableColumnDelegate;
|
||||
|
||||
|
||||
typedef struct W_TableViewDelegate {
|
||||
void *data;
|
||||
int (*numberOfRows)(struct W_TableViewDelegate *self,
|
||||
WMTableView *table);
|
||||
void *(*valueForCell)(struct W_TableViewDelegate *self,
|
||||
WMTableColumn *column, int row);
|
||||
void (*setValueForCell)(struct W_TableViewDelegate *self,
|
||||
WMTableColumn *column, int row, void *value);
|
||||
int (*numberOfRows)(struct W_TableViewDelegate *self,
|
||||
WMTableView *table);
|
||||
void *(*valueForCell)(struct W_TableViewDelegate *self,
|
||||
WMTableColumn *column, int row);
|
||||
void (*setValueForCell)(struct W_TableViewDelegate *self,
|
||||
WMTableColumn *column, int row, void *value);
|
||||
} WMTableViewDelegate;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
WMTableColumn *WMCreateTableColumn(char *title);
|
||||
|
||||
void WMSetTableColumnWidth(WMTableColumn *column, unsigned width);
|
||||
|
||||
void WMSetTableColumnConstraints(WMTableColumn *column,
|
||||
unsigned minWidth, unsigned maxWidth);
|
||||
|
||||
void WMSetTableColumnDelegate(WMTableColumn *column,
|
||||
WMTableColumnDelegate *delegate);
|
||||
void WMSetTableColumnConstraints(WMTableColumn *column,
|
||||
unsigned minWidth, unsigned maxWidth);
|
||||
|
||||
void WMSetTableColumnDelegate(WMTableColumn *column,
|
||||
WMTableColumnDelegate *delegate);
|
||||
|
||||
|
||||
WMTableView *WMGetTableColumnTableView(WMTableColumn *column);
|
||||
|
||||
|
||||
void WMSetTableColumnId(WMTableColumn *column, void *id);
|
||||
|
||||
void *WMGetTableColumnId(WMTableColumn *column);
|
||||
|
||||
|
||||
|
||||
WMTableView *WMCreateTableView(WMWidget *parent);
|
||||
|
||||
|
||||
|
||||
void WMSetTableViewDataSource(WMTableView *table, void *source);
|
||||
|
||||
void *WMGetTableViewDataSource(WMTableView *table);
|
||||
|
||||
void WMSetTableViewHeaderHeight(WMTableView *table, unsigned height);
|
||||
|
||||
|
||||
void WMAddTableViewColumn(WMTableView *table, WMTableColumn *column);
|
||||
|
||||
void WMSetTableViewDelegate(WMTableView *table, WMTableViewDelegate *delegate);
|
||||
|
||||
void WMSetTableViewAction(WMTableView *table, WMAction *action,
|
||||
void *clientData);
|
||||
void WMSetTableViewAction(WMTableView *table, WMAction *action,
|
||||
void *clientData);
|
||||
|
||||
void *WMGetTableViewClickedColumn(WMTableView *table);
|
||||
|
||||
int WMGetTableViewClickedRow(WMTableView *table);
|
||||
|
||||
WMArray *WMGetTableViewSelectedRows(WMTableView *table);
|
||||
|
||||
|
||||
WMView *WMGetTableViewDocumentView(WMTableView *table);
|
||||
|
||||
void WMEditTableViewRow(WMTableView *table, int row);
|
||||
|
||||
void WMSelectTableViewRow(WMTableView *table, int row);
|
||||
|
||||
void *WMTableViewDataForCell(WMTableView *table, WMTableColumn *column,
|
||||
int row);
|
||||
void *WMTableViewDataForCell(WMTableView *table, WMTableColumn *column,
|
||||
int row);
|
||||
|
||||
void WMSetTableViewDataForCell(WMTableView *table, WMTableColumn *column,
|
||||
int row, void *data);
|
||||
|
||||
WMRect WMTableViewRectForCell(WMTableView *table, WMTableColumn *column,
|
||||
int row);
|
||||
void WMSetTableViewDataForCell(WMTableView *table, WMTableColumn *column,
|
||||
int row, void *data);
|
||||
|
||||
WMRect WMTableViewRectForCell(WMTableView *table, WMTableColumn *column,
|
||||
int row);
|
||||
|
||||
void WMSetTableViewBackgroundColor(WMTableView *table, WMColor *color);
|
||||
|
||||
void WMSetTableViewGridColor(WMTableView *table, WMColor *color);
|
||||
|
||||
void WMSetTableViewRowHeight(WMTableView *table, int height);
|
||||
|
||||
void WMReloadTableView(WMTableView *table);
|
||||
|
||||
void WMSetTableViewRowHeight(WMTableView *table, int height);
|
||||
|
||||
void WMReloadTableView(WMTableView *table);
|
||||
|
||||
void WMNoteTableViewNumberOfRowsChanged(WMTableView *table);
|
||||
|
||||
void WMScrollTableViewRowToVisible(WMTableView *table, int row);
|
||||
|
||||
void WMScrollTableViewRowToVisible(WMTableView *table, int row);
|
||||
|
||||
void WMSetTableViewHasHorizontalScroller(WMTableView *tPtr, Bool flag);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -16,7 +16,9 @@ lib_LIBRARIES = libWINGs.a libWUtil.a
|
||||
LDADD= libWINGs.a $(top_builddir)/wrlib/libwraster.la @INTLIBS@
|
||||
|
||||
|
||||
EXTRA_DIST = BUGS
|
||||
EXTRA_DIST = BUGS python/Makefile python/README python/WINGs.i \
|
||||
python/WINGs.py python/setup.py python/test.py
|
||||
|
||||
|
||||
# wbutton.c
|
||||
libWINGs_a_SOURCES = \
|
||||
@@ -25,6 +27,7 @@ libWINGs_a_SOURCES = \
|
||||
configuration.c \
|
||||
connection.c \
|
||||
data.c \
|
||||
dragcommon.c \
|
||||
dragdestination.c \
|
||||
dragsource.c \
|
||||
error.c \
|
||||
@@ -105,11 +108,25 @@ libWUtil_a_SOURCES = \
|
||||
wutil.c
|
||||
|
||||
|
||||
CPPFLAGS = @CPPFLAGS@ -DLOCALEDIR=\"$(NLSDIR)\"
|
||||
AM_CPPFLAGS = -DLOCALEDIR=\"$(NLSDIR)\"
|
||||
|
||||
AM_CFLAGS = @NOSTRICTALIASING@
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/WINGs/WINGs -I$(top_srcdir)/wrlib -I$(top_srcdir)/src \
|
||||
-DRESOURCE_PATH=\"$(datadir)/WINGs\" @HEADER_SEARCH_PATH@ -DDEBUG
|
||||
-DRESOURCE_PATH=\"$(datadir)/WINGs\" @XFTFLAGS@ @HEADER_SEARCH_PATH@ -DDEBUG
|
||||
|
||||
|
||||
wcolorpanel.o: wcolorpanel.c
|
||||
$(COMPILE) -c -DRGBTXT="\"@X_LIBRARY_PATH@/X11/rgb.txt\"" $<
|
||||
|
||||
DISTCLEANFILES = WINGs.pc
|
||||
|
||||
install-exec-local:
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(libdir)/pkgconfig
|
||||
@list='WINGs.pc'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
echo "$(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/pkgconfig/"; \
|
||||
$(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/pkgconfig/; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
164
WINGs/NEWS
164
WINGs/NEWS
@@ -1,3 +1,167 @@
|
||||
*** Mon Oct 14 19:42:42 EEST 2002 - Dan
|
||||
|
||||
Double buffering
|
||||
----------------
|
||||
|
||||
To avoid flickering caused by redrawing the widgets on Expose events, a
|
||||
double buffering tehnique was implemented for most of the widgets.
|
||||
This flickering effect has gotten more vizible with the introduction
|
||||
of antialiased fonts. If with normal text one can redraw the text over the
|
||||
old one over and over again without any degradation of the text (new pixels
|
||||
simply overwrite old pixels), with antialiased text the situation is
|
||||
different and text gets quickly corrupted. To avoid this corruption, one
|
||||
needs to first erase the area where the text will go, which can cause the
|
||||
before mentioned flickering.
|
||||
The double buffer is implemented to solve this issue.
|
||||
|
||||
This is a change that that will be automatically available for any WINGs
|
||||
applications and will require no change in the existing code.
|
||||
However there is an exception from this in case of WMList if you delegate
|
||||
the drawing of items to userspace (read below for the compelte details).
|
||||
|
||||
|
||||
*** Mon Oct 14 22:07:42 EEST 2002 - Dan
|
||||
|
||||
WMList change
|
||||
-------------
|
||||
|
||||
In case of WMList there is the posibility to delegate the drawing of the
|
||||
list items to the application that is linked with WINGs, and this code will
|
||||
not be inside the WINGs library, but in userland. Since we use the double
|
||||
buffering tehnique in this case too (to allow all widgets based on WMList
|
||||
and the ones that draw their list items by themselves to benefit from the
|
||||
double buffering advantage automatically), we no longer pass the window to
|
||||
the user code doing item drawing, but instead pass this pixmap in which we
|
||||
draw before copying to the real window.
|
||||
|
||||
Since one cannot use XClearWindow() or XClearArea() on pixmaps, but only on
|
||||
windows, if the code drawing list items used to call these functions to clear
|
||||
the item area before drawing it needs to change to using XFillRectangle()
|
||||
instead.
|
||||
|
||||
With this change it also means that there is no longer any need to do any
|
||||
double buffering in the user code, since it's already done by WINGs.
|
||||
|
||||
|
||||
*** Mon Oct 14 19:28:35 EEST 2002 - Dan
|
||||
|
||||
API change
|
||||
----------
|
||||
|
||||
WMDrawString() and WMDrawImageString() no longer take a GC as argument.
|
||||
Instead WMDrawString() takes a WMColor* as the color for the string to be
|
||||
drawn, while WMDrawImageString() takes 2 WMColor* arguments in place of the
|
||||
old GC: first for text color and second for background color.
|
||||
|
||||
This change is required to support extending WMFont to allow it to handle
|
||||
antialiased fonts through the XFree86 Xft2 extension.
|
||||
|
||||
This also has the advantage of hiding low level X11 details and use WINGs
|
||||
internat objects instead.
|
||||
|
||||
To fix your old code to work with the new WINGs API you need to replace the
|
||||
GC passed to WMDraw***String() in your code with a WMColor*.
|
||||
Most of the old code used to be like this:
|
||||
|
||||
WMDrawString(screen, window, WMColorGC(color), font, x, y, txt, len);
|
||||
|
||||
for the new API it should be replaced by:
|
||||
|
||||
WMDrawString(screen, window, color, font, x, y, txt, len);
|
||||
|
||||
However if you used a particular GC created by yourself to suit your special
|
||||
needs, you need to pass a color which is the same as the foreground color of
|
||||
that gc.
|
||||
|
||||
For WMDrawImageString(), from:
|
||||
|
||||
WMDrawImageString(screen, window, gc, font, x, y, txt, len);
|
||||
|
||||
becomes
|
||||
|
||||
WMDrawImageString(screen, window, textColor, backColor, font, x, y, txt, len);
|
||||
|
||||
where textColor and backColor are declared like:
|
||||
|
||||
WMColor *textColor, *backColor;
|
||||
|
||||
and have the color of the foreground respective the background of the old gc.
|
||||
|
||||
|
||||
|
||||
*** Wed Oct 9 07:10:04 EEST 2002 - Dan
|
||||
|
||||
Antialiased font support
|
||||
------------------------
|
||||
|
||||
With the addition of Xft2 support in the WINGs library, now WINGs can display
|
||||
antialiased text with TrueType or any scalable fonts.
|
||||
|
||||
Antialiased text is enabled by default, but can be disabled by adding
|
||||
|
||||
AntialiasedText = NO; in ~/GNUstep/Defaults/WMGLOBAL
|
||||
|
||||
This will disable antialiased text for any WINGs based application. If you
|
||||
only want to disable them for a specific application only, like WindowMaker
|
||||
for example, then add the same option in the applications configuration file,
|
||||
in this case ~/GNUstep/Defaults/WindowMaker
|
||||
|
||||
Note that bitmapped fonts look much better than TrueType when antialiasing is
|
||||
disabled.
|
||||
|
||||
|
||||
*** Mon Sep 09 06:58:30 EEST 2002 - Dan
|
||||
|
||||
New delegate for the WMConnection class
|
||||
---------------------------------------
|
||||
|
||||
ConnectionDelegate structure has a new member: canResumeSending.
|
||||
The purpose of this callback is to notify you that you can resume sending
|
||||
data over a WMConnection.
|
||||
It works in the following manner:
|
||||
|
||||
WMSendConnectionData() can return 3 values: -1, 0, 1
|
||||
|
||||
-1 - means that the connection has died. you should stop sending data and
|
||||
close the connection ASAP.
|
||||
1 - means that the data was succesfully sent
|
||||
0 - means that the data (or part of it) was not sent. however, it was saved
|
||||
in a queue and the library will try to send it later when possible.
|
||||
|
||||
if the return value is 1, you can continue to send the next message, and so
|
||||
on, until the return value of such a send call will be 0.
|
||||
After it returns 0 you can continue sending, however, the data will not be
|
||||
sent over the connection because the operating system cannot accept any more
|
||||
data for the moment. Instead it will be queued inside the library, making your
|
||||
program's memory footprint increase. If the ammount of data you need to
|
||||
send is limited and not too big, this shouldn't be a problem, because your
|
||||
data will be queued and sent when the operating system will notify the
|
||||
library that sending is possible again.
|
||||
If this is the case you can just ignore the output of WMSendConnectionData()
|
||||
and not set a callback for canResumeSending.
|
||||
|
||||
However, if the ammount of data you have to send is undetermined and you
|
||||
also want to keep a small memory footprint for your program (so that it
|
||||
won't grow until it uses all your available memory ;) ), you will have to
|
||||
stop sending data over the connection as soon as WMSendConnectionData()
|
||||
returns with 0. Then you should somehow mark this situation in your program
|
||||
to avoid it trying to send anymore data until notified that it can resume.
|
||||
(You should have also set a canResumeSending callback when you initialized
|
||||
your WMConnection object because else you cannot be notified when to resume.)
|
||||
|
||||
Now, when you receive such a 0 from the send operation, your last sent data
|
||||
is put in a queue inside the library. At a later time when the operating
|
||||
system notifies the library that sending is possible again, the library will
|
||||
resume to send the data that is saved in the queue. After it will be able to
|
||||
send all the data in the queue, the canResumeSending callback will be
|
||||
called, letting you know that not only you can resume sending because the
|
||||
operating system is again able to send data, but also that the queue was
|
||||
completely flushed.
|
||||
|
||||
From the canResumeSending callback, you should again update the status of
|
||||
your program marking that it can send again, and then resume sending the
|
||||
data from where you were left.
|
||||
|
||||
|
||||
*** Thu Oct 04 06:00:09 EEST 2001 -Dan
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ is inspired in OpenStep and it's implementation borrows some ideas
|
||||
from Tk. It has a reasonable set of widgets, sufficient for building
|
||||
small applications (like a CDPlayer or hacking something like rxvt). It
|
||||
also has other functions that are usefull for applications, like a
|
||||
User Defaults like configuration manager and a notification system.
|
||||
User Defaults alike configuration manager and a notification system.
|
||||
|
||||
The library is limited and it's design is a little sloppy,
|
||||
so it's not intended to build large or complex applications, like
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
Makefile Makefile.in
|
||||
.psrc .inslog2 tca.map tca.log
|
||||
*.rpt
|
||||
.psrc .inslog2 tca.map tca.log pchdir *.rpt
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
Or a delegate to be called when the list selection change.
|
||||
- add some way to modify speed when scrolling WMList, depending on how
|
||||
far the mouse is moved outside of the list.
|
||||
- clean up header files of declared but not implemented anywhere functions
|
||||
- implement a generic WMChangeFontAttribute(WMFont *font, enum attributes)
|
||||
function
|
||||
|
||||
|
||||
- optimize color allocation for repeated colors
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
Makefile Makefile.in
|
||||
testtext testcolorpanel testmywidget wmfile wmquery wtest
|
||||
.libs
|
||||
.psrc .inslog2 tca.map tca.log
|
||||
*.rpt
|
||||
.psrc .inslog2 tca.map tca.log pchdir *.rpt
|
||||
|
||||
@@ -5,7 +5,7 @@ AUTOMAKE_OPTIONS = no-dependencies
|
||||
noinst_PROGRAMS = wtest wmquery wmfile testmywidget
|
||||
|
||||
LDADD= $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la \
|
||||
@INTLIBS@
|
||||
@XFTLIBS@ @INTLIBS@
|
||||
|
||||
|
||||
testmywidget_SOURCES = testmywidget.c mywidget.c mywidget.h
|
||||
@@ -16,6 +16,7 @@ wtest_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a
|
||||
EXTRA_DIST = logo.xpm upbtn.xpm wm.html wm.png
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/WINGs -I$(top_srcdir)/wrlib -I$(top_srcdir)/src \
|
||||
-DRESOURCE_PATH=\"$(datadir)/WINGs\" @HEADER_SEARCH_PATH@ -DDEBUG
|
||||
-DRESOURCE_PATH=\"$(datadir)/WINGs\" @XFTFLAGS@ @HEADER_SEARCH_PATH@ \
|
||||
-DDEBUG
|
||||
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
* Demo user widget for WINGs
|
||||
*
|
||||
* Author: Alfredo K. Kojima
|
||||
*
|
||||
*
|
||||
* This file is in the public domain.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* Include the WINGs private data header.
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
#include <WINGs/WINGsP.h>
|
||||
|
||||
@@ -25,14 +25,14 @@
|
||||
* Define the widget "class"
|
||||
*/
|
||||
typedef struct W_MyWidget {
|
||||
/* these two fields must be present in all your widgets in this
|
||||
/* these two fields must be present in all your widgets in this
|
||||
* exact position */
|
||||
W_Class widgetClass;
|
||||
WMView *view;
|
||||
|
||||
|
||||
/* put your stuff here */
|
||||
char *text;
|
||||
|
||||
|
||||
} _MyWidget;
|
||||
|
||||
|
||||
@@ -50,16 +50,16 @@ static void handleActionEvents(XEvent *event, void *data);
|
||||
|
||||
|
||||
/*
|
||||
* Delegates
|
||||
* Delegates
|
||||
* See the source for the other widgets to see how to use.
|
||||
* You won't need to use this most of the time.
|
||||
*/
|
||||
static W_ViewDelegate _MyWidgetDelegate = {
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
@@ -76,9 +76,9 @@ InitMyWidget(WMScreen *scr)
|
||||
{
|
||||
/* register our widget with WINGs and get our widget class ID */
|
||||
if (!myWidgetClass) {
|
||||
myWidgetClass = W_RegisterUserWidget();
|
||||
myWidgetClass = W_RegisterUserWidget();
|
||||
}
|
||||
|
||||
|
||||
return myWidgetClass;
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ MyWidget*
|
||||
CreateMyWidget(WMWidget *parent)
|
||||
{
|
||||
MyWidget *mPtr;
|
||||
|
||||
|
||||
/* allocate some storage for our new widget instance */
|
||||
mPtr = wmalloc(sizeof(MyWidget));
|
||||
/* initialize it */
|
||||
@@ -99,17 +99,17 @@ CreateMyWidget(WMWidget *parent)
|
||||
/* set the class ID */
|
||||
mPtr->widgetClass = myWidgetClass;
|
||||
|
||||
/*
|
||||
/*
|
||||
* Create the view for our widget.
|
||||
* Note: the Window for the view is only created after the view is
|
||||
* realized with W_RealizeView()
|
||||
*
|
||||
*
|
||||
* Consider the returned view as read-only.
|
||||
*/
|
||||
mPtr->view = W_CreateView(W_VIEW(parent));
|
||||
if (!mPtr->view) {
|
||||
wfree(mPtr);
|
||||
return NULL;
|
||||
wfree(mPtr);
|
||||
return NULL;
|
||||
}
|
||||
/* always do this */
|
||||
mPtr->view->self = mPtr;
|
||||
@@ -121,8 +121,8 @@ CreateMyWidget(WMWidget *parent)
|
||||
* Intercept some events for our widget, so that we can handle them.
|
||||
*/
|
||||
WMCreateEventHandler(mPtr->view, ExposureMask /* this allows us to know when we should paint */
|
||||
|StructureNotifyMask, /* this allows us to know things like when we are destroyed */
|
||||
handleEvents, mPtr);
|
||||
|StructureNotifyMask, /* this allows us to know things like when we are destroyed */
|
||||
handleEvents, mPtr);
|
||||
|
||||
/*
|
||||
* Intercept some other events. This could be merged with the above
|
||||
@@ -146,14 +146,14 @@ paintMyWidget(_MyWidget *mPtr)
|
||||
|
||||
|
||||
if (mPtr->text) {
|
||||
|
||||
color = WMWhiteColor(scr);
|
||||
|
||||
W_PaintText(mPtr->view, mPtr->view->window, scr->normalFont, 0, 0,
|
||||
mPtr->view->size.width, WACenter, WMColorGC(color),
|
||||
False, mPtr->text, strlen(mPtr->text));
|
||||
|
||||
WMReleaseColor(color);
|
||||
|
||||
color = WMWhiteColor(scr);
|
||||
|
||||
W_PaintText(mPtr->view, mPtr->view->window, scr->normalFont, 0, 0,
|
||||
mPtr->view->size.width, WACenter, color,
|
||||
False, mPtr->text, strlen(mPtr->text));
|
||||
|
||||
WMReleaseColor(color);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,17 +165,17 @@ handleEvents(XEvent *event, void *data)
|
||||
_MyWidget *mPtr = (_MyWidget*)data;
|
||||
|
||||
|
||||
switch (event->type) {
|
||||
case Expose:
|
||||
if (event->xexpose.count!=0)
|
||||
break;
|
||||
paintMyWidget(mPtr);
|
||||
break;
|
||||
|
||||
case DestroyNotify:
|
||||
destroyMyWidget(mPtr);
|
||||
break;
|
||||
|
||||
switch (event->type) {
|
||||
case Expose:
|
||||
if (event->xexpose.count!=0)
|
||||
break;
|
||||
paintMyWidget(mPtr);
|
||||
break;
|
||||
|
||||
case DestroyNotify:
|
||||
destroyMyWidget(mPtr);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,10 +186,10 @@ handleActionEvents(XEvent *event, void *data)
|
||||
_MyWidget *mPtr = (_MyWidget*)data;
|
||||
|
||||
switch (event->type) {
|
||||
case ButtonPress:
|
||||
XBell(mPtr->view->screen->display, 100);
|
||||
XBell(mPtr->view->screen->display, 100);
|
||||
break;
|
||||
case ButtonPress:
|
||||
XBell(mPtr->view->screen->display, 100);
|
||||
XBell(mPtr->view->screen->display, 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,12 +200,12 @@ SetMyWidgetText(MyWidget *mPtr, char *text)
|
||||
CHECK_CLASS(mPtr, myWidgetClass);
|
||||
|
||||
if (mPtr->text)
|
||||
wfree(mPtr->text);
|
||||
|
||||
wfree(mPtr->text);
|
||||
|
||||
mPtr->text = wstrdup(text);
|
||||
|
||||
|
||||
if (W_VIEW_MAPPED(mPtr->view)) {
|
||||
paintMyWidget(mPtr);
|
||||
paintMyWidget(mPtr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,12 +215,12 @@ static void
|
||||
destroyMyWidget(_MyWidget *mPtr)
|
||||
{
|
||||
/*
|
||||
* Free all data we allocated for our widget.
|
||||
* Free all data we allocated for our widget.
|
||||
*/
|
||||
|
||||
|
||||
if (mPtr->text)
|
||||
wfree(mPtr->text);
|
||||
|
||||
wfree(mPtr->text);
|
||||
|
||||
wfree(mPtr);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
/*
|
||||
* Header for demo widget.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
typedef struct W_MyWidget MyWidget;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
|
||||
#include <WINGs/WINGs.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "mywidget.h"
|
||||
|
||||
@@ -21,30 +22,31 @@ int main(int argc, char **argv)
|
||||
|
||||
|
||||
WMInitializeApplication("Test", &argc, argv);
|
||||
|
||||
|
||||
if (!dpy) {
|
||||
wfatal("could not open display");
|
||||
exit(1);
|
||||
wfatal("could not open display");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
scr = WMCreateSimpleApplicationScreen(dpy);
|
||||
|
||||
/* init our widget */
|
||||
InitMyWidget(scr);
|
||||
|
||||
|
||||
win = WMCreateWindow(scr, "test");
|
||||
WMResizeWidget(win, 150, 50);
|
||||
|
||||
|
||||
thing = CreateMyWidget(win);
|
||||
SetMyWidgetText(thing, "The Test");
|
||||
WMResizeWidget(thing, 100, 20);
|
||||
WMMoveWidget(thing, 10, 10);
|
||||
|
||||
|
||||
WMRealizeWidget(win);
|
||||
WMMapSubwidgets(win);
|
||||
WMMapWidget(win);
|
||||
|
||||
|
||||
WMScreenMainLoop(scr);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
/*
|
||||
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
|
||||
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
Update: Franck Wolff <frawolff@club-internet.fr>
|
||||
-----------------------------------------------------------------------
|
||||
List of updated functions :
|
||||
- main :
|
||||
add -s option for a save panel...
|
||||
-----------------------------------------------------------------------
|
||||
*/
|
||||
Update: Franck Wolff <frawolff@club-internet.fr>
|
||||
-----------------------------------------------------------------------
|
||||
List of updated functions :
|
||||
- main :
|
||||
add -s option for a save panel...
|
||||
-----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "logo.xpm"
|
||||
|
||||
@@ -33,23 +34,23 @@ char *ProgName;
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"usage:\n"
|
||||
"\t%s [-options]\n"
|
||||
"\n"
|
||||
"options:\n"
|
||||
" -s\t\tSave panel (default open panel)\n"
|
||||
" -i <str>\tInitial directory (default /)\n"
|
||||
" -t <str>\tQuery window title (default none)\n"
|
||||
"\n"
|
||||
"information:\n"
|
||||
"\t%s pops up a WindowMaker style file selection panel.\n"
|
||||
"\n"
|
||||
"version:\n"
|
||||
"\t%s\n"
|
||||
,ProgName,ProgName,__DATE__
|
||||
);
|
||||
exit(0);
|
||||
fprintf(stderr,
|
||||
"usage:\n"
|
||||
"\t%s [-options]\n"
|
||||
"\n"
|
||||
"options:\n"
|
||||
" -s\t\tSave panel (default open panel)\n"
|
||||
" -i <str>\tInitial directory (default /)\n"
|
||||
" -t <str>\tQuery window title (default none)\n"
|
||||
"\n"
|
||||
"information:\n"
|
||||
"\t%s pops up a WindowMaker style file selection panel.\n"
|
||||
"\n"
|
||||
"version:\n"
|
||||
"\t%s\n"
|
||||
,ProgName,ProgName,__DATE__
|
||||
);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#define OPEN_PANEL_TYPE 0
|
||||
@@ -57,67 +58,69 @@ void usage(void)
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
Display *dpy = XOpenDisplay("");
|
||||
WMScreen *scr;
|
||||
WMPixmap *pixmap;
|
||||
WMOpenPanel *oPanel;
|
||||
WMSavePanel *sPanel;
|
||||
/* RImage *image;*/
|
||||
char *title = NULL;
|
||||
char *initial = "/";
|
||||
int ch;
|
||||
int panelType = OPEN_PANEL_TYPE;
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
Display *dpy = XOpenDisplay("");
|
||||
WMScreen *scr;
|
||||
WMPixmap *pixmap;
|
||||
WMOpenPanel *oPanel;
|
||||
WMSavePanel *sPanel;
|
||||
/* RImage *image;*/
|
||||
char *title = NULL;
|
||||
char *initial = "/";
|
||||
int ch;
|
||||
int panelType = OPEN_PANEL_TYPE;
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
|
||||
WMInitializeApplication("WMFile", &argc, argv);
|
||||
|
||||
ProgName = argv[0];
|
||||
|
||||
if (!dpy) {
|
||||
puts("could not open display");
|
||||
exit(1);
|
||||
}
|
||||
while((ch = getopt(argc, argv, "si:ht:")) != -1)
|
||||
switch(ch)
|
||||
{
|
||||
case 's':
|
||||
panelType = SAVE_PANEL_TYPE;
|
||||
break;
|
||||
case 'i':
|
||||
initial = optarg;
|
||||
break;
|
||||
case 't':
|
||||
title = optarg;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
if (!dpy) {
|
||||
puts("could not open display");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
WMInitializeApplication("WMFile", &argc, argv);
|
||||
|
||||
ProgName = argv[0];
|
||||
|
||||
while((ch = getopt(argc, argv, "si:ht:")) != -1)
|
||||
switch(ch)
|
||||
{
|
||||
case 's':
|
||||
panelType = SAVE_PANEL_TYPE;
|
||||
break;
|
||||
case 'i':
|
||||
initial = optarg;
|
||||
break;
|
||||
case 't':
|
||||
title = optarg;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
|
||||
for(; optind <argc; optind++)
|
||||
usage();
|
||||
usage();
|
||||
|
||||
scr = WMCreateSimpleApplicationScreen(dpy);
|
||||
|
||||
|
||||
|
||||
|
||||
pixmap = WMCreatePixmapFromXPMData(scr, GNUSTEP_XPM);
|
||||
WMSetApplicationIconPixmap(scr, pixmap);
|
||||
WMReleasePixmap(pixmap);
|
||||
if (panelType == SAVE_PANEL_TYPE) {
|
||||
sPanel = WMGetSavePanel(scr);
|
||||
if (WMRunModalFilePanelForDirectory(sPanel, NULL, initial,
|
||||
/*title*/ NULL, NULL) == True)
|
||||
printf("%s\n", WMGetFilePanelFileName(sPanel));
|
||||
else
|
||||
printf("\n");
|
||||
sPanel = WMGetSavePanel(scr);
|
||||
if (WMRunModalFilePanelForDirectory(sPanel, NULL, initial,
|
||||
/*title*/ NULL, NULL) == True)
|
||||
printf("%s\n", WMGetFilePanelFileName(sPanel));
|
||||
else
|
||||
printf("\n");
|
||||
} else {
|
||||
oPanel = WMGetOpenPanel(scr);
|
||||
if (WMRunModalFilePanelForDirectory(oPanel, NULL, initial,
|
||||
/*title*/ NULL, NULL) == True)
|
||||
printf("%s\n", WMGetFilePanelFileName(oPanel));
|
||||
else
|
||||
printf("\n");
|
||||
oPanel = WMGetOpenPanel(scr);
|
||||
if (WMRunModalFilePanelForDirectory(oPanel, NULL, initial,
|
||||
/*title*/ NULL, NULL) == True)
|
||||
printf("%s\n", WMGetFilePanelFileName(oPanel));
|
||||
else
|
||||
printf("\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/*
|
||||
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
|
||||
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
|
||||
*/
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "logo.xpm"
|
||||
|
||||
@@ -22,78 +23,81 @@ wAbort()
|
||||
|
||||
char *ProgName;
|
||||
|
||||
void usage(void)
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"usage:\n"
|
||||
"\t%s [-options]\n"
|
||||
"\n"
|
||||
"options:\n"
|
||||
" -i <str>\tInitial entry contents (default none)\n"
|
||||
" -p <str>\tPrompt message (default none)\n"
|
||||
" -t <str>\tQuery window title (default none)\n"
|
||||
"\n"
|
||||
"information:\n"
|
||||
"\t%s pops up a WindowMaker style input panel.\n"
|
||||
"\n"
|
||||
"version:\n"
|
||||
"\t%s\n"
|
||||
,ProgName,ProgName,__DATE__
|
||||
);
|
||||
exit(0);
|
||||
fprintf(stderr,
|
||||
"usage:\n"
|
||||
"\t%s [-options]\n"
|
||||
"\n"
|
||||
"options:\n"
|
||||
" -i <str>\tInitial entry contents (default none)\n"
|
||||
" -p <str>\tPrompt message (default none)\n"
|
||||
" -t <str>\tQuery window title (default none)\n"
|
||||
"\n"
|
||||
"information:\n"
|
||||
"\t%s pops up a WindowMaker style input panel.\n"
|
||||
"\n"
|
||||
"version:\n"
|
||||
"\t%s\n"
|
||||
,ProgName,ProgName,__DATE__
|
||||
);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
Display *dpy = XOpenDisplay("");
|
||||
WMScreen *scr;
|
||||
WMPixmap *pixmap;
|
||||
char *title = NULL;
|
||||
char *prompt = NULL;
|
||||
char *initial = NULL;
|
||||
char *result = NULL;
|
||||
int ch;
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
Display *dpy = XOpenDisplay("");
|
||||
WMScreen *scr;
|
||||
WMPixmap *pixmap;
|
||||
char *title = NULL;
|
||||
char *prompt = NULL;
|
||||
char *initial = NULL;
|
||||
char *result = NULL;
|
||||
int ch;
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
|
||||
WMInitializeApplication("WMQuery", &argc, argv);
|
||||
|
||||
ProgName = argv[0];
|
||||
WMInitializeApplication("WMQuery", &argc, argv);
|
||||
|
||||
if (!dpy) {
|
||||
puts("could not open display");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
while((ch = getopt(argc, argv, "i:hp:t:")) != -1)
|
||||
switch(ch)
|
||||
{
|
||||
case 'i':
|
||||
initial = optarg;
|
||||
break;
|
||||
case 'p':
|
||||
prompt = optarg;
|
||||
break;
|
||||
case 't':
|
||||
title = optarg;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
ProgName = argv[0];
|
||||
|
||||
if (!dpy) {
|
||||
puts("could not open display");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for(; optind <argc; optind++)
|
||||
usage();
|
||||
while((ch = getopt(argc, argv, "i:hp:t:")) != -1)
|
||||
switch(ch)
|
||||
{
|
||||
case 'i':
|
||||
initial = optarg;
|
||||
break;
|
||||
case 'p':
|
||||
prompt = optarg;
|
||||
break;
|
||||
case 't':
|
||||
title = optarg;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
|
||||
for(; optind <argc; optind++)
|
||||
usage();
|
||||
|
||||
|
||||
scr = WMCreateSimpleApplicationScreen(dpy);
|
||||
scr = WMCreateSimpleApplicationScreen(dpy);
|
||||
|
||||
pixmap = WMCreatePixmapFromXPMData(scr, GNUSTEP_XPM);
|
||||
pixmap = WMCreatePixmapFromXPMData(scr, GNUSTEP_XPM);
|
||||
|
||||
WMSetApplicationIconPixmap(scr, pixmap); WMReleasePixmap(pixmap);
|
||||
WMSetApplicationIconPixmap(scr, pixmap); WMReleasePixmap(pixmap);
|
||||
|
||||
if ((result = WMRunInputPanel(scr, NULL, title, prompt, initial, "OK", "Cancel")) != NULL)
|
||||
printf("%s\n", result);
|
||||
else
|
||||
printf("\n");
|
||||
return 0;
|
||||
if ((result = WMRunInputPanel(scr, NULL, title, prompt, initial, "OK", "Cancel")) != NULL)
|
||||
printf("%s\n", result);
|
||||
else
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,13 +5,14 @@
|
||||
#include <WINGs/WINGs.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* You need to define this function to link any program to WINGs.
|
||||
* (this is no longer required as there is a default abort handler in WINGs)
|
||||
* This will be called when the application will be terminated because
|
||||
* on a fatal error.
|
||||
* of a fatal error (only for memory allocation failures ATM).
|
||||
*/
|
||||
void
|
||||
wAbort()
|
||||
@@ -33,7 +34,7 @@ closeAction(WMWidget *self, void *data)
|
||||
windowCount--;
|
||||
printf("window closed, window count = %d\n", windowCount);
|
||||
if (windowCount < 1)
|
||||
exit(0);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +66,7 @@ testFontPanel(WMScreen *scr)
|
||||
|
||||
WMShowFontPanel(panel);
|
||||
|
||||
/* WMFreeFontPanel(panel);*/
|
||||
/*WMFreeFontPanel(panel);*/
|
||||
}
|
||||
|
||||
|
||||
@@ -77,15 +78,15 @@ testFrame(WMScreen *scr)
|
||||
WMFrame *frame;
|
||||
int i;
|
||||
static char* titles[] = {
|
||||
"AboveTop",
|
||||
"AtTop",
|
||||
"BelowTop",
|
||||
"AboveBottom",
|
||||
"AtBottom",
|
||||
"BelowBottom"
|
||||
"AboveTop",
|
||||
"AtTop",
|
||||
"BelowTop",
|
||||
"AboveBottom",
|
||||
"AtBottom",
|
||||
"BelowBottom"
|
||||
};
|
||||
static WMTitlePosition pos[] = {
|
||||
WTPAboveTop,
|
||||
WTPAboveTop,
|
||||
WTPAtTop,
|
||||
WTPBelowTop,
|
||||
WTPAboveBottom,
|
||||
@@ -101,11 +102,11 @@ testFrame(WMScreen *scr)
|
||||
WMResizeWidget(win, 400, 300);
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
frame = WMCreateFrame(win);
|
||||
WMMoveWidget(frame, 8+(i%3)*130, 8+(i/3)*130);
|
||||
WMResizeWidget(frame, 120, 120);
|
||||
WMSetFrameTitle(frame, titles[i]);
|
||||
WMSetFrameTitlePosition(frame, pos[i]);
|
||||
frame = WMCreateFrame(win);
|
||||
WMMoveWidget(frame, 8+(i%3)*130, 8+(i/3)*130);
|
||||
WMResizeWidget(frame, 120, 120);
|
||||
WMSetFrameTitle(frame, titles[i]);
|
||||
WMSetFrameTitlePosition(frame, pos[i]);
|
||||
}
|
||||
|
||||
WMRealizeWidget(win);
|
||||
@@ -115,14 +116,14 @@ testFrame(WMScreen *scr)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
resizedWindow(void *self, WMNotification *notif)
|
||||
{
|
||||
WMView *view = (WMView*)WMGetNotificationObject(notif);
|
||||
WMSize size = WMGetViewSize(view);
|
||||
/*static void
|
||||
resizedWindow(void *self, WMNotification *notif)
|
||||
{
|
||||
WMView *view = (WMView*)WMGetNotificationObject(notif);
|
||||
WMSize size = WMGetViewSize(view);
|
||||
|
||||
WMResizeWidget((WMWidget*)self, size.width, size.height);
|
||||
}
|
||||
WMResizeWidget((WMWidget*)self, size.width, size.height);
|
||||
}*/
|
||||
|
||||
void
|
||||
testBox(WMScreen *scr)
|
||||
@@ -138,45 +139,39 @@ testBox(WMScreen *scr)
|
||||
win = WMCreateWindow(scr, "testBox");
|
||||
WMSetWindowTitle(win, "Box");
|
||||
WMSetWindowCloseAction(win, closeAction, NULL);
|
||||
|
||||
WMSetViewNotifySizeChanges(WMWidgetView(win), True);
|
||||
WMResizeWidget(win, 400, 300);
|
||||
|
||||
box = WMCreateBox(win);
|
||||
WMSetBoxBorderWidth(box, 5);
|
||||
|
||||
WMAddNotificationObserver(resizedWindow, box,
|
||||
WMViewSizeDidChangeNotification,
|
||||
WMWidgetView(win));
|
||||
WMResizeWidget(win, 400, 300);
|
||||
|
||||
WMSetViewExpandsToParent(WMWidgetView(box), 0, 0, 0, 0);
|
||||
|
||||
/* WMSetBoxHorizontal(box, True); */
|
||||
/*WMSetBoxHorizontal(box, True);*/
|
||||
for (i = 0; i < 4; i++) {
|
||||
btn = WMCreateCommandButton(box);
|
||||
WMSetButtonText(btn, "bla");
|
||||
WMMapWidget(btn);
|
||||
WMAddBoxSubview(box, WMWidgetView(btn), i&1, True, 20, 0, 5);
|
||||
btn = WMCreateCommandButton(box);
|
||||
WMSetButtonText(btn, "bla");
|
||||
WMMapWidget(btn);
|
||||
WMAddBoxSubview(box, WMWidgetView(btn), i&1, True, 20, 0, 5);
|
||||
}
|
||||
|
||||
|
||||
pop = WMCreatePopUpButton(box);
|
||||
WMAddPopUpButtonItem(pop, "ewqeq");
|
||||
WMAddPopUpButtonItem(pop, "ewqeqrewrw");
|
||||
WMAddBoxSubview(box, WMWidgetView(pop), False, True, 20, 0, 5);
|
||||
WMMapWidget(pop);
|
||||
|
||||
|
||||
hbox = WMCreateBox(box);
|
||||
WMSetBoxHorizontal(hbox, True);
|
||||
WMAddBoxSubview(box, WMWidgetView(hbox), False, True, 24, 0, 0);
|
||||
WMMapWidget(hbox);
|
||||
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
btn = WMCreateCommandButton(hbox);
|
||||
WMSetButtonText(btn, "bla");
|
||||
WMMapWidget(btn);
|
||||
WMAddBoxSubview(hbox, WMWidgetView(btn), 1, True, 60, 0, i<3?5:0);
|
||||
btn = WMCreateCommandButton(hbox);
|
||||
WMSetButtonText(btn, "bla");
|
||||
WMMapWidget(btn);
|
||||
WMAddBoxSubview(hbox, WMWidgetView(btn), 1, True, 60, 0, i<3?5:0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
WMRealizeWidget(win);
|
||||
WMMapSubwidgets(win);
|
||||
WMMapWidget(win);
|
||||
@@ -246,17 +241,17 @@ testList(WMScreen *scr)
|
||||
list = WMCreateList(win);
|
||||
/*WMSetListAllowEmptySelection(list, True);*/
|
||||
WMMoveWidget(list, 10, 40);
|
||||
for (i=0; i<50; i++) {
|
||||
sprintf(text, "Item %i", i);
|
||||
WMAddListItem(list, text);
|
||||
for (i=0; i<105; i++) {
|
||||
sprintf(text, "Item %i", i);
|
||||
WMAddListItem(list, text);
|
||||
}
|
||||
mlist = WMCreateList(win);
|
||||
WMSetListAllowMultipleSelection(mlist, True);
|
||||
/*WMSetListAllowEmptySelection(mlist, True);*/
|
||||
WMMoveWidget(mlist, 210, 40);
|
||||
for (i=0; i<135; i++) {
|
||||
sprintf(text, "Item %i", i);
|
||||
WMAddListItem(mlist, text);
|
||||
sprintf(text, "Item %i", i);
|
||||
WMAddListItem(mlist, text);
|
||||
}
|
||||
|
||||
label = WMCreateLabel(win);
|
||||
@@ -277,9 +272,9 @@ testList(WMScreen *scr)
|
||||
WMSetListDoubleAction(mlist, doubleClick, mlabel);
|
||||
|
||||
WMAddNotificationObserver(listSelectionObserver, label,
|
||||
WMListSelectionDidChangeNotification, list);
|
||||
WMListSelectionDidChangeNotification, list);
|
||||
WMAddNotificationObserver(listSelectionObserver, mlabel,
|
||||
WMListSelectionDidChangeNotification, mlist);
|
||||
WMListSelectionDidChangeNotification, mlist);
|
||||
|
||||
|
||||
WMRealizeWidget(win);
|
||||
@@ -294,14 +289,14 @@ testButton(WMScreen *scr)
|
||||
WMWindow *win;
|
||||
int i;
|
||||
char *types[] = {
|
||||
"MomentaryPush",
|
||||
"PushOnPushOff",
|
||||
"Toggle",
|
||||
"Switch",
|
||||
"Radio",
|
||||
"MomentaryChange",
|
||||
"OnOff",
|
||||
"MomentaryLigh"
|
||||
"MomentaryPush",
|
||||
"PushOnPushOff",
|
||||
"Toggle",
|
||||
"Switch",
|
||||
"Radio",
|
||||
"MomentaryChange",
|
||||
"OnOff",
|
||||
"MomentaryLigh"
|
||||
};
|
||||
|
||||
windowCount++;
|
||||
@@ -313,11 +308,11 @@ testButton(WMScreen *scr)
|
||||
WMSetWindowCloseAction(win, closeAction, NULL);
|
||||
|
||||
for (i = 1; i < 9; i++) {
|
||||
WMButton *b;
|
||||
b = WMCreateButton(win, i);
|
||||
WMResizeWidget(b, 150, 24);
|
||||
WMMoveWidget(b, 20, i*30);
|
||||
WMSetButtonText(b, types[i-1]);
|
||||
WMButton *b;
|
||||
b = WMCreateButton(win, i);
|
||||
WMResizeWidget(b, 150, 24);
|
||||
WMMoveWidget(b, 20, i*30);
|
||||
WMSetButtonText(b, types[i-1]);
|
||||
}
|
||||
|
||||
WMRealizeWidget(win);
|
||||
@@ -343,6 +338,9 @@ testGradientButtons(WMScreen *scr)
|
||||
WMSetWindowTitle(win, "Gradiented Button Demo");
|
||||
WMResizeWidget(win, 300, 200);
|
||||
|
||||
WMSetWindowCloseAction(win, closeAction, NULL);
|
||||
|
||||
|
||||
light.red = 0x90;
|
||||
light.green = 0x85;
|
||||
light.blue = 0x90;
|
||||
@@ -406,7 +404,7 @@ testGradientButtons(WMScreen *scr)
|
||||
WMSetButtonTextColor(btn, color);
|
||||
|
||||
WMSetBalloonTextForView("This is yet another button.\nBut the balloon has 3 lines.\nYay!",
|
||||
WMWidgetView(btn));
|
||||
WMWidgetView(btn));
|
||||
|
||||
WMReleaseColor(color);
|
||||
WMReleaseColor(altColor);
|
||||
@@ -452,12 +450,12 @@ testScrollView(WMScreen *scr)
|
||||
WMSetFrameRelief(f, WRFlat);
|
||||
|
||||
for (i=0; i<20; i++) {
|
||||
l = WMCreateLabel(f);
|
||||
WMResizeWidget(l, 50, 18);
|
||||
WMMoveWidget(l, 10, 20*i);
|
||||
sprintf(buffer, "Label %i", i);
|
||||
WMSetLabelText(l, buffer);
|
||||
WMSetLabelRelief(l, WRSimple);
|
||||
l = WMCreateLabel(f);
|
||||
WMResizeWidget(l, 50, 18);
|
||||
WMMoveWidget(l, 10, 20*i);
|
||||
sprintf(buffer, "Label %i", i);
|
||||
WMSetLabelText(l, buffer);
|
||||
WMSetLabelRelief(l, WRSimple);
|
||||
}
|
||||
WMMapSubwidgets(f);
|
||||
WMMapWidget(f);
|
||||
@@ -511,10 +509,10 @@ testColorPanel(WMScreen *scr)
|
||||
WMColorPanel *panel = WMGetColorPanel(scr);
|
||||
|
||||
/*if (colorname) {
|
||||
startcolor = WMCreateNamedColor(scr, colorname, False);
|
||||
WMSetColorPanelColor(panel, startcolor);
|
||||
WMReleaseColor(startcolor);
|
||||
}*/
|
||||
startcolor = WMCreateNamedColor(scr, colorname, False);
|
||||
WMSetColorPanelColor(panel, startcolor);
|
||||
WMReleaseColor(startcolor);
|
||||
}*/
|
||||
|
||||
WMShowColorPanel(panel);
|
||||
}
|
||||
@@ -592,7 +590,9 @@ testText(WMScreen *scr)
|
||||
{
|
||||
WMWindow *win;
|
||||
WMText *text;
|
||||
FILE *file = fopen("wm.html", "r");
|
||||
WMFont *font;
|
||||
void *tb;
|
||||
FILE *file = fopen("wm.html", "rb");
|
||||
|
||||
windowCount++;
|
||||
|
||||
@@ -606,8 +606,22 @@ testText(WMScreen *scr)
|
||||
WMMoveWidget(text, 10, 10);
|
||||
WMSetTextHasVerticalScroller(text, True);
|
||||
WMSetTextEditable(text, False);
|
||||
WMSetTextIgnoresNewline(text, False);
|
||||
|
||||
if(file) {
|
||||
#define FNAME "Verdana,Luxi Sans:pixelsize=12"
|
||||
#define MSG \
|
||||
"Window Maker is the GNU window manager for the " \
|
||||
"X Window System. It was designed to emulate the " \
|
||||
"look and feel of part of the NEXTSTEP(tm) GUI. It's " \
|
||||
"supposed to be relatively fast and small, feature " \
|
||||
"rich, easy to configure and easy to use, with a simple " \
|
||||
"and elegant appearance borrowed from NEXTSTEP(tm)."
|
||||
|
||||
font = WMCreateFont(scr, FNAME":autohint=false");
|
||||
WMSetTextDefaultFont(text, font);
|
||||
WMReleaseFont(font);
|
||||
|
||||
if (0 && file) {
|
||||
char buf[1024];
|
||||
|
||||
WMFreezeText(text);
|
||||
@@ -617,13 +631,16 @@ testText(WMScreen *scr)
|
||||
fclose(file);
|
||||
WMThawText(text);
|
||||
} else {
|
||||
WMAppendTextStream(text,
|
||||
"Window Maker is the GNU window manager for the "
|
||||
"X Window System. It was designed to emulate the "
|
||||
"look and feel of part of the NEXTSTEP(tm) GUI. Its "
|
||||
"supposed to be relatively fast and small, feature "
|
||||
"rich, easy to configure and easy to use, with a simple "
|
||||
"and elegant appearance borrowed from NEXTSTEP(tm).");
|
||||
WMAppendTextStream(text, "First paragraph has autohinting turned off, "
|
||||
"while the second has it turned on:");
|
||||
WMAppendTextStream(text, "\n\n\n");
|
||||
WMAppendTextStream(text, MSG);
|
||||
WMAppendTextStream(text, "\n\n\n");
|
||||
font = WMCreateFont(scr, FNAME":autohint=true");
|
||||
tb = WMCreateTextBlockWithText(text, MSG, font, WMBlackColor(scr),
|
||||
0, strlen(MSG));
|
||||
WMAppendTextBlock(text, tb);
|
||||
WMReleaseFont(font);
|
||||
}
|
||||
|
||||
WMRealizeWidget(win);
|
||||
@@ -792,21 +809,21 @@ testTabView(WMScreen *scr)
|
||||
|
||||
void
|
||||
splitViewConstrainProc(WMSplitView *sPtr, int indView,
|
||||
int *minSize, int *maxSize)
|
||||
int *minSize, int *maxSize)
|
||||
{
|
||||
switch (indView) {
|
||||
case 0:
|
||||
*minSize = 20;
|
||||
break;
|
||||
*minSize = 20;
|
||||
break;
|
||||
case 1:
|
||||
*minSize = 40;
|
||||
*maxSize = 80;
|
||||
break;
|
||||
*minSize = 40;
|
||||
*maxSize = 80;
|
||||
break;
|
||||
case 2:
|
||||
*maxSize = 60;
|
||||
break;
|
||||
*maxSize = 60;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -817,14 +834,14 @@ resizeSplitView(XEvent *event, void *data)
|
||||
WMSplitView *sPtr = (WMSplitView*)data;
|
||||
|
||||
if (event->type == ConfigureNotify) {
|
||||
int width = event->xconfigure.width - 10;
|
||||
int width = event->xconfigure.width - 10;
|
||||
|
||||
if (width < WMGetSplitViewDividerThickness(sPtr))
|
||||
width = WMGetSplitViewDividerThickness(sPtr);
|
||||
if (width < WMGetSplitViewDividerThickness(sPtr))
|
||||
width = WMGetSplitViewDividerThickness(sPtr);
|
||||
|
||||
if (width != WMWidgetWidth(sPtr) ||
|
||||
if (width != WMWidgetWidth(sPtr) ||
|
||||
event->xconfigure.height != WMWidgetHeight(sPtr))
|
||||
WMResizeWidget(sPtr, width, event->xconfigure.height - 55);
|
||||
WMResizeWidget(sPtr, width, event->xconfigure.height - 55);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -850,9 +867,9 @@ removeSubviewButtonAction(WMWidget *self, void *data)
|
||||
int count = WMGetSplitViewSubviewsCount(sPtr);
|
||||
|
||||
if (count > 2) {
|
||||
WMView *view = WMGetSplitViewSubviewAt(sPtr, count-1);
|
||||
WMDestroyWidget(WMWidgetOfView(view));
|
||||
WMRemoveSplitViewSubviewAt(sPtr, count-1);
|
||||
WMView *view = WMGetSplitViewSubviewAt(sPtr, count-1);
|
||||
WMDestroyWidget(WMWidgetOfView(view));
|
||||
WMRemoveSplitViewSubviewAt(sPtr, count-1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -957,275 +974,6 @@ testSplitView(WMScreen *scr)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
int x, y;
|
||||
Bool mouseDown;
|
||||
char *filename;
|
||||
} DNDStuff;
|
||||
|
||||
WMPixmap*
|
||||
getImage(WMScreen *scr, char *file)
|
||||
{
|
||||
char buffer[1000];
|
||||
WMPixmap *pix;
|
||||
|
||||
sprintf(buffer, "../../WindowMaker/Icons/%s", file);
|
||||
pix = WMCreatePixmapFromFile(scr, buffer);
|
||||
|
||||
return pix;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void
|
||||
iconMouseStuff(XEvent *event, void *cdata)
|
||||
{
|
||||
WMLabel *label = (WMLabel*)cdata;
|
||||
DNDStuff *stuff = WMGetHangedData(label);
|
||||
WMPoint where;
|
||||
|
||||
switch (event->type) {
|
||||
case ButtonPress:
|
||||
stuff->x = event->xbutton.x;
|
||||
stuff->y = event->xbutton.y;
|
||||
stuff->mouseDown = True;
|
||||
break;
|
||||
case ButtonRelease:
|
||||
stuff->mouseDown = False;
|
||||
break;
|
||||
case MotionNotify:
|
||||
if (!stuff->mouseDown)
|
||||
break;
|
||||
|
||||
if (abs(stuff->x - event->xmotion.x)>4
|
||||
|| abs(stuff->y - event->xmotion.y)>4) {
|
||||
|
||||
where = WMGetViewScreenPosition(WMWidgetView(label));
|
||||
|
||||
WMDragImageFromView(WMWidgetView(label),
|
||||
WMGetLabelImage(label),
|
||||
NULL, /* XXX */
|
||||
where,
|
||||
wmksize(stuff->x, stuff->y),
|
||||
event, True);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
endedDragImage(WMView *self, WMPixmap *image, WMPoint point, Bool deposited)
|
||||
{
|
||||
DNDStuff *stuff = WMGetHangedData(WMWidgetOfView(self));
|
||||
|
||||
if (deposited) {
|
||||
WMDestroyWidget(WMWidgetOfView(self));
|
||||
}
|
||||
|
||||
stuff->mouseDown = False;
|
||||
}
|
||||
|
||||
|
||||
static WMData*
|
||||
fetchDragData(WMView *self, char *type)
|
||||
{
|
||||
DNDStuff *stuff = WMGetHangedData(WMWidgetOfView(self));
|
||||
|
||||
return WMCreateDataWithBytes(stuff->filename, strlen(stuff->filename)+1);
|
||||
}
|
||||
|
||||
|
||||
WMDragSourceProcs dragSourceProcs = {
|
||||
NULL,
|
||||
NULL,
|
||||
endedDragImage,
|
||||
fetchDragData
|
||||
};
|
||||
|
||||
|
||||
/************************/
|
||||
|
||||
|
||||
unsigned
|
||||
draggingEntered(WMView *self, WMDraggingInfo *info)
|
||||
{
|
||||
return WDOperationCopy;
|
||||
}
|
||||
|
||||
|
||||
unsigned
|
||||
draggingUpdated(WMView *self, WMDraggingInfo *info)
|
||||
{
|
||||
return WDOperationCopy;
|
||||
}
|
||||
|
||||
/*
|
||||
void (*draggingExited)(WMView *self, WMDraggingInfo *info);
|
||||
*/
|
||||
char*
|
||||
prepareForDragOperation(WMView *self, WMDraggingInfo *info)
|
||||
{
|
||||
return "application/X-WINGs-Bla";
|
||||
}
|
||||
|
||||
|
||||
WMLabel* makeDraggableLabel(WMWidget *w, char *file, int x, int y);
|
||||
|
||||
Bool
|
||||
performDragOperation(WMView *self, WMDraggingInfo *info, WMData *data)
|
||||
{
|
||||
char *file = (char*)WMDataBytes(data);
|
||||
WMPoint pos;
|
||||
|
||||
pos = WMGetDraggingInfoImageLocation(info);
|
||||
|
||||
if (file!=NULL) {
|
||||
WMLabel *label;
|
||||
WMPoint pos2 = WMGetViewScreenPosition(self);
|
||||
|
||||
|
||||
label = makeDraggableLabel(WMWidgetOfView(self), file,
|
||||
pos.x-pos2.x, pos.y-pos2.y);
|
||||
WMRealizeWidget(label);
|
||||
WMMapWidget(label);
|
||||
}
|
||||
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
concludeDragOperation(WMView *self, WMDraggingInfo *info)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
WMDragDestinationProcs dragDestProcs = {
|
||||
draggingEntered,
|
||||
draggingUpdated,
|
||||
NULL,
|
||||
prepareForDragOperation,
|
||||
performDragOperation,
|
||||
concludeDragOperation
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
WMLabel*
|
||||
makeDraggableLabel(WMWidget *w, char *file, int x, int y)
|
||||
{
|
||||
DNDStuff *stuff;
|
||||
WMLabel *label;
|
||||
WMPixmap *image = getImage(WMWidgetScreen(w), file);
|
||||
|
||||
stuff = wmalloc(sizeof(DNDStuff));
|
||||
stuff->mouseDown = False;
|
||||
|
||||
stuff->filename = wstrdup(file);
|
||||
|
||||
label = WMCreateLabel(w);
|
||||
WMResizeWidget(label, 48, 48);
|
||||
WMMoveWidget(label, x, y);
|
||||
|
||||
WMSetViewDragSourceProcs(WMWidgetView(label), &dragSourceProcs);
|
||||
|
||||
WMHangData(label, stuff);
|
||||
|
||||
WMCreateEventHandler(WMWidgetView(label),
|
||||
ButtonPressMask|ButtonReleaseMask|ButtonMotionMask,
|
||||
iconMouseStuff, label);
|
||||
|
||||
|
||||
if (image != NULL) {
|
||||
WMSetLabelImagePosition(label, WIPImageOnly);
|
||||
WMSetLabelImage(label, image);
|
||||
WMReleasePixmap(image);
|
||||
} else puts(file);
|
||||
|
||||
return label;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
testDragAndDrop(WMScreen *scr)
|
||||
{
|
||||
WMWindow *win;
|
||||
WMFrame *frame;
|
||||
WMLabel *label;
|
||||
int i, j;
|
||||
DIR *dir;
|
||||
struct dirent *ent;
|
||||
char *types[] = {
|
||||
"application/X-WINGs-Bla",
|
||||
NULL
|
||||
};
|
||||
|
||||
windowCount++;
|
||||
|
||||
win = WMCreateWindow(scr, "dragDrop");
|
||||
WMResizeWidget(win, 300, 300);
|
||||
WMSetWindowCloseAction(win, closeAction, NULL);
|
||||
WMSetWindowTitle(win, "Drag and Drop");
|
||||
|
||||
|
||||
frame = WMCreateFrame(win);
|
||||
WMSetFrameRelief(frame, WRSunken);
|
||||
WMResizeWidget(frame, 250, 250);
|
||||
WMMoveWidget(frame, 25, 25);
|
||||
|
||||
WMRegisterViewForDraggedTypes(WMWidgetView(frame), types);
|
||||
WMSetViewDragDestinationProcs(WMWidgetView(frame), &dragDestProcs);
|
||||
|
||||
dir = opendir("../../WindowMaker/Icons");
|
||||
if (!dir) {
|
||||
perror("../../WindowMaker/Icons");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0, j=0; j < 8; i++) {
|
||||
ent = readdir(dir);
|
||||
if (!ent)
|
||||
break;
|
||||
|
||||
if (strstr(ent->d_name, ".xpm")==NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
label = makeDraggableLabel(frame, ent->d_name,4+(j/4)*64, 4+(j%4)*64);
|
||||
|
||||
j++;
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
|
||||
WMMapSubwidgets(frame);
|
||||
|
||||
WMMapSubwidgets(win);
|
||||
WMRealizeWidget(win);
|
||||
WMMapWidget(win);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************/
|
||||
|
||||
|
||||
void
|
||||
testUD()
|
||||
{
|
||||
@@ -1259,15 +1007,15 @@ main(int argc, char **argv)
|
||||
dpy = XOpenDisplay("");
|
||||
|
||||
if (!dpy) {
|
||||
puts("could not open display");
|
||||
exit(1);
|
||||
puts("could not open display");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* This is used to disable buffering of X protocol requests.
|
||||
* Do NOT use it unless when debugging. It will cause a major
|
||||
* slowdown in your application
|
||||
*/
|
||||
#if 1
|
||||
#if 0
|
||||
XSynchronize(dpy, True);
|
||||
#endif
|
||||
/*
|
||||
@@ -1283,7 +1031,10 @@ main(int argc, char **argv)
|
||||
/*
|
||||
* Makes the logo be used in standard dialog panels.
|
||||
*/
|
||||
WMSetApplicationIconPixmap(scr, pixmap); WMReleasePixmap(pixmap);
|
||||
if (pixmap) {
|
||||
WMSetApplicationIconPixmap(scr, pixmap);
|
||||
WMReleasePixmap(pixmap);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do some test stuff.
|
||||
@@ -1291,44 +1042,29 @@ main(int argc, char **argv)
|
||||
* Put the testSomething() function you want to test here.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
testDragAndDrop(scr);
|
||||
testText(scr);
|
||||
#if 0
|
||||
testColorPanel(scr);
|
||||
testScrollView(scr);
|
||||
testTabView(scr);
|
||||
testBox(scr);
|
||||
testText(scr);
|
||||
testList(scr);
|
||||
|
||||
testProgressIndicator(scr);
|
||||
|
||||
testColorWell(scr);
|
||||
|
||||
testTextField(scr);
|
||||
|
||||
testDragAndDrop(scr);
|
||||
testFontPanel(scr);
|
||||
|
||||
testColorPanel(scr);
|
||||
|
||||
#if 0
|
||||
|
||||
testBox(scr);
|
||||
testButton(scr);
|
||||
|
||||
testColorPanel(scr);
|
||||
testColorWell(scr);
|
||||
testDragAndDrop(scr);
|
||||
testFrame(scr);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
testSplitView(scr);
|
||||
|
||||
testGradientButtons(scr);
|
||||
|
||||
|
||||
testList(scr);
|
||||
testOpenFilePanel(scr);
|
||||
|
||||
testSlider(scr);
|
||||
testProgressIndicator(scr);
|
||||
testPullDown(scr);
|
||||
testScrollView(scr);
|
||||
testSlider(scr);
|
||||
testSplitView(scr);
|
||||
testTabView(scr);
|
||||
testTextField(scr);
|
||||
#endif
|
||||
/*
|
||||
* The main event loop.
|
||||
@@ -1338,3 +1074,4 @@ main(int argc, char **argv)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@
|
||||
|
||||
#include <WINGs/WINGs.h>
|
||||
|
||||
#if WINGS_H_VERSION < 20010117
|
||||
#if WINGS_H_VERSION < 20040406
|
||||
#error There_is_an_old_WINGs.h_file_somewhere_in_your_system._Please_remove_it.
|
||||
#endif
|
||||
|
||||
@@ -22,21 +22,16 @@
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define DOUBLE_BUFFER
|
||||
|
||||
|
||||
#define DOUBLE_BUFFER 1
|
||||
|
||||
#define WC_UserWidget 128
|
||||
|
||||
#define SCROLLER_WIDTH 20
|
||||
|
||||
#define XDND_VERSION 4
|
||||
|
||||
|
||||
#define SCROLLER_WIDTH 20
|
||||
|
||||
|
||||
|
||||
#define XDND_VERSION 4
|
||||
|
||||
|
||||
typedef struct W_Application {
|
||||
char *applicationName;
|
||||
int argc;
|
||||
@@ -48,15 +43,12 @@ typedef struct W_Application {
|
||||
typedef struct W_Font {
|
||||
struct W_Screen *screen;
|
||||
|
||||
union {
|
||||
XFontSet set;
|
||||
XFontStruct *normal;
|
||||
} font;
|
||||
struct _XftFont *font;
|
||||
|
||||
short height;
|
||||
short y;
|
||||
short refCount;
|
||||
char *name;
|
||||
unsigned int notFontSet:1;
|
||||
} W_Font;
|
||||
|
||||
|
||||
@@ -75,10 +67,11 @@ typedef struct W_Color {
|
||||
struct W_Screen *screen;
|
||||
|
||||
XColor color;
|
||||
unsigned short alpha;
|
||||
short refCount;
|
||||
GC gc;
|
||||
struct {
|
||||
unsigned int exact:1;
|
||||
unsigned int exact:1;
|
||||
} flags;
|
||||
} W_Color;
|
||||
|
||||
@@ -91,29 +84,52 @@ typedef struct W_FocusInfo {
|
||||
|
||||
|
||||
|
||||
struct W_DraggingInfo {
|
||||
typedef void* W_DndState(WMView *destView, XClientMessageEvent *event,
|
||||
WMDraggingInfo *info);
|
||||
|
||||
|
||||
typedef struct W_DragOperationItem {
|
||||
WMDragOperationType type;
|
||||
char* text;
|
||||
} W_DragOperationItem;
|
||||
|
||||
|
||||
typedef struct W_DragSourceInfo {
|
||||
WMView *sourceView;
|
||||
Window destinationWindow;
|
||||
Window sourceWindow;
|
||||
|
||||
WMPoint location;
|
||||
|
||||
unsigned sourceOperation;
|
||||
WMPixmap *image;
|
||||
W_DndState *state;
|
||||
WMSelectionProcs *selectionProcs;
|
||||
Window icon;
|
||||
WMPoint imageLocation;
|
||||
WMPoint mouseOffset; /* mouse pos in icon */
|
||||
Cursor dragCursor;
|
||||
WMRect noPositionMessageZone;
|
||||
Atom firstThreeTypes[3];
|
||||
} W_DragSourceInfo;
|
||||
|
||||
char **types;
|
||||
|
||||
typedef struct W_DragDestinationInfo {
|
||||
WMView *destView;
|
||||
Window sourceWindow;
|
||||
W_DndState *state;
|
||||
WMArray *sourceTypes;
|
||||
WMArray *requiredTypes;
|
||||
Bool typeListAvailable;
|
||||
WMArray *dropDatas;
|
||||
} W_DragDestinationInfo;
|
||||
|
||||
|
||||
struct W_DraggingInfo {
|
||||
unsigned char protocolVersion;
|
||||
Time timestamp;
|
||||
|
||||
int protocolVersion;
|
||||
Atom sourceAction;
|
||||
Atom destinationAction;
|
||||
|
||||
W_DragSourceInfo* sourceInfo; /* infos needed by source */
|
||||
W_DragDestinationInfo* destInfo; /* infos needed by destination */
|
||||
} W_DraggingInfo;
|
||||
|
||||
/* should be treated as internal data */
|
||||
WMView *sourceView;
|
||||
WMView *destView;
|
||||
WMSize mouseOffset;
|
||||
unsigned finished:1;
|
||||
};
|
||||
|
||||
|
||||
typedef struct W_Screen {
|
||||
Display *display;
|
||||
@@ -121,19 +137,21 @@ typedef struct W_Screen {
|
||||
int depth;
|
||||
|
||||
Colormap colormap;
|
||||
|
||||
|
||||
Visual *visual;
|
||||
|
||||
|
||||
Time lastEventTime;
|
||||
|
||||
|
||||
Window rootWin;
|
||||
|
||||
struct W_View *rootView;
|
||||
|
||||
|
||||
RContext *rcontext;
|
||||
|
||||
struct W_IMContext *imctx;
|
||||
|
||||
|
||||
struct _XftDraw *xftdraw; /* shared XftDraw */
|
||||
|
||||
/* application related */
|
||||
|
||||
W_FocusInfo *focusInfo;
|
||||
@@ -145,13 +163,13 @@ typedef struct W_Screen {
|
||||
struct W_Window *windowList; /* list of windows in the app */
|
||||
|
||||
Window groupLeader; /* the leader of the application */
|
||||
/* also used for other things */
|
||||
/* also used for other things */
|
||||
|
||||
struct W_SelectionHandlers *selectionHandlerList;
|
||||
|
||||
struct {
|
||||
unsigned int hasAppIcon:1;
|
||||
unsigned int simpleApplication:1;
|
||||
unsigned int hasAppIcon:1;
|
||||
unsigned int simpleApplication:1;
|
||||
} aflags;
|
||||
|
||||
WMOpenPanel *sharedOpenPanel;
|
||||
@@ -165,7 +183,7 @@ typedef struct W_Screen {
|
||||
|
||||
struct W_View *dragSourceView;
|
||||
struct W_DraggingInfo dragInfo;
|
||||
|
||||
|
||||
/* colors */
|
||||
W_Color *white;
|
||||
W_Color *black;
|
||||
@@ -173,17 +191,19 @@ typedef struct W_Screen {
|
||||
W_Color *darkGray;
|
||||
|
||||
GC stippleGC;
|
||||
|
||||
|
||||
GC copyGC;
|
||||
GC clipGC;
|
||||
|
||||
|
||||
GC monoGC; /* GC for 1bpp visuals */
|
||||
|
||||
|
||||
GC xorGC;
|
||||
|
||||
GC ixorGC; /* IncludeInferiors XOR */
|
||||
|
||||
GC textFieldGC;
|
||||
GC drawStringGC; /* for WMDrawString() */
|
||||
|
||||
GC drawImStringGC; /* for WMDrawImageString() */
|
||||
|
||||
W_Font *normalFont;
|
||||
|
||||
@@ -191,16 +211,16 @@ typedef struct W_Screen {
|
||||
|
||||
WMHashTable *fontCache;
|
||||
|
||||
Bool useMultiByte;
|
||||
|
||||
Bool antialiasedText;
|
||||
|
||||
unsigned int ignoredModifierMask; /* modifiers to ignore when typing txt */
|
||||
|
||||
struct W_Balloon *balloon;
|
||||
|
||||
|
||||
|
||||
struct W_Pixmap *checkButtonImageOn;
|
||||
struct W_Pixmap *checkButtonImageOff;
|
||||
|
||||
|
||||
struct W_Pixmap *radioButtonImageOn;
|
||||
struct W_Pixmap *radioButtonImageOff;
|
||||
|
||||
@@ -208,12 +228,12 @@ typedef struct W_Screen {
|
||||
struct W_Pixmap *pushedButtonArrow;
|
||||
|
||||
struct W_Pixmap *scrollerDimple;
|
||||
|
||||
|
||||
struct W_Pixmap *upArrow;
|
||||
struct W_Pixmap *downArrow;
|
||||
struct W_Pixmap *leftArrow;
|
||||
struct W_Pixmap *rightArrow;
|
||||
|
||||
|
||||
struct W_Pixmap *hiUpArrow;
|
||||
struct W_Pixmap *hiDownArrow;
|
||||
struct W_Pixmap *hiLeftArrow;
|
||||
@@ -239,7 +259,7 @@ typedef struct W_Screen {
|
||||
struct W_Pixmap *altUnmountIcon;
|
||||
|
||||
struct W_Pixmap *magnifyIcon;
|
||||
/* struct W_Pixmap *altMagnifyIcon;*/
|
||||
/*struct W_Pixmap *altMagnifyIcon;*/
|
||||
struct W_Pixmap *wheelIcon;
|
||||
struct W_Pixmap *grayIcon;
|
||||
struct W_Pixmap *rgbIcon;
|
||||
@@ -247,19 +267,19 @@ typedef struct W_Screen {
|
||||
struct W_Pixmap *hsbIcon;
|
||||
struct W_Pixmap *customPaletteIcon;
|
||||
struct W_Pixmap *colorListIcon;
|
||||
|
||||
|
||||
struct W_Pixmap *defaultObjectIcon;
|
||||
|
||||
Cursor defaultCursor;
|
||||
|
||||
|
||||
Cursor textCursor;
|
||||
|
||||
Cursor invisibleCursor;
|
||||
|
||||
|
||||
Atom attribsAtom; /* GNUstepWindowAttributes */
|
||||
|
||||
|
||||
Atom deleteWindowAtom; /* WM_DELETE_WINDOW */
|
||||
|
||||
|
||||
Atom protocolsAtom; /* _XA_WM_PROTOCOLS */
|
||||
|
||||
Atom clipboardAtom; /* CLIPBOARD */
|
||||
@@ -272,6 +292,8 @@ typedef struct W_Screen {
|
||||
Atom xdndDropAtom;
|
||||
Atom xdndFinishedAtom;
|
||||
Atom xdndTypeListAtom;
|
||||
Atom xdndActionListAtom;
|
||||
Atom xdndActionDescriptionAtom;
|
||||
Atom xdndStatusAtom;
|
||||
|
||||
Atom xdndActionCopy;
|
||||
@@ -279,10 +301,16 @@ typedef struct W_Screen {
|
||||
Atom xdndActionLink;
|
||||
Atom xdndActionAsk;
|
||||
Atom xdndActionPrivate;
|
||||
|
||||
|
||||
Atom wmIconDragOffsetAtom;
|
||||
|
||||
Atom wmStateAtom; /* WM_STATE */
|
||||
|
||||
Atom utf8String;
|
||||
|
||||
Atom netwmName;
|
||||
Atom netwmIconName;
|
||||
Atom netwmIcon;
|
||||
|
||||
/* stuff for detecting double-clicks */
|
||||
Time lastClickTime; /* time of last mousedown event */
|
||||
@@ -305,7 +333,7 @@ typedef struct W_ViewDelegate {
|
||||
void (*willMove)(struct W_ViewDelegate*, WMView*, int*, int*);
|
||||
|
||||
void (*willResize)(struct W_ViewDelegate*, WMView*,
|
||||
unsigned int*, unsigned int*);
|
||||
unsigned int*, unsigned int*);
|
||||
} W_ViewDelegate;
|
||||
|
||||
|
||||
@@ -314,37 +342,37 @@ typedef struct W_View {
|
||||
struct W_Screen *screen;
|
||||
|
||||
WMWidget *self; /* must point to the widget the
|
||||
* view belongs to */
|
||||
* view belongs to */
|
||||
|
||||
W_ViewDelegate *delegate;
|
||||
|
||||
Window window;
|
||||
|
||||
WMSize size;
|
||||
|
||||
|
||||
short topOffs;
|
||||
short leftOffs;
|
||||
short bottomOffs;
|
||||
short rightOffs;
|
||||
|
||||
WMPoint pos;
|
||||
|
||||
|
||||
struct W_View *nextFocusChain; /* next/prev in focus chain */
|
||||
struct W_View *prevFocusChain;
|
||||
|
||||
|
||||
struct W_View *nextResponder; /* next to receive keyboard events */
|
||||
|
||||
|
||||
struct W_View *parent; /* parent WMView */
|
||||
|
||||
|
||||
struct W_View *childrenList; /* first in list of child windows */
|
||||
|
||||
|
||||
struct W_View *nextSister; /* next on parent's children list */
|
||||
|
||||
|
||||
WMArray *eventHandlers; /* event handlers for this window */
|
||||
|
||||
unsigned long attribFlags;
|
||||
XSetWindowAttributes attribs;
|
||||
|
||||
|
||||
void *hangedData; /* data holder for user program */
|
||||
|
||||
WMColor *backColor;
|
||||
@@ -352,35 +380,36 @@ typedef struct W_View {
|
||||
Cursor cursor;
|
||||
|
||||
Atom *droppableTypes;
|
||||
struct W_DragSourceProcs *dragSourceProcs;
|
||||
struct W_DragSourceProcs *dragSourceProcs;
|
||||
struct W_DragDestinationProcs *dragDestinationProcs;
|
||||
WMPixmap *dragImage;
|
||||
int helpContext;
|
||||
|
||||
|
||||
struct {
|
||||
unsigned int realized:1;
|
||||
unsigned int mapped:1;
|
||||
unsigned int parentDying:1;
|
||||
unsigned int dying:1; /* the view is being destroyed */
|
||||
unsigned int topLevel:1; /* is a top level window */
|
||||
unsigned int root:1; /* is the root window */
|
||||
unsigned int mapWhenRealized:1;/* map the view when it's realized */
|
||||
unsigned int alreadyDead:1; /* view was freed */
|
||||
unsigned int realized:1;
|
||||
unsigned int mapped:1;
|
||||
unsigned int parentDying:1;
|
||||
unsigned int dying:1; /* the view is being destroyed */
|
||||
unsigned int topLevel:1; /* is a top level window */
|
||||
unsigned int root:1; /* is the root window */
|
||||
unsigned int mapWhenRealized:1; /* map the view when it's realized */
|
||||
unsigned int alreadyDead:1; /* view was freed */
|
||||
|
||||
unsigned int dontCompressMotion:1; /* motion notify event compress */
|
||||
unsigned int notifySizeChanged:1;
|
||||
unsigned int dontCompressExpose:1; /* will compress all expose
|
||||
events into one */
|
||||
/* toplevel only */
|
||||
unsigned int worksWhenModal:1;
|
||||
unsigned int pendingRelease1:1;
|
||||
unsigned int pendingRelease2:1;
|
||||
unsigned int pendingRelease3:1;
|
||||
unsigned int pendingRelease4:1;
|
||||
unsigned int pendingRelease5:1;
|
||||
unsigned int xdndHintSet:1;
|
||||
unsigned int dontCompressMotion:1; /* motion notify event compress */
|
||||
unsigned int notifySizeChanged:1;
|
||||
unsigned int dontCompressExpose:1; /* expose event compress */
|
||||
|
||||
/* toplevel only */
|
||||
unsigned int worksWhenModal:1;
|
||||
unsigned int pendingRelease1:1;
|
||||
unsigned int pendingRelease2:1;
|
||||
unsigned int pendingRelease3:1;
|
||||
unsigned int pendingRelease4:1;
|
||||
unsigned int pendingRelease5:1;
|
||||
unsigned int xdndHintSet:1;
|
||||
} flags;
|
||||
|
||||
|
||||
int refCount;
|
||||
} W_View;
|
||||
|
||||
@@ -400,7 +429,7 @@ typedef struct _WINGsConfiguration {
|
||||
char *systemFont;
|
||||
char *boldSystemFont;
|
||||
int defaultFontSize;
|
||||
Bool useMultiByte;
|
||||
Bool antialiasedText;
|
||||
char *floppyPath;
|
||||
unsigned doubleClickDelay;
|
||||
unsigned mouseWheelUp;
|
||||
@@ -419,14 +448,14 @@ extern _WINGsConfiguration WINGsConfiguration;
|
||||
|
||||
#define W_VIEW_REALIZED(view) (view)->flags.realized
|
||||
#define W_VIEW_MAPPED(view) (view)->flags.mapped
|
||||
|
||||
|
||||
#define W_VIEW_DISPLAY(view) (view)->screen->display
|
||||
#define W_VIEW_SCREEN(view) (view)->screen
|
||||
#define W_VIEW_DRAWABLE(view) (view)->window
|
||||
|
||||
|
||||
#define W_VIEW_WIDTH(view) (view)->size.width
|
||||
#define W_VIEW_HEIGHT(view) (view)->size.height
|
||||
|
||||
|
||||
|
||||
#define W_PIXEL(c) (c)->color.pixel
|
||||
|
||||
@@ -475,25 +504,25 @@ void W_ResizeView(W_View *view, unsigned int width, unsigned int height);
|
||||
void W_SetViewBackgroundColor(W_View *view, WMColor *color);
|
||||
|
||||
void W_SetViewCursor(W_View *view, Cursor cursor);
|
||||
|
||||
|
||||
void W_DrawRelief(W_Screen *scr, Drawable d, int x, int y, unsigned int width,
|
||||
unsigned int height, WMReliefType relief);
|
||||
unsigned int height, WMReliefType relief);
|
||||
|
||||
void W_DrawReliefWithGC(W_Screen *scr, Drawable d, int x, int y,
|
||||
unsigned int width, unsigned int height,
|
||||
WMReliefType relief,
|
||||
GC black, GC dark, GC light, GC white);
|
||||
unsigned int width, unsigned int height,
|
||||
WMReliefType relief,
|
||||
GC black, GC dark, GC light, GC white);
|
||||
|
||||
void W_CallDestroyHandlers(W_View *view);
|
||||
|
||||
void W_PaintTextAndImage(W_View *view, int wrap, GC textGC, W_Font *font,
|
||||
WMReliefType relief, char *text,
|
||||
WMAlignment alignment, W_Pixmap *image,
|
||||
WMImagePosition position, GC backGC, int ofs);
|
||||
void W_PaintTextAndImage(W_View *view, int wrap, WMColor *textColor,
|
||||
W_Font *font, WMReliefType relief, char *text,
|
||||
WMAlignment alignment, W_Pixmap *image,
|
||||
WMImagePosition position, WMColor *backColor, int ofs);
|
||||
|
||||
void W_PaintText(W_View *view, Drawable d, WMFont *font, int x, int y,
|
||||
int width, WMAlignment alignment, GC gc,
|
||||
int wrap, char *text, int length);
|
||||
int width, WMAlignment alignment, WMColor *color,
|
||||
int wrap, char *text, int length);
|
||||
|
||||
int W_GetTextHeight(WMFont *font, char *text, int width, int wrap);
|
||||
|
||||
@@ -510,7 +539,7 @@ void W_SetFocusOfToplevel(W_View *toplevel, W_View *view);
|
||||
W_View *W_FocusedViewOfToplevel(W_View *view);
|
||||
|
||||
void W_SetFocusOfTopLevel(W_View *toplevel, W_View *view);
|
||||
|
||||
|
||||
void W_ReleaseView(WMView *view);
|
||||
|
||||
WMView *W_RetainView(WMView *view);
|
||||
@@ -545,8 +574,47 @@ void W_CheckTimerHandlers(void);
|
||||
|
||||
Bool W_HandleInputEvents(Bool waitForInput, int inputfd);
|
||||
|
||||
/* XDnD */
|
||||
Atom W_OperationToAction(WMScreen *scr, WMDragOperationType operation);
|
||||
|
||||
WMDragOperationType W_ActionToOperation(WMScreen *scr, Atom action);
|
||||
|
||||
void W_FreeDragOperationItem(void* item);
|
||||
|
||||
Bool W_SendDnDClientMessage(Display *dpy, Window win, Atom message,
|
||||
unsigned long data1, unsigned long data2,
|
||||
unsigned long data3, unsigned long data4,
|
||||
unsigned long data5);
|
||||
|
||||
void W_DragSourceStartTimer(WMDraggingInfo *info);
|
||||
|
||||
void W_DragSourceStopTimer();
|
||||
|
||||
void W_DragSourceStateHandler(WMDraggingInfo *info, XClientMessageEvent *event);
|
||||
|
||||
void W_DragDestinationStartTimer(WMDraggingInfo *info);
|
||||
|
||||
void W_DragDestinationStopTimer();
|
||||
|
||||
void W_DragDestinationStoreEnterMsgInfo(WMDraggingInfo *info, WMView *toplevel,
|
||||
XClientMessageEvent *event);
|
||||
|
||||
void W_DragDestinationStorePositionMsgInfo(WMDraggingInfo *info,
|
||||
WMView *toplevel,
|
||||
XClientMessageEvent *event);
|
||||
|
||||
void W_DragDestinationCancelDropOnEnter(WMView *toplevel, WMDraggingInfo *info);
|
||||
|
||||
void W_DragDestinationStateHandler(WMDraggingInfo *info,
|
||||
XClientMessageEvent *event);
|
||||
|
||||
void W_DragDestinationInfoClear(WMDraggingInfo *info);
|
||||
|
||||
void W_FreeViewXdndPart(WMView *view);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _WINGSP_H_ */
|
||||
|
||||
|
||||
@@ -19,11 +19,13 @@
|
||||
#endif
|
||||
|
||||
|
||||
#if (!defined (__GNUC__) || __GNUC__ < 2 || \
|
||||
__GNUC_MINOR__ < (defined (__cplusplus) ? 6 : 4))
|
||||
#define __ASSERT_FUNCTION ((char *) 0)
|
||||
#else
|
||||
#define __ASSERT_FUNCTION __PRETTY_FUNCTION__
|
||||
#ifndef __ASSERT_FUNCTION
|
||||
# if (!defined (__GNUC__) || (__GNUC__ < 2 && \
|
||||
__GNUC_MINOR__ < (defined (__cplusplus) ? 6 : 4)))
|
||||
# define __ASSERT_FUNCTION ((char *) 0)
|
||||
# else
|
||||
# define __ASSERT_FUNCTION __PRETTY_FUNCTION__
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -45,18 +47,18 @@
|
||||
#else /* !DEBUG */
|
||||
|
||||
#define wassertr(expr) \
|
||||
if (!(expr)) { \
|
||||
wwarning("%s line %i (%s): assertion %s failed",\
|
||||
__FILE__, __LINE__, __ASSERT_FUNCTION, #expr);\
|
||||
return;\
|
||||
}
|
||||
if (!(expr)) { \
|
||||
wwarning("%s line %i (%s): assertion %s failed",\
|
||||
__FILE__, __LINE__, __ASSERT_FUNCTION, #expr);\
|
||||
return;\
|
||||
}
|
||||
|
||||
#define wassertrv(expr, val) \
|
||||
if (!(expr)) { \
|
||||
wwarning("%s line %i (%s): assertion %s failed",\
|
||||
__FILE__, __LINE__, __ASSERT_FUNCTION, #expr);\
|
||||
return (val);\
|
||||
}
|
||||
if (!(expr)) { \
|
||||
wwarning("%s line %i (%s): assertion %s failed",\
|
||||
__FILE__, __LINE__, __ASSERT_FUNCTION, #expr);\
|
||||
return (val);\
|
||||
}
|
||||
#endif /* !DEBUG */
|
||||
|
||||
#endif /* !NDEBUG */
|
||||
@@ -69,15 +71,15 @@ extern "C" {
|
||||
|
||||
typedef enum {
|
||||
WMPostWhenIdle = 1,
|
||||
WMPostASAP = 2,
|
||||
WMPostNow = 3
|
||||
WMPostASAP = 2,
|
||||
WMPostNow = 3
|
||||
} WMPostingStyle;
|
||||
|
||||
|
||||
typedef enum {
|
||||
WNCNone = 0,
|
||||
WNCOnName = 1,
|
||||
WNCOnSender = 2
|
||||
WNCOnName = 1,
|
||||
WNCOnSender = 2
|
||||
} WMNotificationCoalescing;
|
||||
|
||||
|
||||
@@ -164,7 +166,7 @@ typedef struct {
|
||||
/* NULL does nothing */
|
||||
void* (*retainKey)(const void *);
|
||||
/* NULL does nothing */
|
||||
void (*releaseKey)(const void *);
|
||||
void (*releaseKey)(const void *);
|
||||
} WMHashTableCallbacks;
|
||||
|
||||
|
||||
@@ -184,8 +186,9 @@ typedef struct {
|
||||
typedef struct ConnectionDelegate {
|
||||
void *data;
|
||||
|
||||
void (*didCatchException)(struct ConnectionDelegate *self,
|
||||
WMConnection *cPtr);
|
||||
void (*canResumeSending)(struct ConnectionDelegate *self, WMConnection *cPtr);
|
||||
|
||||
void (*didCatchException)(struct ConnectionDelegate *self, WMConnection *cPtr);
|
||||
|
||||
void (*didDie)(struct ConnectionDelegate *self, WMConnection *cPtr);
|
||||
|
||||
@@ -198,16 +201,16 @@ typedef struct ConnectionDelegate {
|
||||
} ConnectionDelegate;
|
||||
|
||||
|
||||
typedef void WMNotificationObserverAction(void *observerData,
|
||||
WMNotification *notification);
|
||||
typedef void WMNotificationObserverAction(void *observerData,
|
||||
WMNotification *notification);
|
||||
|
||||
|
||||
|
||||
/*......................................................................*/
|
||||
|
||||
typedef void (waborthandler)(int);
|
||||
typedef void waborthandler(int);
|
||||
|
||||
waborthandler* wsetabort(waborthandler*);
|
||||
waborthandler* wsetabort(waborthandler* handler);
|
||||
|
||||
|
||||
/* don't free the returned string */
|
||||
@@ -239,6 +242,7 @@ void wrelease(void *ptr);
|
||||
void* wretain(void *ptr);
|
||||
|
||||
char* wstrdup(char *str);
|
||||
char* wstrndup(char *str, size_t len);
|
||||
|
||||
/* Concatenate str1 with str2 and return that in a newly malloc'ed string.
|
||||
* str1 and str2 can be any strings including static and constant strings.
|
||||
@@ -281,7 +285,7 @@ void wusleep(unsigned int microsec);
|
||||
|
||||
#if 0
|
||||
int wsprintesc(char *buffer, int length, char *format, WMSEscapes **escapes,
|
||||
int count);
|
||||
int count);
|
||||
#endif
|
||||
|
||||
/*......................................................................*/
|
||||
@@ -289,7 +293,7 @@ int wsprintesc(char *buffer, int length, char *format, WMSEscapes **escapes,
|
||||
/* Event handlers: timer, idle, input */
|
||||
|
||||
WMHandlerID WMAddTimerHandler(int milliseconds, WMCallback *callback,
|
||||
void *cdata);
|
||||
void *cdata);
|
||||
|
||||
WMHandlerID WMAddPersistentTimerHandler(int milliseconds, WMCallback *callback,
|
||||
void *cdata);
|
||||
@@ -302,8 +306,8 @@ WMHandlerID WMAddIdleHandler(WMCallback *callback, void *cdata);
|
||||
|
||||
void WMDeleteIdleHandler(WMHandlerID handlerID);
|
||||
|
||||
WMHandlerID WMAddInputHandler(int fd, int condition, WMInputProc *proc,
|
||||
void *clientData);
|
||||
WMHandlerID WMAddInputHandler(int fd, int condition, WMInputProc *proc,
|
||||
void *clientData);
|
||||
|
||||
void WMDeleteInputHandler(WMHandlerID handlerID);
|
||||
|
||||
@@ -369,7 +373,7 @@ extern const WMHashTableCallbacks WMIntHashCallbacks;
|
||||
/* sizeof(keys) are <= sizeof(void*) */
|
||||
|
||||
extern const WMHashTableCallbacks WMStringHashCallbacks;
|
||||
/* keys are strings. Strings will be copied with wstrdup()
|
||||
/* keys are strings. Strings will be copied with wstrdup()
|
||||
* and freed with wfree() */
|
||||
|
||||
extern const WMHashTableCallbacks WMStringPointerHashCallbacks;
|
||||
@@ -388,7 +392,7 @@ extern const WMHashTableCallbacks WMStringPointerHashCallbacks;
|
||||
* Fast [O(1)] push/pop
|
||||
*
|
||||
* Cons:
|
||||
* A little slower [O(n)] for insertion/deletion of elements that
|
||||
* A little slower [O(n)] for insertion/deletion of elements that
|
||||
* aren't in the end
|
||||
*/
|
||||
|
||||
@@ -471,23 +475,23 @@ void* WMArrayPrevious(WMArray *array, WMArrayIterator *iter);
|
||||
|
||||
/* The following 2 macros assume that the array doesn't change in the for loop */
|
||||
#define WM_ITERATE_ARRAY(array, var, i) \
|
||||
for (var = WMArrayFirst(array, &(i)); (i) != WANotFound; \
|
||||
var = WMArrayNext(array, &(i)))
|
||||
for (var = WMArrayFirst(array, &(i)); (i) != WANotFound; \
|
||||
var = WMArrayNext(array, &(i)))
|
||||
|
||||
#define WM_ETARETI_ARRAY(array, var, i) \
|
||||
for (var = WMArrayLast(array, &(i)); (i) != WANotFound; \
|
||||
var = WMArrayPrevious(array, &(i)))
|
||||
for (var = WMArrayLast(array, &(i)); (i) != WANotFound; \
|
||||
var = WMArrayPrevious(array, &(i)))
|
||||
|
||||
/*..........................................................................*/
|
||||
|
||||
/*
|
||||
* Tree bags use a red-black tree for storage.
|
||||
* Item indexes may be any integer number.
|
||||
*
|
||||
*
|
||||
* Pros:
|
||||
* O(lg n) insertion/deletion/search
|
||||
* Good for large numbers of elements with sparse indexes
|
||||
*
|
||||
*
|
||||
* Cons:
|
||||
* O(lg n) insertion/deletion/search
|
||||
* Slow for storing small numbers of elements
|
||||
@@ -561,12 +565,12 @@ int WMBagIndexForIterator(WMBag *bag, WMBagIterator ptr);
|
||||
|
||||
/* The following 2 macros assume that the bag doesn't change in the for loop */
|
||||
#define WM_ITERATE_BAG(bag, var, i) \
|
||||
for (var = WMBagFirst(bag, &(i)); (i) != NULL; \
|
||||
var = WMBagNext(bag, &(i)))
|
||||
for (var = WMBagFirst(bag, &(i)); (i) != NULL; \
|
||||
var = WMBagNext(bag, &(i)))
|
||||
|
||||
#define WM_ETARETI_BAG(bag, var, i) \
|
||||
for (var = WMBagLast(bag, &(i)); (i) != NULL; \
|
||||
var = WMBagPrevious(bag, &(i)))
|
||||
for (var = WMBagLast(bag, &(i)); (i) != NULL; \
|
||||
var = WMBagPrevious(bag, &(i)))
|
||||
|
||||
|
||||
|
||||
@@ -680,7 +684,7 @@ void WMSortTree(WMTreeNode *aNode, WMCompareDataProc *comparer);
|
||||
WMTreeNode* WMFindInTree(WMTreeNode *aTree, WMMatchDataProc *match, void *cdata);
|
||||
|
||||
/* Returns first tree node that has data == cdata */
|
||||
#define WMGetFirstInTree(aTree, cdata) WMFindInTree(atree, NULL, cdata)
|
||||
#define WMGetFirstInTree(aTree, cdata) WMFindInTree(aTree, NULL, cdata)
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
@@ -699,15 +703,15 @@ void* WMGetNotificationObject(WMNotification *notification);
|
||||
const char* WMGetNotificationName(WMNotification *notification);
|
||||
|
||||
|
||||
void WMAddNotificationObserver(WMNotificationObserverAction *observerAction,
|
||||
void *observer, const char *name, void *object);
|
||||
void WMAddNotificationObserver(WMNotificationObserverAction *observerAction,
|
||||
void *observer, const char *name, void *object);
|
||||
|
||||
void WMPostNotification(WMNotification *notification);
|
||||
|
||||
void WMRemoveNotificationObserver(void *observer);
|
||||
|
||||
void WMRemoveNotificationObserverWithName(void *observer, const char *name,
|
||||
void *object);
|
||||
void WMRemoveNotificationObserverWithName(void *observer, const char *name,
|
||||
void *object);
|
||||
|
||||
void WMPostNotificationName(const char *name, void *object, void *clientData);
|
||||
|
||||
@@ -715,18 +719,18 @@ WMNotificationQueue* WMGetDefaultNotificationQueue(void);
|
||||
|
||||
WMNotificationQueue* WMCreateNotificationQueue(void);
|
||||
|
||||
void WMDequeueNotificationMatching(WMNotificationQueue *queue,
|
||||
WMNotification *notification,
|
||||
unsigned mask);
|
||||
void WMDequeueNotificationMatching(WMNotificationQueue *queue,
|
||||
WMNotification *notification,
|
||||
unsigned mask);
|
||||
|
||||
void WMEnqueueNotification(WMNotificationQueue *queue,
|
||||
WMNotification *notification,
|
||||
WMPostingStyle postingStyle);
|
||||
WMNotification *notification,
|
||||
WMPostingStyle postingStyle);
|
||||
|
||||
void WMEnqueueCoalesceNotification(WMNotificationQueue *queue,
|
||||
WMNotification *notification,
|
||||
WMPostingStyle postingStyle,
|
||||
unsigned coalesceMask);
|
||||
void WMEnqueueCoalesceNotification(WMNotificationQueue *queue,
|
||||
WMNotification *notification,
|
||||
WMPostingStyle postingStyle,
|
||||
unsigned coalesceMask);
|
||||
|
||||
|
||||
/*......................................................................*/
|
||||
@@ -851,7 +855,7 @@ WMPropList* WMGetUDKeys(WMUserDefaults *database);
|
||||
WMPropList* WMGetUDObjectForKey(WMUserDefaults *database, char *defaultName);
|
||||
|
||||
void WMSetUDObjectForKey(WMUserDefaults *database, WMPropList *object,
|
||||
char *defaultName);
|
||||
char *defaultName);
|
||||
|
||||
void WMRemoveUDObjectForKey(WMUserDefaults *database, char *defaultName);
|
||||
|
||||
@@ -863,17 +867,17 @@ float WMGetUDFloatForKey(WMUserDefaults *database, char *defaultName);
|
||||
|
||||
Bool WMGetUDBoolForKey(WMUserDefaults *database, char *defaultName);
|
||||
|
||||
void WMSetUDStringForKey(WMUserDefaults *database, char *value,
|
||||
char *defaultName);
|
||||
void WMSetUDStringForKey(WMUserDefaults *database, char *value,
|
||||
char *defaultName);
|
||||
|
||||
void WMSetUDIntegerForKey(WMUserDefaults *database, int value,
|
||||
char *defaultName);
|
||||
void WMSetUDIntegerForKey(WMUserDefaults *database, int value,
|
||||
char *defaultName);
|
||||
|
||||
void WMSetUDFloatForKey(WMUserDefaults *database, float value,
|
||||
char *defaultName);
|
||||
void WMSetUDFloatForKey(WMUserDefaults *database, float value,
|
||||
char *defaultName);
|
||||
|
||||
void WMSetUDBoolForKey(WMUserDefaults *database, Bool value,
|
||||
char *defaultName);
|
||||
char *defaultName);
|
||||
|
||||
WMPropList* WMGetUDSearchList(WMUserDefaults *database);
|
||||
|
||||
@@ -977,6 +981,8 @@ Bool WMSetConnectionNonBlocking(WMConnection *cPtr, Bool flag);
|
||||
|
||||
Bool WMSetConnectionCloseOnExec(WMConnection *cPtr, Bool flag);
|
||||
|
||||
void WMSetConnectionShutdownOnClose(WMConnection *cPtr, Bool flag);
|
||||
|
||||
void* WMGetConnectionClientData(WMConnection *cPtr);
|
||||
|
||||
void WMSetConnectionClientData(WMConnection *cPtr, void *data);
|
||||
|
||||
@@ -274,7 +274,9 @@ WMCountInArray(WMArray *array, void *item)
|
||||
void
|
||||
WMSortArray(WMArray *array, WMCompareDataProc *comparer)
|
||||
{
|
||||
qsort(array->items, array->itemCount, sizeof(void*), comparer);
|
||||
if (array->itemCount > 1) { /* Don't sort empty or single element arrays */
|
||||
qsort(array->items, array->itemCount, sizeof(void*), comparer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
|
||||
#include "WINGsP.h"
|
||||
#include "wconfig.h"
|
||||
|
||||
#include <X11/Xlocale.h>
|
||||
|
||||
@@ -9,9 +10,9 @@ _WINGsConfiguration WINGsConfiguration;
|
||||
|
||||
|
||||
|
||||
#define SYSTEM_FONT "-*-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-*-medium-r-*-*-%d-*-*-*-*-*-*-*"
|
||||
|
||||
#define BOLD_SYSTEM_FONT "-*-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*,-*-*-bold-r-*-*-%d-*-*-*-*-*-*-*"
|
||||
#define SYSTEM_FONT "Trebuchet MS,Luxi Sans"
|
||||
#define BOLD_SYSTEM_FONT "Trebuchet MS,Luxi Sans:bold"
|
||||
#define DEFAULT_FONT_SIZE 12
|
||||
|
||||
#define FLOPPY_PATH "/floppy"
|
||||
|
||||
@@ -52,40 +53,22 @@ W_ReadConfigurations(void)
|
||||
if (defaults) {
|
||||
char *buttonName;
|
||||
unsigned button;
|
||||
char *str;
|
||||
char *str;
|
||||
|
||||
WINGsConfiguration.systemFont =
|
||||
WMGetUDStringForKey(defaults, "SystemFont");
|
||||
WINGsConfiguration.systemFont =
|
||||
WMGetUDStringForKey(defaults, "SystemFont");
|
||||
|
||||
WINGsConfiguration.boldSystemFont =
|
||||
WMGetUDStringForKey(defaults, "BoldSystemFont");
|
||||
WINGsConfiguration.boldSystemFont =
|
||||
WMGetUDStringForKey(defaults, "BoldSystemFont");
|
||||
|
||||
WINGsConfiguration.useMultiByte = False;
|
||||
str = WMGetUDStringForKey(defaults, "MultiByteText");
|
||||
if (str) {
|
||||
if (strcasecmp(str, "YES") == 0) {
|
||||
WINGsConfiguration.useMultiByte = True;
|
||||
} else if (strcasecmp(str, "AUTO") == 0) {
|
||||
char *locale;
|
||||
|
||||
/* if it's a multibyte language (japanese, chinese or korean)
|
||||
* then set it to True */
|
||||
locale = setlocale(LC_CTYPE, NULL);
|
||||
if (locale != NULL
|
||||
&& (strncmp(locale, "ja", 2) == 0
|
||||
|| strncmp(locale, "zh", 2) == 0
|
||||
|| strncmp(locale, "ko", 2) == 0)) {
|
||||
WINGsConfiguration.antialiasedText =
|
||||
WMGetUDBoolForKey(defaults, "AntialiasedText");
|
||||
|
||||
WINGsConfiguration.useMultiByte = True;
|
||||
}
|
||||
}
|
||||
}
|
||||
WINGsConfiguration.doubleClickDelay =
|
||||
WMGetUDIntegerForKey(defaults, "DoubleClickTime");
|
||||
|
||||
WINGsConfiguration.doubleClickDelay =
|
||||
WMGetUDIntegerForKey(defaults, "DoubleClickTime");
|
||||
|
||||
WINGsConfiguration.floppyPath =
|
||||
WMGetUDStringForKey(defaults, "FloppyPath");
|
||||
WINGsConfiguration.floppyPath =
|
||||
WMGetUDStringForKey(defaults, "FloppyPath");
|
||||
|
||||
buttonName = WMGetUDStringForKey(defaults, "MouseWheelUp");
|
||||
if (buttonName) {
|
||||
@@ -110,31 +93,30 @@ W_ReadConfigurations(void)
|
||||
WINGsConfiguration.mouseWheelDown = Button5;
|
||||
}
|
||||
|
||||
WINGsConfiguration.defaultFontSize =
|
||||
WINGsConfiguration.defaultFontSize =
|
||||
WMGetUDIntegerForKey(defaults, "DefaultFontSize");
|
||||
}
|
||||
|
||||
|
||||
if (!WINGsConfiguration.systemFont) {
|
||||
WINGsConfiguration.systemFont = SYSTEM_FONT;
|
||||
WINGsConfiguration.systemFont = SYSTEM_FONT;
|
||||
}
|
||||
if (!WINGsConfiguration.boldSystemFont) {
|
||||
WINGsConfiguration.boldSystemFont = BOLD_SYSTEM_FONT;
|
||||
}
|
||||
if (!WINGsConfiguration.floppyPath) {
|
||||
WINGsConfiguration.floppyPath = FLOPPY_PATH;
|
||||
}
|
||||
if (WINGsConfiguration.doubleClickDelay == 0) {
|
||||
WINGsConfiguration.doubleClickDelay = 250;
|
||||
}
|
||||
if (WINGsConfiguration.mouseWheelUp == 0) {
|
||||
WINGsConfiguration.mouseWheelUp = Button4;
|
||||
}
|
||||
if (WINGsConfiguration.mouseWheelDown == 0) {
|
||||
WINGsConfiguration.mouseWheelDown = Button5;
|
||||
WINGsConfiguration.boldSystemFont = BOLD_SYSTEM_FONT;
|
||||
}
|
||||
if (WINGsConfiguration.defaultFontSize == 0) {
|
||||
WINGsConfiguration.defaultFontSize = 12;
|
||||
WINGsConfiguration.defaultFontSize = DEFAULT_FONT_SIZE;
|
||||
}
|
||||
if (!WINGsConfiguration.floppyPath) {
|
||||
WINGsConfiguration.floppyPath = FLOPPY_PATH;
|
||||
}
|
||||
if (WINGsConfiguration.doubleClickDelay == 0) {
|
||||
WINGsConfiguration.doubleClickDelay = 250;
|
||||
}
|
||||
if (WINGsConfiguration.mouseWheelUp == 0) {
|
||||
WINGsConfiguration.mouseWheelUp = Button4;
|
||||
}
|
||||
if (WINGsConfiguration.mouseWheelDown == 0) {
|
||||
WINGsConfiguration.mouseWheelDown = Button5;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* WINGs WMConnection function library
|
||||
*
|
||||
* Copyright (c) 1999-2000 Dan Pascu
|
||||
*
|
||||
*
|
||||
* Copyright (c) 1999-2003 Dan Pascu
|
||||
*
|
||||
* 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
|
||||
@@ -65,11 +65,13 @@
|
||||
#endif
|
||||
|
||||
/* Stuff for setting the sockets into non-blocking mode. */
|
||||
/*#ifdef __POSIX_SOURCE
|
||||
/*
|
||||
#ifdef __POSIX_SOURCE
|
||||
# define NONBLOCK_OPT O_NONBLOCK
|
||||
#else
|
||||
# define NONBLOCK_OPT FNDELAY
|
||||
#endif*/
|
||||
#endif
|
||||
*/
|
||||
|
||||
#define NONBLOCK_OPT O_NONBLOCK
|
||||
|
||||
@@ -121,6 +123,7 @@ typedef struct W_Connection {
|
||||
char *protocol;
|
||||
|
||||
Bool closeOnRelease;
|
||||
Bool shutdownOnClose;
|
||||
Bool wasNonBlocking;
|
||||
Bool isNonBlocking;
|
||||
|
||||
@@ -129,7 +132,7 @@ typedef struct W_Connection {
|
||||
|
||||
|
||||
static void
|
||||
clearOutputQueue(WMConnection *cPtr) /*FOLD00*/
|
||||
clearOutputQueue(WMConnection *cPtr)
|
||||
{
|
||||
cPtr->bufPos = 0;
|
||||
WMEmptyArray(cPtr->outputQueue);
|
||||
@@ -137,7 +140,7 @@ clearOutputQueue(WMConnection *cPtr) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
openTimeout(void *cdata) /*FOLD00*/
|
||||
openTimeout(void *cdata)
|
||||
{
|
||||
WMConnection *cPtr = (WMConnection*) cdata;
|
||||
|
||||
@@ -160,7 +163,7 @@ openTimeout(void *cdata) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
sendTimeout(void *cdata) /*FOLD00*/
|
||||
sendTimeout(void *cdata)
|
||||
{
|
||||
WMConnection *cPtr = (WMConnection*) cdata;
|
||||
|
||||
@@ -173,6 +176,8 @@ sendTimeout(void *cdata) /*FOLD00*/
|
||||
clearOutputQueue(cPtr);
|
||||
cPtr->state = WCTimedOut;
|
||||
cPtr->timeoutState = WCTWhileSending;
|
||||
/* // should we close it no matter what (after calling the didTimeout
|
||||
// delegate)? -Dan */
|
||||
if (cPtr->delegate && cPtr->delegate->didTimeout) {
|
||||
(*cPtr->delegate->didTimeout)(cPtr->delegate, cPtr);
|
||||
} else {
|
||||
@@ -184,7 +189,7 @@ sendTimeout(void *cdata) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
inputHandler(int fd, int mask, void *clientData) /*FOLD00*/
|
||||
inputHandler(int fd, int mask, void *clientData)
|
||||
{
|
||||
WMConnection *cPtr = (WMConnection*)clientData;
|
||||
|
||||
@@ -192,9 +197,10 @@ inputHandler(int fd, int mask, void *clientData) /*FOLD00*/
|
||||
return;
|
||||
|
||||
if ((mask & WIWriteMask)) {
|
||||
int result;
|
||||
|
||||
if (cPtr->state == WCInProgress) {
|
||||
Bool failed;
|
||||
int result;
|
||||
int len = sizeof(result);
|
||||
|
||||
WCErrorCode = 0;
|
||||
@@ -228,7 +234,10 @@ inputHandler(int fd, int mask, void *clientData) /*FOLD00*/
|
||||
if (failed)
|
||||
return;
|
||||
} else if (cPtr->state == WCConnected) {
|
||||
WMFlushConnection(cPtr);
|
||||
result = WMFlushConnection(cPtr);
|
||||
if (result>0 && cPtr->delegate && cPtr->delegate->canResumeSending) {
|
||||
(*cPtr->delegate->canResumeSending)(cPtr->delegate, cPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,7 +258,7 @@ inputHandler(int fd, int mask, void *clientData) /*FOLD00*/
|
||||
|
||||
|
||||
static Bool
|
||||
setSocketNonBlocking(int sock, Bool flag) /*FOLD00*/
|
||||
setSocketNonBlocking(int sock, Bool flag)
|
||||
{
|
||||
int state;
|
||||
Bool isNonBlock;
|
||||
@@ -283,7 +292,7 @@ setSocketNonBlocking(int sock, Bool flag) /*FOLD00*/
|
||||
|
||||
|
||||
static void
|
||||
setConnectionAddress(WMConnection *cPtr, struct sockaddr_in *socketaddr) /*FOLD00*/
|
||||
setConnectionAddress(WMConnection *cPtr, struct sockaddr_in *socketaddr)
|
||||
{
|
||||
wassertr(cPtr->address==NULL);
|
||||
|
||||
@@ -295,7 +304,7 @@ setConnectionAddress(WMConnection *cPtr, struct sockaddr_in *socketaddr) /*FOLD0
|
||||
|
||||
|
||||
static struct sockaddr_in*
|
||||
getSocketAddress(char* name, char* service, char* protocol) /*FOLD00*/
|
||||
getSocketAddress(char* name, char* service, char* protocol)
|
||||
{
|
||||
static struct sockaddr_in socketaddr;
|
||||
struct servent *sp;
|
||||
@@ -321,7 +330,7 @@ getSocketAddress(char* name, char* service, char* protocol) /*FOLD00*/
|
||||
#ifndef HAVE_INET_ATON
|
||||
if ((socketaddr.sin_addr.s_addr = inet_addr(name)) == INADDR_NONE) {
|
||||
#else
|
||||
if (inet_aton(name, &socketaddr.sin_addr) == 0) {
|
||||
if (inet_aton(name, &socketaddr.sin_addr) == 0) {
|
||||
#endif
|
||||
WMReleaseHost(host);
|
||||
return NULL;
|
||||
@@ -359,7 +368,7 @@ dummyHandler(int signum)
|
||||
|
||||
|
||||
static WMConnection*
|
||||
createConnectionWithSocket(int sock, Bool closeOnRelease) /*FOLD00*/
|
||||
createConnectionWithSocket(int sock, Bool closeOnRelease)
|
||||
{
|
||||
WMConnection *cPtr;
|
||||
struct sigaction sig_action;
|
||||
@@ -376,6 +385,7 @@ createConnectionWithSocket(int sock, Bool closeOnRelease) /*FOLD00*/
|
||||
cPtr->sendTimeout.timeout = DefaultTimeout;
|
||||
cPtr->sendTimeout.handler = NULL;
|
||||
cPtr->closeOnRelease = closeOnRelease;
|
||||
cPtr->shutdownOnClose = 1;
|
||||
cPtr->outputQueue =
|
||||
WMCreateArrayWithDestructor(16, (WMFreeDataProc*)WMReleaseData);
|
||||
cPtr->state = WCNotConnected;
|
||||
@@ -399,7 +409,7 @@ createConnectionWithSocket(int sock, Bool closeOnRelease) /*FOLD00*/
|
||||
|
||||
#if 0
|
||||
WMConnection*
|
||||
WMCreateConnectionWithSocket(int sock, Bool closeOnRelease) /*FOLD00*/
|
||||
WMCreateConnectionWithSocket(int sock, Bool closeOnRelease)
|
||||
{
|
||||
WMConnection *cPtr;
|
||||
struct sockaddr_in clientname;
|
||||
@@ -411,8 +421,8 @@ WMCreateConnectionWithSocket(int sock, Bool closeOnRelease) /*FOLD00*/
|
||||
cPtr->isNonBlocking = cPtr->wasNonBlocking;
|
||||
|
||||
/* some way to find out if it is connected, and binded. can't find
|
||||
if it listens though!!!
|
||||
*/
|
||||
if it listens though!!!
|
||||
*/
|
||||
|
||||
size = sizeof(clientname);
|
||||
n = getpeername(sock, (struct sockaddr*) &clientname, &size);
|
||||
@@ -448,7 +458,7 @@ WMCreateConnectionWithSocket(int sock, Bool closeOnRelease) /*FOLD00*/
|
||||
* currently only "tcp" is supported.
|
||||
*/
|
||||
WMConnection*
|
||||
WMCreateConnectionAsServerAtAddress(char *host, char *service, char *protocol) /*FOLD00*/
|
||||
WMCreateConnectionAsServerAtAddress(char *host, char *service, char *protocol)
|
||||
{
|
||||
WMConnection *cPtr;
|
||||
struct sockaddr_in *socketaddr;
|
||||
@@ -509,7 +519,7 @@ WMCreateConnectionAsServerAtAddress(char *host, char *service, char *protocol) /
|
||||
|
||||
|
||||
WMConnection*
|
||||
WMCreateConnectionToAddress(char *host, char *service, char *protocol) /*FOLD00*/
|
||||
WMCreateConnectionToAddress(char *host, char *service, char *protocol)
|
||||
{
|
||||
WMConnection *cPtr;
|
||||
struct sockaddr_in *socketaddr;
|
||||
@@ -551,7 +561,7 @@ WMCreateConnectionToAddress(char *host, char *service, char *protocol) /*FOLD00*
|
||||
|
||||
|
||||
WMConnection*
|
||||
WMCreateConnectionToAddressAndNotify(char *host, char *service, char *protocol) /*FOLD00*/
|
||||
WMCreateConnectionToAddressAndNotify(char *host, char *service, char *protocol)
|
||||
{
|
||||
WMConnection *cPtr;
|
||||
struct sockaddr_in *socketaddr;
|
||||
@@ -602,7 +612,7 @@ WMCreateConnectionToAddressAndNotify(char *host, char *service, char *protocol)
|
||||
|
||||
|
||||
static void
|
||||
removeAllHandlers(WMConnection *cPtr) /*FOLD00*/
|
||||
removeAllHandlers(WMConnection *cPtr)
|
||||
{
|
||||
if (cPtr->handler.read)
|
||||
WMDeleteInputHandler(cPtr->handler.read);
|
||||
@@ -624,10 +634,12 @@ removeAllHandlers(WMConnection *cPtr) /*FOLD00*/
|
||||
|
||||
|
||||
void
|
||||
WMDestroyConnection(WMConnection *cPtr) /*FOLD00*/
|
||||
WMDestroyConnection(WMConnection *cPtr)
|
||||
{
|
||||
if (cPtr->closeOnRelease && cPtr->sock>=0) {
|
||||
shutdown(cPtr->sock, SHUT_RDWR);
|
||||
if (cPtr->shutdownOnClose) {
|
||||
shutdown(cPtr->sock, SHUT_RDWR);
|
||||
}
|
||||
close(cPtr->sock);
|
||||
}
|
||||
|
||||
@@ -645,10 +657,12 @@ WMDestroyConnection(WMConnection *cPtr) /*FOLD00*/
|
||||
|
||||
|
||||
void
|
||||
WMCloseConnection(WMConnection *cPtr) /*FOLD00*/
|
||||
WMCloseConnection(WMConnection *cPtr)
|
||||
{
|
||||
if (cPtr->sock>=0) {
|
||||
shutdown(cPtr->sock, SHUT_RDWR);
|
||||
if (cPtr->shutdownOnClose) {
|
||||
shutdown(cPtr->sock, SHUT_RDWR);
|
||||
}
|
||||
close(cPtr->sock);
|
||||
cPtr->sock = -1;
|
||||
}
|
||||
@@ -661,7 +675,7 @@ WMCloseConnection(WMConnection *cPtr) /*FOLD00*/
|
||||
|
||||
|
||||
WMConnection*
|
||||
WMAcceptConnection(WMConnection *listener) /*FOLD00*/
|
||||
WMAcceptConnection(WMConnection *listener)
|
||||
{
|
||||
struct sockaddr_in clientname;
|
||||
int size;
|
||||
@@ -688,49 +702,49 @@ WMAcceptConnection(WMConnection *listener) /*FOLD00*/
|
||||
|
||||
|
||||
char*
|
||||
WMGetConnectionAddress(WMConnection *cPtr) /*FOLD00*/
|
||||
WMGetConnectionAddress(WMConnection *cPtr)
|
||||
{
|
||||
return cPtr->address;
|
||||
}
|
||||
|
||||
|
||||
char*
|
||||
WMGetConnectionService(WMConnection *cPtr) /*FOLD00*/
|
||||
WMGetConnectionService(WMConnection *cPtr)
|
||||
{
|
||||
return cPtr->service;
|
||||
}
|
||||
|
||||
|
||||
char*
|
||||
WMGetConnectionProtocol(WMConnection *cPtr) /*FOLD00*/
|
||||
WMGetConnectionProtocol(WMConnection *cPtr)
|
||||
{
|
||||
return cPtr->protocol;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
WMGetConnectionSocket(WMConnection *cPtr) /*FOLD00*/
|
||||
WMGetConnectionSocket(WMConnection *cPtr)
|
||||
{
|
||||
return cPtr->sock;
|
||||
}
|
||||
|
||||
|
||||
WMConnectionState
|
||||
WMGetConnectionState(WMConnection *cPtr) /*FOLD00*/
|
||||
WMGetConnectionState(WMConnection *cPtr)
|
||||
{
|
||||
return cPtr->state;
|
||||
}
|
||||
|
||||
|
||||
WMConnectionTimeoutState
|
||||
WMGetConnectionTimeoutState(WMConnection *cPtr) /*FOLD00*/
|
||||
WMGetConnectionTimeoutState(WMConnection *cPtr)
|
||||
{
|
||||
return cPtr->timeoutState;
|
||||
}
|
||||
|
||||
|
||||
Bool
|
||||
WMEnqueueConnectionData(WMConnection *cPtr, WMData *data) /*FOLD00*/
|
||||
WMEnqueueConnectionData(WMConnection *cPtr, WMData *data)
|
||||
{
|
||||
wassertrv(cPtr->state!=WCNotConnected && cPtr->state!=WCListening, False);
|
||||
wassertrv(cPtr->state!=WCInProgress && cPtr->state!=WCFailed, False);
|
||||
@@ -743,10 +757,18 @@ WMEnqueueConnectionData(WMConnection *cPtr, WMData *data) /*FOLD00*/
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Return value:
|
||||
* -1 - not connected or connection died while sending
|
||||
* 0 - couldn't send the data (or part of it). data is saved in a queue
|
||||
* and will be sent when possible. after it is sent the canResumeSending
|
||||
* callback will be called.
|
||||
* 1 - data was succesfully sent
|
||||
*/
|
||||
int
|
||||
WMSendConnectionData(WMConnection *cPtr, WMData *data) /*FOLD00*/
|
||||
WMSendConnectionData(WMConnection *cPtr, WMData *data)
|
||||
{
|
||||
int bytes, pos, len, totalTransfer;
|
||||
int bytes, pos, len;
|
||||
TimeoutData *tPtr = &cPtr->sendTimeout;
|
||||
const unsigned char *dataBytes;
|
||||
|
||||
@@ -767,8 +789,6 @@ WMSendConnectionData(WMConnection *cPtr, WMData *data) /*FOLD00*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
totalTransfer = 0;
|
||||
|
||||
while (WMGetArrayItemCount(cPtr->outputQueue) > 0) {
|
||||
data = WMGetFromArray(cPtr->outputQueue, 0);
|
||||
dataBytes = (const unsigned char *)WMDataBytes(data);
|
||||
@@ -793,7 +813,7 @@ WMSendConnectionData(WMConnection *cPtr, WMData *data) /*FOLD00*/
|
||||
WMAddInputHandler(cPtr->sock, WIWriteMask,
|
||||
inputHandler, cPtr);
|
||||
}
|
||||
return totalTransfer;
|
||||
return 0;
|
||||
default:
|
||||
WCErrorCode = errno;
|
||||
cPtr->state = WCDied;
|
||||
@@ -804,7 +824,6 @@ WMSendConnectionData(WMConnection *cPtr, WMData *data) /*FOLD00*/
|
||||
}
|
||||
}
|
||||
pos += bytes;
|
||||
totalTransfer += bytes;
|
||||
}
|
||||
WMDeleteFromArray(cPtr->outputQueue, 0);
|
||||
cPtr->bufPos = 0;
|
||||
@@ -812,13 +831,18 @@ WMSendConnectionData(WMConnection *cPtr, WMData *data) /*FOLD00*/
|
||||
WMDeleteTimerHandler(tPtr->handler);
|
||||
tPtr->handler = NULL;
|
||||
}
|
||||
if (cPtr->handler.write) {
|
||||
WMDeleteInputHandler(cPtr->handler.write);
|
||||
cPtr->handler.write = NULL;
|
||||
}
|
||||
/*if (cPtr->handler.write) {
|
||||
WMDeleteInputHandler(cPtr->handler.write);
|
||||
cPtr->handler.write = NULL;
|
||||
}*/
|
||||
}
|
||||
|
||||
return totalTransfer;
|
||||
if (cPtr->handler.write) {
|
||||
WMDeleteInputHandler(cPtr->handler.write);
|
||||
cPtr->handler.write = NULL;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -835,7 +859,7 @@ WMSendConnectionData(WMConnection *cPtr, WMData *data) /*FOLD00*/
|
||||
* considered to be an error condition, and will return NULL.
|
||||
*/
|
||||
WMData*
|
||||
WMGetConnectionAvailableData(WMConnection *cPtr) /*FOLD00*/
|
||||
WMGetConnectionAvailableData(WMConnection *cPtr)
|
||||
{
|
||||
char buffer[NETBUF_SIZE];
|
||||
int nbytes;
|
||||
@@ -880,7 +904,7 @@ again:
|
||||
|
||||
|
||||
void
|
||||
WMSetConnectionDelegate(WMConnection *cPtr, ConnectionDelegate *delegate) /*FOLD00*/
|
||||
WMSetConnectionDelegate(WMConnection *cPtr, ConnectionDelegate *delegate)
|
||||
{
|
||||
wassertr(cPtr->sock >= 0);
|
||||
/* Don't try to set the delegate multiple times */
|
||||
@@ -898,7 +922,7 @@ WMSetConnectionDelegate(WMConnection *cPtr, ConnectionDelegate *delegate) /*FOLD
|
||||
|
||||
#if 0
|
||||
Bool
|
||||
WMIsConnectionNonBlocking(WMConnection *cPtr) /*FOLD00*/
|
||||
WMIsConnectionNonBlocking(WMConnection *cPtr)
|
||||
{
|
||||
#if 1
|
||||
int state;
|
||||
@@ -921,10 +945,12 @@ WMIsConnectionNonBlocking(WMConnection *cPtr) /*FOLD00*/
|
||||
|
||||
|
||||
Bool
|
||||
WMSetConnectionNonBlocking(WMConnection *cPtr, Bool flag) /*FOLD00*/
|
||||
WMSetConnectionNonBlocking(WMConnection *cPtr, Bool flag)
|
||||
{
|
||||
wassertrv(cPtr!=NULL && cPtr->sock>=0, False);
|
||||
|
||||
flag = ((flag==0) ? 0 : 1);
|
||||
|
||||
if (cPtr->isNonBlocking == flag)
|
||||
return True;
|
||||
|
||||
@@ -942,7 +968,7 @@ WMSetConnectionCloseOnExec(WMConnection *cPtr, Bool flag)
|
||||
{
|
||||
wassertrv(cPtr!=NULL && cPtr->sock>=0, False);
|
||||
|
||||
if (fcntl(cPtr->sock, F_SETFD, (flag ? FD_CLOEXEC : 0)) < 0) {
|
||||
if (fcntl(cPtr->sock, F_SETFD, ((flag==0) ? 0 : FD_CLOEXEC)) < 0) {
|
||||
return False;
|
||||
}
|
||||
|
||||
@@ -950,29 +976,36 @@ WMSetConnectionCloseOnExec(WMConnection *cPtr, Bool flag)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WMSetConnectionShutdownOnClose(WMConnection *cPtr, Bool flag)
|
||||
{
|
||||
cPtr->shutdownOnClose = ((flag==0) ? 0 : 1);
|
||||
}
|
||||
|
||||
|
||||
void*
|
||||
WMGetConnectionClientData(WMConnection *cPtr) /*FOLD00*/
|
||||
WMGetConnectionClientData(WMConnection *cPtr)
|
||||
{
|
||||
return cPtr->clientData;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WMSetConnectionClientData(WMConnection *cPtr, void *data) /*FOLD00*/
|
||||
WMSetConnectionClientData(WMConnection *cPtr, void *data)
|
||||
{
|
||||
cPtr->clientData = data;
|
||||
}
|
||||
|
||||
|
||||
unsigned int
|
||||
WMGetConnectionFlags(WMConnection *cPtr) /*FOLD00*/
|
||||
WMGetConnectionFlags(WMConnection *cPtr)
|
||||
{
|
||||
return cPtr->uflags;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WMSetConnectionFlags(WMConnection *cPtr, unsigned int flags) /*FOLD00*/
|
||||
WMSetConnectionFlags(WMConnection *cPtr, unsigned int flags)
|
||||
{
|
||||
cPtr->uflags = flags;
|
||||
}
|
||||
@@ -986,7 +1019,7 @@ WMGetConnectionUnsentData(WMConnection *cPtr)
|
||||
|
||||
|
||||
void
|
||||
WMSetConnectionDefaultTimeout(unsigned int timeout) /*FOLD00*/
|
||||
WMSetConnectionDefaultTimeout(unsigned int timeout)
|
||||
{
|
||||
if (timeout == 0) {
|
||||
DefaultTimeout = DEF_TIMEOUT;
|
||||
@@ -997,7 +1030,7 @@ WMSetConnectionDefaultTimeout(unsigned int timeout) /*FOLD00*/
|
||||
|
||||
|
||||
void
|
||||
WMSetConnectionOpenTimeout(unsigned int timeout) /*FOLD00*/
|
||||
WMSetConnectionOpenTimeout(unsigned int timeout)
|
||||
{
|
||||
if (timeout == 0) {
|
||||
OpenTimeout = DefaultTimeout;
|
||||
@@ -1008,7 +1041,7 @@ WMSetConnectionOpenTimeout(unsigned int timeout) /*FOLD00*/
|
||||
|
||||
|
||||
void
|
||||
WMSetConnectionSendTimeout(WMConnection *cPtr, unsigned int timeout) /*FOLD00*/
|
||||
WMSetConnectionSendTimeout(WMConnection *cPtr, unsigned int timeout)
|
||||
{
|
||||
if (timeout == 0) {
|
||||
cPtr->sendTimeout.timeout = DefaultTimeout;
|
||||
|
||||
50
WINGs/data.c
50
WINGs/data.c
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* WINGs WMData function library
|
||||
*
|
||||
* Copyright (c) 1999-2000 Dan Pascu
|
||||
*
|
||||
*
|
||||
* Copyright (c) 1999-2003 Dan Pascu
|
||||
*
|
||||
* 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
|
||||
@@ -40,7 +40,7 @@ typedef struct W_Data {
|
||||
/* Creating and destroying data objects */
|
||||
|
||||
WMData*
|
||||
WMCreateDataWithCapacity(unsigned capacity) /*FOLD00*/
|
||||
WMCreateDataWithCapacity(unsigned capacity)
|
||||
{
|
||||
WMData *aData;
|
||||
|
||||
@@ -63,7 +63,7 @@ WMCreateDataWithCapacity(unsigned capacity) /*FOLD00*/
|
||||
|
||||
|
||||
WMData*
|
||||
WMCreateDataWithLength(unsigned length) /*FOLD00*/
|
||||
WMCreateDataWithLength(unsigned length)
|
||||
{
|
||||
WMData *aData;
|
||||
|
||||
@@ -78,7 +78,7 @@ WMCreateDataWithLength(unsigned length) /*FOLD00*/
|
||||
|
||||
|
||||
WMData*
|
||||
WMCreateDataWithBytes(void *bytes, unsigned length) /*FOLD00*/
|
||||
WMCreateDataWithBytes(void *bytes, unsigned length)
|
||||
{
|
||||
WMData *aData;
|
||||
|
||||
@@ -91,7 +91,7 @@ WMCreateDataWithBytes(void *bytes, unsigned length) /*FOLD00*/
|
||||
|
||||
|
||||
WMData*
|
||||
WMCreateDataWithBytesNoCopy(void *bytes, unsigned length, /*FOLD00*/
|
||||
WMCreateDataWithBytesNoCopy(void *bytes, unsigned length,
|
||||
WMFreeDataProc *destructor)
|
||||
{
|
||||
WMData *aData;
|
||||
@@ -110,7 +110,7 @@ WMCreateDataWithBytesNoCopy(void *bytes, unsigned length, /*FOLD00*/
|
||||
|
||||
|
||||
WMData*
|
||||
WMCreateDataWithData(WMData *aData) /*FOLD00*/
|
||||
WMCreateDataWithData(WMData *aData)
|
||||
{
|
||||
WMData *newData;
|
||||
|
||||
@@ -126,7 +126,7 @@ WMCreateDataWithData(WMData *aData) /*FOLD00*/
|
||||
|
||||
|
||||
WMData*
|
||||
WMRetainData(WMData *aData) /*FOLD00*/
|
||||
WMRetainData(WMData *aData)
|
||||
{
|
||||
aData->retainCount++;
|
||||
return aData;
|
||||
@@ -134,7 +134,7 @@ WMRetainData(WMData *aData) /*FOLD00*/
|
||||
|
||||
|
||||
void
|
||||
WMReleaseData(WMData *aData) /*FOLD00*/
|
||||
WMReleaseData(WMData *aData)
|
||||
{
|
||||
aData->retainCount--;
|
||||
if (aData->retainCount > 0)
|
||||
@@ -150,7 +150,7 @@ WMReleaseData(WMData *aData) /*FOLD00*/
|
||||
/* Adjusting capacity */
|
||||
|
||||
void
|
||||
WMSetDataCapacity(WMData *aData, unsigned capacity) /*FOLD00*/
|
||||
WMSetDataCapacity(WMData *aData, unsigned capacity)
|
||||
{
|
||||
if (aData->capacity != capacity) {
|
||||
aData->bytes = wrealloc(aData->bytes, capacity);
|
||||
@@ -164,7 +164,7 @@ WMSetDataCapacity(WMData *aData, unsigned capacity) /*FOLD00*/
|
||||
|
||||
|
||||
void
|
||||
WMSetDataLength(WMData *aData, unsigned length) /*FOLD00*/
|
||||
WMSetDataLength(WMData *aData, unsigned length)
|
||||
{
|
||||
if (length > aData->capacity) {
|
||||
WMSetDataCapacity(aData, length);
|
||||
@@ -185,7 +185,7 @@ WMSetDataFormat(WMData *aData, unsigned format)
|
||||
|
||||
|
||||
void
|
||||
WMIncreaseDataLengthBy(WMData *aData, unsigned extraLength) /*FOLD00*/
|
||||
WMIncreaseDataLengthBy(WMData *aData, unsigned extraLength)
|
||||
{
|
||||
WMSetDataLength(aData, aData->length + extraLength);
|
||||
}
|
||||
@@ -194,14 +194,14 @@ WMIncreaseDataLengthBy(WMData *aData, unsigned extraLength) /*FOLD00*/
|
||||
/* Accessing data */
|
||||
|
||||
const void*
|
||||
WMDataBytes(WMData *aData) /*FOLD00*/
|
||||
WMDataBytes(WMData *aData)
|
||||
{
|
||||
return aData->bytes;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WMGetDataBytes(WMData *aData, void *buffer) /*FOLD00*/
|
||||
WMGetDataBytes(WMData *aData, void *buffer)
|
||||
{
|
||||
wassertr(aData->length > 0);
|
||||
|
||||
@@ -217,7 +217,7 @@ WMGetDataFormat(WMData *aData)
|
||||
|
||||
|
||||
void
|
||||
WMGetDataBytesWithLength(WMData *aData, void *buffer, unsigned length) /*FOLD00*/
|
||||
WMGetDataBytesWithLength(WMData *aData, void *buffer, unsigned length)
|
||||
{
|
||||
wassertr(aData->length > 0);
|
||||
wassertr(length <= aData->length);
|
||||
@@ -227,7 +227,7 @@ WMGetDataBytesWithLength(WMData *aData, void *buffer, unsigned length) /*FOLD00*
|
||||
|
||||
|
||||
void
|
||||
WMGetDataBytesWithRange(WMData *aData, void *buffer, WMRange aRange) /*FOLD00*/
|
||||
WMGetDataBytesWithRange(WMData *aData, void *buffer, WMRange aRange)
|
||||
{
|
||||
wassertr(aRange.position < aData->length);
|
||||
wassertr(aRange.count <= aData->length-aRange.position);
|
||||
@@ -238,7 +238,7 @@ WMGetDataBytesWithRange(WMData *aData, void *buffer, WMRange aRange) /*FOLD00*/
|
||||
|
||||
|
||||
WMData*
|
||||
WMGetSubdataWithRange(WMData *aData, WMRange aRange) /*FOLD00*/
|
||||
WMGetSubdataWithRange(WMData *aData, WMRange aRange)
|
||||
{
|
||||
void *buffer;
|
||||
WMData *newData;
|
||||
@@ -258,7 +258,7 @@ WMGetSubdataWithRange(WMData *aData, WMRange aRange) /*FOLD00*/
|
||||
/* Testing data */
|
||||
|
||||
Bool
|
||||
WMIsDataEqualToData(WMData *aData, WMData *anotherData) /*FOLD00*/
|
||||
WMIsDataEqualToData(WMData *aData, WMData *anotherData)
|
||||
{
|
||||
if (aData->length != anotherData->length)
|
||||
return False;
|
||||
@@ -271,7 +271,7 @@ WMIsDataEqualToData(WMData *aData, WMData *anotherData) /*FOLD00*/
|
||||
|
||||
|
||||
unsigned
|
||||
WMGetDataLength(WMData *aData) /*FOLD00*/
|
||||
WMGetDataLength(WMData *aData)
|
||||
{
|
||||
return aData->length;
|
||||
}
|
||||
@@ -279,7 +279,7 @@ WMGetDataLength(WMData *aData) /*FOLD00*/
|
||||
|
||||
/* Adding data */
|
||||
void
|
||||
WMAppendDataBytes(WMData *aData, void *bytes, unsigned length) /*FOLD00*/
|
||||
WMAppendDataBytes(WMData *aData, void *bytes, unsigned length)
|
||||
{
|
||||
unsigned oldLength = aData->length;
|
||||
unsigned newLength = oldLength + length;
|
||||
@@ -303,7 +303,7 @@ WMAppendDataBytes(WMData *aData, void *bytes, unsigned length) /*FOLD00*/
|
||||
|
||||
|
||||
void
|
||||
WMAppendData(WMData *aData, WMData *anotherData) /*FOLD00*/
|
||||
WMAppendData(WMData *aData, WMData *anotherData)
|
||||
{
|
||||
if (anotherData->length > 0)
|
||||
WMAppendDataBytes(aData, anotherData->bytes, anotherData->length);
|
||||
@@ -314,7 +314,7 @@ WMAppendData(WMData *aData, WMData *anotherData) /*FOLD00*/
|
||||
/* Modifying data */
|
||||
|
||||
void
|
||||
WMReplaceDataBytesInRange(WMData *aData, WMRange aRange, void *bytes) /*FOLD00*/
|
||||
WMReplaceDataBytesInRange(WMData *aData, WMRange aRange, void *bytes)
|
||||
{
|
||||
wassertr(aRange.position < aData->length);
|
||||
wassertr(aRange.count <= aData->length-aRange.position);
|
||||
@@ -324,7 +324,7 @@ WMReplaceDataBytesInRange(WMData *aData, WMRange aRange, void *bytes) /*FOLD00*/
|
||||
|
||||
|
||||
void
|
||||
WMResetDataBytesInRange(WMData *aData, WMRange aRange) /*FOLD00*/
|
||||
WMResetDataBytesInRange(WMData *aData, WMRange aRange)
|
||||
{
|
||||
wassertr(aRange.position < aData->length);
|
||||
wassertr(aRange.count <= aData->length-aRange.position);
|
||||
@@ -334,7 +334,7 @@ WMResetDataBytesInRange(WMData *aData, WMRange aRange) /*FOLD00*/
|
||||
|
||||
|
||||
void
|
||||
WMSetData(WMData *aData, WMData *anotherData) /*FOLD00*/
|
||||
WMSetData(WMData *aData, WMData *anotherData)
|
||||
{
|
||||
unsigned length = anotherData->length;
|
||||
|
||||
|
||||
275
WINGs/dragcommon.c
Normal file
275
WINGs/dragcommon.c
Normal file
@@ -0,0 +1,275 @@
|
||||
/* #include <X11/Xatom.h> */
|
||||
#include "WINGsP.h"
|
||||
|
||||
#define VERSION_INFO(dragInfo) dragInfo->protocolVersion
|
||||
#define XDND_DEST_INFO(dragInfo) dragInfo->destInfo
|
||||
#define XDND_DEST_VIEW(dragInfo) dragInfo->destInfo->destView
|
||||
#define XDND_DEST_VIEW_STORED(dragInfo) ((dragInfo->destInfo) != NULL)\
|
||||
&& ((dragInfo->destInfo->destView) != NULL)
|
||||
|
||||
|
||||
static Bool _WindowExists;
|
||||
|
||||
|
||||
Atom
|
||||
W_OperationToAction(WMScreen *scr, WMDragOperationType operation)
|
||||
{
|
||||
switch (operation) {
|
||||
case WDOperationNone:
|
||||
return None;
|
||||
|
||||
case WDOperationCopy:
|
||||
return scr->xdndActionCopy;
|
||||
|
||||
case WDOperationMove:
|
||||
return scr->xdndActionMove;
|
||||
|
||||
case WDOperationLink:
|
||||
return scr->xdndActionLink;
|
||||
|
||||
case WDOperationAsk:
|
||||
return scr->xdndActionAsk;
|
||||
|
||||
case WDOperationPrivate:
|
||||
return scr->xdndActionPrivate;
|
||||
|
||||
default:
|
||||
return None;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WMDragOperationType
|
||||
W_ActionToOperation(WMScreen *scr, Atom action)
|
||||
{
|
||||
if (action == scr->xdndActionCopy) {
|
||||
return WDOperationCopy;
|
||||
|
||||
} else if (action == scr->xdndActionMove) {
|
||||
return WDOperationMove;
|
||||
|
||||
} else if (action == scr->xdndActionLink) {
|
||||
return WDOperationLink;
|
||||
|
||||
} else if (action == scr->xdndActionAsk) {
|
||||
return WDOperationAsk;
|
||||
|
||||
} else if (action == scr->xdndActionPrivate) {
|
||||
return WDOperationPrivate;
|
||||
|
||||
} else if (action == None) {
|
||||
|
||||
return WDOperationNone;
|
||||
} else {
|
||||
char *tmp = XGetAtomName(scr->display, action);
|
||||
|
||||
wwarning("unknown XDND action %s ", tmp);
|
||||
XFree(tmp);
|
||||
|
||||
return WDOperationCopy;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
freeDragOperationItem(void* item)
|
||||
{
|
||||
wfree(item);
|
||||
}
|
||||
|
||||
WMArray*
|
||||
WMCreateDragOperationArray(int initialSize)
|
||||
{
|
||||
return WMCreateArrayWithDestructor(initialSize, freeDragOperationItem);
|
||||
}
|
||||
|
||||
|
||||
WMDragOperationItem*
|
||||
WMCreateDragOperationItem(WMDragOperationType type, char* text)
|
||||
{
|
||||
W_DragOperationItem *result = wmalloc(sizeof(W_DragOperationItem));
|
||||
|
||||
result->type = type;
|
||||
result->text = text;
|
||||
|
||||
return (WMDragOperationItem*) result;
|
||||
}
|
||||
|
||||
WMDragOperationType
|
||||
WMGetDragOperationItemType(WMDragOperationItem* item)
|
||||
{
|
||||
return ((W_DragOperationItem*)item)->type;
|
||||
}
|
||||
|
||||
|
||||
char*
|
||||
WMGetDragOperationItemText(WMDragOperationItem* item)
|
||||
{
|
||||
return ((W_DragOperationItem*)item)->text;
|
||||
}
|
||||
|
||||
static int
|
||||
handleNoWindowXError(Display *dpy, XErrorEvent *errEvt)
|
||||
{
|
||||
if (errEvt->error_code == BadWindow
|
||||
|| errEvt->error_code == BadDrawable) {
|
||||
_WindowExists = False;
|
||||
return Success;
|
||||
}
|
||||
|
||||
return errEvt->error_code;
|
||||
}
|
||||
|
||||
|
||||
static Bool
|
||||
windowExists(Display *dpy, Window win)
|
||||
{
|
||||
void* previousErrorHandler;
|
||||
XWindowAttributes attr;
|
||||
|
||||
XSynchronize(dpy, True);
|
||||
previousErrorHandler = XSetErrorHandler(handleNoWindowXError);
|
||||
_WindowExists = True;
|
||||
|
||||
/* can generate BadDrawable or BadWindow */
|
||||
XGetWindowAttributes(dpy, win, &attr);
|
||||
|
||||
XSetErrorHandler(previousErrorHandler);
|
||||
XSynchronize(dpy, False);
|
||||
return _WindowExists;
|
||||
}
|
||||
|
||||
|
||||
Bool
|
||||
W_SendDnDClientMessage(Display *dpy, Window win, Atom message,
|
||||
unsigned long data0,
|
||||
unsigned long data1,
|
||||
unsigned long data2,
|
||||
unsigned long data3,
|
||||
unsigned long data4)
|
||||
{
|
||||
XEvent ev;
|
||||
|
||||
if (! windowExists(dpy, win)) {
|
||||
wwarning("xdnd message target %d does no longer exist.", win);
|
||||
return False; /* message not sent */
|
||||
}
|
||||
|
||||
ev.type = ClientMessage;
|
||||
ev.xclient.message_type = message;
|
||||
ev.xclient.format = 32;
|
||||
ev.xclient.window = win;
|
||||
ev.xclient.data.l[0] = data0;
|
||||
ev.xclient.data.l[1] = data1;
|
||||
ev.xclient.data.l[2] = data2;
|
||||
ev.xclient.data.l[3] = data3;
|
||||
ev.xclient.data.l[4] = data4;
|
||||
|
||||
|
||||
XSendEvent(dpy, win, False, 0, &ev);
|
||||
XFlush(dpy);
|
||||
|
||||
return True; /* message sent */
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
handleLeaveMessage(WMDraggingInfo *info)
|
||||
{
|
||||
if (XDND_DEST_INFO(info) != NULL) {
|
||||
if (XDND_DEST_VIEW(info) != NULL) {
|
||||
XDND_DEST_VIEW(info)->dragDestinationProcs->concludeDragOperation(
|
||||
XDND_DEST_VIEW(info));
|
||||
}
|
||||
W_DragDestinationInfoClear(info);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
W_HandleDNDClientMessage(WMView *toplevel, XClientMessageEvent *event)
|
||||
{
|
||||
WMScreen *scr = W_VIEW_SCREEN(toplevel);
|
||||
WMDraggingInfo *info = &scr->dragInfo;
|
||||
Atom messageType = event->message_type;
|
||||
|
||||
#ifdef XDND_DEBUG
|
||||
{
|
||||
char* msgTypeName = XGetAtomName(scr->display, messageType);
|
||||
|
||||
if (msgTypeName != NULL)
|
||||
printf("event type = %s\n", msgTypeName);
|
||||
else
|
||||
printf("pb with event type !\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Messages from destination to source */
|
||||
if (messageType == scr->xdndStatusAtom
|
||||
|| messageType == scr->xdndFinishedAtom) {
|
||||
W_DragSourceStopTimer();
|
||||
W_DragSourceStateHandler(info, event);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Messages from source to destination */
|
||||
if (messageType == scr->xdndEnterAtom) {
|
||||
W_DragDestinationStopTimer();
|
||||
W_DragDestinationStoreEnterMsgInfo(info, toplevel, event);
|
||||
|
||||
if (VERSION_INFO(info) <= XDND_VERSION) {
|
||||
if (XDND_DEST_VIEW_STORED(info)) {
|
||||
/* xdndPosition previously received on xdnd aware view */
|
||||
W_DragDestinationStateHandler(info, event);
|
||||
return;
|
||||
} else {
|
||||
W_DragDestinationStartTimer(info);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
wwarning("received dnd enter msg with unsupported version %i",
|
||||
VERSION_INFO(info));
|
||||
W_DragDestinationCancelDropOnEnter(toplevel, info);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (messageType == scr->xdndPositionAtom) {
|
||||
W_DragDestinationStopTimer();
|
||||
W_DragDestinationStorePositionMsgInfo(info, toplevel, event);
|
||||
W_DragDestinationStateHandler(info, event);
|
||||
return;
|
||||
}
|
||||
|
||||
if (messageType == scr->xdndSelectionAtom
|
||||
|| messageType == scr->xdndDropAtom) {
|
||||
W_DragDestinationStopTimer();
|
||||
W_DragDestinationStateHandler(info, event);
|
||||
return;
|
||||
}
|
||||
|
||||
if (messageType == scr->xdndLeaveAtom) {
|
||||
/* conclude drop operation, and clear dragging info */
|
||||
W_DragDestinationStopTimer();
|
||||
handleLeaveMessage(info);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* called in destroyView (wview.c) */
|
||||
void
|
||||
W_FreeViewXdndPart(WMView *view)
|
||||
{
|
||||
WMUnregisterViewDraggedTypes(view);
|
||||
|
||||
if (view->dragSourceProcs)
|
||||
wfree(view->dragSourceProcs);
|
||||
|
||||
if (view->dragDestinationProcs)
|
||||
wfree(view->dragDestinationProcs);
|
||||
|
||||
if (view->dragImage)
|
||||
WMReleasePixmap(view->dragImage);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
2322
WINGs/dragsource.c
2322
WINGs/dragsource.c
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Window Maker miscelaneous function library
|
||||
*
|
||||
* Copyright (c) 1997 Alfredo K. Kojima
|
||||
*
|
||||
*
|
||||
* Copyright (c) 1997-2003 Alfredo K. Kojima
|
||||
*
|
||||
* 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
|
||||
@@ -51,12 +51,12 @@ wstrerror(int errnum)
|
||||
if (errno < sys_nerr)
|
||||
return sys_errlist[errnum];
|
||||
|
||||
sprintf (buf, _("Unknown error %d"), errnum);
|
||||
snprintf(buf, sizeof(buf), _("Unknown error %d"), errnum);
|
||||
return buf;
|
||||
#else /* no strerror() and no sys_errlist[] */
|
||||
static char buf[] = "Error 12345678901234567890";
|
||||
|
||||
sprintf(buf, _("Error %d"), errnum);
|
||||
snprintf(buf, sizeof(buf), _("Error %d"), errnum);
|
||||
return buf;
|
||||
#endif
|
||||
}
|
||||
@@ -64,7 +64,7 @@ wstrerror(int errnum)
|
||||
|
||||
/*********************************************************************
|
||||
* Prints a message with variable arguments
|
||||
*
|
||||
*
|
||||
* msg - message to print with optional formatting
|
||||
* ... - arguments to use on formatting
|
||||
*********************************************************************/
|
||||
@@ -90,19 +90,19 @@ wmessage(const char *msg, ...)
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* Prints a warning message with variable arguments
|
||||
*
|
||||
* Prints a warning message with variable arguments
|
||||
*
|
||||
* msg - message to print with optional formatting
|
||||
* ... - arguments to use on formatting
|
||||
*********************************************************************/
|
||||
void
|
||||
void
|
||||
wwarning(const char *msg, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buf[MAXLINE];
|
||||
|
||||
|
||||
va_start(args, msg);
|
||||
|
||||
|
||||
vsnprintf(buf, MAXLINE-3, msg, args);
|
||||
strcat(buf,"\n");
|
||||
fflush(stdout);
|
||||
@@ -111,18 +111,18 @@ wwarning(const char *msg, ...)
|
||||
fputs(buf, stderr);
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* Prints a fatal error message with variable arguments and terminates
|
||||
*
|
||||
*
|
||||
* msg - message to print with optional formatting
|
||||
* ... - arguments to use on formatting
|
||||
* ... - arguments to use on formatting
|
||||
**************************************************************************/
|
||||
void
|
||||
void
|
||||
wfatal(const char *msg, ...)
|
||||
{
|
||||
va_list args;
|
||||
@@ -144,12 +144,12 @@ wfatal(const char *msg, ...)
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* Prints a system error message with variable arguments
|
||||
*
|
||||
* Prints a system error message with variable arguments
|
||||
*
|
||||
* msg - message to print with optional formatting
|
||||
* ... - arguments to use on formatting
|
||||
*********************************************************************/
|
||||
void
|
||||
void
|
||||
wsyserror(const char *msg, ...)
|
||||
{
|
||||
va_list args;
|
||||
@@ -174,12 +174,12 @@ wsyserror(const char *msg, ...)
|
||||
/*********************************************************************
|
||||
* Prints a system error message with variable arguments, being given
|
||||
* the error code.
|
||||
*
|
||||
*
|
||||
* error - the error code foe which to print the message
|
||||
* msg - message to print with optional formatting
|
||||
* ... - arguments to use on formatting
|
||||
*********************************************************************/
|
||||
void
|
||||
void
|
||||
wsyserrorwithcode(int error, const char *msg, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
403
WINGs/findfile.c
403
WINGs/findfile.c
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Window Maker miscelaneous function library
|
||||
*
|
||||
* Copyright (c) 1997 Alfredo K. Kojima
|
||||
*
|
||||
*
|
||||
* Copyright (c) 1997-2003 Alfredo K. Kojima
|
||||
*
|
||||
* 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
|
||||
@@ -41,17 +41,17 @@ wgethomedir()
|
||||
struct passwd *user;
|
||||
|
||||
if (home)
|
||||
return home;
|
||||
|
||||
return home;
|
||||
|
||||
user = getpwuid(getuid());
|
||||
if (!user) {
|
||||
wsyserror(_("could not get password entry for UID %i"), getuid());
|
||||
return "/";
|
||||
wsyserror(_("could not get password entry for UID %i"), getuid());
|
||||
return "/";
|
||||
}
|
||||
if (!user->pw_dir) {
|
||||
return "/";
|
||||
return "/";
|
||||
} else {
|
||||
return user->pw_dir;
|
||||
return user->pw_dir;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,16 +60,16 @@ static char*
|
||||
getuserhomedir(char *username)
|
||||
{
|
||||
struct passwd *user;
|
||||
|
||||
|
||||
user = getpwnam(username);
|
||||
if (!user) {
|
||||
wsyserror(_("could not get password entry for user %s"), username);
|
||||
return NULL;
|
||||
wsyserror(_("could not get password entry for user %s"), username);
|
||||
return NULL;
|
||||
}
|
||||
if (!user->pw_dir) {
|
||||
return "/";
|
||||
return "/";
|
||||
} else {
|
||||
return user->pw_dir;
|
||||
return user->pw_dir;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,149 +84,172 @@ wexpandpath(char *path)
|
||||
int i;
|
||||
|
||||
memset(buffer, 0, PATH_MAX+2);
|
||||
|
||||
|
||||
if (*path=='~') {
|
||||
char *home;
|
||||
|
||||
path++;
|
||||
if (*path=='/' || *path==0) {
|
||||
home = wgethomedir();
|
||||
strcat(buffer, home);
|
||||
} else {
|
||||
int j;
|
||||
j = 0;
|
||||
while (*path!=0 && *path!='/') {
|
||||
buffer2[j++] = *path;
|
||||
buffer2[j] = 0;
|
||||
path++;
|
||||
}
|
||||
home = getuserhomedir(buffer2);
|
||||
if (!home)
|
||||
return NULL;
|
||||
strcat(buffer, home);
|
||||
}
|
||||
char *home;
|
||||
|
||||
path++;
|
||||
if (*path=='/' || *path==0) {
|
||||
home = wgethomedir();
|
||||
strcat(buffer, home);
|
||||
} else {
|
||||
int j;
|
||||
j = 0;
|
||||
while (*path!=0 && *path!='/') {
|
||||
buffer2[j++] = *path;
|
||||
buffer2[j] = 0;
|
||||
path++;
|
||||
}
|
||||
home = getuserhomedir(buffer2);
|
||||
if (!home)
|
||||
return NULL;
|
||||
strcat(buffer, home);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
i = strlen(buffer);
|
||||
|
||||
while (*path!=0) {
|
||||
char *tmp;
|
||||
|
||||
if (*path=='$') {
|
||||
int j = 0;
|
||||
path++;
|
||||
/* expand $(HOME) or $HOME style environment variables */
|
||||
if (*path=='(') {
|
||||
path++;
|
||||
while (*path!=0 && *path!=')') {
|
||||
buffer2[j++] = *(path++);
|
||||
buffer2[j] = 0;
|
||||
char *tmp;
|
||||
|
||||
if (*path=='$') {
|
||||
int j = 0;
|
||||
path++;
|
||||
/* expand $(HOME) or $HOME style environment variables */
|
||||
if (*path=='(') {
|
||||
path++;
|
||||
while (*path!=0 && *path!=')') {
|
||||
buffer2[j++] = *(path++);
|
||||
buffer2[j] = 0;
|
||||
}
|
||||
if (*path==')')
|
||||
path++;
|
||||
tmp = getenv(buffer2);
|
||||
if (!tmp) {
|
||||
buffer[i] = 0;
|
||||
strcat(buffer, "$(");
|
||||
strcat(buffer, buffer2);
|
||||
strcat(buffer, ")");
|
||||
i += strlen(buffer2)+3;
|
||||
} else {
|
||||
strcat(buffer, tmp);
|
||||
i += strlen(tmp);
|
||||
}
|
||||
} else {
|
||||
while (*path!=0 && *path!='/') {
|
||||
buffer2[j++] = *(path++);
|
||||
buffer2[j] = 0;
|
||||
}
|
||||
tmp = getenv(buffer2);
|
||||
if (!tmp) {
|
||||
strcat(buffer, "$");
|
||||
strcat(buffer, buffer2);
|
||||
i += strlen(buffer2)+1;
|
||||
} else {
|
||||
strcat(buffer, tmp);
|
||||
i += strlen(tmp);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
buffer[i++] = *path;
|
||||
path++;
|
||||
}
|
||||
tmp = getenv(buffer2);
|
||||
if (!tmp) {
|
||||
buffer[i] = 0;
|
||||
strcat(buffer, "$(");
|
||||
strcat(buffer, buffer2);
|
||||
strcat(buffer, ")");
|
||||
i += strlen(buffer2)+3;
|
||||
} else {
|
||||
strcat(buffer, tmp);
|
||||
i += strlen(tmp);
|
||||
}
|
||||
} else {
|
||||
while (*path!=0 && *path!='/') {
|
||||
buffer2[j++] = *(path++);
|
||||
buffer2[j] = 0;
|
||||
}
|
||||
tmp = getenv(buffer2);
|
||||
if (!tmp) {
|
||||
strcat(buffer, "$");
|
||||
strcat(buffer, buffer2);
|
||||
i += strlen(buffer2)+1;
|
||||
} else {
|
||||
strcat(buffer, tmp);
|
||||
i += strlen(tmp);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
buffer[i++] = *path;
|
||||
path++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return wstrdup(buffer);
|
||||
}
|
||||
|
||||
|
||||
/* return address of next char != tok or end of string whichever comes first */
|
||||
static char*
|
||||
skipchar(char *string, char tok)
|
||||
{
|
||||
while(*string!=0 && *string==tok)
|
||||
string++;
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
|
||||
/* return address of next char == tok or end of string whichever comes first */
|
||||
static char*
|
||||
nextchar(char *string, char tok)
|
||||
{
|
||||
while(*string!=0 && *string!=tok)
|
||||
string++;
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
* findfile--
|
||||
* Finds a file in a : separated list of paths. ~ expansion is also
|
||||
* Finds a file in a : separated list of paths. ~ expansion is also
|
||||
* done.
|
||||
*
|
||||
*
|
||||
* Returns:
|
||||
* The complete path for the file (in a newly allocated string) or
|
||||
* NULL if the file was not found.
|
||||
*
|
||||
*
|
||||
* Side effects:
|
||||
* A new string is allocated. It must be freed later.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
char*
|
||||
wfindfile(char *paths, char *file)
|
||||
{
|
||||
char *path;
|
||||
char *tmp;
|
||||
int done;
|
||||
char *tmp, *tmp2;
|
||||
int len, flen;
|
||||
char *fullpath;
|
||||
|
||||
if (!file)
|
||||
return NULL;
|
||||
|
||||
if (*file=='/' || *file=='~' || *file=='$' || !paths) {
|
||||
if (access(file, F_OK)<0) {
|
||||
fullpath = wexpandpath(file);
|
||||
if (!fullpath)
|
||||
return NULL;
|
||||
|
||||
if (access(fullpath, F_OK)<0) {
|
||||
wfree(fullpath);
|
||||
return NULL;
|
||||
} else {
|
||||
return fullpath;
|
||||
}
|
||||
} else {
|
||||
return wstrdup(file);
|
||||
}
|
||||
return NULL;
|
||||
|
||||
if (*file=='/' || *file=='~' || *file=='$' || !paths || *paths==0) {
|
||||
if (access(file, F_OK)<0) {
|
||||
fullpath = wexpandpath(file);
|
||||
if (!fullpath)
|
||||
return NULL;
|
||||
|
||||
if (access(fullpath, F_OK)<0) {
|
||||
wfree(fullpath);
|
||||
return NULL;
|
||||
} else {
|
||||
return fullpath;
|
||||
}
|
||||
} else {
|
||||
return wstrdup(file);
|
||||
}
|
||||
}
|
||||
|
||||
flen = strlen(file);
|
||||
tmp = paths;
|
||||
done = 0;
|
||||
while (!done) {
|
||||
len = strcspn(tmp, ":");
|
||||
if (len==0) done=1;
|
||||
path = wmalloc(len+flen+2);
|
||||
path = memcpy(path, tmp, len);
|
||||
path[len]=0;
|
||||
strcat(path, "/");
|
||||
strcat(path, file);
|
||||
fullpath = wexpandpath(path);
|
||||
wfree(path);
|
||||
if (fullpath) {
|
||||
if (access(fullpath, F_OK)==0) {
|
||||
return fullpath;
|
||||
}
|
||||
wfree(fullpath);
|
||||
}
|
||||
tmp=&(tmp[len+1]);
|
||||
if (*tmp==0) break;
|
||||
while (*tmp) {
|
||||
tmp = skipchar(tmp, ':');
|
||||
if (*tmp==0)
|
||||
break;
|
||||
tmp2 = nextchar(tmp, ':');
|
||||
len = tmp2 - tmp;
|
||||
path = wmalloc(len+flen+2);
|
||||
path = memcpy(path, tmp, len);
|
||||
path[len]=0;
|
||||
if (path[len-1] != '/')
|
||||
strcat(path, "/");
|
||||
strcat(path, file);
|
||||
fullpath = wexpandpath(path);
|
||||
wfree(path);
|
||||
if (fullpath) {
|
||||
if (access(fullpath, F_OK)==0) {
|
||||
return fullpath;
|
||||
}
|
||||
wfree(fullpath);
|
||||
}
|
||||
tmp = tmp2;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -240,43 +263,43 @@ wfindfileinlist(char **path_list, char *file)
|
||||
char *fullpath;
|
||||
|
||||
if (!file)
|
||||
return NULL;
|
||||
|
||||
return NULL;
|
||||
|
||||
if (*file=='/' || *file=='~' || !path_list) {
|
||||
if (access(file, F_OK)<0) {
|
||||
fullpath = wexpandpath(file);
|
||||
if (!fullpath)
|
||||
return NULL;
|
||||
|
||||
if (access(fullpath, F_OK)<0) {
|
||||
wfree(fullpath);
|
||||
return NULL;
|
||||
} else {
|
||||
return fullpath;
|
||||
}
|
||||
} else {
|
||||
return wstrdup(file);
|
||||
}
|
||||
if (access(file, F_OK)<0) {
|
||||
fullpath = wexpandpath(file);
|
||||
if (!fullpath)
|
||||
return NULL;
|
||||
|
||||
if (access(fullpath, F_OK)<0) {
|
||||
wfree(fullpath);
|
||||
return NULL;
|
||||
} else {
|
||||
return fullpath;
|
||||
}
|
||||
} else {
|
||||
return wstrdup(file);
|
||||
}
|
||||
}
|
||||
|
||||
flen = strlen(file);
|
||||
for (i=0; path_list[i]!=NULL; i++) {
|
||||
len = strlen(path_list[i]);
|
||||
path = wmalloc(len+flen+2);
|
||||
path = memcpy(path, path_list[i], len);
|
||||
path[len]=0;
|
||||
strcat(path, "/");
|
||||
strcat(path, file);
|
||||
/* expand tilde */
|
||||
fullpath = wexpandpath(path);
|
||||
wfree(path);
|
||||
if (fullpath) {
|
||||
/* check if file exists */
|
||||
if (access(fullpath, F_OK)==0) {
|
||||
return fullpath;
|
||||
}
|
||||
wfree(fullpath);
|
||||
}
|
||||
len = strlen(path_list[i]);
|
||||
path = wmalloc(len+flen+2);
|
||||
path = memcpy(path, path_list[i], len);
|
||||
path[len]=0;
|
||||
strcat(path, "/");
|
||||
strcat(path, file);
|
||||
/* expand tilde */
|
||||
fullpath = wexpandpath(path);
|
||||
wfree(path);
|
||||
if (fullpath) {
|
||||
/* check if file exists */
|
||||
if (access(fullpath, F_OK)==0) {
|
||||
return fullpath;
|
||||
}
|
||||
wfree(fullpath);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -292,51 +315,51 @@ wfindfileinarray(WMPropList *array, char *file)
|
||||
char *fullpath;
|
||||
|
||||
if (!file)
|
||||
return NULL;
|
||||
|
||||
if (*file=='/' || *file=='~' || !array) {
|
||||
if (access(file, F_OK)<0) {
|
||||
fullpath = wexpandpath(file);
|
||||
if (!fullpath)
|
||||
return NULL;
|
||||
return NULL;
|
||||
|
||||
if (access(fullpath, F_OK)<0) {
|
||||
wfree(fullpath);
|
||||
return NULL;
|
||||
} else {
|
||||
return fullpath;
|
||||
}
|
||||
} else {
|
||||
return wstrdup(file);
|
||||
}
|
||||
if (*file=='/' || *file=='~' || !array) {
|
||||
if (access(file, F_OK)<0) {
|
||||
fullpath = wexpandpath(file);
|
||||
if (!fullpath)
|
||||
return NULL;
|
||||
|
||||
if (access(fullpath, F_OK)<0) {
|
||||
wfree(fullpath);
|
||||
return NULL;
|
||||
} else {
|
||||
return fullpath;
|
||||
}
|
||||
} else {
|
||||
return wstrdup(file);
|
||||
}
|
||||
}
|
||||
|
||||
flen = strlen(file);
|
||||
for (i=0; i<WMGetPropListItemCount(array); i++) {
|
||||
WMPropList *prop;
|
||||
char *p;
|
||||
WMPropList *prop;
|
||||
char *p;
|
||||
|
||||
prop = WMGetFromPLArray(array, i);
|
||||
if (!prop)
|
||||
continue;
|
||||
p = WMGetFromPLString(prop);
|
||||
prop = WMGetFromPLArray(array, i);
|
||||
if (!prop)
|
||||
continue;
|
||||
p = WMGetFromPLString(prop);
|
||||
|
||||
len = strlen(p);
|
||||
path = wmalloc(len+flen+2);
|
||||
path = memcpy(path, p, len);
|
||||
path[len]=0;
|
||||
strcat(path, "/");
|
||||
strcat(path, file);
|
||||
/* expand tilde */
|
||||
fullpath = wexpandpath(path);
|
||||
wfree(path);
|
||||
if (fullpath) {
|
||||
/* check if file exists */
|
||||
if (access(fullpath, F_OK)==0) {
|
||||
return fullpath;
|
||||
}
|
||||
wfree(fullpath);
|
||||
}
|
||||
len = strlen(p);
|
||||
path = wmalloc(len+flen+2);
|
||||
path = memcpy(path, p, len);
|
||||
path[len]=0;
|
||||
strcat(path, "/");
|
||||
strcat(path, file);
|
||||
/* expand tilde */
|
||||
fullpath = wexpandpath(path);
|
||||
wfree(path);
|
||||
if (fullpath) {
|
||||
/* check if file exists */
|
||||
if (access(fullpath, F_OK)==0) {
|
||||
return fullpath;
|
||||
}
|
||||
wfree(fullpath);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
128
WINGs/handlers.c
128
WINGs/handlers.c
@@ -60,14 +60,15 @@ static WMArray *inputHandler=NULL;
|
||||
|
||||
|
||||
static void
|
||||
rightNow(struct timeval *tv) {
|
||||
rightNow(struct timeval *tv)
|
||||
{
|
||||
X_GETTIMEOFDAY(tv);
|
||||
}
|
||||
|
||||
/* is t1 after t2 ? */
|
||||
#define IS_AFTER(t1, t2) (((t1).tv_sec > (t2).tv_sec) || \
|
||||
(((t1).tv_sec == (t2).tv_sec) \
|
||||
&& ((t1).tv_usec > (t2).tv_usec)))
|
||||
(((t1).tv_sec == (t2).tv_sec) \
|
||||
&& ((t1).tv_usec > (t2).tv_usec)))
|
||||
|
||||
#define IS_ZERO(tv) (tv.tv_sec == 0 && tv.tv_usec == 0)
|
||||
|
||||
@@ -90,16 +91,16 @@ enqueueTimerHandler(TimerHandler *handler)
|
||||
|
||||
/* insert callback in queue, sorted by time left */
|
||||
if (!timerHandler || !IS_AFTER(handler->when, timerHandler->when)) {
|
||||
/* first in the queue */
|
||||
handler->next = timerHandler;
|
||||
timerHandler = handler;
|
||||
/* first in the queue */
|
||||
handler->next = timerHandler;
|
||||
timerHandler = handler;
|
||||
} else {
|
||||
tmp = timerHandler;
|
||||
while (tmp->next && IS_AFTER(handler->when, tmp->next->when)) {
|
||||
tmp = tmp->next;
|
||||
}
|
||||
handler->next = tmp->next;
|
||||
tmp->next = handler;
|
||||
tmp = timerHandler;
|
||||
while (tmp->next && IS_AFTER(handler->when, tmp->next->when)) {
|
||||
tmp = tmp->next;
|
||||
}
|
||||
handler->next = tmp->next;
|
||||
tmp->next = handler;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,22 +117,22 @@ delayUntilNextTimerEvent(struct timeval *delay)
|
||||
if (!handler) {
|
||||
/* The return value of this function is only valid if there _are_
|
||||
timers active. */
|
||||
delay->tv_sec = 0;
|
||||
delay->tv_usec = 0;
|
||||
return;
|
||||
delay->tv_sec = 0;
|
||||
delay->tv_usec = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
rightNow(&now);
|
||||
if (IS_AFTER(now, handler->when)) {
|
||||
delay->tv_sec = 0;
|
||||
delay->tv_usec = 0;
|
||||
delay->tv_sec = 0;
|
||||
delay->tv_usec = 0;
|
||||
} else {
|
||||
delay->tv_sec = handler->when.tv_sec - now.tv_sec;
|
||||
delay->tv_usec = handler->when.tv_usec - now.tv_usec;
|
||||
if (delay->tv_usec < 0) {
|
||||
delay->tv_usec += 1000000;
|
||||
delay->tv_sec--;
|
||||
}
|
||||
delay->tv_sec = handler->when.tv_sec - now.tv_sec;
|
||||
delay->tv_usec = handler->when.tv_usec - now.tv_usec;
|
||||
if (delay->tv_usec < 0) {
|
||||
delay->tv_usec += 1000000;
|
||||
delay->tv_sec--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,7 +144,7 @@ WMAddTimerHandler(int milliseconds, WMCallback *callback, void *cdata)
|
||||
|
||||
handler = malloc(sizeof(TimerHandler));
|
||||
if (!handler)
|
||||
return NULL;
|
||||
return NULL;
|
||||
|
||||
rightNow(&handler->when);
|
||||
addmillisecs(&handler->when, milliseconds);
|
||||
@@ -163,7 +164,7 @@ WMAddPersistentTimerHandler(int milliseconds, WMCallback *callback, void *cdata)
|
||||
TimerHandler *handler = WMAddTimerHandler(milliseconds, callback, cdata);
|
||||
|
||||
if (handler != NULL)
|
||||
handler->nextDelay = milliseconds;
|
||||
handler->nextDelay = milliseconds;
|
||||
|
||||
return handler;
|
||||
}
|
||||
@@ -180,18 +181,18 @@ WMDeleteTimerWithClientData(void *cdata)
|
||||
|
||||
tmp = timerHandler;
|
||||
if (tmp->clientData==cdata) {
|
||||
tmp->nextDelay = 0;
|
||||
if (!IS_ZERO(tmp->when)) {
|
||||
timerHandler = tmp->next;
|
||||
wfree(tmp);
|
||||
}
|
||||
tmp->nextDelay = 0;
|
||||
if (!IS_ZERO(tmp->when)) {
|
||||
timerHandler = tmp->next;
|
||||
wfree(tmp);
|
||||
}
|
||||
} else {
|
||||
while (tmp->next) {
|
||||
if (tmp->next->clientData==cdata) {
|
||||
handler = tmp->next;
|
||||
handler->nextDelay = 0;
|
||||
if (IS_ZERO(handler->when))
|
||||
break;
|
||||
handler->nextDelay = 0;
|
||||
if (IS_ZERO(handler->when))
|
||||
break;
|
||||
tmp->next = handler->next;
|
||||
wfree(handler);
|
||||
break;
|
||||
@@ -209,27 +210,27 @@ WMDeleteTimerHandler(WMHandlerID handlerID)
|
||||
TimerHandler *tmp, *handler=(TimerHandler*)handlerID;
|
||||
|
||||
if (!handler || !timerHandler)
|
||||
return;
|
||||
return;
|
||||
|
||||
tmp = timerHandler;
|
||||
|
||||
handler->nextDelay = 0;
|
||||
|
||||
if (IS_ZERO(handler->when))
|
||||
return;
|
||||
return;
|
||||
|
||||
if (tmp==handler) {
|
||||
timerHandler = handler->next;
|
||||
wfree(handler);
|
||||
timerHandler = handler->next;
|
||||
wfree(handler);
|
||||
} else {
|
||||
while (tmp->next) {
|
||||
if (tmp->next==handler) {
|
||||
tmp->next=handler->next;
|
||||
wfree(handler);
|
||||
break;
|
||||
}
|
||||
tmp = tmp->next;
|
||||
}
|
||||
while (tmp->next) {
|
||||
if (tmp->next==handler) {
|
||||
tmp->next=handler->next;
|
||||
wfree(handler);
|
||||
break;
|
||||
}
|
||||
tmp = tmp->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,7 +297,7 @@ WMDeleteInputHandler(WMHandlerID handlerID)
|
||||
InputHandler *handler = (InputHandler*)handlerID;
|
||||
|
||||
if (!handler || !inputHandler)
|
||||
return;
|
||||
return;
|
||||
|
||||
WMRemoveFromArray(inputHandler, handler);
|
||||
}
|
||||
@@ -310,7 +311,7 @@ W_CheckIdleHandlers(void)
|
||||
WMArrayIterator iter;
|
||||
|
||||
if (!idleHandler || WMGetArrayItemCount(idleHandler)==0) {
|
||||
W_FlushIdleNotificationQueue();
|
||||
W_FlushIdleNotificationQueue();
|
||||
/* make sure an observer in queue didn't added an idle handler */
|
||||
return (idleHandler!=NULL && WMGetArrayItemCount(idleHandler)>0);
|
||||
}
|
||||
@@ -322,7 +323,7 @@ W_CheckIdleHandlers(void)
|
||||
if (WMGetFirstInArray(idleHandler, handler) == WANotFound)
|
||||
continue;
|
||||
|
||||
(*handler->callback)(handler->clientData);
|
||||
(*handler->callback)(handler->clientData);
|
||||
WMDeleteIdleHandler(handler);
|
||||
}
|
||||
|
||||
@@ -351,24 +352,24 @@ W_CheckTimerHandlers(void)
|
||||
|
||||
handler = timerHandler;
|
||||
while (handler && IS_AFTER(now, handler->when)) {
|
||||
if (!IS_ZERO(handler->when)) {
|
||||
SET_ZERO(handler->when);
|
||||
(*handler->callback)(handler->clientData);
|
||||
}
|
||||
handler = handler->next;
|
||||
if (!IS_ZERO(handler->when)) {
|
||||
SET_ZERO(handler->when);
|
||||
(*handler->callback)(handler->clientData);
|
||||
}
|
||||
handler = handler->next;
|
||||
}
|
||||
|
||||
while (timerHandler && IS_ZERO(timerHandler->when)) {
|
||||
handler = timerHandler;
|
||||
timerHandler = timerHandler->next;
|
||||
handler = timerHandler;
|
||||
timerHandler = timerHandler->next;
|
||||
|
||||
if (handler->nextDelay > 0) {
|
||||
handler->when = now;
|
||||
addmillisecs(&handler->when, handler->nextDelay);
|
||||
enqueueTimerHandler(handler);
|
||||
} else {
|
||||
wfree(handler);
|
||||
}
|
||||
if (handler->nextDelay > 0) {
|
||||
handler->when = now;
|
||||
addmillisecs(&handler->when, handler->nextDelay);
|
||||
enqueueTimerHandler(handler);
|
||||
} else {
|
||||
wfree(handler);
|
||||
}
|
||||
}
|
||||
|
||||
W_FlushASAPNotificationQueue();
|
||||
@@ -603,10 +604,9 @@ W_HandleInputEvents(Bool waitForInput, int inputfd)
|
||||
|
||||
W_FlushASAPNotificationQueue();
|
||||
|
||||
/* --oldway-- return ((inputfd < 0) ? (count > 0) : FD_ISSET(inputfd, &rset));*/
|
||||
return (count > 0);
|
||||
#else /* not HAVE_SELECT, not HAVE_POLL */
|
||||
Neither select nor poll. You lose.
|
||||
# error Neither select nor poll. You lose.
|
||||
#endif /* HAVE_SELECT */
|
||||
#endif /* HAVE_POLL */
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
typedef struct HashItem {
|
||||
const void *key;
|
||||
const void *data;
|
||||
|
||||
|
||||
struct HashItem *next; /* collided item list */
|
||||
} HashItem;
|
||||
|
||||
@@ -41,13 +41,13 @@ typedef struct W_HashTable {
|
||||
|
||||
|
||||
#define HASH(table, key) (((table)->callbacks.hash ? \
|
||||
(*(table)->callbacks.hash)(key) : hashPtr(key)) % (table)->size)
|
||||
(*(table)->callbacks.hash)(key) : hashPtr(key)) % (table)->size)
|
||||
|
||||
#define DUPKEY(table, key) ((table)->callbacks.retainKey ? \
|
||||
(*(table)->callbacks.retainKey)(key) : (key))
|
||||
(*(table)->callbacks.retainKey)(key) : (key))
|
||||
|
||||
#define RELKEY(table, key) if ((table)->callbacks.releaseKey) \
|
||||
(*(table)->callbacks.releaseKey)(key)
|
||||
(*(table)->callbacks.releaseKey)(key)
|
||||
|
||||
|
||||
|
||||
@@ -59,10 +59,10 @@ hashString(const char *key)
|
||||
unsigned ctr = 0;
|
||||
|
||||
while (*key) {
|
||||
ret ^= *(char*)key++ << ctr;
|
||||
ctr = (ctr + 1) % sizeof (char *);
|
||||
ret ^= *(char*)key++ << ctr;
|
||||
ctr = (ctr + 1) % sizeof (char *);
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -106,13 +106,13 @@ rebuildTable(WMHashTable *table)
|
||||
table->table = wmalloc(sizeof(char*)*newSize);
|
||||
memset(table->table, 0, sizeof(char*)*newSize);
|
||||
table->size = newSize;
|
||||
|
||||
|
||||
for (i = 0; i < oldSize; i++) {
|
||||
while (oldArray[i]!=NULL) {
|
||||
next = oldArray[i]->next;
|
||||
rellocateItem(table, oldArray[i]);
|
||||
oldArray[i] = next;
|
||||
}
|
||||
while (oldArray[i]!=NULL) {
|
||||
next = oldArray[i]->next;
|
||||
rellocateItem(table, oldArray[i]);
|
||||
oldArray[i] = next;
|
||||
}
|
||||
}
|
||||
wfree(oldArray);
|
||||
}
|
||||
@@ -123,17 +123,17 @@ WMHashTable*
|
||||
WMCreateHashTable(WMHashTableCallbacks callbacks)
|
||||
{
|
||||
HashTable *table;
|
||||
|
||||
|
||||
table = wmalloc(sizeof(HashTable));
|
||||
memset(table, 0, sizeof(HashTable));
|
||||
|
||||
|
||||
table->callbacks = callbacks;
|
||||
|
||||
|
||||
table->size = INITIAL_CAPACITY;
|
||||
|
||||
table->table = wmalloc(sizeof(HashItem*)*table->size);
|
||||
memset(table->table, 0, sizeof(HashItem*)*table->size);
|
||||
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
@@ -145,21 +145,21 @@ WMResetHashTable(WMHashTable *table)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < table->size; i++) {
|
||||
item = table->table[i];
|
||||
while (item) {
|
||||
tmp = item->next;
|
||||
RELKEY(table, item);
|
||||
wfree(item);
|
||||
item = tmp;
|
||||
}
|
||||
item = table->table[i];
|
||||
while (item) {
|
||||
tmp = item->next;
|
||||
RELKEY(table, item->key);
|
||||
wfree(item);
|
||||
item = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
table->itemCount = 0;
|
||||
|
||||
|
||||
if (table->size > INITIAL_CAPACITY) {
|
||||
wfree(table->table);
|
||||
table->size = INITIAL_CAPACITY;
|
||||
table->table = wmalloc(sizeof(HashItem*)*table->size);
|
||||
wfree(table->table);
|
||||
table->size = INITIAL_CAPACITY;
|
||||
table->table = wmalloc(sizeof(HashItem*)*table->size);
|
||||
}
|
||||
memset(table->table, 0, sizeof(HashItem*)*table->size);
|
||||
}
|
||||
@@ -170,15 +170,15 @@ WMFreeHashTable(WMHashTable *table)
|
||||
{
|
||||
HashItem *item, *tmp;
|
||||
int i;
|
||||
|
||||
|
||||
for (i = 0; i < table->size; i++) {
|
||||
item = table->table[i];
|
||||
while (item) {
|
||||
tmp = item->next;
|
||||
RELKEY(table, item->key);
|
||||
wfree(item);
|
||||
item = tmp;
|
||||
}
|
||||
item = table->table[i];
|
||||
while (item) {
|
||||
tmp = item->next;
|
||||
RELKEY(table, item->key);
|
||||
wfree(item);
|
||||
item = tmp;
|
||||
}
|
||||
}
|
||||
wfree(table->table);
|
||||
wfree(table);
|
||||
@@ -197,29 +197,29 @@ WMHashGet(WMHashTable *table, const void *key)
|
||||
{
|
||||
unsigned h;
|
||||
HashItem *item;
|
||||
|
||||
|
||||
h = HASH(table, key);
|
||||
item = table->table[h];
|
||||
|
||||
|
||||
if (table->callbacks.keyIsEqual) {
|
||||
while (item) {
|
||||
if ((*table->callbacks.keyIsEqual)(key, item->key)) {
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
while (item) {
|
||||
if ((*table->callbacks.keyIsEqual)(key, item->key)) {
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
} else {
|
||||
while (item) {
|
||||
if (key == item->key) {
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
while (item) {
|
||||
if (key == item->key) {
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
}
|
||||
if (item)
|
||||
return (void*)item->data;
|
||||
return (void*)item->data;
|
||||
else
|
||||
return NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -229,31 +229,31 @@ WMHashGetItemAndKey(WMHashTable *table, const void *key,
|
||||
{
|
||||
unsigned h;
|
||||
HashItem *item;
|
||||
|
||||
|
||||
h = HASH(table, key);
|
||||
item = table->table[h];
|
||||
|
||||
|
||||
if (table->callbacks.keyIsEqual) {
|
||||
while (item) {
|
||||
if ((*table->callbacks.keyIsEqual)(key, item->key)) {
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
while (item) {
|
||||
if ((*table->callbacks.keyIsEqual)(key, item->key)) {
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
} else {
|
||||
while (item) {
|
||||
if (key == item->key) {
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
while (item) {
|
||||
if (key == item->key) {
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
}
|
||||
if (item) {
|
||||
if (retKey)
|
||||
*retKey = (void*)item->key;
|
||||
if (retItem)
|
||||
*retItem = (void*)item->data;
|
||||
return True;
|
||||
return True;
|
||||
} else {
|
||||
return False;
|
||||
}
|
||||
@@ -267,60 +267,60 @@ WMHashInsert(WMHashTable *table, const void *key, const void *data)
|
||||
unsigned h;
|
||||
HashItem *item;
|
||||
int replacing = 0;
|
||||
|
||||
|
||||
h = HASH(table, key);
|
||||
/* look for the entry */
|
||||
item = table->table[h];
|
||||
if (table->callbacks.keyIsEqual) {
|
||||
while (item) {
|
||||
if ((*table->callbacks.keyIsEqual)(key, item->key)) {
|
||||
replacing = 1;
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
while (item) {
|
||||
if ((*table->callbacks.keyIsEqual)(key, item->key)) {
|
||||
replacing = 1;
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
} else {
|
||||
while (item) {
|
||||
if (key == item->key) {
|
||||
replacing = 1;
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
while (item) {
|
||||
if (key == item->key) {
|
||||
replacing = 1;
|
||||
break;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (replacing) {
|
||||
const void *old;
|
||||
const void *old;
|
||||
|
||||
old = item->data;
|
||||
item->data = data;
|
||||
RELKEY(table, item->key);
|
||||
item->key = DUPKEY(table, key);
|
||||
old = item->data;
|
||||
item->data = data;
|
||||
RELKEY(table, item->key);
|
||||
item->key = DUPKEY(table, key);
|
||||
|
||||
return (void*)old;
|
||||
return (void*)old;
|
||||
} else {
|
||||
HashItem *nitem;
|
||||
HashItem *nitem;
|
||||
|
||||
nitem = wmalloc(sizeof(HashItem));
|
||||
nitem->key = DUPKEY(table, key);
|
||||
nitem->data = data;
|
||||
nitem->next = table->table[h];
|
||||
table->table[h] = nitem;
|
||||
nitem = wmalloc(sizeof(HashItem));
|
||||
nitem->key = DUPKEY(table, key);
|
||||
nitem->data = data;
|
||||
nitem->next = table->table[h];
|
||||
table->table[h] = nitem;
|
||||
|
||||
table->itemCount++;
|
||||
table->itemCount++;
|
||||
}
|
||||
|
||||
|
||||
/* OPTIMIZE: put this in an idle handler.*/
|
||||
if (table->itemCount > table->size) {
|
||||
#ifdef DEBUG0
|
||||
printf("rebuilding hash table...\n");
|
||||
printf("rebuilding hash table...\n");
|
||||
#endif
|
||||
rebuildTable(table);
|
||||
rebuildTable(table);
|
||||
#ifdef DEBUG0
|
||||
printf("finished rebuild.\n");
|
||||
printf("finished rebuild.\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -329,23 +329,23 @@ static HashItem*
|
||||
deleteFromList(HashTable *table, HashItem *item, const void *key)
|
||||
{
|
||||
HashItem *next;
|
||||
|
||||
|
||||
if (item==NULL)
|
||||
return NULL;
|
||||
return NULL;
|
||||
|
||||
if ((table->callbacks.keyIsEqual
|
||||
&& (*table->callbacks.keyIsEqual)(key, item->key))
|
||||
|| (!table->callbacks.keyIsEqual && key==item->key)) {
|
||||
|
||||
next = item->next;
|
||||
RELKEY(table, item->key);
|
||||
wfree(item);
|
||||
|
||||
table->itemCount--;
|
||||
if ((table->callbacks.keyIsEqual
|
||||
&& (*table->callbacks.keyIsEqual)(key, item->key))
|
||||
|| (!table->callbacks.keyIsEqual && key==item->key)) {
|
||||
|
||||
return next;
|
||||
next = item->next;
|
||||
RELKEY(table, item->key);
|
||||
wfree(item);
|
||||
|
||||
table->itemCount--;
|
||||
|
||||
return next;
|
||||
}
|
||||
|
||||
|
||||
item->next = deleteFromList(table, item->next, key);
|
||||
|
||||
return item;
|
||||
@@ -356,9 +356,9 @@ void
|
||||
WMHashRemove(WMHashTable *table, const void *key)
|
||||
{
|
||||
unsigned h;
|
||||
|
||||
|
||||
h = HASH(table, key);
|
||||
|
||||
|
||||
table->table[h] = deleteFromList(table, table->table[h], key);
|
||||
}
|
||||
|
||||
@@ -367,11 +367,11 @@ WMHashEnumerator
|
||||
WMEnumerateHashTable(WMHashTable *table)
|
||||
{
|
||||
WMHashEnumerator enumerator;
|
||||
|
||||
|
||||
enumerator.table = table;
|
||||
enumerator.index = 0;
|
||||
enumerator.nextItem = table->table[0];
|
||||
|
||||
|
||||
return enumerator;
|
||||
}
|
||||
|
||||
@@ -382,24 +382,24 @@ WMNextHashEnumeratorItem(WMHashEnumerator *enumerator)
|
||||
{
|
||||
const void *data = NULL;
|
||||
|
||||
/* this assumes the table doesn't change between
|
||||
/* this assumes the table doesn't change between
|
||||
* WMEnumerateHashTable() and WMNextHashEnumeratorItem() calls */
|
||||
|
||||
if (enumerator->nextItem==NULL) {
|
||||
HashTable *table = enumerator->table;
|
||||
while (++enumerator->index < table->size) {
|
||||
if (table->table[enumerator->index]!=NULL) {
|
||||
enumerator->nextItem = table->table[enumerator->index];
|
||||
break;
|
||||
}
|
||||
}
|
||||
HashTable *table = enumerator->table;
|
||||
while (++enumerator->index < table->size) {
|
||||
if (table->table[enumerator->index]!=NULL) {
|
||||
enumerator->nextItem = table->table[enumerator->index];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (enumerator->nextItem) {
|
||||
data = ((HashItem*)enumerator->nextItem)->data;
|
||||
enumerator->nextItem = ((HashItem*)enumerator->nextItem)->next;
|
||||
data = ((HashItem*)enumerator->nextItem)->data;
|
||||
enumerator->nextItem = ((HashItem*)enumerator->nextItem)->next;
|
||||
}
|
||||
|
||||
|
||||
return (void*)data;
|
||||
}
|
||||
|
||||
@@ -409,7 +409,7 @@ WMNextHashEnumeratorKey(WMHashEnumerator *enumerator)
|
||||
{
|
||||
const void *key = NULL;
|
||||
|
||||
/* this assumes the table doesn't change between
|
||||
/* this assumes the table doesn't change between
|
||||
* WMEnumerateHashTable() and WMNextHashEnumeratorKey() calls */
|
||||
|
||||
if (enumerator->nextItem==NULL) {
|
||||
@@ -435,17 +435,17 @@ Bool
|
||||
WMNextHashEnumeratorItemAndKey(WMHashEnumerator *enumerator,
|
||||
void **item, void **key)
|
||||
{
|
||||
/* this assumes the table doesn't change between
|
||||
/* this assumes the table doesn't change between
|
||||
* WMEnumerateHashTable() and WMNextHashEnumeratorItemAndKey() calls */
|
||||
|
||||
if (enumerator->nextItem==NULL) {
|
||||
HashTable *table = enumerator->table;
|
||||
while (++enumerator->index < table->size) {
|
||||
if (table->table[enumerator->index]!=NULL) {
|
||||
enumerator->nextItem = table->table[enumerator->index];
|
||||
break;
|
||||
}
|
||||
}
|
||||
HashTable *table = enumerator->table;
|
||||
while (++enumerator->index < table->size) {
|
||||
if (table->table[enumerator->index]!=NULL) {
|
||||
enumerator->nextItem = table->table[enumerator->index];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (enumerator->nextItem) {
|
||||
@@ -477,24 +477,24 @@ typedef void (*releaseFunc)(const void*);
|
||||
|
||||
const WMHashTableCallbacks WMIntHashCallbacks = {
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
const WMHashTableCallbacks WMStringHashCallbacks = {
|
||||
(hashFunc)hashString,
|
||||
(isEqualFunc)compareStrings,
|
||||
(retainFunc)wstrdup,
|
||||
(releaseFunc)wfree
|
||||
(isEqualFunc)compareStrings,
|
||||
(retainFunc)wstrdup,
|
||||
(releaseFunc)wfree
|
||||
};
|
||||
|
||||
|
||||
|
||||
const WMHashTableCallbacks WMStringPointerHashCallbacks = {
|
||||
(hashFunc)hashString,
|
||||
(isEqualFunc)compareStrings,
|
||||
NULL,
|
||||
NULL
|
||||
(isEqualFunc)compareStrings,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* WINGs WMHost function library
|
||||
*
|
||||
* Copyright (c) 1999-2001 Dan Pascu
|
||||
* Copyright (c) 1999-2003 Dan Pascu
|
||||
*
|
||||
* 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
|
||||
@@ -213,7 +213,7 @@ WMReleaseHost(WMHost *hPtr)
|
||||
void
|
||||
WMSetHostCacheEnabled(Bool flag)
|
||||
{
|
||||
hostCacheEnabled = flag;
|
||||
hostCacheEnabled = ((flag==0) ? 0 : 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,5 +8,5 @@
|
||||
void
|
||||
InitI18n(Display *dpy)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Window Maker miscelaneous function library
|
||||
*
|
||||
* Copyright (c) 1997 Alfredo K. Kojima
|
||||
*
|
||||
*
|
||||
* Copyright (c) 1997-2003 Alfredo K. Kojima
|
||||
*
|
||||
* 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
|
||||
@@ -47,9 +47,9 @@ static void
|
||||
defaultHandler(int bla)
|
||||
{
|
||||
if (bla)
|
||||
kill(getpid(), SIGABRT);
|
||||
kill(getpid(), SIGABRT);
|
||||
else
|
||||
exit(1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -89,23 +89,23 @@ wmalloc(size_t size)
|
||||
tmp = malloc(size);
|
||||
#endif
|
||||
if (tmp == NULL) {
|
||||
wwarning("malloc() failed. Retrying after 2s.");
|
||||
sleep(2);
|
||||
wwarning("malloc() failed. Retrying after 2s.");
|
||||
sleep(2);
|
||||
#ifdef TEST_WITH_GC
|
||||
tmp = GC_malloc(size);
|
||||
#else
|
||||
tmp = malloc(size);
|
||||
#endif
|
||||
if (tmp == NULL) {
|
||||
if (Aborting) {
|
||||
fputs("Really Bad Error: recursive malloc() failure.", stderr);
|
||||
exit(-1);
|
||||
} else {
|
||||
wfatal("virtual memory exhausted");
|
||||
Aborting=1;
|
||||
wAbort(False);
|
||||
}
|
||||
}
|
||||
if (tmp == NULL) {
|
||||
if (Aborting) {
|
||||
fputs("Really Bad Error: recursive malloc() failure.", stderr);
|
||||
exit(-1);
|
||||
} else {
|
||||
wfatal("virtual memory exhausted");
|
||||
Aborting=1;
|
||||
wAbort(False);
|
||||
}
|
||||
}
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
@@ -117,15 +117,15 @@ wrealloc(void *ptr, size_t newsize)
|
||||
void *nptr;
|
||||
|
||||
if (!ptr) {
|
||||
nptr = wmalloc(newsize);
|
||||
nptr = wmalloc(newsize);
|
||||
} else if (newsize==0) {
|
||||
wfree(ptr);
|
||||
nptr = NULL;
|
||||
} else {
|
||||
#ifdef TEST_WITH_GC
|
||||
nptr = GC_realloc(ptr, newsize);
|
||||
nptr = GC_realloc(ptr, newsize);
|
||||
#else
|
||||
nptr = realloc(ptr, newsize);
|
||||
nptr = realloc(ptr, newsize);
|
||||
#endif
|
||||
if (nptr==NULL) {
|
||||
wwarning("realloc() failed. Retrying after 2s.");
|
||||
@@ -156,26 +156,26 @@ void*
|
||||
wretain(void *ptr)
|
||||
{
|
||||
int *refcount;
|
||||
|
||||
|
||||
if (!table) {
|
||||
table = WMCreateHashTable(WMIntHashCallbacks);
|
||||
table = WMCreateHashTable(WMIntHashCallbacks);
|
||||
}
|
||||
|
||||
|
||||
refcount = WMHashGet(table, ptr);
|
||||
if (!refcount) {
|
||||
refcount = wmalloc(sizeof(int));
|
||||
*refcount = 1;
|
||||
WMHashInsert(table, ptr, refcount);
|
||||
refcount = wmalloc(sizeof(int));
|
||||
*refcount = 1;
|
||||
WMHashInsert(table, ptr, refcount);
|
||||
#ifdef VERBOSE
|
||||
printf("== %i (%p)\n", *refcount, ptr);
|
||||
printf("== %i (%p)\n", *refcount, ptr);
|
||||
#endif
|
||||
} else {
|
||||
(*refcount)++;
|
||||
(*refcount)++;
|
||||
#ifdef VERBOSE
|
||||
printf("+ %i (%p)\n", *refcount, ptr);
|
||||
printf("+ %i (%p)\n", *refcount, ptr);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
@@ -197,24 +197,24 @@ void
|
||||
wrelease(void *ptr)
|
||||
{
|
||||
int *refcount;
|
||||
|
||||
|
||||
refcount = WMHashGet(table, ptr);
|
||||
if (!refcount) {
|
||||
wwarning("trying to release unexisting data %p", ptr);
|
||||
wwarning("trying to release unexisting data %p", ptr);
|
||||
} else {
|
||||
(*refcount)--;
|
||||
if (*refcount < 1) {
|
||||
(*refcount)--;
|
||||
if (*refcount < 1) {
|
||||
#ifdef VERBOSE
|
||||
printf("RELEASING %p\n", ptr);
|
||||
printf("RELEASING %p\n", ptr);
|
||||
#endif
|
||||
WMHashRemove(table, ptr);
|
||||
wfree(refcount);
|
||||
wfree(ptr);
|
||||
}
|
||||
WMHashRemove(table, ptr);
|
||||
wfree(refcount);
|
||||
wfree(ptr);
|
||||
}
|
||||
#ifdef VERBOSE
|
||||
else {
|
||||
printf("- %i (%p)\n", *refcount, ptr);
|
||||
}
|
||||
else {
|
||||
printf("- %i (%p)\n", *refcount, ptr);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,15 +43,15 @@ WMNotification*
|
||||
WMCreateNotification(const char *name, void *object, void *clientData)
|
||||
{
|
||||
Notification *nPtr;
|
||||
|
||||
|
||||
nPtr = wmalloc(sizeof(Notification));
|
||||
|
||||
|
||||
nPtr->name = name;
|
||||
nPtr->object = object;
|
||||
nPtr->clientData = clientData;
|
||||
|
||||
|
||||
nPtr->refCount = 1;
|
||||
|
||||
|
||||
return nPtr;
|
||||
}
|
||||
|
||||
@@ -60,9 +60,9 @@ void
|
||||
WMReleaseNotification(WMNotification *notification)
|
||||
{
|
||||
notification->refCount--;
|
||||
|
||||
|
||||
if (notification->refCount < 1) {
|
||||
wfree(notification);
|
||||
wfree(notification);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ WMNotification*
|
||||
WMRetainNotification(WMNotification *notification)
|
||||
{
|
||||
notification->refCount++;
|
||||
|
||||
|
||||
return notification;
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ typedef struct W_NotificationCenter {
|
||||
WMHashTable *nameTable; /* names -> observer lists */
|
||||
WMHashTable *objectTable; /* object -> observer lists */
|
||||
NotificationObserver *nilList; /* obervers that catch everything */
|
||||
|
||||
|
||||
WMHashTable *observerTable; /* observer -> NotificationObserver */
|
||||
} NotificationCenter;
|
||||
|
||||
@@ -108,21 +108,21 @@ void
|
||||
W_InitNotificationCenter(void)
|
||||
{
|
||||
notificationCenter = wmalloc(sizeof(NotificationCenter));
|
||||
|
||||
|
||||
notificationCenter->nameTable = WMCreateHashTable(WMStringPointerHashCallbacks);
|
||||
notificationCenter->objectTable = WMCreateHashTable(WMIntHashCallbacks);
|
||||
notificationCenter->nilList = NULL;
|
||||
|
||||
|
||||
notificationCenter->observerTable = WMCreateHashTable(WMIntHashCallbacks);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WMAddNotificationObserver(WMNotificationObserverAction *observerAction,
|
||||
void *observer, const char *name, void *object)
|
||||
void *observer, const char *name, void *object)
|
||||
{
|
||||
NotificationObserver *oRec, *rec;
|
||||
|
||||
|
||||
oRec = wmalloc(sizeof(NotificationObserver));
|
||||
oRec->observerAction = observerAction;
|
||||
oRec->observer = observer;
|
||||
@@ -130,42 +130,42 @@ WMAddNotificationObserver(WMNotificationObserverAction *observerAction,
|
||||
oRec->object = object;
|
||||
oRec->next = NULL;
|
||||
oRec->prev = NULL;
|
||||
|
||||
|
||||
|
||||
|
||||
/* put this action in the list of actions for this observer */
|
||||
rec = (NotificationObserver*)WMHashInsert(notificationCenter->observerTable,
|
||||
observer, oRec);
|
||||
|
||||
observer, oRec);
|
||||
|
||||
if (rec) {
|
||||
/* if this is not the first action for the observer */
|
||||
oRec->nextAction = rec;
|
||||
/* if this is not the first action for the observer */
|
||||
oRec->nextAction = rec;
|
||||
} else {
|
||||
oRec->nextAction = NULL;
|
||||
oRec->nextAction = NULL;
|
||||
}
|
||||
|
||||
if (!name && !object) {
|
||||
/* catch-all */
|
||||
oRec->next = notificationCenter->nilList;
|
||||
if (notificationCenter->nilList) {
|
||||
notificationCenter->nilList->prev = oRec;
|
||||
}
|
||||
notificationCenter->nilList = oRec;
|
||||
/* catch-all */
|
||||
oRec->next = notificationCenter->nilList;
|
||||
if (notificationCenter->nilList) {
|
||||
notificationCenter->nilList->prev = oRec;
|
||||
}
|
||||
notificationCenter->nilList = oRec;
|
||||
} else if (!name) {
|
||||
/* any message coming from object */
|
||||
rec = (NotificationObserver*)WMHashInsert(notificationCenter->objectTable,
|
||||
object, oRec);
|
||||
oRec->next = rec;
|
||||
if (rec) {
|
||||
rec->prev = oRec;
|
||||
}
|
||||
/* any message coming from object */
|
||||
rec = (NotificationObserver*)WMHashInsert(notificationCenter->objectTable,
|
||||
object, oRec);
|
||||
oRec->next = rec;
|
||||
if (rec) {
|
||||
rec->prev = oRec;
|
||||
}
|
||||
} else {
|
||||
/* name && (object || !object) */
|
||||
rec = (NotificationObserver*)WMHashInsert(notificationCenter->nameTable,
|
||||
name, oRec);
|
||||
oRec->next = rec;
|
||||
if (rec) {
|
||||
rec->prev = oRec;
|
||||
}
|
||||
/* name && (object || !object) */
|
||||
rec = (NotificationObserver*)WMHashInsert(notificationCenter->nameTable,
|
||||
name, oRec);
|
||||
oRec->next = rec;
|
||||
if (rec) {
|
||||
rec->prev = oRec;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,49 +176,49 @@ WMPostNotification(WMNotification *notification)
|
||||
NotificationObserver *orec, *tmp;
|
||||
|
||||
WMRetainNotification(notification);
|
||||
|
||||
/* tell the observers that want to know about a particular message */
|
||||
orec = (NotificationObserver*)WMHashGet(notificationCenter->nameTable,
|
||||
notification->name);
|
||||
|
||||
while (orec) {
|
||||
tmp = orec->next;
|
||||
|
||||
if (!orec->object || !notification->object
|
||||
|| orec->object == notification->object) {
|
||||
/* tell the observer */
|
||||
if (orec->observerAction) {
|
||||
(*orec->observerAction)(orec->observer, notification);
|
||||
}
|
||||
}
|
||||
|
||||
orec = tmp;
|
||||
/* tell the observers that want to know about a particular message */
|
||||
orec = (NotificationObserver*)WMHashGet(notificationCenter->nameTable,
|
||||
notification->name);
|
||||
|
||||
while (orec) {
|
||||
tmp = orec->next;
|
||||
|
||||
if (!orec->object || !notification->object
|
||||
|| orec->object == notification->object) {
|
||||
/* tell the observer */
|
||||
if (orec->observerAction) {
|
||||
(*orec->observerAction)(orec->observer, notification);
|
||||
}
|
||||
}
|
||||
|
||||
orec = tmp;
|
||||
}
|
||||
|
||||
/* tell the observers that want to know about an object */
|
||||
orec = (NotificationObserver*)WMHashGet(notificationCenter->objectTable,
|
||||
notification->object);
|
||||
|
||||
notification->object);
|
||||
|
||||
while (orec) {
|
||||
tmp = orec->next;
|
||||
|
||||
/* tell the observer */
|
||||
if (orec->observerAction) {
|
||||
(*orec->observerAction)(orec->observer, notification);
|
||||
}
|
||||
orec = tmp;
|
||||
tmp = orec->next;
|
||||
|
||||
/* tell the observer */
|
||||
if (orec->observerAction) {
|
||||
(*orec->observerAction)(orec->observer, notification);
|
||||
}
|
||||
orec = tmp;
|
||||
}
|
||||
|
||||
/* tell the catch all observers */
|
||||
orec = notificationCenter->nilList;
|
||||
while (orec) {
|
||||
tmp = orec->next;
|
||||
tmp = orec->next;
|
||||
|
||||
/* tell the observer */
|
||||
if (orec->observerAction) {
|
||||
(*orec->observerAction)(orec->observer, notification);
|
||||
}
|
||||
orec = tmp;
|
||||
/* tell the observer */
|
||||
if (orec->observerAction) {
|
||||
(*orec->observerAction)(orec->observer, notification);
|
||||
}
|
||||
orec = tmp;
|
||||
}
|
||||
|
||||
WMReleaseNotification(notification);
|
||||
@@ -232,7 +232,7 @@ WMRemoveNotificationObserver(void *observer)
|
||||
|
||||
/* get the list of actions the observer is doing */
|
||||
orec = (NotificationObserver*)WMHashGet(notificationCenter->observerTable,
|
||||
observer);
|
||||
observer);
|
||||
|
||||
/*
|
||||
* FOREACH orec IN actionlist for observer
|
||||
@@ -242,47 +242,47 @@ WMRemoveNotificationObserver(void *observer)
|
||||
* END
|
||||
*/
|
||||
while (orec) {
|
||||
tmp = orec->nextAction;
|
||||
tmp = orec->nextAction;
|
||||
|
||||
if (!orec->name && !orec->object) {
|
||||
/* catch-all */
|
||||
if (notificationCenter->nilList==orec)
|
||||
notificationCenter->nilList = orec->next;
|
||||
} else if (!orec->name) {
|
||||
/* any message coming from object */
|
||||
rec = (NotificationObserver*)WMHashGet(notificationCenter->objectTable,
|
||||
orec->object);
|
||||
if (rec==orec) {
|
||||
/* replace table entry */
|
||||
if (orec->next) {
|
||||
WMHashInsert(notificationCenter->objectTable, orec->object,
|
||||
orec->next);
|
||||
} else {
|
||||
WMHashRemove(notificationCenter->objectTable, orec->object);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* name && (object || !object) */
|
||||
rec = (NotificationObserver*)WMHashGet(notificationCenter->nameTable,
|
||||
orec->name);
|
||||
if (rec==orec) {
|
||||
/* replace table entry */
|
||||
if (orec->next) {
|
||||
WMHashInsert(notificationCenter->nameTable, orec->name,
|
||||
orec->next);
|
||||
} else {
|
||||
WMHashRemove(notificationCenter->nameTable, orec->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (orec->prev)
|
||||
orec->prev->next = orec->next;
|
||||
if (orec->next)
|
||||
orec->next->prev = orec->prev;
|
||||
if (!orec->name && !orec->object) {
|
||||
/* catch-all */
|
||||
if (notificationCenter->nilList==orec)
|
||||
notificationCenter->nilList = orec->next;
|
||||
} else if (!orec->name) {
|
||||
/* any message coming from object */
|
||||
rec = (NotificationObserver*)WMHashGet(notificationCenter->objectTable,
|
||||
orec->object);
|
||||
if (rec==orec) {
|
||||
/* replace table entry */
|
||||
if (orec->next) {
|
||||
WMHashInsert(notificationCenter->objectTable, orec->object,
|
||||
orec->next);
|
||||
} else {
|
||||
WMHashRemove(notificationCenter->objectTable, orec->object);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* name && (object || !object) */
|
||||
rec = (NotificationObserver*)WMHashGet(notificationCenter->nameTable,
|
||||
orec->name);
|
||||
if (rec==orec) {
|
||||
/* replace table entry */
|
||||
if (orec->next) {
|
||||
WMHashInsert(notificationCenter->nameTable, orec->name,
|
||||
orec->next);
|
||||
} else {
|
||||
WMHashRemove(notificationCenter->nameTable, orec->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (orec->prev)
|
||||
orec->prev->next = orec->next;
|
||||
if (orec->next)
|
||||
orec->next->prev = orec->prev;
|
||||
|
||||
wfree(orec);
|
||||
|
||||
orec = tmp;
|
||||
wfree(orec);
|
||||
|
||||
orec = tmp;
|
||||
}
|
||||
|
||||
WMHashRemove(notificationCenter->observerTable, observer);
|
||||
@@ -303,66 +303,66 @@ WMRemoveNotificationObserverWithName(void *observer, const char *name, void *obj
|
||||
/* rebuild the list of actions for the observer */
|
||||
|
||||
while (orec) {
|
||||
tmp = orec->nextAction;
|
||||
if (orec->name == name && orec->object == object) {
|
||||
if (!name && !object) {
|
||||
if (notificationCenter->nilList == orec)
|
||||
notificationCenter->nilList = orec->next;
|
||||
} else if (!name) {
|
||||
rec = (NotificationObserver*)WMHashGet(notificationCenter->objectTable, orec->object);
|
||||
if (rec==orec) {
|
||||
assert(rec->prev==NULL);
|
||||
/* replace table entry */
|
||||
if (orec->next) {
|
||||
WMHashInsert(notificationCenter->objectTable,
|
||||
orec->object, orec->next);
|
||||
} else {
|
||||
WMHashRemove(notificationCenter->objectTable,
|
||||
orec->object);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rec = (NotificationObserver*)WMHashGet(notificationCenter->nameTable,
|
||||
orec->name);
|
||||
if (rec==orec) {
|
||||
assert(rec->prev==NULL);
|
||||
/* replace table entry */
|
||||
if (orec->next) {
|
||||
WMHashInsert(notificationCenter->nameTable,
|
||||
orec->name, orec->next);
|
||||
} else {
|
||||
WMHashRemove(notificationCenter->nameTable,
|
||||
orec->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
tmp = orec->nextAction;
|
||||
if (orec->name == name && orec->object == object) {
|
||||
if (!name && !object) {
|
||||
if (notificationCenter->nilList == orec)
|
||||
notificationCenter->nilList = orec->next;
|
||||
} else if (!name) {
|
||||
rec = (NotificationObserver*)WMHashGet(notificationCenter->objectTable, orec->object);
|
||||
if (rec==orec) {
|
||||
assert(rec->prev==NULL);
|
||||
/* replace table entry */
|
||||
if (orec->next) {
|
||||
WMHashInsert(notificationCenter->objectTable,
|
||||
orec->object, orec->next);
|
||||
} else {
|
||||
WMHashRemove(notificationCenter->objectTable,
|
||||
orec->object);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rec = (NotificationObserver*)WMHashGet(notificationCenter->nameTable,
|
||||
orec->name);
|
||||
if (rec==orec) {
|
||||
assert(rec->prev==NULL);
|
||||
/* replace table entry */
|
||||
if (orec->next) {
|
||||
WMHashInsert(notificationCenter->nameTable,
|
||||
orec->name, orec->next);
|
||||
} else {
|
||||
WMHashRemove(notificationCenter->nameTable,
|
||||
orec->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (orec->prev)
|
||||
orec->prev->next = orec->next;
|
||||
if (orec->next)
|
||||
orec->next->prev = orec->prev;
|
||||
wfree(orec);
|
||||
if (orec->prev)
|
||||
orec->prev->next = orec->next;
|
||||
if (orec->next)
|
||||
orec->next->prev = orec->prev;
|
||||
wfree(orec);
|
||||
} else {
|
||||
/* append this action in the new action list */
|
||||
orec->nextAction = NULL;
|
||||
if (!newList) {
|
||||
newList = orec;
|
||||
} else {
|
||||
NotificationObserver *p;
|
||||
/* append this action in the new action list */
|
||||
orec->nextAction = NULL;
|
||||
if (!newList) {
|
||||
newList = orec;
|
||||
} else {
|
||||
NotificationObserver *p;
|
||||
|
||||
p = newList;
|
||||
while (p->nextAction) {
|
||||
p = p->nextAction;
|
||||
}
|
||||
p->nextAction = orec;
|
||||
}
|
||||
}
|
||||
orec = tmp;
|
||||
p = newList;
|
||||
while (p->nextAction) {
|
||||
p = p->nextAction;
|
||||
}
|
||||
p->nextAction = orec;
|
||||
}
|
||||
}
|
||||
orec = tmp;
|
||||
}
|
||||
|
||||
/* reinsert the list to the table */
|
||||
if (newList) {
|
||||
WMHashInsert(notificationCenter->observerTable, observer, newList);
|
||||
WMHashInsert(notificationCenter->observerTable, observer, newList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -373,7 +373,7 @@ WMPostNotificationName(const char *name, void *object, void *clientData)
|
||||
WMNotification *notification;
|
||||
|
||||
notification = WMCreateNotification(name, object, clientData);
|
||||
|
||||
|
||||
WMPostNotification(notification);
|
||||
|
||||
WMReleaseNotification(notification);
|
||||
@@ -402,7 +402,7 @@ WMNotificationQueue*
|
||||
WMGetDefaultNotificationQueue(void)
|
||||
{
|
||||
if (!notificationQueue)
|
||||
notificationQueue = WMCreateNotificationQueue();
|
||||
notificationQueue = WMCreateNotificationQueue();
|
||||
|
||||
return notificationQueue;
|
||||
}
|
||||
@@ -430,10 +430,10 @@ WMCreateNotificationQueue(void)
|
||||
|
||||
void
|
||||
WMEnqueueNotification(WMNotificationQueue *queue, WMNotification *notification,
|
||||
WMPostingStyle postingStyle)
|
||||
WMPostingStyle postingStyle)
|
||||
{
|
||||
WMEnqueueCoalesceNotification(queue, notification, postingStyle,
|
||||
WNCOnName|WNCOnSender);
|
||||
WNCOnName|WNCOnSender);
|
||||
}
|
||||
|
||||
|
||||
@@ -465,8 +465,8 @@ matchName(void *item, void *cdata)
|
||||
|
||||
|
||||
void
|
||||
WMDequeueNotificationMatching(WMNotificationQueue *queue,
|
||||
WMNotification *notification, unsigned mask)
|
||||
WMDequeueNotificationMatching(WMNotificationQueue *queue,
|
||||
WMNotification *notification, unsigned mask)
|
||||
{
|
||||
WMMatchDataProc *matchFunc;
|
||||
|
||||
@@ -485,27 +485,27 @@ WMDequeueNotificationMatching(WMNotificationQueue *queue,
|
||||
|
||||
|
||||
void
|
||||
WMEnqueueCoalesceNotification(WMNotificationQueue *queue,
|
||||
WMNotification *notification,
|
||||
WMPostingStyle postingStyle,
|
||||
unsigned coalesceMask)
|
||||
WMEnqueueCoalesceNotification(WMNotificationQueue *queue,
|
||||
WMNotification *notification,
|
||||
WMPostingStyle postingStyle,
|
||||
unsigned coalesceMask)
|
||||
{
|
||||
if (coalesceMask != WNCNone)
|
||||
WMDequeueNotificationMatching(queue, notification, coalesceMask);
|
||||
WMDequeueNotificationMatching(queue, notification, coalesceMask);
|
||||
|
||||
switch (postingStyle) {
|
||||
case WMPostNow:
|
||||
WMPostNotification(notification);
|
||||
case WMPostNow:
|
||||
WMPostNotification(notification);
|
||||
WMReleaseNotification(notification);
|
||||
break;
|
||||
|
||||
case WMPostASAP:
|
||||
WMAddToArray(queue->asapQueue, notification);
|
||||
break;
|
||||
case WMPostASAP:
|
||||
WMAddToArray(queue->asapQueue, notification);
|
||||
break;
|
||||
|
||||
case WMPostWhenIdle:
|
||||
WMAddToArray(queue->idleQueue, notification);
|
||||
break;
|
||||
case WMPostWhenIdle:
|
||||
WMAddToArray(queue->idleQueue, notification);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -516,12 +516,12 @@ W_FlushASAPNotificationQueue()
|
||||
WMNotificationQueue *queue = notificationQueueList;
|
||||
|
||||
while (queue) {
|
||||
while (WMGetArrayItemCount(queue->asapQueue)) {
|
||||
while (WMGetArrayItemCount(queue->asapQueue)) {
|
||||
WMPostNotification(WMGetFromArray(queue->asapQueue, 0));
|
||||
WMDeleteFromArray(queue->asapQueue, 0);
|
||||
}
|
||||
}
|
||||
|
||||
queue = queue->next;
|
||||
queue = queue->next;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -532,12 +532,12 @@ W_FlushIdleNotificationQueue()
|
||||
WMNotificationQueue *queue = notificationQueueList;
|
||||
|
||||
while (queue) {
|
||||
while (WMGetArrayItemCount(queue->idleQueue)) {
|
||||
WMPostNotification(WMGetFromArray(queue->idleQueue, 0));
|
||||
WMDeleteFromArray(queue->idleQueue, 0);
|
||||
}
|
||||
while (WMGetArrayItemCount(queue->idleQueue)) {
|
||||
WMPostNotification(WMGetFromArray(queue->idleQueue, 0));
|
||||
WMDeleteFromArray(queue->idleQueue, 0);
|
||||
}
|
||||
|
||||
queue = queue->next;
|
||||
queue = queue->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
Makefile Makefile.in
|
||||
.psrc .inslog2 tca.map tca.log
|
||||
*.rpt
|
||||
.psrc .inslog2 tca.map tca.log pchdir *.rpt
|
||||
*.pot
|
||||
*.mo
|
||||
|
||||
@@ -4,7 +4,7 @@ CATALOGS = @WINGSMOFILES@
|
||||
|
||||
CLEANFILES = $(CATALOGS) WINGs.pot
|
||||
|
||||
EXTRA_DIST = cs.po sk.po
|
||||
EXTRA_DIST = bg.po ca.po cs.po de.po fr.po sk.po
|
||||
|
||||
POTFILES = \
|
||||
$(top_builddir)/WINGs/connection.c \
|
||||
@@ -24,9 +24,11 @@ POTFILES = \
|
||||
SUFFIXES = .po .mo
|
||||
|
||||
.po.mo:
|
||||
msgfmt -o $@ $<
|
||||
msgfmt -c -o $@ $<
|
||||
|
||||
|
||||
all-local: $(CATALOGS)
|
||||
|
||||
WINGs.pot: $(POTFILES)
|
||||
xgettext --default-domain=WINGs \
|
||||
--add-comments --keyword=_ $(POTFILES)
|
||||
|
||||
@@ -2,13 +2,18 @@
|
||||
Instructions for translating po files can be found in the po/README directory
|
||||
in the top of the WindowMaker source tree.
|
||||
|
||||
All files are in UTF-8
|
||||
|
||||
File Language Note Current Maintainer
|
||||
------------------------------------------------------------------------------
|
||||
cs.po Czech 1 Jiri Hnidek <Jiri.Hnidek@vslib.cz
|
||||
sk.po Slovak 1 Jan 'judas' Tomka <judas@linux.sk>
|
||||
|
||||
ca.po Catalan Ernest Adrogué <eadrogue@gmx.net>
|
||||
cs.po Czech Jiri Hnidek <Jiri.Hnidek@vslib.cz
|
||||
de.po German Guido Scholz <guido.scholz@bayernline.de>
|
||||
fr.po French Emmanuel Benoit <tseeker@neptune.fr>
|
||||
Antoine Hulin <antoine@origan.fdn.org>
|
||||
sk.po Slovak Jan 'judas' Tomka <judas@linux.sk>
|
||||
bg.po Bulgarian Anton Zinoviev <zinoviev@debian.org>
|
||||
|
||||
Notes
|
||||
-----
|
||||
1. Uses iso8859-2 character set.
|
||||
|
||||
|
||||
660
WINGs/po/bg.po
Normal file
660
WINGs/po/bg.po
Normal file
@@ -0,0 +1,660 @@
|
||||
# Message catalog for WINGs
|
||||
# Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
# Anton Zinoviev <zinoviev@debian.org>, 2003
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WINGs 0.80.0\n"
|
||||
"POT-Creation-Date: 2003-02-08 21:42+0200\n"
|
||||
"PO-Revision-Date: 2003-02-09 12:10+0200\n"
|
||||
"Last-Translator: Anton Zinoviev <zinoviev@debian.org>\n"
|
||||
"Language-Team: Bulgarian <dict@linux.zonebg.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../../WINGs/connection.c:461 ../../WINGs/connection.c:526
|
||||
#: ../../WINGs/connection.c:569
|
||||
msgid "Bad address-service-protocol combination"
|
||||
msgstr "Неправилна комбинация адрес-услуга-протокол"
|
||||
|
||||
#: ../../WINGs/error.c:54
|
||||
#, c-format
|
||||
msgid "Unknown error %d"
|
||||
msgstr "Непозната грешка %d"
|
||||
|
||||
#: ../../WINGs/error.c:59
|
||||
#, c-format
|
||||
msgid "Error %d"
|
||||
msgstr "Грешка %d"
|
||||
|
||||
#: ../../WINGs/error.c:110
|
||||
msgid " warning: "
|
||||
msgstr "внимание: "
|
||||
|
||||
#: ../../WINGs/error.c:137
|
||||
msgid " fatal error: "
|
||||
msgstr " критична грешка: "
|
||||
|
||||
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
|
||||
msgid " error: "
|
||||
msgstr " грешка: "
|
||||
|
||||
#: ../../WINGs/findfile.c:48
|
||||
#, c-format
|
||||
msgid "could not get password entry for UID %i"
|
||||
msgstr "не може да се получи записът за парола на потребител с номер %i"
|
||||
|
||||
#: ../../WINGs/findfile.c:66
|
||||
#, c-format
|
||||
msgid "could not get password entry for user %s"
|
||||
msgstr "не може да се получи записът за парола на потребител %s<"
|
||||
|
||||
#: ../../WINGs/host.c:114
|
||||
msgid "Cannot get current host name"
|
||||
msgstr "Не може да се получи името на хоста"
|
||||
|
||||
#: ../../WINGs/proplist.c:91
|
||||
#, c-format
|
||||
msgid "syntax error in %s %s, line %i: %s"
|
||||
msgstr "синтактична грешка в %s %s, ред %i: %s"
|
||||
|
||||
#: ../../WINGs/proplist.c:150
|
||||
msgid "Only string or data is supported for a proplist dictionary key"
|
||||
msgstr "Като ключ за достъп до proplist се поддържат само низове или данни"
|
||||
|
||||
#: ../../WINGs/proplist.c:184 ../../WINGs/proplist.c:236
|
||||
#: ../../WINGs/proplist.c:394 ../../WINGs/proplist.c:474
|
||||
#: ../../WINGs/proplist.c:1075 ../../WINGs/proplist.c:1127
|
||||
#: ../../WINGs/proplist.c:1293 ../../WINGs/proplist.c:1372
|
||||
#: ../../WINGs/proplist.c:1493 ../../WINGs/proplist.c:1540
|
||||
msgid "Used proplist functions on non-WMPropLists objects"
|
||||
msgstr "Ползват се proplist-функции за обекти, които не са от тип WMPropLists"
|
||||
|
||||
#: ../../WINGs/proplist.c:630
|
||||
msgid "unterminated PropList string"
|
||||
msgstr "незавършен низ PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:670
|
||||
msgid "unterminated PropList data"
|
||||
msgstr "незавършени данни PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:678
|
||||
msgid "unterminated PropList data (missing hexdigit)"
|
||||
msgstr "незавършени данни PropList (липсва шестнадесетично число)"
|
||||
|
||||
#: ../../WINGs/proplist.c:690 ../../WINGs/proplist.c:695
|
||||
msgid "non hexdigit character in PropList data"
|
||||
msgstr "знак, който не е шестнадесетично число, в данни PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:729
|
||||
msgid "unterminated PropList array"
|
||||
msgstr "незавършен масив PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:737
|
||||
msgid "missing or unterminated PropList array"
|
||||
msgstr "липсващ или незавършен масив Proplist"
|
||||
|
||||
#: ../../WINGs/proplist.c:747
|
||||
msgid "could not get PropList array element"
|
||||
msgstr "не може да се получи елемент от масив PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:776
|
||||
msgid "unterminated PropList dictionary"
|
||||
msgstr "незавършен речник PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:793
|
||||
msgid "missing PropList dictionary key"
|
||||
msgstr "липсващ ключ за достъп до PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:795
|
||||
msgid "missing PropList dictionary entry key or unterminated dictionary"
|
||||
msgstr "липсващ ключ за достъп до PropList или незавършен речник"
|
||||
|
||||
#: ../../WINGs/proplist.c:803
|
||||
msgid "error parsing PropList dictionary key"
|
||||
msgstr "грешка при разбор на ключ в PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:811
|
||||
msgid "missing = in PropList dictionary entry"
|
||||
msgstr "липсва знак за равенство в елемент на PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:819
|
||||
msgid "error parsing PropList dictionary entry value"
|
||||
msgstr "грешка при разбор на стойност на елемент в PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:827
|
||||
msgid "missing ; in PropList dictionary entry"
|
||||
msgstr "липсва знак точка и запетая в елемент на PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:888
|
||||
msgid ""
|
||||
"was expecting a string, data, array or dictionary. If it's a string, try "
|
||||
"enclosing it with \"."
|
||||
msgstr "очакваха се низ, данни, масив или речник. Ако е речник, пробвайте да го оградите с \"."
|
||||
|
||||
#: ../../WINGs/proplist.c:892
|
||||
msgid "Comments are not allowed inside WindowMaker owned domain files."
|
||||
msgstr "Не се позволяват коментари във файлове с области, собственост на Уиндоу Мейкър"
|
||||
|
||||
#: ../../WINGs/proplist.c:1563 ../../WINGs/proplist.c:1628
|
||||
msgid "extra data after end of property list"
|
||||
msgstr "данни в повече след края на списък свойства"
|
||||
|
||||
#: ../../WINGs/proplist.c:1606
|
||||
#, c-format
|
||||
msgid "could not get size for file '%s'"
|
||||
msgstr "не може да се получи размерът за файл \"%s\""
|
||||
|
||||
#: ../../WINGs/proplist.c:1618
|
||||
#, c-format
|
||||
msgid "error reading from file '%s'"
|
||||
msgstr "грешка при четене от файл \"%s\""
|
||||
|
||||
#: ../../WINGs/proplist.c:1669
|
||||
#, c-format
|
||||
msgid "mkstemp (%s) failed"
|
||||
msgstr "mkstemp (%s) не успя"
|
||||
|
||||
#: ../../WINGs/proplist.c:1680
|
||||
#, c-format
|
||||
msgid "mktemp (%s) failed"
|
||||
msgstr "mktemp (%s) не успя"
|
||||
|
||||
#: ../../WINGs/proplist.c:1691
|
||||
#, c-format
|
||||
msgid "open (%s) failed"
|
||||
msgstr "open (%s) не успя"
|
||||
|
||||
#: ../../WINGs/proplist.c:1698
|
||||
#, c-format
|
||||
msgid "writing to file: %s failed"
|
||||
msgstr "записът във файл %s не успя"
|
||||
|
||||
#: ../../WINGs/proplist.c:1706
|
||||
#, c-format
|
||||
msgid "fclose (%s) failed"
|
||||
msgstr "fclose (%s) не успя"
|
||||
|
||||
#: ../../WINGs/proplist.c:1715
|
||||
#, c-format
|
||||
msgid "rename ('%s' to '%s') failed"
|
||||
msgstr "преименуването (от \"%s\" на \"%s\") не успя"
|
||||
|
||||
#. something happened with the file. just overwrite it
|
||||
#: ../../WINGs/userdefaults.c:192 ../../WINGs/userdefaults.c:208
|
||||
#, c-format
|
||||
msgid "cannot read domain from file '%s' when syncing"
|
||||
msgstr "не може да се прочете областта от файл \"%s\" при синхронизиране"
|
||||
|
||||
#: ../../WINGs/wcolor.c:198 ../../WINGs/wcolor.c:211 ../../WINGs/wcolor.c:250
|
||||
#: ../../WINGs/wcolor.c:291
|
||||
#, c-format
|
||||
msgid "could not allocate %s color"
|
||||
msgstr "не може да се задели цвят %s"
|
||||
|
||||
#: ../../WINGs/wcolor.c:198
|
||||
msgid "white"
|
||||
msgstr "бял"
|
||||
|
||||
#: ../../WINGs/wcolor.c:211
|
||||
msgid "black"
|
||||
msgstr "черен"
|
||||
|
||||
#: ../../WINGs/wcolor.c:250
|
||||
msgid "gray"
|
||||
msgstr "сив"
|
||||
|
||||
#: ../../WINGs/wcolor.c:291
|
||||
msgid "dark gray"
|
||||
msgstr "тъмносив"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:415
|
||||
msgid "Colors"
|
||||
msgstr "Цветове"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:605 ../../WINGs/wcolorpanel.c:2824
|
||||
msgid "Brightness"
|
||||
msgstr "Яркост"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:607 ../../WINGs/wcolorpanel.c:683
|
||||
#: ../../WINGs/wcolorpanel.c:716 ../../WINGs/wcolorpanel.c:750
|
||||
#: ../../WINGs/wcolorpanel.c:810 ../../WINGs/wcolorpanel.c:844
|
||||
#: ../../WINGs/wcolorpanel.c:878 ../../WINGs/wcolorpanel.c:913
|
||||
#: ../../WINGs/wcolorpanel.c:2164 ../../WINGs/wcolorpanel.c:2826
|
||||
#: ../../WINGs/wcolorpanel.c:2862 ../../WINGs/wcolorpanel.c:2898
|
||||
#: ../../WINGs/wcolorpanel.c:3746
|
||||
msgid "Color Panel: Could not allocate memory"
|
||||
msgstr "Color Panel: не може да се задели памет"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:680 ../../WINGs/wcolorpanel.c:681
|
||||
msgid "Red"
|
||||
msgstr "Червен"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:713 ../../WINGs/wcolorpanel.c:714
|
||||
msgid "Green"
|
||||
msgstr "Зелен"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:747 ../../WINGs/wcolorpanel.c:748
|
||||
msgid "Blue"
|
||||
msgstr "Син"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:807 ../../WINGs/wcolorpanel.c:808
|
||||
msgid "Cyan"
|
||||
msgstr "Синьозелен"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:841 ../../WINGs/wcolorpanel.c:842
|
||||
msgid "Magenta"
|
||||
msgstr "Пурпурен"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:875 ../../WINGs/wcolorpanel.c:876
|
||||
msgid "Yellow"
|
||||
msgstr "Жълт"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:910 ../../WINGs/wcolorpanel.c:911
|
||||
msgid "Black"
|
||||
msgstr "Черен"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:991
|
||||
msgid "Spectrum"
|
||||
msgstr "Спектър"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1021
|
||||
msgid "Palette"
|
||||
msgstr "Палитра"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1027
|
||||
msgid "New from File..."
|
||||
msgstr "Нова от файл..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1028 ../../WINGs/wcolorpanel.c:1076
|
||||
#: ../../WINGs/wcolorpanel.c:1093
|
||||
msgid "Rename..."
|
||||
msgstr "Преименувай..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1029 ../../WINGs/wcolorpanel.c:1077
|
||||
#: ../../WINGs/wcolorpanel.c:1094 ../../WINGs/wcolorpanel.c:3321
|
||||
msgid "Remove"
|
||||
msgstr "Премахни"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1030
|
||||
msgid "Copy"
|
||||
msgstr "Копирай"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1031
|
||||
#, fuzzy
|
||||
msgid "New from Clipboard"
|
||||
msgstr "Нова от Clipboard"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1052
|
||||
msgid "X11-Colors"
|
||||
msgstr "Цветове от X11"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1069
|
||||
msgid "Color"
|
||||
msgstr "Цвят"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1075
|
||||
msgid "Add..."
|
||||
msgstr "Добави..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1085
|
||||
msgid "List"
|
||||
msgstr "Списък"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1092
|
||||
msgid "New..."
|
||||
msgstr "Нов..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1231
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Color Panel: Could not create directory %s needed to store configurations"
|
||||
msgstr "Color Panel: Не може да се създаде директория %s, необходима за да се запазят настройките"
|
||||
|
||||
#. Delete the file, it doesn't belong here
|
||||
#: ../../WINGs/wcolorpanel.c:1237 ../../WINGs/wcolorpanel.c:3207
|
||||
#: ../../WINGs/wcolorpanel.c:3211
|
||||
msgid "File Error"
|
||||
msgstr "Файлова грешка"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1238
|
||||
msgid "Could not create ColorPanel configuration directory"
|
||||
msgstr "Не може да се създаде конфигурационна директория за ColorPanel"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1239 ../../WINGs/wcolorpanel.c:3208
|
||||
#: ../../WINGs/wcolorpanel.c:3213 ../../WINGs/wcolorpanel.c:3240
|
||||
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:647
|
||||
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
|
||||
#: ../../WINGs/wfilepanel.c:971 ../../WINGs/wfontpanel.c:709
|
||||
msgid "OK"
|
||||
msgstr "Приемам"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1245 ../../WINGs/wcolorpanel.c:1281
|
||||
#: ../../WINGs/wcolorpanel.c:1299
|
||||
msgid "Color Panel: Could not find file"
|
||||
msgstr "Color Panel: Не може да се открие файла"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1486 ../../WINGs/wcolorpanel.c:1551
|
||||
#: ../../WINGs/wcolorpanel.c:1615
|
||||
msgid "Color Panel: X failed request"
|
||||
msgstr "Color Panel: не успя заявка към X"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2860
|
||||
msgid "Saturation"
|
||||
msgstr "Наситеност"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2896
|
||||
msgid "Hue"
|
||||
msgstr "Нюанс"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3146
|
||||
msgid "Open Palette"
|
||||
msgstr "Отваряне на палитра"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3208
|
||||
msgid "Invalid file format !"
|
||||
msgstr "Неправилен файлов формат!"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3210
|
||||
#, c-format
|
||||
msgid "can't remove file %s"
|
||||
msgstr "не може да се изтрие файлът %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3212
|
||||
msgid "Couldn't remove file from Configuration Directory !"
|
||||
msgstr "Не може да се изтрие файл от директорията за настройки!"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3239
|
||||
msgid "Rename"
|
||||
msgstr "Преименуване"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3239
|
||||
msgid "Rename palette to:"
|
||||
msgstr "Преименувай палитрата на "
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3240 ../../WINGs/wfilepanel.c:259
|
||||
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
|
||||
msgid "Cancel"
|
||||
msgstr "Отменям"
|
||||
|
||||
#. Careful, this palette exists already
|
||||
#: ../../WINGs/wcolorpanel.c:3256 ../../WINGs/wfilepanel.c:760
|
||||
msgid "Warning"
|
||||
msgstr "Внимание"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3257
|
||||
msgid ""
|
||||
"Palette already exists !\n"
|
||||
"\n"
|
||||
"Overwrite ?"
|
||||
msgstr ""
|
||||
"Такава палитра вече съществува!\n"
|
||||
"\n"
|
||||
"Да бъде ли заменена с новата?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
|
||||
msgid "No"
|
||||
msgstr "Не"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
|
||||
msgid "Yes"
|
||||
msgstr "Да"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3289
|
||||
#, c-format
|
||||
msgid "Couldn't rename palette %s to %s\n"
|
||||
msgstr "Палитрата %s не може да се преименува на %s\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3315
|
||||
msgid "This will permanently remove the palette "
|
||||
msgstr "Това ще отстрани палитрата необратимо "
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3318
|
||||
msgid ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Are you sure you want to remove this palette ?"
|
||||
msgstr ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Убедени ли сте, че искате да отстраните тази палитра?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3343
|
||||
#, c-format
|
||||
msgid "Couldn't remove palette %s\n"
|
||||
msgstr "Палитрата %s не може да бъде отстранена\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3648
|
||||
#, c-format
|
||||
msgid "Could not open %s"
|
||||
msgstr "Не може да бъде отворен %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3655
|
||||
#, c-format
|
||||
msgid "Could not create %s"
|
||||
msgstr "Не може да бъде създаден %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3666
|
||||
#, c-format
|
||||
msgid "Write error on file %s"
|
||||
msgstr "Грешка при запис във файл %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3711
|
||||
msgid "Color Panel: Color unspecified"
|
||||
msgstr "Color Panel: Не е посочен цвят"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:235
|
||||
msgid "Name:"
|
||||
msgstr "Име:"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:332 ../../WINGs/wfilepanel.c:396
|
||||
msgid "Open"
|
||||
msgstr "Отвори"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:350 ../../WINGs/wfilepanel.c:402
|
||||
msgid "Save"
|
||||
msgstr "Запази"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:562
|
||||
#, c-format
|
||||
msgid "WINGs: could not open directory %s\n"
|
||||
msgstr "WINGs: директорията %s не може да се отвори\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:580
|
||||
#, c-format
|
||||
msgid "WINGs: could not stat %s\n"
|
||||
msgstr "WINGs: не могат да се получат атрибутите (stat) за %s\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:647 ../../WINGs/wfilepanel.c:970
|
||||
#: ../../WINGs/wfontpanel.c:708
|
||||
msgid "Error"
|
||||
msgstr "Грешка"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:658
|
||||
msgid "Create Directory"
|
||||
msgstr "Създаване на директория"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:659
|
||||
msgid "Enter directory name"
|
||||
msgstr "Въведете името на директорията"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:695 ../../WINGs/wfilepanel.c:734
|
||||
#: ../../WINGs/wfilepanel.c:765 ../../WINGs/wfilepanel.c:793
|
||||
msgid "Permission denied."
|
||||
msgstr "Отказан достъп"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:698
|
||||
#, c-format
|
||||
msgid "'%s' already exists."
|
||||
msgstr "вече съществува \"%s\"."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:701
|
||||
msgid "Path does not exist."
|
||||
msgstr "Пътят не съществува."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:731 ../../WINGs/wfilepanel.c:790
|
||||
#, c-format
|
||||
msgid "'%s' does not exist."
|
||||
msgstr "Не съществува \"%s\"."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:738 ../../WINGs/wfilepanel.c:797
|
||||
msgid "Insufficient memory available."
|
||||
msgstr "Не е достъпна достатъчно памет."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:742 ../../WINGs/wfilepanel.c:801
|
||||
#, c-format
|
||||
msgid "'%s' is on a read-only filesystem."
|
||||
msgstr "\"%s\" се намира във файлова система с достъп само за четене."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:777
|
||||
#: ../../WINGs/wfilepanel.c:804
|
||||
#, c-format
|
||||
msgid "Can not delete '%s'."
|
||||
msgstr "\"%s\" не може да бъде изтрит."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:752
|
||||
#, c-format
|
||||
msgid "Delete directory %s ?"
|
||||
msgstr "Да се изтрие ли директорията %s?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:756
|
||||
#, c-format
|
||||
msgid "Delete file %s ?"
|
||||
msgstr "Да се изтрие ли файлът %s?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:768
|
||||
#, c-format
|
||||
msgid "Directory '%s' does not exist."
|
||||
msgstr "Директорията \"%s\" не съществува."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:771
|
||||
#, c-format
|
||||
msgid "Directory '%s' is not empty."
|
||||
msgstr "Директорията \"%s\" не е празна."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:774
|
||||
#, c-format
|
||||
msgid "Directory '%s' is busy."
|
||||
msgstr "Директорията \"%s е заета."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:787
|
||||
#, c-format
|
||||
msgid "'%s' is a directory."
|
||||
msgstr "\"%s\" е директория."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:829
|
||||
#, c-format
|
||||
msgid "An error occured browsing '%s'."
|
||||
msgstr "Настъпи грешка при показване на \"%s\"."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:833
|
||||
#, c-format
|
||||
msgid "'%s' is not a directory."
|
||||
msgstr "\"%s\" не е директория."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:970
|
||||
msgid "File does not exist."
|
||||
msgstr "Файлът не съществува."
|
||||
|
||||
#: ../../WINGs/wfont.c:129
|
||||
#, c-format
|
||||
msgid "the following character sets are missing in %s:"
|
||||
msgstr "в %s липсват следните кодирания:"
|
||||
|
||||
#: ../../WINGs/wfont.c:136
|
||||
#, c-format
|
||||
msgid ""
|
||||
"the string \"%s\" will be used in place of any characters from those sets."
|
||||
msgstr "Вместо кой да е символ от тези кодирания ще се използва низът \"%s\"."
|
||||
|
||||
#: ../../WINGs/wfont.c:300 ../../WINGs/wfont.c:336
|
||||
#, c-format
|
||||
msgid "could not load font set %s. Trying fixed."
|
||||
msgstr "не може да се зареди шрифтова комбинация %s. Опит за шрифт fixed."
|
||||
|
||||
#: ../../WINGs/wfont.c:306 ../../WINGs/wfont.c:342
|
||||
#, c-format
|
||||
msgid "could not load font %s. Trying fixed."
|
||||
msgstr "не може да се зареди шрифт %s. Опит за шрифт fixed."
|
||||
|
||||
#: ../../WINGs/wfont.c:310 ../../WINGs/wfont.c:346
|
||||
msgid "could not load fixed font!"
|
||||
msgstr "не може да се зареди шрифтът fixed!"
|
||||
|
||||
#: ../../WINGs/wfont.c:441
|
||||
#, c-format
|
||||
msgid "font description %s is too large."
|
||||
msgstr "шрифтовото описание %s е твърде дълго."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:205
|
||||
msgid "Test!!!"
|
||||
msgstr "Проба!!! Test!!!"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:211
|
||||
msgid "Family"
|
||||
msgstr "Гарнитура"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:222
|
||||
msgid "Typeface"
|
||||
msgstr "Стил"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:233
|
||||
msgid "Size"
|
||||
msgstr "Размер"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:252
|
||||
msgid "Set"
|
||||
msgstr "Установи"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:257
|
||||
msgid "Revert"
|
||||
msgstr "Предишното"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:709
|
||||
msgid "Could not retrieve font list"
|
||||
msgstr "Не може да се получи списъка от шрифтове"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:721
|
||||
#, c-format
|
||||
msgid "font name %s is longer than 256, which is invalid."
|
||||
msgstr "името на шрифта %s е по-дълго от 256 символа, което е недопустимо."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:868
|
||||
msgid "Roman"
|
||||
msgstr "Изправен"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:871
|
||||
msgid "Italic"
|
||||
msgstr "Курсив"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:873
|
||||
msgid "Oblique"
|
||||
msgstr "Наклонен"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:875
|
||||
msgid "Rev Italic"
|
||||
msgstr "Обратен курсив"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:877
|
||||
msgid "Rev Oblique"
|
||||
msgstr "Обратно наклонен"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:883
|
||||
msgid "Normal"
|
||||
msgstr "Нормален"
|
||||
|
||||
#: ../../WINGs/widgets.c:415
|
||||
#, c-format
|
||||
msgid "WINGs: could not load widget images file: %s"
|
||||
msgstr "WINGs: не може да се зареди изображението %s на библиотеката."
|
||||
|
||||
#: ../../WINGs/widgets.c:763
|
||||
msgid ""
|
||||
"could not load any fonts. Make sure your font installation and locale "
|
||||
"settings are correct."
|
||||
msgstr "не може да се зареди никакъв шрифт. Убедете се, че имате правилно инсталирани шрифтове и посочен езиков локал."
|
||||
|
||||
#: ../../WINGs/wruler.c:189
|
||||
msgid "0 inches"
|
||||
msgstr "0 цола"
|
||||
736
WINGs/po/ca.po
Normal file
736
WINGs/po/ca.po
Normal file
@@ -0,0 +1,736 @@
|
||||
# Catalan messages for WINGs.
|
||||
# Copyright (C) 2003 Ernest Adrogué <eadrogue@gmx.net>.
|
||||
# This file is distributed under the terms of the GNU General Public License.
|
||||
#
|
||||
# Version history:
|
||||
# WM-ver author email date
|
||||
# 0.80.2 Ernest Adrogué eadrogue@gmx.net 23 Feb 2003
|
||||
# CVS-20030914 Ernest Adrogué eadrogue@gmx.net 15 Set 2003
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WINGs 0.80.2\n"
|
||||
"POT-Creation-Date: 2003-09-16 22:59+0200\n"
|
||||
"PO-Revision-Date: 2003-09-16 23:16+0200\n"
|
||||
"Last-Translator: Ernest Adrogué <eadrogue@gmx.net>\n"
|
||||
"Language-Team: Catalan <ca@dodds.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../../WINGs/connection.c:467 ../../WINGs/connection.c:532
|
||||
#: ../../WINGs/connection.c:575
|
||||
msgid "Bad address-service-protocol combination"
|
||||
msgstr "Combinació adreça-servei-protocol incorrecta"
|
||||
|
||||
#: ../../WINGs/error.c:54
|
||||
#, c-format
|
||||
msgid "Unknown error %d"
|
||||
msgstr "Error no identificat %d"
|
||||
|
||||
#: ../../WINGs/error.c:59
|
||||
#, c-format
|
||||
msgid "Error %d"
|
||||
msgstr "Error %d"
|
||||
|
||||
#: ../../WINGs/error.c:110
|
||||
msgid " warning: "
|
||||
msgstr ": atenció: "
|
||||
|
||||
#: ../../WINGs/error.c:137
|
||||
msgid " fatal error: "
|
||||
msgstr ": error fatal: "
|
||||
|
||||
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
|
||||
msgid " error: "
|
||||
msgstr ": error: "
|
||||
|
||||
#: ../../WINGs/findfile.c:48
|
||||
#, c-format
|
||||
msgid "could not get password entry for UID %i"
|
||||
msgstr "no s'ha pogut obtenir l'informació de compte de l'UID %i"
|
||||
|
||||
#: ../../WINGs/findfile.c:66
|
||||
#, c-format
|
||||
msgid "could not get password entry for user %s"
|
||||
msgstr "no s'ha pogut obtenir l'informació de compte de l'usuari %s"
|
||||
|
||||
#: ../../WINGs/host.c:114
|
||||
msgid "Cannot get current host name"
|
||||
msgstr "No s'ha pogut obtenir el nom de host actual"
|
||||
|
||||
# falten coses per traduïr en el codi font. eac
|
||||
#: ../../WINGs/proplist.c:91
|
||||
#, c-format
|
||||
msgid "syntax error in %s %s, line %i: %s"
|
||||
msgstr "error de sintaxi a %s %s, línia %i: %s"
|
||||
|
||||
#: ../../WINGs/proplist.c:150
|
||||
msgid "Only string or data is supported for a proplist dictionary key"
|
||||
msgstr ""
|
||||
"Una entrada PropList de diccionari només pot contenir dades o una cadena"
|
||||
|
||||
#: ../../WINGs/proplist.c:184 ../../WINGs/proplist.c:236
|
||||
#: ../../WINGs/proplist.c:394 ../../WINGs/proplist.c:474
|
||||
#: ../../WINGs/proplist.c:1075 ../../WINGs/proplist.c:1127
|
||||
#: ../../WINGs/proplist.c:1293 ../../WINGs/proplist.c:1372
|
||||
#: ../../WINGs/proplist.c:1493 ../../WINGs/proplist.c:1540
|
||||
msgid "Used proplist functions on non-WMPropLists objects"
|
||||
msgstr "S'han usat funcions PropList en objectes no-WMPropLists"
|
||||
|
||||
#: ../../WINGs/proplist.c:630
|
||||
msgid "unterminated PropList string"
|
||||
msgstr "cadena PropList incompleta"
|
||||
|
||||
#: ../../WINGs/proplist.c:670
|
||||
msgid "unterminated PropList data"
|
||||
msgstr "dades PropList incompletes"
|
||||
|
||||
#: ../../WINGs/proplist.c:678
|
||||
msgid "unterminated PropList data (missing hexdigit)"
|
||||
msgstr "Dades PropList incompletes (falta un digit hexadecimal)"
|
||||
|
||||
#: ../../WINGs/proplist.c:690 ../../WINGs/proplist.c:695
|
||||
msgid "non hexdigit character in PropList data"
|
||||
msgstr "cap digit hexadecimal a les dades PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:729
|
||||
msgid "unterminated PropList array"
|
||||
msgstr "matriu PropList incompleta"
|
||||
|
||||
#: ../../WINGs/proplist.c:737
|
||||
msgid "missing or unterminated PropList array"
|
||||
msgstr "matriu PropList incompleta o inexistent"
|
||||
|
||||
#: ../../WINGs/proplist.c:747
|
||||
msgid "could not get PropList array element"
|
||||
msgstr "no s'ha pogut obtenir un element de la matriu PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:776
|
||||
msgid "unterminated PropList dictionary"
|
||||
msgstr "diccionari PropList incomplet"
|
||||
|
||||
#: ../../WINGs/proplist.c:793
|
||||
msgid "missing PropList dictionary key"
|
||||
msgstr "falta una entrada PropList de diccionari"
|
||||
|
||||
#: ../../WINGs/proplist.c:795
|
||||
msgid "missing PropList dictionary entry key or unterminated dictionary"
|
||||
msgstr "falta una entrada PropList de diccionari o bé està incompleta"
|
||||
|
||||
#: ../../WINGs/proplist.c:803
|
||||
msgid "error parsing PropList dictionary key"
|
||||
msgstr "error mentre s'analitzava l'entrada PropList de diccionari"
|
||||
|
||||
#: ../../WINGs/proplist.c:811
|
||||
msgid "missing = in PropList dictionary entry"
|
||||
msgstr "falta un \"=\" a l'entrada PropList de diccionari"
|
||||
|
||||
#: ../../WINGs/proplist.c:819
|
||||
msgid "error parsing PropList dictionary entry value"
|
||||
msgstr "error mentre s'analitzava el valor de l'entrada PropList de diccionari"
|
||||
|
||||
#: ../../WINGs/proplist.c:827
|
||||
msgid "missing ; in PropList dictionary entry"
|
||||
msgstr "falta un \";\" a l'entrada PropList de diccionari"
|
||||
|
||||
#: ../../WINGs/proplist.c:888
|
||||
msgid ""
|
||||
"was expecting a string, data, array or dictionary. If it's a string, try "
|
||||
"enclosing it with \"."
|
||||
msgstr ""
|
||||
"s'esperava una cadena, dada, matriu o diccionari. Si es tractava d'una\n"
|
||||
"cadena proveu d'escriure-la \"entre cometes\"."
|
||||
|
||||
#: ../../WINGs/proplist.c:892
|
||||
msgid "Comments are not allowed inside WindowMaker owned domain files."
|
||||
msgstr "No es permeten comentaris en els fitxers de domini de WindowMaker."
|
||||
|
||||
#: ../../WINGs/proplist.c:1563 ../../WINGs/proplist.c:1630
|
||||
msgid "extra data after end of property list"
|
||||
msgstr "sobren dades després de la llista de propietats"
|
||||
|
||||
#: ../../WINGs/proplist.c:1606
|
||||
#, c-format
|
||||
msgid "could not get size for file '%s'"
|
||||
msgstr "no s'ha pogut obtenir la mida de \"%s\""
|
||||
|
||||
#: ../../WINGs/proplist.c:1619
|
||||
#, c-format
|
||||
msgid "error reading from file '%s'"
|
||||
msgstr "error mentre es llegia el fitxer \"%s\""
|
||||
|
||||
#: ../../WINGs/proplist.c:1671
|
||||
#, c-format
|
||||
msgid "mkstemp (%s) failed"
|
||||
msgstr "la rutina mkstemp (%s) ha fallat"
|
||||
|
||||
#: ../../WINGs/proplist.c:1682
|
||||
#, c-format
|
||||
msgid "mktemp (%s) failed"
|
||||
msgstr "la rutina mktemp (%s) ha fallat"
|
||||
|
||||
#: ../../WINGs/proplist.c:1693
|
||||
#, c-format
|
||||
msgid "open (%s) failed"
|
||||
msgstr "la rutina open (%s) ha fallat"
|
||||
|
||||
#: ../../WINGs/proplist.c:1700
|
||||
#, c-format
|
||||
msgid "writing to file: %s failed"
|
||||
msgstr "l'escriptura del fitxer \"%s\" ha fallat"
|
||||
|
||||
#: ../../WINGs/proplist.c:1708
|
||||
#, c-format
|
||||
msgid "fclose (%s) failed"
|
||||
msgstr "la rutina fclose (%s) ha fallat"
|
||||
|
||||
#: ../../WINGs/proplist.c:1717
|
||||
#, c-format
|
||||
msgid "rename ('%s' to '%s') failed"
|
||||
msgstr "el canvi de nom (\"%s\" a \"%s\") ha fallat"
|
||||
|
||||
#. something happened with the file. just overwrite it
|
||||
#: ../../WINGs/userdefaults.c:188 ../../WINGs/userdefaults.c:204
|
||||
#, c-format
|
||||
msgid "cannot read domain from file '%s' when syncing"
|
||||
msgstr "no s'ha pogut llegir un domini del fitxer \"%s\" quan es sincronitzava"
|
||||
|
||||
#: ../../WINGs/wcolor.c:224 ../../WINGs/wcolor.c:236 ../../WINGs/wcolor.c:275
|
||||
#: ../../WINGs/wcolor.c:316
|
||||
#, c-format
|
||||
msgid "could not allocate %s color"
|
||||
msgstr "no s'ha pogut assignar espai pel color \"%s\""
|
||||
|
||||
#: ../../WINGs/wcolor.c:224
|
||||
msgid "white"
|
||||
msgstr "blanc"
|
||||
|
||||
#: ../../WINGs/wcolor.c:236
|
||||
msgid "black"
|
||||
msgstr "negre"
|
||||
|
||||
#: ../../WINGs/wcolor.c:275
|
||||
msgid "gray"
|
||||
msgstr "gris"
|
||||
|
||||
#: ../../WINGs/wcolor.c:316
|
||||
msgid "dark gray"
|
||||
msgstr "gris fosc"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:420
|
||||
msgid "Colors"
|
||||
msgstr "Colors"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:610 ../../WINGs/wcolorpanel.c:2829
|
||||
msgid "Brightness"
|
||||
msgstr "Claror"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:612 ../../WINGs/wcolorpanel.c:688
|
||||
#: ../../WINGs/wcolorpanel.c:721 ../../WINGs/wcolorpanel.c:755
|
||||
#: ../../WINGs/wcolorpanel.c:815 ../../WINGs/wcolorpanel.c:849
|
||||
#: ../../WINGs/wcolorpanel.c:883 ../../WINGs/wcolorpanel.c:918
|
||||
#: ../../WINGs/wcolorpanel.c:2169 ../../WINGs/wcolorpanel.c:2831
|
||||
#: ../../WINGs/wcolorpanel.c:2867 ../../WINGs/wcolorpanel.c:2903
|
||||
#: ../../WINGs/wcolorpanel.c:3745
|
||||
msgid "Color Panel: Could not allocate memory"
|
||||
msgstr "Panell de color: No s'ha pogut assignar memòria"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:685 ../../WINGs/wcolorpanel.c:686
|
||||
msgid "Red"
|
||||
msgstr "Roig"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:718 ../../WINGs/wcolorpanel.c:719
|
||||
msgid "Green"
|
||||
msgstr "Verd"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:752 ../../WINGs/wcolorpanel.c:753
|
||||
msgid "Blue"
|
||||
msgstr "Blau"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:812 ../../WINGs/wcolorpanel.c:813
|
||||
msgid "Cyan"
|
||||
msgstr "Cian"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:846 ../../WINGs/wcolorpanel.c:847
|
||||
msgid "Magenta"
|
||||
msgstr "Magenta"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:880 ../../WINGs/wcolorpanel.c:881
|
||||
msgid "Yellow"
|
||||
msgstr "Groc"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:915 ../../WINGs/wcolorpanel.c:916
|
||||
msgid "Black"
|
||||
msgstr "Negre"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:996
|
||||
msgid "Spectrum"
|
||||
msgstr "Espectre"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1026
|
||||
msgid "Palette"
|
||||
msgstr "Paleta"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1032
|
||||
msgid "New from File..."
|
||||
msgstr "Obtenir d'un fitxer..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1033 ../../WINGs/wcolorpanel.c:1081
|
||||
#: ../../WINGs/wcolorpanel.c:1098
|
||||
msgid "Rename..."
|
||||
msgstr "Reanomenar..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1034 ../../WINGs/wcolorpanel.c:1082
|
||||
#: ../../WINGs/wcolorpanel.c:1099 ../../WINGs/wcolorpanel.c:3326
|
||||
msgid "Remove"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1035
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1036
|
||||
msgid "New from Clipboard"
|
||||
msgstr "Obtenir del porta-retalls..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1057
|
||||
msgid "X11-Colors"
|
||||
msgstr "Colors-X11"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1074
|
||||
msgid "Color"
|
||||
msgstr "Color"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1080
|
||||
msgid "Add..."
|
||||
msgstr "Afegeix..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1090
|
||||
msgid "List"
|
||||
msgstr "Llista"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1097
|
||||
msgid "New..."
|
||||
msgstr "Nou..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Color Panel: Could not create directory %s needed to store configurations"
|
||||
msgstr ""
|
||||
"Panell de color: No s'ha pogut crear el directori \"%s\" necessari per desar "
|
||||
"la configuració"
|
||||
|
||||
#. Delete the file, it doesn't belong here
|
||||
#: ../../WINGs/wcolorpanel.c:1242 ../../WINGs/wcolorpanel.c:3212
|
||||
#: ../../WINGs/wcolorpanel.c:3216
|
||||
msgid "File Error"
|
||||
msgstr "Error de fitxer"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1243
|
||||
msgid "Could not create ColorPanel configuration directory"
|
||||
msgstr "No s'ha pogut crear el directori de configuració del Panell de color"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1244 ../../WINGs/wcolorpanel.c:3213
|
||||
#: ../../WINGs/wcolorpanel.c:3218 ../../WINGs/wcolorpanel.c:3245
|
||||
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:650
|
||||
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
|
||||
#: ../../WINGs/wfilepanel.c:974 ../../WINGs/wfontpanel.c:751
|
||||
msgid "OK"
|
||||
msgstr "D'acord"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1250 ../../WINGs/wcolorpanel.c:1286
|
||||
#: ../../WINGs/wcolorpanel.c:1304
|
||||
msgid "Color Panel: Could not find file"
|
||||
msgstr "Panell de color: No s'ha trobat el fitxer"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1491 ../../WINGs/wcolorpanel.c:1556
|
||||
#: ../../WINGs/wcolorpanel.c:1620
|
||||
msgid "Color Panel: X failed request"
|
||||
msgstr "Panell de color: petició X fallida"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2865
|
||||
msgid "Saturation"
|
||||
msgstr "Saturació"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2901
|
||||
msgid "Hue"
|
||||
msgstr "Matís"
|
||||
|
||||
# és el títol d'un quadre de diàleg. eac
|
||||
#: ../../WINGs/wcolorpanel.c:3151
|
||||
msgid "Open Palette"
|
||||
msgstr "Obrir paleta"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3213
|
||||
msgid "Invalid file format !"
|
||||
msgstr "El format del fitxer no és vàlid !"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3215
|
||||
#, c-format
|
||||
msgid "can't remove file %s"
|
||||
msgstr "no s'ha pogut eliminar el fitxer \"%s\""
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3217
|
||||
msgid "Couldn't remove file from Configuration Directory !"
|
||||
msgstr "No s'ha pogut eliminar el fitxer del directori de configuració !"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3244
|
||||
msgid "Rename"
|
||||
msgstr "Reanomena"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3244
|
||||
msgid "Rename palette to:"
|
||||
msgstr "Reanomena la paleta com a:"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3245 ../../WINGs/wfilepanel.c:259
|
||||
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel·la"
|
||||
|
||||
#. Careful, this palette exists already
|
||||
#: ../../WINGs/wcolorpanel.c:3261 ../../WINGs/wfilepanel.c:763
|
||||
msgid "Warning"
|
||||
msgstr "Atenció"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3262
|
||||
msgid ""
|
||||
"Palette already exists !\n"
|
||||
"\n"
|
||||
"Overwrite ?"
|
||||
msgstr ""
|
||||
"Ja existia una paleta amb aquest nom!\n"
|
||||
"\n"
|
||||
"La voleu sobreescriure?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
|
||||
msgid "Yes"
|
||||
msgstr "Sí"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3294
|
||||
#, c-format
|
||||
msgid "Couldn't rename palette %s to %s\n"
|
||||
msgstr "No s'ha pogut reanomenar la paleta %s com a %s\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3320
|
||||
msgid "This will permanently remove the palette "
|
||||
msgstr "Això eliminarà la paleta per sempre "
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3323
|
||||
msgid ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Are you sure you want to remove this palette ?"
|
||||
msgstr ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Esteu segurs que voleu eliminar aquesta paleta?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3348
|
||||
#, c-format
|
||||
msgid "Couldn't remove palette %s\n"
|
||||
msgstr "No s'ha pogut eliminar la paleta %s\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3647
|
||||
#, c-format
|
||||
msgid "Could not open %s"
|
||||
msgstr "No s'ha pogut obrir %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3654
|
||||
#, c-format
|
||||
msgid "Could not create %s"
|
||||
msgstr "No s'ha pogut crear %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3665
|
||||
#, c-format
|
||||
msgid "Write error on file %s"
|
||||
msgstr "Error d'escriptura en el fitxer %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3710
|
||||
msgid "Color Panel: Color unspecified"
|
||||
msgstr "Panell de color: Color no especificat"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:235
|
||||
msgid "Name:"
|
||||
msgstr "Nom:"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:332 ../../WINGs/wfilepanel.c:396
|
||||
msgid "Open"
|
||||
msgstr "Obre"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:350 ../../WINGs/wfilepanel.c:402
|
||||
msgid "Save"
|
||||
msgstr "Desa"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:565
|
||||
#, c-format
|
||||
msgid "WINGs: could not open directory %s\n"
|
||||
msgstr "WINGs: no s'ha pogut obrir el directori %s\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:583
|
||||
#, c-format
|
||||
msgid "WINGs: could not stat %s\n"
|
||||
msgstr "WINGs: no s'ha pogut determinar l'estat de %s\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:650 ../../WINGs/wfilepanel.c:973
|
||||
#: ../../WINGs/wfontpanel.c:750
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
# és el nom d'un quadre de diàleg. eac
|
||||
#: ../../WINGs/wfilepanel.c:661
|
||||
msgid "Create Directory"
|
||||
msgstr "Crear directori"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:662
|
||||
msgid "Enter directory name"
|
||||
msgstr "Entreu el nom del directori"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:698 ../../WINGs/wfilepanel.c:737
|
||||
#: ../../WINGs/wfilepanel.c:768 ../../WINGs/wfilepanel.c:796
|
||||
msgid "Permission denied."
|
||||
msgstr "Permís denegat."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:701
|
||||
#, c-format
|
||||
msgid "'%s' already exists."
|
||||
msgstr "\"%s\" existia prèviament."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:704
|
||||
msgid "Path does not exist."
|
||||
msgstr "L'ubicació no existeix."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:734 ../../WINGs/wfilepanel.c:793
|
||||
#, c-format
|
||||
msgid "'%s' does not exist."
|
||||
msgstr "\"%s\" no existeix."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:741 ../../WINGs/wfilepanel.c:800
|
||||
msgid "Insufficient memory available."
|
||||
msgstr "No hi ha prou memòria disponible."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:804
|
||||
#, c-format
|
||||
msgid "'%s' is on a read-only filesystem."
|
||||
msgstr "\"%s\" es troba en un sistema de fitxers de només lectura."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:748 ../../WINGs/wfilepanel.c:780
|
||||
#: ../../WINGs/wfilepanel.c:807
|
||||
#, c-format
|
||||
msgid "Can not delete '%s'."
|
||||
msgstr "No s'ha pogut eliminar \"%s\"."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:755
|
||||
#, c-format
|
||||
msgid "Delete directory %s ?"
|
||||
msgstr "Voleu eliminar el directori %s ?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:759
|
||||
#, c-format
|
||||
msgid "Delete file %s ?"
|
||||
msgstr "Voleu eliminar el fitxer %s ?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:771
|
||||
#, c-format
|
||||
msgid "Directory '%s' does not exist."
|
||||
msgstr "El directori \"%s\" no existeix."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:774
|
||||
#, c-format
|
||||
msgid "Directory '%s' is not empty."
|
||||
msgstr "El directori \"%s\" no està buit."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:777
|
||||
#, c-format
|
||||
msgid "Directory '%s' is busy."
|
||||
msgstr "El directori \"%s\" es troba ocupat."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:790
|
||||
#, c-format
|
||||
msgid "'%s' is a directory."
|
||||
msgstr "\"%s\" és un directori."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:832
|
||||
#, c-format
|
||||
msgid "An error occured browsing '%s'."
|
||||
msgstr "S'ha produït un error mentre s'explorava \"%s\"."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:836
|
||||
#, c-format
|
||||
msgid "'%s' is not a directory."
|
||||
msgstr "\"%s\" no és un directori."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:973
|
||||
msgid "File does not exist."
|
||||
msgstr "El fitxer no existeix."
|
||||
|
||||
#: ../../WINGs/wfont.c:324 ../../WINGs/wfont.c:344
|
||||
#, c-format
|
||||
msgid "could not load font %s."
|
||||
msgstr "no s'ha pogut carregar el tipus de lletra %s."
|
||||
|
||||
#: ../../WINGs/wfont.c:375 ../../WINGs/wfont.c:420 ../../WINGs/wfont.c:475
|
||||
#: ../../WINGs/wfont.c:1337 ../../WINGs/wfont.c:1398 ../../WINGs/wfont.c:1469
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Conversion to widechar failed (possible invalid multibyte sequence): '%s':"
|
||||
"(pos %d)\n"
|
||||
msgstr ""
|
||||
"Ha fallat la conversió a caràcter estès (possible seqüència no vàlida): '%"
|
||||
"s': (pos %d)\n"
|
||||
|
||||
#. // remove warning later. or maybe not
|
||||
#: ../../WINGs/wfont.c:591 ../../WINGs/wfont.c:1568
|
||||
#, c-format
|
||||
msgid "Invalid font specification: '%s'\n"
|
||||
msgstr "Especificació de font no vàlida: \"%s\"\n"
|
||||
|
||||
#: ../../WINGs/wfont.c:770 ../../WINGs/wfont.c:780
|
||||
#, c-format
|
||||
msgid "Invalid size specification '%s' in %s. Using default %d\n"
|
||||
msgstr ""
|
||||
"La mida \"%s\" especificada a %s no és vàlida. S'usa el valor per omissió %"
|
||||
"d\n"
|
||||
|
||||
#: ../../WINGs/wfont.c:824
|
||||
#, c-format
|
||||
msgid "the following character sets are missing in %s:"
|
||||
msgstr "els següents conjunts de caràcters falten a %s:"
|
||||
|
||||
#: ../../WINGs/wfont.c:830
|
||||
#, c-format
|
||||
msgid ""
|
||||
"the string \"%s\" will be used in place of any characters from those sets."
|
||||
msgstr ""
|
||||
"la cadena \"%s\" s'usarà en lloc dels caràcters d'aquests conjunts de "
|
||||
"caràcters."
|
||||
|
||||
#. is arial a good fallback for multibyte?
|
||||
#: ../../WINGs/wfont.c:1232 ../../WINGs/wfont.c:1247
|
||||
#, c-format
|
||||
msgid "could not load font %s. Trying arial."
|
||||
msgstr "no s'ha pogut carregar el tipus de lletra %s. Provant amb \"arial\"."
|
||||
|
||||
#: ../../WINGs/wfont.c:1239
|
||||
msgid "could not load antialiased font set. Reverting to standard font sets."
|
||||
msgstr ""
|
||||
"no s'ha pogut carregar el conjunt de fonts amb allisat. S'usarà l'estàndard."
|
||||
|
||||
#: ../../WINGs/wfont.c:1242
|
||||
#, c-format
|
||||
msgid "could not load FontSet %s. Trying fixed."
|
||||
msgstr "no s'ha pogut carregar el tipus de lletra %s. Provant amb \"fixed\"."
|
||||
|
||||
#: ../../WINGs/wfont.c:1254
|
||||
msgid "could not load antialiased fonts. Reverting to normal fonts."
|
||||
msgstr "no s'han pogut carregar fonts allisades. S'usaran fonts normals."
|
||||
|
||||
#: ../../WINGs/wfont.c:1257 ../../WINGs/wfont.c:1268
|
||||
#, c-format
|
||||
msgid "could not load font %s. Trying fixed."
|
||||
msgstr "no s'ha pogut carregar la font %s. Provant amb \"fixed\"."
|
||||
|
||||
#: ../../WINGs/wfont.c:1262
|
||||
#, c-format
|
||||
msgid "could not load font set %s. Trying fixed."
|
||||
msgstr "no s'ha pogut carregar el conjunt de fonts %s. Provant amb \"fixed\"."
|
||||
|
||||
#: ../../WINGs/wfont.c:1272
|
||||
msgid "could not load fixed font!"
|
||||
msgstr "no s'ha pogut carregar el tipus de lletra \"fixed\" !"
|
||||
|
||||
#: ../../WINGs/wfont.c:1520
|
||||
#, c-format
|
||||
msgid "font description %s is too large."
|
||||
msgstr "la descripció de tipus de lletra %s és massa gran."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:235
|
||||
msgid "Test!!!"
|
||||
msgstr "Prova!!!"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:241
|
||||
msgid "Family"
|
||||
msgstr "Familia"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:252
|
||||
msgid "Typeface"
|
||||
msgstr "Fosa"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:263
|
||||
msgid "Size"
|
||||
msgstr "Mida"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:282
|
||||
msgid "Set"
|
||||
msgstr "Conjunt"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:288
|
||||
msgid "Revert"
|
||||
msgstr "Torna"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:751
|
||||
msgid "Could not retrieve font list"
|
||||
msgstr "No s'ha pogut obtenir la llista de tipus de lletra"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:765
|
||||
#, c-format
|
||||
msgid "font name %s is longer than 256, which is invalid."
|
||||
msgstr ""
|
||||
"el nom de tipus de lletra %s ocupa més de 256 caràcters, per tant no és "
|
||||
"vàlid."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:913
|
||||
msgid "Roman"
|
||||
msgstr "Romana"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:916
|
||||
msgid "Italic"
|
||||
msgstr "Itàlica"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:918
|
||||
msgid "Oblique"
|
||||
msgstr "Obliqua"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:920
|
||||
msgid "Rev Italic"
|
||||
msgstr "Itàlica inv"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:922
|
||||
msgid "Rev Oblique"
|
||||
msgstr "Obliqua inv"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:928
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../../WINGs/widgets.c:419
|
||||
#, c-format
|
||||
msgid "WINGs: could not load widget images file: %s"
|
||||
msgstr "WINGs: no s'ha pogut carregar el fitxer d'imatges: %s"
|
||||
|
||||
#: ../../WINGs/widgets.c:772
|
||||
msgid ""
|
||||
"could not load any fonts. Make sure your font installation and locale "
|
||||
"settings are correct."
|
||||
msgstr ""
|
||||
"no s'ha pogut carregar cap font. Assegureu-vos que heu instal·lat i "
|
||||
"configurat correctament les fonts i el local."
|
||||
|
||||
#: ../../WINGs/wruler.c:192
|
||||
msgid "0 inches"
|
||||
msgstr "0 polzades"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Text antialiasing is enabled in the configuration but the X server "
|
||||
#~ "doesn't have the required capabilities (missing RENDER extension). "
|
||||
#~ "Disabling text antialiasing."
|
||||
#~ msgstr ""
|
||||
#~ "L'allisat de text està habilitat a la configuració però el servidor X no\n"
|
||||
#~ "té la capacitat necessària (falta l'extensió RENDER) de manera que "
|
||||
#~ "l'allisat\n"
|
||||
#~ "de text es deshabilitarà."
|
||||
230
WINGs/po/cs.po
230
WINGs/po/cs.po
@@ -1,66 +1,66 @@
|
||||
# Czech messages for WINGs
|
||||
# (C) 2001 Jiøí Hnídek
|
||||
# (C) 2001 Jiří Hnídek
|
||||
# Special thanks to Jan "judas" Tomka
|
||||
#
|
||||
# Original translation by Jiøí Hnídek on Oct 11 2001
|
||||
# Currently maintained by Jiøí Hnídek <jiri.hnidek@vslib.cz>
|
||||
# Original translation by Jiří Hnídek on Oct 11 2001
|
||||
# Currently maintained by Jiří Hnídek <jiri.hnidek@vslib.cz>
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WINGs 0.70.0\n"
|
||||
"POT-Creation-Date: 2001-10-11 19:10+0100\n"
|
||||
"PO-Revision-Date: 2001-10-11 22:00+0100\n"
|
||||
"Last-Translator: Jiøí Hnídek <jiri.hnidek@vslib.cz>\n"
|
||||
"Last-Translator: Jiří Hnídek <jiri.hnidek@vslib.cz>\n"
|
||||
"Language-Team: Czech <cz@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-2\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: unknown\n"
|
||||
|
||||
#: ../../WINGs/connection.c:451 ../../WINGs/connection.c:516
|
||||
#: ../../WINGs/connection.c:559
|
||||
msgid "Bad address-service-protocol combination"
|
||||
msgstr "Nesprávná kombinace adresa-slu¾ba-protokol"
|
||||
msgstr "Nesprávná kombinace adresa-služba-protokol"
|
||||
|
||||
#: ../../WINGs/dragsource.c:541
|
||||
msgid "DND selection lost during drag operation..."
|
||||
msgstr "DND výbìr se ztratil bìhem opere táhnutí..."
|
||||
msgstr "DND výběr se ztratil během opere táhnutí..."
|
||||
|
||||
#: ../../WINGs/dragsource.c:610
|
||||
#, c-format
|
||||
msgid "drag & drop timed out while waiting for response from 0x%x\n"
|
||||
msgstr "èas pro drag & drop vypr¹el bìhem èekání na odpoveï z 0x%x\n"
|
||||
msgstr "čas pro drag & drop vypršel během čekání na odpoveď z 0x%x\n"
|
||||
|
||||
#: ../../WINGs/dragsource.c:728
|
||||
msgid "could not get ownership or DND selection"
|
||||
msgstr "nemo¾né získat vlastnictví nebo DND výbìr"
|
||||
msgstr "nemožné získat vlastnictví nebo DND výběr"
|
||||
|
||||
#: ../../WINGs/dragsource.c:898
|
||||
#, c-format
|
||||
msgid "drag source received unexpected XdndFinished message from %x"
|
||||
msgstr "zdroj tahání pøijal neoèekávanou zprávu XdndFinished z %x"
|
||||
msgstr "zdroj tahání přijal neočekávanou zprávu XdndFinished z %x"
|
||||
|
||||
#: ../../WINGs/dragsource.c:1040
|
||||
#, c-format
|
||||
msgid "unknown XDND action %s from 0x%x"
|
||||
msgstr "neznámá XDND akce %s z 0x%x"
|
||||
msgstr "neznámá XDND akce %s z 0x%x"
|
||||
|
||||
#: ../../WINGs/dragsource.c:1073
|
||||
msgid "received invalid drag & drop type list"
|
||||
msgstr "pøijatý nesprávný seznam typù drag & drop"
|
||||
msgstr "přijatý nesprávný seznam typů drag & drop"
|
||||
|
||||
#: ../../WINGs/dragsource.c:1161
|
||||
msgid "received Enter event in bad order"
|
||||
msgstr "pøijatá událost Enter v nesprávném poøadí"
|
||||
msgstr "přijatá událost Enter v nesprávném pořadí"
|
||||
|
||||
#: ../../WINGs/dragsource.c:1168
|
||||
#, c-format
|
||||
msgid "received drag & drop request with unsupported version %i"
|
||||
msgstr "pøijatý po¾adavek drag & drop s nepodporovanou verzí %i"
|
||||
msgstr "přijatý požadavek drag & drop s nepodporovanou verzí %i"
|
||||
|
||||
#: ../../WINGs/error.c:56
|
||||
#, c-format
|
||||
msgid "Unknown error %d"
|
||||
msgstr "Neznámá chyba %d"
|
||||
msgstr "Neznámá chyba %d"
|
||||
|
||||
#: ../../WINGs/error.c:61
|
||||
#, c-format
|
||||
@@ -69,11 +69,11 @@ msgstr "Chyba %d"
|
||||
|
||||
#: ../../WINGs/error.c:112
|
||||
msgid " warning: "
|
||||
msgstr " varovíní: "
|
||||
msgstr " varovíní: "
|
||||
|
||||
#: ../../WINGs/error.c:139
|
||||
msgid " fatal error: "
|
||||
msgstr " fatální chyba: "
|
||||
msgstr " fatální chyba: "
|
||||
|
||||
#: ../../WINGs/error.c:165 ../../WINGs/error.c:194
|
||||
msgid " error: "
|
||||
@@ -82,76 +82,76 @@ msgstr " chyba: "
|
||||
#: ../../WINGs/findfile.c:50
|
||||
#, c-format
|
||||
msgid "could not get password entry for UID %i"
|
||||
msgstr "nemo¾né zjistit informaci o UID %i"
|
||||
msgstr "nemožné zjistit informaci o UID %i"
|
||||
|
||||
#: ../../WINGs/findfile.c:68
|
||||
#, c-format
|
||||
msgid "could not get password entry for user %s"
|
||||
msgstr "nemo¾né zjistit informaci o u¾ivatelovi %s"
|
||||
msgstr "nemožné zjistit informaci o uživatelovi %s"
|
||||
|
||||
#: ../../WINGs/hashtable.c:275
|
||||
msgid "rebuilding hash table...\n"
|
||||
msgstr "pøepis tabulky hashovských funkcí...\n"
|
||||
msgstr "přepis tabulky hashovských funkcí...\n"
|
||||
|
||||
#: ../../WINGs/hashtable.c:279
|
||||
msgid "finished rebuild.\n"
|
||||
msgstr "konec pøepisu.\n"
|
||||
msgstr "konec přepisu.\n"
|
||||
|
||||
#: ../../WINGs/host.c:116
|
||||
msgid "Cannot get current host name"
|
||||
msgstr "Nemo¾né zjistit aktuální jméno poèítaèe"
|
||||
msgstr "Nemožné zjistit aktuální jméno počítače"
|
||||
|
||||
#: ../../WINGs/memory.c:94
|
||||
msgid "malloc() failed. Retrying after 2s."
|
||||
msgstr "chyba malloc(). Nový pokus o 2s."
|
||||
msgstr "chyba malloc(). Nový pokus o 2s."
|
||||
|
||||
#: ../../WINGs/memory.c:103
|
||||
msgid "Really Bad Error: recursive malloc() failure."
|
||||
msgstr "Skuteènì o¹klivá chyba: rekurzivní chyba malloc()."
|
||||
msgstr "Skutečně ošklivá chyba: rekurzivní chyba malloc()."
|
||||
|
||||
#: ../../WINGs/memory.c:106 ../../WINGs/memory.c:146
|
||||
msgid "virtual memory exhausted"
|
||||
msgstr "virtuální pamì» vyèerpaná"
|
||||
msgstr "virtuální paměť vyčerpaná"
|
||||
|
||||
#: ../../WINGs/memory.c:133
|
||||
msgid "realloc() failed. Retrying after 2s."
|
||||
msgstr "chyba realloc(). Nový pokus o 2s."
|
||||
msgstr "chyba realloc(). Nový pokus o 2s."
|
||||
|
||||
#: ../../WINGs/memory.c:142
|
||||
msgid "Really Bad Error: recursive realloc() failure."
|
||||
msgstr "Skuteènì o¹klivá chyba: rekurzivní chyba realloc()."
|
||||
msgstr "Skutečně ošklivá chyba: rekurzivní chyba realloc()."
|
||||
|
||||
#: ../../WINGs/memory.c:205
|
||||
#, c-format
|
||||
msgid "trying to release unexisting data %p"
|
||||
msgstr "pokus uvolnit neexistujícá data %p"
|
||||
msgstr "pokus uvolnit neexistujícá data %p"
|
||||
|
||||
#: ../../WINGs/memory.c:210
|
||||
#, c-format
|
||||
msgid "RELEASING %p\n"
|
||||
msgstr "UVOLNÌNÍ %p\n"
|
||||
msgstr "UVOLNĚNÍ %p\n"
|
||||
|
||||
#: ../../WINGs/wcolor.c:198 ../../WINGs/wcolor.c:211 ../../WINGs/wcolor.c:250
|
||||
#: ../../WINGs/wcolor.c:291
|
||||
#, c-format
|
||||
msgid "could not allocate %s color"
|
||||
msgstr "nemo¾né alokovat %s barvu"
|
||||
msgstr "nemožné alokovat %s barvu"
|
||||
|
||||
#: ../../WINGs/wcolor.c:198
|
||||
msgid "white"
|
||||
msgstr "bílou"
|
||||
msgstr "bílou"
|
||||
|
||||
#: ../../WINGs/wcolor.c:211
|
||||
msgid "black"
|
||||
msgstr "èernou"
|
||||
msgstr "černou"
|
||||
|
||||
#: ../../WINGs/wcolor.c:250
|
||||
msgid "gray"
|
||||
msgstr "¹edou"
|
||||
msgstr "šedou"
|
||||
|
||||
#: ../../WINGs/wcolor.c:291
|
||||
msgid "dark gray"
|
||||
msgstr "tmavì ¹edou"
|
||||
msgstr "tmavě šedou"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:410
|
||||
msgid "Colors"
|
||||
@@ -159,7 +159,7 @@ msgstr "Barvy"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:600 ../../WINGs/wcolorpanel.c:2819
|
||||
msgid "Brightness"
|
||||
msgstr "Svìtlost"
|
||||
msgstr "Světlost"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:602 ../../WINGs/wcolorpanel.c:678
|
||||
#: ../../WINGs/wcolorpanel.c:711 ../../WINGs/wcolorpanel.c:745
|
||||
@@ -169,19 +169,19 @@ msgstr "Sv
|
||||
#: ../../WINGs/wcolorpanel.c:2857 ../../WINGs/wcolorpanel.c:2893
|
||||
#: ../../WINGs/wcolorpanel.c:3741
|
||||
msgid "Color Panel: Could not allocate memory"
|
||||
msgstr "Panel barev: Nemo¾né alokovat pamì»"
|
||||
msgstr "Panel barev: Nemožné alokovat paměť"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:675 ../../WINGs/wcolorpanel.c:676
|
||||
msgid "Red"
|
||||
msgstr "Èervená"
|
||||
msgstr "Červená"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:708 ../../WINGs/wcolorpanel.c:709
|
||||
msgid "Green"
|
||||
msgstr "Zelená"
|
||||
msgstr "Zelená"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:742 ../../WINGs/wcolorpanel.c:743
|
||||
msgid "Blue"
|
||||
msgstr "Modrá"
|
||||
msgstr "Modrá"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:802 ../../WINGs/wcolorpanel.c:803
|
||||
msgid "Cyan"
|
||||
@@ -193,11 +193,11 @@ msgstr ""
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:870 ../../WINGs/wcolorpanel.c:871
|
||||
msgid "Yellow"
|
||||
msgstr "®lutá"
|
||||
msgstr "Žlutá"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:905 ../../WINGs/wcolorpanel.c:906
|
||||
msgid "Black"
|
||||
msgstr "Èerná"
|
||||
msgstr "Černá"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:986
|
||||
msgid "Spectrum"
|
||||
@@ -209,12 +209,12 @@ msgstr "Paleta"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1022
|
||||
msgid "New from File..."
|
||||
msgstr "Nová ze souboru..."
|
||||
msgstr "Nová ze souboru..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1023 ../../WINGs/wcolorpanel.c:1071
|
||||
#: ../../WINGs/wcolorpanel.c:1088
|
||||
msgid "Rename..."
|
||||
msgstr "Pøejmenovat..."
|
||||
msgstr "Přejmenovat..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1024 ../../WINGs/wcolorpanel.c:1072
|
||||
#: ../../WINGs/wcolorpanel.c:1089 ../../WINGs/wcolorpanel.c:3316
|
||||
@@ -223,11 +223,11 @@ msgstr "Odstranit"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1025
|
||||
msgid "Copy"
|
||||
msgstr "Kopírovat"
|
||||
msgstr "Kopírovat"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1026
|
||||
msgid "New from Clipboard"
|
||||
msgstr "Nová ze schránky"
|
||||
msgstr "Nová ze schránky"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1047
|
||||
msgid "X11-Colors"
|
||||
@@ -239,7 +239,7 @@ msgstr "Barva"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1070
|
||||
msgid "Add..."
|
||||
msgstr "Pøidat..."
|
||||
msgstr "Přidat..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1080
|
||||
msgid "List"
|
||||
@@ -247,14 +247,14 @@ msgstr "Seznam"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1087
|
||||
msgid "New..."
|
||||
msgstr "Nový..."
|
||||
msgstr "Nový..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1226
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Color Panel: Could not create directory %s needed to store configurations"
|
||||
msgstr ""
|
||||
"Panel barev: Nemo¾né vytvoøit adresáø %s potøebný k ulo¾ení nastavení"
|
||||
"Panel barev: Nemožné vytvořit adresář %s potřebný k uložení nastavení"
|
||||
|
||||
#. Delete the file, it doesn't belong here
|
||||
#: ../../WINGs/wcolorpanel.c:1232 ../../WINGs/wcolorpanel.c:3202
|
||||
@@ -264,7 +264,7 @@ msgstr "Chyba souboru"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1233
|
||||
msgid "Could not create ColorPanel configuration directory"
|
||||
msgstr "Nemo¾né vytvoøit konfiguraèní adresáø panelu barev"
|
||||
msgstr "Nemožné vytvořit konfigurační adresář panelu barev"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1234 ../../WINGs/wcolorpanel.c:3203
|
||||
#: ../../WINGs/wcolorpanel.c:3208 ../../WINGs/wcolorpanel.c:3235
|
||||
@@ -277,12 +277,12 @@ msgstr "OK"
|
||||
#: ../../WINGs/wcolorpanel.c:1240 ../../WINGs/wcolorpanel.c:1276
|
||||
#: ../../WINGs/wcolorpanel.c:1294
|
||||
msgid "Color Panel: Could not find file"
|
||||
msgstr "Panel barev: Nemo¾né nalézt soubor"
|
||||
msgstr "Panel barev: Nemožné nalézt soubor"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1481 ../../WINGs/wcolorpanel.c:1546
|
||||
#: ../../WINGs/wcolorpanel.c:1610
|
||||
msgid "Color Panel: X failed request"
|
||||
msgstr "Panel barev: chyba po¾adavku X"
|
||||
msgstr "Panel barev: chyba požadavku X"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2855
|
||||
msgid "Saturation"
|
||||
@@ -290,42 +290,42 @@ msgstr "Saturace"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2891
|
||||
msgid "Hue"
|
||||
msgstr "Odteï"
|
||||
msgstr "Odteď"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3141
|
||||
msgid "Open Palette"
|
||||
msgstr "Otevøít paletu"
|
||||
msgstr "Otevřít paletu"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3203
|
||||
msgid "Invalid file format !"
|
||||
msgstr "Nesprávný souborový formát!"
|
||||
msgstr "Nesprávný souborový formát!"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3205
|
||||
#, c-format
|
||||
msgid "can't remove file %s"
|
||||
msgstr "nemo¾né odstranit soubor %s"
|
||||
msgstr "nemožné odstranit soubor %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3207
|
||||
msgid "Couldn't remove file from Configuration Directory !"
|
||||
msgstr "Nemo¾né odstranit soubor z konfiguraèního adresáøe!"
|
||||
msgstr "Nemožné odstranit soubor z konfiguračního adresáře!"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3234
|
||||
msgid "Rename"
|
||||
msgstr "Pøejmenovat"
|
||||
msgstr "Přejmenovat"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3234
|
||||
msgid "Rename palette to:"
|
||||
msgstr "Pøejmenovat paletu:"
|
||||
msgstr "Přejmenovat paletu:"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3235 ../../WINGs/wfilepanel.c:252
|
||||
#: ../../WINGs/wfilepanel.c:653 ../../WINGs/wfilepanel.c:752
|
||||
msgid "Cancel"
|
||||
msgstr "Zru¹it"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#. Careful, this palette exists already
|
||||
#: ../../WINGs/wcolorpanel.c:3251 ../../WINGs/wfilepanel.c:752
|
||||
msgid "Warning"
|
||||
msgstr "Varování"
|
||||
msgstr "Varování"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3252
|
||||
msgid ""
|
||||
@@ -333,9 +333,9 @@ msgid ""
|
||||
"\n"
|
||||
"Overwrite ?"
|
||||
msgstr ""
|
||||
"Paleta u¾ existuje!\n"
|
||||
"Paleta už existuje!\n"
|
||||
"\n"
|
||||
"Pøepsat?"
|
||||
"Přepsat?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3252 ../../WINGs/wcolorpanel.c:3316
|
||||
msgid "No"
|
||||
@@ -348,11 +348,11 @@ msgstr "Ano"
|
||||
#: ../../WINGs/wcolorpanel.c:3284
|
||||
#, c-format
|
||||
msgid "Couldn't rename palette %s to %s\n"
|
||||
msgstr "Nemo¾né pøejmenovat paletu %s na %s\n"
|
||||
msgstr "Nemožné přejmenovat paletu %s na %s\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3310
|
||||
msgid "This will permanently remove the palette "
|
||||
msgstr "Paleta bude natrvalo smazaná"
|
||||
msgstr "Paleta bude natrvalo smazaná"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3313
|
||||
msgid ""
|
||||
@@ -362,53 +362,53 @@ msgid ""
|
||||
msgstr ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Jste si jisti, ¾e chcete odstranit tuto paletu?"
|
||||
"Jste si jisti, že chcete odstranit tuto paletu?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3338
|
||||
#, c-format
|
||||
msgid "Couldn't remove palette %s\n"
|
||||
msgstr "Nemo¾né odstranit paletu %s\n"
|
||||
msgstr "Nemožné odstranit paletu %s\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3643
|
||||
#, c-format
|
||||
msgid "Could not open %s"
|
||||
msgstr "Nemo¾né otevøít %s"
|
||||
msgstr "Nemožné otevřít %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3650
|
||||
#, c-format
|
||||
msgid "Could not create %s"
|
||||
msgstr "Nemo¾né vytvoøit %s"
|
||||
msgstr "Nemožné vytvořit %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3661
|
||||
#, c-format
|
||||
msgid "Write error on file %s"
|
||||
msgstr "Chyba pøi zápisu do souboru %s"
|
||||
msgstr "Chyba při zápisu do souboru %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3706
|
||||
msgid "Color Panel: Color unspecified"
|
||||
msgstr "Panel barev: Nespecifikovaná barva"
|
||||
msgstr "Panel barev: Nespecifikovaná barva"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:228
|
||||
msgid "Name:"
|
||||
msgstr "Jméno:"
|
||||
msgstr "Jméno:"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:325 ../../WINGs/wfilepanel.c:390
|
||||
msgid "Open"
|
||||
msgstr "Otevøít"
|
||||
msgstr "Otevřít"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:343 ../../WINGs/wfilepanel.c:396
|
||||
msgid "Save"
|
||||
msgstr "Ulo¾it"
|
||||
msgstr "Uložit"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:556
|
||||
#, c-format
|
||||
msgid "WINGs: could not open directory %s\n"
|
||||
msgstr "WINGs: nemo¾né otevøít adresáø %s\n"
|
||||
msgstr "WINGs: nemožné otevřít adresář %s\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:574
|
||||
#, c-format
|
||||
msgid "WINGs: could not stat %s\n"
|
||||
msgstr "WINGs: nemo¾né zjistit informace o %s\n"
|
||||
msgstr "WINGs: nemožné zjistit informace o %s\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:641 ../../WINGs/wfilepanel.c:962
|
||||
#: ../../WINGs/wfontpanel.c:716
|
||||
@@ -417,21 +417,21 @@ msgstr "Chyba"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:652
|
||||
msgid "Create Directory"
|
||||
msgstr "Vytvoøit adresáø"
|
||||
msgstr "Vytvořit adresář"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:653
|
||||
msgid "Enter directory name"
|
||||
msgstr "Jméno adresáøe"
|
||||
msgstr "Jméno adresáře"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:689 ../../WINGs/wfilepanel.c:728
|
||||
#: ../../WINGs/wfilepanel.c:757 ../../WINGs/wfilepanel.c:785
|
||||
msgid "Permission denied."
|
||||
msgstr "Pøístup odmítnut."
|
||||
msgstr "Přístup odmítnut."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:692
|
||||
#, c-format
|
||||
msgid "'%s' already exists."
|
||||
msgstr "'%s' u¾ existuje"
|
||||
msgstr "'%s' už existuje"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:695
|
||||
msgid "Path does not exist."
|
||||
@@ -444,23 +444,23 @@ msgstr "'%s' neexistuje."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:732 ../../WINGs/wfilepanel.c:789
|
||||
msgid "Insufficient memory available."
|
||||
msgstr "Nedostatek pamìti."
|
||||
msgstr "Nedostatek paměti."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:736 ../../WINGs/wfilepanel.c:793
|
||||
#, c-format
|
||||
msgid "'%s' is on a read-only filesystem."
|
||||
msgstr "'%s' je na souborovém systému jen pro ètení."
|
||||
msgstr "'%s' je na souborovém systému jen pro čtení."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:739 ../../WINGs/wfilepanel.c:769
|
||||
#: ../../WINGs/wfilepanel.c:796
|
||||
#, c-format
|
||||
msgid "Can not delete '%s'."
|
||||
msgstr "Nemo¾né odstranit '%s'."
|
||||
msgstr "Nemožné odstranit '%s'."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:745
|
||||
#, c-format
|
||||
msgid "Delete directory %s ?"
|
||||
msgstr "Odstranit adresáø %s?"
|
||||
msgstr "Odstranit adresář %s?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:748
|
||||
#, c-format
|
||||
@@ -470,32 +470,32 @@ msgstr "Odstranit soubor %s?"
|
||||
#: ../../WINGs/wfilepanel.c:760
|
||||
#, c-format
|
||||
msgid "Directory '%s' does not exist."
|
||||
msgstr "Adresáø '%s' neexistuje."
|
||||
msgstr "Adresář '%s' neexistuje."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:763
|
||||
#, c-format
|
||||
msgid "Directory '%s' is not empty."
|
||||
msgstr "Adresáø '%s' není prázdný."
|
||||
msgstr "Adresář '%s' není prázdný."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:766
|
||||
#, c-format
|
||||
msgid "Directory '%s' is busy."
|
||||
msgstr "Adresáø '%s' je pou¾ívaný."
|
||||
msgstr "Adresář '%s' je používaný."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:779
|
||||
#, c-format
|
||||
msgid "'%s' is a directory."
|
||||
msgstr "'%s' je adresáø."
|
||||
msgstr "'%s' je adresář."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:821
|
||||
#, c-format
|
||||
msgid "An error occured browsing '%s'."
|
||||
msgstr "Pøi prohlí¾ení '%s' nastala chyba."
|
||||
msgstr "Při prohlížení '%s' nastala chyba."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:825
|
||||
#, c-format
|
||||
msgid "'%s' is not a directory."
|
||||
msgstr "'%s' není adresáø."
|
||||
msgstr "'%s' není adresář."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:962
|
||||
msgid "File does not exist."
|
||||
@@ -504,37 +504,37 @@ msgstr "Soubor neexistuje."
|
||||
#: ../../WINGs/wfont.c:129
|
||||
#, c-format
|
||||
msgid "the following character sets are missing in %s:"
|
||||
msgstr "nasledující sady znakù chybí v %s:"
|
||||
msgstr "nasledující sady znaků chybí v %s:"
|
||||
|
||||
#: ../../WINGs/wfont.c:136
|
||||
#, c-format
|
||||
msgid ""
|
||||
"the string \"%s\" will be used in place of any characters from those sets."
|
||||
msgstr ""
|
||||
"øetìzec \"%s\" bude pou¾itý namísto znakù z tìchto sad."
|
||||
"řetězec \"%s\" bude použitý namísto znaků z těchto sad."
|
||||
|
||||
#: ../../WINGs/wfont.c:282 ../../WINGs/wfont.c:318
|
||||
#, c-format
|
||||
msgid "could not load font set %s. Trying fixed."
|
||||
msgstr "nemo¾né naèíst font %s. Zkou¹í se naèíst fixed."
|
||||
msgstr "nemožné načíst font %s. Zkouší se načíst fixed."
|
||||
|
||||
#: ../../WINGs/wfont.c:288 ../../WINGs/wfont.c:324
|
||||
#, c-format
|
||||
msgid "could not load font %s. Trying fixed."
|
||||
msgstr "nemo¾no naèíst font %s. Zko¹í se naèíst fixed."
|
||||
msgstr "nemožno načíst font %s. Zkoší se načíst fixed."
|
||||
|
||||
#: ../../WINGs/wfont.c:292 ../../WINGs/wfont.c:328
|
||||
msgid "could not load fixed font!"
|
||||
msgstr "nemo¾né naèíst font fixed!"
|
||||
msgstr "nemožné načíst font fixed!"
|
||||
|
||||
#: ../../WINGs/wfont.c:423
|
||||
#, c-format
|
||||
msgid "font description %s is too large."
|
||||
msgstr "popis fontu %s je pøíli¹ velký."
|
||||
msgstr "popis fontu %s je příliš velký."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:205
|
||||
msgid "Test!!!"
|
||||
msgstr "Zkou¹ka!!!"
|
||||
msgstr "Zkouška!!!"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:211
|
||||
msgid "Family"
|
||||
@@ -554,16 +554,16 @@ msgstr "Sada"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:257
|
||||
msgid "Revert"
|
||||
msgstr "Zpìt"
|
||||
msgstr "Zpět"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:717
|
||||
msgid "Could not retrieve font list"
|
||||
msgstr "Nemo¾né obdr¾et seznam fontù"
|
||||
msgstr "Nemožné obdržet seznam fontů"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:729
|
||||
#, c-format
|
||||
msgid "font name %s is longer than 256, which is invalid."
|
||||
msgstr "jméno fontu %s je del¹í ne¾ 256, co¾ je ¹patnì."
|
||||
msgstr "jméno fontu %s je delší než 256, což je špatně."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:880
|
||||
msgid "Roman"
|
||||
@@ -587,37 +587,37 @@ msgstr ""
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:895
|
||||
msgid "Normal"
|
||||
msgstr "Normílní"
|
||||
msgstr "Normílní"
|
||||
|
||||
#: ../../WINGs/widgets.c:414
|
||||
#, c-format
|
||||
msgid "WINGs: could not load widget images file: %s"
|
||||
msgstr "WINGs: nemo¾né naèíst soubor s obrázky pro widgety: %s"
|
||||
msgstr "WINGs: nemožné načíst soubor s obrázky pro widgety: %s"
|
||||
|
||||
#: ../../WINGs/widgets.c:525
|
||||
#, c-format
|
||||
msgid "WINGs: could not open display %s"
|
||||
msgstr "WINGs: nemo¾né otevøít display %s"
|
||||
msgstr "WINGs: nemožné otevřít display %s"
|
||||
|
||||
#: ../../WINGs/widgets.c:717
|
||||
msgid ""
|
||||
"could not load any fonts. Make sure your font installationand locale "
|
||||
"settings are correct."
|
||||
msgstr ""
|
||||
"nemo¾né naèíst ¾ádný font. Ubezpeète se, ¾e instalace fontù a místního "
|
||||
"nastavení jsou v poøádku."
|
||||
"nemožné načíst žádný font. Ubezpečte se, že instalace fontů a místního "
|
||||
"nastavení jsou v pořádku."
|
||||
|
||||
#: ../../WINGs/wruler.c:189
|
||||
msgid "0 inches"
|
||||
msgstr "0 palcù"
|
||||
msgstr "0 palců"
|
||||
|
||||
#: ../../WINGs/wtext.c:1212
|
||||
msgid "...for this app will surely crash :-)\n"
|
||||
msgstr "...pro tuto aplikaci to urèitì spadne :-)\n"
|
||||
msgstr "...pro tuto aplikaci to určitě spadne :-)\n"
|
||||
|
||||
#: ../../WINGs/wtext.c:2084
|
||||
msgid "didn't get it\n"
|
||||
msgstr "nedosa¾eno\n"
|
||||
msgstr "nedosaženo\n"
|
||||
|
||||
#: ../../WINGs/wtext.c:2726
|
||||
#, c-format
|
||||
@@ -626,15 +626,15 @@ msgstr "typ je [%s]\n"
|
||||
|
||||
#: ../../WINGs/wtext.c:2797
|
||||
msgid "could not request data for dropped data"
|
||||
msgstr "nemohou být vy¾ádána data pro polo¾ená data"
|
||||
msgstr "nemohou být vyžádána data pro položená data"
|
||||
|
||||
#: ../../WINGs/wtext.c:2995
|
||||
msgid "could not create text's view\n"
|
||||
msgstr "nemo¾né zobrazit text\n"
|
||||
msgstr "nemožné zobrazit text\n"
|
||||
|
||||
#: ../../WINGs/wview.c:219
|
||||
msgid "trying to realize widget of unrealized parent"
|
||||
msgstr "snaha vytvoøit widget neexistujícího rodièe objektu"
|
||||
msgstr "snaha vytvořit widget neexistujícího rodiče objektu"
|
||||
|
||||
#: ../../WINGs/wview.c:267
|
||||
msgid "trying to reparent realized view to unrealized parent"
|
||||
@@ -642,22 +642,22 @@ msgstr ""
|
||||
|
||||
#: ../../WINGs/wtextfield.c:490
|
||||
msgid "only left alignment is supported in textfields"
|
||||
msgstr "pro textové pole je povolené jen levé zarovnání"
|
||||
msgstr "pro textové pole je povolené jen levé zarovnání"
|
||||
|
||||
#pozor, co je STRING?
|
||||
#: ../../WINGs/wwindow.c:222
|
||||
msgid "window title conversion error... using STRING encoding"
|
||||
msgstr "chyba konverze titulku okna... pou¾ije se kódovaní STRING"
|
||||
msgstr "chyba konverze titulku okna... použije se kódovaní STRING"
|
||||
|
||||
#: ../../WINGs/wwindow.c:313
|
||||
msgid "could not allocate memory for window size hints"
|
||||
msgstr "nemo¾né alokovat pamì» pro pokyny velikosti okna"
|
||||
msgstr "nemožné alokovat paměť pro pokyny velikosti okna"
|
||||
|
||||
#: ../../WINGs/wwindow.c:586
|
||||
msgid "could not allocate memory for WM hints"
|
||||
msgstr "nemo¾né alokovat pamì» pro pokyny WM"
|
||||
msgstr "nemožné alokovat paměť pro pokyny WM"
|
||||
|
||||
#: ../../WINGs/wwindow.c:627
|
||||
msgid "icon title conversion error..using STRING encoding"
|
||||
msgstr "chyba konverze titulku ikony... pou¾ije se kódovaní STRING"
|
||||
msgstr "chyba konverze titulku ikony... použije se kódovaní STRING"
|
||||
|
||||
|
||||
663
WINGs/po/de.po
Normal file
663
WINGs/po/de.po
Normal file
@@ -0,0 +1,663 @@
|
||||
# KTranslator Generated File
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Free Software Foundation, Inc.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WINGs 0.80.0\n"
|
||||
"POT-Creation-Date: 2002-01-09 21:06+0100\n"
|
||||
"PO-Revision-Date: 2002-01-09 21:20+0100\n"
|
||||
"Last-Translator: Guido Scholz <guido.scholz@bayernline.de>\n"
|
||||
"Language-Team: Deutsch <de@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: unknown\n"
|
||||
|
||||
#: ../../WINGs/connection.c:461 ../../WINGs/connection.c:526
|
||||
#: ../../WINGs/connection.c:569
|
||||
msgid "Bad address-service-protocol combination"
|
||||
msgstr "Ungültige Adress-Dienst-Protokoll Kombination"
|
||||
|
||||
#: ../../WINGs/error.c:54
|
||||
#, c-format
|
||||
msgid "Unknown error %d"
|
||||
msgstr "Unbekannter Fehler %d"
|
||||
|
||||
#: ../../WINGs/error.c:59
|
||||
#, c-format
|
||||
msgid "Error %d"
|
||||
msgstr "Fehler %d"
|
||||
|
||||
#: ../../WINGs/error.c:110
|
||||
msgid " warning: "
|
||||
msgstr " Warnung: "
|
||||
|
||||
#: ../../WINGs/error.c:137
|
||||
msgid " fatal error: "
|
||||
msgstr " fataler Fehler: "
|
||||
|
||||
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
|
||||
msgid " error: "
|
||||
msgstr " Fehler: "
|
||||
|
||||
#: ../../WINGs/findfile.c:48
|
||||
#, c-format
|
||||
msgid "could not get password entry for UID %i"
|
||||
msgstr "konnte Passwort nicht ermitteln für UID %i"
|
||||
|
||||
#: ../../WINGs/findfile.c:66
|
||||
#, c-format
|
||||
msgid "could not get password entry for user %s"
|
||||
msgstr "konnte Passwort nicht ermitteln für Benutzer %s"
|
||||
|
||||
#: ../../WINGs/host.c:114
|
||||
msgid "Cannot get current host name"
|
||||
msgstr "Kann aktuellen Hostnamen nicht ermitteln"
|
||||
|
||||
#: ../../WINGs/proplist.c:150
|
||||
msgid "Only string or data is supported for a proplist dictionary key"
|
||||
msgstr ""
|
||||
"Nur string oder data wird als Schlüssel für ein proplist dictionary "
|
||||
"unterstützt"
|
||||
|
||||
#: ../../WINGs/proplist.c:184 ../../WINGs/proplist.c:236
|
||||
#: ../../WINGs/proplist.c:394 ../../WINGs/proplist.c:474
|
||||
#: ../../WINGs/proplist.c:1071 ../../WINGs/proplist.c:1123
|
||||
#: ../../WINGs/proplist.c:1289 ../../WINGs/proplist.c:1368
|
||||
#: ../../WINGs/proplist.c:1489 ../../WINGs/proplist.c:1536
|
||||
msgid "Used proplist functions on non-WMPropLists objects"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/proplist.c:630
|
||||
msgid "unterminated PropList string"
|
||||
msgstr "nicht terminierter PropList string"
|
||||
|
||||
#: ../../WINGs/proplist.c:670
|
||||
msgid "unterminated PropList data"
|
||||
msgstr "nicht terminiertes PropList data"
|
||||
|
||||
#: ../../WINGs/proplist.c:678
|
||||
msgid "unterminated PropList data (missing hexdigit)"
|
||||
msgstr "nicht terminiertes PropList data (fehlendes hex-Zeichen)"
|
||||
|
||||
#: ../../WINGs/proplist.c:690
|
||||
msgid "non hexdigit character in PropList data"
|
||||
msgstr "falsches hex-Zeichen in PropList data"
|
||||
|
||||
#: ../../WINGs/proplist.c:725
|
||||
msgid "unterminated PropList array"
|
||||
msgstr "nicht terminiertes PropList array"
|
||||
|
||||
#: ../../WINGs/proplist.c:733
|
||||
msgid "missing or unterminated PropList array"
|
||||
msgstr "fehlendes oder nicht terminiertes PropList array"
|
||||
|
||||
#: ../../WINGs/proplist.c:743
|
||||
msgid "could not get PropList array element"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/proplist.c:772
|
||||
msgid "unterminated PropList dictionary"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/proplist.c:789
|
||||
msgid "missing PropList dictionary key"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/proplist.c:791
|
||||
msgid "missing PropList dictionary entry key or unterminated dictionary"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/proplist.c:799
|
||||
msgid "error parsing PropList dictionary key"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/proplist.c:807
|
||||
msgid "missing = in PropList dictionary entry"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/proplist.c:815
|
||||
msgid "error parsing PropList dictionary entry value"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/proplist.c:823
|
||||
msgid "missing ; in PropList dictionary entry"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/proplist.c:884
|
||||
msgid ""
|
||||
"was expecting a string, data, array or dictionary. If it's a string, try "
|
||||
"enclosing it with \"."
|
||||
msgstr ""
|
||||
"string, data, array oder dictionary wurde erwartet. Zeichenketten mit \" "
|
||||
"einklammern."
|
||||
|
||||
#: ../../WINGs/proplist.c:888
|
||||
msgid "Comments are not allowed inside WindowMaker owned domain files."
|
||||
msgstr "Kommentare sind in Domaindaten von WindowMaker nicht erlaubt."
|
||||
|
||||
#: ../../WINGs/proplist.c:1559 ../../WINGs/proplist.c:1624
|
||||
msgid "extra data after end of property list"
|
||||
msgstr "zusätzliche Daten hinter dem Ende der Propertyliste"
|
||||
|
||||
#: ../../WINGs/proplist.c:1602
|
||||
#, c-format
|
||||
msgid "could not get size for file '%s'"
|
||||
msgstr "konnte Dateigrösse von '%s' nicht ermitteln"
|
||||
|
||||
#: ../../WINGs/proplist.c:1614
|
||||
#, c-format
|
||||
msgid "error reading from file '%s'"
|
||||
msgstr "Fehler beim Lesen der Datei '%s'"
|
||||
|
||||
#: ../../WINGs/proplist.c:1665
|
||||
#, c-format
|
||||
msgid "mkstemp (%s) failed"
|
||||
msgstr "mkstemp (%s) schlug fehl"
|
||||
|
||||
#: ../../WINGs/proplist.c:1676
|
||||
#, c-format
|
||||
msgid "mktemp (%s) failed"
|
||||
msgstr "mktemp (%s) schlug fehl"
|
||||
|
||||
#: ../../WINGs/proplist.c:1687
|
||||
#, c-format
|
||||
msgid "open (%s) failed"
|
||||
msgstr "open (%s) schlug fehl"
|
||||
|
||||
#: ../../WINGs/proplist.c:1694
|
||||
#, c-format
|
||||
msgid "writing to file: %s failed"
|
||||
msgstr "Schreiben in Datei: %s schlug fehl"
|
||||
|
||||
#: ../../WINGs/proplist.c:1702
|
||||
#, c-format
|
||||
msgid "fclose (%s) failed"
|
||||
msgstr "fclose (%s) schlug fehl"
|
||||
|
||||
#: ../../WINGs/proplist.c:1711
|
||||
#, c-format
|
||||
msgid "rename ('%s' to '%s') failed"
|
||||
msgstr "rename ('%s' to '%s') schlug fehl"
|
||||
|
||||
#. something happened with the file. just overwrite it
|
||||
#: ../../WINGs/userdefaults.c:192 ../../WINGs/userdefaults.c:208
|
||||
#, c-format
|
||||
msgid "cannot read domain from file '%s' when syncing"
|
||||
msgstr "Kannn bei der Synchronisation nicht aus Datei '%s' lesen"
|
||||
|
||||
#: ../../WINGs/wcolor.c:198 ../../WINGs/wcolor.c:211 ../../WINGs/wcolor.c:250
|
||||
#: ../../WINGs/wcolor.c:291
|
||||
#, c-format
|
||||
msgid "could not allocate %s color"
|
||||
msgstr "konnte die Farbe %s nicht erzeugen"
|
||||
|
||||
#: ../../WINGs/wcolor.c:198
|
||||
msgid "white"
|
||||
msgstr "weiß"
|
||||
|
||||
#: ../../WINGs/wcolor.c:211
|
||||
msgid "black"
|
||||
msgstr "schwarz"
|
||||
|
||||
#: ../../WINGs/wcolor.c:250
|
||||
msgid "gray"
|
||||
msgstr "grau"
|
||||
|
||||
#: ../../WINGs/wcolor.c:291
|
||||
msgid "dark gray"
|
||||
msgstr "dunkelgrau"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:415
|
||||
msgid "Colors"
|
||||
msgstr "Farben"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:605 ../../WINGs/wcolorpanel.c:2824
|
||||
msgid "Brightness"
|
||||
msgstr "Helligkeit"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:607 ../../WINGs/wcolorpanel.c:683
|
||||
#: ../../WINGs/wcolorpanel.c:716 ../../WINGs/wcolorpanel.c:750
|
||||
#: ../../WINGs/wcolorpanel.c:810 ../../WINGs/wcolorpanel.c:844
|
||||
#: ../../WINGs/wcolorpanel.c:878 ../../WINGs/wcolorpanel.c:913
|
||||
#: ../../WINGs/wcolorpanel.c:2164 ../../WINGs/wcolorpanel.c:2826
|
||||
#: ../../WINGs/wcolorpanel.c:2862 ../../WINGs/wcolorpanel.c:2898
|
||||
#: ../../WINGs/wcolorpanel.c:3746
|
||||
msgid "Color Panel: Could not allocate memory"
|
||||
msgstr "Color Panel: Konnte keinen Speicher reservieren"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:680 ../../WINGs/wcolorpanel.c:681
|
||||
msgid "Red"
|
||||
msgstr "Rot"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:713 ../../WINGs/wcolorpanel.c:714
|
||||
msgid "Green"
|
||||
msgstr "Grün"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:747 ../../WINGs/wcolorpanel.c:748
|
||||
msgid "Blue"
|
||||
msgstr "Blau"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:807 ../../WINGs/wcolorpanel.c:808
|
||||
msgid "Cyan"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:841 ../../WINGs/wcolorpanel.c:842
|
||||
msgid "Magenta"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:875 ../../WINGs/wcolorpanel.c:876
|
||||
msgid "Yellow"
|
||||
msgstr "Gelb"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:910 ../../WINGs/wcolorpanel.c:911
|
||||
msgid "Black"
|
||||
msgstr "Schwarz"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:991
|
||||
msgid "Spectrum"
|
||||
msgstr "Spektrum"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1021
|
||||
msgid "Palette"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1027
|
||||
msgid "New from File..."
|
||||
msgstr "Neu aus Datei..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1028 ../../WINGs/wcolorpanel.c:1076
|
||||
#: ../../WINGs/wcolorpanel.c:1093
|
||||
msgid "Rename..."
|
||||
msgstr "Umbenennen..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1029 ../../WINGs/wcolorpanel.c:1077
|
||||
#: ../../WINGs/wcolorpanel.c:1094 ../../WINGs/wcolorpanel.c:3321
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1030
|
||||
msgid "Copy"
|
||||
msgstr "Kopieren"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1031
|
||||
msgid "New from Clipboard"
|
||||
msgstr "Neu aus Zwischenablage"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1052
|
||||
msgid "X11-Colors"
|
||||
msgstr "X11-Farben"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1069
|
||||
msgid "Color"
|
||||
msgstr "Farbe"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1075
|
||||
msgid "Add..."
|
||||
msgstr "Hinzufügen..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1085
|
||||
msgid "List"
|
||||
msgstr "Liste"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1092
|
||||
msgid "New..."
|
||||
msgstr "Neu..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1231
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Color Panel: Could not create directory %s needed to store configurations"
|
||||
msgstr ""
|
||||
"Color Panel: Konnte das Verzeichnis %s zum Speichern der Konfiguration nicht erzeugen"
|
||||
|
||||
#. Delete the file, it doesn't belong here
|
||||
#: ../../WINGs/wcolorpanel.c:1237 ../../WINGs/wcolorpanel.c:3207
|
||||
#: ../../WINGs/wcolorpanel.c:3211
|
||||
msgid "File Error"
|
||||
msgstr "Dateifehler"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1238
|
||||
msgid "Could not create ColorPanel configuration directory"
|
||||
msgstr "Konnte Konfigurationsverzeichnis für Farbdialog nicht erzeugen"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1239 ../../WINGs/wcolorpanel.c:3208
|
||||
#: ../../WINGs/wcolorpanel.c:3213 ../../WINGs/wcolorpanel.c:3240
|
||||
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:647
|
||||
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
|
||||
#: ../../WINGs/wfilepanel.c:971 ../../WINGs/wfontpanel.c:709
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1245 ../../WINGs/wcolorpanel.c:1281
|
||||
#: ../../WINGs/wcolorpanel.c:1299
|
||||
msgid "Color Panel: Could not find file"
|
||||
msgstr "Color Panel: Konnte Datei nicht finden"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1486 ../../WINGs/wcolorpanel.c:1551
|
||||
#: ../../WINGs/wcolorpanel.c:1615
|
||||
msgid "Color Panel: X failed request"
|
||||
msgstr "Color Panel: X Anfrage schlug fehl"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2860
|
||||
msgid "Saturation"
|
||||
msgstr "Sättigung"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2896
|
||||
msgid "Hue"
|
||||
msgstr "Farbton"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3146
|
||||
msgid "Open Palette"
|
||||
msgstr "Palette öffnen"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3208
|
||||
msgid "Invalid file format !"
|
||||
msgstr "Ungültiges Dateiformat!"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3210
|
||||
#, c-format
|
||||
msgid "can't remove file %s"
|
||||
msgstr "kann Datei %s nicht entfernen"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3212
|
||||
msgid "Couldn't remove file from Configuration Directory !"
|
||||
msgstr "Konnte Datei nicht aus Konfigurationsverzeichnis entfernen!"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3239
|
||||
msgid "Rename"
|
||||
msgstr "Umbenennen"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3239
|
||||
msgid "Rename palette to:"
|
||||
msgstr "Palette umbenennen in:"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3240 ../../WINGs/wfilepanel.c:259
|
||||
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#. Careful, this palette exists already
|
||||
#: ../../WINGs/wcolorpanel.c:3256 ../../WINGs/wfilepanel.c:760
|
||||
msgid "Warning"
|
||||
msgstr "Warnung"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3257
|
||||
msgid ""
|
||||
"Palette already exists !\n"
|
||||
"\n"
|
||||
"Overwrite ?"
|
||||
msgstr ""
|
||||
"Palette existiert bereits!\n"
|
||||
"\n"
|
||||
"Überschreiben?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
|
||||
msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3289
|
||||
#, c-format
|
||||
msgid "Couldn't rename palette %s to %s\n"
|
||||
msgstr "Konnte Palette %s nicht in %s umbenennen\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3315
|
||||
msgid "This will permanently remove the palette "
|
||||
msgstr "Das wird die Palette unwiderruflich löschen "
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3318
|
||||
msgid ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Are you sure you want to remove this palette ?"
|
||||
msgstr ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Sind Sie sicher, dass Sie die Palette löschen wollen?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3343
|
||||
#, c-format
|
||||
msgid "Couldn't remove palette %s\n"
|
||||
msgstr "Konnte Palette %s nicht löschen\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3648
|
||||
#, c-format
|
||||
msgid "Could not open %s"
|
||||
msgstr "Konnte %s nicht öffnen"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3655
|
||||
#, c-format
|
||||
msgid "Could not create %s"
|
||||
msgstr "Konnte %s nicht erzeugen"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3666
|
||||
#, c-format
|
||||
msgid "Write error on file %s"
|
||||
msgstr "Schreibfehler bei Datei %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3711
|
||||
msgid "Color Panel: Color unspecified"
|
||||
msgstr "Color Panel: Farbe nicht spezifiziert"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:235
|
||||
msgid "Name:"
|
||||
msgstr "Name:"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:332 ../../WINGs/wfilepanel.c:396
|
||||
msgid "Open"
|
||||
msgstr "Öffnen"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:350 ../../WINGs/wfilepanel.c:402
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:562
|
||||
#, c-format
|
||||
msgid "WINGs: could not open directory %s\n"
|
||||
msgstr "WINGs: Konnte Verzeichnis %s nicht öffen\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:580
|
||||
#, c-format
|
||||
msgid "WINGs: could not stat %s\n"
|
||||
msgstr "WINGs: Dateistatus von %s nicht bestimmbar\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:647 ../../WINGs/wfilepanel.c:970
|
||||
#: ../../WINGs/wfontpanel.c:708
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:658
|
||||
msgid "Create Directory"
|
||||
msgstr "Verzeichnis anlegen"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:659
|
||||
msgid "Enter directory name"
|
||||
msgstr "Verzeichnisname eingeben"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:695 ../../WINGs/wfilepanel.c:734
|
||||
#: ../../WINGs/wfilepanel.c:765 ../../WINGs/wfilepanel.c:793
|
||||
msgid "Permission denied."
|
||||
msgstr "Zugriff verweigert."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:698
|
||||
#, c-format
|
||||
msgid "'%s' already exists."
|
||||
msgstr "'%s' existiert bereits."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:701
|
||||
msgid "Path does not exist."
|
||||
msgstr "Pfad existiert nicht."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:731 ../../WINGs/wfilepanel.c:790
|
||||
#, c-format
|
||||
msgid "'%s' does not exist."
|
||||
msgstr "'%s' existiert nicht."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:738 ../../WINGs/wfilepanel.c:797
|
||||
msgid "Insufficient memory available."
|
||||
msgstr "Nicht genügend Speicher verfügbar."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:742 ../../WINGs/wfilepanel.c:801
|
||||
#, c-format
|
||||
msgid "'%s' is on a read-only filesystem."
|
||||
msgstr "'%s' liegt auf einem read-only Dateisystem."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:777
|
||||
#: ../../WINGs/wfilepanel.c:804
|
||||
#, c-format
|
||||
msgid "Can not delete '%s'."
|
||||
msgstr "Kann %s nicht löschen."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:752
|
||||
#, c-format
|
||||
msgid "Delete directory %s ?"
|
||||
msgstr "Verzeichnis % s löschen?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:756
|
||||
#, c-format
|
||||
msgid "Delete file %s ?"
|
||||
msgstr "Datei %s löschen?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:768
|
||||
#, c-format
|
||||
msgid "Directory '%s' does not exist."
|
||||
msgstr "Verzeichnis '%s' existiert nicht."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:771
|
||||
#, c-format
|
||||
msgid "Directory '%s' is not empty."
|
||||
msgstr "Verzeichnis '%s' ist nicht leer."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:774
|
||||
#, c-format
|
||||
msgid "Directory '%s' is busy."
|
||||
msgstr "Verzeichnis '%s' ist belegt."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:787
|
||||
#, c-format
|
||||
msgid "'%s' is a directory."
|
||||
msgstr "'%s' ist ein Verzeichnis."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:829
|
||||
#, c-format
|
||||
msgid "An error occured browsing '%s'."
|
||||
msgstr "Fehler beim Lesen von '%s'."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:833
|
||||
#, c-format
|
||||
msgid "'%s' is not a directory."
|
||||
msgstr "'%s' ist kein Verzeichnis."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:970
|
||||
msgid "File does not exist."
|
||||
msgstr "Datei existiert nicht."
|
||||
|
||||
#: ../../WINGs/wfont.c:129
|
||||
#, c-format
|
||||
msgid "the following character sets are missing in %s:"
|
||||
msgstr "die folgenden Zeichensätze fehlen in %s:"
|
||||
|
||||
#: ../../WINGs/wfont.c:136
|
||||
#, c-format
|
||||
msgid ""
|
||||
"the string \"%s\" will be used in place of any characters from those sets."
|
||||
msgstr ""
|
||||
"die Zeichenkette \"%s\" ersetzt alle anderen Zeichen dieser Zeichensätze."
|
||||
|
||||
#: ../../WINGs/wfont.c:287 ../../WINGs/wfont.c:323
|
||||
#, c-format
|
||||
msgid "could not load font set %s. Trying fixed."
|
||||
msgstr "konnte Fonts %s nicht laden. Nehme fixed-Font."
|
||||
|
||||
#: ../../WINGs/wfont.c:293 ../../WINGs/wfont.c:329
|
||||
#, c-format
|
||||
msgid "could not load font %s. Trying fixed."
|
||||
msgstr "Konnte Font %s nicht laden. Nehme fixed-Font."
|
||||
|
||||
#: ../../WINGs/wfont.c:297 ../../WINGs/wfont.c:333
|
||||
msgid "could not load fixed font!"
|
||||
msgstr "konnte fixed-Font nicht laden!"
|
||||
|
||||
#: ../../WINGs/wfont.c:428
|
||||
#, c-format
|
||||
msgid "font description %s is too large."
|
||||
msgstr "Fontbeschreibung %s ist zu groß."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:205
|
||||
msgid "Test!!!"
|
||||
msgstr "Test!"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:211
|
||||
msgid "Family"
|
||||
msgstr "Familie"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:222
|
||||
msgid "Typeface"
|
||||
msgstr "Schriftart"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:233
|
||||
msgid "Size"
|
||||
msgstr "Größe"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:252
|
||||
msgid "Set"
|
||||
msgstr "Setzen"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:257
|
||||
msgid "Revert"
|
||||
msgstr "Zurückn."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:709
|
||||
msgid "Could not retrieve font list"
|
||||
msgstr "Konnte Fontliste nicht wiederherstellen"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:721
|
||||
#, c-format
|
||||
msgid "font name %s is longer than 256, which is invalid."
|
||||
msgstr "Fontname %s ist ungültig, da länger als 256 Zeichen."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:868
|
||||
msgid "Roman"
|
||||
msgstr "Roman"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:871
|
||||
msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:873
|
||||
msgid "Oblique"
|
||||
msgstr "Schräg"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:875
|
||||
msgid "Rev Italic"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:877
|
||||
msgid "Rev Oblique"
|
||||
msgstr ""
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:883
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../../WINGs/widgets.c:415
|
||||
#, c-format
|
||||
msgid "WINGs: could not load widget images file: %s"
|
||||
msgstr "WINGs: Konnte Widget-Bildatei %s nicht laden."
|
||||
|
||||
#: ../../WINGs/widgets.c:763
|
||||
msgid ""
|
||||
"could not load any fonts. Make sure your font installationand locale "
|
||||
"settings are correct."
|
||||
msgstr ""
|
||||
"Konnte keine Fonts laden. Überprüfen Sie, ob Ihre Fontinstallation und "
|
||||
"-einstellungen korrekt sind."
|
||||
|
||||
#: ../../WINGs/wruler.c:189
|
||||
msgid "0 inches"
|
||||
msgstr "0 Inch"
|
||||
739
WINGs/po/fr.po
Normal file
739
WINGs/po/fr.po
Normal file
@@ -0,0 +1,739 @@
|
||||
# KTranslator Generated File
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Free Software Foundation, Inc.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WINGs 0.80.0\n"
|
||||
"POT-Creation-Date: 2003-05-02 15:39+0200\n"
|
||||
"PO-Revision-Date: 2002-01-09 21:20+0100\n"
|
||||
"Last-Translator: Emmanuel Benoit <tseeker@neptune.fr>\n"
|
||||
"Language-Team: Français <fr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: unknown\n"
|
||||
|
||||
#: ../../WINGs/connection.c:467 ../../WINGs/connection.c:532
|
||||
#: ../../WINGs/connection.c:575
|
||||
msgid "Bad address-service-protocol combination"
|
||||
msgstr "Mauvaise combinaison adresse-service-protocole"
|
||||
|
||||
#: ../../WINGs/error.c:54
|
||||
#, c-format
|
||||
msgid "Unknown error %d"
|
||||
msgstr "Erreur inconnue %d"
|
||||
|
||||
#: ../../WINGs/error.c:59
|
||||
#, c-format
|
||||
msgid "Error %d"
|
||||
msgstr "Erreur %d"
|
||||
|
||||
#: ../../WINGs/error.c:110
|
||||
msgid " warning: "
|
||||
msgstr " Avertissement : "
|
||||
|
||||
#: ../../WINGs/error.c:137
|
||||
msgid " fatal error: "
|
||||
msgstr " erreur fatale : "
|
||||
|
||||
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
|
||||
msgid " error: "
|
||||
msgstr " erreur : "
|
||||
|
||||
#: ../../WINGs/findfile.c:48
|
||||
#, c-format
|
||||
msgid "could not get password entry for UID %i"
|
||||
msgstr "Impossible de lire le mot de passe de l'UID %i"
|
||||
|
||||
#: ../../WINGs/findfile.c:66
|
||||
#, c-format
|
||||
msgid "could not get password entry for user %s"
|
||||
msgstr "Impossible de lire le mot de passe de l'utilisateur %s"
|
||||
|
||||
#: ../../WINGs/host.c:114
|
||||
msgid "Cannot get current host name"
|
||||
msgstr "Impossible de déterminer le nom de la machine"
|
||||
|
||||
# TODO pas de traduction correcte possible, cf source.
|
||||
#: ../../WINGs/proplist.c:91
|
||||
#, c-format
|
||||
msgid "syntax error in %s %s, line %i: %s"
|
||||
msgstr "Faute de syntaxe dans %s %s, ligne %i : %s"
|
||||
|
||||
#: ../../WINGs/proplist.c:150
|
||||
msgid "Only string or data is supported for a proplist dictionary key"
|
||||
msgstr ""
|
||||
"Seuls les types string ou data sont supportés pour une clé de dictionnaire "
|
||||
"Proplist"
|
||||
|
||||
#: ../../WINGs/proplist.c:184 ../../WINGs/proplist.c:236
|
||||
#: ../../WINGs/proplist.c:394 ../../WINGs/proplist.c:474
|
||||
#: ../../WINGs/proplist.c:1075 ../../WINGs/proplist.c:1127
|
||||
#: ../../WINGs/proplist.c:1293 ../../WINGs/proplist.c:1372
|
||||
#: ../../WINGs/proplist.c:1493 ../../WINGs/proplist.c:1540
|
||||
msgid "Used proplist functions on non-WMPropLists objects"
|
||||
msgstr "Une fonction Proplist a été utilisée sur des objets non-WMPropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:630
|
||||
msgid "unterminated PropList string"
|
||||
msgstr "chaîne PropList sans fin"
|
||||
|
||||
#: ../../WINGs/proplist.c:670
|
||||
msgid "unterminated PropList data"
|
||||
msgstr "données PropList sans fin"
|
||||
|
||||
#: ../../WINGs/proplist.c:678
|
||||
msgid "unterminated PropList data (missing hexdigit)"
|
||||
msgstr "données PropList sans fin (il manque un chiffre hexadécimal)"
|
||||
|
||||
#: ../../WINGs/proplist.c:690 ../../WINGs/proplist.c:695
|
||||
msgid "non hexdigit character in PropList data"
|
||||
msgstr "caractère non-hexadécimal dans les données PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:729
|
||||
msgid "unterminated PropList array"
|
||||
msgstr "tableau PropList sans fin"
|
||||
|
||||
#: ../../WINGs/proplist.c:737
|
||||
msgid "missing or unterminated PropList array"
|
||||
msgstr "tableau PropList manquant ou sans fin"
|
||||
|
||||
#: ../../WINGs/proplist.c:747
|
||||
msgid "could not get PropList array element"
|
||||
msgstr "impossible de lire l'élément du tableau PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:776
|
||||
msgid "unterminated PropList dictionary"
|
||||
msgstr "dictionnaire PropList sans fin"
|
||||
|
||||
#: ../../WINGs/proplist.c:793
|
||||
msgid "missing PropList dictionary key"
|
||||
msgstr "clef du dictionnaire PropList manquante"
|
||||
|
||||
#: ../../WINGs/proplist.c:795
|
||||
msgid "missing PropList dictionary entry key or unterminated dictionary"
|
||||
msgstr "clef du dictionnaire PropList manquante ou dictionnaire sans fin"
|
||||
|
||||
#: ../../WINGs/proplist.c:803
|
||||
msgid "error parsing PropList dictionary key"
|
||||
msgstr "erreur lors de l'analyse de la clef de dictionnaire PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:811
|
||||
msgid "missing = in PropList dictionary entry"
|
||||
msgstr "signe '=' manquant dans l'entrée du dictionnaire PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:819
|
||||
msgid "error parsing PropList dictionary entry value"
|
||||
msgstr ""
|
||||
"erreur lors de l'analyse de la valeur de l'entrée du dictionnaire PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:827
|
||||
msgid "missing ; in PropList dictionary entry"
|
||||
msgstr "signe ';' manquant dans l'entrée du dictionnaire PropList"
|
||||
|
||||
#: ../../WINGs/proplist.c:888
|
||||
msgid ""
|
||||
"was expecting a string, data, array or dictionary. If it's a string, try "
|
||||
"enclosing it with \"."
|
||||
msgstr ""
|
||||
"une chaine, des données, un tableau ou un dictionnaire étaient attendus. "
|
||||
"S'il s'agit d'une chaîne, essayez de la délimiter grâce à '\"'."
|
||||
|
||||
#: ../../WINGs/proplist.c:892
|
||||
msgid "Comments are not allowed inside WindowMaker owned domain files."
|
||||
msgstr ""
|
||||
"Les commentaires ne sont pas autorisés dans les fichiers appartenant au "
|
||||
"domaine de Window Maker."
|
||||
|
||||
#: ../../WINGs/proplist.c:1563 ../../WINGs/proplist.c:1628
|
||||
msgid "extra data after end of property list"
|
||||
msgstr "données excédentaires après la fin de la liste de propriétés"
|
||||
|
||||
#: ../../WINGs/proplist.c:1606
|
||||
#, c-format
|
||||
msgid "could not get size for file '%s'"
|
||||
msgstr "impossible de déterminer la taille du fichier '%s'"
|
||||
|
||||
#: ../../WINGs/proplist.c:1618
|
||||
#, c-format
|
||||
msgid "error reading from file '%s'"
|
||||
msgstr "erreur pendant la lecture du fichier '%s'"
|
||||
|
||||
#: ../../WINGs/proplist.c:1669
|
||||
#, c-format
|
||||
msgid "mkstemp (%s) failed"
|
||||
msgstr "mkstemp (%s) a échoué"
|
||||
|
||||
#: ../../WINGs/proplist.c:1680
|
||||
#, c-format
|
||||
msgid "mktemp (%s) failed"
|
||||
msgstr "mktemp (%s) a échoué"
|
||||
|
||||
#: ../../WINGs/proplist.c:1691
|
||||
#, c-format
|
||||
msgid "open (%s) failed"
|
||||
msgstr "open (%s) a échoué"
|
||||
|
||||
#: ../../WINGs/proplist.c:1698
|
||||
#, c-format
|
||||
msgid "writing to file: %s failed"
|
||||
msgstr "erreur pendant l'écriture dans le fichier '%s'"
|
||||
|
||||
#: ../../WINGs/proplist.c:1706
|
||||
#, c-format
|
||||
msgid "fclose (%s) failed"
|
||||
msgstr "erreur lors de la fermeture du fichier '%s'"
|
||||
|
||||
#: ../../WINGs/proplist.c:1715
|
||||
#, c-format
|
||||
msgid "rename ('%s' to '%s') failed"
|
||||
msgstr "impossible de renommer '%s' en '%s'"
|
||||
|
||||
#. something happened with the file. just overwrite it
|
||||
#: ../../WINGs/userdefaults.c:188 ../../WINGs/userdefaults.c:204
|
||||
#, c-format
|
||||
msgid "cannot read domain from file '%s' when syncing"
|
||||
msgstr ""
|
||||
"impossible de lire le domaine depuis le fichier '%s' pendant la "
|
||||
"synchronisation"
|
||||
|
||||
#: ../../WINGs/wcolor.c:224 ../../WINGs/wcolor.c:236 ../../WINGs/wcolor.c:275
|
||||
#: ../../WINGs/wcolor.c:316
|
||||
#, c-format
|
||||
msgid "could not allocate %s color"
|
||||
msgstr "impossible d'allouer la couleur %s"
|
||||
|
||||
#: ../../WINGs/wcolor.c:224
|
||||
msgid "white"
|
||||
msgstr "blanc"
|
||||
|
||||
#: ../../WINGs/wcolor.c:236
|
||||
msgid "black"
|
||||
msgstr "noir"
|
||||
|
||||
#: ../../WINGs/wcolor.c:275
|
||||
msgid "gray"
|
||||
msgstr "gris"
|
||||
|
||||
#: ../../WINGs/wcolor.c:316
|
||||
msgid "dark gray"
|
||||
msgstr "gris sombre"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:420
|
||||
msgid "Colors"
|
||||
msgstr "Couleurs"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:610 ../../WINGs/wcolorpanel.c:2829
|
||||
msgid "Brightness"
|
||||
msgstr "Luminosité"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:612 ../../WINGs/wcolorpanel.c:688
|
||||
#: ../../WINGs/wcolorpanel.c:721 ../../WINGs/wcolorpanel.c:755
|
||||
#: ../../WINGs/wcolorpanel.c:815 ../../WINGs/wcolorpanel.c:849
|
||||
#: ../../WINGs/wcolorpanel.c:883 ../../WINGs/wcolorpanel.c:918
|
||||
#: ../../WINGs/wcolorpanel.c:2169 ../../WINGs/wcolorpanel.c:2831
|
||||
#: ../../WINGs/wcolorpanel.c:2867 ../../WINGs/wcolorpanel.c:2903
|
||||
#: ../../WINGs/wcolorpanel.c:3745
|
||||
msgid "Color Panel: Could not allocate memory"
|
||||
msgstr "Panneau de Sélection des Couleur: impossible d'allouer la mémoire"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:685 ../../WINGs/wcolorpanel.c:686
|
||||
msgid "Red"
|
||||
msgstr "Rouge"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:718 ../../WINGs/wcolorpanel.c:719
|
||||
msgid "Green"
|
||||
msgstr "Vert"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:752 ../../WINGs/wcolorpanel.c:753
|
||||
msgid "Blue"
|
||||
msgstr "Bleu"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:812 ../../WINGs/wcolorpanel.c:813
|
||||
msgid "Cyan"
|
||||
msgstr "Cyan"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:846 ../../WINGs/wcolorpanel.c:847
|
||||
msgid "Magenta"
|
||||
msgstr "Magenta"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:880 ../../WINGs/wcolorpanel.c:881
|
||||
msgid "Yellow"
|
||||
msgstr "Jaune"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:915 ../../WINGs/wcolorpanel.c:916
|
||||
msgid "Black"
|
||||
msgstr "Noir"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:996
|
||||
msgid "Spectrum"
|
||||
msgstr "Spectre"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1026
|
||||
msgid "Palette"
|
||||
msgstr "Palette"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1032
|
||||
msgid "New from File..."
|
||||
msgstr "Nouveau d'après le fichier..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1033 ../../WINGs/wcolorpanel.c:1081
|
||||
#: ../../WINGs/wcolorpanel.c:1098
|
||||
msgid "Rename..."
|
||||
msgstr "Renommer..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1034 ../../WINGs/wcolorpanel.c:1082
|
||||
#: ../../WINGs/wcolorpanel.c:1099 ../../WINGs/wcolorpanel.c:3326
|
||||
msgid "Remove"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1035
|
||||
msgid "Copy"
|
||||
msgstr "Copier"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1036
|
||||
msgid "New from Clipboard"
|
||||
msgstr "Nouveau d'après le presse-papier"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1057
|
||||
msgid "X11-Colors"
|
||||
msgstr "Couleurs X11"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1074
|
||||
msgid "Color"
|
||||
msgstr "Couleur"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1080
|
||||
msgid "Add..."
|
||||
msgstr "Ajouter..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1090
|
||||
msgid "List"
|
||||
msgstr "Liste"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1097
|
||||
msgid "New..."
|
||||
msgstr "Nouveau..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Color Panel: Could not create directory %s needed to store configurations"
|
||||
msgstr ""
|
||||
"Panneau de sélection des couleurs : impossible de créer le répertoire %s "
|
||||
"requis pour enregistrer les configurations."
|
||||
|
||||
#. Delete the file, it doesn't belong here
|
||||
#: ../../WINGs/wcolorpanel.c:1242 ../../WINGs/wcolorpanel.c:3212
|
||||
#: ../../WINGs/wcolorpanel.c:3216
|
||||
msgid "File Error"
|
||||
msgstr "Erreur de fichier"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1243
|
||||
msgid "Could not create ColorPanel configuration directory"
|
||||
msgstr ""
|
||||
"Impossible de créer le répertoire pour la configuration du panneau de "
|
||||
"sélection des couleurs."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1244 ../../WINGs/wcolorpanel.c:3213
|
||||
#: ../../WINGs/wcolorpanel.c:3218 ../../WINGs/wcolorpanel.c:3245
|
||||
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:650
|
||||
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
|
||||
#: ../../WINGs/wfilepanel.c:974 ../../WINGs/wfontpanel.c:751
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1250 ../../WINGs/wcolorpanel.c:1286
|
||||
#: ../../WINGs/wcolorpanel.c:1304
|
||||
msgid "Color Panel: Could not find file"
|
||||
msgstr "Panneau de sélection des couleurs : Impossible de trouver le fichier."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1491 ../../WINGs/wcolorpanel.c:1556
|
||||
#: ../../WINGs/wcolorpanel.c:1620
|
||||
msgid "Color Panel: X failed request"
|
||||
msgstr "Panneau de sélection des couleurs : échec d'une requête X"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2865
|
||||
msgid "Saturation"
|
||||
msgstr "Saturation"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2901
|
||||
msgid "Hue"
|
||||
msgstr "Teinte"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3151
|
||||
msgid "Open Palette"
|
||||
msgstr "Ouvrir une palette"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3213
|
||||
msgid "Invalid file format !"
|
||||
msgstr "Format de fichier invalide !"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3215
|
||||
#, c-format
|
||||
msgid "can't remove file %s"
|
||||
msgstr "Impossible de supprimer le fichier %s."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3217
|
||||
msgid "Couldn't remove file from Configuration Directory !"
|
||||
msgstr "Impossible de supprimer le fichier du répertoire de configuration !"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3244
|
||||
msgid "Rename"
|
||||
msgstr "Renommer"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3244
|
||||
msgid "Rename palette to:"
|
||||
msgstr "Renommer la palette en :"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3245 ../../WINGs/wfilepanel.c:259
|
||||
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
#. Careful, this palette exists already
|
||||
#: ../../WINGs/wcolorpanel.c:3261 ../../WINGs/wfilepanel.c:763
|
||||
msgid "Warning"
|
||||
msgstr "Avertissement"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3262
|
||||
msgid ""
|
||||
"Palette already exists !\n"
|
||||
"\n"
|
||||
"Overwrite ?"
|
||||
msgstr ""
|
||||
"La palette existe déjà !\n"
|
||||
"\n"
|
||||
"Écraser ?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
|
||||
msgid "No"
|
||||
msgstr "Non"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
|
||||
msgid "Yes"
|
||||
msgstr "Oui"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3294
|
||||
#, c-format
|
||||
msgid "Couldn't rename palette %s to %s\n"
|
||||
msgstr "Impossible de renommer la palette %s en %s.\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3320
|
||||
msgid "This will permanently remove the palette "
|
||||
msgstr "Ceci détruira définitivement la palette "
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3323
|
||||
msgid ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Are you sure you want to remove this palette ?"
|
||||
msgstr ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Êtes-vous sûr de vouloir supprimer cette palette ?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3348
|
||||
#, c-format
|
||||
msgid "Couldn't remove palette %s\n"
|
||||
msgstr "Impossible de détruire la palette %s.\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3647
|
||||
#, c-format
|
||||
msgid "Could not open %s"
|
||||
msgstr "Impossible d'ouvrir %s."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3654
|
||||
#, c-format
|
||||
msgid "Could not create %s"
|
||||
msgstr "Impossible de créer %s."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3665
|
||||
#, c-format
|
||||
msgid "Write error on file %s"
|
||||
msgstr "Erreur d'écriture dans le fichier %s."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3710
|
||||
msgid "Color Panel: Color unspecified"
|
||||
msgstr "Panneau de sélection des couleurs: couleur non spécifiée."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:235
|
||||
msgid "Name:"
|
||||
msgstr "Nom :"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:332 ../../WINGs/wfilepanel.c:396
|
||||
msgid "Open"
|
||||
msgstr "Ouvrir"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:350 ../../WINGs/wfilepanel.c:402
|
||||
msgid "Save"
|
||||
msgstr "Enregistrer"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:565
|
||||
#, c-format
|
||||
msgid "WINGs: could not open directory %s\n"
|
||||
msgstr "WINGs : Impossible d'ouvrir le répertoire %s.\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:583
|
||||
#, c-format
|
||||
msgid "WINGs: could not stat %s\n"
|
||||
msgstr "WINGs : impossible de lire l'état du fichier %s.\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:650 ../../WINGs/wfilepanel.c:973
|
||||
#: ../../WINGs/wfontpanel.c:750
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:661
|
||||
msgid "Create Directory"
|
||||
msgstr "Créer un répertoire"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:662
|
||||
msgid "Enter directory name"
|
||||
msgstr "Saisissez le nom du répertoire"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:698 ../../WINGs/wfilepanel.c:737
|
||||
#: ../../WINGs/wfilepanel.c:768 ../../WINGs/wfilepanel.c:796
|
||||
msgid "Permission denied."
|
||||
msgstr "Permission refusée."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:701
|
||||
#, c-format
|
||||
msgid "'%s' already exists."
|
||||
msgstr "'%s' existe déjà."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:704
|
||||
msgid "Path does not exist."
|
||||
msgstr "Le chemin n'existe pas."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:734 ../../WINGs/wfilepanel.c:793
|
||||
#, c-format
|
||||
msgid "'%s' does not exist."
|
||||
msgstr "'%s' n'existe pas."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:741 ../../WINGs/wfilepanel.c:800
|
||||
msgid "Insufficient memory available."
|
||||
msgstr "Mémoire disponible insuffisante."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:804
|
||||
#, c-format
|
||||
msgid "'%s' is on a read-only filesystem."
|
||||
msgstr "'%s' est sur un système de fichiers en lecture seule."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:748 ../../WINGs/wfilepanel.c:780
|
||||
#: ../../WINGs/wfilepanel.c:807
|
||||
#, c-format
|
||||
msgid "Can not delete '%s'."
|
||||
msgstr "Impossible de supprimer '%s'."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:755
|
||||
#, c-format
|
||||
msgid "Delete directory %s ?"
|
||||
msgstr "Supprimer le répertoire %s ?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:759
|
||||
#, c-format
|
||||
msgid "Delete file %s ?"
|
||||
msgstr "Supprimer le fichier %s ?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:771
|
||||
#, c-format
|
||||
msgid "Directory '%s' does not exist."
|
||||
msgstr "Le répertoire '%s' n'existe pas."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:774
|
||||
#, c-format
|
||||
msgid "Directory '%s' is not empty."
|
||||
msgstr "Le répertoire '%s' n'est pas vide."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:777
|
||||
#, c-format
|
||||
msgid "Directory '%s' is busy."
|
||||
msgstr "Le répertoire '%s' est occupé."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:790
|
||||
#, c-format
|
||||
msgid "'%s' is a directory."
|
||||
msgstr "'%s' est un répertoire."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:832
|
||||
#, c-format
|
||||
msgid "An error occured browsing '%s'."
|
||||
msgstr "Une erreur s'est produite pendant le parcours de '%s'."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:836
|
||||
#, c-format
|
||||
msgid "'%s' is not a directory."
|
||||
msgstr "'%s' n'est pas un répertoire."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:973
|
||||
msgid "File does not exist."
|
||||
msgstr "Le fichier n'existe pas."
|
||||
|
||||
#: ../../WINGs/wfont.c:133 ../../WINGs/wfont.c:143
|
||||
#, c-format
|
||||
msgid "Invalid size specification '%s' in %s. Using default %d\n"
|
||||
msgstr ""
|
||||
"Taille invalide dans %2$s : '%1$s'. Utilisation de la valeur par défaut %3"
|
||||
"$d\n"
|
||||
|
||||
#: ../../WINGs/wfont.c:187
|
||||
#, c-format
|
||||
msgid "the following character sets are missing in %s:"
|
||||
msgstr "Les jeux de caractères suivants manquent dans %s :"
|
||||
|
||||
#: ../../WINGs/wfont.c:193
|
||||
#, c-format
|
||||
msgid ""
|
||||
"the string \"%s\" will be used in place of any characters from those sets."
|
||||
msgstr ""
|
||||
"La chaîne « %s » sera utilisée à la place de tous les caractères de ces jeux."
|
||||
|
||||
#. is arial a good fallback for multibyte?
|
||||
#: ../../WINGs/wfont.c:599 ../../WINGs/wfont.c:614
|
||||
#, c-format
|
||||
msgid "could not load font %s. Trying arial."
|
||||
msgstr ""
|
||||
"Impossible de charger la police de caractères %s, essai de la police "
|
||||
"« arial »."
|
||||
|
||||
#: ../../WINGs/wfont.c:606
|
||||
msgid "could not load antialiased font set. Reverting to standard font sets."
|
||||
msgstr ""
|
||||
"Impossible de charger les polices lissées, utilisation des polices normales."
|
||||
|
||||
#: ../../WINGs/wfont.c:609
|
||||
#, c-format
|
||||
msgid "could not load FontSet %s. Trying fixed."
|
||||
msgstr ""
|
||||
"Impossible de charger la famille de polices %s, essai de la famille "
|
||||
"« fixed »."
|
||||
|
||||
#: ../../WINGs/wfont.c:621
|
||||
msgid "could not load antialiased fonts. Reverting to normal fonts."
|
||||
msgstr ""
|
||||
"Impossible de charger les polices lissées, utilisation des polices normales."
|
||||
|
||||
#: ../../WINGs/wfont.c:624 ../../WINGs/wfont.c:635
|
||||
#, c-format
|
||||
msgid "could not load font %s. Trying fixed."
|
||||
msgstr ""
|
||||
"Impossible de charger la police de caractères %s, essai de la police "
|
||||
"« fixed »."
|
||||
|
||||
#: ../../WINGs/wfont.c:629
|
||||
#, c-format
|
||||
msgid "could not load font set %s. Trying fixed."
|
||||
msgstr ""
|
||||
"Impossible de charger la famille de polices %s, essai de la famille "
|
||||
"« fixed »."
|
||||
|
||||
#: ../../WINGs/wfont.c:639
|
||||
msgid "could not load fixed font!"
|
||||
msgstr "Impossible de charger la police de caractères « fixed » !"
|
||||
|
||||
#: ../../WINGs/wfont.c:704 ../../WINGs/wfont.c:765 ../../WINGs/wfont.c:836
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Conversion to widechar failed (possible invalid multibyte sequence): '%s':"
|
||||
"(pos %d)\n"
|
||||
msgstr ""
|
||||
"Échec de la conversion en widechar (probablement une séquence d'octets "
|
||||
"erronée) : « %s » (pos %d)\n"
|
||||
|
||||
#: ../../WINGs/wfont.c:887
|
||||
#, c-format
|
||||
msgid "font description %s is too large."
|
||||
msgstr "La description de la police de caractères %s est trop volumineuse."
|
||||
|
||||
#. // remove warning later. or maybe not
|
||||
#: ../../WINGs/wfont.c:935
|
||||
#, c-format
|
||||
msgid "Invalid font specification: '%s'\n"
|
||||
msgstr "Déclaration de police invalide : « %s »\n"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:235
|
||||
msgid "Test!!!"
|
||||
msgstr "Test !"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:241
|
||||
msgid "Family"
|
||||
msgstr "Famille"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:252
|
||||
msgid "Typeface"
|
||||
msgstr "Caractère"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:263
|
||||
msgid "Size"
|
||||
msgstr "Taille"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:282
|
||||
msgid "Set"
|
||||
msgstr "Famille"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:288
|
||||
msgid "Revert"
|
||||
msgstr "Revenir"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:751
|
||||
msgid "Could not retrieve font list"
|
||||
msgstr "Impossible de lire la liste des polices de caractères."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:765
|
||||
#, c-format
|
||||
msgid "font name %s is longer than 256, which is invalid."
|
||||
msgstr ""
|
||||
"Le nom de police %s a plus de 256 caractères et est par conséquent invalide."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:913
|
||||
msgid "Roman"
|
||||
msgstr "Roman"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:916
|
||||
msgid "Italic"
|
||||
msgstr "Italique"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:918
|
||||
msgid "Oblique"
|
||||
msgstr "Penché"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:920
|
||||
msgid "Rev Italic"
|
||||
msgstr "Italique inverse"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:922
|
||||
msgid "Rev Oblique"
|
||||
msgstr "Penché inverse"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:928
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../../WINGs/widgets.c:419
|
||||
#, c-format
|
||||
msgid "WINGs: could not load widget images file: %s"
|
||||
msgstr "WINGs : impossible de charger le fichier d'images de widget '%s'."
|
||||
|
||||
#: ../../WINGs/widgets.c:770
|
||||
msgid ""
|
||||
"Text antialiasing is enabled in the configuration but the X server doesn't "
|
||||
"have the required capabilities (missing RENDER extension). Disabling text "
|
||||
"antialiasing."
|
||||
msgstr ""
|
||||
"Le lissage du texte est activé dans la configuration mais le serveur X ne "
|
||||
"dispose pas de l'extension adéquate (extension RENDER). Desactivation du "
|
||||
"lissage."
|
||||
|
||||
#: ../../WINGs/widgets.c:787
|
||||
msgid ""
|
||||
"could not load any fonts. Make sure your font installation and locale "
|
||||
"settings are correct."
|
||||
msgstr ""
|
||||
"Aucune police n'a pu être chargée. Veuillez vérifier que vos polices sont "
|
||||
"correctement installées et que votre langue est bien configurée."
|
||||
|
||||
#: ../../WINGs/wruler.c:192
|
||||
msgid "0 inches"
|
||||
msgstr "0 pouces"
|
||||
609
WINGs/po/sk.po
609
WINGs/po/sk.po
@@ -5,32 +5,33 @@
|
||||
# Currently maintained by Jan "judas" Tomka <judas@linux.sk>
|
||||
#
|
||||
# Version history:
|
||||
# WM-ver author email date
|
||||
# 0.65.1 Jan "judas" Tomka <judas@linux.sk> Aug 08 2001
|
||||
# 0.70.0 Jan "judas" Tomka <judas@linux.sk> Oct 15 2001
|
||||
# 0.70.1 Jan "judas" Tomka <judas@linux.sk> Nov 02 2001
|
||||
# 0.80.0 Jan "judas" Tomka <judas@linux.sk> Dec 20 2001
|
||||
# WM-ver author email date
|
||||
# 0.65.1 Jan "judas" Tomka <judas@linux.sk> Aug 08 2001
|
||||
# 0.70.0 Jan "judas" Tomka <judas@linux.sk> Oct 15 2001
|
||||
# 0.70.1 Jan "judas" Tomka <judas@linux.sk> Nov 02 2001
|
||||
# 0.80.0 Jan "judas" Tomka <judas@linux.sk> Dec 20 2001
|
||||
# 0.80.2 Jan "judas" Tomka <judas@linux.sk> Jan 31 2004
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WINGs 0.80.0\n"
|
||||
"POT-Creation-Date: 2001-12-20 03:50+0100\n"
|
||||
"POT-Creation-Date: 2004-01-31 18:36+0100\n"
|
||||
"PO-Revision-Date: 2001-12-20 04:00+0100\n"
|
||||
"Last-Translator: Jan \"judas\" Tomka <judas@linux.sk>\n"
|
||||
"Language-Team: Slovak <sk@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-2\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../../WINGs/connection.c:461 ../../WINGs/connection.c:526
|
||||
#: ../../WINGs/connection.c:569
|
||||
#: ../../WINGs/connection.c:467 ../../WINGs/connection.c:532
|
||||
#: ../../WINGs/connection.c:575
|
||||
msgid "Bad address-service-protocol combination"
|
||||
msgstr "Nesprávna kombinácia adresa-slu¾ba-protokol"
|
||||
msgstr "Nesprávna kombinácia adresa-služba-protokol"
|
||||
|
||||
#: ../../WINGs/error.c:54
|
||||
#, c-format
|
||||
msgid "Unknown error %d"
|
||||
msgstr "Nezmána chyba %d"
|
||||
msgstr "Nezmána chyba %d"
|
||||
|
||||
#: ../../WINGs/error.c:59
|
||||
#, c-format
|
||||
@@ -43,7 +44,7 @@ msgstr " varovanie: "
|
||||
|
||||
#: ../../WINGs/error.c:137
|
||||
msgid " fatal error: "
|
||||
msgstr " fatálna chyba: "
|
||||
msgstr " fatálna chyba: "
|
||||
|
||||
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
|
||||
msgid " error: "
|
||||
@@ -52,371 +53,376 @@ msgstr " chyba: "
|
||||
#: ../../WINGs/findfile.c:48
|
||||
#, c-format
|
||||
msgid "could not get password entry for UID %i"
|
||||
msgstr "nemo¾no zisti» informácie o UID %i"
|
||||
msgstr "nemožno zistiť informácie o UID %i"
|
||||
|
||||
#: ../../WINGs/findfile.c:66
|
||||
#, c-format
|
||||
msgid "could not get password entry for user %s"
|
||||
msgstr "nemo¾no zisti» informácie o u¾ívateµovi %s"
|
||||
msgstr "nemožno zistiť informácie o užívateľovi %s"
|
||||
|
||||
#: ../../WINGs/host.c:114
|
||||
msgid "Cannot get current host name"
|
||||
msgstr "Nemo¾no zisti» aktuálne meno poèítaèa"
|
||||
msgstr "Nemožno zistiť aktuálne meno počítača"
|
||||
|
||||
#: ../../WINGs/proplist.c:91
|
||||
#, c-format
|
||||
msgid "syntax error in %s %s, line %i: %s"
|
||||
msgstr "chyba syntaxe v %s %s, riadok %i: %s"
|
||||
|
||||
#: ../../WINGs/proplist.c:150
|
||||
msgid "Only string or data is supported for a proplist dictionary key"
|
||||
msgstr "Pre kµúè slovníka proplist je podporovaný len re»azec alebo dáta"
|
||||
msgstr "Pre kľúč slovníka proplist je podporovaný len reťazec alebo dáta"
|
||||
|
||||
#: ../../WINGs/proplist.c:184 ../../WINGs/proplist.c:236
|
||||
#: ../../WINGs/proplist.c:394 ../../WINGs/proplist.c:474
|
||||
#: ../../WINGs/proplist.c:1071 ../../WINGs/proplist.c:1123
|
||||
#: ../../WINGs/proplist.c:1251 ../../WINGs/proplist.c:1330
|
||||
#: ../../WINGs/proplist.c:1451 ../../WINGs/proplist.c:1498
|
||||
#: ../../WINGs/proplist.c:1075 ../../WINGs/proplist.c:1127
|
||||
#: ../../WINGs/proplist.c:1293 ../../WINGs/proplist.c:1372
|
||||
#: ../../WINGs/proplist.c:1493 ../../WINGs/proplist.c:1540
|
||||
msgid "Used proplist functions on non-WMPropLists objects"
|
||||
msgstr "Pou¾itá proplist funkcia na iných ako WMPropLists objektoch"
|
||||
msgstr "Použitá proplist funkcia na iných ako WMPropLists objektoch"
|
||||
|
||||
#: ../../WINGs/proplist.c:630
|
||||
msgid "unterminated PropList string"
|
||||
msgstr "neukonèený PropList re»azec"
|
||||
msgstr "neukončený PropList reťazec"
|
||||
|
||||
#: ../../WINGs/proplist.c:670
|
||||
msgid "unterminated PropList data"
|
||||
msgstr "neukonèené PropList dáta"
|
||||
msgstr "neukončené PropList dáta"
|
||||
|
||||
#: ../../WINGs/proplist.c:678
|
||||
msgid "unterminated PropList data (missing hexdigit)"
|
||||
msgstr "neukonèené PropList dáta (chýbajúca hex èíslica)"
|
||||
msgstr "neukončené PropList dáta (chýbajúca hex číslica)"
|
||||
|
||||
#: ../../WINGs/proplist.c:690
|
||||
#: ../../WINGs/proplist.c:690 ../../WINGs/proplist.c:695
|
||||
msgid "non hexdigit character in PropList data"
|
||||
msgstr "v PropList dátach je znak, ktorý nie je hex èíslicou"
|
||||
msgstr "v PropList dátach je znak, ktorý nie je hex číslicou"
|
||||
|
||||
#: ../../WINGs/proplist.c:725
|
||||
#: ../../WINGs/proplist.c:729
|
||||
msgid "unterminated PropList array"
|
||||
msgstr "neukonèené PropList pole"
|
||||
msgstr "neukončené PropList pole"
|
||||
|
||||
#: ../../WINGs/proplist.c:733
|
||||
#: ../../WINGs/proplist.c:737
|
||||
msgid "missing or unterminated PropList array"
|
||||
msgstr "chýbajúce alebo neukonèené PropList pole"
|
||||
msgstr "chýbajúce alebo neukončené PropList pole"
|
||||
|
||||
#: ../../WINGs/proplist.c:743
|
||||
#: ../../WINGs/proplist.c:747
|
||||
msgid "could not get PropList array element"
|
||||
msgstr "nemo¾no zisti» prvok PropList poµa"
|
||||
msgstr "nemožno zistiť prvok PropList poľa"
|
||||
|
||||
#: ../../WINGs/proplist.c:772
|
||||
#: ../../WINGs/proplist.c:776
|
||||
msgid "unterminated PropList dictionary"
|
||||
msgstr "neukonèený PropList slovník"
|
||||
msgstr "neukončený PropList slovník"
|
||||
|
||||
#: ../../WINGs/proplist.c:789
|
||||
#: ../../WINGs/proplist.c:793
|
||||
msgid "missing PropList dictionary key"
|
||||
msgstr "chýbajúci kµúè PropList slovníka"
|
||||
msgstr "chýbajúci kľúč PropList slovníka"
|
||||
|
||||
#: ../../WINGs/proplist.c:791
|
||||
#: ../../WINGs/proplist.c:795
|
||||
msgid "missing PropList dictionary entry key or unterminated dictionary"
|
||||
msgstr "chýbajúci kµúè polo¾ky PropList slovníka alebo neukonèený slovník"
|
||||
msgstr "chýbajúci kľúč položky PropList slovníka alebo neukončený slovník"
|
||||
|
||||
#: ../../WINGs/proplist.c:799
|
||||
#: ../../WINGs/proplist.c:803
|
||||
msgid "error parsing PropList dictionary key"
|
||||
msgstr "chyba pri parsovaní kµúèa PropList slovníka"
|
||||
msgstr "chyba pri parsovaní kľúča PropList slovníka"
|
||||
|
||||
#: ../../WINGs/proplist.c:807
|
||||
#: ../../WINGs/proplist.c:811
|
||||
msgid "missing = in PropList dictionary entry"
|
||||
msgstr "chýbajúce = v polo¾ke PropList slovníka"
|
||||
msgstr "chýbajúce = v položke PropList slovníka"
|
||||
|
||||
#: ../../WINGs/proplist.c:815
|
||||
#: ../../WINGs/proplist.c:819
|
||||
msgid "error parsing PropList dictionary entry value"
|
||||
msgstr "chyba pri parsovaní hodnoty polo¾ky PropList slovníka"
|
||||
msgstr "chyba pri parsovaní hodnoty položky PropList slovníka"
|
||||
|
||||
#: ../../WINGs/proplist.c:823
|
||||
#: ../../WINGs/proplist.c:827
|
||||
msgid "missing ; in PropList dictionary entry"
|
||||
msgstr "chýbajúca ; v polo¾ke PropList slovníka"
|
||||
msgstr "chýbajúca ; v položke PropList slovníka"
|
||||
|
||||
#: ../../WINGs/proplist.c:884
|
||||
#: ../../WINGs/proplist.c:888
|
||||
msgid ""
|
||||
"was expecting a string, data, array or dictionary. If it's a string, try "
|
||||
"enclosing it with \"."
|
||||
msgstr ""
|
||||
"oèakávaný bol re»azec, dáta, pole alebo slovník. Ak je to re»azec, skúste ho "
|
||||
"uzavrie» medzi \"."
|
||||
"očakávaný bol reťazec, dáta, pole alebo slovník. Ak je to reťazec, skúste ho "
|
||||
"uzavrieť medzi \"."
|
||||
|
||||
#: ../../WINGs/proplist.c:888
|
||||
#: ../../WINGs/proplist.c:892
|
||||
msgid "Comments are not allowed inside WindowMaker owned domain files."
|
||||
msgstr "Komentáre v doménových súboroch Window Makera nie sú povolené."
|
||||
msgstr "Komentáre v doménových súboroch Window Makera nie sú povolené."
|
||||
|
||||
#: ../../WINGs/proplist.c:1521 ../../WINGs/proplist.c:1586
|
||||
#: ../../WINGs/proplist.c:1563 ../../WINGs/proplist.c:1630
|
||||
msgid "extra data after end of property list"
|
||||
msgstr "prebytoèné dáta na konci property listu"
|
||||
msgstr "prebytočné dáta na konci property listu"
|
||||
|
||||
#: ../../WINGs/proplist.c:1564
|
||||
#: ../../WINGs/proplist.c:1606
|
||||
#, c-format
|
||||
msgid "could not get size for file '%s'"
|
||||
msgstr "nemo¾no zisti» veµkos» súboru '%s'"
|
||||
msgstr "nemožno zistiť veľkosť súboru '%s'"
|
||||
|
||||
#: ../../WINGs/proplist.c:1576
|
||||
#: ../../WINGs/proplist.c:1619
|
||||
#, c-format
|
||||
msgid "error reading from file '%s'"
|
||||
msgstr "chyba pri èítaní zo súboru '%s'"
|
||||
msgstr "chyba pri čítaní zo súboru '%s'"
|
||||
|
||||
#: ../../WINGs/proplist.c:1627
|
||||
#: ../../WINGs/proplist.c:1671
|
||||
#, c-format
|
||||
msgid "mkstemp (%s) failed"
|
||||
msgstr "chyba mkstemp (%s)"
|
||||
|
||||
#: ../../WINGs/proplist.c:1638
|
||||
#: ../../WINGs/proplist.c:1682
|
||||
#, c-format
|
||||
msgid "mktemp (%s) failed"
|
||||
msgstr "chyba mktemp(%s)"
|
||||
|
||||
#: ../../WINGs/proplist.c:1649
|
||||
#: ../../WINGs/proplist.c:1693
|
||||
#, c-format
|
||||
msgid "open (%s) failed"
|
||||
msgstr "chyba pri otváraní (%s)"
|
||||
msgstr "chyba pri otváraní (%s)"
|
||||
|
||||
#: ../../WINGs/proplist.c:1656
|
||||
#: ../../WINGs/proplist.c:1700
|
||||
#, c-format
|
||||
msgid "writing to file: %s failed"
|
||||
msgstr "chyba pri zápise do súboru: %s"
|
||||
msgstr "chyba pri zápise do súboru: %s"
|
||||
|
||||
#: ../../WINGs/proplist.c:1664
|
||||
#: ../../WINGs/proplist.c:1708
|
||||
#, c-format
|
||||
msgid "fclose (%s) failed"
|
||||
msgstr "chyba fclose (%s)"
|
||||
|
||||
#: ../../WINGs/proplist.c:1673
|
||||
#: ../../WINGs/proplist.c:1717
|
||||
#, c-format
|
||||
msgid "rename ('%s' to '%s') failed"
|
||||
msgstr "chyba rename ('%s' na '%s')"
|
||||
|
||||
#. something happened with the file. just overwrite it
|
||||
#: ../../WINGs/userdefaults.c:192 ../../WINGs/userdefaults.c:208
|
||||
#: ../../WINGs/userdefaults.c:188 ../../WINGs/userdefaults.c:204
|
||||
#, c-format
|
||||
msgid "cannot read domain from file '%s' when syncing"
|
||||
msgstr "nemo¾no èíta» doménu zo súboru '%s' pri synchronizácii"
|
||||
msgstr "nemožno čítať doménu zo súboru '%s' pri synchronizácii"
|
||||
|
||||
#: ../../WINGs/wcolor.c:198 ../../WINGs/wcolor.c:211 ../../WINGs/wcolor.c:250
|
||||
#: ../../WINGs/wcolor.c:291
|
||||
#: ../../WINGs/wcolor.c:224 ../../WINGs/wcolor.c:236 ../../WINGs/wcolor.c:275
|
||||
#: ../../WINGs/wcolor.c:316
|
||||
#, c-format
|
||||
msgid "could not allocate %s color"
|
||||
msgstr "nemo¾no alokova» %s farbu"
|
||||
msgstr "nemožno alokovať %s farbu"
|
||||
|
||||
#: ../../WINGs/wcolor.c:198
|
||||
#: ../../WINGs/wcolor.c:224
|
||||
msgid "white"
|
||||
msgstr "bielu"
|
||||
|
||||
#: ../../WINGs/wcolor.c:211
|
||||
#: ../../WINGs/wcolor.c:236
|
||||
msgid "black"
|
||||
msgstr "èiernu"
|
||||
msgstr "čiernu"
|
||||
|
||||
#: ../../WINGs/wcolor.c:250
|
||||
#: ../../WINGs/wcolor.c:275
|
||||
msgid "gray"
|
||||
msgstr "¹edú"
|
||||
msgstr "šedú"
|
||||
|
||||
#: ../../WINGs/wcolor.c:291
|
||||
#: ../../WINGs/wcolor.c:316
|
||||
msgid "dark gray"
|
||||
msgstr "tmavo¹edú"
|
||||
msgstr "tmavošedú"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:415
|
||||
#: ../../WINGs/wcolorpanel.c:420
|
||||
msgid "Colors"
|
||||
msgstr "Farby"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:605 ../../WINGs/wcolorpanel.c:2824
|
||||
#: ../../WINGs/wcolorpanel.c:610 ../../WINGs/wcolorpanel.c:2829
|
||||
msgid "Brightness"
|
||||
msgstr "Svetlos»"
|
||||
msgstr "Svetlosť"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:607 ../../WINGs/wcolorpanel.c:683
|
||||
#: ../../WINGs/wcolorpanel.c:716 ../../WINGs/wcolorpanel.c:750
|
||||
#: ../../WINGs/wcolorpanel.c:810 ../../WINGs/wcolorpanel.c:844
|
||||
#: ../../WINGs/wcolorpanel.c:878 ../../WINGs/wcolorpanel.c:913
|
||||
#: ../../WINGs/wcolorpanel.c:2164 ../../WINGs/wcolorpanel.c:2826
|
||||
#: ../../WINGs/wcolorpanel.c:2862 ../../WINGs/wcolorpanel.c:2898
|
||||
#: ../../WINGs/wcolorpanel.c:3746
|
||||
#: ../../WINGs/wcolorpanel.c:612 ../../WINGs/wcolorpanel.c:688
|
||||
#: ../../WINGs/wcolorpanel.c:721 ../../WINGs/wcolorpanel.c:755
|
||||
#: ../../WINGs/wcolorpanel.c:815 ../../WINGs/wcolorpanel.c:849
|
||||
#: ../../WINGs/wcolorpanel.c:883 ../../WINGs/wcolorpanel.c:918
|
||||
#: ../../WINGs/wcolorpanel.c:2169 ../../WINGs/wcolorpanel.c:2831
|
||||
#: ../../WINGs/wcolorpanel.c:2867 ../../WINGs/wcolorpanel.c:2903
|
||||
#: ../../WINGs/wcolorpanel.c:3745
|
||||
msgid "Color Panel: Could not allocate memory"
|
||||
msgstr "Panel farieb: Nemo¾no alokova» pamä»"
|
||||
msgstr "Panel farieb: Nemožno alokovať pamäť"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:680 ../../WINGs/wcolorpanel.c:681
|
||||
#: ../../WINGs/wcolorpanel.c:685 ../../WINGs/wcolorpanel.c:686
|
||||
msgid "Red"
|
||||
msgstr "Èervená"
|
||||
msgstr "Červená"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:713 ../../WINGs/wcolorpanel.c:714
|
||||
#: ../../WINGs/wcolorpanel.c:718 ../../WINGs/wcolorpanel.c:719
|
||||
msgid "Green"
|
||||
msgstr "Zelená"
|
||||
msgstr "Zelená"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:747 ../../WINGs/wcolorpanel.c:748
|
||||
#: ../../WINGs/wcolorpanel.c:752 ../../WINGs/wcolorpanel.c:753
|
||||
msgid "Blue"
|
||||
msgstr "Modrá"
|
||||
msgstr "Modrá"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:807 ../../WINGs/wcolorpanel.c:808
|
||||
#: ../../WINGs/wcolorpanel.c:812 ../../WINGs/wcolorpanel.c:813
|
||||
msgid "Cyan"
|
||||
msgstr "Azúrová"
|
||||
msgstr "Azúrová"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:841 ../../WINGs/wcolorpanel.c:842
|
||||
#: ../../WINGs/wcolorpanel.c:846 ../../WINGs/wcolorpanel.c:847
|
||||
msgid "Magenta"
|
||||
msgstr "Purpurová"
|
||||
msgstr "Purpurová"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:875 ../../WINGs/wcolorpanel.c:876
|
||||
#: ../../WINGs/wcolorpanel.c:880 ../../WINGs/wcolorpanel.c:881
|
||||
msgid "Yellow"
|
||||
msgstr "®ltá"
|
||||
msgstr "Žltá"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:910 ../../WINGs/wcolorpanel.c:911
|
||||
#: ../../WINGs/wcolorpanel.c:915 ../../WINGs/wcolorpanel.c:916
|
||||
msgid "Black"
|
||||
msgstr "Èierna"
|
||||
msgstr "Čierna"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:991
|
||||
#: ../../WINGs/wcolorpanel.c:996
|
||||
msgid "Spectrum"
|
||||
msgstr "Spektrum"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1021
|
||||
#: ../../WINGs/wcolorpanel.c:1026
|
||||
msgid "Palette"
|
||||
msgstr "Paleta"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1027
|
||||
#: ../../WINGs/wcolorpanel.c:1032
|
||||
msgid "New from File..."
|
||||
msgstr "Nová zo súboru..."
|
||||
msgstr "Nová zo súboru..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1028 ../../WINGs/wcolorpanel.c:1076
|
||||
#: ../../WINGs/wcolorpanel.c:1093
|
||||
#: ../../WINGs/wcolorpanel.c:1033 ../../WINGs/wcolorpanel.c:1081
|
||||
#: ../../WINGs/wcolorpanel.c:1098
|
||||
msgid "Rename..."
|
||||
msgstr "Premenova»..."
|
||||
msgstr "Premenovať..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1029 ../../WINGs/wcolorpanel.c:1077
|
||||
#: ../../WINGs/wcolorpanel.c:1094 ../../WINGs/wcolorpanel.c:3321
|
||||
#: ../../WINGs/wcolorpanel.c:1034 ../../WINGs/wcolorpanel.c:1082
|
||||
#: ../../WINGs/wcolorpanel.c:1099 ../../WINGs/wcolorpanel.c:3326
|
||||
msgid "Remove"
|
||||
msgstr "Odstráni»"
|
||||
msgstr "Odstrániť"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1030
|
||||
#: ../../WINGs/wcolorpanel.c:1035
|
||||
msgid "Copy"
|
||||
msgstr "Kopírova»"
|
||||
msgstr "Kopírovať"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1031
|
||||
#: ../../WINGs/wcolorpanel.c:1036
|
||||
msgid "New from Clipboard"
|
||||
msgstr "Nová z nástenky"
|
||||
msgstr "Nová z nástenky"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1052
|
||||
#: ../../WINGs/wcolorpanel.c:1057
|
||||
msgid "X11-Colors"
|
||||
msgstr "Farby X11"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1069
|
||||
#: ../../WINGs/wcolorpanel.c:1074
|
||||
msgid "Color"
|
||||
msgstr "Farba"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1075
|
||||
#: ../../WINGs/wcolorpanel.c:1080
|
||||
msgid "Add..."
|
||||
msgstr "Prida»..."
|
||||
msgstr "Pridať..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1085
|
||||
#: ../../WINGs/wcolorpanel.c:1090
|
||||
msgid "List"
|
||||
msgstr "Zoznam"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1092
|
||||
#: ../../WINGs/wcolorpanel.c:1097
|
||||
msgid "New..."
|
||||
msgstr "Nový..."
|
||||
msgstr "Nový..."
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1231
|
||||
#: ../../WINGs/wcolorpanel.c:1236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Color Panel: Could not create directory %s needed to store configurations"
|
||||
msgstr ""
|
||||
"Panel farieb: Nemo¾no vytvori» adresár %s potrebný na ulo¾enie nastavení"
|
||||
"Panel farieb: Nemožno vytvoriť adresár %s potrebný na uloženie nastavení"
|
||||
|
||||
#. Delete the file, it doesn't belong here
|
||||
#: ../../WINGs/wcolorpanel.c:1237 ../../WINGs/wcolorpanel.c:3207
|
||||
#: ../../WINGs/wcolorpanel.c:3211
|
||||
#: ../../WINGs/wcolorpanel.c:1242 ../../WINGs/wcolorpanel.c:3212
|
||||
#: ../../WINGs/wcolorpanel.c:3216
|
||||
msgid "File Error"
|
||||
msgstr "Chyba súboru"
|
||||
msgstr "Chyba súboru"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1238
|
||||
#: ../../WINGs/wcolorpanel.c:1243
|
||||
msgid "Could not create ColorPanel configuration directory"
|
||||
msgstr "Nemo¾no vytvori» konfiguraèný adresár panelu farieb"
|
||||
msgstr "Nemožno vytvoriť konfiguračný adresár panelu farieb"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1239 ../../WINGs/wcolorpanel.c:3208
|
||||
#: ../../WINGs/wcolorpanel.c:3213 ../../WINGs/wcolorpanel.c:3240
|
||||
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:647
|
||||
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
|
||||
#: ../../WINGs/wfilepanel.c:971 ../../WINGs/wfontpanel.c:709
|
||||
#: ../../WINGs/wcolorpanel.c:1244 ../../WINGs/wcolorpanel.c:3213
|
||||
#: ../../WINGs/wcolorpanel.c:3218 ../../WINGs/wcolorpanel.c:3245
|
||||
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:650
|
||||
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
|
||||
#: ../../WINGs/wfilepanel.c:974 ../../WINGs/wfontpanel.c:751
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1245 ../../WINGs/wcolorpanel.c:1281
|
||||
#: ../../WINGs/wcolorpanel.c:1299
|
||||
#: ../../WINGs/wcolorpanel.c:1250 ../../WINGs/wcolorpanel.c:1286
|
||||
#: ../../WINGs/wcolorpanel.c:1304
|
||||
msgid "Color Panel: Could not find file"
|
||||
msgstr "Panel farieb: Nemo¾no nájs» súbor"
|
||||
msgstr "Panel farieb: Nemožno nájsť súbor"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:1486 ../../WINGs/wcolorpanel.c:1551
|
||||
#: ../../WINGs/wcolorpanel.c:1615
|
||||
#: ../../WINGs/wcolorpanel.c:1491 ../../WINGs/wcolorpanel.c:1556
|
||||
#: ../../WINGs/wcolorpanel.c:1620
|
||||
msgid "Color Panel: X failed request"
|
||||
msgstr "Panel farieb: chyba po¾iadavky X"
|
||||
msgstr "Panel farieb: chyba požiadavky X"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2860
|
||||
#: ../../WINGs/wcolorpanel.c:2865
|
||||
msgid "Saturation"
|
||||
msgstr "Saturácia"
|
||||
msgstr "Saturácia"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:2896
|
||||
#: ../../WINGs/wcolorpanel.c:2901
|
||||
msgid "Hue"
|
||||
msgstr "Odtieò"
|
||||
msgstr "Odtieň"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3146
|
||||
#: ../../WINGs/wcolorpanel.c:3151
|
||||
msgid "Open Palette"
|
||||
msgstr "Otvori» paletu"
|
||||
msgstr "Otvoriť paletu"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3208
|
||||
#: ../../WINGs/wcolorpanel.c:3213
|
||||
msgid "Invalid file format !"
|
||||
msgstr "Nesprávny súborový formát!"
|
||||
msgstr "Nesprávny súborový formát!"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3210
|
||||
#: ../../WINGs/wcolorpanel.c:3215
|
||||
#, c-format
|
||||
msgid "can't remove file %s"
|
||||
msgstr "namo¾no odstráni» súbor %s"
|
||||
msgstr "namožno odstrániť súbor %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3212
|
||||
#: ../../WINGs/wcolorpanel.c:3217
|
||||
msgid "Couldn't remove file from Configuration Directory !"
|
||||
msgstr "Nemo¾no odstráni» súbor z konfiguraèného adresára!"
|
||||
msgstr "Nemožno odstrániť súbor z konfiguračného adresára!"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3239
|
||||
#: ../../WINGs/wcolorpanel.c:3244
|
||||
msgid "Rename"
|
||||
msgstr "Premenova»"
|
||||
msgstr "Premenovať"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3239
|
||||
#: ../../WINGs/wcolorpanel.c:3244
|
||||
msgid "Rename palette to:"
|
||||
msgstr "Premenova» paletu:"
|
||||
msgstr "Premenovať paletu:"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3240 ../../WINGs/wfilepanel.c:259
|
||||
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
|
||||
#: ../../WINGs/wcolorpanel.c:3245 ../../WINGs/wfilepanel.c:259
|
||||
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
|
||||
msgid "Cancel"
|
||||
msgstr "Zru¹i»"
|
||||
msgstr "Zrušiť"
|
||||
|
||||
#. Careful, this palette exists already
|
||||
#: ../../WINGs/wcolorpanel.c:3256 ../../WINGs/wfilepanel.c:760
|
||||
#: ../../WINGs/wcolorpanel.c:3261 ../../WINGs/wfilepanel.c:763
|
||||
msgid "Warning"
|
||||
msgstr "Varovanie"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3257
|
||||
#: ../../WINGs/wcolorpanel.c:3262
|
||||
msgid ""
|
||||
"Palette already exists !\n"
|
||||
"\n"
|
||||
"Overwrite ?"
|
||||
msgstr ""
|
||||
"Paleta u¾ existuje!\n"
|
||||
"Paleta už existuje!\n"
|
||||
"\n"
|
||||
"Prepísa»?"
|
||||
"Prepísať?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
|
||||
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
|
||||
msgid "No"
|
||||
msgstr "Nie"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
|
||||
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
|
||||
msgid "Yes"
|
||||
msgstr "Áno"
|
||||
msgstr "Áno"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3289
|
||||
#: ../../WINGs/wcolorpanel.c:3294
|
||||
#, c-format
|
||||
msgid "Couldn't rename palette %s to %s\n"
|
||||
msgstr "Nemo¾no premenova» paletu %s na %s\n"
|
||||
msgstr "Nemožno premenovať paletu %s na %s\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3315
|
||||
#: ../../WINGs/wcolorpanel.c:3320
|
||||
msgid "This will permanently remove the palette "
|
||||
msgstr "Paleta bude natrvalo zmazaná"
|
||||
msgstr "Paleta bude natrvalo zmazaná"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3318
|
||||
#: ../../WINGs/wcolorpanel.c:3323
|
||||
msgid ""
|
||||
".\n"
|
||||
"\n"
|
||||
@@ -424,31 +430,31 @@ msgid ""
|
||||
msgstr ""
|
||||
".\n"
|
||||
"\n"
|
||||
"Ste si istý, ¾e chcete odstráni» túto paletu?"
|
||||
"Ste si istý, že chcete odstrániť túto paletu?"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3343
|
||||
#: ../../WINGs/wcolorpanel.c:3348
|
||||
#, c-format
|
||||
msgid "Couldn't remove palette %s\n"
|
||||
msgstr "Nemo¾no odstráni» paletu %s\n"
|
||||
msgstr "Nemožno odstrániť paletu %s\n"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3648
|
||||
#: ../../WINGs/wcolorpanel.c:3647
|
||||
#, c-format
|
||||
msgid "Could not open %s"
|
||||
msgstr "Nemo¾no otvori» %s"
|
||||
msgstr "Nemožno otvoriť %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3655
|
||||
#: ../../WINGs/wcolorpanel.c:3654
|
||||
#, c-format
|
||||
msgid "Could not create %s"
|
||||
msgstr "Nemo¾no vytvori» %s"
|
||||
msgstr "Nemožno vytvoriť %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3666
|
||||
#: ../../WINGs/wcolorpanel.c:3665
|
||||
#, c-format
|
||||
msgid "Write error on file %s"
|
||||
msgstr "Chyba zápisu do súboru %s"
|
||||
msgstr "Chyba zápisu do súboru %s"
|
||||
|
||||
#: ../../WINGs/wcolorpanel.c:3711
|
||||
#: ../../WINGs/wcolorpanel.c:3710
|
||||
msgid "Color Panel: Color unspecified"
|
||||
msgstr "Panel farieb: Ne¹pecifikovaná farba"
|
||||
msgstr "Panel farieb: Nešpecifikovaná farba"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:235
|
||||
msgid "Name:"
|
||||
@@ -456,213 +462,258 @@ msgstr "Meno:"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:332 ../../WINGs/wfilepanel.c:396
|
||||
msgid "Open"
|
||||
msgstr "Otvori»"
|
||||
msgstr "Otvoriť"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:350 ../../WINGs/wfilepanel.c:402
|
||||
msgid "Save"
|
||||
msgstr "Ulo¾i»"
|
||||
msgstr "Uložiť"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:562
|
||||
#: ../../WINGs/wfilepanel.c:565
|
||||
#, c-format
|
||||
msgid "WINGs: could not open directory %s\n"
|
||||
msgstr "WINGs: nemo¾no otvori» adresár %s\n"
|
||||
msgstr "WINGs: nemožno otvoriť adresár %s\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:580
|
||||
#: ../../WINGs/wfilepanel.c:583
|
||||
#, c-format
|
||||
msgid "WINGs: could not stat %s\n"
|
||||
msgstr "WINGs: nemo¾no zisti» informácie o %s\n"
|
||||
msgstr "WINGs: nemožno zistiť informácie o %s\n"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:647 ../../WINGs/wfilepanel.c:970
|
||||
#: ../../WINGs/wfontpanel.c:708
|
||||
#: ../../WINGs/wfilepanel.c:650 ../../WINGs/wfilepanel.c:973
|
||||
#: ../../WINGs/wfontpanel.c:750
|
||||
msgid "Error"
|
||||
msgstr "Chyba"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:658
|
||||
#: ../../WINGs/wfilepanel.c:661
|
||||
msgid "Create Directory"
|
||||
msgstr "Vytvori» adresár"
|
||||
msgstr "Vytvoriť adresár"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:659
|
||||
#: ../../WINGs/wfilepanel.c:662
|
||||
msgid "Enter directory name"
|
||||
msgstr "Meno adresára"
|
||||
msgstr "Meno adresára"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:695 ../../WINGs/wfilepanel.c:734
|
||||
#: ../../WINGs/wfilepanel.c:765 ../../WINGs/wfilepanel.c:793
|
||||
#: ../../WINGs/wfilepanel.c:698 ../../WINGs/wfilepanel.c:737
|
||||
#: ../../WINGs/wfilepanel.c:768 ../../WINGs/wfilepanel.c:796
|
||||
msgid "Permission denied."
|
||||
msgstr "Prístup zamietnutý."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:698
|
||||
#, c-format
|
||||
msgid "'%s' already exists."
|
||||
msgstr "'%s' u¾ existuje"
|
||||
msgstr "Prístup zamietnutý."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:701
|
||||
#, c-format
|
||||
msgid "'%s' already exists."
|
||||
msgstr "'%s' už existuje"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:704
|
||||
msgid "Path does not exist."
|
||||
msgstr "Cesta neexistuje."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:731 ../../WINGs/wfilepanel.c:790
|
||||
#: ../../WINGs/wfilepanel.c:734 ../../WINGs/wfilepanel.c:793
|
||||
#, c-format
|
||||
msgid "'%s' does not exist."
|
||||
msgstr "'%s' neexistuje."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:738 ../../WINGs/wfilepanel.c:797
|
||||
#: ../../WINGs/wfilepanel.c:741 ../../WINGs/wfilepanel.c:800
|
||||
msgid "Insufficient memory available."
|
||||
msgstr "Nedostatok pamäti."
|
||||
msgstr "Nedostatok pamäti."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:742 ../../WINGs/wfilepanel.c:801
|
||||
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:804
|
||||
#, c-format
|
||||
msgid "'%s' is on a read-only filesystem."
|
||||
msgstr "'%s' je na súborovom systéme len pre èítanie."
|
||||
msgstr "'%s' je na súborovom systéme len pre čítanie."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:777
|
||||
#: ../../WINGs/wfilepanel.c:804
|
||||
#: ../../WINGs/wfilepanel.c:748 ../../WINGs/wfilepanel.c:780
|
||||
#: ../../WINGs/wfilepanel.c:807
|
||||
#, c-format
|
||||
msgid "Can not delete '%s'."
|
||||
msgstr "Nemo¾no odstráni» '%s'."
|
||||
msgstr "Nemožno odstrániť '%s'."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:752
|
||||
#: ../../WINGs/wfilepanel.c:755
|
||||
#, c-format
|
||||
msgid "Delete directory %s ?"
|
||||
msgstr "Odstráni» adresár %s?"
|
||||
msgstr "Odstrániť adresár %s?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:756
|
||||
#: ../../WINGs/wfilepanel.c:759
|
||||
#, c-format
|
||||
msgid "Delete file %s ?"
|
||||
msgstr "Odstráni» súbor %s?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:768
|
||||
#, c-format
|
||||
msgid "Directory '%s' does not exist."
|
||||
msgstr "Adresár '%s' neexistuje."
|
||||
msgstr "Odstrániť súbor %s?"
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:771
|
||||
#, c-format
|
||||
msgid "Directory '%s' is not empty."
|
||||
msgstr "Adresár '%s' nie je prázdny."
|
||||
msgid "Directory '%s' does not exist."
|
||||
msgstr "Adresár '%s' neexistuje."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:774
|
||||
#, c-format
|
||||
msgid "Directory '%s' is busy."
|
||||
msgstr "Adresár '%s' je pou¾ívaný."
|
||||
msgid "Directory '%s' is not empty."
|
||||
msgstr "Adresár '%s' nie je prázdny."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:787
|
||||
#: ../../WINGs/wfilepanel.c:777
|
||||
#, c-format
|
||||
msgid "Directory '%s' is busy."
|
||||
msgstr "Adresár '%s' je používaný."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:790
|
||||
#, c-format
|
||||
msgid "'%s' is a directory."
|
||||
msgstr "'%s' je adresár."
|
||||
msgstr "'%s' je adresár."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:829
|
||||
#: ../../WINGs/wfilepanel.c:832
|
||||
#, c-format
|
||||
msgid "An error occured browsing '%s'."
|
||||
msgstr "Pri prehliadaní '%s' nastala chyba."
|
||||
msgstr "Pri prehliadaní '%s' nastala chyba."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:833
|
||||
#: ../../WINGs/wfilepanel.c:836
|
||||
#, c-format
|
||||
msgid "'%s' is not a directory."
|
||||
msgstr "'%s' nie je adresár."
|
||||
msgstr "'%s' nie je adresár."
|
||||
|
||||
#: ../../WINGs/wfilepanel.c:970
|
||||
#: ../../WINGs/wfilepanel.c:973
|
||||
msgid "File does not exist."
|
||||
msgstr "Súbor neexistuje."
|
||||
msgstr "Súbor neexistuje."
|
||||
|
||||
#: ../../WINGs/wfont.c:129
|
||||
#: ../../WINGs/wfont.c:324 ../../WINGs/wfont.c:344
|
||||
#, c-format
|
||||
msgid "could not load font %s."
|
||||
msgstr "nemožno načítať font %s."
|
||||
|
||||
#: ../../WINGs/wfont.c:375 ../../WINGs/wfont.c:420 ../../WINGs/wfont.c:475
|
||||
#: ../../WINGs/wfont.c:1337 ../../WINGs/wfont.c:1398 ../../WINGs/wfont.c:1469
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Conversion to widechar failed (possible invalid multibyte sequence): '%s':"
|
||||
"(pos %d)\n"
|
||||
msgstr ""
|
||||
"Konverzia do widechar zlyhala (možno nesprávna multibyte sekvencia): '%s':"
|
||||
"(pos %d)\n"
|
||||
|
||||
#. // remove warning later. or maybe not
|
||||
#: ../../WINGs/wfont.c:591 ../../WINGs/wfont.c:1568
|
||||
#, c-format
|
||||
msgid "Invalid font specification: '%s'\n"
|
||||
msgstr "Chybná špecifikácia fontu: '%s'\n"
|
||||
|
||||
#: ../../WINGs/wfont.c:770 ../../WINGs/wfont.c:780
|
||||
#, c-format
|
||||
msgid "Invalid size specification '%s' in %s. Using default %d\n"
|
||||
msgstr "Chybná špecifikácia veľkosti '%s' v %s. Použije sa implicitná %d\n"
|
||||
|
||||
#: ../../WINGs/wfont.c:824
|
||||
#, c-format
|
||||
msgid "the following character sets are missing in %s:"
|
||||
msgstr "nasledujúce sady znakov chýbajú v %s:"
|
||||
msgstr "nasledujúce sady znakov chýbajú v %s:"
|
||||
|
||||
#: ../../WINGs/wfont.c:136
|
||||
#: ../../WINGs/wfont.c:830
|
||||
#, c-format
|
||||
msgid ""
|
||||
"the string \"%s\" will be used in place of any characters from those sets."
|
||||
msgstr "re»azec \"%s\" bude pou¾itý namiesto znakov z týchto sád."
|
||||
msgstr "reťazec \"%s\" bude použitý namiesto znakov z týchto sád."
|
||||
|
||||
#: ../../WINGs/wfont.c:282 ../../WINGs/wfont.c:318
|
||||
#. is arial a good fallback for multibyte?
|
||||
#: ../../WINGs/wfont.c:1232 ../../WINGs/wfont.c:1247
|
||||
#, c-format
|
||||
msgid "could not load font set %s. Trying fixed."
|
||||
msgstr "nemo¾no naèíta» font %s. Skú¹a sa naèíta» fixed."
|
||||
msgid "could not load font %s. Trying arial."
|
||||
msgstr "nemožno načítať font %s. Skúša sa načítať arial."
|
||||
|
||||
#: ../../WINGs/wfont.c:288 ../../WINGs/wfont.c:324
|
||||
#: ../../WINGs/wfont.c:1239
|
||||
msgid "could not load antialiased font set. Reverting to standard font sets."
|
||||
msgstr "nemožno načítať antialiasovanú sadu fontov. Späť k štandardnej sade fontov."
|
||||
|
||||
#: ../../WINGs/wfont.c:1242
|
||||
#, c-format
|
||||
msgid "could not load FontSet %s. Trying fixed."
|
||||
msgstr "nemožno načítať sadu fontov %s. Skúša sa načítať fixed."
|
||||
|
||||
#: ../../WINGs/wfont.c:1254
|
||||
msgid "could not load antialiased fonts. Reverting to normal fonts."
|
||||
msgstr "nemožno zaviesť antialiasovaný font. Návrat k normálnemu fontu."
|
||||
|
||||
#: ../../WINGs/wfont.c:1257 ../../WINGs/wfont.c:1268
|
||||
#, c-format
|
||||
msgid "could not load font %s. Trying fixed."
|
||||
msgstr "nemo¾no naèíta» font %s. Skú¹a sa naèíta» fixed."
|
||||
msgstr "nemožno načítať font %s. Skúša sa načítať fixed."
|
||||
|
||||
#: ../../WINGs/wfont.c:292 ../../WINGs/wfont.c:328
|
||||
#: ../../WINGs/wfont.c:1262
|
||||
#, c-format
|
||||
msgid "could not load font set %s. Trying fixed."
|
||||
msgstr "nemožno načítať font %s. Skúša sa načítať fixed."
|
||||
|
||||
#: ../../WINGs/wfont.c:1272
|
||||
msgid "could not load fixed font!"
|
||||
msgstr "nemo¾no naèíta» font fixed!"
|
||||
msgstr "nemožno načítať font fixed!"
|
||||
|
||||
#: ../../WINGs/wfont.c:423
|
||||
#: ../../WINGs/wfont.c:1520
|
||||
#, c-format
|
||||
msgid "font description %s is too large."
|
||||
msgstr "popis fontu %s je príli¹ veµký."
|
||||
msgstr "popis fontu %s je príliš veľký."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:205
|
||||
#: ../../WINGs/wfontpanel.c:235
|
||||
msgid "Test!!!"
|
||||
msgstr "Skú¹ka!!!"
|
||||
msgstr "Skúška!!!"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:211
|
||||
#: ../../WINGs/wfontpanel.c:241
|
||||
msgid "Family"
|
||||
msgstr "Rodina"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:222
|
||||
msgid "Typeface"
|
||||
msgstr "Vzhµad"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:233
|
||||
msgid "Size"
|
||||
msgstr "Veµkos»"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:252
|
||||
msgid "Typeface"
|
||||
msgstr "Vzhľad"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:263
|
||||
msgid "Size"
|
||||
msgstr "Veľkosť"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:282
|
||||
msgid "Set"
|
||||
msgstr "Sada"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:257
|
||||
#: ../../WINGs/wfontpanel.c:288
|
||||
msgid "Revert"
|
||||
msgstr "Obráti»"
|
||||
msgstr "Obrátiť"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:709
|
||||
#: ../../WINGs/wfontpanel.c:751
|
||||
msgid "Could not retrieve font list"
|
||||
msgstr "Nemo¾no obdr¾a» zoznam fontov"
|
||||
msgstr "Nemožno obdržať zoznam fontov"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:721
|
||||
#: ../../WINGs/wfontpanel.c:765
|
||||
#, c-format
|
||||
msgid "font name %s is longer than 256, which is invalid."
|
||||
msgstr "meno fontu %s je dlh¹ie ako 256, èo je nesprávne."
|
||||
msgstr "meno fontu %s je dlhšie ako 256, čo je nesprávne."
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:868
|
||||
#: ../../WINGs/wfontpanel.c:913
|
||||
msgid "Roman"
|
||||
msgstr "roman"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:871
|
||||
#: ../../WINGs/wfontpanel.c:916
|
||||
msgid "Italic"
|
||||
msgstr "kurzíva"
|
||||
msgstr "kurzíva"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:873
|
||||
#: ../../WINGs/wfontpanel.c:918
|
||||
msgid "Oblique"
|
||||
msgstr "¹ikmé"
|
||||
msgstr "šikmé"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:875
|
||||
#: ../../WINGs/wfontpanel.c:920
|
||||
msgid "Rev Italic"
|
||||
msgstr "obr. kurzíva"
|
||||
msgstr "obr. kurzíva"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:877
|
||||
#: ../../WINGs/wfontpanel.c:922
|
||||
msgid "Rev Oblique"
|
||||
msgstr "obr. ¹ikmé"
|
||||
msgstr "obr. šikmé"
|
||||
|
||||
#: ../../WINGs/wfontpanel.c:883
|
||||
#: ../../WINGs/wfontpanel.c:928
|
||||
msgid "Normal"
|
||||
msgstr "normálne"
|
||||
msgstr "normálne"
|
||||
|
||||
#: ../../WINGs/widgets.c:415
|
||||
#: ../../WINGs/widgets.c:419
|
||||
#, c-format
|
||||
msgid "WINGs: could not load widget images file: %s"
|
||||
msgstr "WINGs: nemo¾no naèíta» súbor s obrázkami pre widgety: %s"
|
||||
msgstr "WINGs: nemožno načítať súbor s obrázkami pre widgety: %s"
|
||||
|
||||
#: ../../WINGs/widgets.c:761
|
||||
#: ../../WINGs/widgets.c:772
|
||||
msgid ""
|
||||
"could not load any fonts. Make sure your font installationand locale "
|
||||
"could not load any fonts. Make sure your font installation and locale "
|
||||
"settings are correct."
|
||||
msgstr ""
|
||||
"nemo¾no naèíta» ¾iadny font. Ubezpeète sa, ¾e in¹talácia fontov a miestne "
|
||||
"nastavenia sú v poriadku."
|
||||
"nemožno načítať žiadny font. Ubezpečte sa, že inštalácia fontov a miestne "
|
||||
"nastavenia sú v poriadku."
|
||||
|
||||
#: ../../WINGs/wruler.c:189
|
||||
#: ../../WINGs/wruler.c:192
|
||||
msgid "0 inches"
|
||||
msgstr "0 palcov"
|
||||
|
||||
@@ -98,8 +98,8 @@ static Bool caseSensitive = True;
|
||||
|
||||
#define CHECK_BUFFER_SIZE(buf, ptr) \
|
||||
if ((ptr) >= (buf).size-1) {\
|
||||
(buf).size += BUFFERSIZE_INCREMENT;\
|
||||
(buf).str = wrealloc((buf).str, (buf).size);\
|
||||
(buf).size += BUFFERSIZE_INCREMENT;\
|
||||
(buf).str = wrealloc((buf).str, (buf).size);\
|
||||
}
|
||||
|
||||
|
||||
@@ -132,9 +132,9 @@ hashPropList(WMPropList *plist)
|
||||
ctr = (ctr + 1) % sizeof (char *);
|
||||
}
|
||||
/*while (*key) {
|
||||
ret ^= tolower(*key++) << ctr;
|
||||
ctr = (ctr + 1) % sizeof (char *);
|
||||
}*/
|
||||
ret ^= tolower(*key++) << ctr;
|
||||
ctr = (ctr + 1) % sizeof (char *);
|
||||
}*/
|
||||
break;
|
||||
|
||||
case WPLData:
|
||||
@@ -691,6 +691,10 @@ getPLData(PLData *pldata)
|
||||
ok = 0;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
COMPLAIN(pldata, _("non hexdigit character in PropList data"));
|
||||
ok = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -861,7 +865,7 @@ getPropList(PLData *pldata)
|
||||
break;
|
||||
|
||||
case '(':
|
||||
DPUT("Getting PropList srrsy");
|
||||
DPUT("Getting PropList array");
|
||||
plist = getPLArray(pldata);
|
||||
break;
|
||||
|
||||
@@ -1265,7 +1269,7 @@ WMSubtractPLDictionaries(WMPropList *dest, WMPropList *source, Bool recursive)
|
||||
if (WMIsPropListEqualTo(value, dvalue)) {
|
||||
WMRemoveFromPLDictionary(dest, key);
|
||||
} else if (recursive && value->type==WPLDictionary &&
|
||||
dvalue->type==WPLDictionary) {
|
||||
dvalue->type==WPLDictionary) {
|
||||
WMSubtractPLDictionaries(dvalue, value, True);
|
||||
}
|
||||
}
|
||||
@@ -1589,7 +1593,7 @@ WMReadPropListFromFile(char *file)
|
||||
struct stat stbuf;
|
||||
size_t length;
|
||||
|
||||
f = fopen(file, "r");
|
||||
f = fopen(file, "rb");
|
||||
if (!f) {
|
||||
/* let the user print the error message if he really needs to */
|
||||
/*wsyserror(_("could not open domain file '%s' for reading"), file);*/
|
||||
@@ -1611,7 +1615,9 @@ WMReadPropListFromFile(char *file)
|
||||
pldata->lineNumber = 1;
|
||||
|
||||
if (fread(pldata->ptr, length, 1, f) != 1) {
|
||||
wsyserror(_("error reading from file '%s'"), file);
|
||||
if (ferror(f)) {
|
||||
wsyserror(_("error reading from file '%s'"), file);
|
||||
}
|
||||
plist = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
@@ -1668,7 +1674,7 @@ WMWritePropListToFile(WMPropList *plist, char *path, Bool atomically)
|
||||
mask = umask(0);
|
||||
umask(mask);
|
||||
fchmod(fd, 0644 & ~mask);
|
||||
if ((theFile = fdopen(fd, "w")) == NULL) {
|
||||
if ((theFile = fdopen(fd, "wb")) == NULL) {
|
||||
close(fd);
|
||||
}
|
||||
#else
|
||||
|
||||
5
WINGs/python/.cvsignore
Normal file
5
WINGs/python/.cvsignore
Normal file
@@ -0,0 +1,5 @@
|
||||
build
|
||||
WINGs.c
|
||||
wings.so
|
||||
*.pyc
|
||||
*.pyo
|
||||
17
WINGs/python/Makefile
Normal file
17
WINGs/python/Makefile
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
all: WINGs.c
|
||||
python setup.py build
|
||||
ln -sf `find build/ -name wings.so` .
|
||||
|
||||
install: WINGs.c
|
||||
python setup.py install
|
||||
|
||||
clean:
|
||||
rm -rf build dist WINGs.c *.o *~ *.so MANIFEST wings.py *.pyc *.pyo core
|
||||
|
||||
dist:
|
||||
python setup.py sdist
|
||||
|
||||
WINGs.c: WINGs.i
|
||||
swig -python -noproxy `get-wings-flags --cflags` -I.. -o WINGs.c WINGs.i
|
||||
|
||||
20
WINGs/python/README
Normal file
20
WINGs/python/README
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
This is a python wrapper for the WINGs library, that can be used to write python
|
||||
based programs with WINGs-based graphic interfaces.
|
||||
|
||||
This module in not built by default. To build it you need python2.1 or later
|
||||
and swig-1.3.14 or later.
|
||||
|
||||
To build it, first compile and install WINGs. after that run 'make' in this
|
||||
directory. 'make install' will install the python module into the python tree.
|
||||
|
||||
run test.py or WINGs.py for an example.
|
||||
|
||||
the code is not finished yet and may fail to work as expected in some cases.
|
||||
|
||||
Note: currently the module expects WINGs installed to build. it won't take
|
||||
the WINGs libraries and header files from the source tree. You need to
|
||||
install WINGs first. Even if an old version of WINGs is already installed,
|
||||
you still need to install the newly built WINGs, else the python module will
|
||||
be built against the old version.
|
||||
|
||||
699
WINGs/python/WINGs.i
Normal file
699
WINGs/python/WINGs.i
Normal file
@@ -0,0 +1,699 @@
|
||||
%module wings
|
||||
%{
|
||||
#include "WINGs/WINGsP.h"
|
||||
%}
|
||||
|
||||
%include typemaps.i
|
||||
|
||||
// This tells SWIG to treat char ** as a special case
|
||||
%typemap(python, in) char ** {
|
||||
/* Check if is a list */
|
||||
if (PyList_Check($input)) {
|
||||
int size = PyList_Size($input);
|
||||
int i = 0;
|
||||
$1 = (char **) wmalloc((size+1)*sizeof(char *));
|
||||
for (i = 0; i < size; i++) {
|
||||
PyObject *o = PyList_GetItem($input, i);
|
||||
if (PyString_Check(o))
|
||||
$1[i] = PyString_AsString(PyList_GetItem($input, i));
|
||||
else {
|
||||
PyErr_SetString(PyExc_TypeError, "list must contain strings");
|
||||
wfree($1);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
$1[i] = 0;
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "not a list");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
// This cleans up the char ** array we malloc-ed before the function call
|
||||
%typemap(python, freearg) char ** {
|
||||
wfree($1);
|
||||
}
|
||||
// This allows a C function to return a char ** as a Python list
|
||||
%typemap(python, out) char ** {
|
||||
int len,i;
|
||||
len = 0;
|
||||
while ($1[len]) len++;
|
||||
$result = PyList_New(len);
|
||||
for (i = 0; i < len; i++) {
|
||||
PyList_SetItem($result, i, PyString_FromString($1[i]));
|
||||
}
|
||||
}
|
||||
|
||||
// Now for some callbacks
|
||||
%typemap(python, in) PyObject *pyacArgs {
|
||||
if (PyTuple_Check($input)) {
|
||||
if (PyTuple_Size($input) != 3) {
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"wrong number of parameters in tuple. should be 3.");
|
||||
return NULL;
|
||||
} else {
|
||||
PyObject *func = PyTuple_GetItem($input, 1);
|
||||
if (func!=Py_None && !PyCallable_Check(func)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"'action' needs to be a callable object!");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "2nd argument not a tuple!");
|
||||
return NULL;
|
||||
}
|
||||
$1 = $input;
|
||||
}
|
||||
|
||||
%typemap(python, in) PyObject *pycArgs {
|
||||
if (PyTuple_Check($input)) {
|
||||
if (PyTuple_Size($input) != 2) {
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"wrong number of parameters in tuple. should be 2.");
|
||||
return NULL;
|
||||
} else {
|
||||
PyObject *func = PyTuple_GetItem($input, 0);
|
||||
if (func!=Py_None && !PyCallable_Check(func)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"'action' needs to be a callable object!");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "2nd argument not a tuple!");
|
||||
return NULL;
|
||||
}
|
||||
$1 = $input;
|
||||
}
|
||||
|
||||
// Type mapping for grabbing a FILE * from Python
|
||||
%typemap(python, in) FILE * {
|
||||
if (!PyFile_Check($input)) {
|
||||
PyErr_SetString(PyExc_TypeError, "Need a file!");
|
||||
return NULL;
|
||||
}
|
||||
$1 = PyFile_AsFile($input);
|
||||
}
|
||||
|
||||
/* These are for free-ing the return of functions that need to be freed
|
||||
* before returning control to python. */
|
||||
%typemap(python, ret) char* WMGetTextFieldText { wfree($1); };
|
||||
|
||||
|
||||
%include exception.i
|
||||
|
||||
%exception pyWMScreenMainLoop {
|
||||
$function
|
||||
if (PyErr_Occurred())
|
||||
return NULL;
|
||||
}
|
||||
|
||||
%exception pyWMRunModalLoop {
|
||||
$function
|
||||
if (PyErr_Occurred())
|
||||
return NULL;
|
||||
}
|
||||
|
||||
%{
|
||||
static int mainLoopDone = 0;
|
||||
%}
|
||||
|
||||
|
||||
%inline %{
|
||||
WMScreen *pyWMOpenScreen(const char *display, int simpleapp)
|
||||
{
|
||||
Display *dpy = XOpenDisplay(display);
|
||||
|
||||
if (!dpy) {
|
||||
wwarning("WINGs: could not open display %s", XDisplayName(display));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (simpleapp) {
|
||||
return WMCreateSimpleApplicationScreen(dpy);
|
||||
} else {
|
||||
return WMCreateScreen(dpy, DefaultScreen(dpy));
|
||||
}
|
||||
}
|
||||
|
||||
void pyWMScreenMainLoop(WMScreen *scr)
|
||||
{
|
||||
XEvent event;
|
||||
|
||||
while (!PyErr_Occurred() && !mainLoopDone) {
|
||||
WMNextEvent(((W_Screen*)scr)->display, &event);
|
||||
WMHandleEvent(&event);
|
||||
}
|
||||
}
|
||||
|
||||
void pyWMBreakScreenMainLoop(WMScreen *scr)
|
||||
{
|
||||
mainLoopDone = 1;
|
||||
}
|
||||
|
||||
void pyWMRunModalLoop(WMScreen *scr, WMView *view)
|
||||
{
|
||||
int oldModalLoop = scr->modalLoop;
|
||||
WMView *oldModalView = scr->modalView;
|
||||
|
||||
scr->modalView = view;
|
||||
|
||||
scr->modalLoop = 1;
|
||||
while (!PyErr_Occurred() && scr->modalLoop) {
|
||||
XEvent event;
|
||||
|
||||
WMNextEvent(scr->display, &event);
|
||||
WMHandleEvent(&event);
|
||||
}
|
||||
|
||||
scr->modalView = oldModalView;
|
||||
scr->modalLoop = oldModalLoop;
|
||||
}
|
||||
%}
|
||||
|
||||
|
||||
//%rename WMScreenMainLoop _WMScreenMainLoop;
|
||||
//%rename(_WMScreenMainLoop) WMScreenMainLoop;
|
||||
//%rename WMRunModalLoop _WMRunModalLoop;
|
||||
|
||||
|
||||
%{
|
||||
/* These functions match the prototypes of the normal C callback
|
||||
* functions. However, we use the clientdata pointer for holding a
|
||||
* reference to a Python tuple containing (object, funct, clientData).
|
||||
*/
|
||||
static void PythonWMActionCallback(WMWidget *widget, void *cdata)
|
||||
{
|
||||
PyObject *pyobj, *func, *pydata, *arglist, *tuple, *result;
|
||||
|
||||
tuple = (PyObject*) cdata;
|
||||
pyobj = PyTuple_GetItem(tuple, 0);
|
||||
func = PyTuple_GetItem(tuple, 1);
|
||||
if (func && func!=Py_None) {
|
||||
pydata = PyTuple_GetItem(tuple, 2);
|
||||
arglist = Py_BuildValue("(OO)", pyobj, pydata);
|
||||
result = PyEval_CallObject(func, arglist);
|
||||
Py_DECREF(arglist);
|
||||
Py_XDECREF(result);
|
||||
}
|
||||
}
|
||||
|
||||
static void PythonWMCallback(void *data)
|
||||
{
|
||||
PyObject *func, *pydata, *arglist, *tuple, *result;
|
||||
|
||||
tuple = (PyObject*) data;
|
||||
func = PyTuple_GetItem(tuple, 0);
|
||||
if (func && func!=Py_None) {
|
||||
pydata = PyTuple_GetItem(tuple, 1);
|
||||
arglist = Py_BuildValue("(O)", pydata);
|
||||
result = PyEval_CallObject(func, arglist);
|
||||
Py_DECREF(arglist);
|
||||
Py_XDECREF(result);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pyTextFieldDidBeginEditing(WMTextFieldDelegate *self, WMNotification *notif)
|
||||
{
|
||||
PyObject *pyobj, *delegate, *func, *pydata, *arglist, *tuple, *result;
|
||||
int action;
|
||||
|
||||
tuple = (PyObject*) self->data;
|
||||
pyobj = PyTuple_GetItem(tuple, 0);
|
||||
delegate = PyTuple_GetItem(tuple, 1);
|
||||
if (delegate != Py_None) {
|
||||
// should we call PyObject_HasAttrString()?? rather not and let
|
||||
// python raise an exception because the object doesn't has the
|
||||
// attribute
|
||||
func = PyObject_GetAttrString(delegate, "didBeginEditing");
|
||||
if (func!=NULL && func!=Py_None) {
|
||||
pydata = PyObject_GetAttrString(delegate, "data");
|
||||
if (!pydata) {
|
||||
Py_INCREF(Py_None);
|
||||
pydata = Py_None;
|
||||
}
|
||||
action = (int)WMGetNotificationClientData(notif);
|
||||
arglist = Py_BuildValue("(OOi)", pyobj, pydata, action);
|
||||
result = PyEval_CallObject(func, arglist);
|
||||
Py_DECREF(pydata);
|
||||
Py_DECREF(arglist);
|
||||
Py_XDECREF(result);
|
||||
}
|
||||
Py_XDECREF(func);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pyTextFieldDidChange(WMTextFieldDelegate *self, WMNotification *notif)
|
||||
{
|
||||
PyObject *pyobj, *delegate, *func, *pydata, *arglist, *tuple, *result;
|
||||
int action;
|
||||
|
||||
tuple = (PyObject*) self->data;
|
||||
pyobj = PyTuple_GetItem(tuple, 0);
|
||||
delegate = PyTuple_GetItem(tuple, 1);
|
||||
if (delegate != Py_None) {
|
||||
func = PyObject_GetAttrString(delegate, "didChange");
|
||||
if (func!=NULL && func!=Py_None) {
|
||||
pydata = PyObject_GetAttrString(delegate, "data");
|
||||
if (!pydata) {
|
||||
Py_INCREF(Py_None);
|
||||
pydata = Py_None;
|
||||
}
|
||||
action = (int)WMGetNotificationClientData(notif);
|
||||
arglist = Py_BuildValue("(OOi)", pyobj, pydata, action);
|
||||
result = PyEval_CallObject(func, arglist);
|
||||
Py_DECREF(pydata);
|
||||
Py_DECREF(arglist);
|
||||
Py_XDECREF(result);
|
||||
}
|
||||
Py_XDECREF(func);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pyTextFieldDidEndEditing(WMTextFieldDelegate *self, WMNotification *notif)
|
||||
{
|
||||
PyObject *pyobj, *delegate, *func, *pydata, *arglist, *tuple, *result;
|
||||
int action;
|
||||
|
||||
tuple = (PyObject*) self->data;
|
||||
pyobj = PyTuple_GetItem(tuple, 0);
|
||||
delegate = PyTuple_GetItem(tuple, 1);
|
||||
if (delegate != Py_None) {
|
||||
func = PyObject_GetAttrString(delegate, "didEndEditing");
|
||||
if (func!=NULL && func!=Py_None) {
|
||||
pydata = PyObject_GetAttrString(delegate, "data");
|
||||
if (!pydata) {
|
||||
Py_INCREF(Py_None);
|
||||
pydata = Py_None;
|
||||
}
|
||||
action = (int)WMGetNotificationClientData(notif);
|
||||
arglist = Py_BuildValue("(OOi)", pyobj, pydata, action);
|
||||
result = PyEval_CallObject(func, arglist);
|
||||
Py_DECREF(pydata);
|
||||
Py_DECREF(arglist);
|
||||
Py_XDECREF(result);
|
||||
}
|
||||
Py_XDECREF(func);
|
||||
}
|
||||
}
|
||||
|
||||
static Bool
|
||||
pyTextFieldShouldBeginEditing(WMTextFieldDelegate *self, WMTextField *tPtr)
|
||||
{
|
||||
PyObject *pyobj, *delegate, *func, *pydata, *arglist, *tuple, *result;
|
||||
Bool retval = False;
|
||||
|
||||
tuple = (PyObject*) self->data;
|
||||
pyobj = PyTuple_GetItem(tuple, 0);
|
||||
delegate = PyTuple_GetItem(tuple, 1);
|
||||
if (delegate != Py_None) {
|
||||
func = PyObject_GetAttrString(delegate, "shouldBeginEditing");
|
||||
if (func!=NULL && func!=Py_None) {
|
||||
pydata = PyObject_GetAttrString(delegate, "data");
|
||||
if (!pydata) {
|
||||
Py_INCREF(Py_None);
|
||||
pydata = Py_None;
|
||||
}
|
||||
arglist = Py_BuildValue("(OO)", pyobj, pydata);
|
||||
result = PyEval_CallObject(func, arglist);
|
||||
if (result!=Py_None && PyInt_AsLong(result)!=0) {
|
||||
retval = True;
|
||||
}
|
||||
Py_DECREF(pydata);
|
||||
Py_DECREF(arglist);
|
||||
Py_XDECREF(result);
|
||||
}
|
||||
Py_XDECREF(func);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static Bool
|
||||
pyTextFieldShouldEndEditing(WMTextFieldDelegate *self, WMTextField *tPtr)
|
||||
{
|
||||
PyObject *pyobj, *delegate, *func, *pydata, *arglist, *tuple, *result;
|
||||
Bool retval = False;
|
||||
|
||||
tuple = (PyObject*) self->data;
|
||||
pyobj = PyTuple_GetItem(tuple, 0);
|
||||
delegate = PyTuple_GetItem(tuple, 1);
|
||||
if (delegate != Py_None) {
|
||||
func = PyObject_GetAttrString(delegate, "shouldEndEditing");
|
||||
if (func!=NULL && func!=Py_None) {
|
||||
pydata = PyObject_GetAttrString(delegate, "data");
|
||||
if (!pydata) {
|
||||
Py_INCREF(Py_None);
|
||||
pydata = Py_None;
|
||||
}
|
||||
arglist = Py_BuildValue("(OO)", pyobj, pydata);
|
||||
result = PyEval_CallObject(func, arglist);
|
||||
if (result!=Py_None && PyInt_AsLong(result)!=0) {
|
||||
retval = True;
|
||||
}
|
||||
Py_DECREF(pydata);
|
||||
Py_DECREF(arglist);
|
||||
Py_XDECREF(result);
|
||||
}
|
||||
Py_XDECREF(func);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
%}
|
||||
|
||||
%inline %{
|
||||
void pyWMSetWindowCloseAction(WMWindow *win, PyObject *pyacArgs) {
|
||||
WMSetWindowCloseAction(win, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetButtonAction(WMButton *bPtr, PyObject *pyacArgs) {
|
||||
WMSetButtonAction(bPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetScrollerAction(WMScroller *sPtr, PyObject *pyacArgs) {
|
||||
WMSetScrollerAction(sPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetListAction(WMList *lPtr, PyObject *pyacArgs) {
|
||||
WMSetListAction(lPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetListDoubleAction(WMList *lPtr, PyObject *pyacArgs) {
|
||||
WMSetListDoubleAction(lPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetBrowserAction(WMBrowser *bPtr, PyObject *pyacArgs) {
|
||||
WMSetBrowserAction(bPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetBrowserDoubleAction(WMBrowser *bPtr, PyObject *pyacArgs) {
|
||||
WMSetBrowserDoubleAction(bPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetMenuItemAction(WMMenuItem *miPtr, PyObject *pyacArgs) {
|
||||
WMSetMenuItemAction(miPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetPopUpButtonAction(WMPopUpButton *pPtr, PyObject *pyacArgs) {
|
||||
WMSetPopUpButtonAction(pPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetSliderAction(WMSlider *sPtr, PyObject *pyacArgs) {
|
||||
WMSetSliderAction(sPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetRulerMoveAction(WMRuler *rPtr, PyObject *pyacArgs) {
|
||||
WMSetRulerMoveAction(rPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetRulerReleaseAction(WMRuler *rPtr, PyObject *pyacArgs) {
|
||||
WMSetRulerReleaseAction(rPtr, PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void pyWMSetColorPanelAction(WMColorPanel *panel, PyObject *pyacArgs) {
|
||||
WMSetColorPanelAction(panel, (WMAction2*)PythonWMActionCallback, (void*)pyacArgs);
|
||||
Py_INCREF(pyacArgs);
|
||||
}
|
||||
|
||||
void* pyWMAddTimerHandler(int miliseconds, PyObject *pycArgs) {
|
||||
Py_INCREF(pycArgs);
|
||||
return (void*)WMAddTimerHandler(miliseconds, PythonWMCallback,
|
||||
(void*)pycArgs);
|
||||
}
|
||||
|
||||
void* pyWMAddPersistentTimerHandler(int miliseconds, PyObject *pycArgs) {
|
||||
Py_INCREF(pycArgs);
|
||||
return (void*)WMAddPersistentTimerHandler(miliseconds, PythonWMCallback,
|
||||
(void*)pycArgs);
|
||||
}
|
||||
|
||||
/* this doesn't work. we pass (func, data) as cdata at creation time, but
|
||||
* only data at destruction, so it won't find it unless we change
|
||||
* WMDeleteTimerWithClientData() to extract data from the tuple, and this
|
||||
* requires access to the internals of WINGs
|
||||
void pyWMDeleteTimerWithClientData(PyObject *pycData) {
|
||||
WMDeleteTimerWithClientData((void*)pycData);
|
||||
}*/
|
||||
|
||||
void pyWMDeleteTimerHandler(void *handlerID) {
|
||||
WMDeleteTimerHandler((WMHandlerID)handlerID);
|
||||
}
|
||||
|
||||
void* pyWMAddIdleHandler(PyObject *pycArgs) {
|
||||
Py_INCREF(pycArgs);
|
||||
return (void*)WMAddIdleHandler(PythonWMCallback, (void*)pycArgs);
|
||||
}
|
||||
|
||||
void pyWMDeleteIdleHandler(void *handlerID) {
|
||||
WMDeleteIdleHandler((WMHandlerID)handlerID);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
|
||||
%exception pyWMSetTextFieldDelegate {
|
||||
$function
|
||||
if (PyErr_Occurred()) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
%inline %{
|
||||
void pyWMSetTextFieldDelegate(WMTextField *tPtr, PyObject *txtArgs) {
|
||||
WMTextFieldDelegate *td;
|
||||
|
||||
if (!txtArgs || !PyTuple_Check(txtArgs) || PyTuple_Size(txtArgs)!=2) {
|
||||
PyErr_SetString(PyExc_TypeError, "invalid setting of WMTextField "
|
||||
"delegate. Should be '(self, delegate)'");
|
||||
return;
|
||||
}
|
||||
// how do I check if txtArgs[1] is an instance of WMTextFieldDelegate?
|
||||
td = WMGetTextFieldDelegate(tPtr);
|
||||
if (!td) {
|
||||
td = (WMTextFieldDelegate*)wmalloc(sizeof(WMTextFieldDelegate));
|
||||
td->didBeginEditing = pyTextFieldDidBeginEditing;
|
||||
td->didChange = pyTextFieldDidChange;
|
||||
td->didEndEditing = pyTextFieldDidEndEditing;
|
||||
td->shouldBeginEditing = pyTextFieldShouldBeginEditing;
|
||||
td->shouldEndEditing = pyTextFieldShouldEndEditing;
|
||||
} else {
|
||||
Py_XDECREF((PyObject*)td->data);
|
||||
}
|
||||
Py_INCREF(txtArgs);
|
||||
td->data = txtArgs;
|
||||
WMSetTextFieldDelegate(tPtr, td);
|
||||
}
|
||||
%}
|
||||
|
||||
|
||||
%inline %{
|
||||
PyObject* pyWMGetTextFieldDelegate(WMTextField *tPtr) {
|
||||
WMTextFieldDelegate *td;
|
||||
PyObject *result, *tuple;
|
||||
|
||||
td = WMGetTextFieldDelegate(tPtr);
|
||||
if (!td) {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
tuple = (PyObject*)td->data;
|
||||
if (!tuple || !PyTuple_Check(tuple) || PyTuple_Size(tuple)!=2) {
|
||||
PyErr_SetString(PyExc_TypeError, "invalid TextField delegate");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
result = PyTuple_GetItem(tuple, 1);
|
||||
if (!result)
|
||||
result = Py_None;
|
||||
|
||||
Py_INCREF(result);
|
||||
|
||||
return result;
|
||||
}
|
||||
%}
|
||||
|
||||
|
||||
/* ignore structures we will not use */
|
||||
%ignore ConnectionDelegate;
|
||||
|
||||
/* ignore functions we don't need */
|
||||
// should we ignore vararg functions, or just convert them to functions with
|
||||
// a fixed number of parameters?
|
||||
%varargs(char*) wmessage;
|
||||
//%ignore wmessage;
|
||||
%ignore wwarning;
|
||||
%ignore wfatal;
|
||||
%ignore wsyserror;
|
||||
%ignore wsyserrorwithcode;
|
||||
%ignore WMCreatePLArray;
|
||||
%ignore WMCreatePLDictionary;
|
||||
|
||||
%apply int *INPUT { int *argc };
|
||||
|
||||
#define Bool int
|
||||
|
||||
%include "WINGs/WUtil.h"
|
||||
|
||||
/* ignore structures we will not use */
|
||||
|
||||
/* ignore functions we don't need */
|
||||
|
||||
%include "WINGs/WINGs.h"
|
||||
|
||||
|
||||
%{
|
||||
void
|
||||
WHandleEvents()
|
||||
{
|
||||
/* Check any expired timers */
|
||||
W_CheckTimerHandlers();
|
||||
|
||||
/* Do idle and timer stuff while there are no input events */
|
||||
/* Do not wait for input here. just peek to se if input is available */
|
||||
while (!W_HandleInputEvents(False, -1) && W_CheckIdleHandlers()) {
|
||||
/* dispatch timer events */
|
||||
W_CheckTimerHandlers();
|
||||
}
|
||||
|
||||
W_HandleInputEvents(True, -1);
|
||||
|
||||
/* Check any expired timers */
|
||||
W_CheckTimerHandlers();
|
||||
}
|
||||
%}
|
||||
|
||||
|
||||
/* rewrite functions originally defined as macros */
|
||||
%inline %{
|
||||
#undef WMDuplicateArray
|
||||
WMArray* WMDuplicateArray(WMArray* array) {
|
||||
return WMCreateArrayWithArray(array);
|
||||
}
|
||||
|
||||
#undef WMPushInArray
|
||||
void WMPushInArray(WMArray *array, void *item) {
|
||||
WMAddToArray(array, item);
|
||||
}
|
||||
|
||||
#undef WMSetInArray
|
||||
void* WMSetInArray(WMArray *array, int index, void *item) {
|
||||
return WMReplaceInArray(array, index, item);
|
||||
}
|
||||
|
||||
#undef WMRemoveFromArray
|
||||
int WMRemoveFromArray(WMArray *array, void *item) {
|
||||
return WMRemoveFromArrayMatching(array, NULL, item);
|
||||
}
|
||||
|
||||
#undef WMGetFirstInArray
|
||||
int WMGetFirstInArray(WMArray *array, void *item) {
|
||||
return WMFindInArray(array, NULL, item);
|
||||
}
|
||||
|
||||
#undef WMCreateBag
|
||||
WMBag* WMCreateBag(int size) {
|
||||
return WMCreateTreeBag();
|
||||
}
|
||||
|
||||
#undef WMCreateBagWithDestructor
|
||||
WMBag* WMCreateBagWithDestructor(int size, WMFreeDataProc *destructor) {
|
||||
return WMCreateTreeBagWithDestructor(destructor);
|
||||
}
|
||||
|
||||
#undef WMSetInBag
|
||||
void* WMSetInBag(WMBag *bag, int index, void *item) {
|
||||
return WMReplaceInBag(bag, index, item);
|
||||
}
|
||||
|
||||
#undef WMAddItemToTree
|
||||
WMTreeNode* WMAddItemToTree(WMTreeNode *parent, void *item) {
|
||||
return WMInsertItemInTree(parent, -1, item);
|
||||
}
|
||||
|
||||
#undef WMAddNodeToTree
|
||||
WMTreeNode* WMAddNodeToTree(WMTreeNode *parent, WMTreeNode *aNode) {
|
||||
return WMInsertNodeInTree(parent, -1, aNode);
|
||||
}
|
||||
|
||||
#undef WMGetFirstInTree
|
||||
/* Returns first tree node that has data == cdata */
|
||||
WMTreeNode* WMGetFirstInTree(WMTreeNode *aTree, void *cdata) {
|
||||
return WMFindInTree(aTree, NULL, cdata);
|
||||
}
|
||||
|
||||
#undef WMFlushConnection
|
||||
int WMFlushConnection(WMConnection *cPtr) {
|
||||
return WMSendConnectionData(cPtr, NULL);
|
||||
}
|
||||
|
||||
#undef WMGetConnectionQueuedData
|
||||
WMArray* WMGetConnectionQueuedData(WMConnection *cPtr) {
|
||||
return WMGetConnectionUnsentData(cPtr);
|
||||
}
|
||||
|
||||
#undef WMWidgetClass
|
||||
W_Class WMWidgetClass(WMWidget *widget) {
|
||||
return (((W_WidgetType*)(widget))->widgetClass);
|
||||
}
|
||||
|
||||
#undef WMWidgetView
|
||||
WMView* WMWidgetView(WMWidget *widget) {
|
||||
return (((W_WidgetType*)(widget))->view);
|
||||
}
|
||||
|
||||
#undef WMCreateCommandButton
|
||||
WMButton* WMCreateCommandButton(WMWidget *parent) {
|
||||
return WMCreateCustomButton(parent, WBBSpringLoadedMask|WBBPushInMask
|
||||
|WBBPushLightMask|WBBPushChangeMask);
|
||||
}
|
||||
|
||||
#undef WMCreateRadioButton
|
||||
WMButton* WMCreateRadioButton(WMWidget *parent) {
|
||||
return WMCreateButton(parent, WBTRadio);
|
||||
}
|
||||
|
||||
#undef WMCreateSwitchButton
|
||||
WMButton* WMCreateSwitchButton(WMWidget *parent) {
|
||||
return WMCreateButton(parent, WBTSwitch);
|
||||
}
|
||||
|
||||
#undef WMAddListItem
|
||||
WMListItem* WMAddListItem(WMList *lPtr, char *text)
|
||||
{
|
||||
return WMInsertListItem(lPtr, -1, text);
|
||||
}
|
||||
|
||||
#undef WMCreateText
|
||||
WMText* WMCreateText(WMWidget *parent) {
|
||||
return WMCreateTextForDocumentType(parent, NULL, NULL);
|
||||
}
|
||||
|
||||
#undef WMRefreshText
|
||||
void WMRefreshText(WMText *tPtr) {
|
||||
return WMThawText(tPtr);
|
||||
}
|
||||
|
||||
#undef WMClearText
|
||||
void WMClearText(WMText *tPtr) {
|
||||
return WMAppendTextStream(tPtr, NULL);
|
||||
}
|
||||
%}
|
||||
|
||||
|
||||
643
WINGs/python/WINGs.py
Normal file
643
WINGs/python/WINGs.py
Normal file
@@ -0,0 +1,643 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import wings
|
||||
|
||||
# Some useful constants
|
||||
|
||||
False = 0
|
||||
True = 1
|
||||
|
||||
# check about None as action for buttonAction/windowCloseAction ...
|
||||
|
||||
################################################################################
|
||||
# Exceptions
|
||||
################################################################################
|
||||
from exceptions import Exception, StandardError
|
||||
|
||||
class Error(StandardError):
|
||||
pass
|
||||
|
||||
del Exception, StandardError
|
||||
|
||||
class WMTimer:
|
||||
def __init__(self, milliseconds, callback, cdata=None, persistent=False):
|
||||
if persistent:
|
||||
self._o = wings.pyWMAddPersistentTimerHandler(milliseconds, (callback, cdata))
|
||||
else:
|
||||
self._o = wings.pyWMAddTimerHandler(milliseconds, (callback, cdata))
|
||||
self.__WMDeleteTimerHandler = wings.pyWMDeleteTimerHandler
|
||||
|
||||
def __del__(self):
|
||||
self.__WMDeleteTimerHandler(self._o)
|
||||
|
||||
|
||||
class WMPersistentTimer(WMTimer):
|
||||
def __init__(self, milliseconds, callback, cdata=None):
|
||||
WMTimer.__init__(self, milliseconds, callback, cdata, persistent=True)
|
||||
|
||||
|
||||
class WMScreen:
|
||||
__readonly = ('display', 'width', 'height', 'depth')
|
||||
|
||||
def __init__(self, appname, display="", simpleapp=False):
|
||||
wings.WMInitializeApplication(appname, len(sys.argv), sys.argv)
|
||||
self._o = wings.pyWMOpenScreen(display, simpleapp)
|
||||
if not self._o:
|
||||
raise Error, "Cannot open display %s" % display
|
||||
self.__dict__['display'] = wings.WMScreenDisplay(self._o)
|
||||
self.__dict__['width'] = wings.WMScreenWidth(self._o)
|
||||
self.__dict__['height'] = wings.WMScreenHeight(self._o)
|
||||
self.__dict__['depth'] = wings.WMScreenDepth(self._o)
|
||||
|
||||
def __setattr__(self, name ,value):
|
||||
if name in self.__readonly:
|
||||
#raise AttributeError, "'%s' is a read-only WMScreen attribute" % name
|
||||
raise Error, "'%s' is a read-only WMScreen attribute" % name
|
||||
self.__dict__[name] = value
|
||||
|
||||
def __delattr__(self, name):
|
||||
if name in self.__readonly:
|
||||
#raise AttributeError, "'%s' attribute cannot be deleted from WMScreen instance" % name
|
||||
raise Error, "'%s' attribute cannot be deleted from WMScreen instance" % name
|
||||
try:
|
||||
del(self.__dict__[name])
|
||||
except KeyError:
|
||||
raise AttributeError, "%s instance has no attribute '%s'" % \
|
||||
(self.__class__.__name__, name)
|
||||
|
||||
def mainLoop(self):
|
||||
wings.pyWMScreenMainLoop(self._o)
|
||||
|
||||
def breakMainLoop(self):
|
||||
wings.pyWMBreakScreenMainLoop(self._o)
|
||||
|
||||
def runModalLoop(self, view):
|
||||
wings.pyWMRunModalLoop(self._o, view)
|
||||
|
||||
def breakModalLoop(self):
|
||||
wings.WMBreakModalLoop(self._o)
|
||||
|
||||
def size(self):
|
||||
return (self.width, self.height)
|
||||
|
||||
|
||||
class WMView:
|
||||
pass
|
||||
|
||||
|
||||
class WMWidget(WMView):
|
||||
def __init__(self):
|
||||
if self.__class__ == WMWidget:
|
||||
raise Error, "a WMWidget can't be instantiated directly"
|
||||
self._o = None
|
||||
self.__WMDestroyWidget = wings.WMDestroyWidget
|
||||
|
||||
def __del__(self):
|
||||
if self._o is not None:
|
||||
self.__WMDestroyWidget(self._o)
|
||||
|
||||
def resize(self, width, height):
|
||||
wings.WMResizeWidget(self._o, width, height)
|
||||
|
||||
def move(self, x, y):
|
||||
wings.WMMoveWidget(self._o, x, y)
|
||||
|
||||
def realize(self):
|
||||
wings.WMRealizeWidget(self._o)
|
||||
|
||||
def show(self):
|
||||
wings.WMMapWidget(self._o)
|
||||
|
||||
def hide(self):
|
||||
wings.WMUnmapWidget(self._o)
|
||||
|
||||
def redisplay(self):
|
||||
wings.WMRedisplayWidget(self._o)
|
||||
|
||||
def width(self):
|
||||
return wings.WMWidgetWidth(self._o)
|
||||
|
||||
def height(self):
|
||||
return wings.WMWidgetHeight(self._o)
|
||||
|
||||
def screen(self):
|
||||
return wings.WMWidgetScreen(self._o)
|
||||
|
||||
def view(self):
|
||||
return wings.WMWidgetView(self._o)
|
||||
|
||||
def setFocusTo(self, other):
|
||||
wings.WMSetFocusToWidget(other._o)
|
||||
|
||||
|
||||
class WMWindow(WMWidget):
|
||||
def __init__(self, screen, name, style=wings.WMTitledWindowMask
|
||||
|wings.WMClosableWindowMask|wings.WMMiniaturizableWindowMask
|
||||
|wings.WMResizableWindowMask):
|
||||
WMWidget.__init__(self)
|
||||
self._o = wings.WMCreateWindowWithStyle(screen._o, name, style)
|
||||
|
||||
def setMinSize(self, minWidth, minHeight):
|
||||
wings.WMSetWindowMinSize(self._o, minWidth, minHeight)
|
||||
|
||||
def setMaxSize(self, maxWidth, maxHeight):
|
||||
wings.WMSetWindowMaxSize(self._o, maxWidth, maxHeight)
|
||||
|
||||
def setInitialPosition(self, x, y):
|
||||
wings.WMSetWindowInitialPosition(self._o, x, y)
|
||||
|
||||
def setTitle(self, title):
|
||||
wings.WMSetWindowTitle(self._o, title)
|
||||
|
||||
def setCloseAction(self, action, data=None):
|
||||
if action!=None and (not callable(action)):
|
||||
raise Error, "action needs to be a callable object or None"
|
||||
wings.pyWMSetWindowCloseAction(self._o, (self, action, data))
|
||||
|
||||
|
||||
class WMPanel(WMWindow):
|
||||
def __init__(self, owner, name, style=wings.WMTitledWindowMask
|
||||
|wings.WMClosableWindowMask|wings.WMResizableWindowMask):
|
||||
WMWidget.__init__(self)
|
||||
self._o = wings.WMCreatePanelWithStyleForWindow(owner._o, name, style)
|
||||
|
||||
class WMFrame(WMWidget):
|
||||
def __init__(self, parent, title=None):
|
||||
WMWidget.__init__(self)
|
||||
self._o = wings.WMCreateFrame(parent._o)
|
||||
self.setTitle(title)
|
||||
|
||||
def setRelief(self, relief):
|
||||
wings.WMSetFrameRelief(self._o, relief)
|
||||
|
||||
def setTitle(self, title=""):
|
||||
wings.WMSetFrameTitle(self._o, title)
|
||||
|
||||
def setTitlePosition(self, position):
|
||||
wings.WMSetFrameTitlePosition(self._o, position)
|
||||
|
||||
class WMLabel(WMWidget):
|
||||
def __init__(self, parent, text=None):
|
||||
WMWidget.__init__(self)
|
||||
self._o = wings.WMCreateLabel(parent._o)
|
||||
self.setText(text)
|
||||
|
||||
def setWraps(self, flag):
|
||||
# bool(flag) for python2.2
|
||||
wings.WMSetLabelWraps(self._o, flag)
|
||||
|
||||
def setRelief(self, relief):
|
||||
wings.WMSetLabelRelief(self._o, relief)
|
||||
|
||||
def setText(self, text=""):
|
||||
wings.WMSetLabelText(self._o, text)
|
||||
|
||||
def setTextColor(self, color):
|
||||
wings.WMSetLabelTextColor(self._o, color)
|
||||
|
||||
def setFont(self, font):
|
||||
wings.WMSetLabelFont(self._o, font)
|
||||
|
||||
def setTextAlignment(self, alignment):
|
||||
wings.WMSetLabelTextAlignment(self._o, alignment)
|
||||
|
||||
def setImage(self, image):
|
||||
wings.WMSetLabelImage(self._o, image)
|
||||
|
||||
def setImagePosition(self, position):
|
||||
wings.WMSetLabelImagePosition(self._o, position)
|
||||
|
||||
def text(self):
|
||||
return wings.WMGetLabelText(self._o)
|
||||
|
||||
def font(self):
|
||||
return wings.WMGetLabelFont(self._o)
|
||||
|
||||
def image(self):
|
||||
return wings.WMGetLabelImage(self._o)
|
||||
|
||||
|
||||
class WMBox(WMWidget):
|
||||
def __init__(self, parent):
|
||||
WMWidget.__init__(self)
|
||||
self._o = wings.WMCreateBox(parent._o)
|
||||
|
||||
def setHorizontal(self, flag):
|
||||
# bool(flag) for python2.2
|
||||
wings.WMSetBoxHorizontal(self._o, flag)
|
||||
|
||||
def setBorderWidth(self, width):
|
||||
wings.WMSetBoxBorderWidth(self._o, width)
|
||||
|
||||
def addSubview(self, view, expand, fill, minSize, maxSize, space):
|
||||
wings.WMAddBoxSubview(self._o, view, expand, fill, minSize, maxSixe, space)
|
||||
|
||||
def addSubviewAtEnd(self, view, expand, fill, minSize, maxSize, space):
|
||||
wings.WMAddBoxSubviewAtEnd(self._o, view, expand, fill, minSize, maxSixe, space)
|
||||
|
||||
def removeSubview(self, view):
|
||||
wings.WMRemoveBoxSubview(self._o, view)
|
||||
|
||||
|
||||
class WMButton(WMWidget): # not for user instantiation
|
||||
def __init__(self, parent):
|
||||
WMWidget.__init__(self)
|
||||
if self.__class__ == WMButton:
|
||||
raise Error, "a WMButton can't be instantiated directly"
|
||||
|
||||
|
||||
def setText(self, text=""):
|
||||
wings.WMSetButtonText(self._o, text)
|
||||
|
||||
def setAction(self, action, data=None):
|
||||
if action!=None and (not callable(action)):
|
||||
raise Error, "action needs to be a callable object or None"
|
||||
wings.pyWMSetButtonAction(self._o, (self, action, data))
|
||||
|
||||
def performClick(self):
|
||||
wings.WMPerformButtonClick(self._o)
|
||||
|
||||
def setEnabled(self, flag):
|
||||
# bool(flag) for python2.2
|
||||
wings.WMSetButtonEnabled(self._o, flag)
|
||||
|
||||
def isEnabled(self):
|
||||
return wings.WMGetButtonEnabled(self._o)
|
||||
|
||||
def setImageDimsWhenDisabled(self, flag):
|
||||
# bool(flag)
|
||||
wings.WMSetButtonImageDimsWhenDisabled(self._o, flag)
|
||||
|
||||
def setImage(self, image):
|
||||
wings.WMSetButtonImage(self_.o, image)
|
||||
|
||||
def setAlternateImage(self, image):
|
||||
wings.WMSetButtonAltImage(self._o, image)
|
||||
|
||||
def setImagePosition(self, position):
|
||||
wings.WMSetButtonImagePosition(self._o, position)
|
||||
|
||||
def setImageDefault(self):
|
||||
wings.WMSetButtonImageDefault(self._o)
|
||||
|
||||
|
||||
class WMCommandButton(WMButton):
|
||||
def __init__(self, parent):
|
||||
WMButton.__init__(self, parent)
|
||||
self._o = wings.WMCreateCommandButton(parent._o)
|
||||
|
||||
|
||||
class WMSwitchButton(WMButton):
|
||||
def __init__(self, parent):
|
||||
WMButton.__init__(self, parent)
|
||||
self._o = wings.WMCreateSwitchButton(parent._o)
|
||||
|
||||
|
||||
class WMRadioButton(WMButton):
|
||||
def __init__(self, parent, group=None):
|
||||
WMButton.__init__(self, parent)
|
||||
self._o = wings.WMCreateRadioButton(parent._o)
|
||||
if group:
|
||||
wings.WMGroupButtons(group._o, self._o)
|
||||
|
||||
|
||||
class WMListItem:
|
||||
pass
|
||||
|
||||
|
||||
class WMList(WMWidget):
|
||||
def __init__(self, parent):
|
||||
WMWidget.__init__(self)
|
||||
self._o = wings.WMCreateList(parent._o)
|
||||
|
||||
def allowEmptySelection(self, flag):
|
||||
# bool(flag)
|
||||
wings.WMSetListAllowEmptySelection(self._o, flag)
|
||||
|
||||
def allowMultipleSelection(self, flag):
|
||||
# bool(flag)
|
||||
wings.WMSetListAllowMultipleSelection(self._o, flag)
|
||||
|
||||
def addItem(self, item):
|
||||
wings.WMAddListItem(self._o, item)
|
||||
|
||||
def insertItem(self, row, item):
|
||||
wings.WMInsertListItem(self._o, row, item)
|
||||
|
||||
def sortItems(self):
|
||||
wings.WMSortListItems(self._o)
|
||||
|
||||
def rowWithTitle(self, title):
|
||||
return wings.WMFindRowOfListItemWithTitle(self._o, title)
|
||||
|
||||
def selectedItemRow(self):
|
||||
return wings.WMGetListSelectedItemRow(self._o)
|
||||
|
||||
def selectedItem(self):
|
||||
return wings.WMGetListSelectedItem(self._o)
|
||||
|
||||
def removeItem(self, index):
|
||||
wings.WMRemoveListItem(self._o, index)
|
||||
|
||||
def selectItem(self, index):
|
||||
wings.WMSelectListItem(self._o, index)
|
||||
|
||||
def unselectItem(self, index):
|
||||
wings.WMUnselectListItem(self._o, index)
|
||||
|
||||
|
||||
class WMTextFieldDelegate:
|
||||
__callbacks = ('didBeginEditing', 'didChange', 'didEndEditing',
|
||||
'shouldBeginEditing', 'shouldEndEditing')
|
||||
|
||||
def __init__(self):
|
||||
self.__dict__['data'] = None
|
||||
self.__dict__['didBeginEditing'] = None
|
||||
self.__dict__['didChange'] = None
|
||||
self.__dict__['didEndEditing'] = None
|
||||
self.__dict__['shouldBeginEditing'] = None
|
||||
self.__dict__['shouldEndEditing'] = None
|
||||
|
||||
def __setattr__(self, name ,value):
|
||||
if name in self.__callbacks and value!=None and (not callable(value)):
|
||||
#raise AttributeError, "%s.%s needs to be a callable object or None" % (self.__class__.__name__, name)
|
||||
raise Error, "%s.%s needs to be a callable object or None" % (self.__class__.__name__, name)
|
||||
else:
|
||||
self.__dict__[name] = value
|
||||
|
||||
|
||||
class WMTextField(WMWidget):
|
||||
def __init__(self, parent, text=""):
|
||||
WMWidget.__init__(self)
|
||||
self._o = wings.WMCreateTextField(parent._o)
|
||||
wings.WMSetTextFieldText(self._o, text)
|
||||
|
||||
def setDelegate(self, delegate):
|
||||
if delegate.__class__ != WMTextFieldDelegate:
|
||||
raise Error, "textfield delegate must be of type 'WMTextFieldDelegate'"
|
||||
wings.pyWMSetTextFieldDelegate(self._o, (self, delegate))
|
||||
|
||||
def delegate(self):
|
||||
return wings.pyWMGetTextFieldDelegate(self._o)
|
||||
|
||||
def text(self):
|
||||
return wings.WMGetTextFieldText(self._o)
|
||||
|
||||
def setEditable(self, flag):
|
||||
# bool(flag)
|
||||
wings.WMSetTextFieldEditable(self._o, flag)
|
||||
|
||||
def setBordered(self, flag):
|
||||
# bool(flag)
|
||||
wings.WMSetTextFieldBordered(self._o, flag)
|
||||
|
||||
def setBeveled(self, flag):
|
||||
# bool(flag)
|
||||
wings.WMSetTextFieldBeveled(self._o, flag)
|
||||
|
||||
def setSecure(self, flag):
|
||||
# bool(flag)
|
||||
wings.WMSetTextFieldSecure(self._o, flag)
|
||||
|
||||
def setCursorPosition(self, position):
|
||||
wings.WMSetTextFieldCursorPosition(self._o, position)
|
||||
|
||||
def setNextText(self, next):
|
||||
wings.WMSetTextFieldNextTextField(self._o, next._o)
|
||||
|
||||
def setPreviousText(self, previous):
|
||||
wings.WMSetTextFieldPrevTextField(self._o, previous._o)
|
||||
|
||||
def setTextAlignment(self, alignment):
|
||||
wings.WMSetTextFieldAlignment(self._o, alignment)
|
||||
|
||||
def isEditable(self):
|
||||
return wings.WMGetTextFieldEditable(self._o)
|
||||
|
||||
def insertText(self, text, position):
|
||||
wings.WMInsertTextFieldText(self._o, text, position)
|
||||
|
||||
def deleteText(self, start, count):
|
||||
wings.WMDeleteTextFieldRange(self._o, wings.wmkrange(start, count))
|
||||
|
||||
def selectText(self, start, count):
|
||||
wings.WMSelectTextFieldRange(self._o, wings.wmkrange(start, count))
|
||||
|
||||
def setFont(self, font):
|
||||
wings.WMSetTextFieldFont(self._o, font)
|
||||
|
||||
def font(self):
|
||||
return wings.WMGetTextFieldFont(self._o)
|
||||
|
||||
|
||||
################################################################################
|
||||
# wrap the WINGs constants so we don't need wings.constant_name
|
||||
################################################################################
|
||||
|
||||
# WMWindow title style
|
||||
WMTitledWindowMask = wings.WMTitledWindowMask
|
||||
WMClosableWindowMask = wings.WMClosableWindowMask
|
||||
WMMiniaturizableWindowMask = wings.WMMiniaturizableWindowMask
|
||||
WMResizableWindowMask = wings.WMResizableWindowMask
|
||||
|
||||
# WMFrame title positions
|
||||
WTPNoTitle = wings.WTPNoTitle
|
||||
WTPAboveTop = wings.WTPAboveTop
|
||||
WTPAtTop = wings.WTPAtTop
|
||||
WTPBelowTop = wings.WTPBelowTop
|
||||
WTPAboveBottom = wings.WTPAboveBottom
|
||||
WTPAtBottom = wings.WTPAtBottom
|
||||
WTPBelowBottom = wings.WTPBelowBottom
|
||||
|
||||
# Alingments
|
||||
WALeft = wings.WALeft
|
||||
WACenter = wings.WACenter
|
||||
WARight = wings.WARight
|
||||
WAJustified = wings.WAJustified # not valid for textfields
|
||||
|
||||
# Image positions
|
||||
WIPNoImage = wings.WIPNoImage
|
||||
WIPImageOnly = wings.WIPImageOnly
|
||||
WIPLeft = wings.WIPLeft
|
||||
WIPRight = wings.WIPRight
|
||||
WIPBelow = wings.WIPBelow
|
||||
WIPAbove = wings.WIPAbove
|
||||
WIPOverlaps = wings.WIPOverlaps
|
||||
|
||||
# Relief types
|
||||
WRFlat = wings.WRFlat
|
||||
WRSimple = wings.WRSimple
|
||||
WRRaised = wings.WRRaised
|
||||
WRSunken = wings.WRSunken
|
||||
WRGroove = wings.WRGroove
|
||||
WRRidge = wings.WRRidge
|
||||
WRPushed = wings.WRPushed
|
||||
|
||||
|
||||
# TextField events
|
||||
WMReturnTextMovement = wings.WMReturnTextMovement
|
||||
WMEscapeTextMovement = wings.WMEscapeTextMovement
|
||||
WMIllegalTextMovement = wings.WMIllegalTextMovement
|
||||
WMTabTextMovement = wings.WMTabTextMovement
|
||||
WMBacktabTextMovement = wings.WMBacktabTextMovement
|
||||
WMLeftTextMovement = wings.WMLeftTextMovement
|
||||
WMRightTextMovement = wings.WMRightTextMovement
|
||||
WMUpTextMovement = wings.WMUpTextMovement
|
||||
WMDownTextMovement = wings.WMDownTextMovement
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
def quit(obj, data):
|
||||
#sys.exit()
|
||||
scr.breakMainLoop()
|
||||
|
||||
def click(btn, list):
|
||||
print win.width(), win.height()
|
||||
print list.selectedItemRow()
|
||||
win2.show()
|
||||
scr.runModalLoop(win2.view())
|
||||
print txt2.text()
|
||||
|
||||
def sayhi(btn, data):
|
||||
print "hi"
|
||||
|
||||
def breakLoop(btn, data):
|
||||
#sys.exit()
|
||||
scr.breakModalLoop()
|
||||
win2.hide()
|
||||
|
||||
def dc(object, data, action):
|
||||
print "didChange:", object, data, action
|
||||
|
||||
def dbe(object, data, action):
|
||||
print "didBeginEditing:", object, data, action
|
||||
|
||||
def dee(object, data, action):
|
||||
if action == wings.WMReturnTextMovement:
|
||||
if object == txt:
|
||||
object.setFocusTo(txt2)
|
||||
else:
|
||||
object.setFocusTo(txt)
|
||||
print "didEndEditing:", object, data, action, object.text()
|
||||
|
||||
def tcb(one):
|
||||
old = list.selectedItemRow()
|
||||
list.selectItem(list.index)
|
||||
list.unselectItem(old)
|
||||
list.index = (list.index+1) % 3
|
||||
#print one
|
||||
|
||||
scr = WMScreen("foobar")
|
||||
win = WMWindow(scr, "aWindow")
|
||||
win.setCloseAction(quit)
|
||||
win.setTitle("test window")
|
||||
win.resize(400, 180)
|
||||
win.setInitialPosition((scr.width-win.width())/2, (scr.height-win.height())/2)
|
||||
|
||||
btn = WMCommandButton(win)
|
||||
btn.setText("Click Me")
|
||||
btn.resize(100, 25)
|
||||
btn.move(20, 20)
|
||||
btn.show()
|
||||
|
||||
sw = WMSwitchButton(win)
|
||||
sw.setText("Some option")
|
||||
sw.resize(100, 25)
|
||||
sw.move(20, 50)
|
||||
sw.show()
|
||||
|
||||
radios = []
|
||||
r = None
|
||||
j = 0
|
||||
for i in ["One", "Two", "Four"]:
|
||||
r = WMRadioButton(win, r)
|
||||
radios.append(r)
|
||||
r.show()
|
||||
r.setText(i)
|
||||
r.move(20, 70+j*25)
|
||||
r.resize(100, 25)
|
||||
j=j+1
|
||||
|
||||
sw.setAction(sayhi)
|
||||
|
||||
list = WMList(win)
|
||||
list.resize(100,100)
|
||||
list.move(130, 20)
|
||||
list.addItem("one")
|
||||
list.addItem("two")
|
||||
list.addItem("three")
|
||||
list.allowMultipleSelection(1)
|
||||
list.show()
|
||||
list.index = 0
|
||||
|
||||
txtdel = WMTextFieldDelegate()
|
||||
txtdel.data = 'mydata'
|
||||
txtdel.didBeginEditing = dbe
|
||||
txtdel.didEndEditing = dee
|
||||
txtdel.didChange = dc
|
||||
|
||||
txt = WMTextField(win, "abc")
|
||||
txt.resize(95, 20)
|
||||
txt.move(295, 20)
|
||||
txt.setDelegate(txtdel)
|
||||
txt.show()
|
||||
txt2 = WMTextField(win, "01234567890")
|
||||
txt2.resize(95, 20)
|
||||
txt2.move(295, 45)
|
||||
txt2.setDelegate(txtdel)
|
||||
txt2.show()
|
||||
|
||||
txt.setNextText(txt2)
|
||||
txt2.setNextText(txt)
|
||||
|
||||
label = WMLabel(win, "Text1:")
|
||||
label.setTextAlignment(WARight)
|
||||
label.move(240, 20)
|
||||
label.resize(55, 20)
|
||||
label.show()
|
||||
|
||||
label2 = WMLabel(win, "mytext2:")
|
||||
label2.setTextAlignment(WARight)
|
||||
label2.move(240, 45)
|
||||
label2.resize(55, 20)
|
||||
label2.show()
|
||||
|
||||
btn.setAction(click, list)
|
||||
|
||||
frame = WMFrame(win, "My Frame")
|
||||
frame.resize(150, 50)
|
||||
frame.move(240, 70)
|
||||
#frame.setRelief(WRPushed)
|
||||
frame.show()
|
||||
|
||||
ebtn = WMCommandButton(win)
|
||||
ebtn.setText("Exit")
|
||||
ebtn.resize(100, 25)
|
||||
ebtn.move(290, 147)
|
||||
ebtn.setAction(quit)
|
||||
ebtn.show()
|
||||
|
||||
win.realize()
|
||||
win.show()
|
||||
|
||||
timer = WMPersistentTimer(1000, tcb, win)
|
||||
#del(timer)
|
||||
#timer.delete()
|
||||
|
||||
win2 = WMPanel(win, "anotherWindow", WMTitledWindowMask)
|
||||
win2.setTitle("transient test window")
|
||||
win2.resize(150, 50)
|
||||
win2.setInitialPosition((scr.width-win2.width())/2, (scr.height-win2.height())/2)
|
||||
|
||||
btn7 = WMCommandButton(win2)
|
||||
btn7.setText("Dismiss")
|
||||
btn7.resize(100, 25)
|
||||
btn7.move(27, 10)
|
||||
btn7.show()
|
||||
btn7.setAction(breakLoop)
|
||||
|
||||
win2.realize()
|
||||
|
||||
scr.mainLoop()
|
||||
|
||||
71
WINGs/python/setup.py
Executable file
71
WINGs/python/setup.py
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""Setup script for the WINGs module distribution."""
|
||||
|
||||
import os, sys
|
||||
from distutils.core import setup
|
||||
from distutils.extension import Extension
|
||||
|
||||
## Get the include dirs
|
||||
wings = os.popen("get-wings-flags --cflags", "r")
|
||||
flags = wings.read().split()
|
||||
include_dirs = [x[2:] for x in flags]
|
||||
#include_dirs += [".."]
|
||||
wings.close()
|
||||
|
||||
## Get the library dirs
|
||||
wings = os.popen("get-wings-flags --ldflags", "r")
|
||||
flags = wings.read().split()
|
||||
library_dirs = [x[2:] for x in flags]
|
||||
#library_dirs += [".."]
|
||||
wings.close()
|
||||
|
||||
## Get the libraries
|
||||
wings = os.popen("get-wings-flags --libs", "r")
|
||||
flags = wings.read().split()
|
||||
libraries = [x[2:] for x in flags]
|
||||
wings.close()
|
||||
|
||||
runtime_library_dirs = []
|
||||
extra_objects = []
|
||||
extra_compile_args = ['-Wno-strict-prototypes', '-Wno-unused']
|
||||
|
||||
long_description = \
|
||||
"""Python interface to the WINGs library
|
||||
|
||||
Python WINGs is an interface to WINGs, a small widget set with the
|
||||
N*XTSTEP look and feel. It's API is inspired in OpenStep and it's
|
||||
implementation borrows some ideas from Tk. It has a reasonable set of
|
||||
widgets, sufficient for building small applications (like a CDPlayer
|
||||
or hacking something like rxvt). It also has other functions that are
|
||||
usefull for applications, like a User Defaults alike configuration
|
||||
manager and a notification system.
|
||||
|
||||
"""
|
||||
|
||||
setup (# Distribution meta-data
|
||||
name = "Python-WINGs",
|
||||
version = "0.81.0",
|
||||
description = "A python interface to WINGs",
|
||||
long_description=long_description,
|
||||
author = "Dan Pascu",
|
||||
author_email = "dan@windowmaker.org",
|
||||
license = "GPL",
|
||||
platforms = "ALL",
|
||||
url = "http://windowmaker.org/",
|
||||
|
||||
# Description of the modules and packages in the distribution
|
||||
|
||||
py_modules = ["WINGs"],
|
||||
|
||||
ext_modules = [Extension(
|
||||
name='wings',
|
||||
sources=['WINGs.c'],
|
||||
include_dirs=include_dirs,
|
||||
library_dirs=library_dirs,
|
||||
runtime_library_dirs=runtime_library_dirs,
|
||||
libraries=libraries,
|
||||
extra_objects=extra_objects,
|
||||
extra_compile_args=extra_compile_args,
|
||||
)],
|
||||
)
|
||||
159
WINGs/python/test.py
Executable file
159
WINGs/python/test.py
Executable file
@@ -0,0 +1,159 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
from WINGs import *
|
||||
|
||||
if __name__ == "__main__":
|
||||
def quit(obj, data):
|
||||
#sys.exit()
|
||||
scr.breakMainLoop()
|
||||
|
||||
def click(btn, list):
|
||||
print win.width(), win.height()
|
||||
print list.selectedItemRow()
|
||||
win2.show()
|
||||
scr.runModalLoop(win2.view())
|
||||
print txt2.text()
|
||||
|
||||
def sayhi(btn, data):
|
||||
print "hi"
|
||||
|
||||
def breakLoop(btn, data):
|
||||
#sys.exit()
|
||||
scr.breakModalLoop()
|
||||
win2.hide()
|
||||
|
||||
def dc(object, data, action):
|
||||
print "didChange:", object, data, action
|
||||
|
||||
def dbe(object, data, action):
|
||||
print "didBeginEditing:", object, data, action
|
||||
|
||||
def dee(object, data, action):
|
||||
if action == wings.WMReturnTextMovement:
|
||||
if object == txt:
|
||||
object.setFocusTo(txt2)
|
||||
else:
|
||||
object.setFocusTo(txt)
|
||||
print "didEndEditing:", object, data, action, object.text()
|
||||
|
||||
def tcb(one):
|
||||
old = list.selectedItemRow()
|
||||
list.selectItem(list.index)
|
||||
list.unselectItem(old)
|
||||
list.index = (list.index+1) % 3
|
||||
#print one
|
||||
|
||||
scr = WMScreen("foobar")
|
||||
win = WMWindow(scr, "aWindow")
|
||||
win.setCloseAction(quit)
|
||||
win.setTitle("test window")
|
||||
win.resize(400, 180)
|
||||
win.setInitialPosition((scr.width-win.width())/2, (scr.height-win.height())/2)
|
||||
|
||||
btn = WMCommandButton(win)
|
||||
btn.setText("Click Me")
|
||||
btn.resize(100, 25)
|
||||
btn.move(20, 20)
|
||||
btn.show()
|
||||
|
||||
sw = WMSwitchButton(win)
|
||||
sw.setText("Some option")
|
||||
sw.resize(100, 25)
|
||||
sw.move(20, 50)
|
||||
sw.show()
|
||||
|
||||
radios = []
|
||||
r = None
|
||||
j = 0
|
||||
for i in ["One", "Two", "Four"]:
|
||||
r = WMRadioButton(win, r)
|
||||
radios.append(r)
|
||||
r.show()
|
||||
r.setText(i)
|
||||
r.move(20, 70+j*25)
|
||||
r.resize(100, 25)
|
||||
j=j+1
|
||||
|
||||
sw.setAction(sayhi)
|
||||
|
||||
list = WMList(win)
|
||||
list.resize(100,100)
|
||||
list.move(130, 20)
|
||||
list.addItem("one")
|
||||
list.addItem("two")
|
||||
list.addItem("three")
|
||||
list.allowMultipleSelection(1)
|
||||
list.show()
|
||||
list.index = 0
|
||||
|
||||
txtdel = WMTextFieldDelegate()
|
||||
txtdel.data = 'mydata'
|
||||
txtdel.didBeginEditing = dbe
|
||||
txtdel.didEndEditing = dee
|
||||
txtdel.didChange = dc
|
||||
|
||||
txt = WMTextField(win)
|
||||
txt.resize(95, 20)
|
||||
txt.move(295, 20)
|
||||
txt.setDelegate(txtdel)
|
||||
txt.show()
|
||||
txt2 = WMTextField(win, "01234567890")
|
||||
txt2.resize(95, 20)
|
||||
txt2.move(295, 45)
|
||||
txt2.setDelegate(txtdel)
|
||||
txt2.show()
|
||||
|
||||
txt.setNextText(txt2)
|
||||
txt2.setNextText(txt)
|
||||
|
||||
label = WMLabel(win, "Text1:")
|
||||
label.setTextAlignment(WARight)
|
||||
label.move(240, 20)
|
||||
label.resize(55, 20)
|
||||
label.show()
|
||||
|
||||
label2 = WMLabel(win, "mytext2:")
|
||||
label2.setTextAlignment(WARight)
|
||||
label2.move(240, 45)
|
||||
label2.resize(55, 20)
|
||||
label2.show()
|
||||
|
||||
btn.setAction(click, list)
|
||||
|
||||
frame = WMFrame(win, "My Frame")
|
||||
frame.resize(150, 50)
|
||||
frame.move(240, 70)
|
||||
#frame.setRelief(WRPushed)
|
||||
frame.show()
|
||||
|
||||
ebtn = WMCommandButton(win)
|
||||
ebtn.setText("Exit")
|
||||
ebtn.resize(100, 25)
|
||||
ebtn.move(290, 147)
|
||||
ebtn.setAction(quit)
|
||||
ebtn.show()
|
||||
|
||||
win.realize()
|
||||
win.show()
|
||||
|
||||
timer = WMPersistentTimer(1000, tcb, win)
|
||||
#del(timer)
|
||||
#timer.delete()
|
||||
|
||||
win2 = WMPanel(win, "anotherWindow", WMTitledWindowMask)
|
||||
win2.setTitle("transient test window")
|
||||
win2.resize(150, 50)
|
||||
win2.setInitialPosition((scr.width-win2.width())/2, (scr.height-win2.height())/2)
|
||||
|
||||
btn7 = WMCommandButton(win2)
|
||||
btn7.setText("Dismiss")
|
||||
btn7.resize(100, 25)
|
||||
btn7.move(27, 10)
|
||||
btn7.show()
|
||||
btn7.setAction(breakLoop)
|
||||
|
||||
win2.realize()
|
||||
|
||||
scr.mainLoop()
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
#define MAX_PROPERTY_SIZE 8*1024
|
||||
|
||||
|
||||
char *WMSelectionOwnerDidChangeNotification = "WMSelectionOwnerDidChange";
|
||||
|
||||
|
||||
typedef struct SelectionHandler {
|
||||
WMView *view;
|
||||
Atom selection;
|
||||
@@ -17,8 +20,8 @@ typedef struct SelectionHandler {
|
||||
void *data;
|
||||
|
||||
struct {
|
||||
unsigned delete_pending:1;
|
||||
unsigned done_pending:1;
|
||||
unsigned delete_pending:1;
|
||||
unsigned done_pending:1;
|
||||
} flags;
|
||||
} SelectionHandler;
|
||||
|
||||
@@ -32,15 +35,20 @@ typedef struct SelectionCallback {
|
||||
void *data;
|
||||
|
||||
struct {
|
||||
unsigned delete_pending:1;
|
||||
unsigned done_pending:1;
|
||||
unsigned delete_pending:1;
|
||||
unsigned done_pending:1;
|
||||
} flags;
|
||||
} SelectionCallback;
|
||||
|
||||
|
||||
WMArray *selCallbacks = NULL;
|
||||
|
||||
WMArray *selHandlers = NULL;
|
||||
static WMArray *selCallbacks = NULL;
|
||||
|
||||
static WMArray *selHandlers = NULL;
|
||||
|
||||
static Bool gotXError = False;
|
||||
|
||||
|
||||
|
||||
|
||||
void
|
||||
@@ -53,25 +61,30 @@ WMDeleteSelectionHandler(WMView *view, Atom selection, Time timestamp)
|
||||
|
||||
if (!selHandlers)
|
||||
return;
|
||||
|
||||
|
||||
WM_ITERATE_ARRAY(selHandlers, handler, iter) {
|
||||
if (handler->view == view
|
||||
&& (handler->selection == selection || selection == None)
|
||||
&& (handler->timestamp == timestamp || timestamp == CurrentTime)) {
|
||||
|
||||
if (handler->flags.done_pending) {
|
||||
handler->flags.delete_pending = 1;
|
||||
return;
|
||||
}
|
||||
WMRemoveFromArray(selHandlers, handler);
|
||||
break;
|
||||
/*//printf("deleting selection handler for %d", win);*/
|
||||
|
||||
WM_ITERATE_ARRAY(selHandlers, handler, iter) {
|
||||
if (handler->view == view
|
||||
&& (handler->selection == selection || selection == None)
|
||||
&& (handler->timestamp == timestamp || timestamp == CurrentTime)) {
|
||||
|
||||
if (handler->flags.done_pending) {
|
||||
handler->flags.delete_pending = 1;
|
||||
/*//puts(": postponed because still pending");*/
|
||||
return;
|
||||
}
|
||||
/*//printf(": found & removed");*/
|
||||
WMRemoveFromArray(selHandlers, handler);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*//printf("\n");*/
|
||||
|
||||
XGrabServer(dpy);
|
||||
if (XGetSelectionOwner(dpy, selection) == win) {
|
||||
XSetSelectionOwner(dpy, selection, None, timestamp);
|
||||
XSetSelectionOwner(dpy, selection, None, timestamp);
|
||||
}
|
||||
XUngrabServer(dpy);
|
||||
}
|
||||
@@ -86,62 +99,59 @@ WMDeleteSelectionCallback(WMView *view, Atom selection, Time timestamp)
|
||||
|
||||
if (!selCallbacks)
|
||||
return;
|
||||
|
||||
WM_ITERATE_ARRAY(selCallbacks, handler, iter) {
|
||||
if (handler->view == view
|
||||
&& (handler->selection == selection || selection == 0)
|
||||
&& (handler->timestamp == timestamp || timestamp == CurrentTime)) {
|
||||
|
||||
if (handler->flags.done_pending) {
|
||||
handler->flags.delete_pending = 1;
|
||||
return;
|
||||
}
|
||||
WMRemoveFromArray(selCallbacks, handler);
|
||||
break;
|
||||
WM_ITERATE_ARRAY(selCallbacks, handler, iter) {
|
||||
if (handler->view == view
|
||||
&& (handler->selection == selection || selection == None)
|
||||
&& (handler->timestamp == timestamp || timestamp == CurrentTime)) {
|
||||
|
||||
if (handler->flags.done_pending) {
|
||||
handler->flags.delete_pending = 1;
|
||||
return;
|
||||
}
|
||||
WMRemoveFromArray(selCallbacks, handler);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static Bool gotError = 0;
|
||||
/*
|
||||
static int
|
||||
errorHandler(XErrorEvent *error)
|
||||
handleXError(Display *dpy, XErrorEvent *ev)
|
||||
{
|
||||
return 0;
|
||||
gotXError = True;
|
||||
|
||||
return 1;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
static Bool
|
||||
writeSelection(Display *dpy, Window requestor, Atom property, Atom type,
|
||||
WMData *data)
|
||||
WMData *data)
|
||||
{
|
||||
int format;
|
||||
|
||||
static void *oldHandler;
|
||||
int format, bpi;
|
||||
|
||||
format = WMGetDataFormat(data);
|
||||
if (format == 0)
|
||||
format = 8;
|
||||
|
||||
/*
|
||||
printf("write to %x: %s\n", requestor, XGetAtomName(dpy, property));
|
||||
*/
|
||||
gotError = False;
|
||||
format = 8;
|
||||
|
||||
#ifndef __sgi
|
||||
if (!XChangeProperty(dpy, requestor, property, type, format,
|
||||
PropModeReplace, WMDataBytes(data),
|
||||
WMGetDataLength(data)))
|
||||
return False;
|
||||
#else
|
||||
/* in sgi seems this seems to return void */
|
||||
XChangeProperty(dpy, requestor, property, type, format,
|
||||
PropModeReplace, WMDataBytes(data), WMGetDataLength(data));
|
||||
#endif
|
||||
bpi = format/8;
|
||||
|
||||
/* printf("write to %x: %s\n", requestor, XGetAtomName(dpy, property)); */
|
||||
|
||||
oldHandler = XSetErrorHandler(handleXError);
|
||||
|
||||
gotXError = False;
|
||||
|
||||
XChangeProperty(dpy, requestor, property, type, format, PropModeReplace,
|
||||
WMDataBytes(data), WMGetDataLength(data)/bpi);
|
||||
|
||||
XFlush(dpy);
|
||||
|
||||
return !gotError;
|
||||
XSetErrorHandler(oldHandler);
|
||||
|
||||
return !gotXError;
|
||||
}
|
||||
|
||||
|
||||
@@ -149,9 +159,9 @@ static void
|
||||
notifySelection(XEvent *event, Atom prop)
|
||||
{
|
||||
XEvent ev;
|
||||
/*
|
||||
printf("envent to %x\n", event->xselectionrequest.requestor);
|
||||
*/
|
||||
|
||||
/* printf("event to %x\n", event->xselectionrequest.requestor); */
|
||||
|
||||
ev.xselection.type = SelectionNotify;
|
||||
ev.xselection.serial = 0;
|
||||
ev.xselection.send_event = True;
|
||||
@@ -161,9 +171,9 @@ notifySelection(XEvent *event, Atom prop)
|
||||
ev.xselection.selection = event->xselectionrequest.selection;
|
||||
ev.xselection.property = prop;
|
||||
ev.xselection.time = event->xselectionrequest.time;
|
||||
|
||||
XSendEvent(event->xany.display, event->xselectionrequest.requestor,
|
||||
False, 0, &ev);
|
||||
|
||||
XSendEvent(event->xany.display, event->xselectionrequest.requestor,
|
||||
False, 0, &ev);
|
||||
XFlush(event->xany.display);
|
||||
}
|
||||
|
||||
@@ -174,90 +184,81 @@ handleRequestEvent(XEvent *event)
|
||||
SelectionHandler *handler;
|
||||
WMArrayIterator iter;
|
||||
WMArray *copy;
|
||||
Bool handledRequest = False;
|
||||
Bool handledRequest;
|
||||
|
||||
WM_ITERATE_ARRAY(selHandlers, handler, iter) {
|
||||
|
||||
switch (event->type) {
|
||||
case SelectionClear:
|
||||
if (W_VIEW_DRAWABLE(handler->view)
|
||||
!= event->xselectionclear.window) {
|
||||
break;
|
||||
}
|
||||
switch (event->type) {
|
||||
case SelectionClear:
|
||||
if (W_VIEW_DRAWABLE(handler->view)
|
||||
!= event->xselectionclear.window) {
|
||||
break;
|
||||
}
|
||||
|
||||
handler->flags.done_pending = 1;
|
||||
if (handler->procs.selectionLost)
|
||||
handler->procs.selectionLost(handler->view,
|
||||
handler->selection,
|
||||
handler->data);
|
||||
handler->flags.done_pending = 0;
|
||||
handler->flags.delete_pending = 1;
|
||||
break;
|
||||
handler->flags.done_pending = 1;
|
||||
if (handler->procs.selectionLost)
|
||||
handler->procs.selectionLost(handler->view,
|
||||
handler->selection,
|
||||
handler->data);
|
||||
handler->flags.done_pending = 0;
|
||||
handler->flags.delete_pending = 1;
|
||||
break;
|
||||
|
||||
case SelectionRequest:
|
||||
if (W_VIEW_DRAWABLE(handler->view)
|
||||
!= event->xselectionrequest.owner) {
|
||||
break;
|
||||
}
|
||||
case SelectionRequest:
|
||||
if (W_VIEW_DRAWABLE(handler->view)!=event->xselectionrequest.owner) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (handler->procs.convertSelection != NULL
|
||||
&& handler->selection == event->xselectionrequest.selection) {
|
||||
Atom atom;
|
||||
WMData *data;
|
||||
Atom prop;
|
||||
if (handler->procs.convertSelection != NULL
|
||||
&& handler->selection == event->xselectionrequest.selection) {
|
||||
Atom atom;
|
||||
WMData *data;
|
||||
Atom prop;
|
||||
|
||||
/* they're requesting for something old.. maybe another handler
|
||||
* can handle it */
|
||||
if (event->xselectionrequest.time < handler->timestamp
|
||||
&& event->xselectionrequest.time != CurrentTime) {
|
||||
break;
|
||||
}
|
||||
/* they're requesting for something old.. maybe another handler
|
||||
* can handle it */
|
||||
if (event->xselectionrequest.time < handler->timestamp
|
||||
&& event->xselectionrequest.time != CurrentTime) {
|
||||
break;
|
||||
}
|
||||
|
||||
handler->flags.done_pending = 1;
|
||||
handledRequest = False;
|
||||
|
||||
data = handler->procs.convertSelection(handler->view,
|
||||
handler->selection,
|
||||
event->xselectionrequest.target,
|
||||
handler->data,
|
||||
&atom);
|
||||
if (data == NULL) {
|
||||
break;
|
||||
}
|
||||
|
||||
handledRequest = True;
|
||||
|
||||
|
||||
prop = event->xselectionrequest.property;
|
||||
/* obsolete clients that don't set the property field */
|
||||
if (prop == None)
|
||||
prop = event->xselectionrequest.target;
|
||||
|
||||
if (!writeSelection(event->xselectionrequest.display,
|
||||
event->xselectionrequest.requestor,
|
||||
prop, atom, data)) {
|
||||
WMReleaseData(data);
|
||||
notifySelection(event, None);
|
||||
break;
|
||||
}
|
||||
WMReleaseData(data);
|
||||
|
||||
notifySelection(event, prop);
|
||||
|
||||
if (handler->procs.selectionDone != NULL) {
|
||||
handler->procs.selectionDone(handler->view,
|
||||
handler->selection,
|
||||
event->xselectionrequest.target,
|
||||
handler->data);
|
||||
}
|
||||
|
||||
handler->flags.done_pending = 0;
|
||||
|
||||
if (!handledRequest) {
|
||||
notifySelection(event, None);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
handler->flags.done_pending = 1;
|
||||
|
||||
data = handler->procs.convertSelection(handler->view,
|
||||
handler->selection,
|
||||
event->xselectionrequest.target,
|
||||
handler->data,
|
||||
&atom);
|
||||
|
||||
prop = event->xselectionrequest.property;
|
||||
/* obsolete clients that don't set the property field */
|
||||
if (prop == None)
|
||||
prop = event->xselectionrequest.target;
|
||||
|
||||
if (data) {
|
||||
if (writeSelection(event->xselectionrequest.display,
|
||||
event->xselectionrequest.requestor,
|
||||
prop, atom, data)) {
|
||||
handledRequest = True;
|
||||
}
|
||||
WMReleaseData(data);
|
||||
}
|
||||
|
||||
notifySelection(event, (handledRequest==True ? prop : None));
|
||||
|
||||
if (handler->procs.selectionDone != NULL) {
|
||||
handler->procs.selectionDone(handler->view,
|
||||
handler->selection,
|
||||
event->xselectionrequest.target,
|
||||
handler->data);
|
||||
}
|
||||
|
||||
handler->flags.done_pending = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* delete handlers */
|
||||
@@ -278,22 +279,21 @@ getSelectionData(Display *dpy, Window win, Atom where)
|
||||
WMData *wdata;
|
||||
unsigned char *data;
|
||||
Atom rtype;
|
||||
unsigned bits;
|
||||
unsigned bits, bpi;
|
||||
unsigned long len, bytes;
|
||||
|
||||
|
||||
if (XGetWindowProperty(dpy, win, where, 0, MAX_PROPERTY_SIZE,
|
||||
False, AnyPropertyType, &rtype, &bits, &len,
|
||||
&bytes, &data)!=Success) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
wdata = WMCreateDataWithBytesNoCopy(data, len, (WMFreeDataProc*)XFree);
|
||||
if (wdata == NULL) {
|
||||
return NULL;
|
||||
|
||||
if (XGetWindowProperty(dpy, win, where, 0, MAX_PROPERTY_SIZE,
|
||||
False, AnyPropertyType, &rtype, &bits, &len,
|
||||
&bytes, &data)!=Success) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bpi = bits/8;
|
||||
|
||||
wdata = WMCreateDataWithBytesNoCopy(data, len*bpi, (WMFreeDataProc*)XFree);
|
||||
WMSetDataFormat(wdata, bits);
|
||||
|
||||
|
||||
return wdata;
|
||||
}
|
||||
|
||||
@@ -307,30 +307,30 @@ handleNotifyEvent(XEvent *event)
|
||||
WMData *data;
|
||||
|
||||
WM_ITERATE_ARRAY(selCallbacks, handler, iter) {
|
||||
|
||||
if (W_VIEW_DRAWABLE(handler->view) != event->xselection.requestor
|
||||
&& handler->selection == event->xselection.selection) {
|
||||
continue;
|
||||
}
|
||||
handler->flags.done_pending = 1;
|
||||
|
||||
if (event->xselection.property == None) {
|
||||
data = NULL;
|
||||
} else {
|
||||
data = getSelectionData(event->xselection.display,
|
||||
event->xselection.requestor,
|
||||
event->xselection.property);
|
||||
}
|
||||
|
||||
(*handler->callback)(handler->view, handler->selection,
|
||||
handler->target, handler->timestamp,
|
||||
handler->data, data);
|
||||
if (W_VIEW_DRAWABLE(handler->view) != event->xselection.requestor
|
||||
|| handler->selection != event->xselection.selection) {
|
||||
continue;
|
||||
}
|
||||
handler->flags.done_pending = 1;
|
||||
|
||||
if (data != NULL) {
|
||||
WMReleaseData(data);
|
||||
}
|
||||
handler->flags.done_pending = 0;
|
||||
handler->flags.delete_pending = 1;
|
||||
if (event->xselection.property == None) {
|
||||
data = NULL;
|
||||
} else {
|
||||
data = getSelectionData(event->xselection.display,
|
||||
event->xselection.requestor,
|
||||
event->xselection.property);
|
||||
}
|
||||
|
||||
(*handler->callback)(handler->view, handler->selection,
|
||||
handler->target, handler->timestamp,
|
||||
handler->data, data);
|
||||
|
||||
if (data != NULL) {
|
||||
WMReleaseData(data);
|
||||
}
|
||||
handler->flags.done_pending = 0;
|
||||
handler->flags.delete_pending = 1;
|
||||
}
|
||||
|
||||
/* delete callbacks */
|
||||
@@ -349,30 +349,45 @@ handleNotifyEvent(XEvent *event)
|
||||
void
|
||||
W_HandleSelectionEvent(XEvent *event)
|
||||
{
|
||||
/*//printf("%d received selection ", event->xany.window);*/
|
||||
/*//switch(event->type) {
|
||||
case SelectionNotify:
|
||||
puts("notify"); break;
|
||||
case SelectionRequest:
|
||||
puts("request"); break;
|
||||
case SelectionClear:
|
||||
puts("clear"); break;
|
||||
default:
|
||||
puts("unknown"); break;
|
||||
}*/
|
||||
|
||||
if (event->type == SelectionNotify) {
|
||||
handleNotifyEvent(event);
|
||||
handleNotifyEvent(event);
|
||||
} else {
|
||||
handleRequestEvent(event);
|
||||
handleRequestEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Bool
|
||||
WMCreateSelectionHandler(WMView *view, Atom selection, Time timestamp,
|
||||
WMSelectionProcs *procs, void *cdata)
|
||||
WMSelectionProcs *procs, void *cdata)
|
||||
{
|
||||
SelectionHandler *handler;
|
||||
Display *dpy = W_VIEW_SCREEN(view)->display;
|
||||
|
||||
XSetSelectionOwner(dpy, selection, W_VIEW_DRAWABLE(view), timestamp);
|
||||
if (XGetSelectionOwner(dpy, selection) != W_VIEW_DRAWABLE(view))
|
||||
return False;
|
||||
if (XGetSelectionOwner(dpy, selection) != W_VIEW_DRAWABLE(view)) {
|
||||
return False;
|
||||
}
|
||||
|
||||
handler = malloc(sizeof(SelectionHandler));
|
||||
if (handler == NULL)
|
||||
return False;
|
||||
WMPostNotificationName(WMSelectionOwnerDidChangeNotification,
|
||||
(void*)selection, (void*)view);
|
||||
|
||||
/*//printf("created selection handler for %d\n", W_VIEW_DRAWABLE(view));*/
|
||||
|
||||
handler = wmalloc(sizeof(SelectionHandler));
|
||||
|
||||
handler->view = view;
|
||||
handler->selection = selection;
|
||||
@@ -382,11 +397,11 @@ WMCreateSelectionHandler(WMView *view, Atom selection, Time timestamp,
|
||||
memset(&handler->flags, 0, sizeof(handler->flags));
|
||||
|
||||
if (selHandlers == NULL) {
|
||||
selHandlers = WMCreateArrayWithDestructor(4, wfree);
|
||||
selHandlers = WMCreateArrayWithDestructor(4, wfree);
|
||||
}
|
||||
|
||||
|
||||
WMAddToArray(selHandlers, handler);
|
||||
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
@@ -394,15 +409,21 @@ WMCreateSelectionHandler(WMView *view, Atom selection, Time timestamp,
|
||||
|
||||
Bool
|
||||
WMRequestSelection(WMView *view, Atom selection, Atom target, Time timestamp,
|
||||
WMSelectionCallback *callback, void *cdata)
|
||||
WMSelectionCallback *callback, void *cdata)
|
||||
{
|
||||
SelectionCallback *handler;
|
||||
|
||||
if (XGetSelectionOwner(W_VIEW_SCREEN(view)->display, selection) == None)
|
||||
return False;
|
||||
|
||||
return False;
|
||||
|
||||
if (!XConvertSelection(W_VIEW_SCREEN(view)->display, selection, target,
|
||||
W_VIEW_SCREEN(view)->clipboardAtom,
|
||||
W_VIEW_DRAWABLE(view), timestamp)) {
|
||||
return False;
|
||||
}
|
||||
|
||||
handler = wmalloc(sizeof(SelectionCallback));
|
||||
|
||||
|
||||
handler->view = view;
|
||||
handler->selection = selection;
|
||||
handler->target = target;
|
||||
@@ -410,19 +431,13 @@ WMRequestSelection(WMView *view, Atom selection, Atom target, Time timestamp,
|
||||
handler->callback = callback;
|
||||
handler->data = cdata;
|
||||
memset(&handler->flags, 0, sizeof(handler->flags));
|
||||
|
||||
|
||||
if (selCallbacks == NULL) {
|
||||
selCallbacks = WMCreateArrayWithDestructor(4, wfree);
|
||||
selCallbacks = WMCreateArrayWithDestructor(4, wfree);
|
||||
}
|
||||
|
||||
WMAddToArray(selCallbacks, handler);
|
||||
|
||||
if (!XConvertSelection(W_VIEW_SCREEN(view)->display, selection, target,
|
||||
W_VIEW_SCREEN(view)->clipboardAtom,
|
||||
W_VIEW_DRAWABLE(view), timestamp)) {
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
||||
1375
WINGs/snprintf.c
1375
WINGs/snprintf.c
File diff suppressed because it is too large
Load Diff
107
WINGs/string.c
107
WINGs/string.c
@@ -43,46 +43,46 @@ wtokennext(char *word, char **next)
|
||||
|
||||
t = ret = wmalloc(strlen(word)+1);
|
||||
ptr = word;
|
||||
|
||||
|
||||
state = 0;
|
||||
*t = 0;
|
||||
while (1) {
|
||||
if (*ptr==0)
|
||||
ctype = PRC_EOS;
|
||||
else if (*ptr=='\\')
|
||||
ctype = PRC_ESCAPE;
|
||||
else if (*ptr=='"')
|
||||
ctype = PRC_DQUOTE;
|
||||
else if (*ptr=='\'')
|
||||
ctype = PRC_SQUOTE;
|
||||
else if (*ptr==' ' || *ptr=='\t')
|
||||
ctype = PRC_BLANK;
|
||||
else
|
||||
ctype = PRC_ALPHA;
|
||||
if (*ptr==0)
|
||||
ctype = PRC_EOS;
|
||||
else if (*ptr=='\\')
|
||||
ctype = PRC_ESCAPE;
|
||||
else if (*ptr=='"')
|
||||
ctype = PRC_DQUOTE;
|
||||
else if (*ptr=='\'')
|
||||
ctype = PRC_SQUOTE;
|
||||
else if (*ptr==' ' || *ptr=='\t')
|
||||
ctype = PRC_BLANK;
|
||||
else
|
||||
ctype = PRC_ALPHA;
|
||||
|
||||
if (mtable[state][ctype].output) {
|
||||
*t = *ptr; t++;
|
||||
*t = 0;
|
||||
}
|
||||
state = mtable[state][ctype].nstate;
|
||||
ptr++;
|
||||
if (mtable[state][0].output<0) {
|
||||
break;
|
||||
}
|
||||
if (mtable[state][ctype].output) {
|
||||
*t = *ptr; t++;
|
||||
*t = 0;
|
||||
}
|
||||
state = mtable[state][ctype].nstate;
|
||||
ptr++;
|
||||
if (mtable[state][0].output<0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (*ret==0)
|
||||
t = NULL;
|
||||
t = NULL;
|
||||
else
|
||||
t = wstrdup(ret);
|
||||
t = wstrdup(ret);
|
||||
|
||||
wfree(ret);
|
||||
|
||||
|
||||
if (ctype==PRC_EOS)
|
||||
*next = NULL;
|
||||
*next = NULL;
|
||||
else
|
||||
*next = ptr;
|
||||
|
||||
*next = ptr;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
@@ -97,14 +97,14 @@ wtokensplit(char *command, char ***argv, int *argc)
|
||||
count = 0;
|
||||
line = command;
|
||||
do {
|
||||
token = wtokennext(line, &line);
|
||||
if (token) {
|
||||
if (count == 0)
|
||||
*argv = wmalloc(sizeof(char**));
|
||||
else
|
||||
*argv = wrealloc(*argv, (count+1)*sizeof(char**));
|
||||
(*argv)[count++] = token;
|
||||
}
|
||||
token = wtokennext(line, &line);
|
||||
if (token) {
|
||||
if (count == 0)
|
||||
*argv = wmalloc(sizeof(char**));
|
||||
else
|
||||
*argv = wrealloc(*argv, (count+1)*sizeof(char**));
|
||||
(*argv)[count++] = token;
|
||||
}
|
||||
} while (token!=NULL && line!=NULL);
|
||||
|
||||
*argc = count;
|
||||
@@ -128,21 +128,21 @@ wtokenjoin(char **list, int count)
|
||||
j += 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
flat_string = wmalloc(j+count+1);
|
||||
|
||||
*flat_string = 0;
|
||||
for (i=0; i<count; i++) {
|
||||
if (list[i]!=NULL && list[i][0]!=0) {
|
||||
if (i>0)
|
||||
strcat(flat_string, " ");
|
||||
if (list[i]!=NULL && list[i][0]!=0) {
|
||||
if (i>0)
|
||||
strcat(flat_string, " ");
|
||||
wspace = strpbrk(list[i], " \t");
|
||||
if (wspace)
|
||||
strcat(flat_string, "\"");
|
||||
strcat(flat_string, list[i]);
|
||||
strcat(flat_string, list[i]);
|
||||
if (wspace)
|
||||
strcat(flat_string, "\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return flat_string;
|
||||
@@ -186,15 +186,30 @@ wstrdup(char *str)
|
||||
}
|
||||
|
||||
|
||||
char*
|
||||
wstrndup(char *str, size_t len)
|
||||
{
|
||||
char *copy;
|
||||
|
||||
assert(str!=NULL);
|
||||
|
||||
len = WMIN(len, strlen(str));
|
||||
copy = strncpy(wmalloc(len+1), str, len);
|
||||
copy[len] = 0;
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
|
||||
char*
|
||||
wstrconcat(char *str1, char *str2)
|
||||
{
|
||||
char *str;
|
||||
|
||||
if (!str1)
|
||||
return wstrdup(str2);
|
||||
return wstrdup(str2);
|
||||
else if (!str2)
|
||||
return wstrdup(str1);
|
||||
return wstrdup(str1);
|
||||
|
||||
str = wmalloc(strlen(str1)+strlen(str2)+1);
|
||||
strcpy(str, str1);
|
||||
@@ -208,9 +223,9 @@ char*
|
||||
wstrappend(char *dst, char *src)
|
||||
{
|
||||
if (!dst)
|
||||
return wstrdup(src);
|
||||
return wstrdup(src);
|
||||
else if (!src || *src==0)
|
||||
return dst;
|
||||
return dst;
|
||||
|
||||
dst = wrealloc(dst, strlen(dst)+strlen(src)+1);
|
||||
strcat(dst, src);
|
||||
|
||||
@@ -39,6 +39,7 @@ static UserDefaults *sharedUserDefaults = NULL;
|
||||
char *WMUserDefaultsDidChangeNotification = "WMUserDefaultsDidChangeNotification";
|
||||
|
||||
|
||||
static void synchronizeUserDefaults(void *foo);
|
||||
|
||||
extern char *WMGetApplicationName();
|
||||
|
||||
@@ -56,19 +57,19 @@ wusergnusteppath()
|
||||
int pathlen;
|
||||
|
||||
if (!path) {
|
||||
gspath = getenv("GNUSTEP_USER_ROOT");
|
||||
if (gspath) {
|
||||
gspath = wexpandpath(gspath);
|
||||
pathlen = strlen(gspath) + 4;
|
||||
path = wmalloc(pathlen);
|
||||
strcpy(path, gspath);
|
||||
wfree(gspath);
|
||||
} else {
|
||||
pathlen = strlen(wgethomedir()) + 10;
|
||||
path = wmalloc(pathlen);
|
||||
strcpy(path, wgethomedir());
|
||||
strcat(path, "/GNUstep");
|
||||
}
|
||||
gspath = getenv("GNUSTEP_USER_ROOT");
|
||||
if (gspath) {
|
||||
gspath = wexpandpath(gspath);
|
||||
pathlen = strlen(gspath) + 4;
|
||||
path = wmalloc(pathlen);
|
||||
strcpy(path, gspath);
|
||||
wfree(gspath);
|
||||
} else {
|
||||
pathlen = strlen(wgethomedir()) + 10;
|
||||
path = wmalloc(pathlen);
|
||||
strcpy(path, wgethomedir());
|
||||
strcat(path, "/GNUstep");
|
||||
}
|
||||
}
|
||||
|
||||
return path;
|
||||
@@ -93,19 +94,14 @@ wdefaultspathfordomain(char *domain)
|
||||
|
||||
|
||||
static void
|
||||
#ifndef HAVE_ATEXIT
|
||||
saveDefaultsChanges(int foo, void *bar)
|
||||
#else
|
||||
#ifdef HAVE_ATEXIT
|
||||
saveDefaultsChanges(void)
|
||||
#else
|
||||
saveDefaultsChanges(int foo, void *bar)
|
||||
#endif
|
||||
{
|
||||
/* save the user defaults databases */
|
||||
UserDefaults *tmp = sharedUserDefaults;
|
||||
|
||||
while (tmp) {
|
||||
WMSynchronizeUserDefaults(tmp);
|
||||
tmp = tmp->next;
|
||||
}
|
||||
synchronizeUserDefaults(NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -116,10 +112,10 @@ registerSaveOnExit(void)
|
||||
static Bool registeredSaveOnExit = False;
|
||||
|
||||
if (!registeredSaveOnExit) {
|
||||
#ifndef HAVE_ATEXIT
|
||||
on_exit(saveDefaultsChanges, (void*)NULL);
|
||||
#else
|
||||
#ifdef HAVE_ATEXIT
|
||||
atexit(saveDefaultsChanges);
|
||||
#else
|
||||
on_exit(saveDefaultsChanges, (void*)NULL);
|
||||
#endif
|
||||
registeredSaveOnExit = True;
|
||||
}
|
||||
@@ -136,7 +132,6 @@ synchronizeUserDefaults(void *foo)
|
||||
WMSynchronizeUserDefaults(database);
|
||||
database = database->next;
|
||||
}
|
||||
WMAddTimerHandler(UD_SYNC_INTERVAL, synchronizeUserDefaults, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -146,7 +141,8 @@ addSynchronizeTimerHandler(void)
|
||||
static Bool initialized = False;
|
||||
|
||||
if (!initialized) {
|
||||
WMAddTimerHandler(UD_SYNC_INTERVAL, synchronizeUserDefaults, NULL);
|
||||
WMAddPersistentTimerHandler(UD_SYNC_INTERVAL, synchronizeUserDefaults,
|
||||
NULL);
|
||||
initialized = True;
|
||||
}
|
||||
}
|
||||
@@ -265,7 +261,7 @@ WMGetStandardUserDefaults(void)
|
||||
if (sharedUserDefaults) {
|
||||
defaults = sharedUserDefaults;
|
||||
while (defaults) {
|
||||
/* Trick, path == NULL only for StandardUserDefaults db */
|
||||
/* path == NULL only for StandardUserDefaults db */
|
||||
if (defaults->path == NULL)
|
||||
return defaults;
|
||||
defaults = defaults->next;
|
||||
@@ -276,7 +272,7 @@ WMGetStandardUserDefaults(void)
|
||||
defaults = wmalloc(sizeof(WMUserDefaults));
|
||||
memset(defaults, 0, sizeof(WMUserDefaults));
|
||||
|
||||
defaults->defaults = WMCreatePLDictionary(NULL, NULL, NULL);
|
||||
defaults->defaults = WMCreatePLDictionary(NULL, NULL);
|
||||
|
||||
defaults->searchList = wmalloc(sizeof(WMPropList*)*3);
|
||||
|
||||
@@ -284,21 +280,20 @@ WMGetStandardUserDefaults(void)
|
||||
key = WMCreatePLString(WMGetApplicationName());
|
||||
defaults->searchList[0] = key;
|
||||
|
||||
/* temporary kluge */
|
||||
/* temporary kluge. wmaker handles synchronization itself */
|
||||
if (strcmp(WMGetApplicationName(), "WindowMaker")==0) {
|
||||
domain = NULL;
|
||||
path = NULL;
|
||||
} else {
|
||||
path = wdefaultspathfordomain(WMGetFromPLString(key));
|
||||
|
||||
if (stat(path, &stbuf) >= 0)
|
||||
defaults->timestamp = stbuf.st_mtime;
|
||||
|
||||
domain = WMReadPropListFromFile(path);
|
||||
defaults->dontSync = 1;
|
||||
}
|
||||
|
||||
path = wdefaultspathfordomain(WMGetFromPLString(key));
|
||||
|
||||
if (stat(path, &stbuf) >= 0)
|
||||
defaults->timestamp = stbuf.st_mtime;
|
||||
|
||||
domain = WMReadPropListFromFile(path);
|
||||
|
||||
if (!domain)
|
||||
domain = WMCreatePLDictionary(NULL, NULL, NULL);
|
||||
domain = WMCreatePLDictionary(NULL, NULL);
|
||||
|
||||
if (path)
|
||||
wfree(path);
|
||||
@@ -319,7 +314,7 @@ WMGetStandardUserDefaults(void)
|
||||
wfree(path);
|
||||
|
||||
if (!domain)
|
||||
domain = WMCreatePLDictionary(NULL, NULL, NULL);
|
||||
domain = WMCreatePLDictionary(NULL, NULL);
|
||||
|
||||
if (domain)
|
||||
WMPutInPLDictionary(defaults->defaults, key, domain);
|
||||
@@ -332,7 +327,7 @@ WMGetStandardUserDefaults(void)
|
||||
i = 0;
|
||||
while (defaults->searchList[i]) {
|
||||
WMAddToPLArray(defaults->searchListArray,
|
||||
defaults->searchList[i]);
|
||||
defaults->searchList[i]);
|
||||
i++;
|
||||
}
|
||||
|
||||
@@ -372,7 +367,7 @@ WMGetDefaultsFromPath(char *path)
|
||||
defaults = wmalloc(sizeof(WMUserDefaults));
|
||||
memset(defaults, 0, sizeof(WMUserDefaults));
|
||||
|
||||
defaults->defaults = WMCreatePLDictionary(NULL, NULL, NULL);
|
||||
defaults->defaults = WMCreatePLDictionary(NULL, NULL);
|
||||
|
||||
defaults->searchList = wmalloc(sizeof(WMPropList*)*2);
|
||||
|
||||
@@ -392,7 +387,7 @@ WMGetDefaultsFromPath(char *path)
|
||||
domain = WMReadPropListFromFile(path);
|
||||
|
||||
if (!domain)
|
||||
domain = WMCreatePLDictionary(NULL, NULL, NULL);
|
||||
domain = WMCreatePLDictionary(NULL, NULL);
|
||||
|
||||
defaults->path = wstrdup(path);
|
||||
|
||||
@@ -409,7 +404,7 @@ WMGetDefaultsFromPath(char *path)
|
||||
i = 0;
|
||||
while (defaults->searchList[i]) {
|
||||
WMAddToPLArray(defaults->searchListArray,
|
||||
defaults->searchList[i]);
|
||||
defaults->searchList[i]);
|
||||
i++;
|
||||
}
|
||||
|
||||
@@ -441,24 +436,24 @@ WMGetUDObjectForKey(WMUserDefaults *database, char *defaultName)
|
||||
WMPropList *object = NULL;
|
||||
WMPropList *key = WMCreatePLString(defaultName);
|
||||
int i = 0;
|
||||
|
||||
|
||||
while (database->searchList[i] && !object) {
|
||||
domainName = database->searchList[i];
|
||||
domain = WMGetFromPLDictionary(database->defaults, domainName);
|
||||
if (domain) {
|
||||
object = WMGetFromPLDictionary(domain, key);
|
||||
}
|
||||
i++;
|
||||
domainName = database->searchList[i];
|
||||
domain = WMGetFromPLDictionary(database->defaults, domainName);
|
||||
if (domain) {
|
||||
object = WMGetFromPLDictionary(domain, key);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
WMReleasePropList(key);
|
||||
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WMSetUDObjectForKey(WMUserDefaults *database, WMPropList *object,
|
||||
char *defaultName)
|
||||
char *defaultName)
|
||||
{
|
||||
WMPropList *key = WMCreatePLString(defaultName);
|
||||
|
||||
@@ -477,7 +472,7 @@ WMRemoveUDObjectForKey(WMUserDefaults *database, char *defaultName)
|
||||
database->dirty = 1;
|
||||
|
||||
WMRemoveFromPLDictionary(database->appDomain, key);
|
||||
|
||||
|
||||
WMReleasePropList(key);
|
||||
}
|
||||
|
||||
@@ -486,14 +481,14 @@ char*
|
||||
WMGetUDStringForKey(WMUserDefaults *database, char *defaultName)
|
||||
{
|
||||
WMPropList *val;
|
||||
|
||||
|
||||
val = WMGetUDObjectForKey(database, defaultName);
|
||||
|
||||
if (!val)
|
||||
return NULL;
|
||||
return NULL;
|
||||
|
||||
if (!WMIsPLString(val))
|
||||
return NULL;
|
||||
return NULL;
|
||||
|
||||
return WMGetFromPLString(val);
|
||||
}
|
||||
@@ -507,19 +502,19 @@ WMGetUDIntegerForKey(WMUserDefaults *database, char *defaultName)
|
||||
int value;
|
||||
|
||||
val = WMGetUDObjectForKey(database, defaultName);
|
||||
|
||||
|
||||
if (!val)
|
||||
return 0;
|
||||
return 0;
|
||||
|
||||
if (!WMIsPLString(val))
|
||||
return 0;
|
||||
|
||||
return 0;
|
||||
|
||||
str = WMGetFromPLString(val);
|
||||
if (!str)
|
||||
return 0;
|
||||
|
||||
return 0;
|
||||
|
||||
if (sscanf(str, "%i", &value)!=1)
|
||||
return 0;
|
||||
return 0;
|
||||
|
||||
return value;
|
||||
}
|
||||
@@ -534,15 +529,15 @@ WMGetUDFloatForKey(WMUserDefaults *database, char *defaultName)
|
||||
float value;
|
||||
|
||||
val = WMGetUDObjectForKey(database, defaultName);
|
||||
|
||||
|
||||
if (!val || !WMIsPLString(val))
|
||||
return 0.0;
|
||||
return 0.0;
|
||||
|
||||
if (!(str = WMGetFromPLString(val)))
|
||||
return 0.0;
|
||||
return 0.0;
|
||||
|
||||
if (sscanf(str, "%f", &value)!=1)
|
||||
return 0.0;
|
||||
return 0.0;
|
||||
|
||||
return value;
|
||||
}
|
||||
@@ -557,25 +552,25 @@ WMGetUDBoolForKey(WMUserDefaults *database, char *defaultName)
|
||||
char *str;
|
||||
|
||||
val = WMGetUDObjectForKey(database, defaultName);
|
||||
|
||||
|
||||
if (!val)
|
||||
return False;
|
||||
return False;
|
||||
|
||||
if (!WMIsPLString(val))
|
||||
return False;
|
||||
|
||||
return False;
|
||||
|
||||
str = WMGetFromPLString(val);
|
||||
if (!str)
|
||||
return False;
|
||||
|
||||
return False;
|
||||
|
||||
if (sscanf(str, "%i", &value)==1 && value!=0)
|
||||
return True;
|
||||
return True;
|
||||
|
||||
if (strcasecmp(str, "YES")==0)
|
||||
return True;
|
||||
return True;
|
||||
|
||||
if (strcasecmp(str, "Y")==0)
|
||||
return True;
|
||||
return True;
|
||||
|
||||
return False;
|
||||
}
|
||||
@@ -589,7 +584,7 @@ WMSetUDIntegerForKey(WMUserDefaults *database, int value, char *defaultName)
|
||||
|
||||
sprintf(buffer, "%i", value);
|
||||
object = WMCreatePLString(buffer);
|
||||
|
||||
|
||||
WMSetUDObjectForKey(database, object, defaultName);
|
||||
WMReleasePropList(object);
|
||||
}
|
||||
@@ -631,8 +626,8 @@ WMSetUDBoolForKey(WMUserDefaults *database, Bool value, char *defaultName)
|
||||
static WMPropList *yes = NULL, *no = NULL;
|
||||
|
||||
if (!yes) {
|
||||
yes = WMCreatePLString("YES");
|
||||
no = WMCreatePLString("NO");
|
||||
yes = WMCreatePLString("YES");
|
||||
no = WMCreatePLString("NO");
|
||||
}
|
||||
|
||||
WMSetUDObjectForKey(database, value ? yes : no, defaultName);
|
||||
@@ -650,26 +645,27 @@ void
|
||||
WMSetUDSearchList(WMUserDefaults *database, WMPropList *list)
|
||||
{
|
||||
int i, c;
|
||||
|
||||
|
||||
if (database->searchList) {
|
||||
i = 0;
|
||||
while (database->searchList[i]) {
|
||||
WMReleasePropList(database->searchList[i]);
|
||||
i++;
|
||||
}
|
||||
wfree(database->searchList);
|
||||
i = 0;
|
||||
while (database->searchList[i]) {
|
||||
WMReleasePropList(database->searchList[i]);
|
||||
i++;
|
||||
}
|
||||
wfree(database->searchList);
|
||||
}
|
||||
if (database->searchListArray) {
|
||||
WMReleasePropList(database->searchListArray);
|
||||
WMReleasePropList(database->searchListArray);
|
||||
}
|
||||
|
||||
c = WMGetPropListItemCount(list);
|
||||
database->searchList = wmalloc(sizeof(WMPropList*)*(c+1));
|
||||
|
||||
for (i=0; i<c; i++) {
|
||||
database->searchList[i] = WMGetFromPLArray(list, i);
|
||||
database->searchList[i] = WMGetFromPLArray(list, i);
|
||||
}
|
||||
|
||||
database->searchList[c] = NULL;
|
||||
|
||||
database->searchListArray = WMDeepCopyPropList(list);
|
||||
}
|
||||
|
||||
|
||||
@@ -36,9 +36,9 @@ wusleep(unsigned int microsecs)
|
||||
|
||||
#else /* not HAVE_SELECT */
|
||||
|
||||
# ifdef HAVE_POLL
|
||||
# ifdef HAVE_POLL
|
||||
|
||||
void
|
||||
void
|
||||
wusleep(unsigned int microsecs)
|
||||
{
|
||||
poll((struct poll *) 0, (size_t) 0, microsecs/1000);
|
||||
|
||||
@@ -19,7 +19,7 @@ char *_WINGS_progname = NULL;
|
||||
|
||||
|
||||
|
||||
Bool
|
||||
Bool
|
||||
W_ApplicationInitialized(void)
|
||||
{
|
||||
return _WINGS_progname!=NULL;
|
||||
@@ -34,28 +34,28 @@ WMInitializeApplication(char *applicationName, int *argc, char **argv)
|
||||
assert(argc!=NULL);
|
||||
assert(argv!=NULL);
|
||||
assert(applicationName!=NULL);
|
||||
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
|
||||
|
||||
#ifdef I18N
|
||||
if (getenv("NLSPATH"))
|
||||
bindtextdomain("WINGs", getenv("NLSPATH"));
|
||||
bindtextdomain("WINGs", getenv("NLSPATH"));
|
||||
else
|
||||
bindtextdomain("WINGs", LOCALEDIR);
|
||||
bindtextdomain("WINGs", LOCALEDIR);
|
||||
bind_textdomain_codeset("WINGs", "UTF-8");
|
||||
#endif
|
||||
|
||||
|
||||
_WINGS_progname = argv[0];
|
||||
|
||||
|
||||
WMApplication.applicationName = wstrdup(applicationName);
|
||||
WMApplication.argc = *argc;
|
||||
|
||||
WMApplication.argv = wmalloc((*argc+1)*sizeof(char*));
|
||||
for (i=0; i<*argc; i++) {
|
||||
WMApplication.argv[i] = wstrdup(argv[i]);
|
||||
WMApplication.argv[i] = wstrdup(argv[i]);
|
||||
}
|
||||
WMApplication.argv[i] = NULL;
|
||||
|
||||
|
||||
/* initialize notification center */
|
||||
W_InitNotificationCenter();
|
||||
}
|
||||
@@ -65,7 +65,7 @@ void
|
||||
WMSetResourcePath(char *path)
|
||||
{
|
||||
if (WMApplication.resourcePath)
|
||||
wfree(WMApplication.resourcePath);
|
||||
wfree(WMApplication.resourcePath);
|
||||
WMApplication.resourcePath = wstrdup(path);
|
||||
}
|
||||
|
||||
@@ -82,24 +82,24 @@ checkFile(char *path, char *folder, char *ext, char *resource)
|
||||
{
|
||||
char *ret;
|
||||
int extralen;
|
||||
|
||||
extralen = (ext ? strlen(ext) : 0) + (folder ? strlen(folder) : 0) + 4;
|
||||
|
||||
extralen = (ext ? strlen(ext) : 0) + (folder ? strlen(folder) : 0) + 4;
|
||||
ret = wmalloc(strlen(path)+strlen(resource)+extralen+8);
|
||||
strcpy(ret, path);
|
||||
if (folder) {
|
||||
strcat(ret, "/");
|
||||
strcat(ret, folder);
|
||||
strcat(ret, "/");
|
||||
strcat(ret, folder);
|
||||
}
|
||||
if (ext) {
|
||||
strcat(ret, "/");
|
||||
strcat(ret, ext);
|
||||
strcat(ret, "/");
|
||||
strcat(ret, ext);
|
||||
}
|
||||
strcat(ret, "/");
|
||||
strcat(ret, resource);
|
||||
|
||||
|
||||
if (access(ret, F_OK)!=0) {
|
||||
wfree(ret);
|
||||
ret = NULL;
|
||||
wfree(ret);
|
||||
ret = NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -112,90 +112,90 @@ WMPathForResourceOfType(char *resource, char *ext)
|
||||
char *path = NULL;
|
||||
char *tmp, *appdir;
|
||||
int i;
|
||||
|
||||
/*
|
||||
|
||||
/*
|
||||
* Paths are searched in this order:
|
||||
* - resourcePath/ext
|
||||
* - argv[0]/ext
|
||||
* - GNUSTEP_USER_ROOT/Apps/ApplicationName.app/ext
|
||||
* - ~/GNUstep/Apps/ApplicationName.app/ext
|
||||
* - GNUSTEP_LOCAL_ROOT/Apps/ApplicationName.app/ext
|
||||
* - /usr/local/GNUstep/Apps/ApplicationName.app/ext
|
||||
* - GNUSTEP_SYSTEM_ROOT/Apps/ApplicationName.app/ext
|
||||
* - /usr/GNUstep/Apps/ApplicationName.app/ext
|
||||
* - GNUSTEP_USER_ROOT/Applications/ApplicationName.app/ext
|
||||
* - ~/GNUstep/Applications/ApplicationName.app/ext
|
||||
* - GNUSTEP_LOCAL_ROOT/Applications/ApplicationName.app/ext
|
||||
* - /usr/local/GNUstep/Applications/ApplicationName.app/ext
|
||||
* - GNUSTEP_SYSTEM_ROOT/Applications/ApplicationName.app/ext
|
||||
* - /usr/GNUstep/Applications/ApplicationName.app/ext
|
||||
*/
|
||||
|
||||
|
||||
if (WMApplication.resourcePath) {
|
||||
path = checkFile(WMApplication.resourcePath, NULL, ext, resource);
|
||||
if (path)
|
||||
return path;
|
||||
path = checkFile(WMApplication.resourcePath, NULL, ext, resource);
|
||||
if (path)
|
||||
return path;
|
||||
}
|
||||
|
||||
if (WMApplication.argv[0]) {
|
||||
tmp = wstrdup(WMApplication.argv[0]);
|
||||
i = strlen(tmp);
|
||||
while (i > 0 && tmp[i]!='/')
|
||||
i--;
|
||||
tmp[i] = 0;
|
||||
if (i>0) {
|
||||
path = checkFile(tmp, NULL, ext, resource);
|
||||
} else {
|
||||
path = NULL;
|
||||
}
|
||||
wfree(tmp);
|
||||
if (path)
|
||||
return path;
|
||||
tmp = wstrdup(WMApplication.argv[0]);
|
||||
i = strlen(tmp);
|
||||
while (i > 0 && tmp[i]!='/')
|
||||
i--;
|
||||
tmp[i] = 0;
|
||||
if (i>0) {
|
||||
path = checkFile(tmp, NULL, ext, resource);
|
||||
} else {
|
||||
path = NULL;
|
||||
}
|
||||
wfree(tmp);
|
||||
if (path)
|
||||
return path;
|
||||
}
|
||||
|
||||
appdir = wmalloc(strlen(WMApplication.applicationName)+10);
|
||||
sprintf(appdir, "Apps/%s.app", WMApplication.applicationName);
|
||||
|
||||
appdir = wmalloc(strlen(WMApplication.applicationName)+20);
|
||||
sprintf(appdir, "Applications/%s.app", WMApplication.applicationName);
|
||||
|
||||
if (getenv("GNUSTEP_USER_ROOT")) {
|
||||
path = checkFile(getenv("GNUSTEP_USER_ROOT"), appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
tmp = wusergnusteppath();
|
||||
if (tmp) {
|
||||
path = checkFile(tmp, appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
if (getenv("GNUSTEP_LOCAL_ROOT")) {
|
||||
path = checkFile(getenv("GNUSTEP_LOCAL_ROOT"), appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
path = checkFile("/usr/local/GNUstep", appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
path = checkFile(getenv("GNUSTEP_USER_ROOT"), appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
tmp = wusergnusteppath();
|
||||
if (tmp) {
|
||||
path = checkFile(tmp, appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
if (getenv("GNUSTEP_LOCAL_ROOT")) {
|
||||
path = checkFile(getenv("GNUSTEP_LOCAL_ROOT"), appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
path = checkFile("/usr/local/GNUstep", appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
if (getenv("GNUSTEP_SYSTEM_ROOT")) {
|
||||
path = checkFile(getenv("GNUSTEP_SYSTEM_ROOT"), appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
path = checkFile(getenv("GNUSTEP_SYSTEM_ROOT"), appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
path = checkFile("/usr/GNUstep", appdir, ext, resource);
|
||||
if (path) {
|
||||
wfree(appdir);
|
||||
return path;
|
||||
wfree(appdir);
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,14 +19,14 @@ WMSetApplicationIconWindow(WMScreen *scr, Window window)
|
||||
scr->applicationIconWindow = window;
|
||||
|
||||
if (scr->groupLeader) {
|
||||
XWMHints *hints;
|
||||
XWMHints *hints;
|
||||
|
||||
hints = XGetWMHints(scr->display, scr->groupLeader);
|
||||
hints->flags |= IconWindowHint;
|
||||
hints->icon_window = window;
|
||||
hints = XGetWMHints(scr->display, scr->groupLeader);
|
||||
hints->flags |= IconWindowHint;
|
||||
hints->icon_window = window;
|
||||
|
||||
XSetWMHints(scr->display, scr->groupLeader, hints);
|
||||
XFree(hints);
|
||||
XSetWMHints(scr->display, scr->groupLeader, hints);
|
||||
XFree(hints);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ WMSetApplicationIconImage(WMScreen *scr, RImage *image)
|
||||
return;
|
||||
|
||||
if (scr->applicationIconImage)
|
||||
RReleaseImage(scr->applicationIconImage);
|
||||
RReleaseImage(scr->applicationIconImage);
|
||||
|
||||
scr->applicationIconImage = RRetainImage(image);
|
||||
|
||||
@@ -66,20 +66,20 @@ WMSetApplicationIconPixmap(WMScreen *scr, WMPixmap *icon)
|
||||
return;
|
||||
|
||||
if (scr->applicationIconPixmap)
|
||||
WMReleasePixmap(scr->applicationIconPixmap);
|
||||
WMReleasePixmap(scr->applicationIconPixmap);
|
||||
|
||||
scr->applicationIconPixmap = WMRetainPixmap(icon);
|
||||
|
||||
if (scr->groupLeader) {
|
||||
XWMHints *hints;
|
||||
XWMHints *hints;
|
||||
|
||||
hints = XGetWMHints(scr->display, scr->groupLeader);
|
||||
hints->flags |= IconPixmapHint|IconMaskHint;
|
||||
hints = XGetWMHints(scr->display, scr->groupLeader);
|
||||
hints->flags |= IconPixmapHint|IconMaskHint;
|
||||
hints->icon_pixmap = (icon!=NULL ? icon->pixmap : None);
|
||||
hints->icon_mask = (icon!=NULL ? icon->mask : None);
|
||||
|
||||
XSetWMHints(scr->display, scr->groupLeader, hints);
|
||||
XFree(hints);
|
||||
XSetWMHints(scr->display, scr->groupLeader, hints);
|
||||
XFree(hints);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ WMCreateApplicationIconBlendedPixmap(WMScreen *scr, RColor *color)
|
||||
gray.red = 0xae;
|
||||
gray.green = 0xaa;
|
||||
gray.blue = 0xae;
|
||||
gray.alpha = 0;
|
||||
gray.alpha = 0xff;
|
||||
|
||||
if (!color)
|
||||
color = &gray;
|
||||
@@ -120,7 +120,7 @@ WMCreateApplicationIconBlendedPixmap(WMScreen *scr, RColor *color)
|
||||
void
|
||||
WMSetApplicationHasAppIcon(WMScreen *scr, Bool flag)
|
||||
{
|
||||
scr->aflags.hasAppIcon = flag;
|
||||
scr->aflags.hasAppIcon = ((flag==0) ? 0 : 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -132,40 +132,40 @@ W_InitApplication(WMScreen *scr)
|
||||
XWMHints *hints;
|
||||
|
||||
leader = XCreateSimpleWindow(scr->display, scr->rootWin, -1, -1,
|
||||
1, 1, 0, 0, 0);
|
||||
1, 1, 0, 0, 0);
|
||||
|
||||
if (!scr->aflags.simpleApplication) {
|
||||
classHint = XAllocClassHint();
|
||||
classHint->res_name = "groupLeader";
|
||||
classHint->res_class = WMApplication.applicationName;
|
||||
XSetClassHint(scr->display, leader, classHint);
|
||||
XFree(classHint);
|
||||
classHint = XAllocClassHint();
|
||||
classHint->res_name = "groupLeader";
|
||||
classHint->res_class = WMApplication.applicationName;
|
||||
XSetClassHint(scr->display, leader, classHint);
|
||||
XFree(classHint);
|
||||
|
||||
XSetCommand(scr->display, leader, WMApplication.argv,
|
||||
WMApplication.argc);
|
||||
XSetCommand(scr->display, leader, WMApplication.argv,
|
||||
WMApplication.argc);
|
||||
|
||||
hints = XAllocWMHints();
|
||||
hints = XAllocWMHints();
|
||||
|
||||
hints->flags = WindowGroupHint;
|
||||
hints->window_group = leader;
|
||||
hints->flags = WindowGroupHint;
|
||||
hints->window_group = leader;
|
||||
|
||||
/* This code will never actually be reached, because to have
|
||||
* scr->applicationIconPixmap set we need to have a screen first,
|
||||
* but this function is called in the screen creation process.
|
||||
* -Dan
|
||||
*/
|
||||
if (scr->applicationIconPixmap) {
|
||||
if (scr->applicationIconPixmap) {
|
||||
hints->flags |= IconPixmapHint;
|
||||
hints->icon_pixmap = scr->applicationIconPixmap->pixmap;
|
||||
if (scr->applicationIconPixmap->mask) {
|
||||
hints->flags |= IconMaskHint;
|
||||
hints->icon_mask = scr->applicationIconPixmap->mask;
|
||||
}
|
||||
}
|
||||
|
||||
XSetWMHints(scr->display, leader, hints);
|
||||
hints->icon_pixmap = scr->applicationIconPixmap->pixmap;
|
||||
if (scr->applicationIconPixmap->mask) {
|
||||
hints->flags |= IconMaskHint;
|
||||
hints->icon_mask = scr->applicationIconPixmap->mask;
|
||||
}
|
||||
}
|
||||
|
||||
XFree(hints);
|
||||
XSetWMHints(scr->display, leader, hints);
|
||||
|
||||
XFree(hints);
|
||||
}
|
||||
scr->groupLeader = leader;
|
||||
}
|
||||
|
||||
295
WINGs/wballoon.c
295
WINGs/wballoon.c
@@ -19,19 +19,19 @@ typedef struct W_Balloon {
|
||||
WMFont *font;
|
||||
|
||||
WMHandlerID timer; /* timer for showing balloon */
|
||||
|
||||
|
||||
WMHandlerID noDelayTimer;
|
||||
|
||||
int delay;
|
||||
|
||||
Window forWindow; /* window for which the balloon
|
||||
* is being show in the moment */
|
||||
* is being show in the moment */
|
||||
|
||||
struct {
|
||||
WMAlignment alignment:2;
|
||||
unsigned enabled:1;
|
||||
WMAlignment alignment:2;
|
||||
unsigned enabled:1;
|
||||
|
||||
unsigned noDelay:1;
|
||||
unsigned noDelay:1;
|
||||
} flags;
|
||||
} Balloon;
|
||||
|
||||
@@ -63,8 +63,8 @@ W_CreateBalloon(WMScreen *scr)
|
||||
|
||||
bPtr->view = W_CreateUnmanagedTopView(scr);
|
||||
if (!bPtr->view) {
|
||||
wfree(bPtr);
|
||||
return NULL;
|
||||
wfree(bPtr);
|
||||
return NULL;
|
||||
}
|
||||
bPtr->view->self = bPtr;
|
||||
|
||||
@@ -101,15 +101,15 @@ WMSetBalloonTextForView(char *text, WMView *view)
|
||||
WMScreen *scr = view->screen;
|
||||
|
||||
if (text) {
|
||||
oldText = WMHashInsert(scr->balloon->table, view, wstrdup(text));
|
||||
oldText = WMHashInsert(scr->balloon->table, view, wstrdup(text));
|
||||
} else {
|
||||
oldText = WMHashGet(scr->balloon->table, view);
|
||||
oldText = WMHashGet(scr->balloon->table, view);
|
||||
|
||||
WMHashRemove(scr->balloon->table, view);
|
||||
WMHashRemove(scr->balloon->table, view);
|
||||
}
|
||||
|
||||
if (oldText) {
|
||||
wfree(oldText);
|
||||
wfree(oldText);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,14 +118,14 @@ void
|
||||
WMSetBalloonFont(WMScreen *scr, WMFont *font)
|
||||
{
|
||||
Balloon *bPtr = scr->balloon;
|
||||
|
||||
|
||||
if (bPtr->font!=NULL)
|
||||
WMReleaseFont(bPtr->font);
|
||||
WMReleaseFont(bPtr->font);
|
||||
|
||||
if (font)
|
||||
bPtr->font = WMRetainFont(font);
|
||||
bPtr->font = WMRetainFont(font);
|
||||
else
|
||||
bPtr->font = NULL;
|
||||
bPtr->font = NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ WMSetBalloonTextColor(WMScreen *scr, WMColor *color)
|
||||
Balloon *bPtr = scr->balloon;
|
||||
|
||||
if (bPtr->textColor)
|
||||
WMReleaseColor(bPtr->textColor);
|
||||
WMReleaseColor(bPtr->textColor);
|
||||
|
||||
bPtr->textColor = WMRetainColor(color);
|
||||
}
|
||||
@@ -151,7 +151,7 @@ WMSetBalloonDelay(WMScreen *scr, int delay)
|
||||
void
|
||||
WMSetBalloonEnabled(WMScreen *scr, Bool flag)
|
||||
{
|
||||
scr->balloon->flags.enabled = flag;
|
||||
scr->balloon->flags.enabled = ((flag==0) ? 0 : 1);
|
||||
|
||||
W_UnmapView(scr->balloon->view);
|
||||
}
|
||||
@@ -173,17 +173,17 @@ W_BalloonHandleLeaveView(WMView *view)
|
||||
Balloon *bPtr = view->screen->balloon;
|
||||
|
||||
if (bPtr->forWindow == view->window) {
|
||||
if (bPtr->view->flags.mapped) {
|
||||
W_UnmapView(bPtr->view);
|
||||
bPtr->noDelayTimer = WMAddTimerHandler(NO_DELAY_DELAY,
|
||||
clearNoDelay, bPtr);
|
||||
}
|
||||
if (bPtr->timer)
|
||||
WMDeleteTimerHandler(bPtr->timer);
|
||||
if (bPtr->view->flags.mapped) {
|
||||
W_UnmapView(bPtr->view);
|
||||
bPtr->noDelayTimer = WMAddTimerHandler(NO_DELAY_DELAY,
|
||||
clearNoDelay, bPtr);
|
||||
}
|
||||
if (bPtr->timer)
|
||||
WMDeleteTimerHandler(bPtr->timer);
|
||||
|
||||
bPtr->timer = NULL;
|
||||
bPtr->timer = NULL;
|
||||
|
||||
bPtr->forWindow = None;
|
||||
bPtr->forWindow = None;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,7 +191,7 @@ W_BalloonHandleLeaveView(WMView *view)
|
||||
/*
|
||||
* botar balao perto do cursor
|
||||
* so mapear balao se o mouse ficar parado pelo delay
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
static void
|
||||
@@ -207,13 +207,13 @@ showBalloon(void *data)
|
||||
|
||||
text = WMHashGet(bPtr->table, view);
|
||||
if (!text)
|
||||
return;
|
||||
return;
|
||||
|
||||
XTranslateCoordinates(view->screen->display, view->window,
|
||||
view->screen->rootWin, 0, 0, &x, &y, &foo);
|
||||
view->screen->rootWin, 0, 0, &x, &y, &foo);
|
||||
|
||||
if (!bPtr->view->flags.realized)
|
||||
W_RealizeView(bPtr->view);
|
||||
W_RealizeView(bPtr->view);
|
||||
|
||||
showText(bPtr, x, y, view->size.width, view->size.height, text);
|
||||
|
||||
@@ -229,32 +229,32 @@ W_BalloonHandleEnterView(WMView *view)
|
||||
char *text;
|
||||
|
||||
if (!bPtr->flags.enabled)
|
||||
return;
|
||||
return;
|
||||
|
||||
text = WMHashGet(bPtr->table, view);
|
||||
if (!text) {
|
||||
if (bPtr->view->flags.realized)
|
||||
W_UnmapView(bPtr->view);
|
||||
if (bPtr->view->flags.realized)
|
||||
W_UnmapView(bPtr->view);
|
||||
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
if (bPtr->timer)
|
||||
WMDeleteTimerHandler(bPtr->timer);
|
||||
WMDeleteTimerHandler(bPtr->timer);
|
||||
bPtr->timer = NULL;
|
||||
|
||||
if (bPtr->noDelayTimer)
|
||||
WMDeleteTimerHandler(bPtr->noDelayTimer);
|
||||
WMDeleteTimerHandler(bPtr->noDelayTimer);
|
||||
bPtr->noDelayTimer = NULL;
|
||||
|
||||
bPtr->forWindow = view->window;
|
||||
|
||||
if (bPtr->flags.noDelay) {
|
||||
bPtr->timer = NULL;
|
||||
bPtr->timer = NULL;
|
||||
|
||||
showBalloon(view);
|
||||
showBalloon(view);
|
||||
} else {
|
||||
bPtr->timer = WMAddTimerHandler(bPtr->delay, showBalloon, view);
|
||||
bPtr->timer = WMAddTimerHandler(bPtr->delay, showBalloon, view);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,40 +275,97 @@ W_BalloonHandleEnterView(WMView *view)
|
||||
|
||||
|
||||
static void
|
||||
drawBalloon(Display *dpy, Pixmap pix, GC gc, int x, int y, int w, int h,
|
||||
int side)
|
||||
drawBalloon(WMScreen *scr, Pixmap bitmap, Pixmap pix, int x, int y, int w,
|
||||
int h, int side)
|
||||
{
|
||||
Display *dpy = scr->display;
|
||||
WMColor *white = WMWhiteColor(scr);
|
||||
WMColor *black = WMBlackColor(scr);
|
||||
GC bgc = scr->monoGC;
|
||||
GC gc = WMColorGC(white);
|
||||
int rad = h*3/10;
|
||||
XPoint pt[3];
|
||||
|
||||
XFillArc(dpy, pix, gc, x, y, rad, rad, 90*64, 90*64);
|
||||
XFillArc(dpy, pix, gc, x, y+h-1-rad, rad, rad, 180*64, 90*64);
|
||||
|
||||
XFillArc(dpy, pix, gc, x+w-1-rad, y, rad, rad, 0*64, 90*64);
|
||||
XFillArc(dpy, pix, gc, x+w-1-rad, y+h-1-rad, rad, rad, 270*64, 90*64);
|
||||
|
||||
XFillRectangle(dpy, pix, gc, x, y+rad/2, w, h-rad);
|
||||
XFillRectangle(dpy, pix, gc, x+rad/2, y, w-rad, h);
|
||||
XPoint pt[3], ipt[3];
|
||||
int w1;
|
||||
|
||||
/* outline */
|
||||
XSetForeground(dpy, bgc, 1);
|
||||
|
||||
XFillArc(dpy, bitmap, bgc, x, y, rad, rad, 90*64, 90*64);
|
||||
XFillArc(dpy, bitmap, bgc, x, y+h-1-rad, rad, rad, 180*64, 90*64);
|
||||
|
||||
XFillArc(dpy, bitmap, bgc, x+w-1-rad, y, rad, rad, 0*64, 90*64);
|
||||
XFillArc(dpy, bitmap, bgc, x+w-1-rad, y+h-1-rad, rad, rad, 270*64, 90*64);
|
||||
|
||||
XFillRectangle(dpy, bitmap, bgc, x, y+rad/2, w, h-rad);
|
||||
XFillRectangle(dpy, bitmap, bgc, x+rad/2, y, w-rad, h);
|
||||
|
||||
/* interior */
|
||||
XFillArc(dpy, pix, gc, x+1, y+1, rad, rad, 90*64, 90*64);
|
||||
XFillArc(dpy, pix, gc, x+1, y+h-2-rad, rad, rad, 180*64, 90*64);
|
||||
|
||||
XFillArc(dpy, pix, gc, x+w-2-rad, y+1, rad, rad, 0*64, 90*64);
|
||||
XFillArc(dpy, pix, gc, x+w-2-rad, y+h-2-rad, rad, rad, 270*64, 90*64);
|
||||
|
||||
XFillRectangle(dpy, pix, gc, x+1, y+1+rad/2, w-2, h-2-rad);
|
||||
XFillRectangle(dpy, pix, gc, x+1+rad/2, y+1, w-2-rad, h-2);
|
||||
|
||||
if (side & BOTTOM) {
|
||||
pt[0].y = y+h-1;
|
||||
pt[1].y = y+h-1+SPACE;
|
||||
pt[2].y = y+h-1;
|
||||
pt[0].y = y+h-1;
|
||||
pt[1].y = y+h-1+SPACE;
|
||||
pt[2].y = y+h-1;
|
||||
ipt[0].y = pt[0].y-1;
|
||||
ipt[1].y = pt[1].y-1;
|
||||
ipt[2].y = pt[2].y-1;
|
||||
} else {
|
||||
pt[0].y = y;
|
||||
pt[1].y = y-SPACE;
|
||||
pt[2].y = y;
|
||||
pt[0].y = y;
|
||||
pt[1].y = y-SPACE;
|
||||
pt[2].y = y;
|
||||
ipt[0].y = pt[0].y+1;
|
||||
ipt[1].y = pt[1].y+1;
|
||||
ipt[2].y = pt[2].y+1;
|
||||
}
|
||||
|
||||
/*w1 = WMAX(h, 24);*/
|
||||
w1 = WMAX(h, 21);
|
||||
|
||||
if (side & RIGHT) {
|
||||
pt[0].x = x+w-h+2*h/16;
|
||||
pt[1].x = x+w-h+11*h/16;
|
||||
pt[2].x = x+w-h+7*h/16;
|
||||
pt[0].x = x+w-w1+2*w1/16;
|
||||
pt[1].x = x+w-w1+11*w1/16;
|
||||
pt[2].x = x+w-w1+7*w1/16;
|
||||
ipt[0].x = x+1+w-w1+2*(w1-1)/16;
|
||||
ipt[1].x = x+1+w-w1+11*(w1-1)/16;
|
||||
ipt[2].x = x+1+w-w1+7*(w1-1)/16;
|
||||
/*ipt[0].x = pt[0].x+1;
|
||||
ipt[1].x = pt[1].x;
|
||||
ipt[2].x = pt[2].x;*/
|
||||
} else {
|
||||
pt[0].x = x+h-2*h/16;
|
||||
pt[1].x = x+h-11*h/16;
|
||||
pt[2].x = x+h-7*h/16;
|
||||
pt[0].x = x+w1-2*w1/16;
|
||||
pt[1].x = x+w1-11*w1/16;
|
||||
pt[2].x = x+w1-7*w1/16;
|
||||
ipt[0].x = x-1+w1-2*(w1-1)/16;
|
||||
ipt[1].x = x-1+w1-11*(w1-1)/16;
|
||||
ipt[2].x = x-1+w1-7*(w1-1)/16;
|
||||
/*ipt[0].x = pt[0].x-1;
|
||||
ipt[1].x = pt[1].x;
|
||||
ipt[2].x = pt[2].x;*/
|
||||
}
|
||||
XFillPolygon(dpy, pix, gc, pt, 3, Convex, CoordModeOrigin);
|
||||
|
||||
XFillPolygon(dpy, bitmap, bgc, pt, 3, Convex, CoordModeOrigin);
|
||||
XFillPolygon(dpy, pix, gc, ipt, 3, Convex, CoordModeOrigin);
|
||||
|
||||
/* fix outline */
|
||||
XDrawLines(dpy, pix, WMColorGC(black), pt, 3, CoordModeOrigin);
|
||||
if (side & RIGHT) {
|
||||
pt[0].x++;
|
||||
pt[2].x--;
|
||||
} else {
|
||||
pt[0].x--;
|
||||
pt[2].x++;
|
||||
}
|
||||
XDrawLines(dpy, pix, WMColorGC(black), pt, 3, CoordModeOrigin);
|
||||
|
||||
WMReleaseColor(white);
|
||||
WMReleaseColor(black);
|
||||
}
|
||||
|
||||
|
||||
@@ -320,42 +377,37 @@ makePixmap(WMScreen *scr, int width, int height, int side, Pixmap *mask)
|
||||
Pixmap pixmap;
|
||||
int x, y;
|
||||
WMColor *black = WMBlackColor(scr);
|
||||
WMColor *white = WMWhiteColor(scr);
|
||||
|
||||
bitmap = XCreatePixmap(dpy, scr->rootWin, width+SPACE, height+SPACE, 1);
|
||||
|
||||
XSetForeground(dpy, scr->monoGC, 0);
|
||||
XSetForeground(dpy, scr->monoGC, 0);
|
||||
XFillRectangle(dpy, bitmap, scr->monoGC, 0, 0, width+SPACE, height+SPACE);
|
||||
|
||||
pixmap = XCreatePixmap(dpy, scr->rootWin, width+SPACE, height+SPACE,
|
||||
scr->depth);
|
||||
scr->depth);
|
||||
|
||||
XFillRectangle(dpy, pixmap, WMColorGC(black), 0, 0,
|
||||
width+SPACE, height+SPACE);
|
||||
XFillRectangle(dpy, pixmap, WMColorGC(black), 0, 0, width+SPACE,
|
||||
height+SPACE);
|
||||
|
||||
if (side & BOTTOM) {
|
||||
y = 0;
|
||||
y = 0;
|
||||
} else {
|
||||
y = SPACE;
|
||||
y = SPACE;
|
||||
}
|
||||
x = 0;
|
||||
|
||||
XSetForeground(dpy, scr->monoGC, 1);
|
||||
drawBalloon(dpy, bitmap, scr->monoGC, x, y, width, height, side);
|
||||
drawBalloon(dpy, pixmap, WMColorGC(white), x+1, y+1, width-2, height-2,
|
||||
side);
|
||||
drawBalloon(scr, bitmap, pixmap, x, y, width, height, side);
|
||||
|
||||
*mask = bitmap;
|
||||
|
||||
WMReleaseColor(black);
|
||||
WMReleaseColor(white);
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
showText(Balloon *bPtr, int x, int y, int h, int w, char *text)
|
||||
showText(Balloon *bPtr, int x, int y, int w, int h, char *text)
|
||||
{
|
||||
WMScreen *scr = bPtr->view->screen;
|
||||
Display *dpy = WMScreenDisplay(scr);
|
||||
@@ -370,62 +422,62 @@ showText(Balloon *bPtr, int x, int y, int h, int w, char *text)
|
||||
int bx, by;
|
||||
|
||||
{
|
||||
int w;
|
||||
char *ptr, *ptr2;
|
||||
int w;
|
||||
char *ptr, *ptr2;
|
||||
|
||||
ptr2 = ptr = text;
|
||||
width = 0;
|
||||
while (ptr && ptr2) {
|
||||
ptr2 = strchr(ptr, '\n');
|
||||
if (ptr2) {
|
||||
w = WMWidthOfString(font, ptr, ptr2 - ptr);
|
||||
} else {
|
||||
w = WMWidthOfString(font, ptr, strlen(ptr));
|
||||
}
|
||||
if (w > width)
|
||||
width = w;
|
||||
ptr = ptr2 + 1;
|
||||
}
|
||||
ptr2 = ptr = text;
|
||||
width = 0;
|
||||
while (ptr && ptr2) {
|
||||
ptr2 = strchr(ptr, '\n');
|
||||
if (ptr2) {
|
||||
w = WMWidthOfString(font, ptr, ptr2 - ptr);
|
||||
} else {
|
||||
w = WMWidthOfString(font, ptr, strlen(ptr));
|
||||
}
|
||||
if (w > width)
|
||||
width = w;
|
||||
ptr = ptr2 + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
width += 16;
|
||||
|
||||
textHeight = W_GetTextHeight(font, text, width, False);
|
||||
|
||||
|
||||
height = textHeight + 4;
|
||||
|
||||
|
||||
if (height < 16)
|
||||
height = 16;
|
||||
height = 16;
|
||||
if (width < height)
|
||||
width = height;
|
||||
width = height;
|
||||
|
||||
if (x + width > scr->rootView->size.width) {
|
||||
side = RIGHT;
|
||||
bx = x - width + w/2;
|
||||
if (bx < 0)
|
||||
bx = 0;
|
||||
side = RIGHT;
|
||||
bx = x - width + w/2;
|
||||
if (bx < 0)
|
||||
bx = 0;
|
||||
} else {
|
||||
side = LEFT;
|
||||
bx = x + w/2;
|
||||
side = LEFT;
|
||||
bx = x + w/2;
|
||||
}
|
||||
if (bx + width > scr->rootView->size.width)
|
||||
bx = scr->rootView->size.width - width;
|
||||
bx = scr->rootView->size.width - width;
|
||||
|
||||
if (y - (height + SPACE) < 0) {
|
||||
side |= TOP;
|
||||
by = y+h-1;
|
||||
ty = SPACE;
|
||||
side |= TOP;
|
||||
by = y+h-1;
|
||||
ty = SPACE;
|
||||
} else {
|
||||
side |= BOTTOM;
|
||||
by = y - (height + SPACE);
|
||||
ty = 0;
|
||||
side |= BOTTOM;
|
||||
by = y - (height + SPACE);
|
||||
ty = 0;
|
||||
}
|
||||
pixmap = makePixmap(scr, width, height, side, &mask);
|
||||
|
||||
W_PaintText(bPtr->view, pixmap, font, 8, ty + (height - textHeight)/2,
|
||||
width, bPtr->flags.alignment,
|
||||
WMColorGC(bPtr->textColor ? bPtr->textColor : scr->black),
|
||||
False, text, strlen(text));
|
||||
width, bPtr->flags.alignment,
|
||||
bPtr->textColor ? bPtr->textColor : scr->black,
|
||||
False, text, strlen(text));
|
||||
|
||||
XSetWindowBackgroundPixmap(dpy, bPtr->view->window, pixmap);
|
||||
|
||||
@@ -435,7 +487,7 @@ showText(Balloon *bPtr, int x, int y, int h, int w, char *text)
|
||||
|
||||
#ifdef SHAPE
|
||||
XShapeCombineMask(dpy, bPtr->view->window, ShapeBounding, 0, 0, mask,
|
||||
ShapeSet);
|
||||
ShapeSet);
|
||||
#endif
|
||||
XFreePixmap(dpy, mask);
|
||||
|
||||
@@ -450,10 +502,10 @@ handleEvents(XEvent *event, void *data)
|
||||
{
|
||||
Balloon *bPtr = (Balloon*)data;
|
||||
|
||||
switch (event->type) {
|
||||
case DestroyNotify:
|
||||
destroyBalloon(bPtr);
|
||||
break;
|
||||
switch (event->type) {
|
||||
case DestroyNotify:
|
||||
destroyBalloon(bPtr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -467,15 +519,16 @@ destroyBalloon(Balloon *bPtr)
|
||||
e = WMEnumerateHashTable(bPtr->table);
|
||||
|
||||
while ((str = WMNextHashEnumeratorItem(&e))) {
|
||||
wfree(str);
|
||||
wfree(str);
|
||||
}
|
||||
WMFreeHashTable(bPtr->table);
|
||||
|
||||
if (bPtr->textColor)
|
||||
WMReleaseColor(bPtr->textColor);
|
||||
WMReleaseColor(bPtr->textColor);
|
||||
|
||||
if (bPtr->font)
|
||||
WMReleaseFont(bPtr->font);
|
||||
WMReleaseFont(bPtr->font);
|
||||
|
||||
wfree(bPtr);
|
||||
}
|
||||
|
||||
|
||||
262
WINGs/wbox.c
262
WINGs/wbox.c
@@ -18,8 +18,7 @@ typedef struct W_Box {
|
||||
W_Class widgetClass;
|
||||
W_View *view;
|
||||
|
||||
SubviewItem *subviews;
|
||||
int subviewCount;
|
||||
WMArray *subviews;
|
||||
|
||||
short borderWidth;
|
||||
|
||||
@@ -40,10 +39,10 @@ static void didResize(struct W_ViewDelegate*, WMView*);
|
||||
|
||||
static W_ViewDelegate delegate = {
|
||||
NULL,
|
||||
NULL,
|
||||
didResize,
|
||||
NULL,
|
||||
NULL
|
||||
NULL,
|
||||
didResize,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
@@ -53,7 +52,7 @@ WMBox*
|
||||
WMCreateBox(WMWidget *parent)
|
||||
{
|
||||
Box *bPtr;
|
||||
|
||||
|
||||
bPtr = wmalloc(sizeof(Box));
|
||||
memset(bPtr, 0, sizeof(Box));
|
||||
|
||||
@@ -61,91 +60,112 @@ WMCreateBox(WMWidget *parent)
|
||||
|
||||
bPtr->view = W_CreateView(W_VIEW(parent));
|
||||
if (!bPtr->view) {
|
||||
wfree(bPtr);
|
||||
return NULL;
|
||||
wfree(bPtr);
|
||||
return NULL;
|
||||
}
|
||||
bPtr->view->self = bPtr;
|
||||
|
||||
|
||||
bPtr->view->delegate = &delegate;
|
||||
|
||||
|
||||
bPtr->subviews = WMCreateArrayWithDestructor(2, wfree);
|
||||
|
||||
WMCreateEventHandler(bPtr->view, StructureNotifyMask,
|
||||
handleEvents, bPtr);
|
||||
handleEvents, bPtr);
|
||||
|
||||
WMResizeWidget(bPtr, DEFAULT_WIDTH, DEFAULT_HEIGHT);
|
||||
|
||||
bPtr->subviews = NULL;
|
||||
bPtr->subviewCount = 0;
|
||||
|
||||
|
||||
return bPtr;
|
||||
}
|
||||
|
||||
|
||||
typedef struct {
|
||||
WMBox *box;
|
||||
int total;
|
||||
int expands;
|
||||
int x, y;
|
||||
int xe, ye;
|
||||
int w, h;
|
||||
} BoxData;
|
||||
|
||||
|
||||
static void
|
||||
computeExpansion(void *object, void *cdata)
|
||||
{
|
||||
SubviewItem *item = (SubviewItem*)object;
|
||||
BoxData *eData = (BoxData*)cdata;
|
||||
|
||||
eData->total -= item->minSize;
|
||||
eData->total -= item->space;
|
||||
if (item->expand) {
|
||||
eData->expands++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
doRearrange(void *object, void *cdata)
|
||||
{
|
||||
SubviewItem *item = (SubviewItem*)object;
|
||||
BoxData *eData = (BoxData*)cdata;
|
||||
|
||||
if (eData->box->horizontal) {
|
||||
eData->w = item->minSize;
|
||||
if (item->expand)
|
||||
eData->w += eData->total/eData->expands;
|
||||
} else {
|
||||
eData->h = item->minSize;
|
||||
if (item->expand)
|
||||
eData->h += eData->total/eData->expands;
|
||||
}
|
||||
if (!item->end) {
|
||||
W_MoveView(item->view, eData->x, eData->y);
|
||||
}
|
||||
W_ResizeView(item->view, eData->w, eData->h);
|
||||
if (eData->box->horizontal) {
|
||||
if (item->end)
|
||||
eData->xe -= eData->w + item->space;
|
||||
else
|
||||
eData->x += eData->w + item->space;
|
||||
} else {
|
||||
if (item->end)
|
||||
eData->ye -= eData->h + item->space;
|
||||
else
|
||||
eData->y += eData->h + item->space;
|
||||
}
|
||||
if (item->end) {
|
||||
W_MoveView(item->view, eData->xe, eData->ye);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
rearrange(WMBox *box)
|
||||
{
|
||||
int i;
|
||||
int x, y;
|
||||
int xe, ye;
|
||||
int w = 1, h = 1;
|
||||
int total;
|
||||
int expands = 0;
|
||||
|
||||
x = box->borderWidth;
|
||||
y = box->borderWidth;
|
||||
|
||||
BoxData eData;
|
||||
|
||||
eData.box = box;
|
||||
eData.x = eData.y = box->borderWidth;
|
||||
eData.w = eData.h = 1;
|
||||
eData.expands = 0;
|
||||
|
||||
if (box->horizontal) {
|
||||
ye = box->borderWidth;
|
||||
xe = WMWidgetWidth(box) - box->borderWidth;
|
||||
h = WMWidgetHeight(box) - 2 * box->borderWidth;
|
||||
total = WMWidgetWidth(box) - 2 * box->borderWidth;
|
||||
eData.ye = box->borderWidth;
|
||||
eData.xe = WMWidgetWidth(box) - box->borderWidth;
|
||||
eData.h = WMWidgetHeight(box) - 2 * box->borderWidth;
|
||||
eData.total = WMWidgetWidth(box) - 2 * box->borderWidth;
|
||||
} else {
|
||||
xe = box->borderWidth;
|
||||
ye = WMWidgetHeight(box) - box->borderWidth;
|
||||
w = WMWidgetWidth(box) - 2 * box->borderWidth;
|
||||
total = WMWidgetHeight(box) - 2 * box->borderWidth;
|
||||
eData.xe = box->borderWidth;
|
||||
eData.ye = WMWidgetHeight(box) - box->borderWidth;
|
||||
eData.w = WMWidgetWidth(box) - 2 * box->borderWidth;
|
||||
eData.total = WMWidgetHeight(box) - 2 * box->borderWidth;
|
||||
}
|
||||
|
||||
if (w <= 0 || h <= 0 || total <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < box->subviewCount; i++) {
|
||||
total -= box->subviews[i].minSize;
|
||||
total -= box->subviews[i].space;
|
||||
if (box->subviews[i].expand) {
|
||||
expands++;
|
||||
}
|
||||
if (eData.w <= 0 || eData.h <= 0 || eData.total <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < box->subviewCount; i++) {
|
||||
if (box->horizontal) {
|
||||
w = box->subviews[i].minSize;
|
||||
if (box->subviews[i].expand)
|
||||
w += total/expands;
|
||||
} else {
|
||||
h = box->subviews[i].minSize;
|
||||
if (box->subviews[i].expand)
|
||||
h += total/expands;
|
||||
}
|
||||
if (!box->subviews[i].end) {
|
||||
W_MoveView(box->subviews[i].view, x, y);
|
||||
}
|
||||
W_ResizeView(box->subviews[i].view, w, h);
|
||||
if (box->horizontal) {
|
||||
if (box->subviews[i].end)
|
||||
xe -= w + box->subviews[i].space;
|
||||
else
|
||||
x += w + box->subviews[i].space;
|
||||
} else {
|
||||
if (box->subviews[i].end)
|
||||
ye -= h + box->subviews[i].space;
|
||||
else
|
||||
y += h + box->subviews[i].space;
|
||||
}
|
||||
if (box->subviews[i].end) {
|
||||
W_MoveView(box->subviews[i].view, xe, ye);
|
||||
}
|
||||
}
|
||||
WMMapArray(box->subviews, computeExpansion, &eData);
|
||||
WMMapArray(box->subviews, doRearrange, &eData);
|
||||
}
|
||||
|
||||
|
||||
@@ -161,23 +181,20 @@ WMSetBoxBorderWidth(WMBox *box, unsigned width)
|
||||
|
||||
void
|
||||
WMAddBoxSubview(WMBox *bPtr, WMView *view, Bool expand, Bool fill,
|
||||
int minSize, int maxSize, int space)
|
||||
int minSize, int maxSize, int space)
|
||||
{
|
||||
int i = bPtr->subviewCount;
|
||||
|
||||
bPtr->subviewCount++;
|
||||
if (!bPtr->subviews)
|
||||
bPtr->subviews = wmalloc(sizeof(SubviewItem));
|
||||
else
|
||||
bPtr->subviews = wrealloc(bPtr->subviews,
|
||||
bPtr->subviewCount*sizeof(SubviewItem));
|
||||
bPtr->subviews[i].view = view;
|
||||
bPtr->subviews[i].minSize = minSize;
|
||||
bPtr->subviews[i].maxSize = maxSize;
|
||||
bPtr->subviews[i].expand = expand;
|
||||
bPtr->subviews[i].fill = fill;
|
||||
bPtr->subviews[i].space = space;
|
||||
bPtr->subviews[i].end = 0;
|
||||
SubviewItem *subView;
|
||||
|
||||
subView = wmalloc(sizeof(SubviewItem));
|
||||
subView->view = view;
|
||||
subView->minSize = minSize;
|
||||
subView->maxSize = maxSize;
|
||||
subView->expand = expand;
|
||||
subView->fill = fill;
|
||||
subView->space = space;
|
||||
subView->end = 0;
|
||||
|
||||
WMAddToArray(bPtr->subviews, subView);
|
||||
|
||||
rearrange(bPtr);
|
||||
}
|
||||
@@ -186,42 +203,38 @@ WMAddBoxSubview(WMBox *bPtr, WMView *view, Bool expand, Bool fill,
|
||||
|
||||
void
|
||||
WMAddBoxSubviewAtEnd(WMBox *bPtr, WMView *view, Bool expand, Bool fill,
|
||||
int minSize, int maxSize, int space)
|
||||
int minSize, int maxSize, int space)
|
||||
{
|
||||
int i = bPtr->subviewCount;
|
||||
|
||||
bPtr->subviewCount++;
|
||||
if (!bPtr->subviews)
|
||||
bPtr->subviews = wmalloc(sizeof(SubviewItem));
|
||||
else
|
||||
bPtr->subviews = wrealloc(bPtr->subviews,
|
||||
bPtr->subviewCount*sizeof(SubviewItem));
|
||||
bPtr->subviews[i].view = view;
|
||||
bPtr->subviews[i].minSize = minSize;
|
||||
bPtr->subviews[i].maxSize = maxSize;
|
||||
bPtr->subviews[i].expand = expand;
|
||||
bPtr->subviews[i].fill = fill;
|
||||
bPtr->subviews[i].space = space;
|
||||
bPtr->subviews[i].end = 1;
|
||||
SubviewItem *subView;
|
||||
|
||||
subView = wmalloc(sizeof(SubviewItem));
|
||||
subView->view = view;
|
||||
subView->minSize = minSize;
|
||||
subView->maxSize = maxSize;
|
||||
subView->expand = expand;
|
||||
subView->fill = fill;
|
||||
subView->space = space;
|
||||
subView->end = 1;
|
||||
|
||||
WMAddToArray(bPtr->subviews, subView);
|
||||
|
||||
rearrange(bPtr);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
matchView(void *item, void *cdata)
|
||||
{
|
||||
return (((SubviewItem*)item)->view == (WMView*)cdata);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WMRemoveBoxSubview(WMBox *bPtr, WMView *view)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < bPtr->subviewCount; i++) {
|
||||
if (bPtr->subviews[i].view == view) {
|
||||
memmove(&bPtr->subviews[i], &bPtr->subviews[i+1],
|
||||
(bPtr->subviewCount - i - 1) * sizeof(void*));
|
||||
bPtr->subviewCount--;
|
||||
break;
|
||||
}
|
||||
if (WMRemoveFromArrayMatching(bPtr->subviews, matchView, view)) {
|
||||
rearrange(bPtr);
|
||||
}
|
||||
rearrange(bPtr);
|
||||
}
|
||||
|
||||
|
||||
@@ -240,7 +253,7 @@ WMSetBoxHorizontal(WMBox *box, Bool flag)
|
||||
static void
|
||||
destroyBox(Box *bPtr)
|
||||
{
|
||||
WMRemoveNotificationObserver(bPtr);
|
||||
WMFreeArray(bPtr->subviews);
|
||||
wfree(bPtr);
|
||||
}
|
||||
|
||||
@@ -259,14 +272,15 @@ handleEvents(XEvent *event, void *data)
|
||||
|
||||
CHECK_CLASS(data, WC_Box);
|
||||
|
||||
switch (event->type) {
|
||||
case DestroyNotify:
|
||||
destroyBox(bPtr);
|
||||
break;
|
||||
|
||||
case ConfigureNotify:
|
||||
rearrange(bPtr);
|
||||
break;
|
||||
switch (event->type) {
|
||||
case DestroyNotify:
|
||||
destroyBox(bPtr);
|
||||
break;
|
||||
|
||||
case ConfigureNotify:
|
||||
rearrange(bPtr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
654
WINGs/wbrowser.c
654
WINGs/wbrowser.c
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user