1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-03-11 03:55:53 +01:00

615 Commits

Author SHA1 Message Date
kojima
c95b464680 increased libwraster version 2004-10-26 04:06:37 +00:00
kojima
59609280a2 0.91.0, disable unfinished vdesk 2004-10-26 03:56:04 +00:00
kojima
bb0c0dafae 0.90.1 2004-10-26 03:51:49 +00:00
kojima
5f3c54af13 fixed several po files 2004-10-26 03:44:08 +00:00
dan
d8862b0bdf fixed some bugs 2004-10-26 03:40:44 +00:00
kojima
bbd1e5dada fixed some bugs 2004-10-26 03:03:02 +00:00
kojima
087a16400f updated Makefiles files for po dirs 2004-10-26 01:11:15 +00:00
dan
b89f3e6df5 fixed animation speed issues with 2.6.x linux kernels 2004-10-25 22:15:57 +00:00
dan
4bc0bcfbc2 bad name choice... 2004-10-25 02:32:11 +00:00
dan
9ff9fcda48 icon with smoother corners 2004-10-25 02:27:52 +00:00
dan
ac6b5afd32 forgot this 2004-10-25 02:24:00 +00:00
dan
0d9b73cd74 - Fixed issues with crashing dialog not working
- Keep menu and title text at 12px since there is not constrained by width
- Removed some obsoleted options from wconfig.h
- Added a lighter image for the switch panel
2004-10-25 02:23:41 +00:00
kojima
12b8b8ba58 bug fix 2004-10-25 00:42:25 +00:00
kojima
f274afdd1d added themable, pixmap background switch panel 2004-10-25 00:07:51 +00:00
dan
e3c67d55de - replaced VirtualEdgeThickness option with EnableVirtualDesktop (boolean)
- some code cleanups in the virtual desktop.
2004-10-24 22:45:06 +00:00
dan
8bf6071c48 limit VirtualEdgeThickness values to the 0..10 range 2004-10-24 21:39:56 +00:00
dan
897e75d554 - Fix that enables that the virtual desktop code be disabled on the fly
when VirtualEdgeThickness is set to 0
- Fixed virtual edge to resize the edge on the fly if thickness changes
2004-10-24 20:24:23 +00:00
kojima
363b6032f5 added RCopyArea 2004-10-24 05:01:55 +00:00
dan
4638216209 missed this small update 2004-10-24 03:56:46 +00:00
dan
67a9ea74a3 - Fixed wrong call to XChangeProperty() when setting _NET_WM_ICON
- Changed the WPrefs icons with Largo's version
- Replaced Apps with Application in the docs
2004-10-24 03:20:29 +00:00
dan
f89cf06299 workaround for older fontconfig versions that do not define some constants 2004-10-23 21:59:28 +00:00
dan
cb7f34e237 Updated the single click patch to work with latest version.
(thanks to "Daniel Richard G." <skunk@iskunk.org>)
2004-10-23 21:40:59 +00:00
kojima
7401a1329f free 2004-10-23 21:09:56 +00:00
kojima
df1228f387 added some netwm support in WINGs 2004-10-23 21:07:13 +00:00
dan
9ead135f51 - Replaced Apps with Applications in WPrefs installation path
- Added missing switchpanel.h to compile file list
2004-10-23 03:53:25 +00:00
dan
193a63511d - Fixed all // comments
- Final cleanups
2004-10-23 03:30:03 +00:00
dan
b00076b32a updated TODO 2004-10-23 02:28:50 +00:00
dan
51c2edf868 Cleaned up some documentation 2004-10-23 02:26:13 +00:00
kojima
11b464a002 fix flicker 2004-10-23 01:56:24 +00:00
dan
c3cff33f99 - Sort font styles in this order: Normal, Normal Italic, Bold, Bold Italic
in the font selection panel
- Added code to get the closest match font between the font in the WindowMaker
  domain and the one in the font list of the font panel in WPrefs.app.
  This fixes issues with not selecting the correct font because the weight
  or slant names are slightly different.
2004-10-23 01:47:36 +00:00
kojima
663df7b4cb enhacnced mouse alt-tabbing 2004-10-23 01:02:16 +00:00
dan
b79524ce6f some more cleanup after removal 2004-10-23 00:25:52 +00:00
dan
65a113f9a3 some more removals 2004-10-23 00:09:41 +00:00
kojima
45c55a3e76 cleanup 2004-10-23 00:00:58 +00:00
dan
e93e16de06 removed some more obsoleted scripts and their manual pages 2004-10-23 00:00:02 +00:00
kojima
620a280d64 code review 2004-10-22 23:39:11 +00:00
dan
4bda625076 - Simplified font conversion a bit, as fontconfig does the job of getting
the closest match for us
- Removed wsetfont. No longer needed.
2004-10-22 23:19:37 +00:00
kojima
b034bb077f added mouse seelction of window to focus 2004-10-22 22:57:14 +00:00
dan
d08691d5a5 - Changed fallback font to 'sans serif:pixelsize=12'
- Fixed convertfonts to account for $LANG
- Fixed convertfonts logic a bit and no longer output slant and weight if
  they are the default ones (medium and roman)
- Applied Pascal's fix for GNUstep menus (modified to also include submenus)
  Still this is not the proper fix, as it can't differentiate between
  submenus and other windows at the floating window level. Correct fix needs
  some extra hints to be set by GNUstep on menus.
2004-10-22 22:27:11 +00:00
dan
08e811aae7 - If fonts are specified as xlfd, convert to fc names before creating them.
This was we internally only deal with fc names and properties. It will
  incur a small performance hit as the font needs to be parsed/unparsed,
  but this is only for backward-compatibility to support old xlfd names.
  People are encouraged to swtich to fontconfig names.
- WINGs no longer adds sans as a fallback for internal fonts. It is
  automatically done by fontconfig (if it can't find the requested font
  it will use the closest match which is the default font: sans-serif)
- Added code to honor the AntialiasesText global option
- Fixed style names for WMCopyFontWithStyle()
- Added fonts in style files where they were missing. Also changed some
  fonts to better defaults.
2004-10-22 00:21:51 +00:00
kojima
6de693a24d fixed flickering when switching windows 2004-10-21 00:59:52 +00:00
kojima
3a7749b0fc allow omnipresent iconized windows to be focused on empty workspaces 2004-10-20 06:11:30 +00:00
dan
f555ccb9b9 fixed font panel in wprefs to have the same height for all WMLists 2004-10-20 06:05:20 +00:00
kojima
f6682a9ade fixed bugs, re-enabled circulate raise 2004-10-20 03:31:14 +00:00
dan
1166a58ec7 Fixed the layout (WMLists to have the same height for all columns) 2004-10-19 04:28:26 +00:00
dan
59d2a5cbe5 - Use Applications instead of Apps for the application's path 2004-10-19 03:50:41 +00:00
kojima
85f72d6576 change layout 2004-10-19 03:29:52 +00:00
dan
435aee107e - Added framing to the font panel icon (to be consistent with the others)
- Bigger title and a bigger spacing between WPrefs' title and version
2004-10-19 03:24:07 +00:00
kojima
6cd91272a6 fixed a bug with workspace switching 2004-10-19 02:37:58 +00:00
kojima
7908c9a66b more bug fixes.. 2004-10-19 01:53:11 +00:00
kojima
f6fb9fbb3e include minimized windows in switch panel 2004-10-19 01:29:34 +00:00
dan
9de3560d9f removed some debugging print from the code 2004-10-18 14:45:59 +00:00
kojima
88e207f9e0 converted fonts 2004-10-18 03:09:42 +00:00
kojima
66ec682107 fixed a crash 2004-10-18 02:36:32 +00:00
kojima
1076645853 changed default fonts
improved font selection in wprefs
2004-10-18 02:30:22 +00:00
kojima
30247c5886 dont bring up root menu when fullscreen window is focused 2004-10-18 01:43:13 +00:00
kojima
1e3a40370d some documentation updates 2004-10-18 01:37:17 +00:00
dan
27b9e27ae0 - Moved fullscreen level back above menus
- Small changes to the info panel messages
- Different geomview
- Fixed problem with waitpid returning <0 in monitor
2004-10-18 01:30:02 +00:00
kojima
28050dab72 fixed a restart bug when child processes exit 2004-10-18 00:22:22 +00:00
kojima
bc6aeab722 fixed a bug with switch panel
added updated de.po
2004-10-18 00:09:54 +00:00
dan
737328566f Tell gettext that we want to have the messages in the UTF-8 encoding, to
avoid the extra conversion that gettext would otherwise perform (from the
message encoding which is UTF-8 to the current locale encoding).
2004-10-17 07:17:03 +00:00
dan
6cfad0b10f - Removed obsoleted options from WMGLOBAL and from the WINGs internal
structures (no longer needed with xft)
- Fixed default system font names (converted from xlfd to fontconfig names)
- A bit of code cleanups related to xft
- Replaced harcoded xlfd font names in wmaker and WPrefs with fontconfig
  names.
2004-10-17 06:27:51 +00:00
kojima
19c7a99197 only scale down icons (not up) 2004-10-17 05:22:24 +00:00
kojima
7929d55f3f set charset to utf-8 2004-10-17 05:05:57 +00:00
kojima
1f12617065 converted menu and po files to utf-8 2004-10-17 04:32:25 +00:00
kojima
944737dde7 converted po files to utf-8 2004-10-17 03:31:22 +00:00
dan
a91a34732c converted fr.po to UTF-8 2004-10-16 22:54:27 +00:00
dan
744c0726a1 fixed fullscreen level 2004-10-16 22:16:11 +00:00
kojima
7055530895 - 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
2004-10-16 22:05:04 +00:00
kojima
9402724e40 fixed crash in empty workspaces 2004-10-15 01:00:36 +00:00
kojima
cd36d73886 fix 2004-10-15 00:27:36 +00:00
dan
0c09179f01 - Removed support for legacy systems: OpenLook, KDE-2.x, Gnome-1.x
- Removed #define and #ifdef XFT constructs, as XFT is on all the time
2004-10-14 23:05:20 +00:00
kojima
884a3f1647 fixed cycling 2004-10-14 21:24:21 +00:00
dan
2e572717c5 fixed bug with zombies after wmaker crashed 2004-10-14 20:24:00 +00:00
kojima
8502709884 fixed cmdline option duplication bug 2004-10-14 19:53:31 +00:00
kojima
5f4a3f6777 enhanced icon highlighting in window switcher 2004-10-14 19:12:26 +00:00
dan
067fc41354 updated buglist with recent additions 2004-10-14 18:21:15 +00:00
dan
36b55dc1e6 - removed some obsoleted function definitions
- made font name comparison case insensitive
2004-10-14 18:04:18 +00:00
kojima
3a97c33072 bug.. 2004-10-14 15:54:35 +00:00
kojima
62590be0db fixed bug in window switching 2004-10-14 15:53:17 +00:00
kojima
440f2abe6f missing header 2004-10-14 14:41:05 +00:00
kojima
f54f0856c1 - MacOS X style window switching panel (navigate through windows with Alt-Tab or
arrow keys)
2004-10-14 05:02:24 +00:00
kojima
62994167c5 fixed layout 2004-10-14 02:25:28 +00:00
kojima
00e709cec4 fixed bug 2004-10-14 01:00:43 +00:00
kojima
2b51c21ee5 use macros for property names 2004-10-13 23:48:58 +00:00
kojima
3ed1d3e25c added Font Configuration
updated some outdated default config files
2004-10-13 23:39:29 +00:00
kojima
3088277b1e fixed unclosed file bug 2004-10-13 06:10:36 +00:00
kojima
879b00a57b - 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)
2004-10-13 05:09:08 +00:00
dan
6830b05716 changed indentation to use spaces only 2004-10-12 21:28:27 +00:00
dan
5912898b06 some other todo items I remembered 2004-10-12 12:46:16 +00:00
dan
f614cb8341 updated todo 2004-10-12 02:34:33 +00:00
dan
9ff85407b7 todo before next release 2004-10-12 02:25:24 +00:00
kojima
d211420261 moved -fno-strict-aliasing flag to configure, so it only adds that for gcc
s/__asm__/asm/ (we don't care about being ansi for the asm code)
2004-10-12 02:13:15 +00:00
dan
1ef52e0aec ignore some binary 2004-10-12 01:35:41 +00:00
dan
9aca0d5f6e - 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)
- Added utf8 support in WINGs (removed old X core font code)
- Added utility to convert old font names to new font names in style files
2004-10-12 01:34:32 +00:00
dan
c7c68c6fe7 Added bosnian translations 2004-10-12 01:23:15 +00:00
kojima
95897acc30 added a quick&dirty standalone colorpicker utility 2004-08-24 19:27:45 +00:00
kojima
57869b667b minor dumb bug.. 2004-08-22 03:55:59 +00:00
kojima
2c8a70b743 updated default menus a little bit 2004-08-22 03:07:32 +00:00
kojima
0445dd5c18 changed encoding of (c) thing in about panel to utf-8
changed techdraw style size display to use X core fonts
2004-08-21 21:29:44 +00:00
dan
b6e06d4beb testing notifications 6 2004-08-06 16:49:17 +00:00
dan
b75b7cbc01 testing notifications 5 2004-08-06 16:39:31 +00:00
dan
eb646a6682 testing notifications 4 2004-08-06 16:30:52 +00:00
dan
7b88cd8afd testing notifications 3 2004-08-06 16:13:34 +00:00
dan
f5a6724142 testing notifications 2 2004-08-06 16:10:05 +00:00
dan
afbab71401 testing notifications 2004-08-06 16:05:41 +00:00
dan
20fe42df2b testing notifications 2004-08-06 15:05:08 +00:00
dan
d0c5bedab6 testing notifications 2004-08-06 14:49:49 +00:00
dan
ef31cd1323 test notifications 2004-08-06 14:41:42 +00:00
dan
427a42ab58 test notifications 2004-08-06 14:40:50 +00:00
dan
474c4caf94 reverted the last test commit (duh) 2004-07-16 18:50:58 +00:00
dan
109bb540ec another test for cvs notifications 2004-07-16 18:18:36 +00:00
dan
9b7b9f6815 testing cvs notifications 2004-07-14 21:10:40 +00:00
dan
32973f6e15 testing new commit email notification script 2004-07-12 03:16:34 +00:00
dan
5b26a68910 testing new commit email notification script2 2004-07-12 03:15:58 +00:00
dan
59014546aa testing new commit email notification script 2004-07-12 03:15:00 +00:00
dan
e4483de406 test log scripts 2004-07-11 19:59:39 +00:00
dan
90d830837a test cvs over ssh 2004-07-11 03:13:13 +00:00
dan
752163dfc6 test cvs over ssh 2004-07-11 02:45:17 +00:00
dan
6d02fe98f2 - rewrote the font conversion routines to avoid the need to allocate memory
for font options while parsing the xlfd. now all processing is done using
  the original xlfd string only.
- removed memleaks introduced by previous commit.
2004-04-13 03:49:38 +00:00
vlaad
500d569c79 style property is supposed to override weight and slant, unfortunately it doesn't do it cleanly, and you might end up with italic fonts. this fixes the issue by not making the assumption. 2004-04-10 19:27:54 +00:00
vlaad
f54b0de7b4 To ease transition from XLFD fontnames to fontconfig fontnames setstyle
now converts all *Font keys in the style files before merging them with
G/D/WindowMaker and (vice-versa) getstyle converts the keys from G/D/WindowMaker
before it does anything else whether its stdout printing or themepacks.
enabling quick theme conversions to new font system.
2004-04-10 14:55:55 +00:00
dan
b8193865f6 Added forgotten dragcommon.c to the cvs tree 2004-04-07 10:15:52 +00:00
dan
e7d0c5d9e9 - Added xdnd v3 support in WINGs (Sylvain Reynal <sreynal@nerim.net>)
- CVS should compile again
2004-04-07 02:50:52 +00:00
dan
791bb6a444 replaced CPPFLAGS with AM_CPPFLAGS in some Makefile.am's to avoid overwriting the user's CPPFLAGS environment variable 2004-02-25 21:26:49 +00:00
dan
a018eff89d updated slovak translation 2004-02-02 02:30:12 +00:00
dan
1096cfa991 - Updated INSTALL.fr (wwp <subscript@free.fr>)
- WINGs python update
2004-01-15 20:36:48 +00:00
dan
5d9354f362 better explanation of what changed 2004-01-13 04:55:12 +00:00
dan
0b42849a3e Workaround to avoid creating a second appicon when a KDE3 application opens
a config panel.
2003-12-13 14:08:32 +00:00
dan
df75c86ef0 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.
(bug reported by Roberto Sanchez <rcsanchez97@yahoo.es>)
2003-11-13 06:10:33 +00:00
dan
20975c4918 Fixed 2 focus switching related bugs (Allan Peramaki <aperamak@cc.hut.fi>) 2003-10-14 00:25:46 +00:00
dan
1dfaec332e Fixed synchronization problem between hair cursor and mouse cursor in
wmagnify with mouse cursor at the screen edge.
2003-09-29 23:44:51 +00:00
kojima
3d6d775f08 updated spanish translation of wprefs 2003-09-19 23:47:31 +00:00
kojima
1f393ac4f7 updated catalan translations (Ernest Adrogue <eadrogue@gmx.net>) 2003-09-16 23:31:24 +00:00
dan
847479b886 Fixed bug with incorrect un-escaping if there is a dot in wm_class. 2003-09-03 19:09:20 +00:00
dan
6aed0cd713 small 'remember todo' comment 2003-08-19 21:44:08 +00:00
dan
39b9edfdcd - Converted functions in wfont.c to use xft semantics in place of old X core
fonts and X font sets.
- New code operates on new fontnames like Arial-8:bold:italic in place of xlfd
  (WMCreateFont can still read an xlfd for back compat)
2003-08-15 02:58:04 +00:00
dan
090cc27f00 fixed a test condition 2003-08-14 01:43:07 +00:00
dan
08225948bc wide char support 2003-08-14 01:39:27 +00:00
dan
18d07e04a6 small fix 2003-08-07 00:53:48 +00:00
dan
74ba4f8eef Started to move towards using xft2 only, for a unified font/locale handling
in WINGs
2003-08-07 00:26:21 +00:00
dan
0852957ea1 update before moving to xft2 2003-08-06 23:58:54 +00:00
dan
7efcf57c18 fixed the 'focus flicker' problem, seen with GTK2 applications 2003-08-03 00:00:11 +00:00
dan
44f636e91e doc update; don't use clip's inactive collors for arrows when collapsed 2003-08-02 21:36:45 +00:00
dan
8457611316 fixes to comply to ANSI C 2003-07-16 20:58:49 +00:00
dan
bd7943d9a7 - 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
2003-07-05 02:39:37 +00:00
dan
b0d72a3db2 - 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
2003-07-01 23:00:25 +00:00
dan
396b011610 Fixed bug with focusing a deminiaturized window with sloppy focus mode 2003-06-14 21:13:34 +00:00
dan
c131f14d3e - Fixed bug with wrong text wrapping (Alexey Voinov <voins@voins.program.ru>) 2003-06-12 23:19:00 +00:00
dan
a4c986fa1b _ fixed bug in resizing a scrollview
- read both XLFDs and XFT style font names from config files (xft case only)
2003-06-12 21:21:57 +00:00
dan
64468fcf63 support for compiling with xft2 2003-06-10 01:56:26 +00:00
kojima
8904783aee show whether aa text is enabled in info panel 2003-06-09 05:37:38 +00:00
kojima
40c89b3399 Fix by vlaad to the tableview click callback that was getting bad row info 2003-06-08 21:53:00 +00:00
dan
27a396d7ed - Fixed sloppy focus bug
- Made maximizing behaves 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>)
2003-06-06 04:11:00 +00:00
kojima
2cf5931890 fixed silly typo in workspace.c
added system wide menu configuration
2003-06-06 02:51:47 +00:00
kojima
d159da8671 fixed little prob with header define 2003-06-06 02:47:46 +00:00
kojima
ed0d234d7f solaris xinerama fixes, wmsetbg updated for xinerama 2003-06-04 20:40:00 +00:00
kojima
4d701d8306 small fix in description 2003-06-04 19:02:10 +00:00
kojima
5dbb770aa4 xinerama stuff for solaris 2003-06-04 18:57:03 +00:00
kojima
479ccbda82 updated french translations 2003-05-23 21:47:48 +00:00
kojima
001cb65271 updated single click patch 2003-05-20 04:43:19 +00:00
kojima
bc3ab27364 patch from Vitaly Ovtchinnikov <ov@rbcmail.ru> for
double/triple-click selection in textfield
2003-05-06 03:36:21 +00:00
dan
669d542408 - added imporved wsetfonr from (Mike FABIAN <mfabian@suse.de>)
- added small language fix from ("Marcelo E. Magallon" <mmagallo@debian.org>)
2003-04-23 21:21:38 +00:00
dan
3dcab96180 - Support for multiline balloons (Vitaly Ovtchinnikov <ov@rbcmail.ru>) 2003-04-21 03:34:43 +00:00
dan
7f1d621f43 updated cvs-ignored-files list 2003-04-18 01:16:50 +00:00
dan
b0063c83c7 added support fo generating pkgconfig files for WINGs, wrlib and wmlib ("Marcelo E. Magallon" <mmagallo@debian.org>) 2003-04-18 01:15:07 +00:00
dan
f06c9a1953 - 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
2003-04-15 22:04:49 +00:00
dan
e1958b22c5 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)
2003-04-11 21:22:59 +00:00
dan
528243bb98 Added bulgarian translations 2003-04-06 23:18:07 +00:00
dan
f058fdf72c - Fixed small memory leak in the WINGs' font panel code.
- Fixed call to qsort in WMSortArray.
- Fixed a memleak in the WINGs' file panel.
2003-04-02 11:37:04 +00:00
dan
5f79f1bcde - Fixed bug that could cause SIGSEGV by accessing beyond the end of text in
a WINGs textfield widget.
2003-03-20 13:11:13 +00:00
kojima
18ed046356 - Added WMSetTableViewHasHorizontalScroller() 2003-03-13 21:36:34 +00:00
dan
277d0055fd Fixed bug with scrolling menus (introduced by xinerama patch) 2003-03-04 13:14:55 +00:00
dan
e727cbadb6 - 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>)
2003-02-28 12:42:16 +00:00
dan
fdeb749da7 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
2003-02-27 07:42:46 +00:00
dan
dee8c6e770 - Also 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
2003-02-24 04:08:21 +00:00
dan
fe4cd695af - Fixed a bug with deminiaturizing windows when the application is hidden and
the miniaturized window is selected from the window list menu
2003-02-24 04:06:20 +00:00
dan
1902325087 Reverted German translations 2003-02-24 01:44:59 +00:00
kojima
5b28616212 ops 2003-02-24 01:43:16 +00:00
kojima
ad05cc3b44 updated german translation
added catalan translation
2003-02-23 22:12:20 +00:00
dan
56f73aa4b9 - a few simplifications and cleanups in the WINGs python code 2003-02-20 23:02:28 +00:00
dan
40111188ec - Fixed bug with cursor locked in drag mode after Alt-dragging a window 2003-02-19 23:26:41 +00:00
dan
80c09f1075 - Fixed wrong display position for the move/resize widgets
patch (Peter Zijlstra <a.p.zijlstra@chello.nl>)
2003-02-18 00:35:54 +00:00
dan
b5ef388711 - Fixed edge resistance and move/resize frame drawing for borderless windows 2003-02-16 01:47:58 +00:00
kojima
7a8bde44fa fixed bug in tpixmap after xinerama patch 2003-02-13 16:27:45 +00:00
dan
b381674375 - 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)
- misc fixes
2003-02-11 00:32:17 +00:00
dan
e54a0954e6 added fixed german translations 2003-02-05 01:42:02 +00:00
dan
c0965cd48b - Fixed a problem in the stacking code which could lead to segmentation faults
(Jeff Teunissen <deek@d2dc.net>)
2003-01-17 01:10:51 +00:00
dan
4153e2fde4 - Fixed crashing bug in menu.c
- Updated year from 2002 to 2003
2003-01-16 23:30:45 +00:00
dan
f3487c1ea2 new german translations 2003-01-16 01:47:35 +00:00
dan
0898a3d475 added python wrapper files to dist tarball 2002-12-20 22:41:30 +00:00
dan
064f79ebae - Fixed focus handling for windows that set WM_HINTS.take_focus = False.
- Misc fixes.
- Improved a bit the python wrapper.
- Build po files before 'make install'
2002-12-20 17:47:31 +00:00
kojima
55d37178a0 added cback for set button in fontpanel 2002-12-04 15:40:32 +00:00
dan
90e8cfc5b8 - Properly fixed the color change in the Appearance panel preview box
in WPrefs.app. Also uses less resources.
2002-12-03 04:49:37 +00:00
dan
ab511aca5e small update to display if xinerama is supported in the configure summary. nicer display for the summary too. 2002-12-02 04:42:13 +00:00
dan
39d250888e - Fixed Window Maker to compile with xinerama disabled.
- Replaced --disable-xinerama with --enable-xinerama in configure
  (xinerama needs to be enabled when Window Maker is build because
   it's no longer enabled by default)
2002-12-02 03:44:10 +00:00
dan
00638fa5d3 - Fixed a problem with image artifacts in the Appearance preview box
when color is changed and antialiased fonts are used.
2002-12-02 01:22:14 +00:00
dan
ca43aba088 - Added wstrndup() and WMGetFontName() 2002-12-02 00:01:05 +00:00
dan
96c64e15ef - Added a python wrapper module for WINGs 2002-12-01 06:01:08 +00:00
dan
dd1ccd2fd6 - enabled the use of SHAPE extension in the color panel. without it the
magnifying glass captured image was shifted and unusable
- removed some comments left in the code for later reviewal
2002-12-01 05:49:13 +00:00
dan
c0442b1c59 - WMGetTextDefaultColor() won't retain the returned color anymore, and you
shouldn't release it. It is just a reference to the internal WMText color.
  This should make all the functions returning colors from widgets behave
  consistently
2002-11-30 03:00:34 +00:00
dan
bde9b8a21a forgot to add these in cvs 2002-11-30 02:19:46 +00:00
dan
83d3625e1a - 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 README.antialiasing describing the steps needed to get antialiased
  fonts working with WINGs/Window Maker.
- Added Sample.XftConfig
2002-11-30 02:13:36 +00:00
dan
5ad557c6c8 fixed a memleak in the font panel in WINGs 2002-11-29 02:47:33 +00:00
dan
1fa3937001 fixed wmaker failing to compile with gnome support enabled after the xinerama add 2002-11-29 02:37:40 +00:00
kojima
a10214a502 - Fixed sloppy focus bug (Pawel S. Veselov <pv76716@druid.SFBay.Sun.COM>)
- Applied Xinerama patch (after fixes) from (Peter Zijlstra
  <a.p.zijlstra@chello.nl>)
2002-11-28 22:04:07 +00:00
dan
0fe70d2b4e - Fixed a bug with empty frame titles (Alexey Voinov <voins@voins.program.ru>)
- Added WMGetWidgetBackgroundColor()
- Code cleanup in wtext.c
- Renamed WFANonBold and WFANonEmphasized to WFANotBold and WFANotEmphasized
2002-11-25 04:46:00 +00:00
dan
18b3753227 - added WMCopyFontWithChanges() a more generic and powerful function, meant
to replace WMNormalizeFont(), WMEmphasizeFont(), WMStrenghtenFont(),
  WMUnemphasizeFont() and WMUnstrenghtenFont() which are now obsolete and
  were removed.
2002-11-22 04:49:05 +00:00
kojima
0bfa12a1fc fixed crash caused by resizebars that appear after reloading configs 2002-11-22 00:11:17 +00:00
dan
4d6cd7f326 added .mo files to cvs ignore list 2002-11-21 05:26:53 +00:00
dan
2fe1b0e3f8 - Added support for antialiased text with multibyte languages too.
(only tested on russian, since that's the only multibyte language
  I can test).
2002-11-21 05:21:42 +00:00
dan
3929660f39 - downgraded zh_TW.Big5 po files to previous versions. Latest failed to
compile
- fixed some charsets in a couple of po files
- remove libPropList question from Install script
2002-11-20 12:04:42 +00:00
dan
c2ec1cfe8a - Fixed userdefaults in WINGs not to synchronize on exit a domain that is
marked not to be synchronized.
- WMGLOBAL options can now be set in the WindowMaker configuration files
  to overwrite values in WMGLOBAL.
- 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.
- Replaced AA with Anitialiased in WINGs font creation function names
- Added WMCreateFontWithFlags(), WMHasAntialiasingSupport() and
  WMIsAntialiasingEnabled()
- Created a separate font cacahe for antialiased fonts
- Added test at startup if Xft supports rendering antialiased fonts (in case
  the application was compiled with Xft support, but is run on an X server
  without support for xft rendering (RENDER extension missing). If no Xft
  support antialiasing will be disabled even if it is enabled in the
  configuration file.
- Finished the Info Panel to work with antialiased fonts.
- Code cleanup in dialog.c. Remade part of Info Panel drawing the Window Maker
  logo.
- Fixed technical style drawing of window resizing.
2002-11-13 15:13:48 +00:00
kojima
d597c61cb7 final fix 2002-11-09 14:56:33 +00:00
dan
5e18eadf22 - Fixed wrong colors for text and tile with selected menu items 2002-11-08 21:07:45 +00:00
kojima
19f7fbc949 bleh this one should work 2002-11-08 19:30:53 +00:00
kojima
55f3cb9577 argh! buffer overflow fix, try 3 :P 2002-11-08 18:00:56 +00:00
kojima
811e508c84 fix overflow bug, try2 2002-11-08 17:05:35 +00:00
kojima
60ee69979f fixed buffer overrun bug in wrlib when creating or loading images 2002-11-07 17:18:41 +00:00
dan
4f80ec9178 - removed unnecessary include of WINGsP.h in some places
- smaller space between rows of text in WMText
2002-11-04 20:29:47 +00:00
dan
5e37991b6c Added (forgotten) release for notifications when destroying a WMList. 2002-11-04 06:07:00 +00:00
dan
a4bc7f6a07 Better outline when drawing balloons 2002-11-01 13:28:59 +00:00
dan
6724ec5a6d - It seems some versions of automake carry broken missing scripts, so I
put back the missing script to make sure we don't generate packages
  with bad missing scripts
2002-10-28 22:52:18 +00:00
dan
879d13ef45 - Fixed an issue with drawing AA fonts in titlebars
- Removed 'missing' from cvs, since it is copied from automake when autogen.sh
  is run. You need to run autogen.sh after this update to put it back.
2002-10-28 21:56:13 +00:00
dan
a1d78d102a fixed broken loading gif images 2002-10-28 05:36:42 +00:00
dan
3af4aa7846 - fix for 0 sized gif images too
- fixed wrong test for 0 size in nxpm.c
2002-10-25 04:21:09 +00:00
kojima
0f0afc48ab fix for 0 sized images 2002-10-25 03:43:57 +00:00
dan
55efa1f268 - Eliminated the double no-position-display gap when switching position
display types with the Shift key while moving windows
- Added be.po to configure.ac
- Changed the default resize window display type to 'Center'
2002-10-25 03:37:51 +00:00
kojima
ffa1a610c0 - 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 to not try to load braindead images with 0x0 size
2002-10-25 02:42:56 +00:00
dan
0bb76c0a76 made titlebars display titles with double buffering to avoid flickering. needed because aa fonts need clearing area before redrawing to avoid artefacts and clearing area before redraw gives flicker 2002-10-18 22:17:20 +00:00
dan
7be0a97998 - More cleanups for obsoleted xxx_gc's and xxx_pixel's in WScreen 2002-10-18 04:04:41 +00:00
dan
5230a57599 - Added WMCreateNonAAFont() to WINGs 2002-10-18 02:56:59 +00:00
dan
3bed15d673 - fixes for AA fonts
- fixed the workspace name display problem.
- replaced most of scr->xxx_pixel with scr->xxx_color
- removed some obsoleted GC's in the WScreen structure
2002-10-17 20:26:30 +00:00
dan
1e92274495 - Updated WINGs/NEWS with info about hw the API changed how how things
are affected. Fixes for old code too.
- Double buffering in WMList. All widgets or apps using WMList and
  having user drawing porcedures in place will inherit this double
  buffering automatically too.
- New functions in WINGs: WMGetColorAlpha(), WMIsAAFont()
- Misc code cleanups in WINGs and src/dialog.c
2002-10-16 04:05:45 +00:00
dan
2b2fecac12 - Added double buffering when drawing a WMFrame title with an AA font to avoid
flickering.
- Added double buffering when drawing WMList items to avoid flickering
- Shared xft drawable
- Renamed AASystemFont and AABoldSystemFont to AntialiasedSystemFont
  respectively AntialiasedBoldSystemFont in WMGLOBAL
- WMCreateFont falls back to normal fonts if antialiased fonts cannot be
  created (even if enabled)
2002-10-13 18:25:36 +00:00
dan
17f26077b0 Added Xft support in WINGs (for drawing antialiased fonts with transparency)
Details in WINGs/ChangeLog and WINGs/NEWS
2002-10-09 05:14:28 +00:00
dan
a2b404b5b3 - API change in WINGs for WMDraw*String().
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
- Added alpha channel to WMColor. 2 new functions also:
  WMCreateRGBAColor() and WMSetColorAlpha()
- Miscelaneous code cleanups in wtext.c
- 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
2002-10-08 08:26:06 +00:00
dan
e98da5a628 updated russian locales 2002-10-04 19:42:30 +00:00
dan
b9e7a1d3ca removed obsoleted header file 2002-09-30 12:42:22 +00:00
dan
1941aaf34a - removed hermeslib dependancy
- added back old asm/mmx code
2002-09-30 12:39:22 +00:00
dan
11c466ec26 small fix in wtest 2002-09-29 01:37:10 +00:00
dan
feaa80addc Updated French translations 2002-09-18 00:28:17 +00:00
dan
92b012e800 patch to add binary mode on opening files (for Windows+Cygwin compatibility). 2002-09-15 20:37:41 +00:00
dan
3fc803c0d8 - 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.
2002-09-12 03:43:08 +00:00
dan
a07b262a87 small annoyance with new autoconf generated directories 2002-09-11 15:04:26 +00:00
dan
851835c7a5 - Fixed empty window list menu, if the window list menu was launched through
the root menu ("Marc-Christian Petersen" <m.c.p@wolk-project.de>)
- A small fix for wmtableview when computing visible columns.
2002-09-11 15:02:43 +00:00
dan
d4de3d0a45 - new function in WINGs: WMSetConnectionShutdownOnClose()
- new callback in the ConnectionDelegate structure: canResumeSending
- replaced setpgid() with setsid() when starting kids, to allow them to
  survive if wmaker (the parent) dies.
- a few cleanups.
2002-09-09 04:25:51 +00:00
dan
048b43aea4 - fixed a frame size in WPrefs menu editor
- removed // comments
- commented out printfs in unfinished selection code
2002-07-01 23:52:22 +00:00
kojima
579eb01c6c applied patch from Ryosuke Nanba <rna@cyber.email.ne.jp>
WindowMaker 0.80 crashes (SIGSEGV) on deiconifying the miniwindow of
Mozilla 0.98, under following condition.   - running ATOK X for Linux *
  - create new Mozilla Window
  - using ATOK on Mozilla (make "mozilla-im-status" window visible)
2002-05-25 03:01:32 +00:00
kojima
ca212985df fixed typo in menus... 2002-05-11 00:44:03 +00:00
dan
c32806ae14 updated some .cvsignore files 2002-04-11 20:41:00 +00:00
dan
ee5b28b0af fixed a buffer overflow 2002-04-11 20:38:05 +00:00
dan
750917986e - Added WMGetTextFieldDelegate()
- Fixed a problem with drawing the return arrow on buttons when disabled
2002-04-03 00:51:36 +00:00
dan
6e72c20248 - Added WMSetButtonImageDimsWhenDisabled() and WMGetButtonEnabled()
- Cleaned-up the header files of functions/vars declared but not implemented
2002-03-29 01:24:12 +00:00
dan
ad0ad5af22 Added 2 functions to retrieve the default system fonts:
WMDefaultSystemFont(WMScreen *scr) and WMDefaultBoldSystemFont(WMScreen *scr)
2002-03-28 16:22:53 +00:00
dan
e4a53ba71e fixed some Bool flags passed to WINgs functions to always set 1 or 0 values internally 2002-03-28 04:20:30 +00:00
kojima
208ee16849 updated spanish po 2002-03-24 22:00:24 +00:00
dan
f9acc9313e commented out some declared but never defined functions and global vars 2002-03-24 21:57:21 +00:00
kojima
92fb96eb69 - Fixed bug with windows that have WM_HINTS.take_focus = False. These windows
will not receive focus at all.
2002-03-24 03:18:09 +00:00
dan
18d347ecd5 removed update-autoconf. use autogen.sh 2002-03-20 01:29:17 +00:00
dan
97e20d94de fixed textfields regarding interpretation of special keys with modifiers 2002-03-14 22:20:25 +00:00
dan
65e65c4e9d added ability to enable/disable individual WMTabViewItems 2002-03-14 12:28:52 +00:00
dan
84fa789cd6 - Fixed WMGetViewScreenPosition() to consider the window decorations. 2002-03-04 08:52:49 +00:00
dan
efcf27f854 fixed autogen.sh to include deps in Makefile.in 2002-03-04 06:28:14 +00:00
dan
5fe90167a3 fixed autoconf warning 2002-03-03 20:33:44 +00:00
dan
f857012f7a gah! the putenv() stuff was not causing memleaks. Only 2 memleaks after all (1 serious, 1 minor). Both did sum up in time 2002-03-01 10:33:14 +00:00
dan
efb0090f8c fixed some memleaks (1 serious, 5 minor) 2002-03-01 10:03:35 +00:00
dan
1cd1f16c3c fixed bug in WMSetButtonEnabled and WMSetButtonSelected 2002-02-28 11:01:39 +00:00
kojima
0c1881e224 added french po 2002-02-26 14:57:24 +00:00
dan
5bb35d94a5 fixed a bug in wdread 2002-02-23 00:02:17 +00:00
kojima
321bb04586 little change on menus 2002-02-20 23:38:25 +00:00
dan
77b8fe05ac - removed configure.in. use only autoconf 2.5x fom now
- fixed a bug and memleak in WMBox code.
- updated some translations
- fixed some bug in the menu code about drawing disabled entries.
- fixed Clip menu not to allow selecting of "Autoraise" if "Keep On Top"
  is active.
- Added a "Browse" button to the menu editor in WPrefs where a program to run
  is specified (not finished).
2002-02-20 22:22:40 +00:00
kojima
9466c00f2b update danish translations 2002-02-20 21:35:46 +00:00
kojima
a8950af8ac fixed segfault with incomplete WM_CLASS 2002-02-20 15:01:44 +00:00
kojima
58e719654f added czech translations 2002-02-18 13:50:30 +00:00
dan
ad58481487 reverted latest german update. 2002-02-17 22:33:22 +00:00
kojima
5402fccd1e cleanup oops 2002-02-16 04:56:45 +00:00
kojima
cf7859d145 some incomplete xinerama stuff 2002-02-16 04:53:33 +00:00
kojima
5db8b5660f cleaning the house today 2002-02-15 21:34:46 +00:00
kojima
5873385d32 fix for soemthing wrong with piped menus 2002-02-15 21:30:42 +00:00
kojima
a26b723c5a something i dont remember 2002-02-15 21:27:41 +00:00
kojima
bc3d012e7c updated german pots 2002-02-15 21:24:41 +00:00
kojima
c08b3c5f32 fixed icon scaling 2002-02-15 21:22:46 +00:00
dan
f37b4cf5d0 - 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.
2002-02-01 01:20:15 +00:00
id
06f1bf91a9 fix my mail, maliwan is dead 2002-01-31 10:30:06 +00:00
id
8b5f31ad8b fix an icon 2002-01-27 05:59:29 +00:00
id
2cc90e649a add an icon 2002-01-27 05:54:17 +00:00
id
9d41f432b9 add and fix icons 2002-01-26 15:52:22 +00:00
id
b4f540ddd6 add and fix icons 2002-01-26 15:52:22 +00:00
id
03f534c0bf add an icon 2002-01-26 04:24:12 +00:00
dan
9078b1a5a7 forgot this 2002-01-25 14:40:09 +00:00
dan
da02e76051 added better proplist warnings when reading non-digit proplist data and fixed screwed Changelog after last commit. 2002-01-25 14:39:37 +00:00
kojima
9c19d14d1a added greek flag pixmap 2002-01-25 14:10:30 +00:00
kojima
bc88390918 added contrib patch for resizing/moving windows with yubn keys 2002-01-25 13:51:54 +00:00
kojima
a1b9bf23a9 fixed non-transparent bug of xrender transparent windows 2002-01-23 19:36:43 +00:00
dan
511a06628b - fixed crash when saving window attributes
- updated german translation
- small fix for the selection code in WINGs (possible memleak)
- added support for the ukrainian language in wsetfont
  (Bohdan Vlasyuk <bohdan@bodq.vstu.vinnica.ua>)
2002-01-17 03:07:28 +00:00
dan
8a25fdc672 updated german wprefs translation 2002-01-11 21:57:20 +00:00
dan
a1a7ba7689 Fixed problem with not saving all windows in a session when the shared
application icon is enabled (only one instance/shared application was
saved)
2002-01-11 05:08:44 +00:00
dan
4f84c48ccb updated de.po and fixed a typo 2002-01-10 06:03:06 +00:00
dan
9b63a77d6a a few changes in the selection code 2002-01-07 06:11:34 +00:00
dan
89a32e3663 Fixed some focus related problems when switching workspaces, including the
infamous problem with losing focus when switching to an empty workspace and
back
2002-01-05 06:16:10 +00:00
dan
501c3f48b8 - Fixed labels not to display '\n' as a character if multiple '\n' are passed
- Fixed Legal Panel not to display rectangles in place of new lines.
- Removed some obsoleted/unused files from cvs
- Fixed a bug with Sloppy focus when changing workspaces (from a debian user
  bug report/patch)
2002-01-05 01:35:30 +00:00
dan
cab71ba6a1 - 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)
- Updated the years in the copyright notices
2002-01-04 07:32:37 +00:00
dan
96f8ab167f Added "Hide Others" to the window menu 2002-01-04 05:44:20 +00:00
dan
a8c7375623 Fixed problem with kcalc not having a miniaturize button 2002-01-04 00:30:11 +00:00
dan
365556b676 misc selection and textfield fixes 2002-01-02 17:45:40 +00:00
kojima
7b00d9ec12 added malay translation 2002-01-02 14:09:50 +00:00
dan
89cb6559cc - german po file for WINGs (Guido Scholz <guido.scholz@bayernline.de>)
- misc fixes in selection code in WINGs
- fix for a crash if WMState is missing on startup
2002-01-01 18:40:24 +00:00
id
372da5ca39 ok 2001-12-31 12:39:17 +00:00
id
514258fd35 fix again, perfect. 2001-12-31 12:34:51 +00:00
id
0b0002f75a fix an icon 2001-12-31 12:27:34 +00:00
dan
cf2322ee03 code cleanup 2001-12-30 05:07:12 +00:00
dan
c9dfd7f3a4 updated makefile for new icons. 2001-12-30 01:58:30 +00:00
dan
7eb705472f - Really fixed problem with keyboard shortcuts executed an every screen for
multihead systems.
- Fixed a wrong test in the selection code.
2001-12-30 01:50:46 +00:00
id
d35dd84ae5 change an icon 2001-12-29 21:31:29 +00:00
id
0613a758f4 add a jabber icon 2001-12-29 08:32:46 +00:00
dan
9e615bcff9 - 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.
2001-12-28 03:29:50 +00:00
kojima
9031641ba6 updated chinese translation 2001-12-26 11:32:41 +00:00
id
9bfa0b6efb Sorry, my heart was broken real bad. I am going to resign from my
job and I don't think I can still be able to be a part of project.
Thank you guys for everything.
2001-12-26 06:06:45 +00:00
dan
60409e290d small update 2001-12-22 21:18:15 +00:00
dan
03befcf729 - removed kbd shortcuts active during mouse window drag (enabled by a
recent commit), because it causes nasty problems. It needs fixing
  before reenabling (if they are possible at all)
2001-12-21 23:46:54 +00:00
dan
beb83f52fe updated NEWS 2001-12-21 23:30:39 +00:00
dan
99a5f0da0f few updates 2001-12-21 21:39:52 +00:00
dan
520a6cd0e4 a fix for the definable cursor code 2001-12-21 11:00:45 +00:00
dan
f968d88070 - Fixed problem with shared appicon on clients having an appmenu that
is created after the application has mapped its window(s).

This means that if you use wterm without an appmenu it will be able to
use shared appicons, but as soon as you start one with an appmenu they
will get separated appicons.
2001-12-21 00:48:41 +00:00
dan
e1ed96951b fixed bug with improper setting of root/titlebar cursor (definable cursors) 2001-12-20 22:31:13 +00:00
dan
41996df786 - 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
  and further changes in the global domain file for those merged values was
  ignored making a system admin unable to set global defaults for all users
  using the global domains.
- Fixed bug with not extracting the icon from the client when using
  shared appicons.
- Added WMSubtractPLDictionaries() to WINGs (opposite for merging, it will
  remove all entries from dest if they are present in source and are exactly
  the same. Unique entries in dest and entries with different values from
  those present in source will be preserved).
2001-12-20 22:16:01 +00:00
kojima
932fcd1f37 kbd shortcuts active during mouse window drag 2001-12-20 19:12:19 +00:00
dan
cefdc204ba updated slovak locale files 2001-12-20 16:16:09 +00:00
dan
6f28d987a8 - Fixed problem with unhiding taht mapped windows from other workspaces
on the current workspace.
- Made apps with an application menu not to use a shared appicon.
2001-12-18 16:10:07 +00:00
dan
c8b3933c19 - Fixed xmms problem with shared appicons
- Fixed a problem with saving user defaults for windows after the shared
  appicon changes.
- Fixed GNUstep apps not to show 2 appicons.
2001-12-18 05:18:35 +00:00
dan
4140e6051f updated estonian translation 2001-12-17 22:28:47 +00:00
dan
f0664d1344 small update 2001-12-17 21:25:29 +00:00
dan
f4ef34b814 - Made dock/clip steal appicons of applications that were started from a
shell/xterm or from the main menu, if there is a docked appicon of that
  class that is not running at the time the app is launched.
- Added animation to show that the appicon was stolen by the dock (the way
  NEXTSTEP did - map an appicon as it normally would have been, then slide it
  to the position the docked appicon is).
- Updated the animation constants for scrolling/sliding/shading to better
  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.
2001-12-17 21:21:59 +00:00
dan
90c77b1a45 - improved behaviour for the shared appicon thing.
- added a 'Bool recursive' flag to WMMergePLDictionaries() in WINGs
2001-12-17 14:46:31 +00:00
dan
672c42cc48 - removed the collapse appicons thing
- added real appicon sharing (apps of the same kind will have a single
  shared appicon).
2001-12-17 04:02:33 +00:00
kojima
739fd1a567 added || pipe menu for non-cached generated menus 2001-12-04 12:05:45 +00:00
dan
363290d919 updated po file list in configure.ac 2001-11-30 23:07:22 +00:00
kojima
235b4c6d25 added estonian translation 2001-11-30 13:25:46 +00:00
dan
bbc87bded6 fixed a bug introduced by the previous commit 2001-11-25 09:45:27 +00:00
dan
81a1f98ca5 - Mapping a new window that belongs to a running application that is hidden,
will unhide the application.
- removed a wsyserror() message when reading a property list from file
  (the programmer should decide if to give that message or just ignore).
2001-11-24 05:10:38 +00:00
dan
06b48596f5 - made the definable cursors feature available by default (removed the
compile time option)
2001-11-23 05:39:13 +00:00
dan
0c4dc1c24a - Deminiaturizing a window that is also shaded, will perform an unshade too.
(Note that this only applies to deminiaturizing shaded windows.
   Unhiding an application will keep the shaded/unshaded state of windows.)
2001-11-20 13:48:23 +00:00
dan
af287fb8eb - added strcasecmp() to WINGs (only on systems that don't have it)
- removed some redundant includes of ../src/config.h where wconfig.h
  is also included
2001-11-17 04:26:08 +00:00
dan
7688a9f626 - SIGTERM is now handled and saves the internal state before exiting (like
SIGHUP and SIGINT already do). Now a "kill wmaker_pid" will exit cleanly
  saving dock/clip/session information on exit.
2001-11-16 07:45:33 +00:00
dan
9f62c660d7 - Changelog update about latest fixes.
- Applied patch to fix gnome problems.
2001-11-15 02:52:51 +00:00
kojima
cc9abd6e7e fixed crash bug with empty menus 2001-11-14 13:18:26 +00:00
dan
72150b1da7 - Slovak .po file updates from (Jan Tomka <judas@linux.sk>)
- "Save Workspace state" confirmation switch on the exit dialog panels
  (based on a patch from Jan Tomka <judas@linux.sk>)
2001-11-05 23:19:46 +00:00
dan
b1565d01c4 misc fixes 2001-10-26 22:06:28 +00:00
dan
3b1961d40d New Czech locales from Jiri Hnidek <Jiri.Hnidek@vslib.cz> 2001-10-19 20:13:00 +00:00
dan
d7ffd46d89 updated Makefiles for locale generation to accomodate the latest changes in source structure that were introduced by adding property list handling code to WINGs 2001-10-11 08:19:58 +00:00
dan
8cb297a671 small cleanup 2001-10-10 18:52:14 +00:00
dan
4be9abcdbc - fixed compilation problem for systems that require -lintl for building WINGs
- removed redundant include/lib paths from the get-*-flags scripts
2001-10-10 01:02:34 +00:00
dan
75f790160b - Added ability to shade/unshade a window using the mouse wheel on the
window titlebar.
- Disabled the window birth zoom effect by default.
2001-10-09 03:35:45 +00:00
dan
4350cf540c Added french INSTALL file (wwp <subscript@free.fr>) 2001-10-08 19:21:14 +00:00
dan
dc9b99fe47 put back AM_PROG_LIBTOOL macro. some older automake/autoconf don't like the AC_PROG_LIBTOOL name, even they're aliases 2001-10-05 02:03:55 +00:00
dan
1dcb477fde replace old AM_PROG_LIBTOOL macro with AC_PROG_LIBTOOL 2001-10-05 01:55:51 +00:00
dan
7213271249 small update 2001-10-05 00:45:10 +00:00
dan
727f3e0529 added 2 missing files from distrib 2001-10-05 00:34:13 +00:00
dan
0321fad531 updated NEWS and ChangeLogs about new proplist code in WINGs before a new release 2001-10-04 23:59:44 +00:00
dan
33cc542e85 - Finished moving to the new proplist handling code in WINGs.
- Also tested the backward compatibility ability of the WINGs proplist code
  which seems to work quite well.

Starting with this moment, Window Maker no longer needs libPropList and is
now using the better and much more robust proplist code from WINGs. Also the
WINGs based proplist code is actively maintained while the old libPropList
code is practically dead and flawed by the fact that it borrowed concepts
from the UserDefaults which conflicted with the retain/release mechanism,
making some problems that libPropList had, practically unsolvable without a
complete redesign (which can be found in the more robust WINGs code).
2001-10-04 03:07:34 +00:00
dan
8bb50a6320 Added old libPropList compatibility through proplist-compat.h 2001-10-03 02:05:53 +00:00
dan
558d0fbd14 renamed proplist functions with better names 2001-10-02 00:45:25 +00:00
dan
2d6f757114 Fixed HAVE_STDLIB_H conflict in jpeglib.h 2001-09-18 11:48:15 +00:00
dan
0bf92703da Japanese language files update from Takeo Hashimoto <HashimotoTakeo@mac.com> 2001-09-17 21:10:48 +00:00
dan
0c365cfb9b Finished the proplist code. It's working now, but function names will change
for better naming.
2001-09-17 01:55:23 +00:00
dan
aedbe70f63 more updates to the proplist code 2001-09-14 00:24:15 +00:00
dan
e0f7284142 Fixed cvs code to compile 2001-09-12 23:32:58 +00:00
kojima
abc09951e1 begin wmspec stuff 2001-09-12 21:43:42 +00:00
dan
e9ce423d8c Added wcopy man page to cvs 2001-09-12 14:12:12 +00:00
dan
aae7c8b73a fixed configure check for c99 vsnprintf 2001-09-10 22:15:05 +00:00
kojima
1cd42480bf added test for C99 vsnprintf 2001-09-10 20:55:06 +00:00
kojima
e848fb0d74 fixed artifact pattern left in TrueColor dithering code (visible with
tiled gradients as wallpaper)
2001-09-10 17:23:14 +00:00
dan
680b9d7731 added snprintf.c to be linked in WINGs 2001-09-10 04:21:12 +00:00
dan
49e59ab367 more code for proplist handling (almost finished) 2001-09-10 03:56:00 +00:00
kojima
5ef342d905 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, also cleaned kde and gnome support in preparation for wm-spec support..
2001-09-06 21:42:28 +00:00
dan
86f3e2fdb1 more code for proplist handling 2001-09-06 14:16:11 +00:00
dan
e44cc81a03 definable cursor code updates from Jim Knoble <jmknoble@pobox.com> 2001-09-06 09:42:51 +00:00
dan
2d5a062064 preliminary code for property list manipulation 2001-09-06 00:55:18 +00:00
dan
44363ce805 new estonian po file 2001-09-05 12:33:05 +00:00
kojima
acdc0e3d6b added snprintf for backwards compat 2001-09-04 20:38:20 +00:00
kojima
dd9e7d6816 fallback wmaker.inst.in
added wcopy/wpaste scripts
2001-09-04 20:03:58 +00:00
kojima
5e6b9009a0 removed bogus patch 2001-09-04 20:02:17 +00:00
kojima
761f193b0a chinese plmenu 2001-09-04 20:00:42 +00:00
kojima
80fefd29e4 fixed crash bug on startup
added paste-launch on dock
2001-09-03 22:31:30 +00:00
dan
eecf75029f updated some .cvsignore files 2001-09-03 21:42:32 +00:00
kojima
f3e53e8a67 updated po file 2001-09-03 20:24:03 +00:00
kojima
9bfdc31051 update po files 2001-09-03 20:03:52 +00:00
dan
554f2a6842 Added spanish INSTALL file 2001-09-02 20:30:22 +00:00
dan
4a2ed2f09f new version of the 'single click' patch 2001-09-01 14:51:58 +00:00
dan
0ee6312164 A few bugfixes from users 2001-09-01 14:48:24 +00:00
dan
717392246a Small cleanup of the sigpipe handling code 2001-09-01 13:30:55 +00:00
dan
6b75506e52 small bugfixes. 2001-08-30 21:55:18 +00:00
kojima
92232f3a78 added input method stuff 2001-08-23 22:40:46 +00:00
kojima
64b168083f fixed menu editor crash when saving incomplete menus 2001-08-23 16:49:18 +00:00
kojima
fa994f627e fixed crash bug with WM_CLASS==NULL
etc
2001-08-20 18:11:40 +00:00
kojima
0e2ac9dd16 fixed crash when saving empty menu items in wprefs 2001-08-13 21:00:57 +00:00
kojima
0ee684f718 estonian translation 2001-08-06 14:19:37 +00:00
dan
e825f57f20 wrong change. reversing. =) 2001-08-02 15:09:47 +00:00
dan
a5f92da05c small change in the email notification script. checking how it works. 2001-08-02 15:07:07 +00:00
dan
41d939e32f *** empty log message *** 2001-07-30 21:47:24 +00:00
dan
c1f19bc9f7 support for the newer autoconf 2.5x 2001-07-30 21:44:15 +00:00
dan
d052b5a90c another missing file 2001-07-30 20:57:59 +00:00
dan
5908962cac added some missing files in cvs 2001-07-30 20:53:34 +00:00
dan
a1a6e2531d Patch to fix wsetfont for multibyte languages
sent by (Masahide -mac- NODA <mac@clave.gr.jp>)
2001-07-30 02:34:50 +00:00
dan
86c059db3b Update ja.po files (Takeo Hashimoto <HashimotoTakeo@mac.com>) 2001-07-26 20:15:08 +00:00
dan
46e12bffb6 Applied patch from Marcelo E. Magallon <marcelo.magallon@bigfoot.com>
to fix some more bash specific constructs in wsetfont.
2001-07-24 20:18:19 +00:00
dan
6c494f1a2e Added missing WINGs/po and doc/sk dirs/files from the released 0.65.1
tree, and updated Makefile.am and configure.in to build them too.
2001-07-24 12:05:09 +00:00
dan
c28d3d3ff9 Made cvs compilable (it was missing the following directories: WINGs/po
and doc/sk). They were disabled until added to cvs.
2001-07-23 23:57:12 +00:00
kojima
882b9a8e1c - s/sprintf/snprintf
- updated some po's
- fixed crash bug when removing WINDOWS_MENU or WORKSPACE_MENU from rootmenu
- some other stuff i forgot
2001-07-23 20:31:32 +00:00
dan
0931e14a5a Forgot to update Changelog with latest fixes. 2001-07-22 15:09:27 +00:00
dan
c687b42960 - Fixed some non-portable shell constructs used in installed scripts
(Johnny C. Lam <lamj@stat.cmu.edu>)
- Fixed crash with long titles in the window list menu
  (Alban Hertroys <dalroi@wit401310.student.utwente.nl>)
2001-07-21 20:42:04 +00:00
kojima
d4097e11c9 updated pot files 2001-07-12 22:04:12 +00:00
dan
8a6afcdcf6 Fixed a bug with the new compile time option for window numbers 2001-06-07 23:51:27 +00:00
kojima
3b00e8acaa added option to disable window enumeration 2001-06-07 14:48:34 +00:00
dan
271de3c9de Fixed a bug with the application number showing up even with the first
instance of the application.
2001-06-06 22:22:45 +00:00
kojima
d6feaa1c75 added None option to MoveDisplay and ResizeDisplay
fixed window instance enumeration bug
2001-06-06 19:48:31 +00:00
kojima
eb0e33e0f5 added None option to MoveDisplay and ResizeDisplay 2001-06-06 19:47:36 +00:00
kojima
7e1f0e1e48 fixed [joeyh@debian.org: Bug#99311: full screen maximization cuts off bottom 6 pixels] 2001-06-06 18:20:23 +00:00
dan
adfe32ea1f Changed the character-coding of plmenu.ja from ISO-2022-JP to EUC-JP - Seiichi SATO \<sato@cvs-net.co.jp\> 2001-05-31 18:08:06 +00:00
dan
058079bb19 updated estonian locale file 2001-05-30 22:37:07 +00:00
dan
0156c6f92e new italian po files. 2001-05-28 22:38:21 +00:00
dan
3ab16b3e40 Moved some string related functions from memory.c to string.c 2001-05-27 15:58:28 +00:00
dan
f955b4b61d updated the single click patch to conform with Window Maker 0.65.0's source
code

sent by: Daniel Richard G. <skunk@graphics.lcs.mit.edu>
2001-05-21 22:06:40 +00:00
dan
3fcfc9bc16 better wording for an option in the Expert panel. 2001-05-21 21:12:30 +00:00
dan
128403b487 - fixed problem with WINGs based apps exiting with a "X_RotateProperties"
related error when text was selected in a textfiled (this included
  WPrefs.app and Window Maker itself).
- replaced some malloc's with wmalloc's
2001-05-19 23:07:10 +00:00
kojima
60611fbd47 fixed bug in ScrollTableViewRowToVisible 2001-05-18 17:07:18 +00:00
kojima
7d64e19f5a fixed bug on previous bug fix for tableview overflow bug..
(yeh, i also think cvs should send only 1 mail/day to the list..)
2001-05-17 23:34:47 +00:00
dan
a4486f0cd9 Fixed compilation warning caused by wrong parameter passed to function. 2001-05-17 23:15:19 +00:00
kojima
22ae4f5a3c fixed tableview overflow bug 2001-05-17 22:30:38 +00:00
dan
bcf7358072 Fixed problem with alpha images showing a blue tint on big endian machines 2001-05-15 11:26:12 +00:00
kojima
b444894d88 finished removing focusfollowmouse from wprefs 2001-05-14 15:18:30 +00:00
kojima
205b3f35b9 removed FocusFollowMouse 2001-05-14 14:58:55 +00:00
dan
ab61c599f9 a small update 2001-05-13 23:22:21 +00:00
dan
430c12e2b2 - A few additions and enhancements to the Install script.
- Removed the --disable-sound option to the configure script.
2001-05-13 00:28:55 +00:00
dan
3208e193d7 chinese po files updates 2001-05-11 23:56:51 +00:00
dan
7848a2d03f updated estonian translation 2001-05-11 23:37:46 +00:00
dan
962d9407c1 added missing plmenu.ja to Makefile.am 2001-05-11 23:35:03 +00:00
dan
cf9975125d added notes about hermes library support for Window Maker 2001-05-10 22:45:27 +00:00
dan
28793346ab removed some C++ style comments 2001-05-10 22:24:35 +00:00
dan
19b49b3fc1 - Fixed not working Grayscale visual (was crashing)
- Fixed wrong display of images with alpha in StaticGray and GrayScale visuals
- Hermes lib is used now only to convert if the visual is TrueColor and no
  dithering is necesarry. This is because currently hermeslib doesn't
  support to convert to an indexed destination image (so it can't convert to
  PseudoColor, StaticGray and GreyScale visuals). It can convert to
  StaticColor since this visual uses masks as the TrueColor visual, but
  without dithering. Also hermeslib only supports dithering for just 2
  combinations of source/destination bits/masks, none of which are useful
  for wrlib, so no conversion that needs dithering is currently done
  through hermeslib.
2001-05-10 21:31:13 +00:00
dan
ff5680d010 Fixed displaying of images with alpha (broken by the previous commit).
The fix still doesn't look right (hermes seems to do weird things internally,
and there is no documentation for it)

People with big endian machines please test if it works for you
(install hermes lib first).
Then try to start wmaker in different screen depths (15, 16, 24, 32)
and check if there are depths that do not work (either crash, or
display other colors than you expect).

Little endian machines seem ok.
2001-05-10 15:39:02 +00:00
dan
309a9163bd Fixed calls to hermes lib to work correctly with all depths 2001-05-10 14:28:50 +00:00
dan
ddde229665 - fixed speckles (white dots) on dithered images (bug still present on the
PowerPC architecture, because on LinuxPPC char is unsigned by default, not
  signed like on the other platforms).
  Bug fixed by Philip Derrin <philipd@student.unsw.edu.au>
- miscelaneous bug fixes

We would like people with cvs access experimenting the white 'speckles' on
images to test if they still have the problem.
2001-05-10 00:16:28 +00:00
dan
19ad865f49 Fixed scrolling direction with mouse wheel for horizontal scrollers 2001-05-09 00:37:07 +00:00
dan
41c0e64eac better wording for an option 2001-05-04 02:04:13 +00:00
dan
e826a4122e - client supplied icons that were saved by Window Maker in the directory
~/GNUstep/.AppInfo/WindowMaker/ will be recreated if missing when the
  application starts.
- fixed a small memleak when the client supplied icon was extracted and saved.

Check NEWS on how to fix your old broken XPM's saved to
~/GNUstep/.AppInfo/WindowMaker
2001-04-29 21:21:39 +00:00
dan
0616167b0f - fixed a bug that made the scroller knob jump backwards when dragged (this
bug had no relation with the behavior that #define STRICT_NEXT_BEHAVIOUR
  attempts to accomplish).
2001-04-29 03:24:17 +00:00
dan
3bde6495a3 - Removed the following 3 options from configuration: SelectWindowsMouseButton,
WindowListMouseButton and ApplicationMenuMouseButton.
- Added 4 options to the configuration file for binding workspace actions to
  mouse buttons: MouseLeftButtonAction, MouseMiddleButtonAction,
  MouseRightButtonAction and MouseWheelAction. They replace the above 3
  removed options, but use a different semantic.
- mouse wheel action is runtime configurable now.

Read details about this in NEWS.
2001-04-27 23:41:17 +00:00
dan
649a7ac82c - fixed a bug in the icon chooser dialog that made the selected icon look
wrong if it had alpha blending.
- fixed a bug in WMReparentWidget()
- added WMReparentWidget() to WINGs.h
2001-04-26 02:45:28 +00:00
dan
86154ba01d A few miscelaneous fixes 2001-04-25 02:03:08 +00:00
dan
2eb1f26644 Renamed WMGetApplicationIconBlendedPixmap() to
WMCreateApplicationIconBlendedPixmap() to avoid confusion.
This is because this function does generate a new WMPixmap from the
available icon image by combining it with the specified color and you
need to call WMReleasePixmap() on the generated pixmap after you're
done with it.
This is unlike the case of WMGetApplicationIconPixmap() where it just
returns a pointer to the existing application icon pixmap that was set
before and where you don't need to release it after you're done working
with it.
To avoid this confusion about when you need to release and when not,
one is using Get (get existing, no release needed), while the other is
now using Create (generate a new pixmap, release required) in their
name.

Since this change was made to a function that was just added to the API
in the previous commit, no modification is needed to the existing
applications that use WINGs.
2001-04-24 03:35:02 +00:00
dan
4fb6cd1b1e Removed the last commit comment (a very lenghty one) that was added by
cvs to this file, probably because of the presence of a RCS $Id entry
2001-04-22 02:15:23 +00:00
dan
36e46831e0 For libwraster:
---------------

- Added retain/release mechanism to RImage by adding RRetainImage() and
  RReleaseImage(). RDestroyImage() is an alias to RReleaseImage() now, but
  will be removed in a future release because it no longer fits with the
  semantics. Will be kept for a while to allow a smoother transition.
  More about in wrlib/NEWS


For WINGs:
----------

- Small API change:
  1. Renamed WMSetApplicationIconImage(), WMGetApplicationIconImage() and
     WMSetWindowMiniwindowImage() to respectively WMSetApplicationIconPixmap(),
     WMGetApplicationIconPixmap() and WMSetWindowMiniwindowPixmap()
     They operate on a WMPixmap which is practically an X Pixmap with no alpha
     channel information and the new name is more suggestive and also leaves
     room for the new functions added for operating on images with alpha info.
  2. Added WMSetApplicationIconImage() and WMGetApplicationIconImage() which
     operate on an RImage and store alpha information too.
  3. Added WMGetApplicationIconBlendedPixmap() which will take the image with
     alpha set by WMSetApplicationIconImage() and will blend it with a color.
     If color is NULL it will blend using the default panel color (#aeaaae)
  All these changes will allow WINGs to handle images with alpha blending
  correctly in panels and wherever else needed. More about in WINGs/NEWS.
- updated panels to use the newly available RImages if present and fallback
  to old WMPixmaps if not, to properly show alpha blended images.
- replaced some still left malloc's with wmalloc's.


For Window Maker:
-----------------
- Fixed wrong mapping position of the "Docked Applications Panel" for some
  icons.
- Smoother animation for the smiley =)
- Made images with alpha blending be shown correctly in the panels and the
  icon chooser.
- The icon image set to be shown in panels ("Logo.WMPanel") will be
  automatically updated if its entry in WMWindowAttributes changes (without
  a need to restart as until now).


*** Note!!! ***

If you are developing applications with one of libwraster or libWINGs
then you should look to wrlib/NEWS and WINGs/NEWS to see what changed
and how should you update your code.
2001-04-21 07:12:21 +00:00
dan
eb11184ef0 Made the menus be mapped on the center of the screen when invoked with the
keyboard shortcuts.
2001-04-20 01:22:41 +00:00
dan
656a1c17e4 Forgot to add misc.c to the cvs tree 2001-04-19 21:12:08 +00:00
dan
b061bf9832 Put back int instead of socklen_t, because in libc5 socklen_t is not
defined making the compilation process to fail.
2001-04-19 21:09:52 +00:00
dan
ee49804d93 Setup a new cvs commit notification script that does log accumulation
and sends only one email message per cvs log message.

The email address where to send notification is no longer set in this
file (.cvsnotify), but this file can still be used to set extra email
addresses (one per line) where email should be also sent on cvs commit.
2001-04-19 20:38:56 +00:00
dan
6a1c354d3f testing new cvs notify script that does log accumulation 2001-04-19 20:27:02 +00:00
dan
1ca5543ecb testing new cvs notify script that does log accumulation 2001-04-19 20:15:51 +00:00
dan
79def3b196 new cvs notify script that does log accumulation 2001-04-19 20:10:01 +00:00
dan
1e5ca9ae9f testing new cvs notify script that does log accumulation 2001-04-19 20:08:25 +00:00
dan
c03f50530d testing new cvs notify script that does log accumulation 2001-04-19 20:06:06 +00:00
dan
010ce93e92 testing new cvs notify script that does log accumulation 2001-04-19 20:04:44 +00:00
dan
6df4a38a50 testing new cvs notify script that does log accumulation 2001-04-19 19:59:22 +00:00
dan
fd4937cd97 test for a new mail notification script 2001-04-19 19:52:50 +00:00
dan
648d75c299 - put back wmksize(), wmkrange() and wmkpoint() as functions instead of macros
- fixed some compilation warnings with -Wall
- some code cleanup
2001-04-19 01:04:48 +00:00
id
03824d5324 allow to scroll the virtual desktop further than the desktop geometry. 2001-04-18 22:12:20 +00:00
id
829e9d30fe add an option to virtual desktop 2001-04-18 22:08:34 +00:00
dan
4341224f6e Fixed label in crash panel to wrap. 2001-04-18 14:44:57 +00:00
dan
c3d2a890d7 - Fixed crashing bug when name and class were empty for a docked app.
- Removed MIN() and MAX() macros and replaced them with WMIN() and WMAX() from
  WINGs.
- Added a hint that Window Maker crashed, to allow windows to be placed
  in their correct previous positions after a crash situation and also to
  preserve their state before the crash (minimized, shaded, hidden, ...)
2001-04-18 00:25:58 +00:00
dan
10e7985961 - Made the Gnome tasklist skip the windows with the "Skip window list" flag
enabled. (patch from Bastien Nocera <hadess@hadess.net>)
- Small code cleanup in src/workspace.c
2001-04-17 01:02:21 +00:00
id
9d1306bf01 disable scrolling menu when it is in virtual desktop mode.
you have to click and drag to scroll the menu.
2001-04-16 13:33:50 +00:00
dan
5c37df521e Moved color panel testing to wtest.c and removed testcolorpanel.c 2001-04-16 00:37:34 +00:00
dan
79b17caa73 Added WMCreateBlendedPixmapFromRImage() 2001-04-16 00:10:58 +00:00
dan
3300f79501 Small update of clip colors for some style files. 2001-04-16 00:09:46 +00:00
dan
046403dbbb - added WMRemoveFromArrayMatching(array, match, cdata), which will remove the
first element in the array that is matched by match(item, cdata)==True.
- added WMArrayFirst(), WMArrayLast(), WMArrayNext() and WMArrayPrevious()
  functions and also WM_ITERATE_ARRAY() and WM_ETARETI_ARRAY() macros, to make
  interfaces to WMBag and WMArray similar and to make life a little simpler
  when iterating through all elements of an array.
- replaced bags with arrays wherever appropriate. This will improve
  performance a bit.
- replaced some recursive code with iterative code in WINGs/selection.c
- some code cleanup is src/
2001-04-15 01:22:56 +00:00
dan
a41b8993e5 Better organized the window inspector panel. 2001-04-12 00:00:06 +00:00
dan
09f4b0d409 Fixed the info panel to work well with icons different in size than the
default GNUstep.xpm
2001-04-11 21:04:31 +00:00
dan
81ccbdc743 - Fixed problem with GNOME apps that have windows which need to stay on the
desktop level.
- Fixed incorrect parsing of display and screen number from $DISPLAY.
2001-04-11 00:14:41 +00:00
dan
e0235bb61b - made "Keep on Top" in the dock/clip menu a checked menu entry. It's _much_
easier to work with it this way.
- better naming of options in the clip options menu.
- better detection of whether to use EXEC or SHEXEC in WPrefs menu editor.
2001-04-10 22:00:41 +00:00
dan
9035122c5f - Now when Window Maker calls wmsetbg to set the background, it will pass the
correct switch to it, depending on the value of the DisableDithering option.
- Replaced some functions with macros in WINGs (wmkpoint(), wmksize() and
  wmkrange()). They're less expensive to call this way.
- Fixed a memleak in the info panel.
2001-04-09 23:43:09 +00:00
id
6bbe6f2b9d fix virtual desk a bit. 2001-04-05 07:43:13 +00:00
dan
7e8bff904f Fixed secure textfields not to allow text selection, to avoid
compromising sensitive information by pasting it to a terminal.
2001-03-23 02:26:15 +00:00
dan
1a3fd2f795 - better and more robust handling of events (timer, idle, input, X) in
WMMaskEvent()
- fixed a bug where input and timer events were not treated for undefined
  periods of time under some circumstances.
2001-03-22 00:56:09 +00:00
dan
80fb289fc9 testing the notification thing 2001-03-21 05:02:17 +00:00
dan
5045cdbe60 updated Changelog about the recent move from WINGs.h to WUtil.h for handler definitions 2001-03-21 04:40:34 +00:00
dan
726ba653cf - Moved the timer, idle and input handler definitions from WINGs.h to
WUtil.h among with their callbacks and prototypes, because they're not
  GUI related
2001-03-21 04:34:24 +00:00
dan
1cdc0e4c06 added cvs notification by email on commits 2001-03-21 03:45:15 +00:00
dan
8564f5e409 testing cvs notification stuff 2001-03-21 03:41:06 +00:00
dan
a719eb98f1 added cvs notify file, with email addresses where to send email on commits 2001-03-21 03:39:27 +00:00
dan
a8da38c431 testing cvs notification 2001-03-21 03:38:01 +00:00
dan
bc3b44acaa - simpler and more straightforward event handling for timer, idle, input
and X events (also fixed some problems the old handling logic had)
2001-03-21 01:29:22 +00:00
dan
f5dcab0663 - moved WINGs's internal handlers (timer, idle and input) to handlers.c
to avoid code duplication.
- simplified wevent.c and wutil.c
- renamed WMAddEternalTimerHandler() to WMAddPersistentTimerHandler()
2001-03-20 23:46:57 +00:00
kojima
dd9fd9f12a added japanese menu 2001-03-15 22:33:22 +00:00
kojima
f91e2693f9 fixed mem leak 2001-03-15 21:13:54 +00:00
kojima
7f8d51555b fixed timerhandler cpu eater 2001-03-14 04:19:06 +00:00
kojima
c1840e943d *** empty log message *** 2001-03-14 03:58:55 +00:00
kojima
3b7b2ef6b7 *** empty log message *** 2001-03-14 03:18:16 +00:00
kojima
eab5ea31ea paranoid signal stuff 2001-03-14 03:00:34 +00:00
kojima
51b1bf34b9 fixed some signal handling bugs 2001-03-14 02:54:54 +00:00
dan
b85df20ba2 applied small fix patch from Marcelo E. Magallon <marcelo.magallon@bigfoot.com> 2001-03-12 01:56:26 +00:00
kojima
ab641e7320 removed MOUSE_WS_bla
added back easter egg
2001-03-11 18:33:19 +00:00
kojima
e3decb34cb removed useless files 2001-03-11 18:25:47 +00:00
nwanua
f8e94406df restoring copy of wtext.c to cvs (wif ssh) 2001-03-10 04:58:18 +00:00
dan
77e1b7038b testing new loginfo script 2001-03-09 02:48:32 +00:00
dan
6dafb928fe testing new loginfo script 2001-03-09 02:47:16 +00:00
dan
34c2bb0f0e testing new loginfo script 2001-03-09 02:41:29 +00:00
dan
a00fb1b2cf test for loginfo 2001-03-09 00:47:58 +00:00
dan
607bbb7e3a Fixed splitviews regarding index access (first element was never accesible) 2001-03-08 00:49:21 +00:00
dan
012d995ab1 Fixed uninitialized pointer in wtext.c 2001-02-28 05:40:45 +00:00
dan
99defe80a5 added WMGetLabelFont() 2001-02-26 14:53:30 +00:00
dan
1a1775bae0 - Made scrolling of text in dialog panel smoother
- Added WMGetPanelFont()
2001-02-26 14:51:17 +00:00
dan
c720860ed3 Fixed crashes in 24 and 32bpp after introduction of hermeslib support 2001-02-26 00:43:44 +00:00
kojima
64defd4d22 fixed scroller bug when displaying scroller before
setting initial values
2001-02-25 20:47:04 +00:00
dan
054d7cc006 wrong pointers, but code was not used so problem didn't show up anyway 2001-02-25 03:13:32 +00:00
kojima
c7f5318a41 er.. fixed some typo 2001-02-24 00:35:15 +00:00
dan
fc38d1ca16 fixed a typo 2001-02-23 01:49:06 +00:00
nwanua
9451aae632 now when a button click "links" to another page, instead of it
being destroyed right away, a timer handler queues it for 10 seconds
later (hopefully enough time for the buttons callback to have returned).
... 10 seconds may not be enough for ALL widget callbacks...
2001-02-22 07:48:28 +00:00
nwanua
ae9e955f10 added a #define for WMClearText 2001-02-22 07:32:36 +00:00
dan
f6a889910a removed no longer needed done members in panel structures. 2001-02-22 04:13:35 +00:00
dan
ae52b2a437 Fixed incorrect color retrieval 2001-02-21 04:39:04 +00:00
dan
d5ebb27e2d spelling typo fixed 2001-02-21 03:59:29 +00:00
kojima
10972f2666 adapted for SetViewExpands... 2001-02-20 23:39:06 +00:00
kojima
affcc3babd various fixes, scrollview scrollers, text painting 2001-02-20 23:38:36 +00:00
dan
4521852297 Added call to Hermes_Init() 2001-02-20 09:31:57 +00:00
kojima
58ed9abf8d new wsetfont stuff 2001-02-20 01:28:11 +00:00
nwanua
6684492033 more cursor motion and text entry fixes, esp. for graphic blocks...
also added stipple overlay for selected graphics
2001-02-19 07:22:38 +00:00
kojima
26799953c9 missing header 2001-02-18 01:01:36 +00:00
kojima
36ebcf1949 fixed wrlib version # 2001-02-18 00:46:05 +00:00
kojima
8d988e5eae Hermes support 2001-02-18 00:41:22 +00:00
kojima
e926227b3e ble 2001-02-17 22:57:04 +00:00
kojima
315136991d bla 2001-02-17 22:55:50 +00:00
kojima
57bc9c54f3 kbd shortcuts for icon dialog 2001-02-17 22:46:29 +00:00
kojima
b04c4ea500 added WINDOWS_MENU to rootmenu 2001-02-17 21:44:22 +00:00
kojima
50e85f57f2 fixed vertical scrolling bug 2001-02-16 01:34:21 +00:00
dan
d9249dd99a Removed all references to REDUCE_APPICON 2001-02-14 04:12:06 +00:00
kojima
870252297a *** empty log message *** 2001-02-14 03:23:46 +00:00
kojima
07c9bb7d8d programmatic scroller changes send notifications
fixed bug with tableview resize
made tableview column resizing
2001-02-13 23:00:14 +00:00
kojima
2172a4478e temporary removal of font changer until it's fixed 2001-02-12 19:36:00 +00:00
dan
8f0d2f9e4b Added estonian locale from Ivar Smolin <okul@trenet.ee> 2001-02-12 13:59:59 +00:00
nwanua
bc7d29d46e fixed arrow navigation quirks and color mem leaks 2001-02-12 06:09:08 +00:00
kojima
d06532cb3e added collapsing option 2001-02-11 04:29:30 +00:00
kojima
61933ceaa4 added stack cycling 2001-02-11 03:13:45 +00:00
kojima
7a491db6c1 new appicon grouping stuff 2001-02-11 02:18:26 +00:00
dan
0fae7d3e77 . 2001-02-11 01:07:10 +00:00
kojima
0667b39554 hadess gnome fix 2001-02-11 00:10:30 +00:00
kojima
de7f00d474 fixed some stuffs 2001-02-10 22:27:50 +00:00
richard
14f2db1eb2 bracket enum declarations with preprocessor defines to avoid
redefinition of the same enums.
2001-02-10 18:13:32 +00:00
nwanua
e4ce88e7f1 fixed reqBlockSize... sometimes X%Y was zero... very bad 2001-02-09 17:06:15 +00:00
nwanua
21ab029532 tiny updates 2001-02-09 17:01:51 +00:00
kojima
543a46659b aded new stuffs 2001-02-09 16:05:49 +00:00
kojima
05f2a74ef5 fixed modifier bug in textfield again 2001-02-09 16:03:09 +00:00
richard
4d8e691608 Make window stacking level changes to match GNUstep. 2001-02-09 15:56:52 +00:00
dan
40386e1d40 . 2001-02-09 03:20:54 +00:00
dan
a1fb870fe8 - Added example of using WMCOnnection for a server like program.
- Added README with a short description of what each example does.
2001-02-09 03:12:16 +00:00
kojima
9d88b14f59 tomka's i18n fixes 2001-02-08 22:43:00 +00:00
kojima
f91f2eb173 changed top widget of panels from frame to box 2001-02-08 21:54:12 +00:00
dan
15b720046b fixed a label to wrap. 2001-02-04 03:47:25 +00:00
dan
0502a80dc7 new wsetfont script updated for bulgarian from
Anton Zinoviev <zinoviev@debian.org>
2001-02-04 03:27:45 +00:00
dan
17ae285f37 Fixed a bug causing sigsegv for a WMList with more than 32767 items 2001-01-30 21:04:52 +00:00
dan
4637c09d19 - Added Jim Knoble's 'no polling' patch. 2001-01-30 03:04:02 +00:00
dan
8b7930f6c9 Removed carriage returns added by error to this file. 2001-01-26 23:27:10 +00:00
kojima
25b82b5b8c slovak stuff 2001-01-26 19:31:11 +00:00
kojima
2cf8c125a5 misc. fixes 2001-01-26 19:30:53 +00:00
dan
ff5afa20f2 . 2001-01-25 01:58:59 +00:00
dan
617525a573 New wkdemenu.pl from Malcolm Cowe 2001-01-25 00:22:07 +00:00
dan
c4f147ef01 . 2001-01-25 00:00:58 +00:00
dan
14e5cc8357 Renamed se.po to sv.po 2001-01-24 23:56:38 +00:00
dan
b21ad7ad2d Fixed non-responding panels in wmaker. 2001-01-23 03:51:46 +00:00
dan
8493be9734 Added a missing function declaration 2001-01-23 02:52:14 +00:00
kojima
070645e329 *** empty log message *** 2001-01-21 15:43:07 +00:00
richard
0bbbdcb92f Remove code disabling focus handling for GNUstep apps 2001-01-21 10:44:13 +00:00
dan
714db5cb3a Updated header file for latest changes in the function prototypes 2001-01-21 03:00:00 +00:00
kojima
e0fbdaa15e changed stuff in WMSetBoxExpandsToParent 2001-01-21 00:19:02 +00:00
dan
f9778df784 Fixed a mem leak in WMList 2001-01-19 01:45:29 +00:00
dan
a20aebdef2 - Made all changes for moving WINGs headers in the WINGs subdirectory.
- Updated get-{wings|wutil}-flags accordingly
2001-01-18 19:21:56 +00:00
dan
6a3b06e609 Finished the generic tree node data type 2001-01-18 16:59:15 +00:00
kojima
bb886be82e added responder chain alike stuff for relaying kbd events from widget to widget 2001-01-18 02:00:56 +00:00
dan
1b587b01ee Applied patch from Largo to update sound related stuff and documentation 2001-01-18 01:33:44 +00:00
kojima
b4851afbb7 *** empty log message *** 2001-01-16 16:08:40 +00:00
dan
fea4c4c84e Reverted the gnustep commented code. it seems better with the patch, but still buggy 2001-01-12 13:24:21 +00:00
kojima
5c62197542 fixed autoexpand to parent 2001-01-11 16:31:23 +00:00
dan
017f3e5e4f fixed an truncated word in a label (not enough width) 2001-01-11 03:02:31 +00:00
dan
7d88519c75 updates to the tree code 2001-01-11 02:59:32 +00:00
dan
a7ec9dab95 - Preliminary tree code
- added a key enumerator to hashtables (similar to value enumerator,
  just that it enumerates all keys in the hash)
2001-01-11 02:35:21 +00:00
dan
9a43af3d83 Fixed wrong size of the alert panel buttons 2001-01-11 01:41:14 +00:00
kojima
b6f543df77 fixed various bugs 2001-01-10 21:10:39 +00:00
dan
61675a7e19 Fixed a couple of crashing bugs generated by dereferencing of 0x0
pointers (added by the new modal loop code)
2001-01-10 04:54:22 +00:00
dan
1b41d56ad0 - updated code to use the new runmodal loop where necessary.
- made the WMRunModalLoop() reentrant (a modal panel can have its own
  modal panel and so on) by saving the modal related information when
  entering the modal loop and restoring it after.
2001-01-10 04:24:11 +00:00
dan
bc25a31733 Fix?? for the gnustep focus problem 2001-01-10 03:05:39 +00:00
kojima
22eb14c9d5 changed panel to use boxes 2001-01-09 16:45:14 +00:00
kojima
35c5908565 fixed bug in wmaker.inst 2001-01-09 15:51:20 +00:00
kojima
8ed773a437 fixed stupid bug in get-wings-flags 2001-01-07 03:53:56 +00:00
id
efb4aa5b74 remove stuffs 2001-01-07 02:59:11 +00:00
id
85e601eabc heh 2001-01-07 02:30:35 +00:00
id
2b9ffb0bdb add plugins dir to Makefile.am 2001-01-07 02:05:45 +00:00
kojima
2a67a96d86 updated timestamps.. 2001-01-07 01:34:07 +00:00
kojima
7ab70f692f fixed typo bug in WPrefs/WindozeCycling
commented out unfinished background stuff in WPrefs
added updated potfiles
fixed circulate raise
2001-01-06 23:52:00 +00:00
kojima
c6199adc29 updated galician translation 2001-01-06 22:48:11 +00:00
kojima
e314838447 fixed bug in builtin xpm loader
fixed crash bug in menu editor
2001-01-06 22:38:07 +00:00
id
bb7314ddac remove plugin 2001-01-06 18:59:12 +00:00
id
ddf5fe3abe remove plugins 2001-01-06 18:58:29 +00:00
id
8fb5a4c7fe remove drawstring plugins 2001-01-06 18:54:15 +00:00
id
142db0ae2a remove drawstring plugin 2001-01-06 18:42:42 +00:00
id
2954c53d67 add plugins in SUBDIR 2001-01-06 18:41:41 +00:00
kojima
5475530205 added updated pot files for pt/es from conectiva 2001-01-06 17:50:06 +00:00
kojima
a7d22c48b4 added item copying to menu editor in wprefs 2001-01-06 17:43:18 +00:00
kojima
c6c0954767 *** empty log message *** 2001-01-06 17:20:46 +00:00
kojima
8f1781cd4e renamed tabledelegates files 2001-01-06 17:20:04 +00:00
kojima
0b9cfd7c8e applied hadess patch for gnome panel 2001-01-06 17:05:50 +00:00
kojima
1ac8c2a6ce fixed missed sgi cc compat bug 2001-01-06 16:42:16 +00:00
kojima
3874f848c1 fixed compilation probs with SGI cc 2001-01-06 01:52:27 +00:00
kojima
d9540f37bf fixed bugs in configure.in, removed 2001-01-05 23:32:10 +00:00
kojima
f8c8382b1e put back mmx stuff 2001-01-05 22:57:12 +00:00
593 changed files with 142391 additions and 93288 deletions

View File

@@ -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

6
.cvsnotify Normal file
View File

@@ -0,0 +1,6 @@
#
# You can add here extra email addresses (one per line) where notifications
# should be sent on cvs commit.
# This is easier than to modify CVSROOT/loginfo to add extra addresses there.
# Lines that start with # or empty lines are ignored.
#

12
AUTHORS
View File

@@ -68,6 +68,9 @@ Various bugfixes
Ullrich Hafner <hafner@bigfoot.de>
Better detection of gfx libraries, added IconTitleColor/IconTitleBack
Matthew Hawkins <matt@mh.dropbear.id.au>
former temporary project maintainer
Greg Hayes <sdc@choice.net>
Twisted miniaturization animation
@@ -102,10 +105,13 @@ EMACS/keypad like cursor movement for WINGs textfield
Jim Knoble <jmknoble@pobox.com>
made autoarrange icons a runtime option, SHADOW_RESIZEBAR c-time option,
no workspace switch to the same workspace, dashed icon selection,
misclellaneous bug fixes, definable cursors..
misclellaneous bug fixes, definable cursors, --no-polling command line option.
The JED Text Editor <xjed@windowmaker.org>
Project maintainer
Alfredo K. Kojima <kojima@windowmaker.org>
Project maintainer
The guy who types random keys to feed JED with the necessary entropy
Jay Kominek <jkominek@xtn.net>
smart and random placement
@@ -211,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,

View File

@@ -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
View File

@@ -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

View File

@@ -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

460
ChangeLog
View File

@@ -1,3 +1,462 @@
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:
.............................
- Disabled window birth animation by default (while it was ok with normal
windows, it was very annoying with menus editing in WPrefs.app)
- Added ability to shade/unshade a window using the mouse wheel.
- Fixed compilation for systems that required -lintl for WINGs
(Jim Knoble <jmknoble@pobox.com>)
- Removed redundant include/lib paths from the get-*-flags scripts
- Updated slovak .po files (Jan Tomka <judas@linux.sk>)
- Added "Save workspace state" switch button on the exit confirmation panel
(based on a patch sent by Jan Tomka <judas@linux.sk>)
- Fixed WPrefs crash when clicking on the menu editor to keep the current menu
(Alexey Voinov <voins@voins.program.ru>)
- Added patch to fix some gnome issues (Les Schaffer <schaffer@optonline.net>)
- SIGTERM is now handled and saves the internal state before exiting (like
SIGHUP and SIGINT already do). Now a "kill wmaker_pid" will exit cleanly
saving dock/clip/session information on exit.
- Added an internal strcasecmp() to WINGs (only on systems where's not present)
- Deminiaturizing a window that is also shaded, will perform an unshade too.
(Note that this only applies to deminiaturizing shaded windows. Unhiding
an application will keep the shaded/unshaded state of windows.)
- Removed compile time option for definable cursors and made them available by
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).
- Fixed user and global defaults domain merging to preserve values present in
global but not in user, in sub-dictionaries.
- Made dock/clip steal appicons of applications that were started from a
shell/xterm or from the main menu, if there is a docked appicon of that
class that is not running at the time the app is launched.
- Added animation to show that the appicon was stolen by the dock (the way
NEXTSTEP did - map an appicon as it normally would have been, then slide it
to the position the docked appicon is).
- Updated the animation constants for scrolling/sliding/shading to better
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
and further changes in the global domain file for those merged values was
ignored making a system admin unable to set global defaults for all users
using the global domains.
- Fixed bug with improper setting of root/titlebar cursor (definable cursors).
Changes since version 0.65.1:
.............................
- fixed crash when saving empty menu item in WPrefs
- Fixed some more bash specific constructs in wsetfont.
(Marcelo E. Magallon <marcelo.magallon@bigfoot.com>)
- fixed crash with broken apps that set null WM_CLASS
- fixed crash when with gnome panel and multi-screens, some menu
updates and applied various other patches from
(Crutcher Dunnavant <crutcher@redhat.com>)
- po file fixes (Crutcher Dunnavant <crutcher@redhat.com>)
- replaced I18N_MB with I18N in one place in src/wconfig.h.in
- fixed default clip title font in WindowMaker.in
- fixed some locale related problems (Yukihiro Nakai <ynakai@redhat.com>)
- fixed a bug in RCombineAreaWithOpaqueness() (Brad <lists@anomie.yi.org>)
- 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
- 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
compatibility header file is provided which maps old libPropList
function names to the new WINGs based proplist names allowing old code
to be linked to WINGs with minimal changes. For details on how to use
the compat mode, read the comments on top of WINGs/WINGs/proplist-compat.h
More details about this can be found in WINGs/ChangeLog and WINGs/NEWS.
Say bye, bye libPropList =)
- rewrote all Window Maker code to use the new WINGs based proplist functions.
- fixed a few compilation warnings and a problem caused by an uninitialized
variable.
Changes since version 0.65.0:
.............................
- removed FocusFollowMouse from wmaker and WPrefs
- fixed problem with alpha images showing a blue tint on big endian machines
- fixed problem with WINGs based apps exiting with a "X_RotateProperties"
related error when text was selected in a textfiled (including WPrefs.app
and Window Maker itself).
- fixed bug with maximization of windows with fixed resize increments
- added None geometry display type
- fixed window enumeration bug
- removed GNUisms from wsetfont (Marcelo E. Magallon <marcelo.magallon@bigfoot.com>, Masahide -mac- NODA <mac@clave.gr.jp>)
- added slovakian translations from (tomka@oalevice.sk)
- added WINGs i18n patch from tomka@oalevice.sk
- fixed wmsetbg.c to work in servers capable of multiple depths (overlay)
- added HMaximizeKey (Ruda Moura <ruda@conectiva.com.br>)
- fixed bad SIGPIPE handling setup across forks (Philippe Troin <phil@fifi.org>)
- added workaround for bug in locale handling on font set creation (Seiichi SATO <sato@cvs-net.co.jp>)
- Fixed some non-portable shell constructs used in installed scripts
(Johnny C. Lam <lamj@stat.cmu.edu>)
- Fixed crash with long titles in the window list menu (buffer overflow)
(Alban Hertroys <dalroi@wit401310.student.utwente.nl>, reported by
Robert Marshall <robert@chezmarshall.freeserve.co.uk>)
- Replaced almost all sprintf() calls with snprintf()
- fixed crash when removing menu entry for Window List or Workspace submenu
- added WINDOW_BIRTH_ZOOM2 (Éric Tremblay <delt@razorback.yi.org>)
Changes since version 0.64.0:
.............................
- fix with gnome hints stuff, related to tasklist/bar
- ripped off single appicon stuff
- added better appicon handling of apps of the same type
- applied patch for wkdemenu (Malcolm Cowe <malk@bruhaha.co.uk>)
- added WINDOWS_MENU submenu type for root menu (Bastien Nocera <hadess@hadess.net>)
- added kbd shortcuts for icon chooser
- use Hermes in wrlib
- removed MOUSE_WS_WHEEL #defines
- fixed bug with multibyte text on libc5 systems (Osamu Ajiki <osam-a@astroarts.co.jp>)
- fixed race conditions on signal handlers
- SIGINT will gently exit, SIGTERM will not be handled
- When Window Maker calls wmsetbg to set the background, it will consider the
value of the DisableDithering option and pass the right switch to wmsetbg.
- fixed a memleak in the dialog panels.
- made "Keep on Top" in the dock/clip menu a checked menu entry. It's _much_
easier to work with it this way.
- Fixed problem with GNOME apps that have windows which need to stay on the
desktop level.
- Fixed incorrect parsing of display and screen number from $DISPLAY.
- Organized the inspector panel a bit better.
- Replaced bags with arrays wherever appropriate. This will improve
performance a bit.
- Made the Gnome tasklist skip the windows with the "Skip window list" flag
enabled. (Bastien Nocera <hadess@hadess.net>)
- Fixed crashing bug when name and class were empty for a docked app.
- Removed MIN() and MAX() macros and replaced them with WMIN() and WMAX() from
WINGs.
- Added a hint that Window Maker crashed, to allow windows to be placed
correctly after a crash situation.
- Added a hint that Window Maker crashed, to allow windows to be placed
in their correct previous positions after a crash situation and also to
preserve their state before the crash (minimized, shaded, hidden, ...)
- Fixed wrong mapping position of the "Docked Applications Panel" for some
icons.
- Smoother animation for the smiley =)
- Added retain/release mechanism for RImages. RDestroyImage() has become
obsolete. More about this can be found in wrlib/Changelog and wrlib/NEWS.
- Small API change in WINGs to allow images with alpha blending set as the
application icons be shown correctly. More about this in WINGs/Changelog
and WINGs/NEWS.
- Made images with alpha blending be shown correctly in the panels and the
icon chooser.
- The icon image set to be shown in panels ("Logo.WMPanel") will be
automatically updated if its entry in WMWindowAttributes changes (without
a need to restart as until now).
- Fixed a bug in the icon chooser dialog that made the selected icon look
wrong if it had alpha blending.
- Removed the following 3 options from configuration: SelectWindowsMouseButton,
WindowListMouseButton and ApplicationMenuMouseButton.
- Added 4 options to the configuration file for binding workspace actions to
mouse buttons: MouseLeftButtonAction, MouseMiddleButtonAction,
MouseRightButtonAction and MouseWheelAction. They replace the above 3
removed options, but use a different semantic. More in NEWS.
- client supplied icons that were saved by Window Maker in the directory
~/GNUstep/.AppInfo/WindowMaker/ will be recreated if missing when the
application starts.
- fixed a small memleak when the client supplied icon was extracted and saved.
Changes since version 0.63.1:
.............................
- fixed messup in get-{wings,wutil,wraster}-flags
- fixed #wmdatadir# substitution in wmaker.inst
(Seiichi SATO <sato@cvs-net.co.jp>)
- Removed spurious focus disabling for GNUstep applications - but retain
code that lets GNUstep apps control their window titlebar.
(Richard Frith-Macdonald <rfm@gnu.org>)
- Fixed broken panels.
- Renamed se.po to sv.po
- New version of wkdemenu.pl (from Malcolm Cowe <malk@bruhaha.co.uk>)
- new updated Slovak translations (Jan Tomka/judas@hell <tomka@oalevice.sk>)
- integrated the 'no polling' patch from Jim Knoble <jmknoble@jmknoble.cx>.
- new wsetfont script (Anton Zinoviev <zinoviev@debian.org>)
- lots of i18n fixes (Jan Tomka/judas@hell <tomka@oalevice.sk>)
- window levels changed to match GNUstep <rfm@gnu.org> ... src/GNUstep.h
src/WindowMaker.h src/window.c wmlib/WMaker.h WINGs/WINGs/WINGs.h
Changes since version 0.63.0:
.............................
- fixed compile prob with SGI compiler
- decreased nice() value in wmsetbg
- applied gnome panel not-covering patch from (Bastien Nocera <hadess@hadess.net>)
- added item copy to WPrefs menu editor
- added locale selection code for menu in wmaker.inst (Eliphas Levy Theodoro <eliphas@conectiva.com.br>)
- fixed bug in built-in xpm support (Alessandro Strada <a.strada@libero.it>)
- removed plugin support
- fixed a crash bug in WPrefs menu editor
- added es and pt potfiles from conectiva/eliphas
- added updated galician potfile (Jesus Bravo Alvarez <jba@pobox.com>)
- added update hungarian potfiles (HORVATH Szabolcs <horvaths@inf.elte.hu>)
- added updated single-click patch from John Morrissey <jwm@horde.net>
- added updated danish translations (Birger Langkjer <birger.langkjer@image.dk>)
- fixed WindozeCycling config in WPrefs
- fixed circulate raise withour WindozeCycling
Changes since version 0.62.1:
.............................
- added blackbox style igradient (interwoven)
@@ -50,6 +509,7 @@ Changes since version 0.62.0:
- fixed sticky hint handling in GNOME
- fixed saving of maximized state for restart
Changes since version 0.61.1:
.............................

63
FAQ
View File

@@ -234,14 +234,11 @@ inside the WindowMaker directory.
Installation:
-=-=-=-=-=-=-
2.1 Where can I get proplist.h?
-------------------------------
You didn't read the INSTALL file, did you? Please read that now.
libPropList is downloaded seperately and you need to install it _before_
attempting to configure Window Maker.
2.1 Where can I get libPropList/proplist.h?
-------------------------------------------
starting with Window Maker 0.70.0, libPropList is no longer needed.
It was obsoleted by adding property list handling code to the WINGs library.
You can find a gzipped tar archive of libPropList at
ftp://ftp.windowmaker.org/pub/libs/
2.2 Why do no icons show up after installing Window Maker >= 0.15.x
@@ -368,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.
@@ -389,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
@@ -1077,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",
@@ -1301,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!
@@ -1460,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:

View File

@@ -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
View 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 systémová proměnná LC_TYPE správnou
hodnotu, tak ji nenastavujte.

57
FAQ.I18N.sk Normal file
View File

@@ -0,0 +1,57 @@
(Toto je len preklad dosť starého súboru! Ak by ste mali skutočne problémy
s Window Makerom a slovenčinou a v tomto súbore by ste nenašli pomoc,
pošlite popis problému na adresu <judas@linux.sk>.)
Ak vám nefunguje podpora miestnych nastavení, skontrolujte nasledujúce:
- premenná LANG je nastavená na vaše miestne nastavenia a tieto
sú podporované vašim OS alebo X emuláciou. Zoznam podporovaných
miestnych nastavení získate príkazom "locale -a". Zoznam
miestnych nastvení podporovaných X emuláciou sa nachádza v
súbore "/usr/X11R6/lib/X11/locale/locale.alias".
- používate správne fonty pre svoje miestne nastavenia. Ak
používate font s odlišným kódovaním ako je nastavené v Xlib
alebo libc, môžu sa diať čudné veci. Skúste explicitne zadať
kókovanie do premennej LANG, teda sk_SK.ISO-8859-2. Znovu,
pozrite si súbor "/usr/X11R6/lib/X11/locale/locale.aliax".
- ak váš OS nepodporuje žiadne miestne nastavenia alebo váš OS
nepodporuje vaše miestne nastavenia, môžete použiť emuláciu
podpory miestnych nastavení X Window Systému. To urobíte
voľbou "--with-x-locale" skriptu configure. Ak používate
komerčný OS ako Solaris, IRIX, AIX, ..., pravdepodobne
nepotrebujete použiť X emuláciu miestnych nastavení. Ale ak
je váš OS Linux alebo NetBSD alebo ..., je možné, že vaše
miestne nastavenia ešte nie sú podporované. Vtedy použite
"--with-x-locale".
Pozor: aby ste mohli používať X emuláciu miestnych nastvení,
vaša Xlib musí byť skompilovaná s touto podporou.
Xlib v Linux RedHat5.0 tak skompilovaná nie je.
(RH4.x je v poriadku). Prekompilovaná Xlib pre
RH5.0 s podporou emulácie miestnych nastavení je
dostupná na adrese
ftp://ftp.linux.or.jp/pub/RPM/glibc
- fonty, ktoré používate, podporujú vaše miesne nastavenia.
Ak vaše nastavenia fontov v ~/GNUstep/Defaults/WindowMaker
vyzerajú takto:
WindowTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*";
MenuTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*";
......................................................
potom nemôžete zobrazovať znaky iné ako iso8859-x vo fonte
helvetica. Jednoduchý spôsob ako zobrazovať znaky rôznych
jazykov je nastaviť všetky fonty takto:
"-*-*-medium-r-normal-*-14-*-*-*-*-*-*-*"
a tiež potrebujete zmeniť nastavenia fontov v súboroch štýlov
v adresári ~/Library/WindowMaker/Style.
- premenná LC_CTYPE nie je nastavená alebo má správnu hodnotu. Ak
si nie ste istí, nenastavujte ju.

159
INSTALL
View File

@@ -21,6 +21,7 @@ SUPPORTED PLATFORMS
- Solaris 2.5.1, 2.5.2
- Solaris 2.6.0
- Solaris 2.7beta
- Solaris 2.8 on Ultra Sparc 10 and E450
- SCO Unix
- SGI Irix 5.x, 6.5
- OSF/1
@@ -37,7 +38,13 @@ SUPPORTED PLATFORMS
- PowerMac / Power MachTen 4.1.1 over MacOS
- Amiga 3000 running RedHat Linux 5.1 (Rawhide)
- 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
All registered trademarks are registered by their owners. (duh)
Patches to make it work on other platforms are welcome.
@@ -57,34 +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.
- libPropList
This library can be found in ftp://ftp.windowmaker.org/pub/libs
or in ftp://ftp.gnome.org/pub/libPropList
Install it before building 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
- lex (or flex) and yacc (or bison)
These are used by libPropList. lex is actually not needed since
it's output file is included, but either me or automake is stupid,
causing the configure script for libPropList to simply abort for no
convincent reason if lex is not found.
- Xft2
and its dependencies (such as freetype2 and fontconfig)
You will also need the development files for it (xft2-devel)
OPTIONAL:
@@ -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.
@@ -334,15 +286,6 @@ apply.
INSTALLATION:
=============
Unpack WindowMaker-extra-<version-number>.tar.gz in /usr/local/share
You can get the file at ftp://ftp.windowmaker.org. This file is optional
and only have a few icons, and themes. Look for the latest <version-number>
available.
Also there is a WindowMaker-extra.readme to instruct you where that package
should go.
Build Window Maker
------------------
For a quick start, type the following in your shell prompt:
@@ -374,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.
@@ -417,6 +360,20 @@ Read the User Guide for a more in-depth explanation of Window Maker.
You might want to take a look at the FAQ too.
Installing the extras package
-----------------------------
Unpack WindowMaker-extra-<version-number>.tar.gz in /usr/local/share
You can get the file at ftp://ftp.windowmaker.org. This file is optional
and only have a few icons, and themes. Look for the latest <version-number>
available.
Also there is a WindowMaker-extra.readme to instruct you where that package
should go.
I don't have the root password :(
---------------------------------
@@ -426,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
@@ -443,10 +400,10 @@ UPGRADING
If you are upgrading from an older version of Window Maker:
1. Configure and build Window Maker as always
2. Install Window Maker (but do not run wmaker.inst)
3. Read the NEWS file and update your configuration files,
if necessary.
1. Configure and build Window Maker as always
2. Install Window Maker (but do not run wmaker.inst)
3. Read the NEWS file and update your configuration files if necessary.
TROUBLESHOOTING
===============
@@ -466,8 +423,7 @@ ltconfig: unrecognized option `--no-reexec'
Try `ltconfig --help' for more information.
configure: error: libtool configure failed
remove the --no-reexec option from aclocal.m4 and libPropList/aclocal.m4
and reconfigure
remove the --no-reexec option from aclocal.m4 and reconfigure
Also make sure the autoconf and automake versions you have installed are:
autoconf 2.13
automake 1.4
@@ -476,12 +432,6 @@ libtool 1.3
Note that it must not be libtool 1.2b, it must be libtool 1.3,
from the GNU sites.
== Cant find proplist.h or libPropList.something
Download and install libPropList from the places pointed to
somewhere else in this file.
== configure doesn't detect libtiff, or other graphic libraries.
Delete config.cache, then rerun configure adding the following options to
@@ -582,30 +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
View File

@@ -0,0 +1,604 @@
Instrukce pro instalaci okenního manažera Window Maker
PODPOROVANÉ PLATFORMY
=====================
("Podporované" znamená, že 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 není potřeba ke zkompilování Window Makeru, protože
libProblist byl přímo zabudován do WINGs. Z toho důvodu 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 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 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 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 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
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í.

594
INSTALL.es Normal file
View File

@@ -0,0 +1,594 @@
Instrucciones de Instalación para Window Maker
PLATAFORMAS SOPORTADAS
======================
(obs: Alguien me mencionó que lo compiló en...)
- Intel GNU/Linux Conectiva 5.9 (beta)
- Intel GNU/Linux Slackware
- Intel GNU/Linux Debian
- Intel GNU/Linux other distributions
- 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 running Linux
- iBook running Darwin
- Windows NT with Cygwin/XFree86
- Sony PlayStation2 running Linux
Todas las marcas registradas están registradas por sus dueños. (duh)
Los parches que lo hagan funcionar en otras plataformas son bienvenidos.
REQUERIMIENTOS:
==============
El siguiente software se necesita para usar Window Maker:
- X11R6.x
Window Maker puede ser compilado en versiones más antiguas de X,
como X11R5 (Solaris) o X11R4 (OpenWindows) pero no funcionará 100%
correctamente.
En tales servidores no habrá íconos de aplicación y tendrá problemas
usando el dock. Actualizar las bibliotecas cliente (Xlib, Xt, etc)
ayudará si no puede actualizar el servidor.
Lo siguiente se necesita para compilar Window Maker:
- Requerimientos básicos y obvios
Si compila Window Maker, asegúrese de tener gcc (u algún otro
compilador ANSI C) y los archivos header de X instalados. Especialmente
para los usuarios de Linux principiantes: debe instalar todos los paquetes
de desarrollo de X y la suite gcc. De lo contrario no será capaz de
compilar ningún programa X, incluyendo Window Maker.
- libPropList
Esta biblioteca se puede encontrar en ftp://ftp.windowmaker.org/pub/libs
o en ftp://ftp.gnome.org/pub/libPropList
Instálela antes de compilar Window Maker.
- autoconf, automake y libtool
Estas herramientas NO son necesarias, pero SI tiene una o más de ellas
instaladas, asegúrese de tener TODO lo siguiente con estas versiones
exactas:
autoconf 2.54
automake 1.4
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
software no las necesita, así que puede desinstalarla sin peligro.
- lex (o flex) y yacc (o bison)
Estas son usadas por libPropList. lex en realidad no se necesita ya que
su archivo de salida está incluido, pero o yo o automake es tonto,
causando que el script configure para libPropList simplemente
aborte sin ningún motivo si lex no es encontrado.
OPCIONAL:
=========
Estas bibliotecas no son necesarias para hacer que Window Maker funcione,
pero están soportadas en caso de que quiera usarlas. Los números de versión
son aquellos que yo tengo (y por lo tanto, garantizo que funciona), pero
otras versiones podría funcionar también.
- libXPM 4.7 o más actual.
Versiones antiguas pueden no funcionar!!!
Disponible en ftp://sunsite.unc.edu/pub/Linux/libs/X/
Hay soporte nativo para archivos XPM, pero no cargará imagenes de
algunos formatos poco comunes.
-libpng 0.96 o más actual y zlib
Para soporte de imágenes PNG.
http://www.cdrom.com/pub/png/
- libtiff 3.4 o más actual.
Para soporte de imaen TIFF.
Puede obtenerla en ftp://ftp.sgi.com/graphics/tiff
- libjpeg 6.0.1 o más actual
Para soporte de imagen JPEG
http://www.ijg.org/
- libgif 2.2 o libungif
Para soporte de imagen GIF.
ftp://prtr-13.ucsc.edu/pub/libungif/
- GNU xgettext
Si quiere usar mensajes traducidos, necesitará GNU gettext.
Otras versiones de gettext no son compatibles y no funcionarán.
Obtenga la versión GNU desde ftp://ftp.gnu.org
OPCIONES DE CONFIGURACIÓN:
=========================
Estas opciones pueden ser pasadas al script configure para activar/desactivar
algunas opciones de Window Maker. Ejemplo:
./configure --enable-kde --enable-gnome
configurará Window Maker para que sea compilado con soporte para KDE y GNOME.
Para obtener una lista de otras opciones, ejecute ./configure --help
--with-libs-from
especifica rutas adicionales por donde se debe buscar bibliotecas.
El -L flag debe preceder a cada ruta, tal como:
--with-libs-from="-L/opt/libs -L/usr/local/lib"
--with-incs-from
especifica rutas adicionales para la búsqueda de archivos header.
El parámetro -I debe preceder a cada ruta, tal como:
--with-incs-from="-I/opt/headers -I/usr/local/include"
--enable-single-icon
activa el agrupamiento de todos los appicons (iconos de aplicaciones)
del WM_CLASS+WM_INSTANCE en uno solo. Esta característica no es soportada
por todos los desarrolladores. Si tiene algún problema con ella, contacte
a su autor: Christopher Seawood <cls@seawood.org>
--disable-shm
desactiva el uso de la extensión MIT de memoria compartida. Esto
ralentizará la generación de texturas un poco, pero en algunos casos
parecerá necesario debido a un error que se manifiesta como íconos y
texturas desordenadas.
--disable-motif
desactiva el soporte para el gestor de ventanas mwm.
--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,
menú de aplicaciones raíz, selección de ventanas múltiple. Note
que no podrá salir más desde dentro de Window Maker; tendrá que usar
kill con la señal SIGTERM o salir de KDE. No aconsejo activarlo.
--enable-modelock
Soporte para bloqueo de estado de lenguaje XKB. Si no sabe que es esto
probablemente no lo necesite.
--enable-sound
activa el soporte del módulo para efectos sonoros.
--disable-xpm
desactiva el uso de la biblioteca XPM aunque este disponible en su
sistema.
--disable-png
desactiva el uso de la biblioteca PNG.
--disable-tiff
desactiva el uso de la biblioteca TIFF.
--disable-gif
desactiva el uso de la biblioteca GIF.
--disable-jpeg
desactiva el uso de la biblioteca JPEG.
--disable-shape
desactiva la forma de ventanas (para oclock, xeyes etc.)
NOTAS ESPECÍFICAS A LA PLATAFORMA:
=================================
- máquinas DEC/Alpha
#>>>>>>>>>>>
From: Anton Ivanov <aivanov@eu.level3.net>
To: Marcelo E. Magallon <mmagallo@debian.org>
Subject: Re: El paquete WindowMaker funciona bien en Alpha?
> Hola,
>
> Estuve leyendo algunos documentos en el tarball de WindowMaker,
> y encontré esto:
>
> | - máquinas DEC/Alpha
> | podría necesitar pasar el parámetro --disable-shm a configure,
> | así ./configure --disable-shm
>
> alguien está teniendo problemas con WindowMaker en Alpha? Puede alguien
> 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 es poco probable de que las ejecute repentinamente en algún momento.
Alpha suele tener alguna ridícula poca cantidad de memoria compartida
configurada.
Así que muchísimas aplicaciones suelen to barf. Concretamente - cdrecord, mysql server, etc.
Verifique donde está el suyo en este momento y súbalo a un valor más adecuado catting la entrada
adecuada de /proc o cambiando el /usr/src/linux/include/asm/shmparam.h.
De lo contrario la memoria compartida en alpha debiera ser completamente funcional y no veo razón
para desactivarla. Las mías están aumentadas a 32 o más en muchas máquinas.
Y si recuerdo correctamente los comentarios en aquél archivo están en realidad mal.
El valor no está en bytes, pero si en palabra de tamaño máquina. Para alpha *8.
Como dije - no ejecuto X en ellas asi que apliqué a todas #include "stdisclaimer.h".
#<<<<<<<<<<<<
- SCO Unix - ejecute configure así
CFLAGS="-belf -DANSICPP" ./configure
-SunOS, Solaris
Si tiene gcc instalado, ejecute configure como:
CPP_PATH="gcc -E -x c" ./configure
Sun cpp le falta algunas características que necesita Window Maker y
puede causarle problemas al analizar sintacticamente los archivos config.
También podría necesitar usar el --with-libs-from y --with-incs-from para
suministrarle el directorio donde libtiff se aloja.
Alguien me envió un mensaje diciéndome que también debe hacer que /usr/local/lib
sea la primera ruta en LD_LIBRARY_PATH para que funcione.
Si tiene un Ultra Creator 3D o alguna otra máquina con gráficos high-end,
asegúrese de iniciar el servidor X con el valor visual por defecto a 24bpp o
podría experimentar problemas con colores destrozados.
Este es un error de wmaker y será reparado.
- GNU/Linux en general
Asegúrese de tener /usr/local/lib en /etc/ld.so.conf y de ejecutar
ldconfig después de instalar.
Desinstale cualquier versión empaquetada de Window Maker antes de
instalar una nueva versión.
- RedHat GNU/Linux
Los sistemas RedHat tienen varios problemas molestos. Si lo usa,
asegúrese de seguir los pasos de más abajo o Window Maker no funcionará:
* si instaló el Window Maker que viene con RedHat, desinstálelo antes de
actualizar;
*asegúrese que no tiene las variables de entorno LANG y LINGUAS establecidas a
en_RN;
*asegúrese de tener /usr/local/bin en su variable de entorno PATH;
* asegúrese de tener /usr/local/lib en /etc/ld.so.conf antes de ejecutar
ldconfig;
*si tiene problemas que mencionan un menaje de error con --no-reexec
desinstale libtool-1.2b e instale libtool-1.3 en su lugar. libtool-1.3
se puede encontrar en ftp.gnu.org. También lea la sección TROUBLESHOOTING
(PROBLEMAS);
* si instaló el paquete Window Maker desde RedHat y está instalando una
nueva versión de WM a mano (compilandolo usted mismo), desinstale antes el
paquete desde RedHat.
*asegúrese de tener un enlace simbólico desde /usr/include/X11 hacia
/usr/X11R6/include/X11 (si no, tipee ln -s /usr/X11R6/include/X11 /usr/include/X11)
* asegúrese de tener /lib/cpp apuntando al programa cpp.
Si tiene alguna duda en cuanto a hacer algunas de las cosas de arriba,
por favor no dude en contactar el soporte para usuarios de RedHat. Ellos
responderán amablemente a todas sus preguntas en lo que respecta a su sistema.
Ellos también conocen mucho más acerca de su propio sistema que nosotros
(nosotros no usamos RedHat).
- PowerPC MkLinux
Necesitará tener la última version de Xpmac. Las versiones más antiguas
parecen tener errores que producen el cuelgue del sistema.
- Debian GNU/Linux
Si quiere soporte JPEG y TIFF, asegúrese de tener libtiff-dev y
libjpeg-dev instalados.
- SuSE GNU/Linux
Si instaló el paquete Window Maker desde SuSE,
desinstálelo antes de instentar compilar wmaker o podría
tener problemas.
- MetroX (version desconocida)
MetroX tiene un error que corrompe pixmaps que se establecen como
fondos de ventana. Si usa MetroX y tuvo problemas raros con texturas, no use
texturas en las barras de títulos. O use un servidor X distinto.
INSTALACIÓN:
=============
Compilando Window Maker
------------------
Para un comienzo rápido, tipee lo siguiente en el prompt del shell:
./configure
make
luego, regístrese como root y tipee:
make install
ldconfig
o si quiere remover los símbolos de depuración desde los binarios y hacerlos más
pequeños, puede tipear:
make install-strip
ldconfig
Esto compilará e instalará Window Maker con los parámetros por defecto.
Si quiere personalizar algunas opciones de compilación, puede hacer lo siguiente.
1. (opcional)Mire en la sección OPCIONES DE CONFIGURACIÓN para ver las
opciones disponibles. También ejecute:
./configure --help
para obtener un listado completo de otras opciones que están disponibles.
2. Ejecute configure con las opciones que quiera. Por ejemplo, si quiere
usar la opción --enable-kde, tipee:
./configure --enable-kde
3. (opcional) Edite src/wconfig.h con su editor de texto favorito y
echele un vistazo por algunas opciones que podría querer cambiar.
4. Compile. Solo tipee:
make
5. Regístrese como root (si no puede hacerlo, lea la sección "No tengo la contraseña de root" :-()
e instale Window Maker en su sistema:
su root
make install
Configuración específica del usuario
------------------------------------
Estas instrucciones no necesitan ser seguidas al actualizar Window Maker
desde una versión más antigua, a menos que se indique de otra forma en el archivo
NEWS.
Todo usuario en su sistema que desee ejecutar Window Maker debe hacer lo siguiente:
1. Instale los archivos de configuración de Window Maker en su directorio home.
Tipee:
wmaker.inst
wmaker.inst instalará los archivos de configuración de Window Maker y
configurará X para que automáticamente lance Window Maker al inicio.
Eso es todo!
Puede tipear "man wmaker" para obtener algo de ayuda general para la
configuración y otras cosas.
Lea la Guia de Usuario para una explicación más a fondo de Window Maker.
Podría querer dar una mirada a la FAQ también.
Instalando el paquete extras
----------------------------
Desempaquete WindowMaker-extra-<número-de-versión>.tar.gz en /usr/local/share
Puede obtener el archivo en ftp://ftp.windowmmaker.org. Este archivo es optativo
y solo tiene unos pocos íconos, y temas. Busque el último <número-de-versión>
disponible.
También hay un WindowMaker-extra.readme que le enseña donde vería ir ese paquete.
No tengo la contraseña de root :(
--------------------------------
Si no puede obtener privilegios de superusuario (no puede ser root) puede
instalar wmaker en su propio directorio home. Para esto, proporcione la
opción --prefix al ejecutar configure en el paso 2 de compilando Window Maker.
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/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
Por supuesto, /home/jshmoe se supone que va a ser reemplazado con la ruta a su
directorio home real.
ACTUALIZANDO
============
Si está actualizando desde una versión antigua de Window Maker:
1. Configure y compile Window Maker como siempre.
2. Instale Window Maker (pero no ejecute wmaker.inst)
3. Lea el archivo NEWS y actualice sus archivos de configuración,
si es necesario.
PROBLEMAS
=========
Cuando tenga alguno problemas durante la configuración (al ejecutar configure),
tal como no poder usar una biblioteca de formato gráfico que piensa tener instalada,
mire en el archivo config.log para obtener ideas sobre el problema.
== Error al cargar las fuentes, siempre que existan.
Intente recompilar sin el soporte NLS.
== Error al configurar
ltconfig: unrecognized option `--no-reexec'
Try `ltconfig --help' for more information.
configure: error: libtool configure failed
quite la opción --no-reexec desde aclocal.m4 y libPropList/aclocal.m4 y
reconfigure.
También asegúrese que las versiones de autoconf y automake que tenga instaladas son:
autoconf 2.13
automake 1.4
libtool 1.3
Note que ella no debe ser libtool 1.2b, debe ser libtool 1.3,
desde los sitios GNU.
== No puedo encontrar proplist.h o libPropList.something
Baje e instale libPropList desde los lugares ya citados en algún lugar
de este archivo.
== configure no detecta libtiff, u otras bibliotecas gráficas.
Elimine config.cache, luego vuelva a ejecutar configure añadiendo las siguientes
opciones a configure (entre sus otras opciones):
--with-libs-from="-L/usr/local/lib"
--with-incs-from="-I/usr/local/include -I/usr/local/include/tiff"
Sustituya las rutas donde están localizadas sus bibliotecas gráficas y sus
correspondientes archivos header. Puede colocar rutas múltiples en cualquiera de
estas opciones, como se muestra en el ejemplo de --with-incs-from . Solo coloque
un espacio entre ellas.
== configure no detecta libXpm.
* Verifique si tiene un enlace simbólico desde libXpm.so.4.9 a libXpm.so
== Segmentation fault al inicio.
* Verifique si la versión de libXPM que tiene es por lo menos la 4.7
* Verifique si tiene una versión actualizada de ~/GNUstep/Defaults/WindowMaker
Si no está seguro, intente renombrar ~/GNUstep a ~/GNUtmp y luego ejecute wmaker.inst
== "...: your machine is misconfigured. gethostname() returned (none)"
* el hostname de su máquina está definido a algo inválido, como comenzar con
un paréntesis. Haga un man hostname para obtener información acerca de como definirlo.
== El menú raíz contiene solo 2 entradas. ("XTerm" y "Exit...")
* Window Maker no está encontrando cpp (el preprocesador de C). Si su
cpp no está ubicado en /lib/cpp, edite src/config.h y corrija la ruta en
CPP_PATH.
== checking lex output file root... configure: error: cannot find output from true; giving up
* Lea la sección REQUERIMIENTOS de este archivo.
LOCALES/INTERNACIONALIZACIÓN
============================
Window Maker tiene soporte de idioma nacional. Para activar este soporte,
debe compilar Window Maker con algunos parámetros adicionales.
0 - Debe tener el paquete GNU gettext instalado. Puede obtenerse en
ftp://prep.ai.mit.edu/pub/gnu/gettext-nnn.tar.gz
Los pasos 1 al 3 pueden saltearse si usa el script Install.
1 - Debe seleccionar los idiomas que quiere soportar. Defina el
LINGUAS a la lista de locales que quiera. El Inglés siempre está
soportado. Ejemplo:
setenv LINGUAS "pt ja de"
en csh
o
export LINGUAS;LINGUAS="pt ja de"
en sh
La lista de locales soportados se pueden encontrar en po/README.
El Inglés es el idioma pr defecto.
Lea po/README si desea traducir y mantener archivos locale para otros
idiomas.
2 - Adicionalmente, si su idioma usa caracteres multi-byte, tal como
Japonés o Coreano, debe definir la opción MultiByteText a YES
en ~/GNUstep/Defaults/WMGLOBAL
3 - Configure, compile e instale Window Maker normalmente.
4 - Para seleccionar un locale particular en tiempo de ejecución debe definir la
variable de entorno LANG al locale que quiera. Por ejemplo, si quiere definir
el locale portugués, debe ejecutar
setenv LANG pt
en csh o
export LANG; LANG=pt
en Bourne sh y similares
Nota: Si tiene definida la variable de entorno LC_CTYPE, debe
indefinirla antes de ejecutar wmaker.
Window Maker busca los archivos de definición de menú en el siguiente orden:
(para portugués brasileño, en este caso):
menu.pt_BR
menu.pt
menu
5 - Si elige un idioma que usa caracteres multi-byte, debe configurar
las fuentes adecuadamente. Lea la página del manual para XCreateFontSet
para obtener más detalles sobre esto. Debe cambiar el archivo ~/G/D/Windowmaker
para las fuentes usadas en barras de título, menús y otras cosas. Para las fuentes
usadas en ventanas de diálogo, cambie ~/G/D/WMGLOBAL. El %d en los nombres de las
fuentes no debe ser quitado. Puede también usar el script wsetfont proporcionado para
esta tarea. Lea el mismo script para obtener instrucciones.
Por ejemplo, puede especificar lo siguiente en ~/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-*";
y en ~/G/D/WMGLOBAL:
SystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
BoldSystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
Las 2 fuentes de arriba son usadas únicamente por aplicaciones que usan WINGs
(WindowMaker y WPrefs.app)
El script wsetfont que se proporciona le permitirá cambiar las definiciones de fuentes
de una manera fácil. De una mirada al script para detalles de uso.
traducido por Efraín Maximiliano Palermo <max_drake2001@yahoo.com.ar>

631
INSTALL.fr Normal file
View File

@@ -0,0 +1,631 @@
Instructions pour l'installation de Window Maker
PLATEFORMES SUPPORTÉES
======================
(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
- Intel GNU/Linux Debian
- Intel GNU/Linux (autres)
- 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
- Solaris 2.8 sur Ultra Sparc 10 et E450
- 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 sous MacOS
- Amiga 3000 sous RedHat Linux 5.1 (Rawhide)
- IBM S/390 sous Linux
- IBM S/390 sous Conectiva Linux (experimental)
- iBook sous Darwin
- Windows NT sous Cygwin/XFree86
- Sony PlayStation2 sous Linux
Toutes les marques déposées sont la propriété de leur propriétaire.
Tout patch qui pourrait faciliter l'adaptation à d'autres plateformes
est le bienvenu.
PRÉ-REQUIS
==========
Les logiciels suivants sont nécessaires à l'utilisation de Window Maker :
- X11R6.x
Window Maker peut être compilé avec des versions plus anciennes de X,
comme X11R5 (Solaris) ou X11R4 (OpenWindows), mais il ne fonctionnera
pas correctement à 100%.
Avec ces serveurs X, les icônes des applications n'apparaîtrons pas,
et vous aurez des problèmes à l'utilisation du dock. La mise à jour
des librairies côté client (Xlib, Xt, etc.) pourront améliorer les
choses si vous ne pouvez pas mettre à jour le serveur.
Les éléments suivants sont nécessaires à la compilation de Window Maker :
- pré-requis de base
Pour compiler Window Maker, assurez-vous que gcc (ou tout autre
compilateur de C ANSI) ainsi que les fichiers d'en-têtes de X sont
installés. Débutants sous Linux : vous devez installer les paquetages
de développement de X ainsi que ceux de la suite gcc. Le cas contraire,
vous ne pourrez jamais compiler aucun programme prévu pour X, y compris
Window Maker.
- autoconf, automake et libtool
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.54
automake 1.4
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,
vous n'en avez pas besoin et leur désinstallation n'est donc pas un
problème.
OPTIONNEL
=========
Ces librairies ne sont pas nécessaires pour utiliser Window Maker, mais
elles sont supportées, au cas où vous souhaiteriez les utiliser. Les
versions ci-dessous sont celles dont je dispose (et du coup, il est
garanti qu'elles fonctionnent), mais des versions différentes peuvent
fonctionner aussi bien.
- libXPM 4.7 ou plus récent
Les versions plus anciennes peuvent ne pas fonctionner !!!
Disponible sur ftp://sunsite.unc.edu/pub/Linux/libs/X/
Le support des fichiers XPM est intégré, mais il ne prendra
pas en compte les images dont le format est exotique.
- libpng 0.96 ou plus récent, et zlib
Pour pouvoir utiliser les images au format PNG.
http://www.cdrom.com/pub/png/
- libtiff 3.4 ou plus récent
Pour pouvoir utiliser les images au format TIFF.
Vous trouverez ça ici : ftp://ftp.sgi.com/graphics/tiff
- libjpeg 6.0.1 ou plus récent
Pour pouvoir utiliser les images au format JPEG.
http://www.ijg.org/
- libgif 2.2 ou libungif
Pour pouvoir utiliser les images au format GIF.
ftp://prtr-13.ucsc.edu/pub/libungif/
- 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.
Vous trouverez la version GNU sur ftp://ftp.gnu.org
OPTIONS DE CONFIGURATION
========================
Ces options peuvent être passées au script de configuration afin d'activer
ou désactiver des fonctionnalités de Window Maker. Par exemple :
./configure --enable-kde --enable-gnome
configurera Window Maker avec le support intégré pour KDE et GNOME.
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.
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.
L'option -I doit précéder chaque chemin d'accès, comme suit :
--with-incs-from="-I/opt/headers -I/usr/local/include"
--enable-single-icon
active le regroupement des toutes les appicons des WM_CLASS et WM_INSTANCE
en une seule icône. Aucun support n'est offert par les développeurs pour
cette fonctionnalité. Si vous avez des problèmes avec celle-ci, contactez
son auteur :
Christopher Seawood <cls@seawood.org>
--disable-shm
désactive l'utilisation de l'extension "MIT shared memory". Cela ralentira
un petit peu la génération des textures, mais il semble que cela soit
nécessaire dans certains cas pour éviter un bogue se manifestant au niveau
des icônes et des textures.
--disable-motif
désactive le support pour les fonctionnalités en rapport avec le gestionnaire
de fenêtres mwm.
--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
des applications, la sélection multiple de fenêtres. Attention : vous ne
pourrez plus sortir de Window Maker autrement qu'en utilisant kill avec le
signal SIGTERM ou en quittant à l'aide de KDE. Il n'est pas conseillé
d'utiliser cette option.
--enable-modelock
active le support pour le verrouillage du "XKB language status". Si vous ne
savez pas de quoi il retourne, c'est probablement que vous n'en avez pas
utilité.
--enable-sound
active le support pour le module de gestion des effets sonores.
--disable-xpm
désactive l'utilisation de la librairie XPM même si elle est présente
sur votre système.
--disable-png
désactive l'utilisation de la librairie PNG.
--disable-tiff
désactive l'utilisation de la librairie TIFF.
--disable-gif
désactive l'utilisation de la librairie GIF.
--disable-jpeg
désactive l'utilisation de la librairie JPEG.
--disable-shape
désactive l'utilisation de "shaped windows" (pour oclock, xeyes, etc.).
NOTES SPÉCIFIQUES AUX PLATEFORMES
=================================
- machines DEC/Alpha
#>>>>>>>>>>>
De : Anton Ivanov <aivanov@eu.level3.net>
A : Marcelo E. Magallon <mmagallo@debian.org>
Sujet : Re : Est-ce que le paquetage WindowMaker fonctionne correctement sur Alpha?
> Salut,
>
> Je lisais la doc contenue dans l'archive de WindowMaker, quand je suis
> tombé sur ça :
>
> | - machines DEC/Alpha
> | Il est possible que vous deviez utiliser l'option --disable-shm pour
> | configurer la compilation, comme suit :
> | ./configure --disable-shm
>
> est-ce que quelqu'un a eu des problèmes avec WindowMaker sur Alpha? Est-ce
> que quelqu'un peut tester cela? Doit-on vraiment utiliser cette option
> pour compiler sur Alpha?
Notez bien : les Alphas dont je me sers ne sont jamais sous X et ne sont pas près
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
d'applications comme cdrecord ou mysql server plantent carrément.
Vérifiez ces réglages sur votre système et modifiez-les en conséquent :
pour cela, manipulez l'entrée appropriée dans /proc ou modifiez le fichier
/usr/src/linux/include/asm/shmparam.h.
En dehors de ce cas, la mémoire partagée sous Alpha est sensée ne pas
poser de problème et je ne vois aucune raison de la désactiver.
Pour ma part, elle est à 32 ou plus sur la pluspart des machines.
De plus, si ma mémoire est exacte, les commentaires dans ce fichier
sont tout à fait inexacts. La valeur n'est pas exprimée en octets, mais en
mots, dépendant de la machine. Pour les Alphas, c'est donc *8.
Je rappelle que je n'utilise pas X sur ces machines, donc ce que j'indique
est soumis à toutes les réserves habituelles. (#include "standard_disclaimer.h")
#<<<<<<<<<<<<
- SCO Unix
Lancez configure comme suit :
CFLAGS="-belf -DANSICPP" ./configure
- SunOS, Solaris
Si gcc est installé, lancez configure comme suit :
CPP_PATH="gcc -E -x c" ./configure
Le cpp de Sun ne dispose pas de certaines fonctionnalités nécessaire pour
Window Maker et cela peut occasionner des problèmes avec l'utilisation des
fichiers de configuration.
Il peut être aussi nécessaire d'indiquer le chemin d'accès à la librairie
libtiff en utilisant les options --with-libs-from et --with-incs-from
avec configure.
Quelqu'un m'a rapporté qu'il est nécessaire de faire figurer /usr/local/lib
en premier dans la variable d'environnement LD_LIBRARY_PATH.
Si vous utilisez un Ultra Creator 3D ou une autre machine graphique
de haut niveau, faites en sorte de démarrer le serveur X avec le mode
graphique par défaut à 24bpp sinon vous pourriez constaer des problèmes
au niveau des couleurs.
C'est une bogue répertorié au niveau de Window Maker, il sera corrigé.
- GNU/Linux en général
Assurez-vous que /usr/local/lib figure dans /etc/ld.so.conf et que vous
avez lancé ldconfig après l'installation.
Désinstallez tout précédent paquetage de Window Maker avant d'installer
une nouvelle version.
- RedHat GNU/Linux
Il peut y avoir plusieurs problèmes ennuyeux sur les systèmes RedHat.
Voici la marche à suivre sous peine de ne pouvoir utiliser Window Maker
sur ces systèmes :
* si la version de Window Maker livrée avec RedHat est installée,
désinstallez-la avant de mettre à jour votre système;
* assurez-vous que ni la variable d'environnement LANG ni LINGUAS ne
contiennent "en_RN";
* vérifiez que /usr/local/bin est présent dans votre variable d'environnement
PATH;
* il faut que /usr/local/lib soit dans /etc/ld.so.conf avant de lancer
ldconfig;
* 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 PROBLÈMES;
* si vous aviez auparavant installé le paquetage de Window Maker livré
avec RedHat et que vous voulez installer maintenant manuellement une nouvelle
version, vous devez au préalable désinstaller le paquetage provenant de la
RedHat;
* assurez-vous qu'il existe un lien symbolique de from /usr/include/X11 vers
/usr/X11R6/include/X11 (le cas échéant, lancez cette commande :
ln -s /usr/X11R6/include/X11 /usr/include/X11);
* assurez-vous que /lib/cpp pointe bien vers le programme cpp
Si vous avez un doute concernant quoi que ce soit de relatif à l'installation
de Window Maker sur une RedHat, n'hésitez pas à contacter le support
utilisateur de RedHat. Ils vous renseigneront toujours et tenteront de vous
dépanner dans l'utilisation et la configuration de votre système RedHat.
D'un autre côté, ils sont plus au fait que nous pour tout ce qui est relatif
aux RedHat (nous n'en utilisons pas).
- PowerPC MkLinux
Installez la version la plus récente de Xpmac. Les versions plus
anciennes semblent contenir un bogue qui est susceptible de bloquer
le système.
- Debian GNU/Linux
Si vous voulez bénéficier du support des fichier JPEG et TIFF,
assurez-vous que les paquetages libtiff-dev et libjpeg-dev sont installés.
- SuSE GNU/Linux
Désinstallez tout précédent paquetage de Window Maker avant d'installer
une nouvelle version. Le cas échéant, vous pourriez rencontrer des
problèmes.
- MetroX (version indéterminée)
MetroX contient un bogue qui corrompt les pixmaps utilisées en fond
de fenêtres. Si vous utilisez MetroX et rencontrer des problèmes
avec les textures, n'utilisez pas les textures dans les barres de titre,
ou bien utilisez un autre serveur X.
INSTALLATION
============
Compiler Window Maker
---------------------
Pour aller vite, tapez ce qui suit dans un prompt shell :
./configure
make
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 ainsi les
rendre plus petits, tapez plutôt :
make install-strip
ldconfig
Tout ceci compile et installe Window Maker avec les réglages par défaut.
Maintenant, si vous voulez personnaliser des options de compilation, vous
pouvez faire :
1. (optionnel) Consulter la section OPTIONS DE CONFIGURATION
dans ce même fichier. Exécutez aussi :
./configure --help
pour avoir la liste des autres options disponibles.
2. Lancez configure avec les options choisies. Par exemple, si vous voulez
utiliser l'option --enable-kde, tapez :
./configure --enable-kde
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 :
make
5. Loguez-vous en tant que root (si vous ne pouvez pas le faire, lisez le
paragraphe "Je n'ai pas le mot de passe de root :-(") et installez
Window Maker sur votre système :
su root
make install
Réglages pour un utilisateur
----------------------------
Ces instructions suivantes ne sont pas nécessaires si vous mettez à jour
Window Maker à partir d'une version plus ancienne, à moins que ce soit
précisé dans le fichier NEWS.
Chaque utilisateur qui veut utiliser Window Maker sur votre système doit
faire ce qui suit :
1. Installer les fichiers de configuration de Window Maker dans son
répertoire personnel.
Pour ceci, il doit taper :
wmaker.inst
wmaker.inst installera les fichiers de configuration de Window Maker
pour l'utilisateur et configurera ses paramètres de X de façon à ce que
Window Maker soit automatiquement lancé au démarrage de X.
C'est tout!
Vous pouvez aussi taper "man wmaker" afin d'obtenir plus de renseignements
sur la configuration et d'autres sujets.
Consultez le Guide de l'utilisateur afin d'obtenir des informationss plus
en détail sur Window Maker.
Pourquoi ne pas aussi jeter un oeil aux FAQs..
Installation du paquetage additionnel
-------------------------------------
Décompressez WindowMaker-extra-<version-number>.tar.gz dans /usr/local/share
Vous trouverez le fichier sur ftp://ftp.windowmaker.org. Ce paquetage est optionnel,
il contient des icônes et des thèmes supplémentaires. Vérifiez que vous avez
bien la derniere version de ce paquetage.
Il y a aussi un fichier WindowMaker-extra.readme qui indique comment procéder à
l'installation de ce paquetage.
Je n'ai pas le mot de passe de root :-(
---------------------------------------
Si vous n'avez pas acc-s aux privilèges du super-utilisateur (root), vous pouvez
installer Window Maker dans votre répertoire personnel. Pour ce faire, ajoutez
l'option --prefix correctement renseignée au moment de l'exécution de ./configure
(étape 2 de la compilation de Window Maker).
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/Applications
Puis, faites en sorte que /home/jshmoe/bin soit inclus dans votre PATH, ajoutez
/home/jshmoe/lib à votre variable d'environnement LD_LIBRARY_PATH puis lancez
bin/wmaker.inst
Bien sûr, /home/jshmoe est supposé être remplacé par votre répertoire personnel.
MISE À JOUR
===========
Si vous mettez à jour une version plus ancienne de Window Maker :
1. Configurez et compilez Window Maker comme d'habitude
2. Installez Window Maker (mais n'exécutez pas wmaker.inst)
3. Consultez le fichier NEWS et mettez à jour vos fichiers de configuration
si nécessaire.
PROBLÈMES
=========
Si vous rencontrez des problèmes pendant la phase de configuration, comme par
exemple l'impossibilité d'utiliser une librairie de manipulation de format
graphique alors que vous pensez qu'elle est installée, jetez un oeil au contenu
du fichier config.log, vous y trouverez peut-être des indices pour résoudre
ce problème.
== erreur de chargement de polices, alors qu'elles existent
Essayez de recompiler sans le support pour le NLS.
== erreur à la configuration
ltconfig: unrecognized option `--no-reexec'
Try `ltconfig --help' for more information.
configure: error: libtool configure failed
Otez l'option --no-reexec du fichier aclocal.m4 et relancer la configuration.
Assurez vous aussi que les versions d'autoconf et d'automake correspondent bien
aux pré-requis :
autoconf 2.13
automake 1.4
libtool 1.3
Notez bien que ce ne doit PAS être libtool 1.2b, mais libtool bien 1.3,
disponible sur les sites GNU.
== configure ne trouve pas libtiff ou une autre librairie graphique
Effacez le fichier config.cache, et exécutez à nouveau configure avec les options
suivantes (en plus des options que vous utilisiez déjà) :
--with-libs-from="-L/usr/local/lib"
--with-incs-from="-I/usr/local/include -I/usr/local/include/tiff"
Insérez les chemins d'accès aux librairies graphiques et à leurs fichiers d'en-tête.
Plusieurs chemins d'accès peuvent être ajoutés pour chacune de ces options,
comme montré pour --with-incs-from. Séparez-les juste par un espace.
== configure ne trouve pas libXpm
* Vérifiez que vous avez un lien sympbolique de libXpm.so.4.9 vers libXpm.so
== segmentation fault au démarrage
* Vérifiez que la version de libXPM qui est installée est au moins 4.7.
* Vérifiez que votre fichier ~/GNUstep/Defaults/WindowMaker est à jour.
Si vous n'en êtes pas sûr, renommez ~/GNUstep en ~/GNUtmp et lancez wmaker.inst.
== "...: your machine is misconfigured. gethostname() returned (none)"
* Le nom d'hôte de votre machine n'est pas indiqué ou est invalide (il commence
par une parenthèse par exemple). Consultez les pages du manuel (man hostname) pour
savoir comment le positionner correctement.
== Le menu des applications ne contient que 2 entrées ("XTerm" et "Exit...")
* Window Maker ne trouve pas cpp (le preprocesseur de C). Si votre cpp n'est pas situé
dans /lib/cpp, editez src/config.h et modifiez le chemin d'accès dans CPP_PATH en conséquent.
== checking lex output file root... configure: error: cannot find output from true; giving up
* Consultez la section PRE-REQUIS dans ce même fichier.
LOCALES/INTERNATIONALISATION
============================
Window Maker supporte les langues étrangères. Pour activer cette fonctionalité,
vous devez compiler Window Maker avec des paramètres supplémentaires.
0 - GNU gettext doit être installé. Il peut être trouvé ici :
ftp://prep.ai.mit.edu/pub/gnu/gettext-nnn.tar.gz
Vous pouvez passer à l'étape 4 si vous utilisez le script Install.
1 - Il vous faut choisir les langues que vous voulez rendre disponible. Modifiez
pour cela la liste des codes de nationalité dans LINGUAS. L'anglais est inclus
de façon implicite dans cette liste. Par exemple :
setenv LINGUAS "pt ja de"
sous csh
ou
export LINGUAS;LINGUAS="pt ja de"
sous sh
La liste de tous les codes de nationalité peut être trouvée dans po/README.
L'anglais est la langue par défault.
Lisez po/README si vous souhaitez traduire ou maintenir les fichiers propres
à d'autres adaptations nationales.
2 - De plus, si votre langue utilise des caractères multi-octets, comme
le japonais ou le coréen, vous devez vous assurer que l'option MultiByteText est à YES
dans ~/GNUstep/Defaults/WMGLOBAL.
3 - Configurez, compilez et installez Window Maker normalement.
4 - Pour choisir une langue particulière à l'exécution, vous devez positionner la variable
d'environnement LANG avec la valeur correspondant au code de nationalité adéquat.
Par exemple, si vous voulez utiliser le portugais, vous devez faire :
setenv LANG pt
sous csh ou
export LANG; LANG=pt
sous Bourne sh et apparentés
Note : si la variable d'environnement LC_CTYPE est positionnée, vous devez l'ôter de
l'environnement (unset LC_CTYPE), avant d'exécuter Window Maker.
En ce qui concerne les fichiers de configuration des menus, Window Maker procède
à une recherche suivant cet ordre (pour le portugais brésilien, dans ce cas) :
menu.pt_BR
menu.pt
menu
5 - Si vous choisissez une langue qui utilise les caractères multi-octets, vous
devez configurer les polices de façon adéquate. Consultez pour cela les pages
de manuel de XCreateFontSet. Vous devez modifier dans votre fichier ~/G/D/WindowMaker
les polices utilisées dans les titres, menus et autres. En ce qui concerne les polices
utilisées dans les boîte de dialogue, modifiez ~/G/D/WMGLOBAL.
Le %d dans la définition des polices ne doit PAS être enlevé. Vous pouvez aussi utiliser
le script wsetfont, fourni à ces fins.
Consultez le script lui-même pour en connaître les instructions.
Par exemple, vous pouvez mettre ceci dans ~/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-*";
et dans ~/G/D/WMGLOBAL :
SystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
BoldSystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
Les 2 polices ci-dessus sont uniquement utilisées par les applications qui utilisent
WINGs (Window Maker et WPrefs.app).
Le script wsetfont inclus vous permettra de changer les réglages des polices de
façon plus aisée. Consultez-le afin d'obtenir plus d'informations.

View File

@@ -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

601
INSTALL.sk Normal file
View File

@@ -0,0 +1,601 @@
In¹trukcie pre in¹taláciu Window Makera
PODPOROVANÉ PLATFORMY
=====================
(tzn: vraj to na tom niekto skompiloval...)
- Intel GNU/Linux Conectiva 5.9 (beta)
- Intel GNU/Linux Slackware
- Intel GNU/Linux Debian
- Intel GNU/Linux other distributions
- 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 running Linux
- iBook running Darwin
Patche na rozbehanie na iných platformách sú vítané.
PO®IADAVKY:
===========
Nasledovný softvér je potrebný pre beh Window Makera:
- X11R6.x
Window Maker mô¾e by» skompilovaný na star¹ích verziách X, ako
X11R5 (Solaris) alebo X11R4 (OpenWindows) ale nebude pracova»
100% korektne. Na takých serveroch nebudú ikony aplikácií a budete
ma» problémy s pou¾ívaním doku. Upgrade klientských kni¾níc (Xlib,
Xt, atï.) pomô¾e, ak u¾ nemô¾ete spravi» upgrade servera.
Nasledovné je potrebné k skompilovaniu Window Makera:
- Základné be¾né veci
Ak chcete kompilova» Window Maker, uistite sa, ¾e máte gcc (alebo
iný ANSI C kompilátor) a hlavièkové súbory iXov. Hlavne pre zaèia-
toèníkov v Linuxe: musíte nain¹talova» v¹etky X-devel balíky a gcc.
Inak nebudete schopní skompilova» ¾iadny program pre X, teda ani
Window Maker.
- libPropList
Túto kni¾nicu mo¾no nájs» na ftp://ftp.windowmaker.org/pub/libs alebo
ftp://ftp.gnome.org/pub/libPropList. Nain¹talujte ju pred kompiláciou
Window Makera.
- 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.54
automake 1.4
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».
- lex (alebo flex) a yacc (alebo bison)
Tieto sú vyu¾ívané z libPropList. Lex v skutoènosti nie je nutný,
lebo jeho výstupný súbor je prítomný, ale buï ja alebo automake je
hlupák, lebo configuraèný skript pre libPropList sa jednoducho
ukonèí z neznámych dôvodov ak lex nie je prítomný.
NEPOVINNÉ:
==========
Tieto kni¾nice nie sú nutné pre beh Window Makera, ale sú podporované
v prípade, ¾e ich chcete pou¾íva». Èísla verzií sú tie, ktoré som pou¾il
ja (teda urèite fungujú), ale aj iné verzie mô¾u pracova» správne.
- libXPM 4.7 alebo nov¹ia
Star¹ie verzie nemusia fungova»!!!
Dostupné na ftp://sunsite.unc.edu/pub/Linux/libs/X/
Podpora XPM je aj vstavaná, ale nenaèíta obrázky v
ne¹tandardných kódovaniach.
- libpng 0.96 alebo nov¹ia a zlib
Pre podporu obrázkov PNG.
http://www.cdrom.com/pub/png/
- libtiff 3.4 alebo nov¹ia
Pre podporu obrázkov TIFF.
ftp://ftp.sgi.com/graphics/tiff
- libjpeg 6.0.1 alebo nov¹ia
Pre podporu obrázkov JPEG.
http://www.ijg.org/
- libgif 2.2 alebo libungif
Pre podporu obrázkov GIF.
ftp://prtr-13.ucsc.edu/pub/libungif/
- GNU xgettext
Ak chcete pou¾íva» prelo¾ené hlásenia, potrebujete GNU gettext.
Iné verzie gettext nie sú kompatibilné a nebudú fungova».
Stiahnite si GNU verziu z ftp://ftp.gnu.org
MO®NOSTI CONFIGURE:
===================
Tieto mo¾nosti mô¾u by» dané skriptu configure ako argumenty za úèelom
povolenia/zakázania urèitých vlastností Window Makera. Príklad:
./configure --enable-kde --enable-gnome
nakonfiguruje Window Maker s podporou KDE a GNOME.
Zoznam v¹etkých mo¾ností vypí¹e príkaz ./configure --help
--with-libs-from
cesty, kde sa majú hµada» kni¾nice. Re»azec -L musí predchádza»
ka¾dú cestu, napr.:
--with-libs-from="-L/opt/libs -L/usr/local/lib"
--with-incs-from
cesty, kde sa majú hµada» hlavièkové súbory. Re»azec -I musí
predchádza» ka¾dú cestu, napr.:
--with-incs-from="-I/opt/headers -I/usr/local/include"
--enable-single-icon
umo¾òuje zrolovanie v¹etký ikon aplikácií WM_CLASS+WM_INSTANCE do
jedinej. Táto vlastnos» nie je podporovaná zo strany vývojárov.
V prípade problémov s òou, kontaktujte autora:
Christopher Seawood <cls@seawood.org>
--disable-shm
zaká¾e pou¾itie roz¹írenia zdieµanej pamäte MIT. Toto trochu spomalí
generovanie textúr, ale v niektorých prípadoch je táto voµba potrebná
kvôli chybe, ktorá spôsobuje nesprávne zobrazovanie ikon a textúr.
--disable-motif
zaká¾e podporu pre pokyny mana¾éra okien wmw
--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í,
výber viacerých okien. Vedzte, ¾e u¾ nebudete schopní ukonèi»
Window Maker; budete ho musie» zabi» pou¾itím signálu SIGTERM alebo
ho ukonèi» z KDE. Neodporúèa sa povoli» túto vlastnos».
--enable-modelock
podpora pre XKB nastavenie jazyka. Ak neviete, èo to je, pravdepo-
dobne to nepotrebujete. (Slú¾i to na prepínanie rozlo¾enia kláves
pomocou nového tlaèidla na hornom paneli okien.)
--enable-sound
povolí podporu pre modul zvukových efektov
--disable-xpm
zaká¾e podporu pre kni¾nicu XPM aj keï je dostupná na va¹om systéme.
--disable-png
zaká¾e pou¾itie kni¾nice PNG
--disable-tiff
zaká¾e pou¾itie kni¾nice TIFF
--disable-gif
zaká¾e pou¾itie kni¾nice GIF
--disable-jpeg
zaká¾e pou¾itie kni¾nice JPEG
--disable-shape
zaká¾e tvarované okná (pre oclock, xeyes atï.)
POZNÁMKY PRE ©PECIFICKÉ PLATFORMY:
==================================
- DEC/Alpha
Nasledovný mail nie je prelo¾ený, ale hovorí sa v òom, ¾e
_pravdepodobne_ nie je nutné konfigurova» Window Maker na
Alphe s voµbou --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 - spustite configure takto
CFLAGS="-belf -DANSICPP" ./configure
- SunOS, Solaris
Ak máte nain¹alované gcc, spustite configure takto:
CPP_PATH="gcc -E -x c" ./configure
Cpp od Sunu chýbajú niektoré vlastnosti, ktoré Window Maker potrebuje,
a to mô¾e spôsobi» problémy pri parsovaní konfiguraèných súborov.
Je tie¾ mo¾né, ¾e budete musie» pou¾i» --with-libs-from a
--with-incs-from na urèenie ciest k libtiff.
Niekto mi mailoval, ¾e tie¾ /usr/local/lib musí by» prvá cesta v
premennej LD_LIBRARY_PATH, aby to fungovalo.
Ak máte Ultra Creator 3D alebo iný stroj s high-end grafikou,
uistite sa, ¾e spú¹»ate iXy s 24-bitovou farebnou håbkou alebo
mô¾ete ma» problémy s pomie¹anými farbami. Toto je chyba wmakera
a bude opravená.
- GNU/Linux vo v¹eobecnosti
Uistite sa, ¾e máte /usr/local/lib v /etc/ld.so.conf a ¾e ste
po in¹talácii spustili ldconfig.
Odin¹talujte v¹etky balíkované verzie Window Makera pred in¹talovaním
novej verzie.
- RedHat GNU/Linux
Systémy RedHat majú niekoµko nepríjemných problémov. Ak ich pou¾ívate,
dodr¾ujte nasledovné kroky, alebo vám Window Maker nebude fungova»:
* ak máte nain¹alovaný Window Maker, ktorý je dodaný s RedHatom,
pred upgadom ho odin¹talujte;
* uistite sa, ¾e nemáte premenné LANG a LINGUAS nastavené na en_RN;
* uistite sa, ¾e máte /usr/local/bin v premennej PATH;
* uistite sa, ¾e máte /usr/local/lib v /etc/ld.so.conf pred
spustením ldconfig;
* ak máte problémy, v ktorých sa spomína chyba s --no-reexec,
odin¹talujte libtool-1.2b a nain¹talujte libtool-1.3. libtool-1.3
nájdete na ftp.gnu.org. Tie¾ si preèítajte èas» RIE©ENIE PROBLÉMOV.
* uistite sa, ¾e máte symbolický odkaz z /usr/include/X11 na
/usr/X11R6/include/X11 (ak nie, zadajte ln -s /usr/X11R6/include/X11
/usr/include/X11 )
* uistite sa, ¾e /lib/cpp odkazuje na program cpp
Ak máte akékoµvek pochybnosti, prosím, neotáµajte a spojte sa
s u¾ívateµskou podporou RedHatu. Radi vám odpovedia na v¹etky
va¹e otázky týkajúce sa ich systému. Vedia toho o svojom
systéme viac ako my (nepou¾ívame RedHat).
- PowerPC MkLinux
Musíte ma» poslednú verziu Xpmac. Star¹ie verzie majú asi chyby,
ktoré spôsobujú zmrznutie celého systému.
- Debian GNU/Linux
Ak chcete podporu JPEG a TIFF, uistite sa, ¾e máte nain¹talované
libiff-dev a libjpeg-dev.
- SuSE GNU/Linux
Ak ste si nain¹talovali balík Window Makera od SuSE, odin¹talujte
ho pred pokusmi o skompilovanie wmakera, alebo mô¾ete ma» problémy.
- MetroX (neznáma verzia)
MetroX má chybu, ktorá kazí obrázky, ktoré sú nastavené ako pozadie
okien. Ak pou¾ívate MetroX a máte èudné problémy s textúrami,
nepou¾ívajte textúry v horných li¹tách. Alebo pou¾ite iný X server.
IN©TALÁCIA:
===========
Kompilácia Window Makera
------------------------
Pre rýchly ¹tart, zadajte nasledovné príkazy v shelly:
./configure
make
potom sa prihláste ako root a zadajte:
make install
ldconfig
alebo ak chcete z binárnych súborov odstráni» symboly pre debugger a urobi»
ich men¹ie, napí¹te miesto toho
make install-strip
ldconfig
Toto skompiluje a nain¹taluje Window Maker so ¹tandardnými parametrami.
Ak si chcete prispôsobi» nastavenia kompilácie, mo¾ete to urobi» nasledovne:
1. (voliteµne) Pozrite sa na èas» MO®NOSTI CONFIGURE, kde sú
uvedené mo¾nosti. Tie¾ spustite:
./configure --help
ktorý vám vypí¹e kompletný zoznam ostatných mo¾ných nastavení.
2. Spustite configure s nastaveniami, ktoré chcete. Napríklad,
ak chcete pou¾íva» podporu pre KDE, zadajte:
./configure --enable-kde
3. (voliteµne) Otvorte si súbor src/wconfig.h vo svojom obµúbenom
textovom editore a prejdite si ho, èi nenájdete nejaké nastavenia,
ktoré chcete zmeni».
4. Kompilácia. Zadajte len:
make
5. Prihláste sa ako root (ak to nie je mo¾né, èítajte èas» "Nemám
rootove heslo :-( ") a nain¹talujte Window Maker:
su root
make install
Nastavenia ¹pecifické pre u¾ívateµov
------------------------------------
Nemusíte sa dr¾a» týchto in¹trukcií, ak robíte upgrade Window Makera zo
star¹ej verzie, pokiaµ to nie je uvedené v súbore NEWS.
Ka¾dý u¾ívateµ na va¹om systéme, ktorý chce pou¾íva» Window Maker, musí
urobi» nasledovné:
1. Nain¹talova» konfiguraèné súbory Window Makera do svojho
domovského adresára:
wmaker.inst
wmaker.inst nain¹taluje konfiguraèné súbory Window Makera a nastaví
iXy aby sa pri ¹tarte automaticky spustil Window Maker.
To je v¹etko!
Základné informácie o konfigurácii a iných veciach vám poskytne
"man wmaker".
Pre hlb¹í úvod do Window Makera si preèítajte si U¾ívateµký manuál.
Tie¾ sa mô¾te pozrie» na FAQ.
Installing the extras package
-----------------------------
Unpack WindowMaker-extra-<version-number>.tar.gz in /usr/local/share
You can get the file at ftp://ftp.windowmaker.org. This file is optional
and only have a few icons, and themes. Look for the latest <version-number>
available.
Also there is a WindowMaker-extra.readme to instruct you where that package
should go.
Nemám rootove heslo :(
----------------------
Ak nemáte práva roota, mô¾ete si nain¹talova» Window Maker do svojho
domovského adresára. Na to musíte pou¾i» voµbu --prefix pre configure
v druhom kroku kompilácie Window Makera. Tie¾ musíte pou¾i» voµbu
--with-appspath, pomocou ktorej ¹pecifikujete cestu pre WPrefs.app.
Príklad:
./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
Samozrejme, predpokladá sa, ¾e /home/jshome nahradíte va¹im skutoèným
domovským adresárom.
UPGRADE
=======
Ak robíte upgrade zo star¹ej verzie Window Makera:
1. Skofigurujte a skompilujte Window Maker ako v¾dy
2. Nain¹talujte Window Maker (ale nespustite wmaker.inst)
3. Preèítajte si súbor NEWS a ak je to potrebné, upravte
svoje konfiguraèné súbory.
RIE©ENIA PROBLÉMOV
==================
Ak máte problémy poèas konfigurácie (spú¹»ania configure), napríklad
nemo¾nos» pou¾i» grafickú kni¾nicu, o ktorej viete, ¾e ju máte nain¹talovanú,
v súbore config.log nájdete príèinu problému.
== Error with loading fonts, even if they exist.
Skúste kompiláciu bez podpory NLS.
== Error when configuring
ltconfig: unrecognized option `--no-reexec'
Try `ltconfig --help' for more information.
configure: error: libtool configure failed
Odstáòte voµbu --no-reexec zo súborov aclocal.m4 a libPropList/aclocal.m4
a spustite configure.
Tie¾ sa uistite, ¾e autoconf a automake, ktoré máte nain¹talované, sú v
týchto verziách:
autoconf 2.13
automake 1.4
libtool 1.3
Nesmie to by» libtool 1.2b, ale libtool 1.3, zo stránok GNU.
== Cant find proplist.h or libPropList.something
Stiahnite a nain¹talujte si libPropList zo stránok uvedených
niekde v tomto súbore.
== configure doesn't detect libtiff, or other graphic libraries.
Odstráòte config.cache, spustite configure s pridanými nasledovnými voµbami
(okrem iných, ktoré pou¾ívate):
--with-libs-from="-L/usr/local/lib"
--with-incs-from="-I/usr/local/include -I/usr/local/include/tiff"
Vlo¾te cesty k va¹im grafickým kni¾niciam a zodpovedajúcim hlavièkovým
súborom. Mô¾ete vlo¾i» viac ciest do ka¾dej z týchto volieb, ako je to
uvedené v príklade --with-incs-from. Len ich oddeµte medzerou.
== configure doesn't detect libXpm.
* Skontrolujte, èi máte symbolický odkaz z libXpm.so.4.9 na libXpm.so
== Segmentation fault on startup
* Skontrolujte verziu libXpm, musíte ma» aspoò 4.7
* Skontrolujte, èi máte upravenú verziu ~/GNUstep/Defaults/WindowMaker
Ak si nie ste istí, skúste premenova» ~/GNUstep na ~/GNUtmp a spustite
wmaker.inst
== "...: your machine is misconfigured. gethostname() returned (none)"
* Meno va¹eho poèítaèa je nastavené na nieèo nesprávne, èo zaèína
úvodzovkami. Preèítajte si man hostname a dozviete sa, ako to nastavi».
== The root menu contains only 2 entries. ("XTerm" and "Exit...")
* Window Maker nevie nájs» cpp (C preprocesor). Ak sa vá¹ cpp nenachádza
v /lib/cpp, upravte src/config.h a vlo¾te správnu cestu do CPP_PATH.
== checking lex output file root... configure: error: cannot find output from true; giving up
* Preèítajte si èas» PO®IADAVKY v tomto súbore.
MIESTNE NASTAVENIA/INTERNACIONALIZÁCIA
======================================
Window Maker má podporu pre národné jazyky. Aby ste ju povolili, musíte
skompilova» Window Maker s niekoµkými prídavnými parametrami.
0 - Musíte ma» nain¹talovaný balík GNU gettext. Mô¾ete ho nájs» na
adrese ftp://prep.ai.mit.edu/pub/gnu/gettext-nnn.tar.gz
Kroky 1 a¾ 3 mô¾ete vynecha», ak pou¾ívate skript Install
1 - Musíte urèi» jazyky, pre ktoré chcete podporu. Nastavte premennú
LINGUAS na zoznam miestnych nastavení, ktoré chcete. Angliètina je
podporovaná v¾dy. Príklad:
setenv LINGUAS "pt ja de"
(csh)
alebo
export LINGUAS;LINGUAS="pt ja de"
(sh)
Zoznam podporovaných miestnych nastavení nájdete v súbore po/README.
Angliètina je implicitným jazykom.
Ak chcete preklada» a udr¾iava» súbory s miestnymi nastaveniami, preèítajte
si súbor po/README.
2 - Naviac, ak vá¹ jazyk pou¾íva multi-byte znaky, napríklad Japonèina
alebo Kórejèina, musíte nastaveniu MultiByteText priradi» YES v súbore
~/GNUstep/Defaults/WMGLOBAL
3 - Konfigurujte, kompilujte a in¹talujte Window Maker ako zvyèajne.
4 - Urèité miesne nastavenia si zvolíte nastavením premennej LANG na
to, ktoré chcete. Napríklad, ak chcete nastavi» slovenské miestne
nastavenia, musíte spusti»
setenv LANG pt
(csh)
export LANG; LANG=pt
(Bourne sh a podobné)
Pozor: Ak máte nastavenú premennú LC_CTYPE, musíte ju zru¹i» pred
spustením wmaker.
Window Maker hµadá súbory s definíciou menu v nasledovnom poradí
(v tomto prípade pre brazílsku portugalèinu):
menu.pt_BR
menu.pt
menu
5 - Ak si zvolíte jazyk, ktorý pou¾íva multi-byte znaky, musíte poriadne
nastavi» svoje fonty. Preèítajte si manuálovú stránku k XCreateFontSet,
kde nájdete viac detailov. Musíte v súbore ~/G/D/WindowMaker upravi» fonty
pre horné li¹ty, menu a iné veci. Pre fonty pou¾ité v dialógových oknách
upravte súbor ~/G/D/WMGLOBAL. Re»azce %d v menách fontov nesmú by»
odstránené. Tie¾ mô¾ete pou¾i» skript wsetfont, ktorý to urobí za vás.
Napríklad mô¾e zada» v súbore ~/G/D/WindowMaker nasledovné:
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 v ~/G/D/WMGLOBAL:
SystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
BoldSystemFont = "-*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*";
Tieto dva fonty sa pou¾ijú len v aplikáciách, ktoré pou¾ívajú WINGs
(Window Maker a WPrefs.app)
Skript wsetfont vám umo¾ní nastavi» fonty jednoduch¹ím spôsobom. Pozrite
sa priamo do jeho súboru pre bli¾¹ie informácie.

270
Install
View File

@@ -1,270 +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
}
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 -f 2 -d: |cut -f 2 -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"
##################### 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 clean)
perform make
echo "--------------------------"
echo "Installing Window Maker..."
echo "--------------------------"
perform make 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

View File

@@ -3,24 +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
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`

364
NEWS
View File

@@ -2,6 +2,370 @@
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
are interpreted via a mapping in the global WINGs configuration file,
WMGLOBAL, by the MouseWheelUp and MouseWheelDown directives which will do
shading and unshading respectfully.
However, to avoid unwanted triggers of shading/unshading the window, two
consecutive mouse wheel events in the same direction are required. The
trigger won't occur if the events are separated by more than a double-click's
worth of time, which is technically speaking like making a double-click with
the button that corresponds to the mouse wheel direction.
Practically speaking, this means that you have to move the mouse wheel up
or down quickly, like when you want to quickly scroll over something big.
Shared application icons
------------------------
Real application icon sharing was implemented in place of the collapse
appicon thing. With this applications of the same instance.class will
have a single shared application icon and hiding will hide all windows
of the aplications attached to that appicon as if there is a single
application. This feature is enabled by default for all applications in
the global WMWindowAttributes defaults domain using:
"*" = {SharedAppIcon = Yes;};
If you're not satisfied with this or want the old behaviour back you
can revert this (either in the global domain for all users or in your
personal WMWindowAttibutes domain) using SharedAppIcon = No; for "*"
It can also be enabled/disabled for individual applications as needed.
Setting this option can be done using the window's inspector panel in the
"Application Specific" section. You can set/unset it for all applications by
using the "Defaults for all windows" in the "Window Specification" section
Basically using this can have 2 major scenarios:
1. Leave it on by default, but disable it for the few specific
applications that do not behave well with it. (default)
2. Leave it off by default, and enable it for all applications for
which you want it enabled.
At this point all applications we tested work ok, some of them even
work better with this feature turned on: for example xmms and Corel's
WorkPerfect8 now only have 1 appicon (they used to have 2 without this
feature).
This feature is turned off by default for the following applications
because it's incompatible with them:
1. all GNUstep applications
2. applications with an application menu (wterm, Aileron, etc)
3. all applications with withdrawn windows only (this means all dockapps)
As a side note: wterm can use the shared appicon feature as long as it
doesn't use the appmenu (will do this by default). If you start it
using the appmenu (wterm -wm) it will disable the shared appicon
feature because apps with appmenus are incompatible with this feature.
If an application is a GNUstep application or if it has an appmenu, it's
detected automatically and the shared appicon is disabled automatically
without any user intervention or need to configure anything.
Dock/Clip stealing appicons
---------------------------
This feature is different form the Clip's "Autoattract Icons" feature
as it won't attach any new icon to the dock/clip.
What it does, is when you start an application by other means than
dock/clip, like for example using the main menu or a terminal, it will
search the dock/clips for the presence of an appicon for that
application, that is not already running at that moment and will attach
the started application to that appicon in the dock/clip if available,
making it look like the dock/clip just stole the appicon for the started
application. There is an animation for this to offer visual feedback
that this happened.
--- 0.70.0
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.
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
-----------------
starting with 0.70.0 libPropList is no longer required to build Window
Maker. PropList handling code was added to WINGs being now better
integrated with all the rest. For more details check the Changelog and the
following files:
./WINGs/ChangeLog
./WINGs/NEWS
./WINGs/WINGs/WUtil.h
./WINGs/WINGs/proplist-compat.h
--- 0.65.1
Removed FocusFollowMouse option, only SloppyFocus present now.
Added None option to MoveDisplay and ResizeDisplay
--- 0.65.0
Single AppIcon
--------------
Removed --single-appicon patch and replaced it with a application
specific collapsing option. Check inspector panel and appicon menu.
New options to configure the workspace mouse actions
----------------------------------------------------
The following options were removed from the WindowMaker defaults configuration
file:
SelectWindowsMouseButton, WindowListMouseButton and ApplicationMenuMouseButton.
They were replaced with the following 3+1:
MouseLeftButtonAction, MouseMiddleButtonAction and MouseRightButtonAction plus
MouseWheelAction
In the old way because all gravitated around the workspace actions to which
specific mouse buttons could have been bound, it allowed one to specify in
the configuration file settings which would have led to weird situations
that also had undesirable results.
For example the same mouse button (for example left) could have been
assigned to all workspace actions: 'select windows', 'show window list menu'
and 'show applications menu' which of course were not only impossible to
accomplish while still having a properly working workspace, but they also
allowed one to specify some settings in the configuration file that were
never in fact translatable to proper workspace actions.
To void this kind of user interface inconsistency, the new options now
gravitate around the physical device (the mouse and its buttons) to which
specific workspace actions can be bound. This way, even if one assigns the
same action to all mouse buttons, that situation while gives redundant and
unpractical settings it will still translatable to proper workspace actions:
all buttons will execute the same action, but a button will execute only one
action at a time.
The new options take the following values:
all Mouse...ButtonAction can have one of the following values:
None, SelectWindows, OpenApplicationsMenu or OpenWindowListMenu
MouseWheelAction can be one of None or SwitchWorkspaces
If you had the default actions bound to mouse buttons before, then it will
work for you without any intervention in the configuration files.
Else you need to use WPrefs.app to bind the actions to the mouse buttons
again to your old settings. Also if you want to change the mouse wheel
behavior regarding workspaces you can now (use WPrefs.app to do this).
Client supplied icons
---------------------
Window Maker saves the client supplied icons in ~/GNUstep/.AppInfo/WindowMaker
in XPM format for later use when the app is no longer running (to have the
image to display for docked icons for example).
Until recently the XPM images saved by Window Maker were incorrect, but a
recent fix in the code to save XPM's fixed them. But with this fix, all
previously saved XPM's in that directory are no longer readable (they give
wrong images on screen or fail to load).
To avoid the need for the user to fix this by hand editing WMWindowAttributes
and removing all references to icons in ~/GNUstep/.AppInfo/WindowMaker which
can be annoying, new code was added to Window Maker to permit the regeneration
of images in ~/GNUstep/.AppInfo/WindowMaker if they are missing.
With this addition, all you need to do to fix your old broken images, is to
delete all *.xpm files from ~/GNUstep/.AppInfo/WindowMaker. Next time the
application that is supplying an icon image will start the icon will be
recreated if missing, but this time it will be saved with the new XPM save
code which produces good XPM images.
All the rest of the process is transparent to the user.
Hermes library support
----------------------
If configure finds hermes library (an optimized pixel format conversion
library) installed it will use it to do the pixel format conversion in
the wraster library for some cases (TrueColor visuals without dithering).
Currently the hermes routines cannot convert to an indexed destination,
so we can't use hermes for PseudoColor, GrayScale and StaticGray visuals.
Also hermes only does dithering for just 2 combinations of source/destination
bits/masks none of them useful to out needs so for dithering we still
use out routines.
The Hermes library is completely optional, you can build Window Maker
without having it, it just speeds up the things a little for some
situations.
hermes library is available here: http://www.clanlib.org/hermes/
--- 0.64.0
No Polling of Configuration Files
---------------------------------
Running Window Maker with one of -nopolling or --no-polling command line
options will make it not to poll every 3 seconds for changes in its
configuration files (good for laptops to let them spin disks down when idle).
Note:
For the ones used with Jim Knoble's 'no polling' patch, this is the same,
except that the need to #define ENABLE_NO_POLLING in wconfig.h was removed
and the behaviour is always available if you use the command line option.
--- 0.63.0

63
README
View File

@@ -13,9 +13,6 @@
Dan Pascu
Matthew Hawkins
]d
Web/FTP Master
@@ -54,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.
@@ -90,8 +88,15 @@ including platform specific packages of Window Maker.
* ChangeLog: what changed from the previous version?
* BUGS: list of known bugs
*** Tutorial
There's a tutorial maintained by Georges Tarbouriech at:
http://www.linuxfocus.org/~georges.t/
*** User Guide
@@ -216,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
==================
@@ -266,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
@@ -357,7 +337,6 @@ Authors
Alfredo K. Kojima <kojima@windowmaker.org>
Dan Pascu <dan@windowmaker.org>
Matt Hawkins <matt@windowmaker.org>
]d <id@windowmaker.org>
Please don't ask us questions before reading the documentation (esp. the
@@ -372,25 +351,3 @@ can be found in po/README and Window Maker/README
If you have any comments, fixes and bug reports (filled BUGFORMs) send them
to developers@windowmaker.org
Musicware
=========
If you use Window Maker and *really* like it, please consider making my day
by sending me a music CD (or a MiniDisc or even a MP3 CDR) of your favorite
band, singer, instrumentist, composer or whatever :^). I like listening to
music and would love to get new CDs, especially from other parts of the
world. I like almost any kind of music, from Ozzy Osbourne to Bach (mas não
pagode e sertanejo pelamordideus :), so I will be happy to receive just about
anything.
Snail mail address:
Alfredo Kengi Kojima
Rua Firmino O. Bimbi, 255/25B
Porto Alegre - RS
CEP 91751-330
Brazil

View File

@@ -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.

View File

@@ -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.

View File

@@ -1,67 +1,78 @@
# README.definable-cursor: How to use definable-cursor patch for Window Maker
# created 1999-Apr-24 14:53 jmk
# autodate: 1999-Apr-24 16:29
__________________________________________________
|O| Definable Mouse Cursors for Window Maker |X|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The definable-cursor patch for Window Maker
<http://www.windowmaker.org/> allows user-definable mouse cursors; the
Definable Mouse Cursors for Window Maker
----------------------------------------
The definable-cursor feature allows user-definable mouse cursors; the
cursors can either be the built-in ones from the X11 cursor font, or
they can be bitmap (XBM) files. User-definable cursors can be useful
for theme-builders, lefthanders, and the visually impaired.
This README describes how to apply the patch to Window Maker and how to
use the features it enables.
____________________________
|O| Applying the Patch |X|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Defining Your Own Cursors
-------------------------
The definable-cursor patch is available from
<http://www.pobox.com/~jmknoble/WindowMaker/patches/>.
To apply the patch, do the following (where `XX' is the version of
Window Maker you're patching):
(0) gzip -dc WindowMaker-XX.tar.gz | tar -xvf -
(1) cd ./WindowMaker-XX
(2) patch </wherever/you/put/WindowMaker-XX-definable-cursor.patch
(3) Build Window Maker according to the instructions in the
accompanying `INSTALL' file.
___________________________________
|O| Defining Your Own Cursors |X|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A cursor specification is one of:
A cursor specification takes one of the following forms in the
~/GNUstep/Defaults/WindowMaker file:
(none)
(builtin, <cursor-name>)
(bitmap, <bitmap-filename>, <mask-filename>)
where <cursor-name> uses the same syntax as for `xsetroot -cursor_name',
and <bitmap-filename> and <mask-filename> are the same as for
`xsetroot -cursor'; <bitmap-filename> and <mask-filename> are searched
for along WM's PixmapPath. If you use `(none)', the cursor will be
inherited from the parent window (which often ends up being the root
window).
They have the following meanings:
none The cursor is inherited from the parent window (often,
this means the root window).
builtin Use the cursor named <cursor-name> from X11's set of
built-in cursors. The names are the same as you use
with 'xsetroot -cursor_name'. See the xsetroot(1) man
page for more information.
bitmap Use the bitmap in <bitmap-filename> as the foreground
cursor bitmap, and the one in <mask-filename> as the
background (mask) bitmap. This is pretty much the same
as 'xsetroot -cursor', except that Window Maker searches
for the bitmaps along its PixmapPath.
You can set the following cursor types (they're shown here with their
defaults):
NormalCursor = (builtin, left_ptr);
MoveCursor = (builtin, fleur);
ResizeCursor = (builtin, sizing);
WaitCursor = (builtin, watch);
NormalCursor = (builtin, left_ptr);
ArrowCursor = (builtin, top_left_arrow);
MoveCursor = (builtin, fleur);
TopLeftResizeCursor = (builtin, top_left_corner);
TopRightResizeCursor = (builtin, top_right_corner);
BottomLeftResizeCursor = (builtin, bottom_left_corner);
BottomRightResizeCursor = (builtin, bottom_right_corner);
VerticalResizeCursor = (builtin, sb_v_double_arrow);
HorizontalResizeCursor = (builtin, sb_h_double_arrow);
WaitCursor = (builtin, watch);
QuestionCursor = (builtin, question_arrow);
TextCursor = (builtin, xterm);
SelectCursor = (builtin, cross);
______________________
|O| Random Notes |X|
^^^^^^^^^^^^^^^^^^^^^^
The following cursor types are allowed, but they're deprecated (Window
Maker used them in the past, but doesn't use them anymore):
ResizeCursor = (builtin, sizing);
Using Cursors with 'getstyle' and 'setstyle'
--------------------------------------------
The 'getstyle' and 'setstyle' style/theme-management utilities can
handle user-definable cursors. By default, 'getstyle' ignores cursor
definitions; using 'getstyle -t' to get theme-related settings will
also include any cursors you've defined in the resulting stylefile.
However, by default, 'setstyle' does NOT ignore cursor settings. If
you wish to set a style or theme without installing cursor settings,
you can use 'setstyle --no-cursors' to ignore the cursor definitions.
Random Notes
------------
Most X11 cursors are 16x16 bitmaps. Many X servers can actually handle
larger cursors, though. To check, use:
@@ -75,12 +86,7 @@ and in the resulting output look for a line such as:
The example above indicates that my X server can handle cursors up to
64 pixels wide by 64 pixels high.
You can create your own bitmap cursors using the `bitmap' program that
accompanies most X11 distributions. For example bitmap cursors, see
<http://www.pobox.com/~jmknoble/WindowMaker/cursors/>.
You can create your own bitmap cursors using the 'bitmap' program that
accompanies most X11 distributions. For example bitmap cursors and
masks, see <http://www.pobox.com/~jmknoble/WindowMaker/cursors/>.
For an example
--jim
%%%%%%%%%%%%%%% jim knoble %%%%%%%% jmknoble@pobox.com %%%%%%%%%%%%%%%%%

345
README.es Normal file
View 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>

View File

@@ -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
====================

24
TODO
View File

@@ -7,14 +7,17 @@ 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:
===========
- put a "Do not save workspace state" in the exit confirmation dialog
- 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
- fix windoze cycle window patch
- support for X11R6.4 extension for getting extra visual info in wrlib's
automatic best context guessing
- docklet to control AccessX (keyboard accessibility) functions
@@ -22,14 +25,17 @@ Need to do:
- add function to directly make a thumbnail of an image, using the
functionality provided by the image libraries to load a minimal
amount of data.
+ investigate memory leaks
- rewrite defaults/wdefaults stuff to use WINGs UD stuff. Search list:
~/G/D/WindowMaker /u/l/s/W/D/WindowMaker built-in-defaults
- remake internal string processing to use wchar? unicode?
- add new file for stuff like default commands and dnd commands for
docked apps, balloons for the dock etc
- fix the #define MIN(a,b) stuff. defined in too many places, and maybe
replace with WMIN(a,b).
- check whether apps with name.class set to empty strings should be treated
like if name.class is NULL.NULL
- review the defaults handling code (not to reread after we update a
domain if possible, check WINGs apps updating WMWindowAttributes after
start making screen to flash on update)
Maybe some day:
===============
@@ -40,10 +46,10 @@ Maybe some day:
Never: (so, dont even bother to ask)
======
- different themes for each workspace. Unless you give us a SGI/Power Onyx
with 2 CPUs ;).
with 2 CPUs ;).
- anything that requires the mouse pointer to be jumped by WindowMaker to
somewhere. This is *terrible* behaviour. And it's not just IMO.
- rewrite to use Gtk... I wont even explain why...
somewhere. This is *terrible* behaviour. And it's not just IMO.
- rewrite to use Gtk... I wont even bother to explain why...
- ICCCM 2.0: ICCCM 2.0 (not 1.0, which is what everybody supports so so) is

View File

@@ -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

View File

@@ -1,3 +1,181 @@
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:
............................
- added an internal strcasecmp() (only on systems where is not present)
- removed some redundant includes of ../src/config.h when wconfig.h is
included too
- removed a wsyserror() message when reading a property list from file
(the programmer should decide if to give that message or just ignore).
- added a 'Bool recursive' flag to WMMergePLDictionaries()
- added WMSubtractPLDictionaries()
Changes since wmaker 0.65.0:
............................
- fixed problem with WINGs based apps exiting with a "X_RotateProperties"
related error when text was selected in a textfiled.
- moved wstrdup(), wstrconcat() and wstrappend() from memory.c to string.c
- added property list handling code making libPropList unnecessary and
obsolete. Backward compatibility is provided through the
WINGs/proplist-compat.h header file which has #defines from old libPropList
function names to new function names with minimal changes. Read this
header file and the NEWS file for more details about this subject.
- Renamed WMGetUDAllKeys() to WMGetUDKeys()
Changes since wmaker 0.64.0:
............................
- made programmatic scroller changes send notifications
- replaced WMSetBoxExpandsToParent with WMSetViewExpands...
- added WMGetLabelFont()
- added WMAddPersistentTimerHandler()
- Moved all internal handlers (timer, idle and input) to handlers.c
- simplified wevent.c and wutil.c.
- fixed handling of input with poll (was broken)
- fixed mem leak that occured when input handling was done with poll
- simpler and more straightforward event handling for timer, idle, input
and X events (also fixed some problems the old handling logic had)
- moved timer, idle and input handler definitions and prototypes from
WINGs.h to WUtil.h because they're not GUI related.
- better and more robust handling of events (timer, idle, input, X) in
WMMaskEvent(). Also fixed a bug where input and timer events were not
treated for undefined periods of time under some circumstances.
- fixed secure textfields not to allow text selection, to avoid compromising
sensitive information by pasting it to a terminal.
- replaced wmkrange(), wmkpoint() and wmksize() functions with macros.
- added WMRemoveFromArrayMatching(array, match, cdata), which will remove the
first element in the array that is matched by match(item, cdata)==True.
- added WMArrayFirst(), WMArrayLast(), WMArrayNext() and WMArrayPrevious()
functions and also WM_ITERATE_ARRAY() and WM_ETARETI_ARRAY() macros, to make
interfaces to WMBag and WMArray similar and to make life a little simpler
when iterating through all elements of an array.
- replaced bags with arrays wherever appropriate. This will improve
performance a bit.
- replaced some recursive code with iterative code in selection.c
- added WMCreateBlendedPixmapFromRImage()
- small API change:
1. Renamed WMSetApplicationIconImage(), WMGetApplicationIconImage() and
WMSetWindowMiniwindowImage() to respectively WMSetApplicationIconPixmap(),
WMGetApplicationIconPixmap() and WMSetWindowMiniwindowPixmap()
They operate on a WMPixmap which is practically an X Pixmap with no alpha
channel information and the new name is more suggestive and also leaves
room for the new functions added for operating on images with alpha info.
2. Added WMSetApplicationIconImage() and WMGetApplicationIconImage() which
operate on an RImage and store alpha information too.
3. Added WMCreateApplicationIconBlendedPixmap() which will take the image
set by WMSetApplicationIconImage() and will combine it with a color.
If color is NULL it will blend using the default panel color (#aeaaae)
All these changes will allow WINGs to handle images with alpha blending
correctly in panels and wherever else needed. More about in NEWS.
- updated panels to use the newly available RImages if present and fallback
to old WMPixmaps if not, to properly show alpha blended images.
- replaced some still left malloc's with wmalloc's.
- fixed a bug in WMReparentWidget()
- added WMReparentWidget() to WINGs.h
- fixed a bug that made the scroller knob jump backwards when dragged (this
bug had no relation with the behavior that #define STRICT_NEXT_BEHAVIOUR
attempts to accomplish).
- fixed scrolling direction with mouse wheel for horizontal scroller.
changes since wmaker 0.63.1:
............................
- added WMRunModalLoop() and WMBreakModalLoop()
- added WMSetBoxExpandsToParent()
- added WMRemoveBoxSubview()
- moved WINGs headers in a WINGs subdirectory when installed.
use #include <WINGs/header_file_name> in your application from now on.
Also updated get-{wings|wutil}-flags.
- Fixed a mem leak in WMList.
- Fixed a bug that caused sigsegv for a WMList with more than 32767 items.
- Added an example of how to create a server type program with WMConnection.
- added WMOpenScreen()
changes since wmaker 0.62.1:
............................
- added WRuler widget
@@ -58,6 +236,7 @@ changes since wmaker 0.62.1:
the program name prepended to it. Similar to wwarning(), except that it
doesn't add "warning:" in the output message.
- added WMBox widget
- added WMAddTabViewItemWithView()
- added W_SetViewCursor()
- made Extra widgets library
- added table widget in Extras library
@@ -83,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:

View File

@@ -1,3 +1,2 @@
Makefile Makefile.in
.psrc .inslog2 tca.map tca.log
*.rpt
.psrc .inslog2 tca.map tca.log pchdir *.rpt

View File

@@ -17,13 +17,16 @@ it), there are some ways to handle it:
This is by far the best method, since it will assure you that if you
enqueue more than one notification to remove the same connection, they will
be coalesced, and called only once.
2. In your observer, put the died/closed connection in a bag, and destroy all
the connections present in the bag, in your main loop, after you call the
WHandleEvents()/WMHandleEvent(). Also closing the connection can be done
before putting the connection in the bag, but is optional as noted above.
In this case you need to make sure you don't put in the bag the same
connection more than once, in case the DieNotification is sent more that
once to you. This is automagically solved by method 1.
2. In your observer, put the died/closed connection in an array or bag, and
destroy all the connections present in the array/bag, in your main loop,
after you call the WHandleEvents()/WMHandleEvent(). Also closing the
connection can be done before putting the connection in the array/bag, but
is optional as noted above. In this case you need to make sure you don't
put in the array/bag the same connection more than once, in case the
DieNotification is sent more that once to you. This is automagically solved
by method 1.
3. In case it's your only connection, and you plan to exit if it was closed or
died, then you can safely close/remove it, and exit. As long as you no
longer access it, there is no problem.
@@ -33,10 +36,11 @@ it), there are some ways to handle it:
means until your code gets back to the main loop). This is almost always
very hard to achive and subject to hidden errors. I do not recommend this
way of handling the died notification. It is ugly and very complicated to
handle. If you use it and get plenty of SIGSEGVs then you know why.
This method was not presented here to be used, but to show what should
be avoided in dealing with the died notification, in case someone gets the
idea to try it this way.
handle if the program is in a very deeply nested function when it finds out
that the connection died. If you use it and get plenty of SIGSEGVs then you
know why. This method was not presented here to be used, but to show what
should be avoided in dealing with the died notification, in case someone
gets the idea to try it this way.
Note: read/write operations means to use our read/write functions (like

View File

@@ -1,5 +1,5 @@
Makefile Makefile.in
connect fontl puzzle
connect server fontl puzzle UserTime.plist
colorpick
.libs
.psrc .inslog2 tca.map tca.log
*.rpt
.psrc .inslog2 tca.map tca.log pchdir *.rpt

View File

@@ -3,12 +3,13 @@
AUTOMAKE_OPTIONS = no-dependencies
noinst_PROGRAMS = connect fontl puzzle
noinst_PROGRAMS = connect server fontl puzzle colorpick
LDADD= $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la \
@LIBPL@
@XFTLIBS@ @INTLIBS@
colorpick_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a
fontl_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a
@@ -17,7 +18,12 @@ puzzle_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a
connect_DEPENDENCIES = $(top_builddir)/WINGs/libWUtil.a
connect_LDADD = $(top_builddir)/WINGs/libWUtil.a @LIBRARY_SEARCH_PATH@ \
@NETLIBS@ @LIBPL@
@NETLIBS@ @INTLIBS@
server_DEPENDENCIES = $(top_builddir)/WINGs/libWUtil.a
server_LDADD = $(top_builddir)/WINGs/libWUtil.a @LIBRARY_SEARCH_PATH@ \
@NETLIBS@ @INTLIBS@
INCLUDES = -I$(top_srcdir)/WINGs -I$(top_srcdir)/wrlib -I$(top_srcdir)/src \

19
WINGs/Examples/README Normal file
View File

@@ -0,0 +1,19 @@
Files:
-----
server - server example of using WMConnection. It keeps a database of
timeouts for a group of users, allowing one to add/remove
users and update the timeouts associated with them.
connect - client example of using WMConnection. Works with the server
program above. Just start both without any parameter and
type help in the client to find out how to operate them.
Rest is self explanatory.
puzzle - a nice zuPzel =)
fontl - a map of all characters with their corresponding ascii,
hex, decimal and octal representations.

View 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;
}

View File

@@ -1,29 +1,17 @@
/*
* WINGs connect.c: example how to create a network client using WMConnection
*
* Copyright (c) 1999 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
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* Copyright (c) 1999-2003 Dan Pascu
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "WINGs.h"
#include <WINGs/WINGs.h>
@@ -41,6 +29,7 @@ static void didInitialize(ConnectionDelegate *self, WMConnection *cPtr);
static ConnectionDelegate socketDelegate = {
NULL, /* data */
NULL, /* canResumeSending */
NULL, /* didCatchException */
connectionDidDie, /* didDie */
didInitialize, /* didInitialize */
@@ -51,7 +40,7 @@ static ConnectionDelegate socketDelegate = {
void
wAbort(Bool foo) /*FOLD00*/
wAbort(Bool foo)
{
exit(1);
}
@@ -102,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;
@@ -119,7 +108,7 @@ didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr) /*FOLD00*/
static void
connectionDidDie(ConnectionDelegate *self, WMConnection *cPtr) /*FOLD00*/
connectionDidDie(ConnectionDelegate *self, WMConnection *cPtr)
{
WMCloseConnection(cPtr);
@@ -151,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;
@@ -168,7 +157,7 @@ main(int argc, char **argv) /*FOLD00*/
ProgName++;
host = NULL;
port = "7000";
port = "34567";
if (argc>1) {
for (i=1; i<argc; i++) {

View File

@@ -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.
*/
@@ -24,8 +24,8 @@
#include <stdlib.h>
#include <stdio.h>
#include "WINGs.h"
#include "WUtil.h"
#include <WINGs/WINGs.h>
#include <WINGs/WUtil.h>
void
wAbort()
@@ -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;
}

View File

@@ -3,7 +3,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <WINGs.h>
#include <WINGs/WINGs.h>
@@ -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;
}

740
WINGs/Examples/server.c Normal file
View File

@@ -0,0 +1,740 @@
/*
* WINGs server.c: example how to create a network server using WMConnection
*
* Copyright (c) 2001-2003 Dan Pascu
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <WINGs/WINGs.h>
#define _(P) P
#define MAXCMD_SIZE 512
char *SEConnectionShouldBeRemovedNotification = "SEConnectionShouldBeRemovedNotification";
static void didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr);
static void connectionDidDie(ConnectionDelegate *self, WMConnection *cPtr);
static void connectionDidTimeout(ConnectionDelegate *self, WMConnection *cPtr);
extern char *SEConnectionShouldBeRemovedNotification;
static WMUserDefaults *timeDB = NULL;
static char *ServerAddress = NULL;
static char *ServerPort = NULL;
static WMArray *allowedHostList = NULL;
static WMArray *clientConnections = NULL;
static WMConnection *serverPtr = NULL;
static ConnectionDelegate socketDelegate = {
NULL, /* client data */
NULL, /* canResumeSending */
NULL, /* didCatchException */
connectionDidDie, /* didDie */
NULL, /* didInitialize */
didReceiveInput, /* didReceiveInput */
connectionDidTimeout /* didTimeout */
};
void
wAbort(Bool foo)
{
exit(1);
}
static void
printHelp(char *progname)
{
printf(_("usage: %s [options]\n\n"), progname);
puts(_(" --help print this message"));
puts(_(" --listen [address:]port only listen on the specified address/port"));
puts(_(" --allow host1[,host2...] only allow connections from listed hosts\n"));
puts(_(" By default server listens on all interfaces and port 34567, unless"
" something\nelse is specified with the --listen option. If address is"
" omitted or the keyword\n'Any' is used, it will listen on all interfaces else"
" only on the specified one.\n\nFor example --listen localhost: will"
" listen on the default port 34567, but only\non connections comming"
" in through the loopback interface.\n\n Also by default the server"
" listens to incoming connections from any host,\nunless a list of"
" hosts is given with the --allow option, in which case it will\nreject"
" connections not comming from those hosts.\nThe list of hosts is comma"
" separated and should NOT contain ANY spaces."));
}
static void
enqueueConnectionForRemoval(WMConnection *cPtr)
{
WMNotification *notif;
/*don't release notif here. it will be released by queue after processing */
notif = WMCreateNotification(SEConnectionShouldBeRemovedNotification,
cPtr, NULL);
WMEnqueueNotification(WMGetDefaultNotificationQueue(), notif, WMPostASAP);
}
static int
sendMessage(WMConnection *cPtr, char *message)
{
WMData *aData;
int res;
if (WMGetConnectionState(cPtr)!=WCConnected)
return -1;
aData = WMCreateDataWithBytes(message, strlen(message));
res = WMSendConnectionData(cPtr, aData);
WMReleaseData(aData);
return res;
}
static Bool
enqueueMessage(WMConnection *cPtr, char *message)
{
WMData *aData;
Bool res;
if (WMGetConnectionState(cPtr)!=WCConnected)
return False;
aData = WMCreateDataWithBytes(message, strlen(message));
res = WMEnqueueConnectionData(cPtr, aData);
WMReleaseData(aData);
return res;
}
static unsigned char*
findDelimiter(unsigned char *data, unsigned const char *endPtr)
{
wassertrv(data < endPtr, NULL);
while (data<endPtr && *data!='\n' && *data!='\r' && *data!=';' && *data!='\0')
data++;
if (data < endPtr)
return data;
return NULL;
}
static WMArray*
getAvailableMessages(WMConnection *cPtr)
{
char *ptr, *crtPos, *buffer;
const char *bytes, *endPtr;
WMData *aData, *receivedData, *holdData;
WMRange range;
WMArray *messages;
int length;
receivedData = WMGetConnectionAvailableData(cPtr);
if (!receivedData)
return NULL;
if ((length=WMGetDataLength(receivedData))==0) {
WMReleaseData(receivedData);
return NULL;
}
holdData = (WMData*)WMGetConnectionClientData(cPtr);
if (holdData) {
WMAppendData(holdData, receivedData);
WMReleaseData(receivedData);
WMSetConnectionClientData(cPtr, NULL);
aData = holdData;
} else {
aData = receivedData;
}
length = WMGetDataLength(aData);
bytes = (char*)WMDataBytes(aData);
endPtr = bytes + length;
messages = WMCreateArrayWithDestructor(1, wfree);
crtPos = (char*)bytes;
while (crtPos<endPtr && (ptr = findDelimiter(crtPos, endPtr))!=NULL) {
range.position = (crtPos - bytes);
range.count = (ptr - crtPos);
if (range.count > MAXCMD_SIZE) {
/* Hmmm... The message is too long. Possibly that someone is
* flooding us, or there is a dumb client which do not know
* who is talking to. */
sendMessage(cPtr, "Command too long\n\r");
WMFreeArray(messages);
WMReleaseData(aData);
WMCloseConnection(cPtr);
enqueueConnectionForRemoval(cPtr);
return NULL;
}
buffer = wmalloc(range.count+1);
WMGetDataBytesWithRange(aData, buffer, range);
buffer[range.count] = '\0';
WMAddToArray(messages, buffer);
crtPos = ptr;
while (crtPos<endPtr && (*crtPos=='\n' || *crtPos=='\r' ||
*crtPos=='\t' || *crtPos=='\0' ||
*crtPos==';' || *crtPos==' ')) {
crtPos++;
}
}
if (crtPos<endPtr) {
range.position = (crtPos - bytes);
range.count = (endPtr - crtPos);
if (range.count > MAXCMD_SIZE) {
/* Flooooooding!!!! */
sendMessage(cPtr, "Message too long\n\r");
WMFreeArray(messages);
WMReleaseData(aData);
WMCloseConnection(cPtr);
enqueueConnectionForRemoval(cPtr);
return NULL;
}
holdData = WMGetSubdataWithRange(aData, range);
WMSetConnectionClientData(cPtr, holdData);
}
WMReleaseData(aData);
if (WMGetArrayItemCount(messages)==0) {
WMFreeArray(messages);
messages = NULL;
}
return messages;
}
static void
complainAboutBadArgs(WMConnection *cPtr, char *cmdName, char *badArgs)
{
char *buf = wmalloc(strlen(cmdName) + strlen(badArgs) + 100);
sprintf(buf, _("Invalid parameters '%s' for command %s. Use HELP for"
" a list of commands.\n"), badArgs, cmdName);
sendMessage(cPtr, buf);
wfree(buf);
}
static void
sendUpdateMessage(WMConnection *cPtr, char *id, int time)
{
char *buf = wmalloc(strlen(id) + 100);
sprintf(buf, "%s has %i minutes left\n", id, time);
sendMessage(cPtr, buf);
wfree(buf);
}
static void
showId(WMConnection *cPtr)
{
sendMessage(cPtr, "Server example based on WMConnection\n");
}
static void
showHelp(WMConnection *cPtr)
{
char *buf = wmalloc(strlen(WMGetApplicationName()) + 16);
sprintf(buf, _("%s commands:\n\n"), WMGetApplicationName());
enqueueMessage(cPtr, _("\n"));
enqueueMessage(cPtr, buf);
enqueueMessage(cPtr, _("GET <id>\t- return time left (in minutes) "
"for user with id <id>\n"));
enqueueMessage(cPtr, _("SET <id> <time>\t- set time limit to <time> "
"minutes for user with id <id>\n"));
enqueueMessage(cPtr, _("ADD <id> <time>\t- add <time> minutes "
"for user with id <id>\n"));
enqueueMessage(cPtr, _("SUB <id> <time>\t- subtract <time> minutes "
"for user with id <id>\n"));
enqueueMessage(cPtr, _("REMOVE <id>\t- remove time limitations for "
"user with id <id>\n"));
enqueueMessage(cPtr, _("LIST\t\t- list all users and their "
"corresponding time limit\n"));
enqueueMessage(cPtr, _("ID\t\t- returns the Time Manager "
"identification string\n"));
enqueueMessage(cPtr, _("EXIT\t\t- exits session\n"));
enqueueMessage(cPtr, _("QUIT\t\t- exits session\n"));
enqueueMessage(cPtr, _("HELP\t\t- show this message\n\n"));
/* Just flush the queue we made before */
WMFlushConnection(cPtr);
wfree(buf);
}
static void
listUsers(WMConnection *cPtr)
{
WMPropList *userList;
char *id;
int i, time;
userList = WMGetUDKeys(timeDB);
for (i=0; i<WMGetPropListItemCount(userList); i++) {
id = WMGetFromPLString(WMGetFromPLArray(userList, i));
time = WMGetUDIntegerForKey(timeDB, id);
sendUpdateMessage(cPtr, id, time);
}
WMReleasePropList(userList);
}
static void
setTimeForUser(WMConnection *cPtr, char *cmdArgs)
{
char *id;
int i, time;
id = wmalloc(strlen(cmdArgs));
if (sscanf(cmdArgs, "%s %d", id, &time)!=2) {
complainAboutBadArgs(cPtr, "SET", cmdArgs);
wfree(id);
return;
}
if (time<0)
time = 0;
WMSetUDIntegerForKey(timeDB, time, id);
for (i=0; i<WMGetArrayItemCount(clientConnections); i++) {
cPtr = WMGetFromArray(clientConnections, i);
sendUpdateMessage(cPtr, id, time);
}
wfree(id);
}
static void
addTimeToUser(WMConnection *cPtr, char *cmdArgs)
{
char *id;
int i, time, newTime;
id = wmalloc(strlen(cmdArgs));
if (sscanf(cmdArgs, "%s %d", id, &time)!=2) {
complainAboutBadArgs(cPtr, "ADD", cmdArgs);
wfree(id);
return;
}
newTime = WMGetUDIntegerForKey(timeDB, id) + time;
if (newTime<0)
newTime = 0;
WMSetUDIntegerForKey(timeDB, newTime, id);
for (i=0; i<WMGetArrayItemCount(clientConnections); i++) {
cPtr = WMGetFromArray(clientConnections, i);
sendUpdateMessage(cPtr, id, newTime);
}
wfree(id);
}
static void
subTimeFromUser(WMConnection *cPtr, char *cmdArgs)
{
char *id;
int i, time, newTime;
id = wmalloc(strlen(cmdArgs));
if (sscanf(cmdArgs, "%s %d", id, &time)!=2) {
complainAboutBadArgs(cPtr, "SUB", cmdArgs);
wfree(id);
return;
}
newTime = WMGetUDIntegerForKey(timeDB, id) - time;
if (newTime<0)
newTime = 0;
WMSetUDIntegerForKey(timeDB, newTime, id);
for (i=0; i<WMGetArrayItemCount(clientConnections); i++) {
cPtr = WMGetFromArray(clientConnections, i);
sendUpdateMessage(cPtr, id, newTime);
}
wfree(id);
}
static void
removeTimeForUser(WMConnection *cPtr, char *cmdArgs)
{
char *ptr;
int i;
if (cmdArgs[0]=='\0') {
sendMessage(cPtr, _("Missing parameter for command REMOVE."
" Use HELP for a list of commands.\n"));
return;
}
ptr = cmdArgs;
while (*ptr && *ptr!=' ' && *ptr!='\t')
ptr++;
*ptr = '\0';
WMRemoveUDObjectForKey(timeDB, cmdArgs);
for (i=0; i<WMGetArrayItemCount(clientConnections); i++) {
cPtr = WMGetFromArray(clientConnections, i);
sendUpdateMessage(cPtr, cmdArgs, -1);
}
}
static void
getTimeForUser(WMConnection *cPtr, char *cmdArgs)
{
char *ptr;
int time;
if (cmdArgs[0]=='\0') {
sendMessage(cPtr, _("Missing parameter for command GET."
" Use HELP for a list of commands.\n"));
return;
}
ptr = cmdArgs;
while (*ptr && *ptr!=' ' && *ptr!='\t')
ptr++;
*ptr = '\0';
if (WMGetUDObjectForKey(timeDB, cmdArgs)!=NULL)
time = WMGetUDIntegerForKey(timeDB, cmdArgs);
else
time = -1;
sendUpdateMessage(cPtr, cmdArgs, time);
}
static void
handleConnection(WMConnection *cPtr)
{
char *command, *ptr, *cmdArgs, *buffer;
WMArray *commands;
int i;
commands = getAvailableMessages(cPtr);
if (!commands)
return;
for (i=0; i<WMGetArrayItemCount(commands); i++) {
command = WMGetFromArray(commands, i);
while (*command && (*command==' ' || *command=='\t'))
command++;
ptr = command;
while(*ptr && *ptr!=' ' && *ptr!='\t')
ptr++;
if (*ptr) {
*ptr = '\0';
ptr++;
}
while (*ptr && (*ptr==' ' || *ptr=='\t'))
ptr++;
cmdArgs = ptr;
fprintf(stderr, "Command: '%s', args: '%s'\n", command, cmdArgs);
if (strcasecmp(command, "quit")==0 || strcasecmp(command, "exit")==0) {
sendMessage(cPtr, "Bye\n");
WMCloseConnection(cPtr);
enqueueConnectionForRemoval(cPtr);
WMFreeArray(commands);
return;
} else if (strcasecmp(command, "id")==0) {
showId(cPtr);
} else if (strcasecmp(command, "help")==0) {
showHelp(cPtr);
} else if (strcasecmp(command, "list")==0) {
listUsers(cPtr);
} else if (strcasecmp(command, "set")==0) {
setTimeForUser(cPtr, cmdArgs);
} else if (strcasecmp(command, "add")==0) {
addTimeToUser(cPtr, cmdArgs);
} else if (strcasecmp(command, "sub")==0) {
subTimeFromUser(cPtr, cmdArgs);
} else if (strcasecmp(command, "remove")==0) {
removeTimeForUser(cPtr, cmdArgs);
} else if (strcasecmp(command, "get")==0) {
getTimeForUser(cPtr, cmdArgs);
} else {
buffer = wmalloc(strlen(command) + 100);
sprintf(buffer, _("Unknown command '%s'. Try HELP for"
" a list of commands.\n"), command);
sendMessage(cPtr, buffer);
wfree(buffer);
}
}
WMFreeArray(commands);
}
static Bool
isAllowedToConnect(WMConnection *cPtr)
{
WMHost *hPtr;
int i;
if (allowedHostList == NULL)
return True; /* No list. Allow all by default */
hPtr = WMGetHostWithAddress(WMGetConnectionAddress(cPtr));
for (i=0; i<WMGetArrayItemCount(allowedHostList); i++) {
if (WMIsHostEqualToHost(hPtr, WMGetFromArray(allowedHostList, i))) {
WMReleaseHost(hPtr);
return True;
}
}
WMReleaseHost(hPtr);
return False;
}
static void
didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr)
{
if (cPtr == serverPtr) {
WMConnection *newPtr = WMAcceptConnection(cPtr);
if (newPtr) {
if (isAllowedToConnect(newPtr)) {
WMSetConnectionDelegate(newPtr, &socketDelegate);
WMSetConnectionSendTimeout(newPtr, 120);
WMAddToArray(clientConnections, newPtr);
} else {
sendMessage(newPtr, "Sorry, you are not allowed to connect.\n");
WMDestroyConnection(newPtr);
}
}
} else {
/* Data arriving on an already-connected socket */
handleConnection(cPtr);
}
}
static void
connectionDidTimeout(ConnectionDelegate *self, WMConnection *cPtr)
{
WMHost *hPtr;
if (cPtr == serverPtr) {
wfatal(_("The server listening socket did timeout. Exiting."));
exit(1);
}
hPtr = WMGetHostWithAddress(WMGetConnectionAddress(cPtr));
wwarning(_("Connection with %s did timeout. Closing connection."),
WMGetHostName(hPtr));
WMReleaseHost(hPtr);
enqueueConnectionForRemoval(cPtr);
}
static void
connectionDidDie(ConnectionDelegate *self, WMConnection *cPtr)
{
if (cPtr == serverPtr) {
/* trouble. server listening port itself died!!! */
wfatal(_("The server listening socket died. Exiting."));
exit(1);
}
enqueueConnectionForRemoval(cPtr);
}
static void
removeConnection(void *observer, WMNotification *notification)
{
WMConnection *cPtr = (WMConnection*)WMGetNotificationObject(notification);
WMData *data;
WMRemoveFromArray(clientConnections, cPtr);
if ((data = (WMData*)WMGetConnectionClientData(cPtr))!=NULL)
WMReleaseData(data);
WMDestroyConnection(cPtr);
}
static void
updatedDomain(void *observer, WMNotification *notification)
{
wmessage("defaults domain file changed on disk. synchronizing.");
}
#if 0
static Bool
isDifferent(char *str1, char *str2)
{
if ((!str1 && !str2) || (str1 && str2 && strcmp(str1, str2)==0))
return False;
return True;
}
#endif
int
main(int argc, char **argv)
{
int i;
wsetabort(wAbort);
WMInitializeApplication("server", &argc, argv);
if (argc>1) {
for (i=1; i<argc; i++) {
if (strcmp(argv[i], "--help")==0) {
printHelp(argv[0]);
exit(0);
} else if (strcmp(argv[i], "--listen")==0) {
char *p;
if ((p = strchr(argv[++i], ':')) != NULL) {
*p = 0;
ServerAddress = wstrdup(argv[i]);
ServerPort = wstrdup(p+1);
*p = ':';
if (ServerAddress[0] == 0) {
wfree(ServerAddress);
ServerAddress = NULL;
}
if (ServerPort[0] == 0) {
wfree(ServerPort);
ServerPort = "34567";
}
} else if (argv[i][0]!=0) {
ServerPort = argv[i];
}
} else if (strcmp(argv[i], "--allow")==0) {
char *p, *ptr;
int done;
WMHost *hPtr;
ptr = argv[++i];
done = 0;
while (!done) {
if ((p = strchr(ptr, ',')) != NULL) {
*p = 0;
}
if (*ptr != 0) {
hPtr = WMGetHostWithName(ptr);
if (hPtr) {
if (!allowedHostList)
allowedHostList = WMCreateArray(4);
WMAddToArray(allowedHostList, hPtr);
} else {
wwarning(_("Unknown host '%s'. Ignored."), ptr);
}
}
if (p!=NULL) {
*p = ',';
ptr = p+1;
} else {
done = 1;
}
}
} else {
printf(_("%s: invalid argument '%s'\n"), argv[0], argv[i]);
printf(_("Try '%s --help' for more information\n"), argv[0]);
exit(1);
}
}
}
timeDB = WMGetDefaultsFromPath("./UserTime.plist");
WMAddNotificationObserver(updatedDomain, NULL,
WMUserDefaultsDidChangeNotification, NULL);
clientConnections = WMCreateArray(4);
/* A NULL ServerAddress means to listen on any address the host has.
* Else if ServerAddress points to a specific address (like "localhost",
* "host.domain.com" or "192.168.1.1"), then it will only listen on that
* interface and ignore incoming connections on the others. */
if (ServerAddress && strcasecmp(ServerAddress, "Any")==0)
ServerAddress = NULL;
if (ServerPort==NULL)
ServerPort = "34567";
printf("Server will listen on '%s:%s'\n", ServerAddress?ServerAddress:"Any",
ServerPort);
printf("This server will allow connections from:");
if (allowedHostList) {
int i;
char *hName;
for (i=0; i<WMGetArrayItemCount(allowedHostList); i++) {
hName = WMGetHostName(WMGetFromArray(allowedHostList, i));
printf("%s'%s'", i==0?" ":", ", hName);
}
printf(".\n");
} else {
printf(" any host.\n");
}
serverPtr = WMCreateConnectionAsServerAtAddress(ServerAddress, ServerPort,
NULL);
if (!serverPtr) {
wfatal("could not create server on `%s:%s`. Exiting.",
ServerAddress ? ServerAddress : "localhost", ServerPort);
exit(1);
}
WMSetConnectionDelegate(serverPtr, &socketDelegate);
WMAddNotificationObserver(removeConnection, NULL,
SEConnectionShouldBeRemovedNotification, NULL);
while (1) {
/* The ASAP notification queue is called at the end of WHandleEvents()
* There's where died connections we get while running through
* WHandleEvents() get removed. */
WHandleEvents();
}
return 0;
}

View File

@@ -1,3 +1,4 @@
Makefile Makefile.in
.libs
test
.psrc .inslog2 tca.map tca.log pchdir *.rpt

View File

@@ -4,7 +4,10 @@ AUTOMAKE_OPTIONS = no-dependencies
include_HEADERS = wtableview.h tabledelegates.h
# is this a kluge? if so, how should i do it?
includedir = @includedir@/WINGs
include_HEADERS = wtableview.h wtabledelegates.h
lib_LIBRARIES = libExtraWINGs.a
@@ -15,16 +18,17 @@ EXTRA_DIST =
libExtraWINGs_a_SOURCES = \
wtableview.c \
tabledelegates.c \
wtabledelegates.c \
wtableview.h \
tabledelegates.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 \
@LIBPL@
@XFTLIBS@ @INTLIBS@
test_LDADD = wtableview.o tabledelegates.o $(LDADD)
test_LDADD = wtableview.o wtabledelegates.o $(LDADD)

View File

@@ -1,8 +1,9 @@
#include <WINGs.h>
#include <WINGs/WINGs.h>
#include <stdio.h>
#include "wtableview.h"
#include "tabledelegates.h"
#include "wtabledelegates.h"
static char *col1[20] = {0};
@@ -11,57 +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);
/*WMTableView *table = (WMTableView*)WMGetTableColumnTableView(column);*/
int i;
if (col1[0] == 0) {
for (i = 0; i < 20; i++) {
col1[i] = "teste";
col2[i] = 0;
}
for (i = 0; i < 20; i++) {
char buf[128];
sprintf(buf, "Test row %i", i);
col1[i] = wstrdup(buf);
col2[i] = 0;
}
}
if (WMGetTableColumnId(column) == 1)
return col1[row];
if ((int)WMGetTableColumnId(column) == 1)
return col1[row];
else
return 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 (WMGetTableColumnId(column) == 1)
col1[row] = data;
if ((int)WMGetTableColumnId(column) == 1)
col1[row] = data;
else
col2[row] = 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);
@@ -69,45 +78,39 @@ void clickedTable(WMWidget *w, void *self)
int
main(int argc, char **argv)
{
Display *dpy = XOpenDisplay("");
WMScreen *scr;
WMWindow *win;
WMTableView *table;
WMTableColumn *col;
WMTableColumnDelegate *colDeleg;
WMInitializeApplication("test", &argc, argv);
dpy = XOpenDisplay("");
if (!dpy) {
exit(1);
}
scr = WMCreateScreen(dpy, DefaultScreen(dpy));
WMInitializeApplication("test", &argc, argv);
scr = WMOpenScreen(NULL);
XSynchronize(WMScreenDisplay(scr), 1);
win = WMCreateWindow(scr, "eweq");
WMResizeWidget(win, 400, 200);
WMMapWidget(win);
table = WMCreateTableView(win);
WMResizeWidget(table, 400, 200);
WMSetTableViewHasHorizontalScroller(table, 0);
WMSetViewExpandsToParent(WMWidgetView(table), 10, 10, 10, 10);
WMSetTableViewBackgroundColor(table, WMWhiteColor(scr));
// WMSetTableViewGridColor(table, WMGrayColor(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);
@@ -116,22 +119,22 @@ 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);
WMMapWidget(table);
WMRealizeWidget(win);
WMScreenMainLoop(scr);
return 0;
}

View File

@@ -1,16 +1,17 @@
#include <WINGs.h>
#include <WINGs/WINGsP.h>
#include "wtableview.h"
#include "wtabledelegates.h"
typedef struct {
WMTableView *table;
WMFont *font;
GC gc;
GC selGc;
GC selTextGc;
GC selGC;
WMColor *textColor;
} StringData;
@@ -26,8 +27,8 @@ typedef struct {
WMTableView *table;
WMFont *font;
GC gc;
GC selGc;
GC selTextGc;
GC selGC;
WMColor *textColor;
} StringEditorData;
@@ -36,10 +37,10 @@ typedef struct {
WMTableView *table;
WMFont *font;
char **options;
int count;
int count;
GC gc;
GC selGc;
GC selTextGc;
GC selGC;
WMColor *textColor;
} EnumSelectorData;
@@ -48,6 +49,7 @@ typedef struct {
WMTableView *table;
Bool state;
GC gc;
GC selGC;
} BooleanSwitchData;
@@ -55,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];
@@ -71,28 +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) {
XClearArea(dpy, d, rects[0].x, rects[0].y,
rects[0].width, rects[0].height,
False);
WMDrawString(scr, d, gc, 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,
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,31 +105,29 @@ static void pixmapDraw(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) {
XClearArea(dpy, d, rects[0].x, rects[0].y,
rects[0].width, rects[0].height,
False);
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, 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, 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);
}
@@ -137,40 +136,40 @@ static void pixmapDraw(WMScreen *scr, Drawable d, GC gc,
static void SECellPainter(WMTableColumnDelegate *self,
WMTableColumn *column, int row)
static void
SECellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
int row, Drawable d)
{
StringEditorData *strdata = (StringEditorData*)self->data;
WMTableView *table = WMGetTableColumnTableView(column);
stringDraw(WMWidgetScreen(table),
WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, strdata->selGc, strdata->selTextGc, strdata->font,
WMTableViewDataForCell(table, column, row),
WMTableViewRectForCell(table, column, row),
False);
stringDraw(WMWidgetScreen(table), d,
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)
static void
selectedSECellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
int row, Drawable d)
{
StringEditorData *strdata = (StringEditorData*)self->data;
WMTableView *table = WMGetTableColumnTableView(column);
stringDraw(WMWidgetScreen(table),
WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, strdata->selGc, strdata->selTextGc, strdata->font,
WMTableViewDataForCell(table, column, row),
WMTableViewRectForCell(table, column, row),
True);
stringDraw(WMWidgetScreen(table), d,
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);
@@ -182,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->selTextGc = WMColorGC(WMBlackColor(scr));
data->gc = 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;
@@ -225,49 +225,49 @@ WMTableColumnDelegate *WTCreateStringEditorDelegate(WMTableView *parent)
/* ---------------------------------------------------------------------- */
static void ESCellPainter(WMTableColumnDelegate *self,
WMTableColumn *column, int row)
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),
WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, strdata->selGc, strdata->selTextGc, strdata->font,
strdata->options[i],
WMTableViewRectForCell(table, column, row),
False);
stringDraw(WMWidgetScreen(table), d,
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)
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),
WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, strdata->selGc, strdata->selTextGc, strdata->font,
strdata->options[i],
WMTableViewRectForCell(table, column, row),
True);
stringDraw(WMWidgetScreen(table), d,
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);
@@ -275,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->selTextGc = WMColorGC(WMBlackColor(scr));
data->gc = 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;
@@ -316,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]);
}
}
@@ -340,51 +342,53 @@ void WTSetEnumSelectorOptions(WMTableColumnDelegate *delegate,
/* ---------------------------------------------------------------------- */
static void BSCellPainter(WMTableColumnDelegate *self,
WMTableColumn *column, int row)
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, WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, 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, WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, 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)
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, WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, 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, WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, 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);
@@ -396,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);
@@ -416,19 +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);
data->gc = WMColorGC(color);
WMSetWidgetBackgroundColor(data->widget, color);
data->gc = WMColorGC(WMWhiteColor(scr));
data->selGC = WMColorGC(color);
delegate->data = data;
delegate->drawCell = BSCellPainter;
delegate->drawSelectedCell = selectedBSCellPainter;
@@ -442,48 +448,49 @@ WMTableColumnDelegate *WTCreateBooleanSwitchDelegate(WMTableView *parent)
/* ---------------------------------------------------------------------- */
static void SCellPainter(WMTableColumnDelegate *self,
WMTableColumn *column, int row)
static void
SCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
int row, Drawable d)
{
StringData *strdata = (StringData*)self->data;
WMTableView *table = WMGetTableColumnTableView(column);
stringDraw(WMWidgetScreen(table),
WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, strdata->selGc, strdata->selTextGc, strdata->font,
WMTableViewDataForCell(table, column, row),
WMTableViewRectForCell(table, column, row),
False);
stringDraw(WMWidgetScreen(table), d,
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)
static void
selectedSCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
int row, Drawable d)
{
StringData *strdata = (StringData*)self->data;
WMTableView *table = WMGetTableColumnTableView(column);
stringDraw(WMWidgetScreen(table),
WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, strdata->selGc, strdata->selTextGc, strdata->font,
WMTableViewDataForCell(table, column, row),
WMTableViewRectForCell(table, column, row),
True);
stringDraw(WMWidgetScreen(table), d,
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->selTextGc = WMColorGC(WMBlackColor(scr));
data->gc = 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;
@@ -497,45 +504,47 @@ WMTableColumnDelegate *WTCreateStringDelegate(WMTableView *parent)
/* ---------------------------------------------------------------------- */
static void PCellPainter(WMTableColumnDelegate *self,
WMTableColumn *column, int row)
static void
PCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
int row, Drawable d)
{
StringData *strdata = (StringData*)self->data;
WMTableView *table = WMGetTableColumnTableView(column);
pixmapDraw(WMWidgetScreen(table),
WMViewXID(WMGetTableViewDocumentView(table)),
strdata->selGc,
(WMPixmap*)WMTableViewDataForCell(table, column, row),
WMTableViewRectForCell(table, column, row),
False);
pixmapDraw(WMWidgetScreen(table), d,
strdata->gc, strdata->selGC,
(WMPixmap*)WMTableViewDataForCell(table, column, row),
WMTableViewRectForCell(table, column, row),
False);
}
static void selectedPCellPainter(WMTableColumnDelegate *self,
WMTableColumn *column, int row)
static void
selectedPCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
int row, Drawable d)
{
StringData *strdata = (StringData*)self->data;
WMTableView *table = WMGetTableColumnTableView(column);
pixmapDraw(WMWidgetScreen(table),
WMViewXID(WMGetTableViewDocumentView(table)),
strdata->selGc,
(WMPixmap*)WMTableViewDataForCell(table, column, row),
WMTableViewRectForCell(table, column, row),
True);
pixmapDraw(WMWidgetScreen(table), d,
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;
@@ -549,8 +558,9 @@ WMTableColumnDelegate *WTCreatePixmapDelegate(WMTableView *table)
/* ---------------------------------------------------------------------- */
static void drawPSCell(WMTableColumnDelegate *self,
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);
@@ -562,59 +572,60 @@ static void drawPSCell(WMTableColumnDelegate *self,
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->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),
WMViewXID(WMGetTableViewDocumentView(table)),
strdata->gc, strdata->selGc, strdata->selTextGc, 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)
static void
PSCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
int row, Drawable d)
{
drawPSCell(self, column, row, False);
drawPSCell(self, d, column, row, False);
}
static void selectedPSCellPainter(WMTableColumnDelegate *self,
WMTableColumn *column, int row)
static void
selectedPSCellPainter(WMTableColumnDelegate *self, WMTableColumn *column,
int row, Drawable d)
{
drawPSCell(self, column, row, True);
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->selTextGc = WMColorGC(WMBlackColor(scr));
data->gc = 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;
@@ -623,3 +634,5 @@ WMTableColumnDelegate *WTCreatePixmapStringDelegate(WMTableView *parent)
return delegate;
}

View File

@@ -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

View File

@@ -17,92 +17,102 @@ extern const char *WMTableViewSelectionDidChangeNotification;
typedef struct WMTableColumnDelegate {
void *data;
void (*drawCell)(struct WMTableColumnDelegate *self, WMTableColumn *column,
int row);
void (*drawCell)(struct WMTableColumnDelegate *self,
WMTableColumn *column, int row, Drawable d);
void (*drawSelectedCell)(struct WMTableColumnDelegate *self,
WMTableColumn *column, int row);
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 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

View File

@@ -2,44 +2,48 @@
AUTOMAKE_OPTIONS = no-dependencies
SUBDIRS = . Documentation Resources Examples Extras Tests
SUBDIRS = WINGs . po Documentation Resources Examples Extras Tests
#libWINGs_la_LDFLAGS = -version-info 1:1:0
include_HEADERS = WINGs.h WUtil.h WINGsP.h
bin_SCRIPTS = get-wings-flags get-wutil-flags
lib_LIBRARIES = libWINGs.a libWUtil.a
LDADD= libWINGs.a $(top_builddir)/wrlib/libwraster.la @LIBPL@
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 = \
WINGs.h \
WINGsP.h \
array.c \
bagtree.c \
configuration.c \
connection.c \
data.c \
dragcommon.c \
dragdestination.c \
dragsource.c \
error.c \
findfile.c \
handlers.c \
hashtable.c \
host.c \
international.c \
memory.c \
misc.c \
notification.c \
proplist.c \
selection.c \
snprintf.c \
string.c \
tree.c \
userdefaults.c \
usleep.c \
wapplication.c \
@@ -51,12 +55,14 @@ libWINGs_a_SOURCES = \
wcolor.c \
wcolorpanel.c \
wcolorwell.c \
wconfig.h \
wevent.c \
wfilepanel.c \
wframe.c \
wfont.c \
wfontpanel.c \
widgets.c \
winputmethod.c \
wlabel.c \
wlist.c \
wmenuitem.c \
@@ -78,29 +84,49 @@ libWINGs_a_SOURCES = \
libWUtil_a_SOURCES = \
WINGs.h \
WINGsP.h \
array.c \
bagtree.c \
connection.c \
data.c \
error.c \
findfile.c \
handlers.c \
hashtable.c \
host.c \
international.c \
memory.c \
misc.c \
notification.c \
proplist.c \
snprintf.c \
string.c \
tree.c \
userdefaults.c \
usleep.c \
wapplication.c \
wconfig.h \
wutil.c
INCLUDES = -I$(top_srcdir)/wrlib -I$(top_srcdir)/src \
-DRESOURCE_PATH=\"$(datadir)/WINGs\" @HEADER_SEARCH_PATH@ -DDEBUG
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\" @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

293
WINGs/NEWS Normal file
View File

@@ -0,0 +1,293 @@
*** 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
Property lists handling code
----------------------------
Code to handle property lists was added to WINGs. It is more robust
than the libPropList code, mostly because some conflicting concepts
borrowed from UserDefaults (which libPropList use) are no longer used in
the WINGs property lists code. These borrowed concepts conflicted with the
retain/release mechanism of property lists and could lead in certain cases
to segmentation faults when executing libPropList based code. But the worse
part was that these libPropList problems were practically unsolvable without
removing one of those conflicting concepts and without a complete redesign.
The new WINGs property lists code is also better integrated with the other
data types from WINGs and is actively maintained.
Practically the things that were removed from the WINGs property list
implementation compared to the old libPropList implementation, are exactly
the UserDefaults borrowed concepts that conflict with the retain/release
mechanism:
- The container of a proplist object and the associated functions are gone.
- The filename associated with a proplist object and the corresponding
functions are gone. Now the saving function needs the filename as a
parameter.
- The synchronization functions are no longer supported. They are part of
the UserDefaults and are implemented there.
- No functions related to domains/registering were implemented in the WINGs
property lists code, because they are also not part of property lists.
They are more in connection with UserDefaults and a central point of access
for domains.
The above 2 concepts: container and filename were added to libPropList just
to let it support synchronization which was borrowed from UserDefaults.
Property lists as defined in the openstep specification are just complex
data structures composed of strings, data, arrays, dictionaries and a mix of
them and are not associated with any file in particular. UserDefaults on the
other hand are property lists read from a specific file and they associate
that property list with that file and allow them to be synchronized.
Old libPropList based code can still be used by linking against the WINGs
library containing the new proplist code with minimal changes which are
described in detail in the comments at the top of the WINGs/proplist-compat.h
header file (the same file carries the #defines for mapping old libPropList
functions to the new WINGs proplist functions).
Our recommendation is to move to the new functions WINGs provide because
they better integrate with other function naming conventions in WINGs.
The proplist-compat.h header file is just a way to have old code up and
running with minimal changes so that we can remove the old and unmaintained
libPropList from systems while keeping to use old libPropList based code
without rewriting it and it should not be used for other purposes.
*** Sat Apr 21 09:12:09 EEST 2001 -Dan
API change
----------
To allow a correct display of icon images with alpha blending in panels and
other places where a WINGs based application may use them the following
changes took place:
1. The following functions were renamed:
- WMSetApplicationIconImage() --> WMSetApplicationIconPixmap()
- WMGetApplicationIconImage() --> WMGetApplicationIconPixmap()
- WMSetWindowMiniwindowImage() --> WMSetWindowMiniwindowPixmap()
2. The following functions were added:
- WMSetApplicationIconImage(WMScreen *scr, RImage *image)
- RImage* WMGetApplicationIconImage(WMScreen *scr)
- WMPixmap* WMCreateApplicationIconBlendedPixmap(WMScreen *scr, RColor *col)
As you can see the old functions that operated on WMPixmap images (which are
basically X Pixmaps that lack alpha information) were renamed to ...Pixmap()
to make them more suggestive about what they do and to make room for the
new functions that operate on RImages (that hold alpha information).
Since the corresponding WMGet... functions only retrieve the stored
image/pixmap from the application, I'll outline how the WMSet...
functions operate:
All WM...IconPixmap() functions operate on WMPixmaps
All WM...IconImage() functions operate on RImages
- WMSetApplicationIconImage() will set the RImage to be used in panels
and will also convert the RImage to a WMPixmap with a threshold of 128
and will use that pixmap for the appicon image. If that doesn't satisfy
you, you can make a call to WMSetApplicationIconPixmap() on your own to
set whatever WMPixmap you see fit for the appicon.
- WMSetApplicationIconPixmap() will set the WMPixmap to be used for the
appicon and for the panels
If you use only one of the above functions, the corresponding image/pixmap
will be used everywhere where needed (panels and appicon), but the pixmap
version will not be able to handle alpha blending correctly.
If you use both WMSetApplicationIconImage() and WMSetApplicationIconPixmap()
then the RImage will have priority in panels, and the WMPixmap will only be
used for the appicon. This allows you to better control what icon is
displayed in the appicon, in case the default conversion of the RImage to a
pixmap with a threshold of 128 is not good enough, or in case you want a
different icon to be shown in the appicon than in panels.
Also this new function was added:
- WMCreateApplicationIconBlendedPixmap() will use the RImage set with
WMSetApplicationIconImage() if available and will blend it with the color
you passed. This will make the image show well on a background of that
color. If the RImage was not set it will return NULL. You need to call
WMReleasePixmap() on it after you finish with it. Passing a NULL pointer
instead of a color will make the RImage be blended with the default color
of the WINGs widgets: '#aeaaae' making it suitable to be assigned to any
WINGs widget.
To make your existing code work as before all you need to do is to rename
the following functions:
- WMSetApplicationIconImage() --> WMSetApplicationIconPixmap()
- WMGetApplicationIconImage() --> WMGetApplicationIconPixmap()
- WMSetWindowMiniwindowImage() --> WMSetWindowMiniwindowPixmap()
But if you want to take advantage of the new abilities to show alpha
blended images you need to start using the new functions.

View File

@@ -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

View File

@@ -1,3 +1,2 @@
Makefile Makefile.in
.psrc .inslog2 tca.map tca.log
*.rpt
.psrc .inslog2 tca.map tca.log pchdir *.rpt

View File

@@ -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

View File

@@ -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

View File

@@ -2,10 +2,10 @@
AUTOMAKE_OPTIONS = no-dependencies
noinst_PROGRAMS = wtest wmquery wmfile testmywidget testcolorpanel
noinst_PROGRAMS = wtest wmquery wmfile testmywidget
LDADD= $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la \
@LIBPL@
@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

View File

@@ -2,9 +2,9 @@
* Demo user widget for WINGs
*
* Author: Alfredo K. Kojima
*
*
* This file is in the public domain.
*
*
*/
@@ -12,9 +12,9 @@
*
* Include the WINGs private data header.
*
*
*
*/
#include "WINGsP.h"
#include <WINGs/WINGsP.h>
/*
* Our public header.
@@ -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);
}

View File

@@ -1,7 +1,7 @@
/*
* Header for demo widget.
*
*
*/
typedef struct W_MyWidget MyWidget;

View File

@@ -1,81 +0,0 @@
/*
* Author: Pascal Hofstee <daeron@shadowmere.student.utwente.nl>
*/
#include "WINGs.h"
#include <unistd.h>
#include <stdio.h>
#include "logo.xpm"
void
wAbort()
{
exit(1);
}
char *ProgName;
int main(int argc, char **argv)
{
Display *dpy = XOpenDisplay("");
WMScreen *scr;
WMPixmap *pixmap;
WMColorPanel *panel;
WMColor *startcolor;
char *colorname = NULL;
int i;
#if 0
XSynchronize(dpy, True);
fprintf(stderr, "...Running Synchronous...\n");
#endif
WMInitializeApplication("WMColorPicker", &argc, argv);
ProgName = argv[0];
if (!dpy) {
puts("could not open display");
exit(1);
}
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-h")==0 || strcmp(argv[i], "--help")==0) {
printf("testcolorpanel [-h] [--help] [-c <color>]"
"[--color <color>]\n");
exit(0);
}
if (strcmp(argv[i], "-c")==0 || strcmp(argv[i], "--color")==0) {
i++;
if (i >= argc) {
printf("%s: missing argument for option '%s'\n",
argv[0], argv[i-1]);
exit(1);
}
colorname = argv[i];
}
}
scr = WMCreateSimpleApplicationScreen(dpy);
pixmap = WMCreatePixmapFromXPMData(scr, GNUSTEP_XPM);
WMSetApplicationIconImage(scr, pixmap);
WMReleasePixmap(pixmap);
panel = WMGetColorPanel(scr);
if (colorname) {
startcolor = WMCreateNamedColor(scr, colorname, False);
WMSetColorPanelColor(panel, startcolor);
WMReleaseColor(startcolor);
}
WMShowColorPanel(panel);
WMScreenMainLoop(scr);
return 0;
}

View File

@@ -1,7 +1,7 @@
#include <WINGs.h>
#include <WUtil.h>
#include <WINGs/WINGs.h>
#include <stdlib.h>
#include "mywidget.h"
@@ -22,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;
}

View File

@@ -10,7 +10,7 @@ ftp.windowmaker.org</u></font><Br>
<b><i>Window Maker</b>
<Img src=upbtn.xpm></i>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
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).
<p>

View File

@@ -1,22 +1,23 @@
/*
* 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...
-----------------------------------------------------------------------
*/
#include "WINGs.h"
#include <WINGs/WINGs.h>
#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);
WMSetApplicationIconImage(scr, pixmap);
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;
}

View File

@@ -1,13 +1,14 @@
/*
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
*/
#include "WINGs.h"
#include <WINGs/WINGs.h>
#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);
WMSetApplicationIconImage(scr, pixmap); WMReleasePixmap(pixmap);
pixmap = WMCreatePixmapFromXPMData(scr, GNUSTEP_XPM);
if ((result = WMRunInputPanel(scr, NULL, title, prompt, initial, "OK", "Cancel")) != NULL)
printf("%s\n", result);
else
printf("\n");
return 0;
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;
}

View File

@@ -2,16 +2,17 @@
* WINGs test application
*/
#include "WINGs.h"
#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,13 +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)
@@ -137,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);
@@ -193,11 +189,7 @@ singleClick(WMWidget *self, void *data)
static void
doubleClick(WMWidget *self, void *data)
{
WMLabel *label = (WMLabel*)data;
WMList *lPtr = (WMList*)self;
char buf[255];
WMSelectAllListItems(lPtr);
WMSelectAllListItems((WMList*)self);
}
@@ -249,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);
@@ -280,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);
@@ -297,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++;
@@ -316,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);
@@ -346,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;
@@ -360,12 +355,12 @@ testGradientButtons(WMScreen *scr)
back = RRenderGradient(60, 24, &dark, &light, RGRD_DIAGONAL);
RBevelImage(back, RBEV_RAISED2);
pix1 = WMCreatePixmapFromRImage(scr, back, 0);
RDestroyImage(back);
RReleaseImage(back);
back = RRenderGradient(60, 24, &dark, &light, RGRD_DIAGONAL);
RBevelImage(back, RBEV_SUNKEN);
pix2 = WMCreatePixmapFromRImage(scr, back, 0);
RDestroyImage(back);
RReleaseImage(back);
color = WMWhiteColor(scr);
altColor = WMCreateNamedColor(scr, "red", True);
@@ -409,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);
@@ -455,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);
@@ -507,6 +502,21 @@ testColorWell(WMScreen *scr)
WMMapWidget(win);
}
void
testColorPanel(WMScreen *scr)
{
WMColorPanel *panel = WMGetColorPanel(scr);
/*if (colorname) {
startcolor = WMCreateNamedColor(scr, colorname, False);
WMSetColorPanelColor(panel, startcolor);
WMReleaseColor(startcolor);
}*/
WMShowColorPanel(panel);
}
void
sliderCallback(WMWidget *w, void *data)
{
@@ -545,6 +555,7 @@ testSlider(WMScreen *scr)
WMMapWidget(win);
}
void
testTextField(WMScreen *scr)
{
@@ -579,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++;
@@ -593,19 +606,42 @@ 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);
while(fgets(buf, 1023, file))
WMAppendTextStream(text, buf);
fclose(file);
WMThawText(text);
} else {
WMAppendTextStream(text, "<HTML><i>Where's</i> the <b>README</b>?");
}
WMFreezeText(text);
while(fgets(buf, 1023, file))
WMAppendTextStream(text, buf);
fclose(file);
WMThawText(text);
} else {
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);
WMMapSubwidgets(win);
@@ -773,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;
}
}
@@ -798,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);
}
}
@@ -831,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);
}
}
@@ -938,276 +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);
}
/*******************************************************************/
#include "WUtil.h"
void
testUD()
{
@@ -1241,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
/*
@@ -1265,7 +1031,10 @@ main(int argc, char **argv)
/*
* Makes the logo be used in standard dialog panels.
*/
WMSetApplicationIconImage(scr, pixmap); WMReleasePixmap(pixmap);
if (pixmap) {
WMSetApplicationIconPixmap(scr, pixmap);
WMReleasePixmap(pixmap);
}
/*
* Do some test stuff.
@@ -1273,41 +1042,29 @@ main(int argc, char **argv)
* Put the testSomething() function you want to test here.
*/
testTabView(scr);
#if 0
testBox(scr);
testText(scr);
testList(scr);
testProgressIndicator(scr);
testColorWell(scr);
testTextField(scr);
testDragAndDrop(scr);
testDragAndDrop(scr);
testFontPanel(scr);
testScrollView(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.
@@ -1317,3 +1074,4 @@ main(int argc, char **argv)
return 0;
}

1
WINGs/WINGs/.cvsignore Normal file
View File

@@ -0,0 +1 @@
Makefile Makefile.in

9
WINGs/WINGs/Makefile.am Normal file
View File

@@ -0,0 +1,9 @@
## automake input file for WINGs - Headers subdir
AUTOMAKE_OPTIONS = no-dependencies
# is this a kluge? if so, how should i do it?
includedir = @includedir@/WINGs
include_HEADERS = WINGs.h WUtil.h WINGsP.h proplist-compat.h

File diff suppressed because it is too large Load Diff

View File

@@ -6,9 +6,9 @@
#include <X11/Xutil.h>
#include "WINGs.h"
#include <WINGs/WINGs.h>
#if WINGS_H_VERSION < 20000521
#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,34 +137,39 @@ 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;
struct W_Pixmap *applicationIcon;
RImage *applicationIconImage; /* image (can have alpha channel) */
struct W_Pixmap *applicationIconPixmap; /* pixmap - no alpha channel */
Window applicationIconWindow;
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;
@@ -162,7 +183,7 @@ typedef struct W_Screen {
struct W_View *dragSourceView;
struct W_DraggingInfo dragInfo;
/* colors */
W_Color *white;
W_Color *black;
@@ -170,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;
@@ -188,14 +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;
@@ -203,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;
@@ -234,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;
@@ -242,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 */
@@ -267,6 +292,8 @@ typedef struct W_Screen {
Atom xdndDropAtom;
Atom xdndFinishedAtom;
Atom xdndTypeListAtom;
Atom xdndActionListAtom;
Atom xdndActionDescriptionAtom;
Atom xdndStatusAtom;
Atom xdndActionCopy;
@@ -274,17 +301,23 @@ 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 */
Window lastClickWindow; /* window of the last mousedown */
struct W_View *modalView;
unsigned modal:1;
unsigned modalLoop:1;
unsigned ignoreNextDoubleClick:1;
} W_Screen;
@@ -300,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;
@@ -309,7 +342,7 @@ 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;
@@ -317,22 +350,29 @@ typedef struct W_View {
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 */
WMBag *eventHandlers; /* event handlers for this window */
WMArray *eventHandlers; /* event handlers for this window */
unsigned long attribFlags;
XSetWindowAttributes attribs;
void *hangedData; /* data holder for user program */
WMColor *backColor;
@@ -340,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;
@@ -388,7 +429,7 @@ typedef struct _WINGsConfiguration {
char *systemFont;
char *boldSystemFont;
int defaultFontSize;
Bool useMultiByte;
Bool antialiasedText;
char *floppyPath;
unsigned doubleClickDelay;
unsigned mouseWheelUp;
@@ -407,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
@@ -463,27 +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);
void W_CleanUpEvents(W_View *view);
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);
@@ -519,9 +558,9 @@ void W_HandleSelectionEvent(XEvent *event);
void W_HandleDNDClientMessage(WMView *toplevel, XClientMessageEvent *event);
void W_FlushASAPNotificationQueue();
void W_FlushASAPNotificationQueue(void);
void W_FlushIdleNotificationQueue();
void W_FlushIdleNotificationQueue(void);
struct W_Balloon *W_CreateBalloon(WMScreen *scr);
@@ -529,8 +568,53 @@ void W_BalloonHandleEnterView(WMView *view);
void W_BalloonHandleLeaveView(WMView *view);
Bool W_CheckIdleHandlers(void);
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_ */

View File

@@ -10,14 +10,6 @@
#define NULL ((void*)0)
#endif
/*
* Warning: proplist.h #defines BOOL which will clash with the
* typedef BOOL in Xmd.h
* proplist.h should use Bool (which is a #define in Xlib.h) instead.
*
*/
#include <proplist.h>
#ifndef WMAX
# define WMAX(a,b) ((a)>(b) ? (a) : (b))
@@ -27,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
@@ -53,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 */
@@ -77,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;
@@ -120,12 +114,23 @@ enum {
typedef struct W_Array WMArray;
typedef struct W_Bag WMBag;
typedef struct W_Data WMData;
typedef struct W_TreeNode WMTreeNode;
typedef struct W_HashTable WMHashTable;
typedef struct W_UserDefaults WMUserDefaults;
typedef struct W_Notification WMNotification;
typedef struct W_NotificationQueue WMNotificationQueue;
typedef struct W_Host WMHost;
typedef struct W_Connection WMConnection;
typedef struct W_PropList WMPropList;
/* Some typedefs for the handler stuff */
typedef void *WMHandlerID;
typedef void WMCallback(void *data);
typedef void WMInputProc(int fd, int mask, void *clientData);
@@ -138,7 +143,6 @@ typedef int WMMatchDataProc(void *item, void *cdata);
typedef struct {
int position;
int count;
@@ -162,10 +166,11 @@ typedef struct {
/* NULL does nothing */
void* (*retainKey)(const void *);
/* NULL does nothing */
void (*releaseKey)(const void *);
void (*releaseKey)(const void *);
} WMHashTableCallbacks;
typedef int WMArrayIterator;
typedef void *WMBagIterator;
@@ -181,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);
@@ -195,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 */
@@ -220,7 +226,7 @@ char* wfindfile(char *paths, char *file);
char* wfindfileinlist(char **path_list, char *file);
char* wfindfileinarray(proplist_t array, char *file);
char* wfindfileinarray(WMPropList* array, char *file);
char* wexpandpath(char *path);
@@ -236,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.
@@ -264,6 +271,11 @@ void wtokenfree(char **tokens, int count);
char* wtrimspace(char *s);
WMRange wmkrange(int start, int count);
#ifdef ANSI_C_DOESNT_LIKE_IT_THIS_WAY
#define wmkrange(position, count) (WMRange){(position), (count)}
#endif
char* wusergnusteppath();
@@ -273,12 +285,34 @@ void wusleep(unsigned int microsec);
#if 0
int wsprintesc(char *buffer, int length, char *format, WMSEscapes **escapes,
int count);
int count);
#endif
/*......................................................................*/
/* This function is used _only_ if you create a NON-GUI program.
/* Event handlers: timer, idle, input */
WMHandlerID WMAddTimerHandler(int milliseconds, WMCallback *callback,
void *cdata);
WMHandlerID WMAddPersistentTimerHandler(int milliseconds, WMCallback *callback,
void *cdata);
void WMDeleteTimerWithClientData(void *cdata);
void WMDeleteTimerHandler(WMHandlerID handlerID);
WMHandlerID WMAddIdleHandler(WMCallback *callback, void *cdata);
void WMDeleteIdleHandler(WMHandlerID handlerID);
WMHandlerID WMAddInputHandler(int fd, int condition, WMInputProc *proc,
void *clientData);
void WMDeleteInputHandler(WMHandlerID handlerID);
/* This function is used _only_ if you create a non-GUI program.
* For GUI based programs use WMNextEvent()/WMHandleEvent() instead.
* This function will handle all input/timer/idle events, then return.
*/
@@ -294,20 +328,41 @@ void WMFreeHashTable(WMHashTable *table);
void WMResetHashTable(WMHashTable *table);
const void* WMHashGet(WMHashTable *table, const void *key);
unsigned WMCountHashTable(WMHashTable *table);
void* WMHashGet(WMHashTable *table, const void *key);
/* Returns True if there is a value associated with <key> in the table, in
* which case <retKey> and <retItem> will contain the item's internal key
* address and the item's value respectively.
* If there is no value associated with <key> it will return False and in
* this case <retKey> and <retItem> will be undefined.
* Use this when you need to perform your own custom retain/release mechanism
* which requires access to the keys too.
*/
Bool WMHashGetItemAndKey(WMHashTable *table, const void *key,
void **retItem, void **retKey);
/* put data in table, replacing already existing data and returning
* the old value */
const void* WMHashInsert(WMHashTable *table, const void *key, const void *data);
void* WMHashInsert(WMHashTable *table, const void *key, const void *data);
void WMHashRemove(WMHashTable *table, const void *key);
/* warning: do not manipulate the table while using these functions */
/* warning: do not manipulate the table while using the enumerator functions */
WMHashEnumerator WMEnumerateHashTable(WMHashTable *table);
const void* WMNextHashEnumeratorItem(WMHashEnumerator *enumerator);
void* WMNextHashEnumeratorItem(WMHashEnumerator *enumerator);
unsigned WMCountHashTable(WMHashTable *table);
void* WMNextHashEnumeratorKey(WMHashEnumerator *enumerator);
/* Returns True if there is a next element, in which case key and item
* will contain the next element's key and value respectively.
* If there is no next element available it will return False and in this
* case key and item will be undefined.
*/
Bool WMNextHashEnumeratorItemAndKey(WMHashEnumerator *enumerator,
void **item, void **key);
@@ -318,11 +373,11 @@ 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;
/* keys are strings, bug they are not copied */
/* keys are strings, but they are not copied */
/*......................................................................*/
@@ -337,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
*/
@@ -379,7 +434,9 @@ void* WMReplaceInArray(WMArray *array, int index, void *item);
*/
int WMDeleteFromArray(WMArray *array, int index);
int WMRemoveFromArray(WMArray *array, void *item);
#define WMRemoveFromArray(array, item) WMRemoveFromArrayMatching(array, NULL, item)
int WMRemoveFromArrayMatching(WMArray *array, WMMatchDataProc *match, void *cdata);
void* WMGetFromArray(WMArray *array, int index);
@@ -406,17 +463,35 @@ void WMMapArray(WMArray *array, void (*function)(void*, void*), void *data);
WMArray* WMGetSubarrayWithRange(WMArray* array, WMRange aRange);
void* WMArrayFirst(WMArray *array, WMArrayIterator *iter);
void* WMArrayLast(WMArray *array, WMArrayIterator *iter);
/* The following 2 functions assume that the array doesn't change between calls */
void* WMArrayNext(WMArray *array, WMArrayIterator *iter);
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)))
#define WM_ETARETI_ARRAY(array, var, 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
@@ -439,7 +514,6 @@ void WMPutInBag(WMBag *bag, void *item);
/* insert will increment the index of elements after it by 1 */
void WMInsertInBag(WMBag *bag, int index, void *item);
/* this is slow */
/* erase will remove the element from the bag,
* but will keep the index of the other elements unchanged */
int WMEraseFromBag(WMBag *bag, int index);
@@ -479,6 +553,7 @@ void* WMBagFirst(WMBag *bag, WMBagIterator *ptr);
void* WMBagLast(WMBag *bag, WMBagIterator *ptr);
/* The following 4 functions assume that the bag doesn't change between calls */
void* WMBagNext(WMBag *bag, WMBagIterator *ptr);
void* WMBagPrevious(WMBag *bag, WMBagIterator *ptr);
@@ -488,13 +563,14 @@ void* WMBagIteratorAtIndex(WMBag *bag, int index, WMBagIterator *ptr);
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)))
@@ -568,6 +644,49 @@ unsigned WMGetDataFormat(WMData *aData);
/* Storing data */
/*--------------------------------------------------------------------------*/
/* Generic Tree and TreeNode */
WMTreeNode* WMCreateTreeNode(void *data);
WMTreeNode* WMCreateTreeNodeWithDestructor(void *data, WMFreeDataProc *destructor);
WMTreeNode* WMInsertItemInTree(WMTreeNode *parent, int index, void *item);
#define WMAddItemToTree(parent, item) WMInsertItemInTree(parent, -1, item)
WMTreeNode* WMInsertNodeInTree(WMTreeNode *parent, int index, WMTreeNode *aNode);
#define WMAddNodeToTree(parent, aNode) WMInsertNodeInTree(parent, -1, aNode)
void WMDestroyTreeNode(WMTreeNode *aNode);
void WMDeleteLeafForTreeNode(WMTreeNode *aNode, int index);
void WMRemoveLeafForTreeNode(WMTreeNode *aNode, void *leaf);
void* WMReplaceDataForTreeNode(WMTreeNode *aNode, void *newData);
void* WMGetDataForTreeNode(WMTreeNode *aNode);
int WMGetTreeNodeDepth(WMTreeNode *aNode);
WMTreeNode* WMGetParentForTreeNode(WMTreeNode *aNode);
/* Sort only the leaves of the passed node */
void WMSortLeavesForTreeNode(WMTreeNode *aNode, WMCompareDataProc *comparer);
/* Sort all tree recursively starting from the passed node */
void WMSortTree(WMTreeNode *aNode, WMCompareDataProc *comparer);
/* Returns the first node which matches node's data with cdata by 'match' */
WMTreeNode* WMFindInTree(WMTreeNode *aTree, WMMatchDataProc *match, void *cdata);
/* Returns first tree node that has data == cdata */
#define WMGetFirstInTree(aTree, cdata) WMFindInTree(aTree, NULL, cdata)
/*--------------------------------------------------------------------------*/
@@ -584,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);
@@ -600,20 +719,122 @@ 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);
/*......................................................................*/
/* Property Lists handling */
void WMPLSetCaseSensitive(Bool caseSensitive);
WMPropList* WMCreatePLString(char *str);
WMPropList* WMCreatePLData(WMData *data);
WMPropList* WMCreatePLDataWithBytes(unsigned char *bytes, unsigned int length);
WMPropList* WMCreatePLDataWithBytesNoCopy(unsigned char *bytes,
unsigned int length,
WMFreeDataProc *destructor);
WMPropList* WMCreatePLArray(WMPropList *elem, ...);
WMPropList* WMCreatePLDictionary(WMPropList *key, WMPropList *value, ...);
WMPropList* WMRetainPropList(WMPropList *plist);
void WMReleasePropList(WMPropList *plist);
/* Objects inserted in arrays and dictionaries will be retained,
* so you can safely release them after insertion.
* For dictionaries both the key and value are retained.
* Objects removed from arrays or dictionaries are released */
void WMInsertInPLArray(WMPropList *plist, int index, WMPropList *item);
void WMAddToPLArray(WMPropList *plist, WMPropList *item);
void WMDeleteFromPLArray(WMPropList *plist, int index);
void WMRemoveFromPLArray(WMPropList *plist, WMPropList *item);
void WMPutInPLDictionary(WMPropList *plist, WMPropList *key, WMPropList *value);
void WMRemoveFromPLDictionary(WMPropList *plist, WMPropList *key);
/* It will insert all key/value pairs from source into dest, overwriting
* the values with the same keys from dest, keeping all values with keys
* only present in dest unchanged */
WMPropList* WMMergePLDictionaries(WMPropList *dest, WMPropList *source,
Bool recursive);
/* It will remove all key/value pairs from dest for which there is an
* identical key/value present in source. Entires only present in dest, or
* which have different values in dest than in source will be preserved. */
WMPropList* WMSubtractPLDictionaries(WMPropList *dest, WMPropList *source,
Bool recursive);
int WMGetPropListItemCount(WMPropList *plist);
Bool WMIsPLString(WMPropList *plist);
Bool WMIsPLData(WMPropList *plist);
Bool WMIsPLArray(WMPropList *plist);
Bool WMIsPLDictionary(WMPropList *plist);
Bool WMIsPropListEqualTo(WMPropList *plist, WMPropList *other);
/* Returns a reference. Do not free it! */
char* WMGetFromPLString(WMPropList *plist);
/* Returns a reference. Do not free it! */
WMData* WMGetFromPLData(WMPropList *plist);
/* Returns a reference. Do not free it! */
const unsigned char* WMGetPLDataBytes(WMPropList *plist);
int WMGetPLDataLength(WMPropList *plist);
/* Returns a reference. */
WMPropList* WMGetFromPLArray(WMPropList *plist, int index);
/* Returns a reference. */
WMPropList* WMGetFromPLDictionary(WMPropList *plist, WMPropList *key);
/* Returns a PropList array with all the dictionary keys. Release it when
* you're done. Keys in array are retained from the original dictionary
* not copied and need NOT to be released individually. */
WMPropList* WMGetPLDictionaryKeys(WMPropList *plist);
/* Creates only the first level deep object. All the elements inside are
* retained from the original */
WMPropList* WMShallowCopyPropList(WMPropList *plist);
/* Makes a completely separate replica of the original proplist */
WMPropList* WMDeepCopyPropList(WMPropList *plist);
WMPropList* WMCreatePropListFromDescription(char *desc);
/* Free the returned string when you no longer need it */
char* WMGetPropListDescription(WMPropList *plist, Bool indented);
WMPropList* WMReadPropListFromFile(char *file);
Bool WMWritePropListToFile(WMPropList *plist, char *path, Bool atomically);
/*......................................................................*/
WMUserDefaults* WMGetStandardUserDefaults(void);
@@ -626,15 +847,15 @@ void WMSaveUserDefaults(WMUserDefaults *database);
void WMEnableUDPeriodicSynchronization(WMUserDefaults *database, Bool enable);
/* Returns a PLArray with all keys in the user defaults database.
* Free the returned array with PLRelease() when no longer needed,
* but do not free the elements of the array! They're just references. */
proplist_t WMGetUDAllKeys(WMUserDefaults *database);
/* Returns a WMPropList array with all the keys in the user defaults database.
* Free the array with WMReleasePropList() when no longer needed.
* Keys in array are just retained references to the original keys */
WMPropList* WMGetUDKeys(WMUserDefaults *database);
proplist_t WMGetUDObjectForKey(WMUserDefaults *database, char *defaultName);
WMPropList* WMGetUDObjectForKey(WMUserDefaults *database, char *defaultName);
void WMSetUDObjectForKey(WMUserDefaults *database, proplist_t object,
char *defaultName);
void WMSetUDObjectForKey(WMUserDefaults *database, WMPropList *object,
char *defaultName);
void WMRemoveUDObjectForKey(WMUserDefaults *database, char *defaultName);
@@ -646,21 +867,21 @@ 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);
proplist_t WMGetUDSearchList(WMUserDefaults *database);
WMPropList* WMGetUDSearchList(WMUserDefaults *database);
void WMSetUDSearchList(WMUserDefaults *database, proplist_t list);
void WMSetUDSearchList(WMUserDefaults *database, WMPropList *list);
extern char *WMUserDefaultsDidChangeNotification;
@@ -760,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);

View File

@@ -0,0 +1,138 @@
/*
* This header file is provided for old libPropList compatibility.
* DO _NOT_ USE this except for letting your old libPropList-based code to
* work with the new property list code from WINGs, with minimal changes.
*
* All code written with old libPropList functions should work, given
* that the following changes are made:
*
* 1. Replace all
* #include <proplist.h>
* with
* #include <WINGs/proplist-compat.h>
* in your code.
*
* 2. Change all calls to PLSave() to have the extra filename parameter like:
* PLSave(proplist_t proplist, char* filename, Bool atomically)
*
* 3. The PLSetStringCmpHook() function is no longer available. There is a
* similar but simpler function provided which is enough for practical
* purposes:
* PLSetCaseSensitive(Bool caseSensitive)
*
* 4. The following functions do no longer exist. They were removed because
* they were based on concepts borrowed from UserDefaults which conflict
* with the retain/release mechanism:
* PLSynchronize(), PLDeepSynchronize(), PLShallowSynchronize()
* PLSetFilename(), PLGetFilename()
* PLGetContainer()
* You should change your code to not use them anymore.
*
* 5. The following functions are no longer available. They were removed
* because they also used borrowed concepts which have no place in a
* property list as defined in the OpenStep specifications. Also these
* functions were hardly ever used in programs to our knowledge.
* PLGetDomainNames(), PLGetDomain(), PLSetDomain(), PLDeleteDomain()
* PLRegister(), PLUnregister()
* You should also change your code to not use them anymore (in case you
* ever used them anyway ;-) ).
*
* 6. Link your program with libWINGs or libWUtil instead of libPropList.
* (libWINGs should be used for GUI apps, while libWUtil for non-GUI apps)
*
*
* Our recommandation is to rewrite your code to use the new functions and
* link against libWINGs/libWUtil. We do not recommend you to keep using old
* libPropList function names. This file is provided just to allow existing
* libropList based applications to run with minimal changes with the new
* proplist code from WINGs before their authors get the time to rewrite
* them. New proplist code from WINGs provide a better integration with the
* other data types from WINGs, not to mention that the proplist code in WINGs
* is actively maintained while the old libPropList is dead.
*
*/
#ifndef _PROPLIST_COMPAT_H_
#define _PROPLIST_COMPAT_H_
#include <WINGs/WUtil.h>
typedef WMPropList* proplist_t;
#ifndef YES
#define YES True
#endif
#ifndef NO
#define NO False
#endif
#define PLSetCaseSensitive(c) WMPLSetCaseSensitive(c)
#define PLMakeString(bytes) WMCreatePLString(bytes)
#define PLMakeData(bytes, length) WMCreatePLDataWithBytes(bytes, length)
#define PLMakeArrayFromElements WMCreatePLArray
#define PLMakeDictionaryFromEntries WMCreatePLDictionary
#define PLRetain(pl) WMRetainPropList(pl)
#define PLRelease(pl) WMReleasePropList(pl)
#define PLInsertArrayElement(array, pl, pos) WMInsertInPLArray(array, pos, pl)
#define PLAppendArrayElement(array, pl) WMAddToPLArray(array, pl)
#define PLRemoveArrayElement(array, pos) WMDeleteFromPLArray(array, pos)
#define PLInsertDictionaryEntry(dict, key, value) WMPutInPLDictionary(dict, key, value)
#define PLRemoveDictionaryEntry(dict, key) WMRemoveFromPLDictionary(dict, key)
#define PLMergeDictionaries(dest, source) WMMergePLDictionaries(dest, source, False)
#define PLGetNumberOfElements(pl) WMGetPropListItemCount(pl)
#define PLIsString(pl) WMIsPLString(pl)
#define PLIsData(pl) WMIsPLData(pl)
#define PLIsArray(pl) WMIsPLArray(pl)
#define PLIsDictionary(pl) WMIsPLDictionary(pl)
#define PLIsSimple(pl) (WMIsPLString(pl) || WMIsPLData(pl))
#define PLIsCompound(pl) (WMIsPLArray(pl) || WMIsPLDictionary(pl))
#define PLIsEqual(pl1, pl2) WMIsPropListEqualTo(pl1, pl2)
#define PLGetString(pl) WMGetFromPLString(pl)
#define PLGetDataBytes(pl) WMGetPLDataBytes(pl)
#define PLGetDataLength(pl) WMGetPLDataLength(pl)
#define PLGetArrayElement(pl, index) WMGetFromPLArray(pl, index)
#define PLGetDictionaryEntry(pl, key) WMGetFromPLDictionary(pl, key)
#define PLGetAllDictionaryKeys(pl) WMGetPLDictionaryKeys(pl)
#define PLShallowCopy(pl) WMShallowCopyPropList(pl)
#define PLDeepCopy(pl) WMDeepCopyPropList(pl)
#define PLGetProplistWithDescription(desc) WMCreatePropListFromDescription(desc)
#define PLGetDescriptionIndent(pl, level) WMGetPropListDescription(pl, True)
#define PLGetDescription(pl) WMGetPropListDescription(pl, False)
#define PLGetStringDescription(pl) WMGetPropListDescription(pl, False)
#define PLGetDataDescription(pl) WMGetPropListDescription(pl, False)
#define PLGetProplistWithPath(file) WMReadPropListFromFile(file)
#define PLSave(pl, file, atm) WMWritePropListToFile(pl, file, atm)
/* Unsupported functions. Do not ask for them. They're evil :P */
#define PLSetStringCmpHook(fn) error_PLSetStringCmpHook_is_not_supported
#define PLDeepSynchronize(pl) error_PLDeepSynchronize_is_not_supported
#define PLSynchronize(pl) error_PLSynchronize_is_not_supported
#define PLShallowSynchronize(pl) error_PLShallowSynchronize_is_not_supported
#define PLSetFilename(pl, filename) error_PLSetFilename_is_not_supported
#define PLGetFilename(pl, filename) error_PLGetFilename_is_not_supported
#define PLGetContainer(pl) error_PLGetContainer_is_not_supported
#define PLGetDomainNames error_PLGetDomainNames_is_not_supported
#define PLGetDomain(name) error_PLGetDomain_is_not_supported
#define PLSetDomain(name, value, kickme) error_PLSetDomain_is_not_supported
#define PLDeleteDomain(name, kickme) error_PLDeleteDomain_is_not_supported
#define PLRegister(name, callback) error_PLRegister_is_not_supported
#define PLUnregister(name) error_PLUnregister_is_not_supported
#endif

View File

@@ -193,14 +193,23 @@ WMDeleteFromArray(WMArray *array, int index)
int
WMRemoveFromArray(WMArray *array, void *item)
WMRemoveFromArrayMatching(WMArray *array, WMMatchDataProc *match, void *cdata)
{
int i;
for (i = 0; i < array->itemCount; i++) {
if (array->items[i] == item) {
WMDeleteFromArray(array, i);
return 1;
if (match != NULL) {
for (i = 0; i < array->itemCount; i++) {
if ((*match)(array->items[i], cdata)) {
WMDeleteFromArray(array, i);
return 1;
}
}
} else {
for (i = 0; i < array->itemCount; i++) {
if (array->items[i] == cdata) {
WMDeleteFromArray(array, i);
return 1;
}
}
}
@@ -265,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);
}
}
@@ -304,3 +315,54 @@ WMGetSubarrayWithRange(WMArray* array, WMRange aRange)
}
void*
WMArrayFirst(WMArray *array, WMArrayIterator *iter)
{
if (array->itemCount == 0) {
*iter = WANotFound;
return NULL;
} else {
*iter = 0;
return array->items[0];
}
}
void*
WMArrayLast(WMArray *array, WMArrayIterator *iter)
{
if (array->itemCount == 0) {
*iter = WANotFound;
return NULL;
} else {
*iter = array->itemCount-1;
return array->items[*iter];
}
}
void*
WMArrayNext(WMArray *array, WMArrayIterator *iter)
{
if (*iter >= 0 && *iter < array->itemCount-1) {
return array->items[++(*iter)];
} else {
*iter = WANotFound;
return NULL;
}
}
void*
WMArrayPrevious(WMArray *array, WMArrayIterator *iter)
{
if (*iter > 0 && *iter < array->itemCount) {
return array->items[--(*iter)];
} else {
*iter = WANotFound;
return NULL;
}
}

View File

@@ -1,19 +1,18 @@
#include "WINGsP.h"
#include "wconfig.h"
#include <X11/Xlocale.h>
#include <proplist.h>
_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"
@@ -54,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) {
@@ -112,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;
}
}

View File

@@ -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
@@ -23,13 +23,12 @@
* TODO:
* - decide if we want to support connections with external sockets, else
* clean up the structure of the unneeded members.
* - decide what to do with all wsyserror() and wwarning() calls that are
* still there.
* - decide what to do with all wwarning() calls that are still there.
*
*/
#include "../src/config.h"
#include "wconfig.h"
#include <unistd.h>
#include <fcntl.h>
@@ -66,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
@@ -122,6 +123,7 @@ typedef struct W_Connection {
char *protocol;
Bool closeOnRelease;
Bool shutdownOnClose;
Bool wasNonBlocking;
Bool isNonBlocking;
@@ -130,7 +132,7 @@ typedef struct W_Connection {
static void
clearOutputQueue(WMConnection *cPtr) /*FOLD00*/
clearOutputQueue(WMConnection *cPtr)
{
cPtr->bufPos = 0;
WMEmptyArray(cPtr->outputQueue);
@@ -138,7 +140,7 @@ clearOutputQueue(WMConnection *cPtr) /*FOLD00*/
static void
openTimeout(void *cdata) /*FOLD00*/
openTimeout(void *cdata)
{
WMConnection *cPtr = (WMConnection*) cdata;
@@ -161,7 +163,7 @@ openTimeout(void *cdata) /*FOLD00*/
static void
sendTimeout(void *cdata) /*FOLD00*/
sendTimeout(void *cdata)
{
WMConnection *cPtr = (WMConnection*) cdata;
@@ -174,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 {
@@ -185,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;
@@ -193,10 +197,11 @@ 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);
int len = sizeof(result);
WCErrorCode = 0;
if (getsockopt(cPtr->sock, SOL_SOCKET, SO_ERROR,
@@ -229,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);
}
}
}
@@ -250,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;
@@ -284,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);
@@ -296,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;
@@ -322,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;
@@ -353,8 +361,14 @@ getSocketAddress(char* name, char* service, char* protocol) /*FOLD00*/
}
static void
dummyHandler(int signum)
{
}
static WMConnection*
createConnectionWithSocket(int sock, Bool closeOnRelease) /*FOLD00*/
createConnectionWithSocket(int sock, Bool closeOnRelease)
{
WMConnection *cPtr;
struct sigaction sig_action;
@@ -371,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;
@@ -378,7 +393,11 @@ createConnectionWithSocket(int sock, Bool closeOnRelease) /*FOLD00*/
/* ignore dead pipe */
if (!SigInitialized) {
sig_action.sa_handler = SIG_IGN;
/* Because POSIX mandates that only signal with handlers are reset
* accross an exec*(), we do not want to propagate ignoring SIGPIPEs
* to children. Hence the dummy handler. Philippe Troin <phil@fifi.org>
*/
sig_action.sa_handler = &dummyHandler;
sig_action.sa_flags = SA_RESTART;
sigaction(SIGPIPE, &sig_action, NULL);
SigInitialized = True;
@@ -390,19 +409,20 @@ 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;
int size, n;
int size;
int n;
cPtr = createConnectionWithSocket(sock, closeOnRelease);
cPtr->wasNonBlocking = WMIsConnectionNonBlocking(cPtr);
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);
@@ -438,16 +458,17 @@ 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;
int sock, size, on;
int sock, on;
int size;
WCErrorCode = 0;
if ((socketaddr = getSocketAddress(host, service, protocol)) == NULL) {
wwarning("Bad address-service-protocol combination");
wwarning(_("Bad address-service-protocol combination"));
return NULL;
}
@@ -498,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;
@@ -512,7 +533,7 @@ WMCreateConnectionToAddress(char *host, char *service, char *protocol) /*FOLD00*
host = "localhost";
if ((socketaddr = getSocketAddress(host, service, protocol)) == NULL) {
wwarning("Bad address-service-protocol combination");
wwarning(_("Bad address-service-protocol combination"));
return NULL;
}
@@ -540,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;
@@ -555,7 +576,7 @@ WMCreateConnectionToAddressAndNotify(char *host, char *service, char *protocol)
host = "localhost";
if ((socketaddr = getSocketAddress(host, service, protocol)) == NULL) {
wwarning("Bad address-service-protocol combination");
wwarning(_("Bad address-service-protocol combination"));
return NULL;
}
@@ -591,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);
@@ -613,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);
}
@@ -634,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;
}
@@ -650,7 +675,7 @@ WMCloseConnection(WMConnection *cPtr) /*FOLD00*/
WMConnection*
WMAcceptConnection(WMConnection *listener) /*FOLD00*/
WMAcceptConnection(WMConnection *listener)
{
struct sockaddr_in clientname;
int size;
@@ -677,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);
@@ -732,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;
@@ -756,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);
@@ -782,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;
@@ -793,7 +824,6 @@ WMSendConnectionData(WMConnection *cPtr, WMData *data) /*FOLD00*/
}
}
pos += bytes;
totalTransfer += bytes;
}
WMDeleteFromArray(cPtr->outputQueue, 0);
cPtr->bufPos = 0;
@@ -801,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;
}
@@ -824,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;
@@ -869,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 */
@@ -887,7 +922,7 @@ WMSetConnectionDelegate(WMConnection *cPtr, ConnectionDelegate *delegate) /*FOLD
#if 0
Bool
WMIsConnectionNonBlocking(WMConnection *cPtr) /*FOLD00*/
WMIsConnectionNonBlocking(WMConnection *cPtr)
{
#if 1
int state;
@@ -910,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;
@@ -931,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;
}
@@ -939,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;
}
@@ -975,7 +1019,7 @@ WMGetConnectionUnsentData(WMConnection *cPtr)
void
WMSetConnectionDefaultTimeout(unsigned int timeout) /*FOLD00*/
WMSetConnectionDefaultTimeout(unsigned int timeout)
{
if (timeout == 0) {
DefaultTimeout = DEF_TIMEOUT;
@@ -986,7 +1030,7 @@ WMSetConnectionDefaultTimeout(unsigned int timeout) /*FOLD00*/
void
WMSetConnectionOpenTimeout(unsigned int timeout) /*FOLD00*/
WMSetConnectionOpenTimeout(unsigned int timeout)
{
if (timeout == 0) {
OpenTimeout = DefaultTimeout;
@@ -997,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;

View File

@@ -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
View 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

File diff suppressed because it is too large Load Diff

View File

@@ -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
@@ -19,7 +19,7 @@
*/
#include "../src/config.h"
#include "wconfig.h"
#include <stdio.h>
#include <stdlib.h>
@@ -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
*********************************************************************/
@@ -79,7 +79,7 @@ wmessage(const char *msg, ...)
vsnprintf(buf, MAXLINE-3, msg, args);
strcat(buf,"\n");
fflush(stdout);
fputs(_WINGS_progname, stderr);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(": ",stderr);
fputs(buf, stderr);
fflush(stdout);
@@ -90,39 +90,39 @@ 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);
fputs(_WINGS_progname, stderr);
fputs(" warning: ",stderr);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" warning: "),stderr);
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;
@@ -133,8 +133,8 @@ wfatal(const char *msg, ...)
vsnprintf(buf, MAXLINE-3, msg, args);
strcat(buf,"\n");
fflush(stdout);
fputs(_WINGS_progname, stderr);
fputs(" fatal error: ",stderr);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" fatal error: "),stderr);
fputs(buf, stderr);
fflush(stdout);
fflush(stderr);
@@ -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;
@@ -159,8 +159,8 @@ wsyserror(const char *msg, ...)
va_start(args, msg);
vsnprintf(buf, MAXLINE-3, msg, args);
fflush(stdout);
fputs(_WINGS_progname, stderr);
fputs(" error: ", stderr);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" error: "), stderr);
fputs(buf, stderr);
fputs(": ", stderr);
fputs(wstrerror(error), stderr);
@@ -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;
@@ -188,8 +188,8 @@ wsyserrorwithcode(int error, const char *msg, ...)
va_start(args, msg);
vsnprintf(buf, MAXLINE-3, msg, args);
fflush(stdout);
fputs(_WINGS_progname, stderr);
fputs(" error: ", stderr);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" error: "), stderr);
fputs(buf, stderr);
fputs(": ", stderr);
fputs(wstrerror(error), stderr);

View File

@@ -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
@@ -19,7 +19,7 @@
*/
#include "../src/config.h"
#include "wconfig.h"
#include "WUtil.h"
@@ -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;
}
@@ -284,7 +307,7 @@ wfindfileinlist(char **path_list, char *file)
char*
wfindfileinarray(proplist_t array, char *file)
wfindfileinarray(WMPropList *array, char *file)
{
int i;
char *path;
@@ -292,51 +315,51 @@ wfindfileinarray(proplist_t 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<PLGetNumberOfElements(array); i++) {
proplist_t prop;
char *p;
for (i=0; i<WMGetPropListItemCount(array); i++) {
WMPropList *prop;
char *p;
prop = PLGetArrayElement(array, i);
if (!prop)
continue;
p = PLGetString(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;
}

614
WINGs/handlers.c Normal file
View File

@@ -0,0 +1,614 @@
/*
* WINGs internal handlers: timer, idle and input handlers
*/
#include "WINGsP.h"
#include "../src/config.h"
#include <sys/types.h>
#include <unistd.h>
#include <X11/Xos.h>
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
#endif
#include <time.h>
#ifndef X_GETTIMEOFDAY
#define X_GETTIMEOFDAY(t) gettimeofday(t, (struct timezone*)0)
#endif
typedef struct TimerHandler {
WMCallback *callback; /* procedure to call */
struct timeval when; /* when to call the callback */
void *clientData;
struct TimerHandler *next;
int nextDelay; /* 0 if it's one-shot */
} TimerHandler;
typedef struct IdleHandler {
WMCallback *callback;
void *clientData;
} IdleHandler;
typedef struct InputHandler {
WMInputProc *callback;
void *clientData;
int fd;
int mask;
} InputHandler;
/* queue of timer event handlers */
static TimerHandler *timerHandler=NULL;
static WMArray *idleHandler=NULL;
static WMArray *inputHandler=NULL;
#define timerPending() (timerHandler)
static void
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)))
#define IS_ZERO(tv) (tv.tv_sec == 0 && tv.tv_usec == 0)
#define SET_ZERO(tv) tv.tv_sec = 0, tv.tv_usec = 0
static void
addmillisecs(struct timeval *tv, int milliseconds)
{
tv->tv_usec += milliseconds*1000;
tv->tv_sec += tv->tv_usec/1000000;
tv->tv_usec = tv->tv_usec%1000000;
}
static void
enqueueTimerHandler(TimerHandler *handler)
{
TimerHandler *tmp;
/* 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;
} else {
tmp = timerHandler;
while (tmp->next && IS_AFTER(handler->when, tmp->next->when)) {
tmp = tmp->next;
}
handler->next = tmp->next;
tmp->next = handler;
}
}
static void
delayUntilNextTimerEvent(struct timeval *delay)
{
struct timeval now;
TimerHandler *handler;
handler = timerHandler;
while (handler && IS_ZERO(handler->when)) handler = handler->next;
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;
}
rightNow(&now);
if (IS_AFTER(now, handler->when)) {
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--;
}
}
}
WMHandlerID
WMAddTimerHandler(int milliseconds, WMCallback *callback, void *cdata)
{
TimerHandler *handler;
handler = malloc(sizeof(TimerHandler));
if (!handler)
return NULL;
rightNow(&handler->when);
addmillisecs(&handler->when, milliseconds);
handler->callback = callback;
handler->clientData = cdata;
handler->nextDelay = 0;
enqueueTimerHandler(handler);
return handler;
}
WMHandlerID
WMAddPersistentTimerHandler(int milliseconds, WMCallback *callback, void *cdata)
{
TimerHandler *handler = WMAddTimerHandler(milliseconds, callback, cdata);
if (handler != NULL)
handler->nextDelay = milliseconds;
return handler;
}
void
WMDeleteTimerWithClientData(void *cdata)
{
TimerHandler *handler, *tmp;
if (!cdata || !timerHandler)
return;
tmp = timerHandler;
if (tmp->clientData==cdata) {
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;
tmp->next = handler->next;
wfree(handler);
break;
}
tmp = tmp->next;
}
}
}
void
WMDeleteTimerHandler(WMHandlerID handlerID)
{
TimerHandler *tmp, *handler=(TimerHandler*)handlerID;
if (!handler || !timerHandler)
return;
tmp = timerHandler;
handler->nextDelay = 0;
if (IS_ZERO(handler->when))
return;
if (tmp==handler) {
timerHandler = handler->next;
wfree(handler);
} else {
while (tmp->next) {
if (tmp->next==handler) {
tmp->next=handler->next;
wfree(handler);
break;
}
tmp = tmp->next;
}
}
}
WMHandlerID
WMAddIdleHandler(WMCallback *callback, void *cdata)
{
IdleHandler *handler;
handler = malloc(sizeof(IdleHandler));
if (!handler)
return NULL;
handler->callback = callback;
handler->clientData = cdata;
/* add handler at end of queue */
if (!idleHandler) {
idleHandler = WMCreateArrayWithDestructor(16, wfree);
}
WMAddToArray(idleHandler, handler);
return handler;
}
void
WMDeleteIdleHandler(WMHandlerID handlerID)
{
IdleHandler *handler = (IdleHandler*)handlerID;
if (!handler || !idleHandler)
return;
WMRemoveFromArray(idleHandler, handler);
}
WMHandlerID
WMAddInputHandler(int fd, int condition, WMInputProc *proc, void *clientData)
{
InputHandler *handler;
handler = wmalloc(sizeof(InputHandler));
handler->fd = fd;
handler->mask = condition;
handler->callback = proc;
handler->clientData = clientData;
if (!inputHandler)
inputHandler = WMCreateArrayWithDestructor(16, wfree);
WMAddToArray(inputHandler, handler);
return handler;
}
void
WMDeleteInputHandler(WMHandlerID handlerID)
{
InputHandler *handler = (InputHandler*)handlerID;
if (!handler || !inputHandler)
return;
WMRemoveFromArray(inputHandler, handler);
}
Bool
W_CheckIdleHandlers(void)
{
IdleHandler *handler;
WMArray *handlerCopy;
WMArrayIterator iter;
if (!idleHandler || WMGetArrayItemCount(idleHandler)==0) {
W_FlushIdleNotificationQueue();
/* make sure an observer in queue didn't added an idle handler */
return (idleHandler!=NULL && WMGetArrayItemCount(idleHandler)>0);
}
handlerCopy = WMDuplicateArray(idleHandler);
WM_ITERATE_ARRAY(handlerCopy, handler, iter) {
/* check if the handler still exist or was removed by a callback */
if (WMGetFirstInArray(idleHandler, handler) == WANotFound)
continue;
(*handler->callback)(handler->clientData);
WMDeleteIdleHandler(handler);
}
WMFreeArray(handlerCopy);
W_FlushIdleNotificationQueue();
/* this is not necesarrily False, because one handler can re-add itself */
return (WMGetArrayItemCount(idleHandler)>0);
}
void
W_CheckTimerHandlers(void)
{
TimerHandler *handler;
struct timeval now;
if (!timerHandler) {
W_FlushASAPNotificationQueue();
return;
}
rightNow(&now);
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;
}
while (timerHandler && IS_ZERO(timerHandler->when)) {
handler = timerHandler;
timerHandler = timerHandler->next;
if (handler->nextDelay > 0) {
handler->when = now;
addmillisecs(&handler->when, handler->nextDelay);
enqueueTimerHandler(handler);
} else {
wfree(handler);
}
}
W_FlushASAPNotificationQueue();
}
/*
* This functions will handle input events on all registered file descriptors.
* Input:
* - waitForInput - True if we want the function to wait until an event
* appears on a file descriptor we watch, False if we
* want the function to immediately return if there is
* no data available on the file descriptors we watch.
* - inputfd - Extra input file descriptor to watch for input.
* This is only used when called from wevent.c to watch
* on ConnectionNumber(dpy) to avoid blocking of X events
* if we wait for input from other file handlers.
* Output:
* if waitForInput is False, the function will return False if there are no
* input handlers registered, or if there is no data
* available on the registered ones, and will return True
* if there is at least one input handler that has data
* available.
* if waitForInput is True, the function will return False if there are no
* input handlers registered, else it will block until an
* event appears on one of the file descriptors it watches
* and then it will return True.
*
* If the retured value is True, the input handlers for the corresponding file
* descriptors are also called.
*
* Parametersshould be passed like this:
* - from wevent.c:
* waitForInput - apropriate value passed by the function who called us
* inputfd = ConnectionNumber(dpy)
* - from wutil.c:
* waitForInput - apropriate value passed by the function who called us
* inputfd = -1
*
*/
Bool
W_HandleInputEvents(Bool waitForInput, int inputfd)
{
#if defined(HAVE_POLL) && defined(HAVE_POLL_H) && !defined(HAVE_SELECT)
struct poll fd *fds;
InputHandler *handler;
int count, timeout, nfds, i, extrafd;
extrafd = (inputfd < 0) ? 0 : 1;
if (inputHandler)
nfds = WMGetArrayItemCount(inputHandler);
else
nfds = 0;
if (!extrafd && nfds==0) {
W_FlushASAPNotificationQueue();
return False;
}
fds = wmalloc((nfds+extrafd) * sizeof(struct pollfd));
if (extrafd) {
/* put this to the end of array to avoid using ranges from 1 to nfds+1 */
fds[nfds].fd = inputfd;
fds[nfds].events = POLLIN;
}
/* use WM_ITERATE_ARRAY() here */
for (i = 0; i<nfds; i++) {
handler = WMGetFromArray(inputHandler, i);
fds[i].fd = handler->fd;
fds[i].events = 0;
if (handler->mask & WIReadMask)
fds[i].events |= POLLIN;
if (handler->mask & WIWriteMask)
fds[i].events |= POLLOUT;
#if 0 /* FIXME */
if (handler->mask & WIExceptMask)
FD_SET(handler->fd, &eset);
#endif
}
/*
* Setup the timeout to the estimated time until the
* next timer expires.
*/
if (!waitForInput) {
timeout = 0;
} else if (timerPending()) {
struct timeval tv;
delayUntilNextTimerEvent(&tv);
timeout = tv.tv_sec * 1000 + tv.tv_usec / 1000;
} else {
timeout = -1;
}
count = poll(fds, nfds+extrafd, timeout);
if (count>0 && nfds>0) {
WMArray *handlerCopy = WMDuplicateArray(inputHandler);
int mask;
/* use WM_ITERATE_ARRAY() here */
for (i=0; i<nfds; i++) {
handler = WMGetFromArray(handlerCopy, i);
/* check if the handler still exist or was removed by a callback */
if (WMGetFirstInArray(inputHandler, handler) == WANotFound)
continue;
mask = 0;
if ((handler->mask & WIReadMask) &&
(fds[i].revents & (POLLIN|POLLRDNORM|POLLRDBAND|POLLPRI)))
mask |= WIReadMask;
if ((handler->mask & WIWriteMask) &&
(fds[i].revents & (POLLOUT | POLLWRBAND)))
mask |= WIWriteMask;
if ((handler->mask & WIExceptMask) &&
(fds[i].revents & (POLLHUP | POLLNVAL | POLLERR)))
mask |= WIExceptMask;
if (mask!=0 && handler->callback) {
(*handler->callback)(handler->fd, mask,
handler->clientData);
}
}
WMFreeArray(handlerCopy);
}
wfree(fds);
W_FlushASAPNotificationQueue();
return (count > 0);
#else
#ifdef HAVE_SELECT
struct timeval timeout;
struct timeval *timeoutPtr;
fd_set rset, wset, eset;
int maxfd, nfds, i;
int count;
InputHandler *handler;
if (inputHandler)
nfds = WMGetArrayItemCount(inputHandler);
else
nfds = 0;
if (inputfd<0 && nfds==0) {
W_FlushASAPNotificationQueue();
return False;
}
FD_ZERO(&rset);
FD_ZERO(&wset);
FD_ZERO(&eset);
if (inputfd < 0) {
maxfd = 0;
} else {
FD_SET(inputfd, &rset);
maxfd = inputfd;
}
/* use WM_ITERATE_ARRAY() here */
for (i=0; i<nfds; i++) {
handler = WMGetFromArray(inputHandler, i);
if (handler->mask & WIReadMask)
FD_SET(handler->fd, &rset);
if (handler->mask & WIWriteMask)
FD_SET(handler->fd, &wset);
if (handler->mask & WIExceptMask)
FD_SET(handler->fd, &eset);
if (maxfd < handler->fd)
maxfd = handler->fd;
}
/*
* Setup the timeout to the estimated time until the
* next timer expires.
*/
if (!waitForInput) {
SET_ZERO(timeout);
timeoutPtr = &timeout;
} else if (timerPending()) {
delayUntilNextTimerEvent(&timeout);
timeoutPtr = &timeout;
} else {
timeoutPtr = (struct timeval*)0;
}
count = select(1 + maxfd, &rset, &wset, &eset, timeoutPtr);
if (count>0 && nfds>0) {
WMArray *handlerCopy = WMDuplicateArray(inputHandler);
int mask;
/* use WM_ITERATE_ARRAY() here */
for (i=0; i<nfds; i++) {
handler = WMGetFromArray(handlerCopy, i);
/* check if the handler still exist or was removed by a callback */
if (WMGetFirstInArray(inputHandler, handler) == WANotFound)
continue;
mask = 0;
if ((handler->mask & WIReadMask) && FD_ISSET(handler->fd, &rset))
mask |= WIReadMask;
if ((handler->mask & WIWriteMask) && FD_ISSET(handler->fd, &wset))
mask |= WIWriteMask;
if ((handler->mask & WIExceptMask) && FD_ISSET(handler->fd, &eset))
mask |= WIExceptMask;
if (mask!=0 && handler->callback) {
(*handler->callback)(handler->fd, mask,
handler->clientData);
}
}
WMFreeArray(handlerCopy);
}
W_FlushASAPNotificationQueue();
return (count > 0);
#else /* not HAVE_SELECT, not HAVE_POLL */
# error Neither select nor poll. You lose.
#endif /* HAVE_SELECT */
#endif /* HAVE_POLL */
}

View File

@@ -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,114 +170,157 @@ 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);
}
unsigned
WMCountHashTable(WMHashTable *table)
{
return table->itemCount;
}
const void*
void*
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 item->data;
return (void*)item->data;
else
return NULL;
return NULL;
}
Bool
WMHashGetItemAndKey(WMHashTable *table, const void *key,
void **retItem, void **retKey)
{
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;
}
} else {
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;
} else {
return False;
}
}
const void*
void*
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 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;
}
@@ -286,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;
@@ -313,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);
}
@@ -324,47 +367,98 @@ WMHashEnumerator
WMEnumerateHashTable(WMHashTable *table)
{
WMHashEnumerator enumerator;
enumerator.table = table;
enumerator.index = 0;
enumerator.nextItem = table->table[0];
return enumerator;
}
const void*
void*
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 data;
return (void*)data;
}
unsigned
WMCountHashTable(WMHashTable *table)
void*
WMNextHashEnumeratorKey(WMHashEnumerator *enumerator)
{
return table->itemCount;
const void *key = NULL;
/* this assumes the table doesn't change between
* WMEnumerateHashTable() and WMNextHashEnumeratorKey() 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;
}
}
}
if (enumerator->nextItem) {
key = ((HashItem*)enumerator->nextItem)->key;
enumerator->nextItem = ((HashItem*)enumerator->nextItem)->next;
}
return (void*)key;
}
Bool
WMNextHashEnumeratorItemAndKey(WMHashEnumerator *enumerator,
void **item, void **key)
{
/* 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;
}
}
}
if (enumerator->nextItem) {
if (item)
*item = (void*)((HashItem*)enumerator->nextItem)->data;
if (key)
*key = (void*)((HashItem*)enumerator->nextItem)->key;
enumerator->nextItem = ((HashItem*)enumerator->nextItem)->next;
return True;
}
return False;
}
@@ -383,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
};

View File

@@ -1,7 +1,7 @@
/*
* WINGs WMHost 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
@@ -19,7 +19,7 @@
*/
#include "../src/config.h"
#include "wconfig.h"
#include <unistd.h>
#include <string.h>
@@ -111,7 +111,7 @@ WMGetCurrentHost()
char name[W_MAXHOSTNAMELEN+1];
if (gethostname(name, W_MAXHOSTNAMELEN) < 0) {
wsyserror("Cannot get current host name");
wsyserror(_("Cannot get current host name"));
return NULL;
}
@@ -193,8 +193,6 @@ WMRetainHost(WMHost *hPtr)
void
WMReleaseHost(WMHost *hPtr)
{
int i;
hPtr->refCount--;
if (hPtr->refCount > 0)
@@ -215,7 +213,7 @@ WMReleaseHost(WMHost *hPtr)
void
WMSetHostCacheEnabled(Bool flag)
{
hostCacheEnabled = flag;
hostCacheEnabled = ((flag==0) ? 0 : 1);
}
@@ -248,11 +246,18 @@ WMFlushHostCache()
}
static int
matchAddress(void *item, void *cdata)
{
return (strcmp((char*) item, (char*) cdata)==0);
}
Bool
WMIsHostEqualToHost(WMHost* hPtr, WMHost* aPtr)
{
int i, j;
char *adr1, *adr2;
char *adr;
int i;
wassertrv(hPtr!=NULL && aPtr!=NULL, False);
@@ -260,11 +265,9 @@ WMIsHostEqualToHost(WMHost* hPtr, WMHost* aPtr)
return True;
for (i=0; i<WMGetArrayItemCount(aPtr->addresses); i++) {
adr1 = WMGetFromArray(aPtr->addresses, i);
for (j=0; j<WMGetArrayItemCount(hPtr->addresses); j++) {
adr2 = WMGetFromArray(hPtr->addresses, j);
if (strcmp(adr1, adr2)==0)
return True;
adr = WMGetFromArray(aPtr->addresses, i);
if (WMFindInArray(hPtr->addresses, matchAddress, adr) != WANotFound) {
return True;
}
}

View File

@@ -8,5 +8,5 @@
void
InitI18n(Display *dpy)
{
}

View File

@@ -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,68 +197,26 @@ 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
}
}
char*
wstrdup(char *str)
{
assert(str!=NULL);
return strcpy(wmalloc(strlen(str)+1), str);
}
char*
wstrconcat(char *str1, char *str2)
{
char *str;
if (!str1)
return wstrdup(str2);
else if (!str2)
return wstrdup(str1);
str = wmalloc(strlen(str1)+strlen(str2)+1);
strcpy(str, str1);
strcat(str, str2);
return str;
}
char*
wstrappend(char *dst, char *src)
{
if (!dst)
return wstrdup(src);
else if (!src || *src==0)
return dst;
dst = wrealloc(dst, strlen(dst)+strlen(src)+1);
strcat(dst, src);
return dst;
}

18
WINGs/misc.c Normal file
View File

@@ -0,0 +1,18 @@
/* Miscelaneous helper functions */
#include "WINGsP.h"
WMRange
wmkrange(int start, int count)
{
WMRange range;
range.position = start;
range.count = count;
return range;
}

View File

@@ -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);
@@ -385,8 +385,8 @@ WMPostNotificationName(const char *name, void *object, void *clientData)
typedef struct W_NotificationQueue {
WMBag *asapQueue;
WMBag *idleQueue;
WMArray *asapQueue;
WMArray *idleQueue;
struct W_NotificationQueue *next;
} NotificationQueue;
@@ -402,7 +402,7 @@ WMNotificationQueue*
WMGetDefaultNotificationQueue(void)
{
if (!notificationQueue)
notificationQueue = WMCreateNotificationQueue();
notificationQueue = WMCreateNotificationQueue();
return notificationQueue;
}
@@ -415,8 +415,10 @@ WMCreateNotificationQueue(void)
queue = wmalloc(sizeof(NotificationQueue));
queue->asapQueue = WMCreateBag(8);
queue->idleQueue = WMCreateBag(8);
queue->asapQueue =
WMCreateArrayWithDestructor(8, (WMFreeDataProc*)WMReleaseNotification);
queue->idleQueue =
WMCreateArrayWithDestructor(8, (WMFreeDataProc*)WMReleaseNotification);
queue->next = notificationQueueList;
notificationQueueList = queue;
@@ -428,94 +430,82 @@ WMCreateNotificationQueue(void)
void
WMEnqueueNotification(WMNotificationQueue *queue, WMNotification *notification,
WMPostingStyle postingStyle)
WMPostingStyle postingStyle)
{
WMEnqueueCoalesceNotification(queue, notification, postingStyle,
WNCOnName|WNCOnSender);
WNCOnName|WNCOnSender);
}
#define NOTIF ((WMNotification*)cdata)
#define ITEM ((WMNotification*)item)
void
WMDequeueNotificationMatching(WMNotificationQueue *queue,
WMNotification *notification, unsigned mask)
static int
matchSenderAndName(void *item, void *cdata)
{
WMBagIterator i;
WMNotification *tmp;
return (NOTIF->object==ITEM->object && strcmp(NOTIF->name, ITEM->name)==0);
}
if ((mask & WNCOnName) && (mask & WNCOnSender)) {
WM_ITERATE_BAG(queue->asapQueue, tmp, i) {
if (notification->object == tmp->object &&
strcmp(notification->name, tmp->name) == 0) {
WMRemoveFromBag(queue->asapQueue, tmp);
WMReleaseNotification(tmp);
break;
}
}
WM_ITERATE_BAG(queue->idleQueue, tmp, i) {
if (notification->object == tmp->object &&
strcmp(notification->name, tmp->name) == 0) {
WMRemoveFromBag(queue->idleQueue, tmp);
WMReleaseNotification(tmp);
break;
}
}
} else if (mask & WNCOnName) {
WM_ITERATE_BAG(queue->asapQueue, tmp, i) {
if (strcmp(notification->name, tmp->name) == 0) {
WMRemoveFromBag(queue->asapQueue, tmp);
WMReleaseNotification(tmp);
break;
}
}
WM_ITERATE_BAG(queue->idleQueue, tmp, i) {
if (strcmp(notification->name, tmp->name) == 0) {
WMRemoveFromBag(queue->idleQueue, tmp);
WMReleaseNotification(tmp);
break;
}
}
} else if (mask & WNCOnSender) {
WM_ITERATE_BAG(queue->asapQueue, tmp, i) {
if (notification->object == tmp->object) {
WMRemoveFromBag(queue->asapQueue, tmp);
WMReleaseNotification(tmp);
break;
}
}
WM_ITERATE_BAG(queue->idleQueue, tmp, i) {
if (notification->object == tmp->object) {
WMRemoveFromBag(queue->idleQueue, tmp);
WMReleaseNotification(tmp);
break;
}
}
}
static int
matchSender(void *item, void *cdata)
{
return (NOTIF->object == ITEM->object);
}
static int
matchName(void *item, void *cdata)
{
return (strcmp(NOTIF->name, ITEM->name)==0);
}
#undef NOTIF
#undef ITEM
void
WMDequeueNotificationMatching(WMNotificationQueue *queue,
WMNotification *notification, unsigned mask)
{
WMMatchDataProc *matchFunc;
if ((mask & WNCOnName) && (mask & WNCOnSender))
matchFunc = matchSenderAndName;
else if (mask & WNCOnName)
matchFunc = matchName;
else if (mask & WNCOnSender)
matchFunc = matchSender;
else
return;
WMRemoveFromArrayMatching(queue->asapQueue, matchFunc, notification);
WMRemoveFromArrayMatching(queue->idleQueue, matchFunc, notification);
}
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:
WMPutInBag(queue->asapQueue, notification);
break;
case WMPostASAP:
WMAddToArray(queue->asapQueue, notification);
break;
case WMPostWhenIdle:
WMPutInBag(queue->idleQueue, notification);
break;
case WMPostWhenIdle:
WMAddToArray(queue->idleQueue, notification);
break;
}
}
@@ -526,15 +516,12 @@ W_FlushASAPNotificationQueue()
WMNotificationQueue *queue = notificationQueueList;
while (queue) {
while (WMGetBagItemCount(queue->asapQueue)) {
WMNotification *tmp = WMGetFromBag(queue->asapQueue, 0);
while (WMGetArrayItemCount(queue->asapQueue)) {
WMPostNotification(WMGetFromArray(queue->asapQueue, 0));
WMDeleteFromArray(queue->asapQueue, 0);
}
WMPostNotification(tmp);
WMReleaseNotification(tmp);
WMDeleteFromBag(queue->asapQueue, 0);
}
queue = queue->next;
queue = queue->next;
}
}
@@ -545,15 +532,12 @@ W_FlushIdleNotificationQueue()
WMNotificationQueue *queue = notificationQueueList;
while (queue) {
while (WMGetBagItemCount(queue->idleQueue)) {
WMNotification *tmp = WMGetFromBag(queue->idleQueue, 0);
while (WMGetArrayItemCount(queue->idleQueue)) {
WMPostNotification(WMGetFromArray(queue->idleQueue, 0));
WMDeleteFromArray(queue->idleQueue, 0);
}
WMPostNotification(tmp);
WMReleaseNotification(tmp);
WMDeleteFromBag(queue->idleQueue, 0);
}
queue = queue->next;
queue = queue->next;
}
}

4
WINGs/po/.cvsignore Normal file
View File

@@ -0,0 +1,4 @@
Makefile Makefile.in
.psrc .inslog2 tca.map tca.log pchdir *.rpt
*.pot
*.mo

52
WINGs/po/Makefile.am Normal file
View File

@@ -0,0 +1,52 @@
nlsdir = $(NLSDIR)
CATALOGS = @WINGSMOFILES@
CLEANFILES = $(CATALOGS) WINGs.pot
EXTRA_DIST = bg.po ca.po cs.po de.po fr.po sk.po
POTFILES = \
$(top_builddir)/WINGs/connection.c \
$(top_builddir)/WINGs/error.c \
$(top_builddir)/WINGs/findfile.c \
$(top_builddir)/WINGs/host.c \
$(top_builddir)/WINGs/proplist.c \
$(top_builddir)/WINGs/userdefaults.c \
$(top_builddir)/WINGs/wcolor.c \
$(top_builddir)/WINGs/wcolorpanel.c \
$(top_builddir)/WINGs/wfilepanel.c \
$(top_builddir)/WINGs/wfont.c \
$(top_builddir)/WINGs/wfontpanel.c \
$(top_builddir)/WINGs/widgets.c \
$(top_builddir)/WINGs/wruler.c
SUFFIXES = .po .mo
.po.mo:
msgfmt -c -o $@ $<
all-local: $(CATALOGS)
WINGs.pot: $(POTFILES)
xgettext --default-domain=WINGs \
--add-comments --keyword=_ $(POTFILES)
if cmp -s WINGs.po WINGs.pot; then \
rm -f WINGs.po; \
else \
mv -f WINGs.po WINGs.pot; \
fi
install-data-local: $(CATALOGS)
$(mkinstalldirs) $(DESTDIR)$(nlsdir)
chmod 755 $(DESTDIR)$(nlsdir)
for n in $(CATALOGS) __DuMmY ; do \
if test "$$n" -a "$$n" != "__DuMmY" ; then \
l=`basename $$n .mo`; \
$(mkinstalldirs) $(DESTDIR)$(nlsdir)/$$l/LC_MESSAGES; \
chmod 755 $(DESTDIR)$(nlsdir)/$$l; \
chmod 755 $(DESTDIR)$(nlsdir)/$$l/LC_MESSAGES; \
$(INSTALL_DATA) -m 644 $$n $(DESTDIR)$(nlsdir)/$$l/LC_MESSAGES/WINGs.mo; \
fi; \
done

19
WINGs/po/README Normal file
View File

@@ -0,0 +1,19 @@
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
------------------------------------------------------------------------------
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
-----

660
WINGs/po/bg.po Normal file
View 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
View 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à."

663
WINGs/po/cs.po Normal file
View File

@@ -0,0 +1,663 @@
# Czech messages for WINGs
# (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>
#
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"
"Language-Team: Czech <cz@li.org>\n"
"MIME-Version: 1.0\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"
#: ../../WINGs/dragsource.c:541
msgid "DND selection lost during drag operation..."
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"
#: ../../WINGs/dragsource.c:728
msgid "could not get ownership or DND selection"
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"
#: ../../WINGs/dragsource.c:1040
#, c-format
msgid "unknown XDND action %s from 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"
#: ../../WINGs/dragsource.c:1161
msgid "received Enter event in bad order"
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"
#: ../../WINGs/error.c:56
#, c-format
msgid "Unknown error %d"
msgstr "Neznámá chyba %d"
#: ../../WINGs/error.c:61
#, c-format
msgid "Error %d"
msgstr "Chyba %d"
#: ../../WINGs/error.c:112
msgid " warning: "
msgstr " varovíní: "
#: ../../WINGs/error.c:139
msgid " fatal error: "
msgstr " fatální chyba: "
#: ../../WINGs/error.c:165 ../../WINGs/error.c:194
msgid " error: "
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"
#: ../../WINGs/findfile.c:68
#, c-format
msgid "could not get password entry for user %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"
#: ../../WINGs/hashtable.c:279
msgid "finished rebuild.\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"
#: ../../WINGs/memory.c:94
msgid "malloc() failed. Retrying after 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()."
#: ../../WINGs/memory.c:106 ../../WINGs/memory.c:146
msgid "virtual memory exhausted"
msgstr "virtuální paměť vyčerpaná"
#: ../../WINGs/memory.c:133
msgid "realloc() failed. Retrying after 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()."
#: ../../WINGs/memory.c:205
#, c-format
msgid "trying to release unexisting data %p"
msgstr "pokus uvolnit neexistujícá data %p"
#: ../../WINGs/memory.c:210
#, c-format
msgid "RELEASING %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"
#: ../../WINGs/wcolor.c:198
msgid "white"
msgstr "bílou"
#: ../../WINGs/wcolor.c:211
msgid "black"
msgstr "černou"
#: ../../WINGs/wcolor.c:250
msgid "gray"
msgstr "šedou"
#: ../../WINGs/wcolor.c:291
msgid "dark gray"
msgstr "tmavě šedou"
#: ../../WINGs/wcolorpanel.c:410
msgid "Colors"
msgstr "Barvy"
#: ../../WINGs/wcolorpanel.c:600 ../../WINGs/wcolorpanel.c:2819
msgid "Brightness"
msgstr "Světlost"
#: ../../WINGs/wcolorpanel.c:602 ../../WINGs/wcolorpanel.c:678
#: ../../WINGs/wcolorpanel.c:711 ../../WINGs/wcolorpanel.c:745
#: ../../WINGs/wcolorpanel.c:805 ../../WINGs/wcolorpanel.c:839
#: ../../WINGs/wcolorpanel.c:873 ../../WINGs/wcolorpanel.c:908
#: ../../WINGs/wcolorpanel.c:2159 ../../WINGs/wcolorpanel.c:2821
#: ../../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ěť"
#: ../../WINGs/wcolorpanel.c:675 ../../WINGs/wcolorpanel.c:676
msgid "Red"
msgstr "Červená"
#: ../../WINGs/wcolorpanel.c:708 ../../WINGs/wcolorpanel.c:709
msgid "Green"
msgstr "Zelená"
#: ../../WINGs/wcolorpanel.c:742 ../../WINGs/wcolorpanel.c:743
msgid "Blue"
msgstr "Modrá"
#: ../../WINGs/wcolorpanel.c:802 ../../WINGs/wcolorpanel.c:803
msgid "Cyan"
msgstr ""
#: ../../WINGs/wcolorpanel.c:836 ../../WINGs/wcolorpanel.c:837
msgid "Magenta"
msgstr ""
#: ../../WINGs/wcolorpanel.c:870 ../../WINGs/wcolorpanel.c:871
msgid "Yellow"
msgstr "Žlutá"
#: ../../WINGs/wcolorpanel.c:905 ../../WINGs/wcolorpanel.c:906
msgid "Black"
msgstr "Černá"
#: ../../WINGs/wcolorpanel.c:986
msgid "Spectrum"
msgstr "Spektrum"
#: ../../WINGs/wcolorpanel.c:1016
msgid "Palette"
msgstr "Paleta"
#: ../../WINGs/wcolorpanel.c:1022
msgid "New from File..."
msgstr "Nová ze souboru..."
#: ../../WINGs/wcolorpanel.c:1023 ../../WINGs/wcolorpanel.c:1071
#: ../../WINGs/wcolorpanel.c:1088
msgid "Rename..."
msgstr "Přejmenovat..."
#: ../../WINGs/wcolorpanel.c:1024 ../../WINGs/wcolorpanel.c:1072
#: ../../WINGs/wcolorpanel.c:1089 ../../WINGs/wcolorpanel.c:3316
msgid "Remove"
msgstr "Odstranit"
#: ../../WINGs/wcolorpanel.c:1025
msgid "Copy"
msgstr "Kopírovat"
#: ../../WINGs/wcolorpanel.c:1026
msgid "New from Clipboard"
msgstr "Nová ze schránky"
#: ../../WINGs/wcolorpanel.c:1047
msgid "X11-Colors"
msgstr "Barvy X11"
#: ../../WINGs/wcolorpanel.c:1064
msgid "Color"
msgstr "Barva"
#: ../../WINGs/wcolorpanel.c:1070
msgid "Add..."
msgstr "Přidat..."
#: ../../WINGs/wcolorpanel.c:1080
msgid "List"
msgstr "Seznam"
#: ../../WINGs/wcolorpanel.c:1087
msgid "New..."
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í"
#. Delete the file, it doesn't belong here
#: ../../WINGs/wcolorpanel.c:1232 ../../WINGs/wcolorpanel.c:3202
#: ../../WINGs/wcolorpanel.c:3206
msgid "File Error"
msgstr "Chyba souboru"
#: ../../WINGs/wcolorpanel.c:1233
msgid "Could not create ColorPanel configuration directory"
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
#: ../../WINGs/wfilepanel.c:243 ../../WINGs/wfilepanel.c:641
#: ../../WINGs/wfilepanel.c:653 ../../WINGs/wfilepanel.c:752
#: ../../WINGs/wfilepanel.c:963 ../../WINGs/wfontpanel.c:717
msgid "OK"
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"
#: ../../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"
#: ../../WINGs/wcolorpanel.c:2855
msgid "Saturation"
msgstr "Saturace"
#: ../../WINGs/wcolorpanel.c:2891
msgid "Hue"
msgstr "Odteď"
#: ../../WINGs/wcolorpanel.c:3141
msgid "Open Palette"
msgstr "Otevřít paletu"
#: ../../WINGs/wcolorpanel.c:3203
msgid "Invalid file format !"
msgstr "Nesprávný souborový formát!"
#: ../../WINGs/wcolorpanel.c:3205
#, c-format
msgid "can't remove file %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!"
#: ../../WINGs/wcolorpanel.c:3234
msgid "Rename"
msgstr "Přejmenovat"
#: ../../WINGs/wcolorpanel.c:3234
msgid "Rename palette to:"
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"
#. Careful, this palette exists already
#: ../../WINGs/wcolorpanel.c:3251 ../../WINGs/wfilepanel.c:752
msgid "Warning"
msgstr "Varování"
#: ../../WINGs/wcolorpanel.c:3252
msgid ""
"Palette already exists !\n"
"\n"
"Overwrite ?"
msgstr ""
"Paleta už existuje!\n"
"\n"
"Přepsat?"
#: ../../WINGs/wcolorpanel.c:3252 ../../WINGs/wcolorpanel.c:3316
msgid "No"
msgstr "Ne"
#: ../../WINGs/wcolorpanel.c:3252 ../../WINGs/wcolorpanel.c:3316
msgid "Yes"
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"
#: ../../WINGs/wcolorpanel.c:3310
msgid "This will permanently remove the palette "
msgstr "Paleta bude natrvalo smazaná"
#: ../../WINGs/wcolorpanel.c:3313
msgid ""
".\n"
"\n"
"Are you sure you want to remove this palette ?"
msgstr ""
".\n"
"\n"
"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"
#: ../../WINGs/wcolorpanel.c:3643
#, c-format
msgid "Could not open %s"
msgstr "Nemožné otevřít %s"
#: ../../WINGs/wcolorpanel.c:3650
#, c-format
msgid "Could not create %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"
#: ../../WINGs/wcolorpanel.c:3706
msgid "Color Panel: Color unspecified"
msgstr "Panel barev: Nespecifikovaná barva"
#: ../../WINGs/wfilepanel.c:228
msgid "Name:"
msgstr "Jméno:"
#: ../../WINGs/wfilepanel.c:325 ../../WINGs/wfilepanel.c:390
msgid "Open"
msgstr "Otevřít"
#: ../../WINGs/wfilepanel.c:343 ../../WINGs/wfilepanel.c:396
msgid "Save"
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"
#: ../../WINGs/wfilepanel.c:574
#, c-format
msgid "WINGs: could not stat %s\n"
msgstr "WINGs: nemožné zjistit informace o %s\n"
#: ../../WINGs/wfilepanel.c:641 ../../WINGs/wfilepanel.c:962
#: ../../WINGs/wfontpanel.c:716
msgid "Error"
msgstr "Chyba"
#: ../../WINGs/wfilepanel.c:652
msgid "Create Directory"
msgstr "Vytvořit adresář"
#: ../../WINGs/wfilepanel.c:653
msgid "Enter directory name"
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."
#: ../../WINGs/wfilepanel.c:692
#, c-format
msgid "'%s' already exists."
msgstr "'%s' už existuje"
#: ../../WINGs/wfilepanel.c:695
msgid "Path does not exist."
msgstr "Cesta neexistuje."
#: ../../WINGs/wfilepanel.c:725 ../../WINGs/wfilepanel.c:782
#, c-format
msgid "'%s' does not exist."
msgstr "'%s' neexistuje."
#: ../../WINGs/wfilepanel.c:732 ../../WINGs/wfilepanel.c:789
msgid "Insufficient memory available."
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í."
#: ../../WINGs/wfilepanel.c:739 ../../WINGs/wfilepanel.c:769
#: ../../WINGs/wfilepanel.c:796
#, c-format
msgid "Can not delete '%s'."
msgstr "Nemožné odstranit '%s'."
#: ../../WINGs/wfilepanel.c:745
#, c-format
msgid "Delete directory %s ?"
msgstr "Odstranit adresář %s?"
#: ../../WINGs/wfilepanel.c:748
#, c-format
msgid "Delete file %s ?"
msgstr "Odstranit soubor %s?"
#: ../../WINGs/wfilepanel.c:760
#, c-format
msgid "Directory '%s' does not exist."
msgstr "Adresář '%s' neexistuje."
#: ../../WINGs/wfilepanel.c:763
#, c-format
msgid "Directory '%s' is not empty."
msgstr "Adresář '%s' není prázdný."
#: ../../WINGs/wfilepanel.c:766
#, c-format
msgid "Directory '%s' is busy."
msgstr "Adresář '%s' je používaný."
#: ../../WINGs/wfilepanel.c:779
#, c-format
msgid "'%s' is a directory."
msgstr "'%s' je adresář."
#: ../../WINGs/wfilepanel.c:821
#, c-format
msgid "An error occured browsing '%s'."
msgstr "Při prohlížení '%s' nastala chyba."
#: ../../WINGs/wfilepanel.c:825
#, c-format
msgid "'%s' is not a directory."
msgstr "'%s' není adresář."
#: ../../WINGs/wfilepanel.c:962
msgid "File does not exist."
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:"
#: ../../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."
#: ../../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."
#: ../../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."
#: ../../WINGs/wfont.c:292 ../../WINGs/wfont.c:328
msgid "could not load fixed font!"
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ý."
#: ../../WINGs/wfontpanel.c:205
msgid "Test!!!"
msgstr "Zkouška!!!"
#: ../../WINGs/wfontpanel.c:211
msgid "Family"
msgstr ""
#: ../../WINGs/wfontpanel.c:222
msgid "Typeface"
msgstr ""
#: ../../WINGs/wfontpanel.c:233
msgid "Size"
msgstr "Velikost"
#: ../../WINGs/wfontpanel.c:252
msgid "Set"
msgstr "Sada"
#: ../../WINGs/wfontpanel.c:257
msgid "Revert"
msgstr "Zpět"
#: ../../WINGs/wfontpanel.c:717
msgid "Could not retrieve font list"
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ě."
#: ../../WINGs/wfontpanel.c:880
msgid "Roman"
msgstr ""
#: ../../WINGs/wfontpanel.c:883
msgid "Italic"
msgstr ""
#: ../../WINGs/wfontpanel.c:885
msgid "Oblique"
msgstr ""
#: ../../WINGs/wfontpanel.c:887
msgid "Rev Italic"
msgstr ""
#: ../../WINGs/wfontpanel.c:889
msgid "Rev Oblique"
msgstr ""
#: ../../WINGs/wfontpanel.c:895
msgid "Normal"
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"
#: ../../WINGs/widgets.c:525
#, c-format
msgid "WINGs: could not open 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."
#: ../../WINGs/wruler.c:189
msgid "0 inches"
msgstr "0 palců"
#: ../../WINGs/wtext.c:1212
msgid "...for this app will surely crash :-)\n"
msgstr "...pro tuto aplikaci to určitě spadne :-)\n"
#: ../../WINGs/wtext.c:2084
msgid "didn't get it\n"
msgstr "nedosaženo\n"
#: ../../WINGs/wtext.c:2726
#, c-format
msgid "type is [%s]\n"
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"
#: ../../WINGs/wtext.c:2995
msgid "could not create text's view\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"
#: ../../WINGs/wview.c:267
msgid "trying to reparent realized view to unrealized parent"
msgstr ""
#: ../../WINGs/wtextfield.c:490
msgid "only left alignment is supported in textfields"
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"
#: ../../WINGs/wwindow.c:313
msgid "could not allocate memory for window size hints"
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"
#: ../../WINGs/wwindow.c:627
msgid "icon title conversion error..using STRING encoding"
msgstr "chyba konverze titulku ikony... použije se kódovaní STRING"

663
WINGs/po/de.po Normal file
View 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
View 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"

719
WINGs/po/sk.po Normal file
View File

@@ -0,0 +1,719 @@
# Slovak messages for WINGs
# (C) 2001 Jan "judas" Tomka
#
# Original translation by Jan "judas" Tomka on Feb 25 2001
# 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
# 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: 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=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 "Nesprávna kombinácia adresa-služba-protokol"
#: ../../WINGs/error.c:54
#, c-format
msgid "Unknown error %d"
msgstr "Nezmána chyba %d"
#: ../../WINGs/error.c:59
#, c-format
msgid "Error %d"
msgstr "Chyba %d"
#: ../../WINGs/error.c:110
msgid " warning: "
msgstr " varovanie: "
#: ../../WINGs/error.c:137
msgid " fatal error: "
msgstr " fatálna chyba: "
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
msgid " error: "
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"
#: ../../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"
#: ../../WINGs/host.c:114
msgid "Cannot get current host name"
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"
#: ../../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 "Použitá proplist funkcia na iných ako WMPropLists objektoch"
#: ../../WINGs/proplist.c:630
msgid "unterminated PropList string"
msgstr "neukončený PropList reťazec"
#: ../../WINGs/proplist.c:670
msgid "unterminated PropList data"
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)"
#: ../../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"
#: ../../WINGs/proplist.c:729
msgid "unterminated PropList array"
msgstr "neukončené PropList pole"
#: ../../WINGs/proplist.c:737
msgid "missing or unterminated PropList array"
msgstr "chýbajúce alebo neukončené PropList pole"
#: ../../WINGs/proplist.c:747
msgid "could not get PropList array element"
msgstr "nemožno zistiť prvok PropList poľa"
#: ../../WINGs/proplist.c:776
msgid "unterminated PropList dictionary"
msgstr "neukončený PropList slovník"
#: ../../WINGs/proplist.c:793
msgid "missing PropList dictionary key"
msgstr "chýbajúci kľúč PropList slovníka"
#: ../../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"
#: ../../WINGs/proplist.c:803
msgid "error parsing PropList dictionary key"
msgstr "chyba pri parsovaní kľúča PropList slovníka"
#: ../../WINGs/proplist.c:811
msgid "missing = in PropList dictionary entry"
msgstr "chýbajúce = v položke PropList slovníka"
#: ../../WINGs/proplist.c:819
msgid "error parsing PropList dictionary entry value"
msgstr "chyba pri parsovaní hodnoty položky PropList slovníka"
#: ../../WINGs/proplist.c:827
msgid "missing ; in PropList dictionary entry"
msgstr "chýbajúca ; v položke PropList slovníka"
#: ../../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 \"."
#: ../../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é."
#: ../../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"
#: ../../WINGs/proplist.c:1606
#, c-format
msgid "could not get size for file '%s'"
msgstr "nemožno zistiť veľkosť súboru '%s'"
#: ../../WINGs/proplist.c:1619
#, c-format
msgid "error reading from file '%s'"
msgstr "chyba pri čítaní zo súboru '%s'"
#: ../../WINGs/proplist.c:1671
#, c-format
msgid "mkstemp (%s) failed"
msgstr "chyba mkstemp (%s)"
#: ../../WINGs/proplist.c:1682
#, c-format
msgid "mktemp (%s) failed"
msgstr "chyba mktemp(%s)"
#: ../../WINGs/proplist.c:1693
#, c-format
msgid "open (%s) failed"
msgstr "chyba pri otváraní (%s)"
#: ../../WINGs/proplist.c:1700
#, c-format
msgid "writing to file: %s failed"
msgstr "chyba pri zápise do súboru: %s"
#: ../../WINGs/proplist.c:1708
#, c-format
msgid "fclose (%s) failed"
msgstr "chyba fclose (%s)"
#: ../../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: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"
#: ../../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"
#: ../../WINGs/wcolor.c:224
msgid "white"
msgstr "bielu"
#: ../../WINGs/wcolor.c:236
msgid "black"
msgstr "čiernu"
#: ../../WINGs/wcolor.c:275
msgid "gray"
msgstr "šedú"
#: ../../WINGs/wcolor.c:316
msgid "dark gray"
msgstr "tmavošedú"
#: ../../WINGs/wcolorpanel.c:420
msgid "Colors"
msgstr "Farby"
#: ../../WINGs/wcolorpanel.c:610 ../../WINGs/wcolorpanel.c:2829
msgid "Brightness"
msgstr "Svetlosť"
#: ../../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äť"
#: ../../WINGs/wcolorpanel.c:685 ../../WINGs/wcolorpanel.c:686
msgid "Red"
msgstr "Červená"
#: ../../WINGs/wcolorpanel.c:718 ../../WINGs/wcolorpanel.c:719
msgid "Green"
msgstr "Zelená"
#: ../../WINGs/wcolorpanel.c:752 ../../WINGs/wcolorpanel.c:753
msgid "Blue"
msgstr "Modrá"
#: ../../WINGs/wcolorpanel.c:812 ../../WINGs/wcolorpanel.c:813
msgid "Cyan"
msgstr "Azúrová"
#: ../../WINGs/wcolorpanel.c:846 ../../WINGs/wcolorpanel.c:847
msgid "Magenta"
msgstr "Purpurová"
#: ../../WINGs/wcolorpanel.c:880 ../../WINGs/wcolorpanel.c:881
msgid "Yellow"
msgstr "Žltá"
#: ../../WINGs/wcolorpanel.c:915 ../../WINGs/wcolorpanel.c:916
msgid "Black"
msgstr "Čierna"
#: ../../WINGs/wcolorpanel.c:996
msgid "Spectrum"
msgstr "Spektrum"
#: ../../WINGs/wcolorpanel.c:1026
msgid "Palette"
msgstr "Paleta"
#: ../../WINGs/wcolorpanel.c:1032
msgid "New from File..."
msgstr "Nová zo súboru..."
#: ../../WINGs/wcolorpanel.c:1033 ../../WINGs/wcolorpanel.c:1081
#: ../../WINGs/wcolorpanel.c:1098
msgid "Rename..."
msgstr "Premenovať..."
#: ../../WINGs/wcolorpanel.c:1034 ../../WINGs/wcolorpanel.c:1082
#: ../../WINGs/wcolorpanel.c:1099 ../../WINGs/wcolorpanel.c:3326
msgid "Remove"
msgstr "Odstrániť"
#: ../../WINGs/wcolorpanel.c:1035
msgid "Copy"
msgstr "Kopírovať"
#: ../../WINGs/wcolorpanel.c:1036
msgid "New from Clipboard"
msgstr "Nová z nástenky"
#: ../../WINGs/wcolorpanel.c:1057
msgid "X11-Colors"
msgstr "Farby X11"
#: ../../WINGs/wcolorpanel.c:1074
msgid "Color"
msgstr "Farba"
#: ../../WINGs/wcolorpanel.c:1080
msgid "Add..."
msgstr "Pridať..."
#: ../../WINGs/wcolorpanel.c:1090
msgid "List"
msgstr "Zoznam"
#: ../../WINGs/wcolorpanel.c:1097
msgid "New..."
msgstr "Nový..."
#: ../../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í"
#. Delete the file, it doesn't belong here
#: ../../WINGs/wcolorpanel.c:1242 ../../WINGs/wcolorpanel.c:3212
#: ../../WINGs/wcolorpanel.c:3216
msgid "File Error"
msgstr "Chyba súboru"
#: ../../WINGs/wcolorpanel.c:1243
msgid "Could not create ColorPanel configuration directory"
msgstr "Nemožno vytvoriť konfiguračný adresár panelu farieb"
#: ../../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 "Panel farieb: Nemožno nájsť súbor"
#: ../../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"
#: ../../WINGs/wcolorpanel.c:2865
msgid "Saturation"
msgstr "Saturácia"
#: ../../WINGs/wcolorpanel.c:2901
msgid "Hue"
msgstr "Odtieň"
#: ../../WINGs/wcolorpanel.c:3151
msgid "Open Palette"
msgstr "Otvoriť paletu"
#: ../../WINGs/wcolorpanel.c:3213
msgid "Invalid file format !"
msgstr "Nesprávny súborový formát!"
#: ../../WINGs/wcolorpanel.c:3215
#, c-format
msgid "can't remove file %s"
msgstr "namožno odstrániť súbor %s"
#: ../../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!"
#: ../../WINGs/wcolorpanel.c:3244
msgid "Rename"
msgstr "Premenovať"
#: ../../WINGs/wcolorpanel.c:3244
msgid "Rename palette to:"
msgstr "Premenovať paletu:"
#: ../../WINGs/wcolorpanel.c:3245 ../../WINGs/wfilepanel.c:259
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
msgid "Cancel"
msgstr "Zrušiť"
#. Careful, this palette exists already
#: ../../WINGs/wcolorpanel.c:3261 ../../WINGs/wfilepanel.c:763
msgid "Warning"
msgstr "Varovanie"
#: ../../WINGs/wcolorpanel.c:3262
msgid ""
"Palette already exists !\n"
"\n"
"Overwrite ?"
msgstr ""
"Paleta už existuje!\n"
"\n"
"Prepísať?"
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
msgid "No"
msgstr "Nie"
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
msgid "Yes"
msgstr "Áno"
#: ../../WINGs/wcolorpanel.c:3294
#, c-format
msgid "Couldn't rename palette %s to %s\n"
msgstr "Nemožno premenovať paletu %s na %s\n"
#: ../../WINGs/wcolorpanel.c:3320
msgid "This will permanently remove the palette "
msgstr "Paleta bude natrvalo zmazaná"
#: ../../WINGs/wcolorpanel.c:3323
msgid ""
".\n"
"\n"
"Are you sure you want to remove this palette ?"
msgstr ""
".\n"
"\n"
"Ste si istý, že chcete odstrániť túto paletu?"
#: ../../WINGs/wcolorpanel.c:3348
#, c-format
msgid "Couldn't remove palette %s\n"
msgstr "Nemožno odstrániť paletu %s\n"
#: ../../WINGs/wcolorpanel.c:3647
#, c-format
msgid "Could not open %s"
msgstr "Nemožno otvoriť %s"
#: ../../WINGs/wcolorpanel.c:3654
#, c-format
msgid "Could not create %s"
msgstr "Nemožno vytvoriť %s"
#: ../../WINGs/wcolorpanel.c:3665
#, c-format
msgid "Write error on file %s"
msgstr "Chyba zápisu do súboru %s"
#: ../../WINGs/wcolorpanel.c:3710
msgid "Color Panel: Color unspecified"
msgstr "Panel farieb: Nešpecifikovaná farba"
#: ../../WINGs/wfilepanel.c:235
msgid "Name:"
msgstr "Meno:"
#: ../../WINGs/wfilepanel.c:332 ../../WINGs/wfilepanel.c:396
msgid "Open"
msgstr "Otvoriť"
#: ../../WINGs/wfilepanel.c:350 ../../WINGs/wfilepanel.c:402
msgid "Save"
msgstr "Uložiť"
#: ../../WINGs/wfilepanel.c:565
#, c-format
msgid "WINGs: could not open directory %s\n"
msgstr "WINGs: nemožno otvoriť adresár %s\n"
#: ../../WINGs/wfilepanel.c:583
#, c-format
msgid "WINGs: could not stat %s\n"
msgstr "WINGs: nemožno zistiť informácie o %s\n"
#: ../../WINGs/wfilepanel.c:650 ../../WINGs/wfilepanel.c:973
#: ../../WINGs/wfontpanel.c:750
msgid "Error"
msgstr "Chyba"
#: ../../WINGs/wfilepanel.c:661
msgid "Create Directory"
msgstr "Vytvoriť adresár"
#: ../../WINGs/wfilepanel.c:662
msgid "Enter directory name"
msgstr "Meno adresára"
#: ../../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: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:734 ../../WINGs/wfilepanel.c:793
#, c-format
msgid "'%s' does not exist."
msgstr "'%s' neexistuje."
#: ../../WINGs/wfilepanel.c:741 ../../WINGs/wfilepanel.c:800
msgid "Insufficient memory available."
msgstr "Nedostatok pamäti."
#: ../../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."
#: ../../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'."
#: ../../WINGs/wfilepanel.c:755
#, c-format
msgid "Delete directory %s ?"
msgstr "Odstrániť adresár %s?"
#: ../../WINGs/wfilepanel.c:759
#, c-format
msgid "Delete file %s ?"
msgstr "Odstrániť súbor %s?"
#: ../../WINGs/wfilepanel.c:771
#, c-format
msgid "Directory '%s' does not exist."
msgstr "Adresár '%s' neexistuje."
#: ../../WINGs/wfilepanel.c:774
#, c-format
msgid "Directory '%s' is not empty."
msgstr "Adresár '%s' nie je prázdny."
#: ../../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."
#: ../../WINGs/wfilepanel.c:832
#, c-format
msgid "An error occured browsing '%s'."
msgstr "Pri prehliadaní '%s' nastala chyba."
#: ../../WINGs/wfilepanel.c:836
#, c-format
msgid "'%s' is not a directory."
msgstr "'%s' nie je adresár."
#: ../../WINGs/wfilepanel.c:973
msgid "File does not exist."
msgstr "Súbor neexistuje."
#: ../../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:"
#: ../../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."
#. 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 "nemožno načítať font %s. Skúša sa načítať arial."
#: ../../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."
#: ../../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!"
#: ../../WINGs/wfont.c:1520
#, c-format
msgid "font description %s is too large."
msgstr "popis fontu %s je príliš veľký."
#: ../../WINGs/wfontpanel.c:235
msgid "Test!!!"
msgstr "Skúška!!!"
#: ../../WINGs/wfontpanel.c:241
msgid "Family"
msgstr "Rodina"
#: ../../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:288
msgid "Revert"
msgstr "Obrátiť"
#: ../../WINGs/wfontpanel.c:751
msgid "Could not retrieve font list"
msgstr "Nemožno obdržať zoznam fontov"
#: ../../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."
#: ../../WINGs/wfontpanel.c:913
msgid "Roman"
msgstr "roman"
#: ../../WINGs/wfontpanel.c:916
msgid "Italic"
msgstr "kurzíva"
#: ../../WINGs/wfontpanel.c:918
msgid "Oblique"
msgstr "šikmé"
#: ../../WINGs/wfontpanel.c:920
msgid "Rev Italic"
msgstr "obr. kurzíva"
#: ../../WINGs/wfontpanel.c:922
msgid "Rev Oblique"
msgstr "obr. šikmé"
#: ../../WINGs/wfontpanel.c:928
msgid "Normal"
msgstr "normálne"
#: ../../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"
#: ../../WINGs/widgets.c:772
msgid ""
"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."
#: ../../WINGs/wruler.c:192
msgid "0 inches"
msgstr "0 palcov"

1734
WINGs/proplist.c Normal file

File diff suppressed because it is too large Load Diff

5
WINGs/python/.cvsignore Normal file
View File

@@ -0,0 +1,5 @@
build
WINGs.c
wings.so
*.pyc
*.pyo

17
WINGs/python/Makefile Normal file
View 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
View 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
View 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
View 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
View 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
View 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()

Some files were not shown because too many files have changed in this diff Show More