1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-03-19 09:13:33 +01:00

389 Commits

Author SHA1 Message Date
Carlos R. Mafra
f55eef413f wmaker-0.94.0-crm
I am calling it -crm so that people won't confuse its non-official status.
2010-01-09 13:48:06 +01:00
Carlos R. Mafra
643e49f190 Remove [raise,lower]clip shortcut keys
The raising and lowering of the clip is already taken care of
by the "ClipRaiseLowerKey" shortcut.

wmaker gets a bit smaller for free:
   text    data     bss     dec     hex filename
 449483   17384    8208  475075   73fc3 src/.libs/wmaker.old
 449307   17256    8192  474755   73e83 src/.libs/wmaker.new
2010-01-09 13:47:57 +01:00
Carlos R. Mafra
8a2a0b6adc Remove ICON_KABOOM_EXTRA
I don't want it in the sources, and the "normal" icon kaboom
is good enough. And it was #undef'ined by default.
2010-01-07 15:38:41 +01:00
Carlos R. Mafra
0deb198b10 Remove a few unneeded includes 2010-01-07 15:33:41 +01:00
Brad Jorsch
b6689a0108 Keyboard shortcut to raise the dock
This patch adds the DockRaiseLowerKey shortcut, which raises/lowers
the dock depending on whether the dock is lowered/raised.

[crmafra: Reformatted Brad's patch against git repo and removed the
 DockRaiseKey and DockLowerKey shortcuts ]
2010-01-07 12:16:17 +01:00
Carlos R. Mafra
7ef8178d2a Undefine WINDOW_BIRTH_ZOOM
I don't want the (small) overhead of the window birth zoom special effects
because I like apps popping up instantly when I open them (specially now
with the SSD).

Another way to not get the birth animation is to unset "animations" in
WPrefs, but that makes the other animations which I care (ie they don't have
the effect of making my computer seem slower than it really is) go away.
2010-01-06 11:34:24 +01:00
Carlos R. Mafra
b3e817305d Do not compile extra stuff under wrlib/tests etc
Let's avoid compiling these "tests" and extra stuff every time,
saving us some time.
2010-01-06 11:34:24 +01:00
Carlos R. Mafra
a2133e8e2f Do not change workspace during deiconify animation
Paul Harris reported that using the mouse wheel over a miniwindow
would deiconify it to a different workspace than the original one
where it was iconified.

This happens because after the window begins to be deiconified the
"residual" mouse wheel scrolling hits the workspace background, and
Window Maker changes workspace with wWorkspaceRelativeChange().

But if it all happens fast enough (so the deiconification animation
did not finish yet) the workspace will have changed before the
window reaches its final deiconified destination, leading to
the situation that Paul described in the link below.

So to avoid this, let's set a 'ignore_wks_change' variable
from wDeiconifyWindow() and make wWorkspaceRelativeChange() respect it.

Original report: http://lists.windowmaker.info/dev/msg00821.html
2009-12-26 21:09:10 +01:00
Carlos R. Mafra
efa31f30b2 Remove unused function raiseMenus()
GCC warns:

rootmenu.c:350: warning: 'raiseMenus' defined but not used
2009-12-21 23:00:33 +01:00
Carlos R. Mafra
024e2f5299 Remove XSMP_ENABLED constructs
The code was never used and the !XSMP_ENABLED code seems to
work well enough for all these years.
2009-12-21 22:40:28 +01:00
Ralf Hoffmann
629b118767 fixed problem with default visual ID for multi-screen setups by using multiple IDs for each screen
Since a single default visual ID cannot be used for multiple screens, thus
Window Maker refused to start. There is now a global function for getting the
default visual ID. The command line argument --visual-id can be a comma
separated list of visual IDs for each screen. A default value is only set for
the first screen.
2009-12-11 16:36:25 +01:00
Nicolas Bonifas
d8ef209c9a Add menu path to Debian build system
Part of the menu on Debian systems is stored in
/etc/X11/Windowmaker/menu.hook. This patch will add this path to
src/wconfig.h.in when building the Debian wmaker package. This is
what is done in the Debian version of wmaker 0.92.0.
2009-12-10 13:51:26 +01:00
Carlos R. Mafra
2ba803ad98 Remove unused arguments from a few functions
gcc 4.4.1 was warning (among others):

switchpanel.c: In Funktion »getTile«:
switchpanel.c:321: Warnung: unbenutzter Parameter »panel«
switchpanel.c: In Funktion »makeWindowListArray«:
switchpanel.c:377: Warnung: unbenutzter Parameter »scr«
switchpanel.c:377: Warnung: unbenutzter Parameter »workspace«
2009-12-09 21:04:29 +01:00
Carlos R. Mafra
33c9e87692 Remove static function declaration from header file 2009-12-09 20:48:44 +01:00
Carlos R. Mafra
0a5febcada Remove unused function argument from randomPlaceWindow() 2009-12-09 20:35:13 +01:00
Nicolas Bonifas
41fdb79e28 Maximus: Take border into account
This patch fixes a minor bug in Maximus: the new window size didn't take the
 border into account. This bug was particularly visible with the
 "do not cover dock" option turned on.
2009-12-08 16:14:29 +01:00
Ralf Hoffmann
d74a90d1bf changed behavior when focusing new windows with autofocus enabled
New windows will only get focused if the mouse is on the same screen.
The code doesn't handle multiple heads but since it's just one screen
the function works as usual. Checking the head and assign the focus only
if the window is on the same head might be a good idea. Making the whole
stuff optional might be even better.
2009-12-08 16:14:29 +01:00
Ralf Hoffmann
fe8ab024af fixed wrong env setup when setting background
This patch fixes a problem with restarting Window Maker in multi-screen
environments. The code for setting the background by calling wmsetbg
changes the environment. In multi-screen setups the DISPLAY variable
becomes :0.0 instead of :0 (for example). The restarted Window Maker
process therefore only manages one screen.
2009-12-08 16:14:29 +01:00
Ralf Hoffmann
6c6e832c52 activate XGrabServer again
This patch fixes a small problem which only rarely occurs. If a
window is opened only for a very short time and closed right away, in
some circumstances the frame around it stays opened. It looks like
Window Maker doesn't get the destroy message. The XGrabServer call was
commented in the code so I activated it again which seems to prevent this
from happening. I think it actually make sense since the ungrab calls are
used anyway in the following code.
2009-12-08 16:14:29 +01:00
Carlos R. Mafra
13c2d523e2 Remove DRAWSTRING_PLUGIN reference from wconfig.h.in
DRAWSTRING_PLUGIN never appears anywhere else in the sources.
2009-12-08 16:14:29 +01:00
Carlos R. Mafra
e7cc15df71 Remove unused function getRImages()
Pointed out by Nicolas Bonifas.
2009-12-06 15:35:26 +01:00
Carlos R. Mafra
3db3f179d1 Remove unused src/menureader.c file 2009-12-06 15:35:26 +01:00
Carlos R. Mafra
5fa41941fe Remove unused wHackedUngrabButton()
Pointed out by Nicolas Bonifas.
2009-12-06 15:35:25 +01:00
Carlos R. Mafra
4c4d50c813 Remove unused function wIconSetHighlited()
There is no point in carrying unused functions for so long.

Pointed out by Nicolas Bonifas.
2009-12-06 15:35:25 +01:00
Carlos R. Mafra
8c5a7b287a Remove unused functions from src/pixmap.c
In case someone needs them in the future for some reason,
they can be restored from the git logs.

Pointed out by Nicolas Bonifas.
2009-12-06 15:35:25 +01:00
Carlos R. Mafra
347fbcc87a Remove unused function wWindowCheckAttributeSanity()
As pointed out by Nicolas Bonifas, wWindowCheckAttributeSanity() is
currently unused. Removing it saves 200 bytes:

  text    data     bss     dec     hex filename
  23476       0       8   23484    5bbc src/window.o.new
  23676       0       8   23684    5c84 src/window.o.old
2009-12-06 15:35:25 +01:00
Nicolas Bonifas
a2cb317f11 Remove useless NULL test
If menu is NULL we would have a null pointer dereference when initializing scr.

> Ie, why not move the assignment of 'src' to after the test?

I thought about this, but I checked the 3 different calls to
updateWorkspaceMenu (all in winmenu.c). They must all call
updateWorkspaceMenu with non-NULL pointers, so if we have a NULL
'menu' pointer then we obviously have a major problem and it is
probably better to crash here than to silently return and fail a
little latter.

[crmafra: edit changelog]
2009-12-06 15:32:30 +01:00
Nicolas Bonifas
391d5de79e 2 open() statements were not matched with close() statements in function fetchFile 2009-12-06 13:58:24 +01:00
Carlos R. Mafra
ad4358c605 Update German translation
Based on a patch from OpenSUSE whose author is unknown.
2009-12-01 14:17:50 +01:00
Nicolas Bonifas
2203b229b0 Fix the empty button in titlebar after going fullscreen bug (Debian bug #298873) 2009-11-17 01:42:15 +01:00
Carlos R. Mafra
4932433b95 Remove DEMATERIALIZE_ICON code
This animation is not as cool as the NORMAL_ICON_KABOON, so I don't
think having a choice here is justified. Let's remove this option
(it was not defined in wconfig.h.in by default) and keep using
the nicer NORMAL_ICON_KABOON.
2009-10-17 01:56:28 +02:00
Carlos R. Mafra
f9792a042a Remove SILLYNESS
This code makes wmaker a little bit bigger for no gain at all. I could
undefine SILLYNESS and forget it, but I actually also want a clean
source code to read. And the less code the better.

So now I won't get a different Info dialog on Christmas, but
my wmaker will also not carry around that code in the other 364 days
of the year.

As a result, wmaker gets ~1.7 % smaller

   text	   data	    bss	    dec	    hex	filename
 448043	  17424	   8200	 473667	  73a43	wmaker.new
 455340	  18360	   8328	 482028	  75aec	wmaker.old
2009-10-17 01:38:53 +02:00
Carlos R. Mafra
96b9b22cb2 Remove #ifdef SYS_SIGLIST_DECLARED constructs
SYS_SIGLIST_DECLARED was defined nowhere and it was
clearly some dead code.
2009-10-17 01:05:28 +02:00
Johann Haarhoff
1f1eb393f8 Mod+Wheel resize increment now respects size hints
Thanks to Iains patch which showed me how to access the window hints, I
now propose the following: The resize increment is set to the closest
multiple of the size hints larger than wPreferences.resize_increment.

This should fix Carlos' complaint about fixed-increment windows resizing
too "slowly", and it also fixes my complaint about the blank space below
the last line of an xterm.

Thanks to:
    Iain Patterson <wm@iain.cx>
2009-10-13 12:17:57 +02:00
Iain Patterson
bf88570a5f Respect size hints when resizing with wheel.
Use height and width increment when wheel resizing if size hints are
set on a window and meaningful height and width increments are
specified.
Windows which don't care about their resize increments will have height
and width increments set to 1.  For these windows - and windows without
resize hints at all - use the setting configured with ResizeIncrement.
2009-10-12 15:24:13 +02:00
Carlos R. Mafra
a3246cfe3b Remove remaining sound stuff from WPrefs etc
Let's remove the configuration options about "sound" from
WPrefs (as it was never fully functionall anyway) and from
configuration files.

Remove also the xpm and tiff icons.
2009-10-12 03:02:24 +02:00
Carlos R. Mafra
c5f027d811 WPrefs: trivial coding style fixes 2009-10-12 02:41:27 +02:00
Carlos R. Mafra
af8cec15e3 Remove repeated functions enclosed by #if 0
There are already working versions of these functions,
so let's remove these copies.
2009-10-12 01:02:19 +02:00
Carlos R. Mafra
15e37ff942 Remove #ifdef NETWM_HINTS constructs
NETWM_HINT is always defined in src/wconfig.h.in, so
let's remove it from there too.
2009-10-12 01:00:19 +02:00
Carlos R. Mafra
347e804bb6 A few trivial code style cleanups 2009-10-11 23:30:41 +02:00
Johann Haarhoff
a063338175 Mod+Wheel Window Resize
This patch adds the ability to resize windows with the mouse wheel
while holding the Mod key. This currently ignores wWindowConstrainSize
until I can figure out a way to repeatably resize windows with
fixed size increments (like xterm) using this method.

This also adds a slider to WPrefs to choose the increment with which
the wheel will resize a window.
2009-10-11 22:17:54 +02:00
Carlos R. Mafra
781b663341 HOWTO: The perfect Window Maker patch
This document is a very brief description about how you can
create a patch "the git way", so that it can be applied
easily with 'git am'.
2009-10-11 17:37:18 +02:00
Carlos R. Mafra
09140a82b9 Increase granularity of 'shrink/zoom' animation
Now it is a bit easier to actually enjoy the animation :-)
2009-10-10 19:55:57 +02:00
Carlos R. Mafra
87161c5e0c Remove MINIATURIZE_ANIMATION_DELAY_{Z,F,T} tests
We know that they are non-zero because we set their
values explicitly in wconfig.h.in, so there is no
point in checking them.
2009-10-10 19:30:04 +02:00
Carlos R. Mafra
cda27758bc Add function prototypes in action.h and include it in superfluous.c 2009-10-10 19:29:56 +02:00
Carlos R. Mafra
b014ef2770 Remove 'hiding' parameter from animateResize()
It was a bit pointless.
2009-10-10 19:03:12 +02:00
Carlos R. Mafra
e9309e1e39 Delete WINDOW_BIRTH_ZOOM and default to WINDOW_BIRTH_ZOOM2
WINDOW_BIRTH_ZOOM was a bit lame and it makes sense to not have
it at all. So remove the trailing "2" of WINDOW_BIRTH_ZOOM2 and
make it the only choice (you can #define it in src/wconfig.h.in).

Note that it uses the same algorithm as the animation to resize,
ie zoom, twist or flip. You can choose them in WPrefs.
2009-10-10 18:27:52 +02:00
Carlos R. Mafra
06d3360224 Remove 'ghost window move' code
GHOST_WINDOW_MOVE was not defined anywhere. Let's remove that
code.
2009-10-10 00:05:58 +02:00
Carlos R. Mafra
9d6728d3e7 Remove SPEAKER_SOUND dead code
SPEAKER_SOUND is defined nowhere, so this code was not being used
and I don't want its functionality anyway.
2009-10-09 23:59:37 +02:00
Carlos R. Mafra
2765bec3e4 Remove sound support
Two reasons for removing it:

    1) I won't ever want to hear useless sounds

    2) The sound support is a bit of a joke. The code is there but you have
       to hunt it somewhere else (not in any repository that I know of).
       In my 10 years of using wmaker, I never used it for this reason.
       Now I consider having no sound in Window Maker a feature, and I like
       it that way. So there is no point in carrying useless code around.

PS: There is still the code in WPrefs to be removed.
2009-10-09 20:04:47 +02:00
Carlos R. Mafra
7df49cce14 Clean up contrib/ folder
Let's remove the "single click" patch from there.
2009-09-24 23:53:03 +02:00
John H. Robinson, IV
21eb8456ba Updated documentation
Updated URIs
Removed stale/outdated information
Reformatted for 80 columns
2009-09-24 23:41:36 +02:00
Iain Patterson
bc3995bf6b Fix msgfmt error with Armenian translation.
msgfmt said:

hy.po:685: `msgid' and `msgstr' entries do not both end with '\n'

Fixed by adding newline as in original text.
2009-09-24 23:41:10 +02:00
Norayr Chilignaryan
7f457fa275 Window Maker armenian translation 2009-09-24 23:40:46 +02:00
Carlos R. Mafra
484bdbe7d4 Ansify function declarations
I've just noticed them en passant.
2009-09-24 23:40:39 +02:00
Martin Dietze
ef2f5a6f29 Fix automatic Debian builds 2009-09-24 10:13:44 +02:00
Carlos R. Mafra
12b6be768e swpanel: Fix focus issue when alt-tabbing
The problem was the following. While alt-tabbing from one
window to a xterm, wait for the xterm to be raised but
keep the alt key pressed. Now move the mouse cursor
over the xterm and release the alt key.

The result is a xterm in a zoombie focused state; its titlebar
has the focused color but xterm itself is not focused and does
not accept any input.

Fix this by reinstating the check for a NULL pointer from
wSwitchPanelHandleEvent() before changing focus. That function
detects if the mouse cursor moved over to the same window which
is currently being pointed out by the switchpanel, and returns
NULL in this case (the check for panel->current != focus fails).

Thanks to Paul Harris for reporting it!
2009-09-19 16:07:47 +02:00
Carlos R. Mafra
6a0120f014 Maximus: Some cleanups and bug fixes
Let's ignore hidden windows and also adjust the coordinates
a bit, to avoid ~2 pixels of overlap.

I thank Paul Harris for pointing out these bugs.
2009-09-19 16:07:03 +02:00
Carlos R. Mafra
0a0c2391de Maximus: Avoid a window list order issue
If we compute the maximus geometry in only one pass through
the window list, the order in which the windows appear in
the list can affect the outcome.

That is because before computing the intersections in the
y-projections we update the y coordinates from whatever window
which happened to change the new_y coordinate during the
previous x-intersection computations, but that may not be _the_
blocking window which decides the final positions in the y axis.
Therefore we may find that this "intermediate window state"
has a non-vanishing y-intersection with another one -- and
be blocked by it -- even though that should not be the case for
the final outcome.

So to avoid that we first scan through all the windows to decide
the final maximumized coordinates in the y axis. Only after that we
compute the x-coordinates.
2009-09-19 16:06:48 +02:00
Carlos R. Mafra
7a86f48f73 Fix --disable-verbose-compile
Remove an extra $(QUIET), as that was causing a few annoying
messages during the compilation of libraries.
2009-09-19 16:06:18 +02:00
Alexey Voinov
3953f53680 WINGs shared library generation
This patch modifies the linking of the WINGs libraries
to create a shared library. wmaker used to do this, but
it was dropped around wmaker-0.90/0.91.
The shared .so library is needed when compiling and running
the wdm display manager and any other programs which link
to libWINGs.

Submitted by: Gilbert Ashley
Origin: ALT/Sisyphus Linux
2009-09-19 16:06:05 +02:00
Carlos R. Mafra
92eff967a7 Maximus: Consider the full_maximize window attribute
When maximumizing a window which has the full_maximize attribute
set we have to consider two possibilities:

    1. If the new y coordinate is zero it means that no other
       window blocked its maximumization up to the top of the
       screen, so we want to put the titlebar outside.

    2. If the new y coordinate is not zero it means that another
       window in the current workspace blocked its way to y = 0.
       In this case we do nothing with the titlebar.

Note that there is another possible fine tunning which is not
addressed in this patch, which is to consider the resize bar.
2009-09-17 00:46:14 +02:00
Carlos R. Mafra
eaca92db50 Simplify wMaximizeWindow() a little bit
Let's avoid checking the existence of a border every time
we want to adjust the widths. So we'll always subtract the correction
factor, which is zero in case the window has no border.
2009-09-17 00:46:14 +02:00
Carlos R. Mafra
1a85719971 Increase the readability of SlideWindow()
It is easier to read the computations if the variables
have shorter names. At the same time it avoids reading
the struct array elements repeatedly, so as a bonus
misc.o gets 64 bytes (0.5%) smaller

[mafra@Pilar:wmaker.git]$ size src/misc.o.*
   text    data     bss     dec     hex filename
  11125       0    4104   15229    3b7d src/misc.o.new
  11189       0    4104   15293    3bbd src/misc.o.old
2009-09-17 00:44:36 +02:00
Alexey I. Froloff
5979162878 Fix race condition during workspace changes
When changing workspaces, after focusing new window, wmaker handles all
pending events.  If it receives another change-workspace combination,
you may end up with a workspace without any focused window.

Ctrf-F1 and Ctrl-F2 used to switch to 1st and 2nd workspaces.
Hold Ctrl and press F1 and F2 almost at the same time.

This patch ignores all change-workspace commands while workspace
change is in progress.

See also https://bugzilla.altlinux.org/show_bug.cgi?id=7230

[crmafra: Thanks to Alexey I. Froloff for the above explanation]
2009-09-15 20:14:55 +02:00
Carlos R. Mafra
306165775e Yet another trivial coding style cleanup 2009-09-15 20:06:04 +02:00
Carlos R. Mafra
c7f2a189c4 Fix the call to XChangeProperty() in 64-bit mode
The man page of XChangeProperty() says:

  "If the specified format is 32, the property data must be a
   long array."

And as we call it with format 32, the type of 'data' must
be 'long'. It happens to work nowadays in 32-bit architectures
because sizeof(CARD32) = sizeof(long), but that is no longer
true in 64-bit mode.

This patch was downloaded from
www.openbsd.org/cgi-bin/cvsweb/ports/x11/windowmaker/patches/patch-WINGs_wwindow_c
and I thank Alexey I. Frolov and Vladimir Nadvornik for helping me
to understand it on a wmaker-dev thread.
2009-09-15 12:52:14 +02:00
Carlos R. Mafra
ca2c1f900d Trivial coding style fix 2009-09-15 01:52:35 +02:00
Iain Patterson
18408fff93 Mac OS X-style window cycling.
For those not familiar with the way Macs cycle windows, the Command-Tab
sequence (Alt-Tab elsewhere) switches between DIFFERENT application windows
and Command-Grave (key above tab) switches between windows owned by the
SAME application as is currently focused.  So if you had three Safari and
two Finder windows open, and Safari had focus, Command-Tab would switch to
Finder; Command-Tab would switch back to Safari; Command-Grave would switch
to a different Safari window etc.

This patch implements "something like" the above by only populating the
switchpanel with windows matching the currently-focused WWindow's wm_class
when the new cycling mode is activated.  In practice this means you can
switch to The Next XTerm or The Next Firefox Window using this method.

The configuration names for these new shortcuts are GroupNext and
GroupPrev.  The patch tells WPrefs.app about them.  Of course switching to
The Next Window is still possible with the (unchanged) FocusNext and
FocusPrev keys.
2009-09-14 16:51:26 +02:00
Iain Patterson
5c46f48898 Support Xinerama in wmsetbg.
Allow wmsetbg to revert to pre-0.90.0 behaviour when choosing a
background image that is large enough to span several heads in a
Xinerama setup.  If the -X flag is passed to wmsetbg, the background
image will be stretched to fill the logical screen (as it would be by
default in older versions of wmsetbg) instead of being tiled across
screens.
2009-09-14 16:51:26 +02:00
Iain Patterson
567279b962 Pad workspace name display.
Shift the workspace name, shown when switching workspaces, by 32
pixels.  This is purely for aesthetic reasons.  It just looks better
(IMO) than having the name flush against the screen edge.
2009-09-14 16:51:26 +02:00
Iain Patterson
1a27b34160 Constrain switching workspace name to one head.
When switching workspaces, force the name to be shown entirely within
one head of a Xinerama display. Previously the name would span heads if
set to TOP, CENTER or BOTTOM alignment, and was hence hard to read when
the display comprised an even number of heads.
2009-09-14 16:51:26 +02:00
Carlos R. Mafra
9789cf3154 Add Maximus key back in WPrefs.app
Somehow I had forgotten to include this change in version 2
of the patch.
2009-09-14 16:51:26 +02:00
Carlos R. Mafra
513a509096 Fix the use of uinptr_t
Remove the additional cast to (int), as that makes no sense.
2009-09-14 16:51:26 +02:00
Alexey Voinov
f6645ac564 x86_64 mmx fixes
This patch combines two small patches which fix issues with x86_64 and mmx in
the configure script.

Submitted by: Gilbert Ashley
Author: unknown?
Origin: ALT/Sisyphus Linux, Alexey Voinov <voins@altlinux.ru>
2009-09-14 02:09:35 +02:00
Nicolas Bonifas
cf0f7d68d5 Un-maximize window inside current head
If the old_geometry coordinates were saved while the window
was in another xinerama head, use current coordinates as
the old ones to avoid making the window jump heads when
un-maximizing it.
2009-09-13 23:33:39 +02:00
Nicolas Bonifas
3106292f4b Maximus: Use unsigned int for width/height variables
And move its prototype to actions.h (and also that of
save_old_geometry()).
2009-09-13 23:32:15 +02:00
Nicolas Bonifas
e42586c712 Remove commented code in xinerama.c 2009-09-13 23:32:09 +02:00
Tamas TEVESZ
0a47a19b3e Remove bundled wrlib stuff
This patch removes bits and pieces of xmu that for some reason
have been bundled with wmaker. I can very well imagine that at the time
they were bundled, xmu was not, was not available everywhere, or
whatever.

I couldn't come across a system that doesn't have these things in its
system-supplied x libs, though i've been carrying this since january,
and my memory is quite flakey at times.

certainly nothing xorg is at danger, nor xfree86 dating back to at
least 3.3. i believe this stuff should be everywhere that calls itself
to be on par with x11r6.3 at the very least.

it would be incredibly useful if people having access to commercial
unixes could check this on things released in the past, say, 15 years.
i believe back then i had solaris 8+and sco openserver 5+ covered.
2009-09-13 21:40:47 +02:00
Nicolas Bonifas
e4fcd515fe Maximizing a resized window
When a maximized window is resized (either using wmaker or because the
application changed the window size), and you want to maximize it again,
you first have to unmaximize it (because wmaker thinks the window is still
maximized), and only then you can maximize it. The following patch
corrects this behaviour.
2009-09-13 19:17:59 +02:00
Carlos R. Mafra
4bce3e3805 Make left/right maximization work again
The patch "Clean up maximization and un-maximization logic" introduced
a regression wrt to the left/half maximization feature, due to a C
operator order precedence issue.
2009-09-13 18:32:43 +02:00
Carlos R. Mafra
cbd13dd95f Ansify function declaration 2009-09-13 16:07:54 +02:00
Carlos R. Mafra
18c7a20136 Delete stale .cvsignore files 2009-09-13 12:59:25 +02:00
BERTRAND Joel
816fee1b68 Fix miniwindows auto-arranging bug
With this patch, minimized windows do not reshuffle anymore.

See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=361241
where Martin Hinsch reported:

"The behaviour of icons (minimized applications) is severely broken when
 automatic placement is switched on.
  * When switching the workspace icons often stick thereby covering (and
    hiding) icons on the workspace one is switching to.
  * After minimizing an application, clicking (singly or doubly) on one of
    the icons causes all of them to reshuffle, usually in a way that the
    icon in question changes its place (which is extremely annoying).
  * Icon placement ignores the dock so that icons disappear behind
    it/cover it.

 All of these suddenly appeared about a year ago (I think with 91.0). The
 problems are not architecture-specific since they occur in exactly the
 same way on my pentium machine. Wiping the complete configuration (rm -r
 ~/GNUstep) did not make a change either."
2009-09-11 10:24:54 +02:00
Andreas Tscharner
5b93254d0f Fix compilation failure
This fixes a compilation failure with gcc-4.3.4, where it complains

nxpm.c: In function RGetImageFromXPMData:
nxpm.c:99: error: expected expression before ] token
...
2009-09-09 22:18:34 +02:00
Alexey Voinov
62bf6d17b5 Fix session saving for apps with shared appicons
This patch comes from
http://git.altlinux.org/people/raorn/packages/WindowMaker.git
2009-09-06 17:12:24 +02:00
Carlos R. Mafra
8efc490361 Reduce the number of simultaneous inotify events
There is no point in having a buffer capable of 512 simultaneous events,
as it will typically be only 1. But increase the value for the length
of the path + filename to 64 (which is a reasonable size for a
typical /home/something/GNUstep/Defaults/WMRootmenu filename).
2009-09-04 15:02:00 +02:00
Alexey Voinov
5f5b1df7d2 Christmas does not last forever
From https://bugzilla.altlinux.org/show_bug.cgi?id=3480

  "If you open "Info Panel" on 25 dec (Christmas), the
   "Christmas tree" is shown. And after that on all days
    Christmas tree is shown. (Until you restart WM, i think)"

Taken from http://git.altlinux.org/people/raorn/packages/WindowMaker.git
2009-09-03 23:56:33 +02:00
Carlos R. Mafra
88ab8b74b4 wmrlib: Avoid code duplication
We can put common repeated code into a helper function, and
increase readability a bit.
2009-09-03 23:56:33 +02:00
Alexey I. Froloff
2ccc8e4a79 Remove alloca(3)
And use malloc() instead.

See "Dropped useless use of alloca(3)" from
http://git.altlinux.org/people/raorn/packages/WindowMaker.git
2009-09-03 21:10:48 +02:00
Alexey I. Froloff
8490e31fde Atomic save for session
This patch is part of "Atomic saves for history and session" from
http://git.altlinux.org/people/raorn/packages/WindowMaker.git
2009-09-03 20:20:12 +02:00
Alexey Voinov
05720d9707 Add history to some dialog boxes
This patch adds history to some dialog boxes. To use it replace %a with
%A in menu file (like in "Run..." menu item). You can specify third
parameter to %A to use different histories for differen dialogs.

All history files is kept in ~/GNUstep/.AppInfo/WindowMaker/ and the number of
history lines controlled by DialogHistoryLines parameter (one for
all dialogs) defaults to 500 lines.

It also adds Tab completion.

Origin: ALT/Sisyphus Linux, Alexey Voinov <voins@altlinux.ru>
2009-09-03 15:44:11 +02:00
Sebastien Bauer
f8dd3dc49e Add option to allow starting DockApps with a single click
This patch is from the contrib directory. It adds an option to allow starting
DockApps with a single click. It's a handy option that adds only a few lines to
the code.

It is a good feature patch example because it includes modifications
to the WPrefs application so that the feature can be easily enabled or
disabled. The one-click ability allows wmaker to integrate more seemlessly with
programs like ROX-Filer which can be configured to use single or double click
actions.

The README in the contrib/ directory says,

author:
Sebastien Bauer <seb_bauer@bigfoot.com>
John Morrissey <jwm@horde.net>

updated for Window Maker 0.65.0 by:
Daniel Richard G. <skunk@graphics.lcs.mit.edu>

updated for Window Maker 0.80.2 by:
Martial Daumas <martial@nasgaia.org>

update for 0.80.2+ by:
steve lion <steve.lion@verizon.net> and vlaad
2009-09-03 15:19:10 +02:00
Carlos R. Mafra
c04a2caeab Clean up maximization and un-maximization logic
We should not try to un-maximize the windows from inside
the function wMaximizeWindow(), as that makes no sense.

If the window is already maximized then we don't call
wMaximizeWindow() anymore and call wUnmaximizeWindow()
instead, which will use the old geometry regardless
of which maximization is active (horizontal, vertical,
maximus, etc). And the old geometry now is also saved
when we enter wMaximizeWindow().

So when we call wMaximizeWindow() or wUnmaximizeWindow()
we really mean "maximize to the specified state" or
"go back to whatever old geometry coordinates we had before".
2009-09-02 04:42:19 +02:00
Carlos R. Mafra
cf62d1591f Maximus: Tiled Maximization
This patch introduces the "tiled maximization" feature, a.k.a. Maximus.

By pressing the keyboard shortcut associated with Maximus, the focused
window will be maximized to the greatest area satisfying the constraint
of not overlapping existing windows.
2009-09-02 04:42:05 +02:00
Daniel Déchelotte
7857f297ea Fix for omnipresent AppIcon bug at startup
Bug overview: right after start up, omnipresent AppIcons (living in the Clip)
    are displayed but non-functionnal.

    How to reproduce it: place two AppIcons in the Clip, make the first one (A)
    omnipresent and leave the second one (B) as is. Make the Clip "autocollapse".
    Switch to the second workspace and restart wmaker. Wmaker starts in the first
    workspace; the Clip is closed (its text color corresponds to the closed state,
    AppIcon B is not shown). However, AppIcon A is displayed.  Moreover, A does
    not react when the Clip expands or collapses.  Finally, a click on A makes it
    disappear. Fortunately, changing to another workspace fixes the problem
    definitively.

    Explanation and correction: internally, wmaker maintains as many clips as
    workspaces. When the user switches to another workspace, the omnipresent
    AppIcons are moved to the new "current" clip. In the situation above (trying
    to reproduce the bug), when wmaker restarts, the omnipresent AppIcons are
    restored in the second workspace, whereas the first workspace is active. In
    the previous code, a "hack" (calling XMapWindow()) unconditionally displayed
    the omnipresent AppIcons. The proposed patch makes sure the omnipresent
    AppIcons are moved to the first workspace on wmaker startup.
2009-09-02 00:17:27 +02:00
Tamas TEVESZ
b37e065252 Clean up #ifdef mess
Use enum instead of #ifdef maze for enumerating keybindings
2009-09-01 14:31:08 +02:00
Daniel Déchelotte
d7183d33b4 Gobble "spurious" EnterNotify events when moving an appIcon or a dock
This is a bug fix. Bug overview: if an AppIcon is moved rapidly over a Clip
    set to auto-expand, the latter may erroneously auto-expand afterwards.

    How to reproduce it: set a Clip to auto-collapse, and make sure it contains a
    (random) AppIcon, so as to easily visualise its open/close state. Now move
    rapidly an AppIcon over the Clip. Try to move it so fast that the cursor
    sometimes is out of the AppIcon's tile. Then, replace the AppIcon out of the
    Clip.

    Explanation and correction: if, while the AppIcon was being moved, the mouse
    cursor entered at least once in the Clip's tile, the latter is going to
    receive an EnterNotify event (after the AppIcon is replaced) and thus expand
    automatically after the relevant delay. The solution is to simply "gobble"
    (i.e., ignore) all EnterNotify events when moving an AppIcon.
2009-09-01 14:12:55 +02:00
klaasvakie
2ed9c12ee5 Fix half_scr_width calculation
Moved the half_scr_width calculation to after the

usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True);

call. This fixes the problem where windows that get "half screen
maximized" cover the dock or clip.
2009-09-01 13:57:58 +02:00
Carlos R. Mafra
229b6984de Use half_scr_width instead of computing it each time
Let's use

    half_scr_width = (usableArea.x2 - usableArea.x1)/2;

to shorten the expressions in the left/right half maximize
code.
2009-08-30 16:28:23 +02:00
Carlos R. Mafra
a1f35d7f5b Increase the readability of wUnshadeWindow() and wShadeWindow() a little bit
Instead of open coding the animation routines in the function bodies,
put them in a helper function called shade_animate(wwin, what), whose
second argument can be SHADE or UNSHADE.
2009-08-30 00:58:18 +02:00
Carlos R. Mafra
34be9d7816 Trivial coding style changes
Some trivial style changes I made while reading src/placement.c
2009-08-30 00:51:27 +02:00
Tamas TEVESZ
9af6316d1d k&r->ansi some stuff
ansify and "fix" function pointer declarations
2009-08-29 21:49:22 +02:00
Johann Haarhoff
6924454836 Left Half / Right Half Maximize
This adds Left Half / Right Half Maximize capability to WindowMaker.
It allows you to maximize a window to only the left or right half
of your screen.

It is useful on widescreen displays where one might to bring up
two different windows side-by-side.
2009-08-29 21:49:16 +02:00
Carlos R. Mafra
328251c68a Define TITLEBAR_HEIGHT in default configuration file
...and use it in src/placement.c

And while we are at it, clean up a bit the visual of wconfig.h.in
2009-08-28 21:21:03 +02:00
Carlos R. Mafra
2f87d01a41 Make wmaker 0.11% smaller by avoiding code duplication
This patch cleans up an obvious code duplication case in the
different "placement" algorithms.

Avoid this needless repetition by using a helper function,
which in turn lets those functions a bit easier to read and
also makes wmaker 0.11% smaller :-)

[mafra@Pilar:wmaker.git]$ size src/.libs/wmaker.*
   text    data     bss     dec     hex filename
 619824   19160    8544  647528   9e168 src/.libs/wmaker.new
 620552   19160    8544  648256   9e440 src/.libs/wmaker.old
2009-08-28 20:18:18 +02:00
Martin Dietze
22730876e4 Nightly Build script can now deal with testing and unstable branches. 2009-08-28 19:04:29 +02:00
Gilbert Ashley
be08535ab4 Show app name in Kill Application dialog
The "Kill Application" dialog window doesn't always show the
application name when killing DockApps. It shows its wm_class
instead, which is not always the same as the app name.

This patch allows the Kill Application dialog window to show
the application name in the window -- as expressed by using the
basename of the path to the application.

[crmafra: Added wtokensplit() to get only the app name]
2009-08-27 16:35:42 +02:00
Vladimir Nadvornik
108127f0b5 Miscellaneous fixes from OpenSuse
These are some of the fixes sent to the wmaker-dev list by
Vladimir Nadvornik, with minor modifications to address Dan
Pascu's concerns.

Original-post: http://lists.windowmaker.info/dev/msg00293.html
2009-08-27 16:34:44 +02:00
Carlos R. Mafra
6d75291e1d Add config option to supress focus requests across workspaces
In commit d6c134f420 ("Do not switch
workspace to follow new windows in others") the default behavior
was changed, and workspace switching to follow focus requests was
strictly forbidden.

Although that seems to be a sane thing to do by default, that raises
concerns about whether Window Maker could be more flexible in that
respect -- allowing the user to choose which applications are or
are not allowed to do that.

This patch adds such configuration, located in the "Advanced Options"
submenu of the top-level "Attributes" menu.
2009-08-26 17:53:08 +02:00
Martin Dietze
ca60620f50 Adapted nightly build script to coexist with new 'next' branch. 2009-08-26 15:51:13 +02:00
Martin Dietze
a9aeefbe70 Fix NULL pointer dereference
Some weird applications like Safari for Windows running on CXOffice
or some applications running on Wine were causing wmaker to crash.
So let's not rely on a window's `frame' property to be not NULL in
src/wmspec.c.

Original-post: http://lists.windowmaker.info/dev/msg00161.html
See-also: http://lists.windowmaker.info/dev/msg00222.html
2009-08-25 01:10:00 +02:00
Martin Dietze
d6c134f420 Do not switch workspace to follow new windows in others
New windows should only be focused if they are in the current workspace.
Not performing this check can lead to WM switching workspaces if a
window is opened which:

   (a) is configured to appear in a particular workspace

and

   (b) sends a _NET_ACTIVE_WINDOW message to give focus to
       something, e.g. a sub window.

This behaviour was observed with firefox if a session with more
than one tab open was restored at startup because:

 "If a Client wants to activate another window, it MUST send a
   _NET_ACTIVE_WINDOW client message to the root window:"

Original-post: http://lists.windowmaker.info/dev/msg00442.html

[crmafra: Added comment]
2009-08-25 00:47:37 +02:00
Martin Dietze
442e3876c6 Add debianisation code and automatic build script 2009-08-24 11:55:20 +02:00
Martin Dietze
19f110d26e Add two menu files from the Debian package 2009-08-24 11:55:20 +02:00
Martin Dietze
3f6ae395ce Add GLOBAL_DEFAULTS_SUBDIR and fix a syntax error in wmlib/Makefile.am 2009-08-24 11:55:20 +02:00
Martin Dietze
ba027149bd Up the version number for the GIT version to 0.93.0-pre 2009-08-24 11:55:20 +02:00
Tamas TEVESZ
f893728d2d Fix format strings 2009-08-23 21:10:02 +02:00
Alexey Voinov
01dddf00c8 swpanel: Consider also the release of FOCUSPREV
The switch panel was not being destroyed with the realease of
FOCUSPREV, only with FOCUSNEXT. Fix this.

One can reproduce this bug as follows.

In the "Keyboard Shortcut Preferences" of WPrefs set "Focus next window"
to e.g. "Alt+Tab" and "Focus previous window" to "Ctrl+Tab".
The switchpanel is not destroyed if we release "Ctrl+Tab" but it
is upon releasing of "Alt+Tab".

Retrieved-from: http://git.altlinux.org/people/voins/packages/?p=WindowMaker.git;a=commit;h=51c95a55c9310f499b1fdeca138106ca7bf74423

[crmafra: Commit log]
2009-08-23 20:03:21 +02:00
Carlos R. Mafra
fe736e849c Remove LITE config option
Why?

     1. The reason for its existence is to "Disable some stuff that are
        duplicated in kde", and I don't think I will ever need that.
        Furthermore, even the description in the configure script reads
        "disable some stuff (dont use it)".

     2. It makes the code uglier at some places, e.g.,

         #ifdef LITE
                {
         #if 0
                }
         #endif
         #else

                if (!wRootMenuPerformShortcut(event)) {
         #endif

        which by the way is the ugliness which motivated this patch.

     3. Does not even compile anymore. It fails with

          CC dockedapp.o
          CC event.o
       event.c: In function 'executeButtonAction:
       event.c:711: error: WScreen has no member named root_menu
       event.c:712: error: WScreen has no member named root_menu
       event.c:713: error: WScreen has no member named root_menu
       event.c:715: error: WScreen has no member named root_menu
       event.c:720: error: WScreen has no member named switch_menu
       event.c:721: error: WScreen has no member named switch_menu
       event.c:722: error: WScreen has no member named switch_menu
       event.c:724: error: WScreen has no member named switch_menu
       make[2]: *** [event.o] Error 1
       make[1]: *** [all] Error 2
       make: *** [all-recursive] Error 1

       But instead of fixing this (it would be trivial), let's get
       rid of the whole ugliness altogether.
2009-08-23 18:45:30 +02:00
Carlos R. Mafra
874b0fadf5 Add spaces to gcc 'case' range extension
According to the gcc manual, that is safer.
2009-08-23 17:28:04 +02:00
Carlos R. Mafra
31f16389f6 Fix function prototype declaration
It is safer if the functions are declared with proper
prototype specifications.

This patch addresses some of the warnings with -Wstrict-prototype,
like this:

event.c:105: warning: function declaration isn't a prototype
2009-08-23 15:15:29 +02:00
Pedro Martelletto
2706f7217c WPrefs: Fix crash due to wtokenfree() memory leak fix
After the fix to avoid a memory leak in wtokenfree(), WPrefs crashes
when opening the 'Applications Menu Definition' dialogue.

The problem is that WPrefs code relied on the fact that the first token
in the array would not be free'd by wtokenfree(), a misbehaviour which
is correctly addressed with this patch.

Retrieved-from: http://www.mail-archive.com/ports@openbsd.org/msg12731.html

[crmafra: small changes in the commit log from the webpage]
2009-08-22 20:51:47 +02:00
Tobias Stoeckmann
e522ca734d WINGs: Fix memory leak in wtokenfree()
wtokenfree() does not free the first entry of an array.
If count is 1 then

   while (--count)

will be

   while (0)

and the inner body of that while-loop will not be entered.
Therefore a memory leak happens every time wtokenfree() is called.

Retrieved-from: http://paldium.homeunix.org/tobias/wmaker/patches/

[crmafra: This patch, altough correct, breaks WPrefs.app, which will be
fixed by the next patch. ]
2009-08-22 20:40:27 +02:00
Nicolas Bonifas
3a0eb643d9 swpanel: Start with the first window when all are minimized
When all windows are minimized, the switch panel cursor is
initially on the second window in the list. With this patch
it will be on the first window.
2009-08-22 13:03:56 +02:00
Carlos R. Mafra
f79379c090 swpanel: Fix stacking issue with swpanel escape handling
Daniel Déchelotte reported one problem with the escape handling in
the switchpanel:

   "Start with two windows: a fullscreen one, and a smaller window
    that appears above the fullscreen one. With the mouse, focus the
    bigger window. Start alt-tabbing, then press Escape. The bigger
    window will then be focused (good) *and raised* (small problem)."

Fix this by adding a test for the escape key before calling
raiseWindow().
2009-08-22 03:08:05 +02:00
Carlos R. Mafra
001bc28037 swpanel: Factor out if (swpanel) test
We can remove redundand tests in each "case:" inside the
switch if we do it in the beginning.
2009-08-22 03:08:05 +02:00
Carlos R. Mafra
203eba8937 swpanel: Clean up "case ButtonRelease"
Get rid of 2 tabs indentation by removing a
not-strictly-necessary temporary variable.
2009-08-22 03:08:05 +02:00
Carlos R. Mafra
d27e43e6b5 swpanel: Clean up StartWindozeCycle() a bit more
We can put the test for 'newFocused' inside change_focus_and_raise()
to clean up the code a little bit.
2009-08-22 03:07:34 +02:00
Tobias Stoeckmann
1db15a3543 Fix multiple errors in findfile.c
Problems:

1.

  During expansion of path, the resulting path can overflow the supplied
  area of PATH_MAX+2 (buffer as well as buffer2). A tampered environment
  variable can be used to modify program flow.

Proof:
      [note: wmaker has been compiled with propolice]
      $ export A="[tested with 4096x A]"
      $ GNUSTEP_USER_ROOT="\$A\$A/\$A/\$A/" wmaker --for-real
      *** stack smashing detected ***: wmaker terminated
      Aborted

2.

  Way too many functions handle a return value of NULL for wexpandpath
  improperly, resulting in segfaults (and maybe other problems). To
  prove the existance of these issues:

Proof:
      $ GNUSTEP_USER_ROOT=~nouser wmaker --for-real
      wmaker error: could not get password entry for user nouser: Success
      Segmentation fault

Solution:

     hard exit with error message about what is going on.

3.

  The improper parsing of environment variables can lead to expansion
  of path names that were not intended to be expanded.

     (a) If a string like "$(var" is found, Window Maker tries to expand "var"
     	 (environment variable) although the syntax is wrong.

Proof:

      $ export PROOF=foo
      $ GNUSTEP_USER_ROOT=/\$\(PROOF wmaker --for-real
      wmaker warning: could not find user GNUstep directory (/foo/Defaults/WindowMaker).

      (b) If the variable out of a) cannot be resolved, a closing bracket will be
      	  added.

Proof:

      $ unset PROOF
      $ GNUSTEP_USER_ROOT=/\$\(PROOF wmaker --for-real
      ./wmaker warning: could not find user GNUstep directory ($(PROOF)/Defaults/WindowMaker).

Author: Tobias Stoeckmann
Retrieved-from: http://paldium.homeunix.org/tobias/wmaker/
Submitted-by: Gilbert Ashley <amigo@ibiblio.org>
2009-08-21 12:13:12 +02:00
Daniel Déchelotte
c970c94f82 Remove useless tests
There is no point in checking

      if (dock_state)

if the function would have already returned with
the check if(!dock_state) right above.

Retrived from http://yo.dan.free.fr/wmaker.phtml.en

[crmafra: wrote the commit message]
2009-08-21 04:57:08 +02:00
Carlos R. Mafra
570df8316d Fix use of uninitialized variable
Gcc-4.3.2 warns:

texture.c: In function 'wTextureMakeFunction':
texture.c:393: warning: 'fallbackColor.pixel' is used uninitialized in this function

Based on a patch by Vladimir Nadvornik.
2009-08-21 02:20:27 +02:00
Vladimir Nadvornik
21b5df494b Less strict font requirements
Fixes bug:

  https://bugzilla.novell.com/show_bug.cgi?id=154758
2009-08-21 02:10:50 +02:00
Vladimir Nadvornik
e113ec10c9 Fix findBestIcon()
This patch fixes the issue described here:

https://bugzilla.novell.com/show_bug.cgi?id=371974
2009-08-21 01:54:26 +02:00
Daniel Déchelotte
95a576bd62 Fix "smart" placement bug when there are shaded windows in other workspaces
Bug overview:
    New windows are sometimes mis-placed when the "smart" algorithm is used.

How to reproduce it:
    be sure (with WPrefs.app, for instance) to use the so-called "smart"
    window placement algorithm. In an empty workspace, open a first window
    (for instance, an xterm). The window should appear at the upper left corner.
    Shade it (hide its contents below its title bar by double-clicking on it)
    and select another empty workspace. Open another window. Instead of placing
    it at the exact same place as the first window, wmaker places the new
    window a little bit lower, or frankly to the right.

Explanation and correction:
    when placing a new window, wmaker avoided all shaded windows, instead of
    only avoiding the shaded windows on the active workspace.
2009-08-20 23:59:41 +02:00
Daniel Déchelotte
3f7110b120 Fix focus issues with the switch panel and auto-focus
1. Setup two windows in a workspace, one at the center and the
   other at a corner. Move the mouse to the center of the screen, so
   that the focus goes to the center window. Now, with the help of the
   keyboard (with Alt-tab, typically), try and switch the focus to the
   other window. In doing so, the switch panel shows up, gives the
   focus to the other window and then disappears. However, its
   disappearance make it seem to wmaker that the mouse has just
   entered the center window, so wmaker gives the focus to that
   window again.

   2. It is a lit bit more involved. "Raise window when switching
   focus with keyboard" needs to be set. In a given workspace, maximize
   a first window A, then setup "above" window A two windows B and C
   (one in the upper left corner and the other one in the lower right
   corner, for example). Move the mouse so as to give the focus to
   window B. Press the Alt key, hit the key tab once (window A moves
   up to the "top"), then another time (window C is then selected).
   Eventually relase the Alt key: window B is given the focus again.

Correction: it is a matter of ignoring some (EnterNotify) events
when the switch panel is active or has just been used.
2009-08-20 22:07:10 +02:00
Carlos R. Mafra
f9bb2a428a Escape key handling in switchpanel
Pressing the escape key (ESC) while the switchpanel is active
cancels it and gives the focus back to the window which had it
before the switchpanel was invoked.

If all windows are minimized before the switchpanel was called,
they will continue to be if ESC is pressed.

In other words, pressing ESC is like going to the parallel universe
where you never entered the switchpanel in the first place.

Based on a patch by Nicolas Bonifas from 17.08.2009.
2009-08-20 16:00:26 +02:00
Carlos R. Mafra
333dbf5418 Use helper function in StartWindozeCycle()
This way we avoid code duplication in 6 places.

This changes the previous behavior of the first
instance because the helper function has an extra

       CommitStacking(scr);

 compared to the original code. But it should not
 hurt to have it.
2009-08-20 15:46:45 +02:00
Carlos R. Mafra
a9238c99b9 Clean up coding style in StartWindozeCycle()
No functional changes were made apart from
setting the various KeyCode variables at the
same time as defining them.
2009-08-20 15:09:07 +02:00
Carlos R. Mafra
4a041b6f0a Clean up StartWindozeCycle()
We can get rid of one overall tab by moving the

   if(swpanel)

test -- which was done everytime in each individual case --
to the beginning, therefore encompassing all cases.
2009-08-20 04:07:15 +02:00
Carlos R. Mafra
688a56e8ab Change to the linux kernel coding style
for arq in `git ls-files *.c`; do
    echo $arq;
    indent -linux -l115 $arq;
    done

The different line break at 115 columns is because
I use a widescreen monitor :-)
2009-08-20 00:59:40 +02:00
Carlos R. Mafra
59fc927dc9 Make drawIconProc() static
It is used only inside src/dialog.c
2009-08-20 00:57:03 +02:00
Carlos R. Mafra
066af13b5c Clean up case switching in handleKeyPress()
GCC has an extension to deal with ranges within case statements.
Let's use it to make the code more readable and ~5% smaller,

[mafra@Pilar:wmaker.git]$ size src/event.o.*
   text    data     bss     dec     hex filename
  13087       0    1056   14143    373f src/event.o.new
  13711       0    1056   14767    39af src/event.o.old
2009-08-19 22:11:15 +02:00
Carlos R. Mafra
e2d8cbe238 Remove unsigned type from 'mask'
gcc-4.3.2 warns:

    defaults.c: In function 'getModMask':
    defaults.c:2586: warning: comparison of unsigned expression < 0 is always false

    The line in question is

        if (mask < 0)

    and 'mask' is the return of wXModifierFromKey() which is an 'int' and can
    indeed return a negative value (see src/xmodifier.c), so let 'mask' be
    an 'int' too.
2009-08-18 16:28:43 +02:00
Carlos R. Mafra
cb31fd374c Sanitize calling sites of wDefaultsCheckDomains()
There is no point in having parameter in wDefaultsCheckDomains() and
not using it, so let's simply remove the parameter altogether and
avoid silly-looking things like

    wDefaultsCheckDomains("bla");
2009-08-18 16:20:18 +02:00
Carlos R. Mafra
f4fd88b8a9 Make loop variable be unsigned int
gcc was complaining in a few places things like:

defaults.c:890: warning: comparison between signed and unsigned

so let's just make the loop counting variables be unsigned, as
the never get negative anyway.

I also spotted other two variables which can be unsigned too.
2009-08-18 16:19:48 +02:00
Carlos R. Mafra
f36ab39680 Fix variable shadowing
gcc-4.3.2 warns:
defaults.c:3136: warning: declaration of 'index' shadows a global declaration
/usr/include/string.h:309: warning: shadowed declaration is here

and in a few other places too. Fix this by renaming 'index' to 'widx'.
2009-08-18 16:17:28 +02:00
Carlos R. Mafra
0a32ecf1fe WMCreateFont: Add missing wfree()'s
I removed (forgot) them when in commit ee28b0257a ("Avoid returning
font=NULL in WMCreateFont()"). Add them back.
2009-08-18 04:33:39 +02:00
Carlos R. Mafra
9baff1363c handleKeyPress: Fix shadowing of global 'index' variable
GCC warns:

event.c: In function 'handleDestroyNotify':
event.c:676: warning: declaration of 'index' shadows a global declaration
/usr/include/string.h:309: warning: shadowed declaration is here
event.c: In function 'handleKeyPress':
event.c:1435: warning: declaration of 'index' shadows a global declaration
/usr/include/string.h:309: warning: shadowed declaration is here

So let's rename "index" to "widx".

Note that there is a more serious shadowing in this same function,

event.c:1686: warning: declaration of 'wwin' shadows a previous local

but this is more complicated to solve.
2009-08-18 00:56:09 +02:00
Carlos R. Mafra
f18567db9a inotifyHandleEvents: Reduce buffer size to avoid huge memory consumption
inotifyHandleEvents() was allocating a buffer of size

 (sizeof(struct inotify_event) + FILENAME_MAX)*1024

where FILENAME_MAX is #defined to be 4096 in stdio_lim.h, therefore
it was more than 4 MB!

Reduce it by using 16 instead of FILENAME_MAX and 512 instead of 1024.

Now valgrind does not complain about things like

Invalid write of size 8
 at 0x42002F: inotifyHandleEvents (event.c:323)
 by 0x7FF00020F: ???
 Address 0x7febfc148 is on thread 1's stack

I also made some small coding style changes.
2009-08-18 00:39:45 +02:00
Carlos R. Mafra
be0d694dc2 real_main: Use setenv() instead of putenv() in remaining places
It simplifies the code a bit.
2009-08-17 22:42:38 +02:00
Carlos R. Mafra
6310e40d47 real_main: Use setenv() instead of putenv()
When investigating possible memory leaks with 'valgrind' I noticed
this leak report:

 602 bytes in 13 blocks are definitely lost in loss record 77 of 128
    at 0x4C2362E: malloc (vg_replace_malloc.c:207)
    by 0x4576ED: wmalloc (memory.c:88)
    by 0x45B4F7: wstrconcat (string.c:214)
    by 0x426FC2: main (main.c:608)

which happens here,

    str = wstrconcat("WMAKER_BIN_NAME=", argv[0]);
    putenv(str);

There is a comment further below (in another context)

/* return of wstrconcat should not be free-ed! read putenv man page */

so this leak report is probably a false positive anyway. However,
https://www.securecoding.cert.org/confluence/display/seccode/POS34-C.+Do+not+call+putenv%28%29+with+a+pointer+to+an+automatic+variable+as+the+argument
has some nice discussion about putenv() and after reading it I decided to
use setenv() instead, making 'valgrind' happy along the way. It also
makes the code a bit simpler, avoiding a call to wstrconcat().

I also changed the name of another variable called 'str' to 'pos', just
in case.
2009-08-17 22:19:58 +02:00
Carlos R. Mafra
7a84127a27 Fix improper use of function sentinel
This patch addresses this warning of gcc:

wfontpanel.c: In function 'listFamilies':
wfontpanel.c:588: warning: missing sentinel in function call

Fix it by using the 'NULL' pointer instead of 0 (zero) as the
sentinel.

For more information, see
http://www.linuxonly.nl/docs/2/2_GCC_4_warnings_about_sentinels.html
in particular,

   "On most systems, there is no difference between 0 and (char *)0.
    On 64 bit systems, however, the integer 0 is 32 bits and the
    pointer 0 is 64 bits. The compiler does not know whether it is
    an integer or a pointer, and defaults for the integer. This will
    not clear the upper 32 bits and the function will not stop
    scanning its parameters."

Note that here in my 64-bit Mandriva I don't need to cast (char *)NULL.
2009-08-17 18:13:58 +02:00
Carlos R. Mafra
288853e44f WPrefs: Remove unused function updateThemeList() 2009-08-17 17:44:00 +02:00
Carlos R. Mafra
09a8911b6f Remove unused variables
GCC -Wall complains about them.
2009-08-17 17:35:48 +02:00
Carlos R. Mafra
ceeca912cd Make compilation even less verbose
Add "-s" flag to MAKEFLAGS if --disable-verbose-compile
is enabled.
2009-08-17 16:49:22 +02:00
Carlos R. Mafra
7a3b139dcb Remove prototype of unused function StartLogShell 2009-08-16 11:14:40 +02:00
Tamas TEVESZ
e2b6a85e80 Fix buffer overflow in SendHelperMessage()
The following fixes a buffer overflow in SendHelperMessage() which i
started seeing recently on x64.
2009-08-16 01:05:23 +02:00
John H. Robinson, IV
38074e7bd5 Remove unused StartLogShell function.
Based upon a patch by Tobias Stoeckmann

Small code size reduction,

   text    data     bss     dec     hex filename
 620412   19144    8544  648100   9e3a4 src/.libs/wmaker
 621347   19152    8544  649043   9e753 src/.libs/wmaker.old
2009-08-16 00:35:54 +02:00
Tobias Stoeckmann
f516213bf3 Check for argc==0 when calling wtokensplit()
The WINGs-function wtokensplit does not set argv to NULL if no string has been
split - instead argc is set to 0.

You can only observe this issue if you compile Window Maker without any
optimization:

compile Window Maker with CFLAGS=""
run Window Maker and save a session
change session-file and replace a 'command xyz' line with 'command " "'
restart Window Maker
watch "Fatal error"-message

Retrieved-from: http://paldium.homeunix.org/tobias/wmaker/
Submitted-by: Gilbert Ashley <amigo@ibiblio.org>
2009-08-16 00:16:58 +02:00
Iain Patterson
bbc52564d0 xinerama switchpanel corruption fix
This is a small patch to fix an issue with the switchpanel and a large number
of windows which happens only on a Xinerama setup.

When the number of open windows is so large that displaying all of them would
cause the switchpanel to be too wide for the screen, the panel is supposed to
shrink and scroll to accomodate them all.

In Window Maker 0.92.0 this works for single head displays but not for
Xinerama. The panel extends to the next head and gets garbled. This patch fixes
the issue by correctly constraining the panel to the head with the cursor.

Submitted-by: Gilbert Ashley <amigo@ibiblio.org>
2009-08-16 00:06:31 +02:00
David Benbennick
3e9aae7a91 Fix mixing pixels when maximizing borderless windows
A minor bug has been bothering me for a long time. When you maximize a
borderless window in Window Maker, the window ends up too narrow and too short
by two pixels.

Submitted-by: Gilbert Ashley  <amigo@ibiblio.org>
2009-08-15 23:59:45 +02:00
Samir SAADA
9fa4fbef91 Fix workspace limit segfault
wmaker keeps the names of all workspaces together in
the string 'buf' with fixed length of 1024, therefore
allowing buffer overflows if the number of workspaces
is big enough.

For the default names "Workspace X" (from 1 to 9)
and "Workspace XX" (from 10 to 99) etc, the approximate
number of workspaces necessary to make the buffer
overflow occur is 80, because

(11*9) + (71*12) + 80 = 1031

The fix is to set the size of 'buf' as
the maximum number of workspaces times their maximum
name length.

The problem was reported by John H. Robinson in the wmaker-dev
list ( http://lists.windowmaker.info/dev/msg00214.html ):

 "http://www.youtube.com/watch?v=fkNJZvKwmhE

  Michael reported a problem with Window Maker where it crashes with a
  SIGSGV when trying to create an 82nd workspace.

  /usr/local/WindowMaker-0.92.1pre/bin/wmaker warning: Window Maker exited
  due to a crash (signal 11) and will be restarted.

  I was able to reproduce it by making 81 workspaces, then creating an 82nd."

[ crmafra: Wrote the changelog ]
2009-08-09 02:34:21 +02:00
Tamas TEVESZ
f21ce5768b avoid integer overflow
Actually, the whole thing is so chock full of signed vs unsigned
mixups and the assumption of all the world is 32-bit that i'm not sure
anymore that correcting them one by one is a good idea.

what would probably work best is that if someone deeply familiar with
the code (*looks in dan's general direction*) cleaned the data types
up, then legions of grunts like myself could start cleaning the rest
with relative confidence...
2009-08-09 01:53:12 +02:00
Tamas TEVESZ
b487d56452 Sync comment with reality
Or rather, remove possibility for comment to diverge from reality
2009-08-09 01:51:25 +02:00
Samir SAADA
d316260395 Fix menu positioning bug
Here I tried to prevent the menu of windows to be displayed in the
other side of the screen if the window is half present in the screen
horizontally (ie x < 0)

a worse problem with menu is that it disappears when
the window is half present in the window vertically
ie y < 0, that makes it not usable.
2009-08-09 00:32:32 +02:00
Carlos R. Mafra
6b08fc9e78 Trivial cleanup 2009-08-08 23:38:26 +02:00
Carlos R. Mafra
0c469de04f Fix gcc warnings
This patch fixes the following warnings (with gcc 4.2.3)

    defaults.c:980: warning: unused variable 'replace'
    main.c:504: warning: 'watchPath' may be used uninitialized in this function
    main.c:504: note: 'watchPath' was declared here
    startup.c:616: warning: implicit declaration of function 'XrmUniqueQuark'
2008-11-10 01:42:50 +01:00
Carlos R. Mafra
d680e6e580 Compilation: Add a few spaces in the output
It is even better to have the messages displayed a few spaces
off from the left screen border.

The inspiration comes from the Git compilation output.
2008-11-10 00:14:07 +01:00
Carlos R. Mafra
3c323e1e9a Fix buffer overflows in shortcut and workspace name handling
The handling of user defined shortcuts was not checking the length
of the shortcut before copying it to a fixed-length temporary buffer,

char buf[128];

     strcpy(buf, shortcutDefinition);

and strcpy() is well known for not checking if overflows will occur.

In particular, wmaker was crashing here if a big 'shortcut' was defined
either through WPrefs or by directly editing the configuration files.

This is now avoided by using strncpy() instead.

And this patch also fixes a similar buffer overflow for big workspace
names too.

Furthermore, use MAX_SHORTCUT_LENGTH instead of raw number and define
it to be 32 instead of 128.
2008-11-09 20:18:05 +01:00
Carlos R. Mafra
06f59b9928 wmaker: Fix compiler warnings about pointer <--> integer conversion
There may be issues with running applications in 64-bit mode when
they were written with tacit assumptions about 32-bit platforms.
For example,

    * Assuming that a pointer can be cast back and forth to an integer

The reason is that the size of the integer and pointer may be different.
See the description of "[PATCH] Warn when casting a pointer (constant)
to an integer of different size." in the gcc mailing list

http://gcc.gnu.org/ml/gcc-patches/2005-12/msg01881.html

where it was also suggested the use of casts to uintptr_t. This is
what this patch does.

As a result the following warnings are fixed, leaving us with an
almost warning-free compilation in 64-bit platforms:

defaults.c:1446: warning: cast to pointer from integer of different size
defaults.c:1457: warning: cast to pointer from integer of different size
defaults.c:1471: warning: cast to pointer from integer of different size
defaults.c:1486: warning: cast to pointer from integer of different size
icon.c:67: warning: cast from pointer to integer of different size
menu.c:112: warning: cast from pointer to integer of different size
switchmenu.c:452: warning: cast from pointer to integer of different size
window.c:140: warning: cast from pointer to integer of different size
window.c:2217: warning: cast to pointer from integer of different size
workspace.c:135: warning: cast to pointer from integer of different size
workspace.c:214: warning: cast to pointer from integer of different size
workspace.c:634: warning: cast to pointer from integer of different size
workspace.c:1330: warning: cast to pointer from integer of different size
workspace.c:1514: warning: cast to pointer from integer of different size
wfilepanel.c:135: warning: cast from pointer to integer of different size
wfilepanel.c:171: warning: cast from pointer to integer of different size
wfontpanel.c:499: warning: cast to pointer from integer of different size
wfontpanel.c:500: warning: cast to pointer from integer of different size
wfontpanel.c:505: warning: cast to pointer from integer of different size
wfontpanel.c:506: warning: cast to pointer from integer of different size
wfontpanel.c:776: warning: cast from pointer to integer of different size
wfontpanel.c:777: warning: cast from pointer to integer of different size
wfontpanel.c:877: warning: cast from pointer to integer of different size
wfontpanel.c:878: warning: cast from pointer to integer of different size
wpanel.c:363: warning: cast from pointer to integer of different size
fontl.c:42: warning: cast from pointer to integer of different size
fontl.c:42: warning: cast from pointer to integer of different size
fontl.c:42: warning: cast from pointer to integer of different size
fontl.c:90: warning: cast to pointer from integer of different size
puzzle.c:138: warning: cast from pointer to integer of different size
puzzle.c:225: warning: cast to pointer from integer of different size
wtableview.c:1031: warning: cast to pointer from integer of different size
wtableview.c:1067: warning: cast to pointer from integer of different size
wtableview.c:1069: warning: cast to pointer from integer of different size
wtableview.c:1074: warning: cast to pointer from integer of different size
wtabledelegates.c:234: warning: cast from pointer to integer of different size
wtabledelegates.c:250: warning: cast from pointer to integer of different size
wtabledelegates.c:265: warning: cast from pointer to integer of different size
wtabledelegates.c:287: warning: cast to pointer from integer of different size
wtabledelegates.c:351: warning: cast from pointer to integer of different size
wtabledelegates.c:372: warning: cast from pointer to integer of different size
wtabledelegates.c:393: warning: cast from pointer to integer of different size
wtabledelegates.c:410: warning: cast to pointer from integer of different size
test.c:44: warning: cast from pointer to integer of different size
test.c:47: warning: cast to pointer from integer of different size
test.c:55: warning: cast from pointer to integer of different size
test.c:58: warning: cast from pointer to integer of different size
2008-11-06 09:07:50 +01:00
Carlos R. Mafra
4339e446e4 automake: Fix warnings about underquoted calls to AC_DEFUN
This patch fixes warnings from automake versions >=1.8 about
underquoted calls to AC_DEFUN.

I followed the recommended modifications of
http://sources.redhat.com/automake/automake.html#Extending-aclocal
2008-11-05 18:17:55 +01:00
Carlos R. Mafra
72689513a3 Makefile: Beautify compilation messages
This patch adds the --disable-verbose-compile switch to the
configure script.

When this option is used it reduces the verbosity of compilation
messages to the essential. However compiler warnings are not affected
and thus gain visibility by not standing in the middle of a storm
of other messages.

In summary, the compilation messages are reduced to a stream of

CC array.o
CC bagtree.o
CC configuration.o
CC connection.o
CC data.o
[...]

instead of a mind-boggling flux of

gcc -DHAVE_CONFIG_H -I. -I../src -I../WINGs/WINGs -I../wrlib -I../src
-I/usr/include/freetype2   -I/usr/local/include
-DLOCALEDIR=\"/usr/local/lib/loca\"/usr/local/share/WINGs\"
-DDEBUG  -fno-strict-aliasing -g -O2 -c array.c
gcc -DHAVE_CONFIG_H -I. -I../src -I../WINGs/WINGs
-I../wrlib -I../src -I/usr/include/freetype2   -I/usr/local/include
-DLOCALEDIR=\"/usr/local/lib/loca\"/usr/local/share/WINGs\"
-DDEBUG  -fno-strict-aliasing -g -O2 -c bagtree.c
[...]
2008-11-05 18:03:07 +01:00
Rodney Padgett
56d8568787 Use inotify to check for changes to the defaults database. Workaround for
event handler timer.

After upgrading my kernel recently I noticed that dnotify has been
depreciated, so I decided to try and implement the new inotify code in
Window Maker instead.

During testing, I also found that one of the timers which was removed
(the one causing the most wake-ups), calling delayedAction, was
responsible for handling signals. Basically with this timer removed,
signals were only handled after an X event occurs.

After looking at the delayedAction function, I couldn't see the purpose of it.
It certainly wouldn't cause any delay as it was called by the timer every
500ms, so there is no time correlation with when a signal was received.
Also, it appeared to count the signals and call DispatchEvent for each
one, but it appears DispatchEvent would just handle the most recent signal
and take action on that. The signals handled by delayedAction are the
various exit and reset signals, so only one need to be handled. I
therefore have commented out delayedAction (it wasn't called by any other
procedure) and added a call to DispatchEvent imediately after the signal
is registered, in handleExitSig.

I'm not sure what problems this may cause with dead children - these are
only cleaned up after an Xevent now that the timer is removed- but I
haven't observed any problems since a few months ago.
2008-08-09 13:14:39 -05:00
Pedro Gimeno
c91bb1ba13 Fix periodic focus bug
Pedro Gimeno explains:

"As you most likely already know, every X Window event comes with a
timestamp. You can see it using e.g. xev.

I don't know if this is Debian-specific and I'm no X Window expert, but
the fact is that in my machine this timestamp, according to my
/usr/include/X11/X.h, is a 32-bit unsigned integer and it holds the
event time in milliseconds according to my tests.

This timestamp appears to be in milliseconds from the start of the Unix
epoch, modulo 2^32. The problem is that 32 bits are too little for this
purpose: 2^32 milliseconds are exactly 49 days, 17 hours, 2 minutes and
47.296 seconds.

Now, the WindowMaker code rejects any focus event whose timestamp is
less than the last one seen, using code similar to this:

 if (timestamp < LastTimeStamp) return;
 LastTimeStamp = timestamp;

This is a disaster when timestamp wraps around because of the 32-bit
limit. Say LastTimeStamp equals 2^32-1 and a focus event comes two
milliseconds after. Its timestamp will equal 1 because of the
wraparound. Obviously, 1 < 2^32-1 so the event will be rejected even if
it comes from the future (relative to LastTimeStamp) and not from the
past. Focus events are no longer accepted because nothing can be greater
than 2^32-1 (unless you click on that exact millisecond, 49 days after).

If you look in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=102314
you'll see two people confirming the periodicity and predictability of
the bug. Arnaud Giersch was who noted that the period was 2^32
milliseconds (and not 2^31 as I thought it could be because of a signed
int involved) and who noted the coincidence with the Unix epoch.

My fix works by subtracting one timestamp from the other (an operation
which is done modulo 2^32) and rejecting the focus event only if the new
timestamp is within 1 minute (60000 milliseconds) in the past. Given the
periodicity of the timestamp, actually after 49.7 days there will be
another minute in the future during which focus events will not be
accepted; again after 99.4 days, etc., but thanks to the subtraction,
they will now be relative to the *last* focus change and not to the Unix
epoch.

The patch could be simplified to get rid of the compareTimes function.
It's written like that because it comes from the previous patch (which
you can see in the same bug report).

So the date comparison line could end up looking like this:

   if (scr->flags.ignore_focus_events || LastFocusChange - timestamp <
60000)

so you can get rid of the compareTimes function. However please respect
the other change of 'int' to 'Time'.

As for why you aren't experiencing this problem, perhaps the event
timestamp does not come from the Unix epoch in your X Window system, but
rather starts counting when you start it or your computer, I don't know.
Or maybe your X Window server's timestamps are 64 bits wide instead of
32 bits, which I don't think because I doubt the X11 protocol specifies
a 64-bit record for the transmission of the timestamp. In either case,
the output of xev will probably help understanding the cause.

Or maybe even it's a click-to-focus only bug and you're not using that
mode. I haven't checked who calls wSetFocusTo.

Note that I can reproduce it just by manipulating the system clock,
which seems to be tied to the event timestamps."

For more information see:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=102314

Reported-by: Joey Hess <joeyh@debian.org>
Signed-off-by: Pedro Gimeno <parigalo@formauri.es>
2008-06-26 15:03:38 -03:00
Paulo Cesar Pereira de Andrade
e4800e84d0 Workaround for Composite problems when default depth is not 24.
This is really a workaround patch, the proper fix would be to have
WindowMaker know about Composite, and take advantage of it's features.
2008-05-03 20:02:31 -03:00
Carlos R. Mafra
ee28b0257a WINGs/wfont.c: Avoid returning font=NULL in WMCreateFont()
WPrefs tries to use the fonts listed in the WMCreateFont() call (from WPrefs.c),

font = WMCreateFont(scr, "Lucida Sans,URW Gothic L,Times New Roman,serif"
                         ":bold:pixelsize=26:antialias=true");

and 'font' is later used without accounting the possibility of it being NULL in

WMSetLabelFont(WPrefs.nameL, font);
WMReleaseFont(font);

In particular, WMReleaseFont(font) will kill WPrefs ungracefully with the
following message if font=NULL

WPrefs: wfont.c:193: WMReleaseFont: Assertion `font!=((void *)0)' failed.
Aborted

That happens because the return value of WMCreateFont() can be NULL, so this
patch makes WMCreateFont() never return NULL. If the font creation fails for
some reason (see below), we try to use the emergency DEFAULT_FONT and print
debugging information telling what's going on. If the use of DEFAULT_FONT
also fails, then we terminate WPrefs with exit(1) and let the user know
why exactly if failed.

This bug happened because the font "Lucida Sans" (the first possibility
in the initial call to WMCreateFont()) "exists" in my system as a stale
symbolic link to a location which no longer exists after an upgrade from
java from 1.5.0.14 to 1.5.0.15

    /etc/alternatives/LucidaSansDemiBold.ttf ->
    /usr/lib/jvm/java-1.5.0-sun-1.5.0.14/jre/lib/fonts/LucidaSansDemiBold.ttf

So the call to XftFontOpenName(display, scrPtr->screen, fname) with
"Lucida Sans" being the first possibility for Xft to try out ended up in 'font'
being NULL because, as far as the Xft library was concerned, "Lucida Sans"
produced a positive match (due to it existing as a symbolic link) but in the end
a NULL result was produced due to the missing symbolic link destination. This later
exposed the bug of WMCreateFont() returning font=NULL and WPrefs.c not checking
whether font=NULL before using it. Bang!

If "Lucida Sans" was the _second_ entry to try and the first one had suceeded,
this bug would not have surfaced.

This solves https://qa.mandriva.com/show_bug.cgi?id=39677

Signed-off-by: Carlos R. Mafra <crmafra@ift.unesp.br>
2008-05-02 20:23:00 -03:00
Carlos R. Mafra
722c82c8ab wmaker: Reduce wakeups to zero
This patch removes wmaker from PowerTop's shame list, where
it appeared with ~3-4 wakeups/second.

It adds the linux kernel's dnotify mechanism (adapted from
the example in Documentation/dnotify.txt in the kernel source),
to detect when a configuration file in ~/GNUStep/Defaults has
changed to load it again on-the-fly. For me it usually means that
modifications to ~/GNUStep/Defaults/WMRootMenu via the 'genmenu'
script are automatically detected and loaded.

The use of dnotify makes the ancient behaviour of polling unecessary
and cuts down the wakeups count.

Other 'apparently' useless timers are also deleted and it's been almost
one year now that I use this patched exclusively without problems, so
I am pretty sure that it doesn't hurt to remove them.

The end result of all this is that wmaker generates 0 (zero) wakeups
when idle in a Linux system.

Signed-off-by: Carlos R. Mafra <crmafra@ift.unesp.br>
2008-05-02 20:01:50 -03:00
Carlos R. Mafra
2061c30758 Add .gitignore to git repository 2008-05-02 01:01:24 -03:00
dan
4e8423d18a Fixed segfault when unhiding an application in certain conditions (seen
with KDE applications with transient windows)
2006-04-27 19:16:58 +00:00
dan
a5aa8573c9 updated todo with ideas for post 1.0 2006-04-27 02:57:57 +00:00
dan
ecd5217633 Enhanced the cursor positioning/selecting text using the mouse in a textfield.
This also fixed an endless loop that could be entered by the previous code
in certain situations, after the patch to fix navigation/selection in a
textfiled with UTF8 chars was applied.
2006-04-27 02:48:18 +00:00
dan
577b3ee949 Removed WINGs' dependency on rgb.txt (from X11).
This fixes issues with locating the file which is being stored on different
locations depending on the X server release/version
2006-04-26 20:28:24 +00:00
dan
bc4de88d8b Applied patches from Stanislav Maslovski <stanislav.maslovski@gmail.com> to
fix the 2 problems mentioend below:

- Fixed buggy handling of UTF8 characters in textfields in WINGs.
- Fixed segfault in WPrefs when some font description is missing from the
  configuration file.
2006-04-25 23:52:43 +00:00
dan
4688c9839b more fixes for missing linking flags in some cases 2006-04-25 20:01:51 +00:00
dan
90c0e656f1 replaced windowmaker.org with windowmaker.info everywhere 2006-04-25 19:35:14 +00:00
dan
42191340fd - Improved Info panel display.
- Fixed missing library paths when linking some binaries on certain
  platforms with a recent pkg-config
2006-04-25 18:59:24 +00:00
dan
d873d09fa5 yet another cvs commit notification test 2006-04-25 18:50:42 +00:00
dan
2e114bcc1e another cvs commit notification test 2006-04-25 18:46:14 +00:00
dan
1a73c71d56 cvs commit notification test 2006-04-25 18:23:19 +00:00
dan
240586edc5 cvs commit notification test 2006-04-25 17:58:33 +00:00
dan
eae4c45cf5 test cvs commit notifications 2006-03-28 19:50:04 +00:00
dan
c2c58734b8 test cvs commit notifications 2006-01-23 06:47:27 +00:00
dan
085e9d6254 - updated the XDND code in WINGs to work with GDK based applications.
WINGs based applications should now work with both KDE and GNOME
  applications (Sylvain Reynal <sreynal@nerim.net>)
- better check for the XDND protocol version when interoperating with other
  applications. As it seems xdnd version 3 (which WINGs supports) and newer
  are not backward compatible with xdnd version 1 and 2. This is why WINGs
  applications cannot interoperate with GNUstep applications (which uses
  xdnd version 2). Xdnd version 4 and 5 are backwards compatible with
  version 3 though. (Sylvain Reynal <sreynal@nerim.net>)
2006-01-22 20:33:19 +00:00
dan
f683b99405 updated estonian translation 2006-01-22 19:20:57 +00:00
dan
bacf8229b0 - release colors to avoid issues with the reference count overflowing a
small integer and causing unexpected color releases that can crash
  Window Maker (Martin Frydl <martin.frydl@systinet.com>)
- fixed a small memory leak in WINGs/wview.c caused by not releasing the
  background color of a view (Martin Frydl <martin.frydl@systinet.com>)
2006-01-22 18:19:09 +00:00
dan
fa7a5db4bd - fixed issue with invisible modal windows from Qt and Gtk applications
on 64bit platforms (Max Loparyev <max@city.veganet.ru>)
- fixed issue with icon colors on big endian platforms
  (Max Loparyev <max@city.veganet.ru>)

patch based on a previous patch by Vladimir Nadvornik <nadvornik@suse.cz>
2006-01-22 18:05:00 +00:00
dan
e534138417 test 2006-01-22 16:29:39 +00:00
dan
73d94f7bdc test 2006-01-22 16:03:31 +00:00
dan
054f954390 Applied some patches from Balaton Zoltan <balaton@eik.bme.hu>
- small fix for compilation in a different directory than the source
- fixed some warnings on 64bit platforms
2006-01-22 15:53:44 +00:00
dan
c0317ddae5 eliminated gcc-4 compilation warnings 2005-08-22 23:58:19 +00:00
dan
91f5abc955 - fixed gcc-4 compilation issues (Vladimir Nadvornik <nadvornik@suse.cz>)
- fixed amd64 compilation issues (Vladimir Nadvornik <nadvornik@suse.cz>)
2005-08-22 19:07:57 +00:00
dan
d26f18505a Fixed WPrefs.app to find its icons when not installed under GNUstep paths 2005-07-17 19:16:46 +00:00
dan
f3a960d9d8 updated german translations 2005-07-05 19:41:06 +00:00
dan
5f0a357b1f try to work around some user's IQ level 2005-07-05 08:44:00 +00:00
dan
20d5925d08 updated news file (part 2) 2005-07-03 18:08:46 +00:00
dan
b655a5fa5f updated news file 2005-07-03 18:01:46 +00:00
dan
ad0ae4887f - new algorithm for placing miniwindows after unhiding the application they
belong to, that works without auto-arranging the icons, while still avoiding
  multiple icons in the same spot by moving the miniwindows to a new slot if
  their old slot was occupied in the meantime.
- double clicking an appicon will also raise the miniwindows that belong to
  that application to the front (along with the normal windows).
2005-07-03 17:37:03 +00:00
dan
eca635cb5d - try fixed font for the technical drawing font if helvetica-12 is not
available to avoid crashing (Timo Juhani Lindfors <timo.lindfors@iki.fi>)
- german WINgs po file fix
2005-07-03 00:49:06 +00:00
dan
ad641c1992 Fixed issue with GNUstep applications losing focus when all their windows
are closed and there remains only their menu (Matt Rice <ratmice@yahoo.com>)
2005-07-02 19:23:41 +00:00
dan
69730273b1 - fixed bug with windows shrinking to very small sizes when Unmaximize was
used on them, after they were closed in a maximized state.
- fixed bug with restoring maximized state from NetWM atoms.
2005-05-15 16:45:02 +00:00
dan
f8b3a774be removed obsolete file 2005-05-09 00:27:33 +00:00
dan
2ea40ff2c5 Improved hide/unhide animation for applications with multiple windows
(only animate the active window hiding/unhiding, which makes Window Maker
faster and more responsive for such applications).
2005-05-08 00:51:56 +00:00
dan
33f7b63d11 - Fixed switch panel default value in defaults.c
- Fixed WPrefs path in the installed WMState (changed after recent WPrefs
  installation path changes)
- Fixed wmaker.inst (apparently some very noisy individual was unable to get
  right his 10 line patch to rename a path)
2005-04-08 11:51:06 +00:00
dan
880880162b Fixed bug that caused wmaker to crash when kplayer was switched back from
fullscreen mode to windowed mode.
2005-03-22 23:15:11 +00:00
dan
2f56373cc2 fixed issue with window being moved by 1 pixel up and left when the window
move was initiated by the client
2005-03-13 00:15:13 +00:00
dan
24519b6292 Added code to automatically convert Icon paths in WMWindowAttributes from
the old .AppInfo/... to the new Library/WindowMaker/... on the fly when
Window Maker starts.
This should allow a transparent transition without any need for users to do
anything.
2005-03-12 01:16:04 +00:00
dan
24e349afe7 Changes (especially the ones that may affect backward compatibility like
this path change) should go at the top of the NEWS file. None digs 1200
lines in the NEWS to read about some path change.
2005-03-11 23:05:43 +00:00
dan
5cfc565bbd Fixed paths, because mr Alex "Big Mouth" Perez was unable to get them right
in the first place in his trivial 10 line patch which only attempted to
replace one path with another.
He must be a big time user of his own patch, to not have noticed where the
paths pointed after his change.
2005-03-11 22:57:40 +00:00
dan
c8406b640c fixed cvs to compile again 2005-03-11 21:59:06 +00:00
kojima
53db5fc4a5 eq 2005-03-11 21:51:49 +00:00
dan
9bd4abb288 updated changelog 2005-03-11 21:40:51 +00:00
kojima
25c37b7637 applied patch to rename .AppInfo directory 2005-03-11 01:58:55 +00:00
kojima
3301b57d4b applied patch to use more gnustepish paths for some internal data files 2005-03-11 01:56:06 +00:00
dan
fe381eca77 - Fixed a few typos
- Added new italian translation (Marco Colombo <m.colombo@ed.ac.uk>)
2005-03-04 23:47:09 +00:00
dan
e3df52ca51 - Fixed compilation include path issue in wrlib/tests
- Removed unnecessary included headers (we don't use Xt)
2005-03-02 10:59:40 +00:00
dan
b2e87b76f9 Fixed crash when removing submenus in WPrefs' menu editor.
The submenu widget was free'd twice (once by destroyEditMenuItem() and a
second time by destroyEditMenu())
2005-02-20 04:36:57 +00:00
dan
5811c3d89c updated chinese translations 2005-01-21 04:05:48 +00:00
dan
140c48f1cc - better checks if the icon sizes are valid and there is enough data to
build the image from _NET_WM_ICON
- properly read the icon's pixels from _NET_WM_ICON, so they won't depend
  on machine endianess.
2005-01-08 22:53:39 +00:00
dan
b62e379299 fix for broken 'make install' introduced by previous commit 2005-01-06 15:55:46 +00:00
dan
71f1d7f101 fix to allow parallel builds on SMP systems using make -j 2005-01-06 15:48:42 +00:00
dan
bde572f673 fixed issue with path assignment 2004-11-14 00:11:20 +00:00
dan
684621ecd4 - fixed possible crash bug because a variable allocated on stack was
returned by a function
- removed obsolete macro
2004-11-11 14:14:52 +00:00
dan
9f89695c48 fixed bug with infinite loop in some circumstances in fitText() in WINGs 2004-11-06 20:20:05 +00:00
kojima
acc868d91d Removed --with-appsdir option and replaced it with --with-gnustepdir. Also,
default installation path (for non GNUstep users) is now $(prefix)/bin
2004-11-01 00:50:19 +00:00
dan
d7d3003e06 Detect if gcc is able to compile x86 asm and if it supports passing more
than 10 parameters in inline asm, else disable asm code.
This should enable it to work on any x86 platform (not just linux as before)
given that a recent enough gcc is available (no more need to guess by looking
at $host)

This should also fix the issues of compiling wrlib with gcc-2.95
2004-10-31 05:33:39 +00:00
dan
d292143af1 better text alignment 2004-10-31 01:47:43 +00:00
dan
3b46cf38cd fixed some compilation issues with gcc-2.9x 2004-10-31 00:57:25 +00:00
dan
e53ddd046f fixed another spot where compiling on solaris with openwin generated errors 2004-10-30 07:17:49 +00:00
dan
e9e1186f1d attempt to fix compilation on solaris with openwin 2004-10-30 06:39:27 +00:00
dan
558615a853 Changed the order some header files are loaded, as it seems to cause havoc
on some platforms
2004-10-30 05:46:37 +00:00
dan
ca61675597 added preliminary X Input Methods support 2004-10-28 04:17:18 +00:00
kojima
79864ba94c oops 2004-10-27 03:09:19 +00:00
kojima
d63a0b4859 added option to disable switchpanel
fixed some bugs
2004-10-27 02:54:32 +00:00
kojima
ac87ca5596 updated japanese translations (Takeo Hashimoto <HashimotoTakeo@mac.com>) 2004-10-26 20:03:06 +00:00
kojima
2ea68b8d2b changed alt-tab behaviour 2004-10-26 17:55:34 +00:00
dan
9234fb72b2 small fix for older fontconfig 2004-10-26 12:04:18 +00:00
kojima
92a84fe050 fixed crash bug with alt-tab + run-dialog (or internal windows in general) 2004-10-26 08:00:19 +00:00
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
625 changed files with 145137 additions and 145434 deletions

View File

@@ -1,8 +0,0 @@
Makefile Makefile.in
aclocal.m4
configure config.log config.cache config.guess config.status config.sub
libtool ltconfig ltmain.sh
autom4te.cache
.psrc .inslog2 tca.map tca.log pchdir *.rpt
update
WindowMaker*.tar.gz

View File

@@ -1,6 +0,0 @@
#
# 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.
#

87
.gitignore vendored Normal file
View File

@@ -0,0 +1,87 @@
*Makefile
*Makefile.in
WINGs/get-wings-flags
WINGs/get-wutil-flags
WINGs/WINGs.pc
aclocal.m4
autom4te.cache*
config.guess
config.log
config.status
config.sub
configure
contrib/WindowMaker.spec
libtool
ltmain.sh
src/config.h
src/config.h.in
src/stamp-h1
src/wconfig.h
wmlib/wmlib.pc
wrlib/get-wraster-flags
wrlib/wrlib.pc
*.o
*.lo
WINGs/Examples/.libs/colorpick
WINGs/Examples/.libs/fontl
WINGs/Examples/.libs/puzzle
WINGs/Examples/colorpick
WINGs/Examples/connect
WINGs/Examples/fontl
WINGs/Examples/puzzle
WINGs/Examples/server
WINGs/Extras/.libs/test
WINGs/Extras/libExtraWINGs.a
WINGs/Extras/test
WINGs/Tests/.libs/testmywidget
WINGs/Tests/.libs/wmfile
WINGs/Tests/.libs/wmquery
WINGs/Tests/.libs/wtest
WINGs/Tests/testmywidget
WINGs/Tests/wmfile
WINGs/Tests/wmquery
WINGs/Tests/wtest
WINGs/libWINGs.a
WINGs/libWUtil.a
WPrefs.app/.libs/WPrefs
WPrefs.app/WPrefs
WindowMaker/Defaults/WMRootMenu
WindowMaker/Defaults/WMState
WindowMaker/Defaults/WMWindowAttributes
WindowMaker/Defaults/WindowMaker
WindowMaker/IconSets/Default.iconset
src/.libs/wmaker
src/wmaker
test/wtest
util/.libs/wmagnify
util/.libs/wmsetbg
util/.libs/wmsetup
util/convertfonts
util/geticonset
util/getstyle
util/seticons
util/setstyle
util/wdread
util/wdwrite
util/wmagnify
util/wmaker.inst
util/wmsetbg
util/wmsetup
util/wxcopy
util/wxpaste
wmlib/libWMaker.a
wrlib/.libs/libwraster.a
wrlib/.libs/libwraster.la
wrlib/.libs/libwraster.lai
wrlib/.libs/libwraster.so
wrlib/.libs/libwraster.so.3
wrlib/.libs/libwraster.so.3.1.0
wrlib/libwraster.la
wrlib/tests/.libs/testdraw
wrlib/tests/.libs/testgrad
wrlib/tests/.libs/testrot
wrlib/tests/.libs/view
wrlib/tests/testdraw
wrlib/tests/testgrad
wrlib/tests/testrot
wrlib/tests/view

View File

@@ -107,10 +107,10 @@ 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, --no-polling command line option.
The JED Text Editor <xjed@windowmaker.org>
The JED Text Editor <xjed@windowmaker.info>
Project maintainer
Alfredo K. Kojima <kojima@windowmaker.org>
Alfredo K. Kojima <kojima@windowmaker.info>
The guy who types random keys to feed JED with the necessary entropy
Jay Kominek <jkominek@xtn.net>
@@ -149,7 +149,7 @@ Fix for unassociated alpha tiff
Craig Nellist <crn@ozemail.com.au>
selection in textfield
Dan Pascu <dan@windowmaker.org>
Dan Pascu <dan@windowmaker.info>
dock ghost (superfluous mode) fix, enhancement for scrollable menus,
clip, numerous other stuff, project maintainer
@@ -217,7 +217,7 @@ FRBall <frb@umr.edu>
dgradient fix
"]d" <id@windowmaker.org>
"]d" <id@windowmaker.info>
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

@@ -4,11 +4,11 @@
If you find a bug please fill this form and send it to
developers@windowmaker.org Please, USE THIS FORM!!!
wmaker-dev@lists.windowmaker.org Please, USE THIS FORM!!!
You can also report a bug in the WWW bug tracker at
http://windowmaker.org/cgi-bin/bugs or by sending this report
to bugs@windowmaker.org
http://bugs.windowmaker.org/projects/wmaker/issues or by sending this report to
bugs@windowmaker.org
0. Before reporting this bug I already:
@@ -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

172
ChangeLog
View File

@@ -1,3 +1,103 @@
Changes since version 0.92.0:
.............................
- added check for --with-gnustepdir option to configure to verify that its
argument is an absolute path
- updated german translations (Torsten Marek <shlomme@gmx.net>)
- fixed WPrefs.app to find its icons when not installed under GNUstep paths
- fixed gcc-4 compilation issues (Vladimir Nadvornik <nadvornik@suse.cz>)
- fixed amd64 compilation issues (Vladimir Nadvornik <nadvornik@suse.cz>)
- eliminated gcc-4 compilation warnings
- small fix for compilation in a different directory than the source
(Balaton Zoltan <balaton@eik.bme.hu>)
- fixed some warnings on 64bit platforms (Balaton Zoltan <balaton@eik.bme.hu>)
- fixed issue with invisible modal windows from Qt and Gtk applications
on 64bit platforms (Max Loparyev <max@city.veganet.ru>)
- fixed issue with icon colors on big endian platforms
(Max Loparyev <max@city.veganet.ru>)
- release colors to avoid issues with the reference count overflowing a
small integer and causing unexpected color releases that can crash
Window Maker (Martin Frydl <martin.frydl@systinet.com>)
- fixed a small memory leak in WINGs/wview.c caused by not releasing the
background color of a view (Martin Frydl <martin.frydl@systinet.com>)
- updated estonian translation (Ivar Smolin <okul@linux.ee>)
- updated the XDND code in WINGs to work with GDK based applications.
WINGs based applications should now work with both KDE and GNOME
applications (Sylvain Reynal <sreynal@nerim.net>)
- better check for the XDND protocol version when interoperating with other
applications. As it seems xdnd version 3 (which WINGs supports) and newer
are not backward compatible with xdnd version 1 and 2. This is why WINGs
applications cannot interoperate with GNUstep applications (which uses
xdnd version 2). Xdnd version 4 and 5 are backwards compatible with
version 3 though. (Sylvain Reynal <sreynal@nerim.net>)
- Improved Info panel layout and fonts.
- Fixed missing library paths when linking some binaries on certain
platforms with a recent pkg-config (debian unstable/sid for one)
- Fixed buggy handling of UTF8 characters in textfields in WINGs.
(Stanislav Maslovski <stanislav.maslovski@gmail.com>)
- Fixed segfault in WPrefs when some font description is missing from the
configuration file (Stanislav Maslovski <stanislav.maslovski@gmail.com>)
- Removed WINGs' dependency on rgb.txt (from X11) and issues with locating it
on the filesystem for different systems/distributions.
- Fixed segfault when unhiding an application in certain conditions (seen
with KDE applications with transient windows)
Changes since version 0.91.0:
.............................
- fixed crash with info panel and alt-tabbing
- updated Japanese translations (Takeo Hashimoto <HashimotoTakeo@mac.com>)
- allow disable of switch panel when SwitchPanelImages=None
- added X Input Methods support in WINGs
- fixed issues with compiling on Solaris with openwin
- reduced minimum required version number for the Xft library to 2.1.0
- fixed some compilation issues with gcc-2.9x
- removed --with-appsdir option and replaced it with --with-gnustepdir. Also,
default installation path (for non GNUstep users) is now $(prefix)/bin
- fixed bug with infinite loop in some circumstances in fitText() in WINGs
- fixed to allow parallel builds on SMP systems using make -j
- updated Italian translation (Marco Colombo <m.colombo@ed.ac.uk>)
- applied .AppInfo --> Library path rename patch (Alex Perez <aperez@student.santarosa.edu>)
- added code to automatically update the icon paths from the old .AppInfo
style to the new Library/WindowMaker style in WMWindowAttributes when
Window Maker starts to make transition transparent for users.
- fixed issue with window being moved by 1 pixel up and left when the window
move was initiated by the client
- improved hide/unhide animation for applications with multiple windows
(only animate the active window hiding/unhiding, which makes Window Maker
faster and more responsive for such applications). This also makes the
restart operation much faster.
- fixed bug with windows shrinking to very small sizes when Unmaximize was
used on them, after they were closed in a maximized state.
- fixed bug with restoring maximized state from NetWM atoms.
- fixed issue with GNUstep applications losing focus when all their windows
are closed and there remains only their menu (Matt Rice <ratmice@yahoo.com>)
- try fixed font for the technical drawing font if helvetica-12 is not
available to avoid crashing (Timo Juhani Lindfors <timo.lindfors@iki.fi>)
- new algorithm for placing miniwindows after unhiding the application they
belong to, that works without auto-arranging the icons, while still avoiding
multiple icons in the same spot by moving the miniwindows to a new slot if
their old slot was occupied in the meantime.
- double clicking an appicon will also raise the miniwindows that belong to
that application to the front (along with the normal windows).
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:
.............................
@@ -16,7 +116,7 @@ Changes since version 0.80.2:
- 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 Xft support to WINGs, for rendering antialiased fonts with
- 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>)
@@ -110,13 +210,69 @@ Changes since version 0.80.2:
(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 the 'focus flicker' problem, seen with GTK2 applications.
- 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 an RImage struct.
- Fixed a buffer overflow when allocating a RImage struct.
Changes since version 0.80.0:
@@ -674,9 +830,9 @@ Changes since version 0.51.2:
- fixed focus problem with unfocusable windows
- fixed bug in WPrefs that changed EXIT to SHUTDOWN
- fixed menu title messup bug in WPrefs
- added a dot to mark hidden applications (compile time) (id@windowmaker.org)
- enhancements to the modelock patch (id@windowmaker.org)
- show kbd mode for modelock (id@windowmaker.org)
- added a dot to mark hidden applications (compile time) (id@windowmaker.info)
- enhancements to the modelock patch (id@windowmaker.info)
- show kbd mode for modelock (id@windowmaker.info)
- enhanced positioning of transient windows
- added dynamically loadable texture renderer code
from Tobias Gloth <gloth@online.de>
@@ -1517,7 +1673,7 @@ Changes since version 0.14.1:
They are icons for dock, clip, defaultAppIcon, sound server and for xterm.
All the rest needed for apps that can be started from menu, and have entries
in WMWindowAttributes, are in WindowMaker-data.tar.gz which can be found on
http://windowmaker.org/ or ftp://ftp.windowmaker.org/pub/contrib/icons
http://windowmaker.info/ or ftp://ftp.windowmaker.info/pub/contrib/icons
- Changed the SlideWindow() function to better adapt to slow machines. Also
the animation constants are now run time. They are IconSlideDelay = 0;
IconSlideStep = 5; and IconSlideSlowDown = 50; See NEWS for a more in depth
@@ -1585,7 +1741,7 @@ Changes since version 0.14.0:
or exiting, while an Attribute Editor panel is open.
- Put clip.tif, clip.png, clip.xpm, clip2.tif, clip2.xpm, Cone.xpm and
Penguin.xpm in WindowMaker-data_tar.gz. These are icons intended for fiend.
It can be found on ftp://ftp.windowmaker.org/pub/wmaker/contrib/icons
It can be found on ftp://ftp.windowmaker.info/pub/wmaker/contrib/icons

92
FAQ
View File

@@ -143,10 +143,9 @@ here for example screenshots.
1.2 Where can I get Window Maker?
----------------------------------
The official site to get new developmental versions from is
ftp://ftp.windowmaker.org/pub/beta/srcs/.
http://windowmaker.org/pub/source/beta/
NOTE: Also see http://wm.current.nu/downloads.html for the latest
Stable and Development versions.
The mercurial repository is available at https://hg.windowmaker.org/wmaker
The development versions are usually very stable themselves, so if you
want to have all the newest features, you can rather safetly go with the
@@ -158,23 +157,15 @@ crash.
1.3 Where are the mailing list archives?
----------------------------------------
Phillip Smith from Netplex, our wonderful provider of windowmaker.org, has set
up some new lists from the domain. Please read the information on the web
pages at http://www.windowmaker.org/lists.html for information on how to
subscribe, the posting guidelines, and how to access the web archives.
Many thanks to Ed Orcutt who hosted the original lists from his own machine
for many years and Caldera who graciously allowed Ed to continue hosting
from them when he moved to his new position with them. Ed provided a very
valuable service for many years and we are sad to see him go.
Please read the information on the web pages at http://lists.windowmaker.org/
for information on how to subscribe, the posting guidelines, and how to access
the web archives.
1.4 Where is more documentation on configuring Window Maker?
----------------------------------
Besides the mailing list archives, there are nice documents in
ftp://ftp.windowmaker.org/pub/docs/, at
http://wm.current.nu/downloads.html on my download page and at
http://wm.current.nu/user-guide/index.htm in the online user-guide.
http://windowmaker.org/documentation.php
1.5 What is an appicon?
@@ -182,52 +173,34 @@ http://wm.current.nu/user-guide/index.htm in the online user-guide.
An appicon is the icon (without the tiny titlebar a minimized application icon
has) produced by most applications that initially is in the bottom left corner
of the screen while an application is running. For an example, run xterm and
notice the icon in the corner. (Make sure that you use xterm and not a
default older rxvt because older versions of rxvt do not properly set their
window attributes.)
notice the icon in the corner.
1.6. How can I get a question added to the FAQ?
----------------------------------
Right now, the only method is to mail Chris Green <sprout@dok.org> or
myself <largo@current.nu> the question or post it on the Window Maker
Mailing list, and see if enough people have the same problem.
Ask on the mailing list, or send your request to faqs@windowmaker.org
If you are a developer and would like to be able to edit the official FAQ on
Chris's site, let him know at <sprout@dok.org>
He is currently pondering writing a front end that allows everyone to add
entries and only require a moderator approval before being posted.
Other avenues are the Window Maker wiki
http://bugs.windowmaker.org/projects/wmaker/wiki
and the forums
http://bugs.windowmaker.org/projects/wmaker/boards
1.7. How do I report bugs?
----------------------------------
You can look at the BUGFORM file in your tarball of Window Maker.
Alternatively, you can use the Window Maker Bugtracker at
http://windowmaker.org/cgi-bin/bugs.
http://bugs.windowmaker.org/projects/wmaker/issues
1.8. Is there an anomymous cvs server?
1.8. Is there a public source code repository?
----------------------------------
Yes there is. To check out from cvs, first
Yes there is. To check out from mercurial use:
hg clone http://hg.windowmaker.org/wmaker wmaker
export CVSROOT=":pserver:anoncvs@cvs.net-community.com:/gnustep"
cvs login
To update your source tree, cd to the wmaker directory and type
hg pull
'anoncvs' is the password.
Then issue the command. "wm" is the name of the module.
cvs -z3 checkout -d WindowMaker wm
To update your source tree, cd to the WindowMaker directory and type
cvs -z3 update
inside the WindowMaker directory.
-=-=-=-=-=-=-
@@ -365,8 +338,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 what a lot of people think, KDE is NOT a window manager. KDE is
a suite of various applications that includes a custom window manager (kwm).
The same is true for CDE.
@@ -386,7 +359,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
@@ -1102,12 +1075,12 @@ 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",
@@ -1192,10 +1165,10 @@ Several Nice applications are available:
http://www.geocities.com/SiliconValley/Vista/2471/linux.htm#xapps
ascd,WMRack,asmixer,asmodem, and others
ftp://ftp.windowmaker.org/pub/wmaker/contrib/srcs/apps/
ftp://ftp.windowmaker.info/pub/wmaker/contrib/srcs/apps/
wmavgload, wmmount, and wmload
ftp://ftp.windowmaker.org/pub/wmaker/contrib/srcs/utils/
ftp://ftp.windowmaker.info/pub/wmaker/contrib/srcs/utils/
wmppp-wmifs, wmtime, wmmon and other nifty apps
http://windowmaker.mezaway.org/
@@ -1311,14 +1284,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!
@@ -1470,11 +1437,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

View File

@@ -44,12 +44,6 @@ Pokud v
ftp://ftp.linux.or.jp/pub/RPM/glibc
- pokud chcete zobrazovat multibyte znaky, nastavte volbu MultiByteText
na YES v souborech:
~/GNUstep/Defaults/WindowMaker
~/GNUstep/Defaults/WMGLOBAL
- 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:

View File

@@ -35,10 +35,6 @@ Ak v
ftp://ftp.linux.or.jp/pub/RPM/glibc
- ak chcete zobrazovať multibyte znaky, nastavte možnosť
MultiByteText YES v ~/GNUstep/Defaults/WindowMaker a
~/GNUstep/Defaults/WMGLOBAL
- fonty, ktoré používate, podporujú vaše miesne nastavenia.
Ak vaše nastavenia fontov v ~/GNUstep/Defaults/WindowMaker
vyzerajú takto:

110
INSTALL
View File

@@ -64,23 +64,18 @@ The following software is required to use Window Maker:
The following is required to build Window Maker:
- Basic obvious stuff
If you will build Window Maker, make sure you have gcc (or some
other ANSI C compiler) and the X header files installed. Specially
for newbie Linux users: you must install all X development packages
and the gcc suite. Otherwise you won't be able to build any X
program, including Window Maker.
gcc (or some other ANSI C compiler)
glibc development files (usually glibc-devel in Linux distributions)
X development files (XFree86-devel or something similar)
- autoconf, automake and libtool
These tools are NOT needed, but IF you have one or
more of them installed, make sure you have ALL of the following
with exactly these versions:
autoconf 2.54
automake 1.4
libtool 1.4.2
If you have a different version, disable them by temporarily
renaming them to something else or uninstalling them from your
system. If you don't develop software you don't need them,
so you can safely uninstall.
autoconf 2.54
automake 1.4
libtool 1.4.2
- Xft2
and its dependencies (such as freetype2 and fontconfig)
You will also need the development files for it (xft2-devel)
OPTIONAL:
@@ -125,13 +120,19 @@ might work too.
CONFIGURE OPTIONS:
==================
If you downloaded the cvs or git versions, type
./autogen.sh
to generate the config files.
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
@@ -153,15 +154,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
@@ -278,27 +270,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.
@@ -352,9 +323,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.
@@ -401,11 +372,10 @@ 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.
You can get the file at http://windowmaker.org/pub/source/release/. 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.
@@ -418,7 +388,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
@@ -567,31 +537,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.

View File

@@ -153,15 +153,6 @@ Seznam ostatn
--disable-motif
zakáže podporu pokynů pro okenní manažer mwm.
--enable-openlook
povolí podporu pokynů pro okenní manažer OPEN LOOK(tm).
--enable-gnome
povolí podporu pokynů pro GNOME.
--enable-kde
povolí podporu pokynů pro KDE.
--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í,
@@ -420,7 +411,7 @@ Instalov
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
Tento soubor si můžete sehnat na adrese: ftp://ftp.windowmaker.info. 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.
@@ -435,7 +426,7 @@ domovsk
cestu pro WPrefs.app.
Příklad:
./configure --prefix=/home/karel --with-appspath=/home/karel/GNUstep/Apps
./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

View File

@@ -69,7 +69,7 @@ Lo siguiente se necesita para compilar Window Maker:
compilar ningún programa X, incluyendo Window Maker.
- libPropList
Esta biblioteca se puede encontrar en ftp://ftp.windowmaker.org/pub/libs
Esta biblioteca se puede encontrar en ftp://ftp.windowmaker.info/pub/libs
o en ftp://ftp.gnome.org/pub/libPropList
Instálela antes de compilar Window Maker.
@@ -165,15 +165,6 @@ Para obtener una lista de otras opciones, ejecute ./configure --help
--disable-motif
desactiva el soporte para el gestor de ventanas mwm.
--enable-openlook
activa el soporte para el gestor de ventanas OPEN LOOK(tm)
--enable-gnome
activa el soporte para el gestor de ventanas GNOME.
--enable-kde
activa el soporte para el gestor de ventanas kde/kwm.
--enable-lite
quita cosas que ya están soportadas en los entornos de escritorio,
tal como KDE y Gnome. Desactiva cosas como: lista de ventanas,
@@ -422,7 +413,7 @@ opci
También necesitará proporcionar la opción --with-appspath, para especificar la ruta
para WPrefs.app. Ejemplo:
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Apps
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Applications
Luego haga /home/jshmoe/bin para que se lo incluya en su ruta de búsqueda, agregue
/home/jshmoe/lib a su variable de entorno LD_LIBRARY_PATH y ejecute bin/wmaker.inst

View File

@@ -3,9 +3,9 @@
PLATEFORMES SUPPORTEES
PLATEFORMES SUPPORTÉES
======================
(c.a.d : j'ai entendu dire que la compilation a été réalisée avec succès sur..)
(c.à.d. : j'ai entendu dire que la compilation a été réalisée avec succès sur..)
- Intel GNU/Linux Conectiva 5.9 (beta)
- Intel GNU/Linux Slackware
@@ -49,7 +49,7 @@ Tout patch qui pourrait faciliter l'adaptation
est le bienvenu.
PRE-REQUIS
PRÉ-REQUIS
==========
Les logiciels suivants sont nécessaires à l'utilisation de Window Maker :
@@ -124,8 +124,6 @@ fonctionner aussi bien.
Si vous voulez disposer des traductions en d'autres langues, GNU gettext
est nécessaire. Les autres versions de gettext sont incompatibles et ne
fonctionneront pas.
If you want to use translated messages, you will need GNU gettext.
Other versions of gettext are not compatible and will not work.
Vous trouverez la version GNU sur ftp://ftp.gnu.org
@@ -143,12 +141,12 @@ configurera Window Maker avec le support int
Afin d'obtenir la liste des autres options, exécutez ./configure --help
--with-libs-from
ajoute des chemins d"accès pour la recherche des librairies.
ajoute des chemins d'accès pour la recherche des librairies.
L'option -L doit précéder chaque chemin d'accès, comme suit :
--with-libs-from="-L/opt/libs -L/usr/local/lib"
--with-incs-from
ajoute des chemins d"accès pour la recherche des fichiers d'en-tête.
ajoute des chemins d'accès pour la recherche des fichiers d'en-tête.
L'option -I doit précéder chaque chemin d'accès, comme suit :
--with-incs-from="-I/opt/headers -I/usr/local/include"
@@ -169,18 +167,6 @@ Afin d'obtenir la liste des autres options, ex
désactive le support pour les fonctionnalités en rapport avec le gestionnaire
de fenêtres mwm.
--enable-openlook
désactive le support pour les fonctionnalités en rapport avec le gestionnaire
de fenêtres OPEN LOOK(tm).
--enable-gnome
désactive le support pour les fonctionnalités en rapport avec le gestionnaire
de fenêtres GNOME.
--enable-kde
désactive le support pour les fonctionnalités en rapport avec le gestionnaire
de fenêtres kde/kwm.
--enable-lite
désactive des fonctionnalités déjà prises en compte par les gestionnaires de
bureau tels que KDE et GNOME. Celà concerne : la liste de fenêtres, le menu
@@ -217,7 +203,7 @@ Afin d'obtenir la liste des autres options, ex
désactive l'utilisation de "shaped windows" (pour oclock, xeyes, etc.).
NOTES SPECIFIQUES AUX PLATEFORMES
NOTES SPÉCIFIQUES AUX PLATEFORMES
=================================
- machines DEC/Alpha
@@ -242,7 +228,7 @@ Sujet : Re : Est-ce que le paquetage WindowMaker fonctionne correctement sur Alp
> pour compiler sur Alpha?
Notez bien : les Alphas dont je me sers ne sont jamais sous X et ne sont pas près
de le faire.
de l'être.
Bien souvent, la configuration des Alphas n'inclut qu'un volume ridiculement
petit de mémoire partagée. Aussi il n'est pas étonnant qu'un grand nombre
@@ -313,7 +299,7 @@ est soumis
* si vous rencontrez des messages d'erreur en rapport avec "--no-reexec",
désinstallez libtool-1.2b et installez libtool-1.3.
libtool-1.3 peut être trouvé sur ftp.gnu.org.
Consultez aussi la section PROBLEMES;
Consultez aussi la section PROBLÈMES;
* si vous aviez auparavant installé le paquetage de Window Maker livré
avec RedHat et que vous voulez installer maintenant manuellement une nouvelle
@@ -359,7 +345,7 @@ INSTALLATION
Compiler Window Maker
---------------------
Pour aller vite, tapez ce qui suit sous un prompt shell :
Pour aller vite, tapez ce qui suit dans un prompt shell :
./configure
make
@@ -369,7 +355,7 @@ puis, loguez-vous en tant que root and tapez :
make install
ldconfig
ou, si vous voulez ôter les infos de débogage des exécutables et les
ou, si vous voulez ôter les infos de débogage des exécutables et ainsi les
rendre plus petits, tapez plutôt :
make install-strip
@@ -392,7 +378,7 @@ pouvez faire :
./configure --enable-kde
3. (optionnel) Editez src/wconfig.h avec votre editeur de texte favori et
3. (optionnel) Éditez src/wconfig.h avec votre éditeur de texte favori et
et modifiez sont contenu à votre guise.
4. Compilez. Il faut juste taper :
@@ -443,7 +429,7 @@ 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,
Vous trouverez le fichier sur ftp://ftp.windowmaker.info. 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 à
@@ -461,7 +447,7 @@ l'option --prefix correctement renseign
Il est aussi nécessaire d'utiliser l'option --with-appspath, afin de préciser
le chemin d'accès à WPrefs.app. Par exemple :
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Apps
./configure --prefix=/home/jshmoe --with-appspath=/home/jshmoe/GNUstep/Applications
Puis, faites en sorte que /home/jshmoe/bin soit inclus dans votre PATH, ajoutez
@@ -471,7 +457,7 @@ bin/wmaker.inst
Bien sûr, /home/jshmoe est supposé être remplacé par votre répertoire personnel.
MISE A JOUR
MISE À JOUR
===========
Si vous mettez à jour une version plus ancienne de Window Maker :
@@ -482,7 +468,7 @@ Si vous mettez
si nécessaire.
PROBLEMES
PROBLÈMES
=========
Si vous rencontrez des problèmes pendant la phase de configuration, comme par
@@ -492,7 +478,7 @@ du fichier config.log, vous y trouverez peut-
ce problème.
== erreur de chargement de polices, même si elles existent
== erreur de chargement de polices, alors qu'elles existent
Essayez de recompiler sans le support pour le NLS.

View File

@@ -61,7 +61,7 @@ Para compilar o Window Maker voc
programa X, incluindo o Window Maker.
- libPropList
Você pode achar esta biblioteca em ftp://ftp.windowmaker.org/pub/libs ou
Você pode achar esta biblioteca em ftp://ftp.windowmaker.info/pub/libs ou
ftp://ftp.gnome.org/pub/libPropList. Você deve instalar corretamente
esta biblioteca antes de instalar o Window Maker.
@@ -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
@@ -291,7 +282,7 @@ INSTALA
Desempacote o WindowMaker-extra-<numero-da-versao>.tar.gz no /usr/local/share.
Você pode pegar o arquivo no site ftp://ftp.windowmaker.org. Este arquivo
Você pode pegar o arquivo no site ftp://ftp.windowmaker.info. Este arquivo
é opcional e possui alguns ícones e temas. Procure pelo último <número-da-versão>
disponível.
Ainda há o WindowMaker-extra.readme para instruí-lo sobre onde o pacote deve ir.
@@ -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

View File

@@ -64,7 +64,7 @@ Nasledovn
Window Maker.
- libPropList
Túto kni¾nicu mo¾no nájs» na ftp://ftp.windowmaker.org/pub/libs alebo
Túto kni¾nicu mo¾no nájs» na ftp://ftp.windowmaker.info/pub/libs alebo
ftp://ftp.gnome.org/pub/libPropList. Nain¹talujte ju pred kompiláciou
Window Makera.
@@ -161,15 +161,6 @@ Zoznam v
--disable-motif
zaká¾e podporu pre pokyny mana¾éra okien wmw
--enable-openlook
povolí podporu pre pokyny mana¾éra okien OPEN LOOK(tm)
--enable-gnome
povolí podporu pre pokyny mana¾éra okien GNOME
--enable-kde
povolí podporu pre pokyny mana¾éra okien kde/kwm
--enable-lite
odstráni veci, ktoré sa u¾ nachádzajú v desktopových prostrediach
ako KDE a GNOME. Odstránené veci sú: zoznam okien, menu aplikácií,
@@ -409,7 +400,7 @@ 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
You can get the file at ftp://ftp.windowmaker.info. 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
@@ -426,7 +417,7 @@ v druhom kroku kompil
--with-appspath, pomocou ktorej ¹pecifikujete cestu pre WPrefs.app.
Príklad:
./configure --prefix=/home/jshome --with-appspath=/home/jshome/GNUstep/Apps
./configure --prefix=/home/jshome --with-appspath=/home/jshome/GNUstep/Applications
Poto pridajte adresár /home/jshome/bin do premennej PATH, /home/jshome/lib
do premennej LD_LIBRARY_PATH a spustite bin/wmaker.inst

300
Install
View File

@@ -1,300 +0,0 @@
#!/bin/sh
#
# WindowMaker configuration and compilation script.
#
# Copyright (c) 1997, 1998, 1999 Alfredo K. Kojima
#
export LINGUAS;LINGUAS=""
if test "$NLSDIR" = ""; then
export NLSDIR;NLSDIR="/usr/lib/locale"
fi
OPTIONS=""
PREFIX="/usr/local"
perai() {
echo "Type <Return> to continue"
read nada
}
perform() {
if ! $* ; then
echo
echo "Window Maker installation failed or aborted by user."
exit 1
fi
}
help() {
echo "Usage: $(basename $0) <switch>"
echo "Where switches are:"
echo " -s --quiet make silent build"
echo " -h --help show this message"
echo ""
exit $1
}
OPTIONS=""
MAKE_OPTIONS=""
while [ -n "$1" ]
do
case "$1" in
"-s"|"--quiet") OPTIONS="--quiet"
MAKE_OPTIONS="-s";;
"-h"|"--help") help 0;;
*) echo "bad command-line parameter $1"
help 1;;
esac
shift
done
trap "echo Window Maker installation aborted. ; exit 1" 2 3
echo
echo "========================="
echo "Window Maker Installation"
echo "========================="
echo
echo "NOTE: If this script fails, read the INSTALL file and"
echo "install by hand."
echo
echo "Please read the README, INSTALL and FAQ files before e-mailing "
echo "questions. We will IGNORE any questions that are already"
echo "answered in the documentation."
echo
perai
echo "Did you read the INSTALL file?"
echo -n "<y/n> "
read rtfm
if [ "$rtfm" != y ]; then
echo "Please read the INSTALL file before installing"
exit
fi
echo "Are you sure?"
echo -n "<y/n> "
read rtfm
if [ "$rtfm" != y ]; then
echo "Please read the INSTALL file before installing"
exit
fi
echo "Are you lying?"
echo -n "<y/n> "
read rtfm
if [ "$rtfm" != n ]; then
echo "What a shame!"
echo "Please read the INSTALL file before installing"
exit
fi
echo "Do you *swear* that you really read the INSTALL file?"
echo -n "<y/n> "
read rtfm
if [ "$rtfm" != y ]; then
echo "Please read the INSTALL file before installing"
exit
fi
echo "Last chance. You will not get help if you have some problem"
echo "because you didn't read that file. Even if your computer explodes."
echo "Do you *really* read it?"
echo -n "<y/n> "
read rtfm
if [ "$rtfm" != y ]; then
echo "Please read the INSTALL file before installing"
exit
fi
echo
echo "Ok, you have been warned."
echo
perai
if test "$USER" != "root"; then
echo
echo "Warning: you must run this script as root to install"
echo "Window Maker. Hit <Control>-<C> to quit this script."
perai
echo
fi
echo
echo "Option Selection"
echo "================"
######################## KDE
echo
echo "Do you want KDE support?"
echo -n "<y/n> [n] "
read kde
if [ "$kde" = y -o "$kde" = Y ]; then
OPTIONS="$OPTIONS --enable-kde"
fi
######################## GNOME
echo
echo "Do you want GNOME support?"
echo -n "<y/n> [n] "
read gnome
if [ "$gnome" = y -o "$gnome" = Y ]; then
OPTIONS="$OPTIONS --enable-gnome"
fi
######################## OLWM
echo
echo "Do you want OPEN LOOK(tm)/olwm support?"
echo -n "<y/n> [n] "
read olwm
if [ "$olwm" = y -o "$olwm" = Y ]; then
OPTIONS="$OPTIONS --enable-openlook"
fi
######################## NLS
echo
echo "Do you want National Language Support?"
echo -n "<y/n> [n] "
read NLS
if [ "$NLS" = "y" -o "$NLS" = "Y" ]; then
NLS="Y"
echo "The supported locales are:"
ling=` (cd po; /bin/ls *.po) `
ALL_LINGUAS=""
for l in $ling; do
lname=`(cd po; grep Language-Team $l|cut -f2- -d:|cut -f1 -d\\\\|cut -f1 -d\<)`
lname=`echo $lname`
lcode=`basename $l .po`
ALL_LINGUAS="$ALL_LINGUAS $lcode"
echo "$lcode $lname"
done
echo "Type in the locales you want (all will install everything) [none]"
read foo
if test "$foo" = "all"; then
LINGUAS="$ALL_LINGUAS"
else
LINGUAS="$foo"
fi
echo "Selected locales are: $LINGUAS"
MB=""
for i in $LINGUAS; do
ok=0
for b in $ALL_LINGUAS; do
if test "$b" = "$i"; then
ok=1
break
fi
done
if test "$ok" = "0"; then
echo
echo "$i is not a supported locale"
perai
continue
fi
done
echo
echo "Where do you want to put the message files? [$NLSDIR]"
echo -n "? "
read foo
if test "x$foo" != "x"; then
NLSDIR=$foo
fi
fi
##################### Installation path
done=0
while [ $done = 0 ]; do
echo
echo "Where do you want to install Window Maker? [$PREFIX]"
echo "Don't change it if you don't know what you're doing."
if test "$USER" != "root"; then
echo "Make sure to specify a path where you have write permission."
fi
echo "(The default will put Window Maker in $PREFIX/bin, $PREFIX/lib etc.)"
echo -n "? "
read foo
if test "x$foo" != "x"; then
if [ "$foo" = "y" -o "$foo" = "n" ]; then
echo
echo "Hmm... I don't think you really want to install Window Maker into \"$foo\""
echo
else
done=1
PREFIX=$foo
fi
else
done=1
fi
echo
echo " $PREFIX/bin must be in the PATH environment variable"
echo "of all users who will use Window Maker"
perai
done
OPTIONS="$OPTIONS --prefix=$PREFIX"
##################### Install stripped binaries?
INSTALL="install"
echo "Do you want stripped binaries to be installed?"
echo "Installed binaries will be smaller (with debug info removed)."
echo -n "<y/n> [n] "
read foo
if [ "$foo" = y -o "$foo" = Y ]; then
INSTALL="install-strip"
fi
##################### Configure
echo "--------------------------"
echo "Configuring Window Maker..."
echo "--------------------------"
if [ `uname -s` = "SCO_SV" ]; then
echo "CFLAGS=\"$CFLAGS -belf -DANSICPP\" ./configure $OPTIONS"
CFLAGS="$CFLAGS -belf -DANSICPP"
perform ./configure $OPTIONS
else
echo "CFLAGS=\"$CFLAGS $GCCFLAGS\" ./configure $OPTIONS"
CFLAGS="$CFLAGS $GCCFLAGS"
perform ./configure $OPTIONS
fi
#################### Compile
echo "-------------------------"
echo "Compiling Window Maker..."
echo "-------------------------"
(cd src; perform make $MAKE_OPTIONS clean)
perform make $MAKE_OPTIONS
echo "--------------------------"
echo "Installing Window Maker..."
echo "--------------------------"
perform make $MAKE_OPTIONS $INSTALL
if [ `uname -s` = "Linux" ]; then
echo
echo " Make sure $PREFIX/lib is in the /etc/ld.so.conf file"
/sbin/ldconfig
fi
echo
echo "Installation Finished!"
echo
echo "Now, each user that wishes to use WindowMaker must run the wmaker.inst"
echo "script that was just installed."
if test "$NLS" = "Y"; then
echo "Don't forget to set the LANG environment variable to your locale"
fi

View File

@@ -4,7 +4,7 @@ Window Maker FTP Mirror Sites
Official Site (USA):
--------------------
ftp://ftp.windowmaker.org/
http://windowmaker.org/pub/source/release/
Australia:
@@ -61,7 +61,7 @@ For Intel:
Contact: Jim Knoble <jmknoble@pobox.com>
Sites:
ftp://ftp.windowmaker.org/pub/beta/compiled/linux/rpms/
ftp://ftp.windowmaker.info/pub/beta/compiled/linux/rpms/
ftp://ftp.redhat.com/pub/contrib/SRPMS/
ftp://ftp.redhat.com/pub/contrib/i386/

View File

@@ -1,20 +1,9 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = wrlib WINGs src util po WindowMaker wmlib test WPrefs.app doc\
contrib
SUBDIRS = wrlib WINGs src util po WindowMaker wmlib WPrefs.app doc
EXTRA_DIST = TODO BUGS BUGFORM FAQ FAQ.I18N FAQ.I18N.cs FAQ.I18N.sk \
Install INSTALL.cs INSTALL.fr INSTALL.es INSTALL.pt INSTALL.sk \
README.antialiasing README.definable-cursor README.pt \
README.KDE README.GNOME Sample.XftConfig \
MIRRORS COPYING.WTFPL mkpatch WindowMaker.lsm.in
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

167
NEWS
View File

@@ -2,34 +2,115 @@
NEWS for veteran Window Maker users
-----------------------------------
--- 0.81.0
--- 0.92.0
GNUstep Installation Directory
------------------------------
WPrefs is now installed in /usr/local/bin and /usr/local/share by default.
If you use GNUstep and want it to install in /usr/GNUstep/Applications,
you may specify --with-gnustepdir=/usr/GNUstep
If the GNUSTEP_LOCAL_ROOT environment variable is defined when configure is
executed, it will be used (and you don't need to use --with-gnustepdir)
Cached Pixmaps Directory
------------------------
The directory where Window Maker stores the cached application pixmaps for
its later use has changed from ~/GNUstep/.AppInfo/WindowMaker to
~/GNUstep/Library/WindowMaker/CachedPixmaps for better compatibility with
the GNUstep path structure.
Also WPrefs now stores internal data in ~/GNUstep/Library/WindowMaker/WPrefs
(it was ~/GNUstep/.AppInfo/WPrefs before)
X Input Methods support in WINGs
--------------------------------
Preliminary support for X Input Methods was added to textfield and text
widgets in WINGs. Input for text in other languages than English should
work now (except for kanji which will most likely not work, even though
it wasn't tested).
Disabling the switch panel
--------------------------
To disable the panel shown during Alt-tabbing, you may put the following in
~/GNUstep/Defaults/WindowMaker
SwitchPanelImages= None;
--- 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 support for antialiased fonts in the WINGs library, now
Window Maker can also support antialiased fonts. However enabling them may
prove not to be a trivial task to do. This is because enabling antialiased
fonts doesn't depend solely on Window Maker and its configuration files. It
also depends on the X server, the X server extension modules and their
specific configuration files.
With the addition of Xft2 support in the WINGs library, now
Window Maker can display antialiased text with TrueType or any scalable fonts.
For a description of all the steps required to get antialiased fonts on
screen please check the README.antialiasing file which describes all the
things you need to do on a step by step basis. In addition it has extra
useful hints and idea to make your antialiased fonts look nice in different
contexts.
You can pick fonts for Window Maker in the Font configuration section of
WPrefs.
After you have done all the steps described there, you can enable antialiased
fonts either by adding AntialiasedText = Yes; in ~/GNUstep/Defaults/WindowMaker
or by launching WPrefs and checking the "Smooth font edges" in the Expert User
Preferences panel.
Antialiased text is enabled by default, but can be disabled by adding
As a general note you should always use a True Type font for your fonts if
antialiasing is enabled, or alias a normal font to a True Type in the Xft
configuration (read the details in README.antialiasing). Else you may get
unepleasant results in the look of your screen :P
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
---------------
@@ -54,6 +135,31 @@ or, in case you want a submenu:
("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
@@ -245,9 +351,10 @@ 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).
Window Maker saves the client supplied icons in
~/GNUstep/Library/WindowMaker/CachedPixmaps 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
@@ -255,12 +362,12 @@ 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.
and removing all references to icons in ~/GNUstep/Library/WindowMaker/CachedPixmaps
which can be annoying, new code was added to Window Maker to permit the
regeneration of images in ~/GNUstep/Library/WindowMaker/CachedPixmaps 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
delete all *.xpm files from ~/GNUstep/Library/WindowMaker/CachedPixmaps. 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.
@@ -670,7 +777,7 @@ Themes
Removed all themes from the source tree, and moved them in a separate package.
You can download the new package from the same place as this package:
ftp://ftp.windowmaker.org/pub/beta/srcs/
ftp://ftp.windowmaker.info/pub/beta/srcs/
Look after WindowMaker-extra-<version-number>.tar.gz
Also WindowMaker-extra pack include the old WindowMaker-data.tar.gz which only
contained icons.
@@ -765,7 +872,7 @@ libPropList
WARNING!!! libPropList was removed from the Window Maker distribution
and is being distributed separately. If you dont have it installed yet,
get it from ftp.windowmaker.org/pub/libs and install before building
get it from ftp.windowmaker.info/pub/libs and install before building
Window Maker.
@@ -1126,7 +1233,7 @@ Persistent Program Suplied Icons
Application supplied icons are now stored, so that the dock will keep
showing them after the app is exited. The icons are stored at
~/GNUstep/.AppInfo/WindowMaker/
~/GNUstep/Library/WindowMaker/CachedPixmaps
Sound support

244
README
View File

@@ -4,8 +4,7 @@
GNU Window Maker
X11 Window Manager
<http://windowmaker.org>
<ftp://ftp.windowmaker.org>
<http://windowmaker.org>
by
@@ -41,25 +40,25 @@
Description
===========
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).
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).
Window Maker was designed keeping integration with GNUstep in mind and is the
"official" window manager for it. It is also part of the GNU project
(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.
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.
Hints (information given by applications to integrate well with the window
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.
Window Maker was previously called WindowMaker.
Window Maker has no connection with Windowmaker, the software for
making windows and doors.
Window Maker has no connection with Windowmaker, the software for making windows
and doors.
Documentation
@@ -71,8 +70,8 @@ Read before asking.
in the directories.
* INSTALL has installation instructions and some troubleshooting tips.
You're meant to read it before installing. it was not written just to
fill up space in the package...
You're meant to read it before installing. it was not written just to fill up
space in the package.
* FAQ: Frequently Asked Questions. READ IT!!! FAQ.I18N is for
internationalization related questions.
@@ -87,7 +86,6 @@ including platform specific packages of Window Maker.
* ChangeLog: what changed from the previous version?
* BUGS: list of known bugs
*** Tutorial
@@ -101,8 +99,6 @@ http://www.linuxfocus.org/~georges.t/
The Window Maker User's Guide can be downloaded from the official ftp
or web sites.
It can also be viewed in HTML format in:
http://people.delphi.com/crc3419/WMUserGuide/index.htm
The User Guide explains how to use Window Maker, the configuration files
and options.
@@ -118,29 +114,29 @@ Directories & Files in the Source Tree
======================================
* Install is a script for configuring and compiling Window Maker in a easy
way (not that the normal way is difficult, but...).
way (not that the normal way is difficult, but...).
* AUTHORS: the credits
* TODO: plans for the future
* contrib/ has some contributed patches that are not supported by Window Maker
because they conflict with design filosophies of the developers or some
other reason.
because they conflict with design philosophies of the developers or some other
reason.
* util/ has various utility programs.
* WPrefs.app/ is the configuration program.
* src/wconfig.h has compile time options you can change to select some
options/features and other stuff.
options/features and other stuff.
* WINGs/ NEXTSTEP lookalike widget library
* wrlib/ image processing library
* po/ has message catalogs wich are the translated versions of the messages
displayed by Window Maker.
displayed by Window Maker.
* docklib-x.x.tar.gz a library for writing dockapps
@@ -149,139 +145,109 @@ HELP ME!!!
==========
There is a mailing list for discussing Window Maker at
wm-user@windowmaker.org To subscribe to it, send a message containing:
subscribe
in the subject of the message to wm-user-request@windowmaker.org
wmaker-user@ilists.windowmaker.org To subscribe to it, send a message to
wmaker-user-subscribe@lists.windowmaker.info
If you got a problem, ask there (after reading the docs, of course). The
people there is more likely to be able to answer your questions than we are.
For bug reports use the BUGFORM.
If you got a problem, ask there (after reading the docs, of course). The people
there is more likely to be able to answer your questions than we are. For bug
reports use the BUGFORM.
If you have a problem with a precompiled version of Window Maker
(rpm, deb etc), first ask the person who made the package.
If you have a problem with a precompiled version of Window Maker (rpm, deb etc),
first ask the person who made the package.
IMPORTANT NOTE: when asking for help (in the mailing list or to the
developerts, directly) *always* send information about the system you are
using. You can use the system information section at the end of BUGFORM as a
guideline. Another thing: please don't send HTML mail.
IMPORTANT NOTE: when asking for help (in the mailing list or to the developerts,
directly) *always* send information about the system you are using. You can use
the system information section at the end of BUGFORM as a guideline. Another
thing: please don't send HTML mail.
There is also a #windowmaker IRC channel at openprojects. To join there,
connect your irc client to irc.openprojects.net, irc.linux.com or some other
server of that network.
There is also a #windowmaker IRC channel at freenode. To join there, connect
your irc client to irc.freenode.net. irc.windowmaker.org will direct you to the
correct IRC network.
GNUstep
=======
GNUstep is a complete object-oriented development system, based on the
OpenStep specification released by NeXT(tm) (now Apple(tm)) and Sun(tm). It
will provide everything one needs to produce cross-platform, object-oriented,
graphical (and non-graphical) applications; providing among other things,
base system libraries, a high-level GUI application framework that uses a
Display PostScript(tm)-like imaging model (DGS), objects for accessing
relational databases, distributed objects and a graphical development
environment, with tools like interface modeller, a project management system
(project center) and other tools.
GNUstep is a complete object-oriented development system, based on the OpenStep
specification released by NeXT(tm) (now Apple(tm)) and Sun(tm). It will provide
everything one needs to produce cross-platform, object-oriented, graphical (and
non-graphical) applications; providing among other things, base system
libraries, a high-level GUI application framework that uses a Display
PostScript(tm)-like imaging model (DGS), objects for accessing relational
databases, distributed objects and a graphical development environment, with
tools like interface modeller, a project management system (project center) and
other tools.
The GNUstep development system will be used to create a user environment,
with everything needed for a complete graphical user interface, such as a
file viewer, text editors and other applications. Note that the user
environment (or "desktop environment") is only a small part of the whole
GNUstep project and therefore it does not "compete" with other projects like
KDE or GNOME, simply because they are completely different things.
The GNUstep development system will be used to create a user environment, with
everything needed for a complete graphical user interface, such as a file
viewer, text editors and other applications. Note that the user environment (or
"desktop environment") is only a small part of the whole GNUstep project and
therefore it does not "compete" with other projects like KDE or GNOME, simply
because they are completely different things.
For more information on the GNUstep project, visit: http://www.gnustep.org
and http://gnustep.current.nu
Running multiple instances of Window Maker
==========================================
It is not a good idea to run more than one instance of Window Maker
from the same user (so that wmaker will use the same configuration
files) at the same time. You might get unexpected behaviour when Window Maker
updates it's configuration files.
from the same user (so that wmaker will use the same configuration files) at the
same time. You might get unexpected behaviour when Window Maker updates it's
configuration files.
If you really desire to do this, try running Window Maker with the
command line option --static so that it will not update or change
any of the configuration files.
If you really desire to do this, try running Window Maker with the command line
option --static so that it will not update or change any of the configuration
files.
Sound support
=============
Sound is supported for Linux and FreeBSD systems with the use of a
separately distributed module called WSoundServer. There is also a graphical
configuration tool for setting up your sounds called WSoundPrefs.
You can download these at:
Sound is supported for Linux and FreeBSD systems with the use of a separately
distributed module called WSoundServer. There is also a graphical configuration
tool for setting up your sounds called WSoundPrefs. You can download these at:
http://shadowmere.student.utwente.nl/
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
==================
If you want to diminish Window Maker's memory usage and improve performance,
while keeping a nice appearance and good functionality, follow the items
bellow:
while keeping a nice appearance and good functionality, follow the items bellow:
- use solid textures for everything, mainly titlebars and menus. If you
want a nice looking desktop, use the Traditional style.
- use solid textures for everything, mainly titlebars and menus. If you want a
nice looking desktop, use the Traditional style.
- turn NewStyle and Superfluous off
- do not bind many shortcuts in the menu and keep only the essential items
in the menu
- do not bind many shortcuts in the menu and keep only the essential items in
the menu
- turn on DisableClip
- edit wconfig.h and disable the NUMLOCK_HACK and the features you
don't use anyway (keep in mind that some of the #defines might not
work, as they are not fully supported). Make sure to always keep
NumLock and ScrollLock turned off.
- edit wconfig.h and disable the NUMLOCK_HACK and the features you don't use
anyway (keep in mind that some of the #defines might not work, as they are not
fully supported). Make sure to always keep NumLock and ScrollLock turned off.
- turn on DisableAnimations. You can also #undefine ANIMATIONS in wconfig.h
- strip down the default IconPath and PixmapPath entries to contain only
the paths that you really have in your system.
- do not use large images in the root background
- remove support for image formats you don't use
- 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. Also, disable anti-aliased text support in ~/GNUstep/Defaults/WMGLOBAL.
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. Also, disable anti-aliased text support in ~/GNUstep/Defaults/WMGLOBAL.
Keyboard Mouse Control
======================
Many people ask about adding keyboard control of mouse, like in fvwm,
but Window Maker will not have such feature. The XKB extension supports
mouse simulation from the keyboard, in a much more powerfull fashion than
any simulation done by a window manager.
Many people ask about adding keyboard control of mouse, like in fvwm, but Window
Maker will not have such feature. The XKB extension supports mouse simulation
from the keyboard, in a much more powerfull fashion than any simulation done by
a window manager.
To enable it, hit the Control+Shift+NumLock or Shift+NumLock key combination.
To enable it, hit the Control+Shift+NumLock or Shift+NumLock key combination.
You should hear the speaker beeping. To disable it, do the same thing.
To control the mouse the numeric keypad is used as follows:
@@ -307,28 +273,27 @@ milleage may vary.
How to make a gdb backtrace
===========================
Backtraces can help us fix bugs that make Window Maker crash. If you
find a bug that crashes Window Maker, please send a backtrace with your
bug report.
Backtraces can help us fix bugs that make Window Maker crash. If you find a bug
that crashes Window Maker, please send a backtrace with your bug report.
To make a usefull backtrace, you need a core file with debugging
information produced by Window Maker when it crashes. It should
have been installed without stripping too.
To make a usefull backtrace, you need a core file with debugging information
produced by Window Maker when it crashes. It should have been installed without
stripping too.
To compile wmaker with debugging information:
./configure
make CFLAGS=-g
./configure
make CFLAGS=-g
If you get the dialog window telling you that wmaker crashed and
asks you what to do, tell it to "Abort and leave a core file".
If you get the dialog window telling you that wmaker crashed and asks you what
to do, tell it to "Abort and leave a core file".
script
cd src
gdb .libs/wmaker path_to_the_core_file
script
cd src
gdb .libs/wmaker path_to_the_core_file
Then, in the gdb prompt type "bt". Quit from gdb by typing "quit"
and then, in the shell prompt, type "exit".
Then, in the gdb prompt type "bt". Quit from gdb by typing "quit" and then, in
the shell prompt, type "exit".
The file named typescript will contain the backtrace.
@@ -337,20 +302,19 @@ The file named typescript will contain the backtrace.
Copyrights & Disclaimers
========================
Window Maker is copyrighted by Alfredo K. Kojima and is licensed through the
GNU General Public License. Read the COPYING file for the complete license.
Window Maker is copyrighted by Alfredo K. Kojima and is licensed through the GNU
General Public License. Read the COPYING file for the complete license.
The icons that are distributed with this program and were made by Marco van
Hylckama Vlieg, are licensed through the GNU General Public License. Read the
Hylckama Vlieg, are licensed through the GNU General Public License. Read the
COPYING file for the complete license.
The icons listed in COPYING.WTFPL and are distributed in this
program and were made by Banlu Kemiyatorn (]d), are licensed through the
"do What The Fuck you want to Public License". Read the COPYING.WTFPL
file for the complete license.
The icons listed in COPYING.WTFPL and are distributed in this program and were
made by Banlu Kemiyatorn (]d), are licensed through the "do What The Fuck you
want to Public License". Read the COPYING.WTFPL file for the complete license.
NeXT, OpenStep and NEXTSTEP are a trademarks of NeXT Computer, Inc.
All other trademarks are property of their respective owners.
NeXT, OpenStep and NEXTSTEP are a trademarks of NeXT Computer, Inc. All other
trademarks are property of their respective owners.
The authors reserve the right to make changes in the software without prior
notice.
@@ -359,19 +323,19 @@ notice.
Authors
=======
Alfredo K. Kojima <kojima@windowmaker.org>
Dan Pascu <dan@windowmaker.org>
]d <id@windowmaker.org>
Alfredo K. Kojima <kojima@windowmaker.info>
Dan Pascu <dan@windowmaker.info>
]d <id@windowmaker.info>
Please don't ask us questions before reading the documentation (esp. the
FAQ, this file and INSTALL files) and about "cool" things you see in
people's desktop screenshots.
Please don't ask us questions before reading the documentation (esp. the FAQ,
this file and INSTALL files) and about "cool" things you see in people's desktop
screenshots.
The AUTHORS file contains a list of the people who have contributed to the
project. The name of people who have helped with localization (translation)
can be found in po/README and Window Maker/README
project. The name of people who have helped with localization (translation) 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
to wmaker-dev@lists.windowmaker.org

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,154 +0,0 @@
Here is a step by step mini-HOWTO of the things needed to be done to get
antialiased fonts in Window Maker quickly:
1. Make sure you have a recent XFree server (4.x or newer, but 4.2.x or newer
is preferable). Also make sure it supports the RENDER extension (you can
see this in the output of xdpyinfo) and it has the freetype extension
module (you should have a /usr/X11R6/lib/modules/fonts/libfreetype.a file).
2. Make sure you have the following lines in your XF86Config file in the
"Module" section:
Load "type1"
Load "freetype"
Load "extmod"
(Not sure if extmod is really required for antialiased fonts, but it won't
hurt).
3. Install some True Type fonts say in /usr/X11R6/lib/X11/fonts/TrueType
4. To generate the fonts.scale and fonts.dir files in the directory where the
True Type fonts were installed you need an utility named ttmkfdir. There is
also an utility named mkttfdir but that only supports ISO8859-1 and JIS
encodings. From my experience ttmkfdir will recognize more fonts and works
better so I recommend using this one. You should issue these commands to
generate the fonts.scale and fonts.dir files:
cd /usr/X11R6/lib/X11/fonts/TrueType
ttmkfdir -o fonts.scale
mkfontdir
5. Now add /usr/X11R6/lib/X11/fonts/TrueType to your font path in the
XF86Config file. It goes in the "Files" section as:
FontPath "/usr/X11R6/lib/X11/fonts/TrueType"
I recommend to put this at the top of your font path list.
6. You can restart the X server at this point, to make all these changes take
effect.
7. Edit your /etc/X11/XftConfig file (or ~/.xftconfig if you don't have
access to edit the global file). Make sure that the True Type font path is
_before_ the Type1 font path. You should have something like this:
dir "/usr/X11R6/lib/X11/fonts/TrueType"
dir "/usr/X11R6/lib/X11/fonts/Type1"
If you add extra True type paths, add them before the Type1 path
If the Type1 path is first, and the Xft library fails to find/load the font
you asked for, it will load some very ugly defaults.
A sample XftConfig file is included with the Window Maker source at
toplevel as Sample.XftConfig. You can use that as reference and for ideas.
8. Compile and install Window Maker. No special switches are needed. However
watch the ./configure output and check if it says that Antialiased text
support is enabled in WINGs. If not, probably it failed to find libXft.
Check that you have the development files for your X server installed.
9. Edit ~/GNUstep/Defaults/WMGLOBAL and add entries for the following:
AntialiasedSystemFont = "-*-trebuchet ms-medium-r-normal-*-%d-*-*-*-*-*-*-*";
AntialiasedBoldSystemFont = "-*-trebuchet ms-bold-r-normal-*-%d-*-*-*-*-*-*-*";
AntialiasedText = Yes;
Use a font that you have installed on your system (arial and "trebuchet ms"
are good choices).
If AntialiasedText is enabled in WMGLOBAL, all WINGs based application will
use antialiased fonts by default (this includes Window Maker).
You can then disable the antialiased fonts on the per application basis by
adding an AntialiasedText = No; entry in their specific configuration files
The entry in the application's configuration file will always overwrite the
global setting from WMGLOBAL.
However if you want most of your WINGs applications to use normal fonts,
but just a few to use antialiased fonts, then put AntialiasedText = No; in
WMGLOBAL, and enable antialiased fonts only in the applications you want,
by adding the AntialiasedText = Yes; in their own configuration files
At this point all WINGs based application should be able to use antialiased
fonts. You can check this by enabling antialiasing and starting WPrefs. It
should show nice antialiased text everywhere.
Now to enable antialiased fonts in Window Maker, there are 2 possibilities:
10a. Add entries for all font options in ~/GNUstep/Defaults/WindowMaker
containing True Type fonts ("trebuchet ms", arial or verdana should work
fine). Don't use non True Type fonts like Helvetica, because Xft won't
load them, instead will load some defaults. Depending on the TrueTupe vs
Type1 path order in your XftConfig file and the options declared there,
it can range from "Extremely ugly" (if path to Type1 is before the path
to True Type fonts), to "Acceptable" (if the True Type path comes first).
Also modify all your themes to hold True Type fonts for all the font
options
10b. Leave the fonts as they are (for example leave the default Helvetica) in
~/GNUstep/Defaults/WindowMaker, and add an alias (or more) in the
XftConfig file. This alias should look something like:
match any family == "Helvetica" edit family += "Trebuchet MS";
match any family == "Courier" edit family += "Courier New";
...
Which means that every time the Xft library (which is used the WINGs) gets
a request to load a Helvetica font, it will load the "trebuchet ms" font
instead, keeping all the other font parameters unchanged.
Each of these 2 methods have advantages and disadvantages.
Case 10a:
---------
With the first method, you do more work and you will not be able to use
existing themes by just enabling antialiasing, because it will load default
fonts which may not look as you want. You will need to change the fonts in
every theme you want to use by replacing them with True Type fonts.
If you plan to switch antialiasing on/off, this method has a big disadvantage:
you need to edit your configuration/themes with every switch (at least if you
want Helvetica or other Type1 font for the non-antialiased case). This is
because if you have a font set to (say) Arial and want to switch antialiasing
off, you will get the normal version of Arial and you need to edit your font
options again to see Helvetica.
If you are happy with how the non-antialiased version of your True Type fonts
looks this disadvantage goes away. In this case you will use the same font
(say arial) with both antialiased/normal fonts.
OTOH this method gives you fine tune over the fonts used in Window Maker and
you will be able to set each individual font as you like.
Case 10b:
---------
With the second method, you have almost nothing to do. Just define the proper
aliases in the XftConfig file, and whenever some of the fonts you aliased is
requested it's True Type alias will be loaded.
This way you can use all your old themes and all you have to do except adding
the aliases to the XftConfig file, is to enable or disable antialiasing the
the configuration file.
For example if Helvetica is aliased to Arial, if you have antialiasing
disabled, Helvetica will be used, but if you enable antialiasing Arial will
be used instead. This method is very handy if you want to use existing themes
you don't want to modify, or if you want to switch antialiasing on/off and
don't want to edit your font options with every such switch.
The downside of this method is that if you don't have some font aliased in
the XftConfig file, it will load some default instead.
Also another downside is that you cannot fine tune your fonts. They will be
translated by the alias rules in XftConfig from whatever they are defined in
the theme. Sometimes this is not optimal.
For example if you aliased Helvetica to "Trebuchet MS" and all your screen
fonts are Helvetica (at different sizes). With antialiasing disabled the
Helvetica fonts everywhere looks good. However with antialiasing enabled the
10pt font used by the miniwindow titles looks better if Arial is used. Also
the 10pt font used by the clip looks better with Verdana. Same for the 12pt
font used by balloons which is also better if Arial is used. But with this
method you cannot do such fine tuning, unless you edit your font options in
the Window Maker configuration file, in which case there will be a mix of the
2 methods.
11. At this point if all was properly done, all you have to do is either add
an AntialiasedText = Yes; entry to ~/GNUstep/Defaults/WindowMaker, or
start WPrefs, goto the Expert Settings panel, and check the
"Smooth font edges" option. Currently you need to restart if you switch
antialiasing on/off (this may change in the future)
Final note: antialiased text only looks good if a True Type font is
used for it. Either by directly specifying it, or providing an alias in
the XftConfig file. The idea is that the font Xft loads (after all the
aliases have beed resolved) should point to a True Type font. Else
unpleasant results may show on your screen :P

View File

@@ -4,8 +4,8 @@
GNU Window Maker
X11 Window Manager
<http://windowmaker.org>
<ftp://ftp.windowmaker.org>
<http://windowmaker.info>
<ftp://ftp.windowmaker.info>
por
@@ -147,10 +147,10 @@ SOCORRO!!!
==========
Hay una lista de correo para discutir sobre Window Maker en
wm-user@windowmaker.org. Para suscribirse, envie un mensaje que contenga:
wm-user@windowmaker.info. Para suscribirse, envie un mensaje que contenga:
subscribe
en el tema del mensaje a wm-user-request@windowmaker.org
en el tema del mensaje a wm-user-request@windowmaker.info
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
@@ -217,31 +217,6 @@ 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.
Soporte para OpenL**k
=====================
Calculo que muchos usuarios, principalmente del mundo académico,
tienen que usar aplicaciones escritas usando los toolkits OpenL**k,
así que tener soporte para estas aplicaciones debe ser de algún uso.
Para activarlo, use --enable-openlook al hacer el configure. Note que
no todo está implementado.
Las cosas implementadas incluyen consejos de adorno y el push-pin. Las cosas
no implementadas incluyen _SUN_WINDOW_STATE (la cosa compuesta que lleva el estado),
cosas que interesan sobre arrastrar y soltar, cabecera (no estoy seguro de que sea así)
y cadenas footer.
Por favor hágame saber si algo no funciona. Si la característica ya está implimentada,
pero no funciona por un error, intentaré arreglarlo. Si esta es una característica no
implementada y menciona que es importante (obs: no solo superficial), consideraré
implementarlo.
El estado "out" del pushpin es emular un botón presionado. Solo cliquee
en el botón para hacer que se libere, lo cuál corresponde al estado
pinned-in del pushpin. Si pulsa otra vez en el boton liberado, servirá de
botón normal de cerrado: cerrará la ventana.
Ajuste de Rendimiento.
=====================
@@ -350,9 +325,9 @@ aviso.
Autores
=======
Alfredo K. Kojima <kojima@windowmaker.org>
Dan Pascu <dan@windowmaker.org>
]d <id@windowmaker.org>
Alfredo K. Kojima <kojima@windowmaker.info>
Dan Pascu <dan@windowmaker.info>
]d <id@windowmaker.info>
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
@@ -363,7 +338,7 @@ 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
y enviémelos a developers@windowmaker.info

View File

@@ -3,8 +3,8 @@
GNU Window Maker
Gerenciador de Janelas X11
<http://windowmaker.org>
<ftp://ftp.windowmaker.org>
<http://windowmaker.info>
<ftp://ftp.windowmaker.info>
por
@@ -143,10 +143,10 @@ SOCORRO!!!
==========
Há uma lista de discussão para debate de questões sobre o Window Maker
no wm-user@windowmaker.org. Para inscrever-se, mande uma mensagem
no wm-user@windowmaker.info. Para inscrever-se, mande uma mensagem
contendo:
subscribe
no campo de assunto da mensagem para wm-user-request@windowmaker.org
no campo de assunto da mensagem para wm-user-request@windowmaker.info
Se você tiver algum problema, pergunte lá (somente depois de ter lido os
documentos, é claro). As pessoas da lista estão mais preparadas para
@@ -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
====================
@@ -360,9 +332,9 @@ qualquer aviso pr
Autores
=======
Alfredo K. Kojima <kojima@windowmaker.org>
Dan Pascu <dan@windowmaker.org>
]d <id@windowmaker.org>
Alfredo K. Kojima <kojima@windowmaker.info>
Dan Pascu <dan@windowmaker.info>
]d <id@windowmaker.info>
Por favor não nos perguntem coisas antes de ler a documentação (o FAQ,
este arquivo e os arquivos INSTALL), ou sobre coisas "legais" que você
@@ -373,7 +345,7 @@ O nome das pessoas que ajudaram com a tradu
Window Maker/README
Se você tem algum comentário, correção ou deseja relatar bugs (junto com
o BUGFORM) mande-os para developers@windowmaker.org
o BUGFORM) mande-os para developers@windowmaker.info
Traduzido por: Ricardo Sartori <sartori@inf.ufsc.br>

View File

@@ -1,79 +0,0 @@
# $XFree86: xc/lib/Xft/XftConfig.cpp,v 1.8 2001/11/21 23:41:12 keithp Exp $
dir "/usr/share/fonts/truetype"
dir "/usr/X11R6/lib/X11/fonts/TrueType"
dir "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
dir "/usr/X11R6/lib/X11/fonts/Type1"
#
# alias 'fixed' for 'mono'
#
match any family == "fixed" edit family =+ "mono";
#
# Check users config file
#
includeif "~/.xftconfig"
#
# Substitute TrueType fonts for Type1 versions
#
match any family == "Times" edit family += "Times New Roman";
#match any family == "Helvetica" edit family += "Verdana";
#match any family == "Helvetica" edit family += "Arial";
match any family == "Helvetica" edit family += "Trebuchet MS";
match any family == "Courier" edit family += "Courier New";
#
# Use TrueType fonts for defaults
#
match any family == "serif" edit family += "Times New Roman";
match any family == "sans" edit family += "Verdana";
#
# Use monotype.com (andale) face where possible
#
match
any family == "mono"
all slant == roman
all weight < bold
edit
family += "monotype.com";
#
# otherwise, use courier
#
match any family == "mono" edit family += "Courier New";
#
# Alias between XLFD families and font file family name, prefer local fonts
#
match any family == "charter" edit family += "bitstream charter";
match any family == "bitstream charter" edit family =+ "charter";
match any family == "Charter" edit family += "Bitstream Charter";
match any family == "Bitstream Charter" edit family =+ "Charter";
match any family == "Lucidux Serif" edit family += "LuciduxSerif";
match any family == "LuciduxSerif" edit family =+ "Lucidux Serif";
match any family == "Lucidux Sans" edit family += "LuciduxSans";
match any family == "LuciduxSans" edit family =+ "Lucidux Sans";
match any family == "Lucidux Mono" edit family += "LuciduxMono";
match any family == "LuciduxMono" edit family =+ "Lucidux Mono";
#
# TrueType font aliases
#
match any family == "Comic Sans" edit family += "Comic Sans MS";
match any family == "Comic Sans MS" edit family =+ "Comic Sans";
match any family == "Trebuchet" edit family += "Trebuchet MS";
match any family == "Trebuchet MS" edit family =+ "Trebuchet";
match any family == "Monotype" edit family =+ "Monotype.com";
match any family == "Andale Mono" edit family += "Monotype.com";
match any family == "Monotype.com" edit family =+ "Andale Mono";
#
#
match any family == "webdings" edit encoding += "glyphs-fontspecific";
match any family == "symbol" edit encoding += "glyphs-fontspecific";

12
TODO
View File

@@ -7,13 +7,14 @@ 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
+ finish selections and DND stuff in WINGs
- check whether window states are being saved/restored properly via netwm
on restart/crash-restart (grep for XXX/TODO)
Need to do:
===========
- figure out a better gnustep path for wprefs.app installation
- impelment a generic pixmap type, which receives attributes
(scaled/maxscaled/centered/tiled, smoothed, size/position, ...)
- allow user to select/restore default root menu from wprefs
@@ -61,3 +62,10 @@ sample implementation (twm?) it might be supported. Maybe dtwm supports
it? I dont know...
After 1.0.0 is released
=======================
- rework/redesign the appicon/dock/clip concept
- maybe rewrite the main code in obj-c or c++
- major clean up in theming/texturing stuff
- dynamically loadable everything

View File

@@ -0,0 +1,86 @@
____________
Introduction
------------
This short tutorial is meant to help you help me in the task
of having a maintainable and bug-free Window Maker.
It assumes you have 'git' correctly installed and you have set
the most basic configuration options via 'git config' (or by
editing the $HOME/.gitconfig file yourself). See the end
of this file for an example .gitconfig (which is the one
I use).
You should probably by now have already cloned my repository,
but here is how you can do it just in case:
# this is the preferred method (ie faster, native implementation)
git clone git://repo.or.cz/wmaker-crm.git
# use the http method only if are behind a firewall which blocks git://
git clone http://repo.or.cz/r/wmaker-crm.git
__________________________________
How to submit patches the git way
----------------------------------
Suppose you have a working copy of the git repo and you found
a bug in Window Maker and you know how to fix it. This is
what you can do to submit your patch in a way which will allow
me to apply it quickly.
# Optional: Create a new branch (just to be safe in case you screw up)
git checkout -b my-new-branch
Now you edit and save the files to fix the bug...
# Optional: Check what you did, review etc
git diff
# if it looks good, commit your changes
git commit -a
# git will pop up the editor which you configured in .gitconfig so
# that you will be able to write a commit log. It will use the 'vi'
# editor otherwise.
(write a _good_ and succinct commit log, explaining what you fixed etc)
# Prepare the patch to submit to the mailing-list. This step will create
# a file named 0001-subject-of-your-patch.patch from the last commit
# (use HEAD~2 if you want patches for the last 2 commits etc)
git format-patch HEAD~1
After the above steps, you are ready to send the created .patch file
to the mailing-list! Just send it as-is, and I will be able to apply
it with
# this is how I am going to apply your patch
git am 0001-subject-of-your-patch.patch
and it will automatically append your commit to the repo, with the
proper authorship, date, subject, commit log etc.
___________________
Example .gitconfig
-------------------
[user]
name = Erwin Schrodinger
email = schrodinger@gmail.com
[core]
editor = xjed
[status]
showUntrackedFiles = no
[color]
branch = auto
status = auto
diff = auto
ui = auto
[apply]
whitespace = fix

View File

@@ -1,4 +0,0 @@
Makefile Makefile.in
get-wings-flags get-wutil-flags
.libs *.pc
.psrc .inslog2 tca.map tca.log pchdir *.rpt

View File

@@ -1,8 +1,26 @@
Changes since wmaker 0.92.0:
............................
- updated the XDND code in to work with GDK based applications.
WINGs based applications should now work with both KDE and GNOME
applications (Sylvain Reynal <sreynal@nerim.net>)
- better check for the XDND protocol version when interoperating with other
applications. As it seems xdnd version 3 (which WINGs supports) and newer
are not backward compatible with xdnd version 1 and 2. This is why WINGs
applications cannot interoperate with GNUstep applications (which uses
xdnd version 2). Xdnd version 4 and 5 are backwards compatible with
version 3 though. (Sylvain Reynal <sreynal@nerim.net>)
- removed dependency on rgb.txt from X11 and issues with locating it on the
filesystem for different systems/distributions.
- Removed dependency on rgb.txt (from X11) and issues with locating it on the
filesystem for different systems/distributions.
Changes since wmaker 0.80.1:
............................
- added WMSetConnectionShutdownOnClose()
- added an extra member to the ConnectionDelegate: canResumeSending
- 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).
@@ -11,31 +29,20 @@ Changes since wmaker 0.80.1:
- Added alpha channel to WMColor. 2 new functions also:
WMCreateRGBAColor() and WMSetColorAlpha()
- Miscelaneous code cleanups in wtext.c
- Added Xft support in WINGs (for drawing antialiased fonts with transparency).
- Added a new function: WMCreateAntialiasedFont() to create a font which will
be drawn antialiased using Xft (if available, else function returns NULL)
- New options in WMGLOBAL: AntialiasedText, AntialiasedSystemFont and
AntialiasedBoldSystemFont. Check NEWS for details.
- 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 WMIsAntialiasedFont(WMFont *font) to check if a font is antialiased.
- Added WMGetColorAlpha(WMColor *color)
- Better outline when drawing balloons.
- Added WMCreateFontWithFlags()
- 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 WMCreateAntialiasedFontSet() (like WMCreateAntialiasedFont() but for
languages with multibyte text). Note however that these specific font
creating functions (as well as WMCreateNormalFont() and WMCreateFontSet())
are not meant to be called directly except in very special cases.
The more generic WMCreateFont() or WMCreateFontWithFlags() should be used.
- Multibyte languages can now render antialiased text too (only tested on
russian since this is the only multibyte language I can test).
- 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
@@ -45,8 +52,6 @@ Changes since wmaker 0.80.1:
- Added WMGetWidgetBackgroundColor()
- Code cleanup in wtext.c
- Fixed a memory leak in wfontpanel.c
- 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)
- Fixed WMGetTextDefaultColor() not to retain the returned color. It returns
only a reference to the internal color, which you shouldn't release
- Added wstrndup()
@@ -58,13 +63,15 @@ Changes since wmaker 0.80.1:
- 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>)
- 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:

View File

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

View File

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

View File

@@ -3,29 +3,40 @@
AUTOMAKE_OPTIONS = no-dependencies
noinst_PROGRAMS = connect server fontl puzzle
noinst_PROGRAMS = connect server fontl puzzle colorpick
LDADD= $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la \
LDADD= $(top_builddir)/WINGs/libWINGs.la $(top_builddir)/wrlib/libwraster.la \
$(top_builddir)/WINGs/libWUtil.la \
@XFTLIBS@ @INTLIBS@
colorpick_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.la
fontl_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a
fontl_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.la
puzzle_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a
puzzle_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.la
connect_DEPENDENCIES = $(top_builddir)/WINGs/libWUtil.a
connect_DEPENDENCIES = $(top_builddir)/WINGs/libWUtil.la
connect_LDADD = $(top_builddir)/WINGs/libWUtil.a @LIBRARY_SEARCH_PATH@ \
connect_LDADD = $(top_builddir)/WINGs/libWUtil.la @LIBRARY_SEARCH_PATH@ \
@NETLIBS@ @INTLIBS@
server_DEPENDENCIES = $(top_builddir)/WINGs/libWUtil.a
server_DEPENDENCIES = $(top_builddir)/WINGs/libWUtil.la
server_LDADD = $(top_builddir)/WINGs/libWUtil.a @LIBRARY_SEARCH_PATH@ \
server_LDADD = $(top_builddir)/WINGs/libWUtil.la @LIBRARY_SEARCH_PATH@ \
@NETLIBS@ @INTLIBS@
INCLUDES = -I$(top_srcdir)/WINGs -I$(top_srcdir)/wrlib -I$(top_srcdir)/src \
-DRESOURCE_PATH=\"$(datadir)/WINGs\" @HEADER_SEARCH_PATH@ -DDEBUG
LIBTOOL = $(QUIET) $(SHELL) $(top_srcdir)/libtool $(LIBTOOL_ARG)
.c.o:
$(QUIET)$(COMPILE) -c $<
.c.obj:
$(QUIET)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
$(QUIET)$(LTCOMPILE) -c -o $@ $<

View File

@@ -0,0 +1,39 @@
#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,11 +1,10 @@
/*
* WINGs connect.c: example how to create a network client using WMConnection
*
*
* Copyright (c) 1999-2003 Dan Pascu
*
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -13,186 +12,161 @@
#include <WINGs/WINGs.h>
static int initialized = 0;
static void didReceiveInput(ConnectionDelegate * self, WMConnection * cPtr);
static void connectionDidDie(ConnectionDelegate * self, WMConnection * cPtr);
static void didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr);
static void connectionDidDie(ConnectionDelegate *self, WMConnection *cPtr);
static void didInitialize(ConnectionDelegate *self, WMConnection *cPtr);
static void didInitialize(ConnectionDelegate * self, WMConnection * cPtr);
static ConnectionDelegate socketDelegate = {
NULL, /* data */
NULL, /* canResumeSending */
NULL, /* didCatchException */
connectionDidDie, /* didDie */
didInitialize, /* didInitialize */
didReceiveInput, /* didReceiveInput */
NULL /* didTimeout */
NULL, /* data */
NULL, /* canResumeSending */
NULL, /* didCatchException */
connectionDidDie, /* didDie */
didInitialize, /* didInitialize */
didReceiveInput, /* didReceiveInput */
NULL /* didTimeout */
};
void
wAbort(Bool foo)
void wAbort(Bool foo)
{
exit(1);
exit(1);
}
static char*
getMessage(WMConnection *cPtr)
static char *getMessage(WMConnection * cPtr)
{
char *buffer;
WMData *aData;
int length;
char *buffer;
WMData *aData;
int length;
aData = WMGetConnectionAvailableData(cPtr);
if (!aData)
return NULL;
if ((length=WMGetDataLength(aData))==0) {
WMReleaseData(aData);
return NULL;
}
aData = WMGetConnectionAvailableData(cPtr);
if (!aData)
return NULL;
if ((length = WMGetDataLength(aData)) == 0) {
WMReleaseData(aData);
return NULL;
}
buffer = (char*)wmalloc(length+1);
WMGetDataBytes(aData, buffer);
buffer[length]= '\0';
WMReleaseData(aData);
buffer = (char *)wmalloc(length + 1);
WMGetDataBytes(aData, buffer);
buffer[length] = '\0';
WMReleaseData(aData);
return buffer;
return buffer;
}
static void
inputHandler(int fd, int mask, void *clientData)
static void inputHandler(int fd, int mask, void *clientData)
{
WMConnection *cPtr = (WMConnection*)clientData;
WMData *aData;
char buf[4096];
int n;
WMConnection *cPtr = (WMConnection *) clientData;
WMData *aData;
char buf[4096];
int n;
if (!initialized)
return;
if (!initialized)
return;
n = read(fd, buf, 4096);
if (n>0) {
aData = WMCreateDataWithBytes(buf, n);
WMSendConnectionData(cPtr, aData);
WMReleaseData(aData);
}
n = read(fd, buf, 4096);
if (n > 0) {
aData = WMCreateDataWithBytes(buf, n);
WMSendConnectionData(cPtr, aData);
WMReleaseData(aData);
}
}
static void
didReceiveInput(ConnectionDelegate *self, WMConnection *cPtr)
static void didReceiveInput(ConnectionDelegate * self, WMConnection * cPtr)
{
char *buffer;
char *buffer;
buffer = getMessage(cPtr);
if (!buffer) {
fprintf(stderr, "Connection closed by peer.\n");
exit(0);
}
buffer = getMessage(cPtr);
if (!buffer) {
fprintf(stderr, "Connection closed by peer.\n");
exit(0);
}
printf("%s", buffer);
printf("%s", buffer);
wfree(buffer);
wfree(buffer);
}
static void
connectionDidDie(ConnectionDelegate *self, WMConnection *cPtr)
static void connectionDidDie(ConnectionDelegate * self, WMConnection * cPtr)
{
WMCloseConnection(cPtr);
WMCloseConnection(cPtr);
fprintf(stderr, "Connection closed by peer.\n");
exit(0);
fprintf(stderr, "Connection closed by peer.\n");
exit(0);
}
static void
didInitialize(ConnectionDelegate *self, WMConnection *cPtr)
static void didInitialize(ConnectionDelegate * self, WMConnection * cPtr)
{
int state = WMGetConnectionState(cPtr);
WMHost *host;
int state = WMGetConnectionState(cPtr);
WMHost *host;
if (state == WCConnected) {
host = WMGetHostWithAddress(WMGetConnectionAddress(cPtr));
fprintf(stderr, "connected to '%s:%s'\n",
host?WMGetHostName(host):WMGetConnectionAddress(cPtr),
WMGetConnectionService(cPtr));
initialized = 1;
if (host)
WMReleaseHost(host);
return;
} else {
wsyserrorwithcode(WCErrorCode, "Unable to connect");
exit(1);
}
if (state == WCConnected) {
host = WMGetHostWithAddress(WMGetConnectionAddress(cPtr));
fprintf(stderr, "connected to '%s:%s'\n",
host ? WMGetHostName(host) : WMGetConnectionAddress(cPtr), WMGetConnectionService(cPtr));
initialized = 1;
if (host)
WMReleaseHost(host);
return;
} else {
wsyserrorwithcode(WCErrorCode, "Unable to connect");
exit(1);
}
}
int
main(int argc, char **argv)
int main(int argc, char **argv)
{
char *ProgName, *host, *port;
int i;
WMConnection *sPtr;
char *ProgName, *host, *port;
int i;
WMConnection *sPtr;
wsetabort(wAbort);
wsetabort(wAbort);
WMInitializeApplication("connect", &argc, argv);
WMInitializeApplication("connect", &argc, argv);
ProgName = strrchr(argv[0],'/');
if (!ProgName)
ProgName = argv[0];
else
ProgName++;
ProgName = strrchr(argv[0], '/');
if (!ProgName)
ProgName = argv[0];
else
ProgName++;
host = NULL;
port = "34567";
host = NULL;
port = "34567";
if (argc>1) {
for (i=1; i<argc; i++) {
if (strcmp(argv[i], "--help")==0 || strcmp(argv[i], "-h")==0) {
printf("usage: %s [host [port]]\n\n", ProgName);
exit(0);
} else {
if (!host)
host = argv[i];
else
port = argv[i];
}
}
}
if (argc > 1) {
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
printf("usage: %s [host [port]]\n\n", ProgName);
exit(0);
} else {
if (!host)
host = argv[i];
else
port = argv[i];
}
}
}
printf("Trying to make connection to '%s:%s'\n",
host?host:"localhost", port);
printf("Trying to make connection to '%s:%s'\n", host ? host : "localhost", port);
sPtr = WMCreateConnectionToAddressAndNotify(host, port, NULL);
if (!sPtr) {
wfatal("could not create connection. exiting");
exit(1);
}
sPtr = WMCreateConnectionToAddressAndNotify(host, port, NULL);
if (!sPtr) {
wfatal("could not create connection. exiting");
exit(1);
}
WMSetConnectionDelegate(sPtr, &socketDelegate);
WMSetConnectionDelegate(sPtr, &socketDelegate);
/* watch what user types and send it over the connection */
WMAddInputHandler(0, WIReadMask, inputHandler, sPtr);
/* watch what user types and send it over the connection */
WMAddInputHandler(0, WIReadMask, inputHandler, sPtr);
while (1) {
WHandleEvents();
}
while (1) {
WHandleEvents();
}
return 0;
return 0;
}

View File

@@ -1,8 +1,8 @@
/*
* WINGs demo: font lister
*
*
* 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,90 +15,84 @@
*
* 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.
*/
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <WINGs/WINGs.h>
#include <WINGs/WUtil.h>
void
wAbort()
void wAbort()
{
exit(0);
}
void show(WMWidget *self, void *data)
{
char buf[60];
void *d;
WMLabel *l = (WMLabel*)data;
d = WMGetHangedData(self);
sprintf(buf, "%i - 0x%x - 0%o", (int)d, (int)d, (int)d);
WMSetLabelText(l, buf);
}
void quit(WMWidget *self, void *data)
{
exit(0);
}
int
main(int argc, char **argv)
{
Display *dpy;
WMWindow *win;
WMScreen *scr;
WMButton *lab, *l0=NULL;
WMLabel *pos;
int x, y, c;
char buf[20];
WMInitializeApplication("FontView", &argc, argv);
dpy = XOpenDisplay("");
if (!dpy) {
wfatal("cant open display");
exit(0);
}
scr = WMCreateSimpleApplicationScreen(dpy);
win = WMCreateWindow(scr, "main");
WMResizeWidget(win, 20*33, 20+20*9);
WMSetWindowTitle(win, "Font Chars");
WMSetWindowCloseAction(win, quit, NULL);
pos = WMCreateLabel(win);
WMResizeWidget(pos, 20*33, 20);
WMMoveWidget(pos, 10, 5);
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;
}
}
}
WMRealizeWidget(win);
WMMapSubwidgets(win);
WMMapWidget(win);
WMScreenMainLoop(scr);
return 0;
}
void show(WMWidget * self, void *data)
{
char buf[60];
void *d;
WMLabel *l = (WMLabel *) data;
d = WMGetHangedData(self);
sprintf(buf, "%i - 0x%x - 0%o", (int)d, (int)d, (int)d);
WMSetLabelText(l, buf);
}
void quit(WMWidget * self, void *data)
{
exit(0);
}
int main(int argc, char **argv)
{
Display *dpy;
WMWindow *win;
WMScreen *scr;
WMButton *lab, *l0 = NULL;
WMLabel *pos;
int x, y, c;
char buf[20];
WMInitializeApplication("FontView", &argc, argv);
dpy = XOpenDisplay("");
if (!dpy) {
wfatal("cant open display");
exit(0);
}
scr = WMCreateSimpleApplicationScreen(dpy);
win = WMCreateWindow(scr, "main");
WMResizeWidget(win, 20 * 33, 20 + 20 * 9);
WMSetWindowTitle(win, "Font Chars");
WMSetWindowCloseAction(win, quit, NULL);
pos = WMCreateLabel(win);
WMResizeWidget(pos, 20 * 33, 20);
WMMoveWidget(pos, 10, 5);
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 *)(uintptr_t) c);
if (c > 0) {
WMGroupButtons(l0, lab);
} else {
l0 = lab;
}
}
}
WMRealizeWidget(win);
WMMapSubwidgets(win);
WMMapWidget(win);
WMScreenMainLoop(scr);
return 0;
}

View File

@@ -1,18 +1,14 @@
#include <stdlib.h>
#include <stdio.h>
#include <WINGs/WINGs.h>
#include <stdint.h>
#define MAX_SIZE 10*10
WMWindow *win;
WMButton *Button[MAX_SIZE];
char Map[MAX_SIZE];
signed char Map[MAX_SIZE];
int Size = 4;
int MoveCount;
@@ -20,222 +16,218 @@ int MoveCount;
int WinSize = 120;
Bool CheckWin(void)
{
int i;
for (i = 0; i < Size*Size-1; i++) {
if (Map[i] != i)
return False;
}
return True;
}
int i;
for (i = 0; i < Size * Size - 1; i++) {
if (Map[i] != i)
return False;
}
return True;
}
void MoveButton(int button, int x, int y)
{
WMMoveWidget(Button[button], x*(WinSize/Size), y*(WinSize/Size));
WMMoveWidget(Button[button], x * (WinSize / Size), y * (WinSize / Size));
}
Bool SlideButton(int button)
{
int x, y, 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;
}
if (x > 0 && MAP(x-1, y) < 0) {
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;
} else if (y > 0 && MAP(x, y-1) < 0) {
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;
} else {
return False;
}
return True;
}
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;
}
if (x > 0 && MAP(x - 1, y) < 0) {
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;
} else if (y > 0 && MAP(x, y - 1) < 0) {
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;
} else {
return False;
}
return True;
}
#define SWAP(a,b) {int tmp; tmp=a; a=b; b=tmp;}
void ResetGame(void)
{
int i, x, y, ox, oy;
MoveCount = 0;
for (i = 0; i < Size*Size-1; 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 i, 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;
MoveCount = 0;
for (i = 0; i < Size * Size - 1; 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);
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;
}
}
}
}
void buttonClick(WMWidget *w, void *ptr)
void buttonClick(WMWidget * w, void *ptr)
{
char buffer[300];
char buffer[300];
if (SlideButton((int)ptr)) {
MoveCount++;
if (SlideButton((uintptr_t)ptr)) {
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();
}
}
}
}
static void resizeObserver(void *self, WMNotification *notif)
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));
}
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));
}
}
}
}
}
int main(int argc, char **argv)
{
Display *dpy;
WMScreen *scr;
int x, y, i;
WMInitializeApplication("Puzzle", &argc, argv);
Display *dpy;
WMScreen *scr;
int x, y, i;
dpy = XOpenDisplay("");
if (!dpy) {
printf("could not open display\n");
exit(1);
}
scr = WMCreateScreen(dpy, DefaultScreen(dpy));
win = WMCreateWindow(scr, "puzzle");
WMResizeWidget(win, WinSize, WinSize);
WMSetWindowTitle(win, "zuPzel");
WMSetWindowMinSize(win, 80, 80);
WMSetWindowAspectRatio(win, 2, 2, 2, 2);
WMSetWindowResizeIncrements(win, Size, Size);
WMSetViewNotifySizeChanges(WMWidgetView(win), True);
WMAddNotificationObserver(resizeObserver, NULL,
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);
WMInitializeApplication("Puzzle", &argc, argv);
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++;
dpy = XOpenDisplay("");
if (!dpy) {
printf("could not open display\n");
exit(1);
}
}
WMMapSubwidgets(win);
WMMapWidget(win);
WMRealizeWidget(win);
ResetGame();
WMScreenMainLoop(scr);
return 0;
scr = WMCreateScreen(dpy, DefaultScreen(dpy));
win = WMCreateWindow(scr, "puzzle");
WMResizeWidget(win, WinSize, WinSize);
WMSetWindowTitle(win, "zuPzel");
WMSetWindowMinSize(win, 80, 80);
WMSetWindowAspectRatio(win, 2, 2, 2, 2);
WMSetWindowResizeIncrements(win, Size, Size);
WMSetViewNotifySizeChanges(WMWidgetView(win), True);
WMAddNotificationObserver(resizeObserver, NULL, 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);
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 *)(uintptr_t) 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;
}

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -10,24 +10,38 @@ includedir = @includedir@/WINGs
include_HEADERS = wtableview.h wtabledelegates.h
lib_LIBRARIES = libExtraWINGs.a
lib_LTLIBRARIES = libExtraWINGs.la
noinst_PROGRAMS = test
EXTRA_DIST =
libExtraWINGs_a_SOURCES = \
libExtraWINGs_a_AR = $(QUIET_AR) $(AR) $(ARFLAGS)
libExtraWINGs_la_SOURCES = \
wtableview.c \
wtabledelegates.c \
wtableview.h \
wtabledelegates.h
AM_CFLAGS = @NOSTRICTALIASING@
INCLUDES = -I$(top_srcdir)/wrlib -I$(top_srcdir)/WINGs \
-DRESOURCE_PATH=\"$(datadir)/WINGs\" @HEADER_SEARCH_PATH@ -DDEBUG
LDADD= $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la \
LDADD= $(top_builddir)/WINGs/libWINGs.la $(top_builddir)/wrlib/libwraster.la \
$(top_builddir)/WINGs/libWUtil.la \
@XFTLIBS@ @INTLIBS@
test_LDADD = wtableview.o wtabledelegates.o $(LDADD)
LIBTOOL = $(SHELL) $(top_srcdir)/libtool $(LIBTOOL_ARG)
.c.o:
$(QUIET)$(COMPILE) -c $<
.c.obj:
$(QUIET)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
$(QUIET)$(LTCOMPILE) -c -o $@ $<

View File

@@ -1,135 +1,124 @@
#include <WINGs/WINGs.h>
#include <stdio.h>
#include <stdint.h>
#include "wtableview.h"
#include "wtabledelegates.h"
static char *col1[20] = { 0 };
static char *col1[20] = {0};
static int col2[20];
static char *options[] = {
"Option1",
"Option1",
"Option2",
"Option3",
"Option4",
"Option5"
};
int numberOfRows(WMTableViewDelegate *self, WMTableView *table)
int numberOfRows(WMTableViewDelegate * self, WMTableView * table)
{
return 20;
return 20;
}
void *valueForCell(WMTableViewDelegate *self, WMTableColumn *column, int row)
void *valueForCell(WMTableViewDelegate * self, WMTableColumn * column, int row)
{
/*WMTableView *table = (WMTableView*)WMGetTableColumnTableView(column);*/
int i;
if (col1[0] == 0) {
for (i = 0; i < 20; i++) {
char buf[128];
/*WMTableView *table = (WMTableView*)WMGetTableColumnTableView(column); */
int i;
if (col1[0] == 0) {
for (i = 0; i < 20; i++) {
char buf[128];
sprintf(buf, "Test row %i", i);
sprintf(buf, "Test row %i", i);
col1[i] = wstrdup(buf);
col2[i] = 0;
col1[i] = wstrdup(buf);
col2[i] = 0;
}
}
}
if ((int)WMGetTableColumnId(column) == 1)
return col1[row];
else
return (void*)col2[row];
if ((uintptr_t)WMGetTableColumnId(column) == 1)
return col1[row];
else
return (void *)(uintptr_t) col2[row];
}
void setValueForCell(WMTableViewDelegate *self, WMTableColumn *column, int row,
void *data)
void setValueForCell(WMTableViewDelegate * self, WMTableColumn * column, int row, void *data)
{
if ((int)WMGetTableColumnId(column) == 1)
col1[row] = data;
else
col2[row] = (int)data;
if ((uintptr_t)WMGetTableColumnId(column) == 1)
col1[row] = data;
else
col2[row] = (uintptr_t) data;
}
static WMTableViewDelegate delegate = {
NULL,
NULL,
numberOfRows,
valueForCell,
setValueForCell
};
void clickedTable(WMWidget *w, void *self)
{
int row = WMGetTableViewClickedRow((WMTableView*)self);
WMEditTableViewRow(self, row);
}
int
main(int argc, char **argv)
void clickedTable(WMWidget * w, void *self)
{
WMScreen *scr;
WMWindow *win;
WMTableView *table;
WMTableColumn *col;
WMTableColumnDelegate *colDeleg;
WMInitializeApplication("test", &argc, argv);
scr = WMOpenScreen(NULL);
int row = WMGetTableViewClickedRow((WMTableView *) self);
XSynchronize(WMScreenDisplay(scr), 1);
win = WMCreateWindow(scr, "eweq");
WMResizeWidget(win, 400, 200);
WMMapWidget(win);
table = WMCreateTableView(win);
WMSetTableViewHasHorizontalScroller(table, 0);
WMSetViewExpandsToParent(WMWidgetView(table), 10, 10, 10, 10);
WMSetTableViewBackgroundColor(table, WMWhiteColor(scr));
/*WMSetTableViewGridColor(table, WMGrayColor(scr));*/
WMSetTableViewHeaderHeight(table, 20);
WMSetTableViewDelegate(table, &delegate);
WMSetTableViewAction(table, clickedTable, table);
colDeleg = WTCreateStringEditorDelegate(table);
col = WMCreateTableColumn("Group");
WMSetTableColumnWidth(col, 180);
WMAddTableViewColumn(table, col);
WMSetTableColumnDelegate(col, colDeleg);
WMSetTableColumnId(col, (void*)1);
colDeleg = WTCreateEnumSelectorDelegate(table);
WTSetEnumSelectorOptions(colDeleg, options, 5);
col = WMCreateTableColumn("Package");
WMSetTableColumnWidth(col, 140);
WMAddTableViewColumn(table, col);
WMSetTableColumnDelegate(col, colDeleg);
WMSetTableColumnId(col, (void*)2);
colDeleg = WTCreateBooleanSwitchDelegate(table);
col = WMCreateTableColumn("Bool");
WMSetTableColumnWidth(col, 50);
WMAddTableViewColumn(table, col);
WMSetTableColumnDelegate(col, colDeleg);
WMSetTableColumnId(col, (void*)2);
WMMapWidget(table);
WMRealizeWidget(win);
WMScreenMainLoop(scr);
return 0;
WMEditTableViewRow(self, row);
}
int main(int argc, char **argv)
{
WMScreen *scr;
WMWindow *win;
WMTableView *table;
WMTableColumn *col;
WMTableColumnDelegate *colDeleg;
WMInitializeApplication("test", &argc, argv);
scr = WMOpenScreen(NULL);
XSynchronize(WMScreenDisplay(scr), 1);
win = WMCreateWindow(scr, "eweq");
WMResizeWidget(win, 400, 200);
WMMapWidget(win);
table = WMCreateTableView(win);
WMSetTableViewHasHorizontalScroller(table, 0);
WMSetViewExpandsToParent(WMWidgetView(table), 10, 10, 10, 10);
WMSetTableViewBackgroundColor(table, WMWhiteColor(scr));
/*WMSetTableViewGridColor(table, WMGrayColor(scr)); */
WMSetTableViewHeaderHeight(table, 20);
WMSetTableViewDelegate(table, &delegate);
WMSetTableViewAction(table, clickedTable, table);
colDeleg = WTCreateStringEditorDelegate(table);
col = WMCreateTableColumn("Group");
WMSetTableColumnWidth(col, 180);
WMAddTableViewColumn(table, col);
WMSetTableColumnDelegate(col, colDeleg);
WMSetTableColumnId(col, (void *)1);
colDeleg = WTCreateEnumSelectorDelegate(table);
WTSetEnumSelectorOptions(colDeleg, options, 5);
col = WMCreateTableColumn("Package");
WMSetTableColumnWidth(col, 140);
WMAddTableViewColumn(table, col);
WMSetTableColumnDelegate(col, colDeleg);
WMSetTableColumnId(col, (void *)2);
colDeleg = WTCreateBooleanSwitchDelegate(table);
col = WMCreateTableColumn("Bool");
WMSetTableColumnWidth(col, 50);
WMAddTableViewColumn(table, col);
WMSetTableColumnDelegate(col, colDeleg);
WMSetTableColumnId(col, (void *)2);
WMMapWidget(table);
WMRealizeWidget(win);
WMScreenMainLoop(scr);
return 0;
}

File diff suppressed because it is too large Load Diff

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

@@ -18,98 +18,98 @@ extern const char *WMTableViewSelectionDidChangeNotification;
typedef struct WMTableColumnDelegate {
void *data;
void (*drawCell)(struct WMTableColumnDelegate *self,
WMTableColumn *column, int row, Drawable d);
WMTableColumn *column, int row, Drawable d);
void (*drawSelectedCell)(struct WMTableColumnDelegate *self,
WMTableColumn *column, int row, Drawable d);
WMTableColumn *column, int row, Drawable d);
void (*beginCellEdit)(struct WMTableColumnDelegate *self, WMTableColumn *column,
int row);
int row);
void (*endCellEdit)(struct WMTableColumnDelegate *self, WMTableColumn *column,
int row);
int row);
} WMTableColumnDelegate;
typedef struct W_TableViewDelegate {
void *data;
int (*numberOfRows)(struct W_TableViewDelegate *self,
WMTableView *table);
void *(*valueForCell)(struct W_TableViewDelegate *self,
WMTableColumn *column, int row);
void (*setValueForCell)(struct W_TableViewDelegate *self,
WMTableColumn *column, int row, void *value);
int (*numberOfRows)(struct W_TableViewDelegate *self,
WMTableView *table);
void *(*valueForCell)(struct W_TableViewDelegate *self,
WMTableColumn *column, int row);
void (*setValueForCell)(struct W_TableViewDelegate *self,
WMTableColumn *column, int row, void *value);
} WMTableViewDelegate;
WMTableColumn *WMCreateTableColumn(char *title);
void WMSetTableColumnWidth(WMTableColumn *column, unsigned width);
void WMSetTableColumnConstraints(WMTableColumn *column,
unsigned minWidth, unsigned maxWidth);
void WMSetTableColumnDelegate(WMTableColumn *column,
WMTableColumnDelegate *delegate);
void WMSetTableColumnConstraints(WMTableColumn *column,
unsigned minWidth, unsigned maxWidth);
void WMSetTableColumnDelegate(WMTableColumn *column,
WMTableColumnDelegate *delegate);
WMTableView *WMGetTableColumnTableView(WMTableColumn *column);
void WMSetTableColumnId(WMTableColumn *column, void *id);
void *WMGetTableColumnId(WMTableColumn *column);
WMTableView *WMCreateTableView(WMWidget *parent);
void WMSetTableViewDataSource(WMTableView *table, void *source);
void *WMGetTableViewDataSource(WMTableView *table);
void WMSetTableViewHeaderHeight(WMTableView *table, unsigned height);
void WMAddTableViewColumn(WMTableView *table, WMTableColumn *column);
void WMSetTableViewDelegate(WMTableView *table, WMTableViewDelegate *delegate);
void WMSetTableViewAction(WMTableView *table, WMAction *action,
void *clientData);
void WMSetTableViewAction(WMTableView *table, WMAction *action,
void *clientData);
void *WMGetTableViewClickedColumn(WMTableView *table);
int WMGetTableViewClickedRow(WMTableView *table);
WMArray *WMGetTableViewSelectedRows(WMTableView *table);
WMView *WMGetTableViewDocumentView(WMTableView *table);
void WMEditTableViewRow(WMTableView *table, int row);
void WMSelectTableViewRow(WMTableView *table, int row);
void *WMTableViewDataForCell(WMTableView *table, WMTableColumn *column,
int row);
void *WMTableViewDataForCell(WMTableView *table, WMTableColumn *column,
int row);
void WMSetTableViewDataForCell(WMTableView *table, WMTableColumn *column,
int row, void *data);
WMRect WMTableViewRectForCell(WMTableView *table, WMTableColumn *column,
int row);
void WMSetTableViewDataForCell(WMTableView *table, WMTableColumn *column,
int row, void *data);
WMRect WMTableViewRectForCell(WMTableView *table, WMTableColumn *column,
int row);
void WMSetTableViewBackgroundColor(WMTableView *table, WMColor *color);
void WMSetTableViewGridColor(WMTableView *table, WMColor *color);
void WMSetTableViewRowHeight(WMTableView *table, int height);
void WMReloadTableView(WMTableView *table);
void WMSetTableViewRowHeight(WMTableView *table, int height);
void WMReloadTableView(WMTableView *table);
void WMNoteTableViewNumberOfRowsChanged(WMTableView *table);
void WMScrollTableViewRowToVisible(WMTableView *table, int row);
void WMSetTableViewHasHorizontalScroller(WMTableView *tPtr, Bool flag);

View File

@@ -2,50 +2,36 @@
AUTOMAKE_OPTIONS = no-dependencies
SUBDIRS = WINGs . po Documentation Resources Examples Extras Tests
SUBDIRS = WINGs . po Documentation Resources
LIBTOOL = $(SHELL) $(top_srcdir)/libtool $(LIBTOOL_ARG)
libWINGs_a_AR = $(QUIET_AR) $(AR) $(ARFLAGS)
#libWINGs_la_LDFLAGS = -version-info 1:1:0
libWUtil_a_AR = $(QUIET_AR) $(AR) $(ARFLAGS)
libWINGs_la_LDFLAGS = -version-info 2:1:0
libWUtil_la_LDFLAGS = -version-info 1:2:0
bin_SCRIPTS = get-wings-flags get-wutil-flags
lib_LIBRARIES = libWINGs.a libWUtil.a
lib_LTLIBRARIES = libWINGs.la libWUtil.la
LDADD= libWINGs.a $(top_builddir)/wrlib/libwraster.la @INTLIBS@
LDADD= libWUtil.la libWINGs.la $(top_builddir)/wrlib/libwraster.la @INTLIBS@
EXTRA_DIST = BUGS python/Makefile python/README python/WINGs.i \
EXTRA_DIST = BUGS make-rgb python/Makefile python/README python/WINGs.i \
python/WINGs.py python/setup.py python/test.py
# wbutton.c
libWINGs_a_SOURCES = \
array.c \
bagtree.c \
libWINGs_la_SOURCES = \
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 \
wappresource.c \
wballoon.c \
wbox.c \
@@ -81,8 +67,7 @@ libWINGs_a_SOURCES = \
wview.c \
wwindow.c
libWUtil_a_SOURCES = \
libWUtil_la_SOURCES = \
array.c \
bagtree.c \
connection.c \
@@ -107,14 +92,12 @@ libWUtil_a_SOURCES = \
wutil.c
CPPFLAGS = @CPPFLAGS@ -DLOCALEDIR=\"$(NLSDIR)\"
AM_CPPFLAGS = -DLOCALEDIR=\"$(NLSDIR)\" -DRESOURCE_PATH=\"$(datadir)/WINGs\" -DDEBUG
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\"" $<
@XFTFLAGS@ @HEADER_SEARCH_PATH@
DISTCLEANFILES = WINGs.pc
@@ -127,3 +110,12 @@ install-exec-local:
$(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/pkgconfig/; \
else :; fi; \
done
.c.o:
$(QUIET)$(COMPILE) -c $<
.c.obj:
$(QUIET)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
$(QUIET)$(LTCOMPILE) -c -o $@ $<

View File

@@ -6,38 +6,16 @@ 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 text. If with normal text one can redraw the text over the
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.
The pixels that constitute the antialias around the text are partially
transparent pixels, which let part of the background be visible through them.
If antialiased text is drawn over and over again, whithout first erasing the
old one, the partially transparent pixels of the antialias will no longer
see the background through them, but some of them will see the old pixels of
the antialias around the old text that was there before. This for example
will make a black antialiased text over a white background get thicker as
the pixels of the antialias around it, combine with semitransparent black
pixels of the old antialias instead of combining with the white background.
The result is that the antialias will get darker (in this case) and the text
will be altered.
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.
Because of this the area where text is drawn needs to be cleared before
antialiased text can be drawn again. But between the moment whent he area is
cleared and the moment when the text is drawn again there is a small time
gap that results in flickering. This doesn't happen with normal text where
one doesn't need to clear the area before drawing the text, but instead can
simply draw over and over again.
To avoid this situation, a double buffering tehnique was used. Instead of
drawing directly in the wisget's window (which is mapped and will flicker as
described above), we draw in a pixmap (unmapped) and after all is done we
XCopyArea() from that pixmap to the real window.
Since all this takes place off-screen, no flickering will be observed in
this case.
This is a change that that will be automatically available for your
applications and will require no change from you.
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).
@@ -57,20 +35,12 @@ 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 your list item drawing code used to contain these to clear the
item area before drawing it needs to change, else the application will die
when it tires to XClearArea() on a pixmap.
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.
This means that in your application if you ever used WMSetListUserDrawProc()
so set a userspace routine which draws WMList items in a particular fashion,
you need to make sure your function will not call XClearArea() or
XClearWindow() on the drawable that was passed to draw in.
Instead you should use XFillRectangle().
This change also means that you no longer need to do double buffering in
your code, if you ever used to do. It is not done by WINGs and you benefit
from it automatically.
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
@@ -84,7 +54,7 @@ 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 Xft extension.
antialiased fonts through the XFree86 Xft2 extension.
This also has the advantage of hiding low level X11 details and use WINGs
internat objects instead.
@@ -121,81 +91,23 @@ and have the color of the foreground respective the background of the old gc.
*** Wed Oct 9 07:10:04 EEST 2002 - Dan
Xft support in WINGs
--------------------
Antialiased font support
------------------------
If Xft is detected when configure it is run, support for drawing antialiased
fonts with transparency will be compiled into WINGs.
You need at least Xfree86 version 4.0.x for this but at least 4.1.x is
recommended.
With the addition of Xft2 support in the WINGs library, now WINGs can display
antialiased text with TrueType or any scalable fonts.
For Xft support there are 2 new functions to create a font that will render
using antialiasing and transparency: WMCreateAntialiasedFont() and
WMCreateAntialiasedFontSet(). Later is for multibyte languages.
Passing such a font to WMDrawString() or WMDrawImageString() will result
in antialiased text displayed on screen. Modifying the alpha value for the
WMColor passed to WMDrawString() or WMDrawImageString() will result in text
being displayed with the appropriate transparency.
Antialiased text is enabled by default, but can be disabled by adding
To control antialiased font behavior, there are 3 new options that go into
WMGLOBAL. Two of them are to set the system font used when an antialiased
font is required. They operate in a similar way as SystemFont and
BoldSystemFont, just they are used when antialiased fonts are requested.
They are named AntialiasedSystemFont respectively AntialiasedBoldSystemFont.
They are kept separate from SystemFont and BoldSystemFont because the same
fonts don't render well as both normal and antialiased if they are not
TrueType fonts. Even though you can specify any font in the XLFD format for
these new options, it is recomended to use TrueType fonts for the antialiased
case since other fonts (standard X fonts) don't render well and give ugly
results.
AntialiasedText = NO; in ~/GNUstep/Defaults/WMGLOBAL
The third option is an option that globally controls if WINGs uses or not
antialiased fonts. It is named AntialiasedText and it has a boolean Yes/No
value. If set to Yes, WINGs will try to use antialiased fonts (if support
was compiled in, and antialiased fonts can be found) then revert to normal
fonts if not possible. Note that this applies if WMCreateFont(),
WMSystemFont(), WMSystemFontOfSize(), WMBoldSystemFont() or
WMBoldSystemFontOFize() are used. If any of the direct creation functions
are used, such as WMCreateAntialiasedFont() or WMCreateNormalFont(), then
that kind of font is returned independently of the value of AntialiasedText.
(However note that an antialiased font cannot be created if Xft support was
no compiled into WINGs, even if you call WMCreateAntialiasedFont() directly.
In this case WMCreateAntialiasedFont() will always return NULL)
These 3 options from WMGLOBAL (which apply to all WINGs applications) can be
overwritten on a per application basis by putting them in the application's
specific domain file (usually ~/GNUstep/Defaults/application_name).
There is also another new font creation function available.
WMCreateFontWithFlags(screen, fontName, flags)
flags will specify what kind of font to create. They are defined in WINGs.h
as an enum: WMFontFlags
If WFDefaultFont is passed then the function will work exactly like
WMCreateFont() by creating a font according to the options from the
configuration.
However if some specific flag is passed than that option will be altered. All
the other options will keep their default values.
There are 2 font options available (at this time):
1. Font type (if a normal font or a font set)
2. Font antialiasing (if it's an antialiased font or not)
If flags specifies a value for each of the available options then a specific
font which only takes into account those flag values will be created and all
the font options specified in the configuration (like MultiByte or Antialiasing)
will be ignored.
However if only some of the options are specified, then for the missing options
the default values from the configuration will be used.
For example if antialiasing is enabled in the configuration and you pass
WFNotAntialiased as the flag, then a font with all the properties defined in
the configuration (except antialiasing) will be created. This means that if
MultiByte is defined a fontset will be created, else a normal font will be
created and you don't have to worry about the rest of the flags you didn't
specify.
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

View File

@@ -5,7 +5,7 @@
Alfredo Kengi Kojima
kojima@windowmaker.org
kojima@windowmaker.info
WINGs is a small widget set with the N*XTSTEP look and feel. It's API
@@ -26,7 +26,7 @@ workaround some of it's limitations, although you'll probably be able to
write something like a trivial tic-tac-toe game without knowing much Xlib.
Some of it's functions are designed to support the Window Maker window
manager (see http://windowmaker.org) In fact, it's primary role is to
manager (see http://windowmaker.info) In fact, it's primary role is to
support Window Maker. All other uses of it are just an added bonus.
It will help you to understand the API if you read the ApplicationKit

View File

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

View File

@@ -1,4 +0,0 @@
Makefile Makefile.in
testtext testcolorpanel testmywidget wmfile wmquery wtest
.libs
.psrc .inslog2 tca.map tca.log pchdir *.rpt

View File

@@ -4,18 +4,29 @@ AUTOMAKE_OPTIONS = no-dependencies
noinst_PROGRAMS = wtest wmquery wmfile testmywidget
LDADD= $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la \
LDADD= $(top_builddir)/WINGs/libWINGs.la $(top_builddir)/wrlib/libwraster.la \
$(top_builddir)/WINGs/libWUtil.la \
@XFTLIBS@ @INTLIBS@
testmywidget_SOURCES = testmywidget.c mywidget.c mywidget.h
wtest_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a
wtest_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.la
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
LIBTOOL = $(QUIET) $(SHELL) $(top_srcdir)/libtool $(LIBTOOL_ARG)
.c.o:
$(QUIET)$(COMPILE) -c $<
.c.obj:
$(QUIET)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
$(QUIET)$(LTCOMPILE) -c -o $@ $<

View File

@@ -2,17 +2,16 @@
* Demo user widget for WINGs
*
* Author: Alfredo K. Kojima
*
*
* This file is in the public domain.
*
*
*/
/*
*
* Include the WINGs private data header.
*
*
*
*/
#include <WINGs/WINGsP.h>
@@ -25,32 +24,26 @@
* Define the widget "class"
*/
typedef struct W_MyWidget {
/* 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;
/* 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;
/* some forward declarations */
static void destroyMyWidget(_MyWidget *mPtr);
static void paintMyWidget(_MyWidget *mPtr);
static void handleEvents(XEvent *event, void *data);
static void handleActionEvents(XEvent *event, void *data);
static void destroyMyWidget(_MyWidget * mPtr);
static void paintMyWidget(_MyWidget * mPtr);
static void handleEvents(XEvent * event, void *data);
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.
*/
@@ -62,166 +55,143 @@ static W_ViewDelegate _MyWidgetDelegate = {
NULL
};
/* our widget class ID */
static W_Class myWidgetClass = 0;
/*
* Initializer for our widget. Must be called before creating any
* instances of the widget.
*/
W_Class
InitMyWidget(WMScreen *scr)
W_Class InitMyWidget(WMScreen * scr)
{
/* register our widget with WINGs and get our widget class ID */
if (!myWidgetClass) {
myWidgetClass = W_RegisterUserWidget();
}
return myWidgetClass;
}
/* register our widget with WINGs and get our widget class ID */
if (!myWidgetClass) {
myWidgetClass = W_RegisterUserWidget();
}
return myWidgetClass;
}
/*
* Our widget fabrication plant.
*/
MyWidget*
CreateMyWidget(WMWidget *parent)
MyWidget *CreateMyWidget(WMWidget * parent)
{
MyWidget *mPtr;
/* allocate some storage for our new widget instance */
mPtr = wmalloc(sizeof(MyWidget));
/* initialize it */
memset(mPtr, 0, sizeof(MyWidget));
MyWidget *mPtr;
/* set the class ID */
mPtr->widgetClass = myWidgetClass;
/* allocate some storage for our new widget instance */
mPtr = wmalloc(sizeof(MyWidget));
/* initialize it */
memset(mPtr, 0, sizeof(MyWidget));
/*
* 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;
}
/* always do this */
mPtr->view->self = mPtr;
/* set the class ID */
mPtr->widgetClass = myWidgetClass;
/* setup the delegates for the view */
mPtr->view->delegate = &_MyWidgetDelegate;
/*
* 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;
}
/* always do this */
mPtr->view->self = mPtr;
/*
* 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);
/* setup the delegates for the view */
mPtr->view->delegate = &_MyWidgetDelegate;
/*
* Intercept some other events. This could be merged with the above
* call, but we separate for more organization.
*/
WMCreateEventHandler(mPtr->view, ButtonPressMask,handleActionEvents, mPtr);
/*
* 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);
return mPtr;
/*
* Intercept some other events. This could be merged with the above
* call, but we separate for more organization.
*/
WMCreateEventHandler(mPtr->view, ButtonPressMask, handleActionEvents, mPtr);
return mPtr;
}
/*
* Paint our widget contents.
*/
static void
paintMyWidget(_MyWidget *mPtr)
static void paintMyWidget(_MyWidget * mPtr)
{
W_Screen *scr = mPtr->view->screen;
WMColor *color;
W_Screen *scr = mPtr->view->screen;
WMColor *color;
if (mPtr->text) {
if (mPtr->text) {
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);
}
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);
}
}
static void
handleEvents(XEvent *event, void *data)
static void handleEvents(XEvent * event, void *data)
{
_MyWidget *mPtr = (_MyWidget*)data;
_MyWidget *mPtr = (_MyWidget *) data;
switch (event->type) {
case Expose:
if (event->xexpose.count != 0)
break;
paintMyWidget(mPtr);
break;
switch (event->type) {
case Expose:
if (event->xexpose.count!=0)
break;
paintMyWidget(mPtr);
break;
case DestroyNotify:
destroyMyWidget(mPtr);
break;
}
case DestroyNotify:
destroyMyWidget(mPtr);
break;
}
}
static void
handleActionEvents(XEvent *event, void *data)
static void handleActionEvents(XEvent * event, void *data)
{
_MyWidget *mPtr = (_MyWidget*)data;
_MyWidget *mPtr = (_MyWidget *) data;
switch (event->type) {
case ButtonPress:
XBell(mPtr->view->screen->display, 100);
XBell(mPtr->view->screen->display, 100);
break;
}
switch (event->type) {
case ButtonPress:
XBell(mPtr->view->screen->display, 100);
XBell(mPtr->view->screen->display, 100);
break;
}
}
void
SetMyWidgetText(MyWidget *mPtr, char *text)
void SetMyWidgetText(MyWidget * mPtr, char *text)
{
CHECK_CLASS(mPtr, myWidgetClass);
CHECK_CLASS(mPtr, myWidgetClass);
if (mPtr->text)
wfree(mPtr->text);
mPtr->text = wstrdup(text);
if (W_VIEW_MAPPED(mPtr->view)) {
paintMyWidget(mPtr);
}
if (mPtr->text)
wfree(mPtr->text);
mPtr->text = wstrdup(text);
if (W_VIEW_MAPPED(mPtr->view)) {
paintMyWidget(mPtr);
}
}
static void
destroyMyWidget(_MyWidget *mPtr)
static void destroyMyWidget(_MyWidget * mPtr)
{
/*
* Free all data we allocated for our widget.
*/
if (mPtr->text)
wfree(mPtr->text);
wfree(mPtr);
/*
* Free all data we allocated for our widget.
*/
if (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,51 +1,46 @@
#include <WINGs/WINGs.h>
#include <stdlib.h>
#include "mywidget.h"
void
wAbort()
void wAbort()
{
exit(1);
exit(1);
}
int main(int argc, char **argv)
{
Display *dpy = XOpenDisplay("");
WMScreen *scr;
WMWindow *win;
MyWidget *thing;
Display *dpy = XOpenDisplay("");
WMScreen *scr;
WMWindow *win;
MyWidget *thing;
WMInitializeApplication("Test", &argc, argv);
WMInitializeApplication("Test", &argc, argv);
if (!dpy) {
wfatal("could not open display");
exit(1);
}
scr = WMCreateSimpleApplicationScreen(dpy);
if (!dpy) {
wfatal("could not open display");
exit(1);
}
/* 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;
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

@@ -3,8 +3,8 @@
<Img src=wm.png></b><p>
<b>GNU Window Maker</B><br>
<i>X11 Window Manager</i><p>
<u>http://windowmaker.org<br>
ftp.windowmaker.org</u></font><Br>
<u>http://windowmaker.info<br>
ftp.windowmaker.info</u></font><Br>
</center>
<b><i>Window Maker</b>

View File

@@ -1,17 +1,15 @@
/*
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
*/
/*
Update: Franck Wolff <frawolff@club-internet.fr>
-----------------------------------------------------------------------
List of updated functions :
- main :
add -s option for a save panel...
-----------------------------------------------------------------------
*/
Update: Franck Wolff <frawolff@club-internet.fr>
-----------------------------------------------------------------------
List of updated functions :
- main :
add -s option for a save panel...
-----------------------------------------------------------------------
*/
#include <WINGs/WINGs.h>
@@ -21,36 +19,28 @@
#include "logo.xpm"
void
wAbort()
void wAbort()
{
exit(1);
exit(1);
}
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
@@ -58,68 +48,65 @@ 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;
if (!dpy) {
puts("could not open display");
exit(1);
}
if (!dpy) {
puts("could not open display");
exit(1);
}
WMInitializeApplication("WMFile", &argc, argv);
WMInitializeApplication("WMFile", &argc, argv);
ProgName = argv[0];
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();
}
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();
for (; optind < argc; optind++)
usage();
scr = WMCreateSimpleApplicationScreen(dpy);
scr = WMCreateSimpleApplicationScreen(dpy);
pixmap = WMCreatePixmapFromXPMData(scr, GNUSTEP_XPM);
WMSetApplicationIconPixmap(scr, pixmap);
WMReleasePixmap(pixmap);
if (panelType == SAVE_PANEL_TYPE) {
sPanel = WMGetSavePanel(scr);
if (WMRunModalFilePanelForDirectory(sPanel, NULL, initial,
/*title*/ NULL, NULL) == True)
printf("%s\n", WMGetFilePanelFileName(sPanel));
else
printf("\n");
} else {
oPanel = WMGetOpenPanel(scr);
if (WMRunModalFilePanelForDirectory(oPanel, NULL, initial,
/*title*/ NULL, NULL) == True)
printf("%s\n", WMGetFilePanelFileName(oPanel));
else
printf("\n");
}
return 0;
pixmap = WMCreatePixmapFromXPMData(scr, GNUSTEP_XPM);
WMSetApplicationIconPixmap(scr, pixmap);
WMReleasePixmap(pixmap);
if (panelType == SAVE_PANEL_TYPE) {
sPanel = WMGetSavePanel(scr);
if (WMRunModalFilePanelForDirectory(sPanel, NULL, initial,
/*title */ NULL, NULL) == True)
printf("%s\n", WMGetFilePanelFileName(sPanel));
else
printf("\n");
} else {
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,9 +1,8 @@
/*
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
* Author: Len Trigg <trigg@cs.waikato.ac.nz>
*/
#include <WINGs/WINGs.h>
#include <unistd.h>
@@ -12,89 +11,80 @@
#include "logo.xpm"
void
wAbort()
void wAbort()
{
exit(1);
exit(1);
}
char *ProgName;
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)
{
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];
for(; optind <argc; optind++)
usage();
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();
}
scr = WMCreateSimpleApplicationScreen(dpy);
for (; optind < argc; optind++)
usage();
pixmap = WMCreatePixmapFromXPMData(scr, GNUSTEP_XPM);
scr = WMCreateSimpleApplicationScreen(dpy);
WMSetApplicationIconPixmap(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;
}

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -7,3 +7,11 @@ includedir = @includedir@/WINGs
include_HEADERS = WINGs.h WUtil.h WINGsP.h proplist-compat.h
.c.o:
$(QUIET)$(COMPILE) -c $<
.c.obj:
$(QUIET)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
$(QUIET)$(LTCOMPILE) -c -o $@ $<

View File

@@ -7,7 +7,7 @@
#include <WINGs/WUtil.h>
#include <X11/Xlib.h>
#define WINGS_H_VERSION 20021124
#define WINGS_H_VERSION 20041030
#ifdef __cplusplus
@@ -55,29 +55,29 @@ typedef struct {
* range INT_MIN+1 to INT_MAX
*/
enum {
WMDesktopWindowLevel = -1000, /* GNUstep addition */
WMNormalWindowLevel = 0,
WMFloatingWindowLevel = 3,
WMSubmenuWindowLevel = 3,
WMTornOffMenuWindowLevel = 3,
WMMainMenuWindowLevel = 20,
WMDockWindowLevel = 21, /* Deprecated - use NSStatusWindowLevel */
WMStatusWindowLevel = 21,
WMModalPanelWindowLevel = 100,
WMPopUpMenuWindowLevel = 101,
WMScreenSaverWindowLevel = 1000
WMDesktopWindowLevel = -1000, /* GNUstep addition */
WMNormalWindowLevel = 0,
WMFloatingWindowLevel = 3,
WMSubmenuWindowLevel = 3,
WMTornOffMenuWindowLevel = 3,
WMMainMenuWindowLevel = 20,
WMDockWindowLevel = 21, /* Deprecated - use NSStatusWindowLevel */
WMStatusWindowLevel = 21,
WMModalPanelWindowLevel = 100,
WMPopUpMenuWindowLevel = 101,
WMScreenSaverWindowLevel = 1000
};
/* window attributes */
enum {
WMBorderlessWindowMask = 0,
WMTitledWindowMask = 1,
WMClosableWindowMask = 2,
WMMiniaturizableWindowMask = 4,
WMResizableWindowMask = 8,
WMIconWindowMask = 64,
WMMiniWindowMask = 128
WMBorderlessWindowMask = 0,
WMTitledWindowMask = 1,
WMClosableWindowMask = 2,
WMMiniaturizableWindowMask = 4,
WMResizableWindowMask = 8,
WMIconWindowMask = 64,
WMMiniWindowMask = 128
};
#endif
@@ -107,22 +107,6 @@ enum {
};
/* Font flags */
typedef enum {
WFDefaultFont = 0,
WFNormalFont = (1<<0),
WFFontSet = (1<<1),
WFAntialiased = (1<<2),
WFNotAntialiased = (1<<3)
} WMFontFlags;
/* Use default system font size in system font name */
enum {
WFDefaultSize = -1
};
/* frame title positions */
typedef enum {
WTPNoTitle,
@@ -239,7 +223,7 @@ enum {
/* drag operations */
typedef enum {
WDOperationNone,
WDOperationNone = 0,
WDOperationCopy,
WDOperationMove,
WDOperationLink,
@@ -416,18 +400,18 @@ typedef struct WMAlertPanel {
typedef struct WMGenericPanel {
WMWindow *win;
WMBox *vbox;
WMLabel *iLbl;
WMLabel *tLbl;
WMFrame *line;
WMFrame *content;
WMBox *buttonBox;
WMButton *defBtn;
WMButton *altBtn;
short result;
} WMGenericPanel;
@@ -443,33 +427,13 @@ typedef struct WMInputPanel {
} WMInputPanel;
#define WFAUnchanged (NULL)
/* Struct for font change operations */
typedef struct WMFontAttributes {
char *foundry;
char *family;
char *weight;
char *slant;
char *setWidth;
char *addStyle;
char *pixelSize;
char *pointSize;
char *resolutionX;
char *resolutionY;
char *spacing;
char *averageWidth;
char *registry;
char *encoding;
} WMFontAttributes;
/* A few useful constant font attributes masks */
extern const WMFontAttributes *WFANormal;
extern const WMFontAttributes *WFABold;
extern const WMFontAttributes *WFANotBold;
extern const WMFontAttributes *WFAEmphasized;
extern const WMFontAttributes *WFANotEmphasized;
extern const WMFontAttributes *WFABoldEmphasized;
/* Basic font styles. Used to easily get one style from another */
typedef enum WMFontStyle {
WFSNormal = 0,
WFSBold = 1,
WFSItalic = 2,
WFSBoldItalic = 3
} WMFontStyle;
/* WMRuler: */
@@ -479,7 +443,7 @@ typedef struct {
unsigned short right; /* right margin marker */
unsigned short first; /* indentation marker for first line only */
unsigned short body; /* body indentation marker */
unsigned short retainCount;
unsigned short retainCount;
} WMRulerMargins;
/* All indentation and tab markers are _relative_ to the left margin marker */
@@ -496,20 +460,19 @@ typedef void WMAction(WMWidget *self, void *clientData);
typedef void WMAction2(void *self, void *clientData);
typedef void WMDropDataCallback(WMView *view, WMData *data);
/* delegate method like stuff */
typedef void WMListDrawProc(WMList *lPtr, int index, Drawable d, char *text,
int state, WMRect *rect);
int state, WMRect *rect);
/*
typedef void WMSplitViewResizeSubviewsProc(WMSplitView *sPtr,
unsigned int oldWidth,
unsigned int oldHeight);
unsigned int oldWidth,
unsigned int oldHeight);
*/
typedef void WMSplitViewConstrainProc(WMSplitView *sPtr, int dividerIndex,
int *minSize, int *maxSize);
int *minSize, int *maxSize);
typedef WMWidget* WMMatrixCreateCellProc(WMMatrix *mPtr);
@@ -520,10 +483,10 @@ typedef struct WMBrowserDelegate {
void *data;
void (*createRowsForColumn)(struct WMBrowserDelegate *self,
WMBrowser *sender, int column, WMList *list);
WMBrowser *sender, int column, WMList *list);
char* (*titleOfColumn)(struct WMBrowserDelegate *self, WMBrowser *sender,
int column);
int column);
void (*didScroll)(struct WMBrowserDelegate *self, WMBrowser *sender);
@@ -537,7 +500,7 @@ typedef struct WMTextFieldDelegate {
void (*didBeginEditing)(struct WMTextFieldDelegate *self,
WMNotification *notif);
void (*didChange)(struct WMTextFieldDelegate *self,
void (*didChange)(struct WMTextFieldDelegate *self,
WMNotification *notif);
void (*didEndEditing)(struct WMTextFieldDelegate *self,
@@ -555,7 +518,7 @@ typedef struct WMTextDelegate {
void *data;
Bool (*didDoubleClickOnPicture)(struct WMTextDelegate *self,
void *description);
void *description);
} WMTextDelegate;
@@ -565,12 +528,12 @@ typedef struct WMTabViewDelegate {
void *data;
void (*didChangeNumberOfItems)(struct WMTabViewDelegate *self,
WMTabView *tabView);
WMTabView *tabView);
void (*didSelectItem)(struct WMTabViewDelegate *self, WMTabView *tabView,
WMTabViewItem *item);
Bool (*shouldSelectItem)(struct WMTabViewDelegate *self, WMTabView *tabView,
Bool (*shouldSelectItem)(struct WMTabViewDelegate *self, WMTabView *tabView,
WMTabViewItem *item);
void (*willSelectItem)(struct WMTabViewDelegate *self, WMTabView *tabView,
@@ -581,43 +544,52 @@ typedef struct WMTabViewDelegate {
typedef void WMSelectionCallback(WMView *view, Atom selection, Atom target,
Time timestamp, void *cdata, WMData *data);
Time timestamp, void *cdata, WMData *data);
typedef struct WMSelectionProcs {
WMData* (*convertSelection)(WMView *view, Atom selection, Atom target,
void *cdata, Atom *type);
void *cdata, Atom *type);
void (*selectionLost)(WMView *view, Atom selection, void *cdata);
void (*selectionDone)(WMView *view, Atom selection, Atom target,
void *cdata);
void *cdata);
} WMSelectionProcs;
typedef struct W_DraggingInfo WMDraggingInfo;
/* links a label to a dnd operation. */
typedef struct W_DragOperationtItem WMDragOperationItem;
typedef struct W_DragSourceProcs {
unsigned (*draggingSourceOperation)(WMView *self, Bool local);
void (*beganDragImage)(WMView *self, WMPixmap *image, WMPoint point);
void (*endedDragImage)(WMView *self, WMPixmap *image, WMPoint point,
Bool deposited);
WMArray* (*dropDataTypes)(WMView *self);
WMDragOperationType (*wantedDropOperation)(WMView *self);
WMArray* (*askedOperations)(WMView *self);
Bool (*acceptDropOperation)(WMView *self, WMDragOperationType operation);
void (*beganDrag)(WMView *self, WMPoint *point);
void (*endedDrag)(WMView *self, WMPoint *point, Bool deposited);
WMData* (*fetchDragData)(WMView *self, char *type);
/* Bool (*ignoreModifierKeysWhileDragging)(WMView *view);*/
/*Bool (*ignoreModifierKeysWhileDragging)(WMView *view);*/
} WMDragSourceProcs;
typedef struct W_DragDestinationProcs {
unsigned (*draggingEntered)(WMView *self, WMDraggingInfo *info);
unsigned (*draggingUpdated)(WMView *self, WMDraggingInfo *info);
void (*draggingExited)(WMView *self, WMDraggingInfo *info);
Bool (*prepareForDragOperation)(WMView *self, WMDraggingInfo *info);
Bool (*performDragOperation)(WMView *self, WMDraggingInfo *info);
void (*concludeDragOperation)(WMView *self, WMDraggingInfo *info);
void (*prepareForDragOperation)(WMView *self);
WMArray* (*requiredDataTypes)(WMView *self, WMDragOperationType request,
WMArray *sourceDataTypes);
WMDragOperationType (*allowedOperation)(WMView *self,
WMDragOperationType request,
WMArray *sourceDataTypes);
Bool (*inspectDropData)(WMView *self, WMArray *dropData);
void (*performDragOperation)(WMView *self, WMArray *dropData,
WMArray *operations, WMPoint *dropLocation);
void (*concludeDragOperation)(WMView *self);
} WMDragDestinationProcs;
/* ...................................................................... */
@@ -650,7 +622,7 @@ char* WMPathForResourceOfType(char *resource, char *ext);
WMScreen* WMOpenScreen(const char *display);
WMScreen* WMCreateScreenWithRContext(Display *display, int screen,
RContext *context);
RContext *context);
WMScreen* WMCreateScreen(Display *display, int screen);
@@ -692,10 +664,10 @@ int WMHandleEvent(XEvent *event);
Bool WMScreenPending(WMScreen *scr);
void WMCreateEventHandler(WMView *view, unsigned long mask,
WMEventProc *eventProc, void *clientData);
WMEventProc *eventProc, void *clientData);
void WMDeleteEventHandler(WMView *view, unsigned long mask,
WMEventProc *eventProc, void *clientData);
WMEventProc *eventProc, void *clientData);
int WMIsDoubleClick(XEvent *event);
@@ -710,57 +682,63 @@ void WMMaskEvent(Display *dpy, long mask, XEvent *event);
Bool WMCreateSelectionHandler(WMView *view, Atom selection, Time timestamp,
WMSelectionProcs *procs, void *cdata);
WMSelectionProcs *procs, void *cdata);
void WMDeleteSelectionHandler(WMView *view, Atom selection, Time timestamp);
Bool WMRequestSelection(WMView *view, Atom selection, Atom target,
Time timestamp, WMSelectionCallback *callback,
void *cdata);
Bool WMRequestSelection(WMView *view, Atom selection, Atom target,
Time timestamp, WMSelectionCallback *callback,
void *cdata);
extern char *WMSelectionOwnerDidChangeNotification;
/* ....................................................................... */
WMArray* WMCreateDragOperationArray(int initialSize);
WMDragOperationItem* WMCreateDragOperationItem(WMDragOperationType type,
char* text);
WMDragOperationType WMGetDragOperationItemType(WMDragOperationItem* item);
char* WMGetDragOperationItemText(WMDragOperationItem* item);
void WMSetViewDragImage(WMView* view, WMPixmap *dragImage);
void WMReleaseViewDragImage(WMView* view);
void WMSetViewDragSourceProcs(WMView *view, WMDragSourceProcs *procs);
void WMDragImageFromView(WMView *view, WMPixmap *image, char *dataTypes[],
WMPoint atLocation, WMSize mouseOffset, XEvent *event,
Bool slideBack);
Bool WMIsDraggingFromView(WMView *view);
void WMRegisterViewForDraggedTypes(WMView *view, char *acceptedTypes[]);
void WMDragImageFromView(WMView *view, XEvent *event);
/* Create a drag handler, associating drag event masks with dragEventProc */
void WMCreateDragHandler(WMView *view, WMEventProc *dragEventProc, void *clientData);
void WMDeleteDragHandler(WMView *view, WMEventProc *dragEventProc, void *clientData);
/* set default drag handler for view */
void WMSetViewDraggable(WMView *view, WMDragSourceProcs *procs, WMPixmap *dragImage);
void WMUnsetViewDraggable(WMView *view);
void WMRegisterViewForDraggedTypes(WMView *view, WMArray *acceptedTypes);
void WMUnregisterViewDraggedTypes(WMView *view);
void WMSetViewDragDestinationProcs(WMView *view, WMDragDestinationProcs *procs);
WMPoint WMGetDraggingInfoImageLocation(WMDraggingInfo *info);
/* ....................................................................... */
Bool WMHasAntialiasingSupport(WMScreen *scrPtr);
Bool WMIsAntialiasingEnabled(WMScreen *scrPtr);
/* ....................................................................... */
WMFont* WMCreateNormalFont(WMScreen *scrPtr, char *fontName);
WMFont* WMCreateFontSet(WMScreen *scrPtr, char *fontName);
WMFont* WMCreateAntialiasedFont(WMScreen *scrPtr, char *fontName);
WMFont* WMCreateAntialiasedFontSet(WMScreen *scrPtr, char *fontName);
WMFont* WMCreateFont(WMScreen *scrPtr, char *fontName);
WMFont* WMCreateFontWithFlags(WMScreen *scrPtr, char *fontName,
WMFontFlags flags);
WMFont* WMCopyFontWithChanges(WMScreen *scrPtr, WMFont *font,
const WMFontAttributes *changes);
WMFont* WMCopyFontWithStyle(WMScreen *scrPtr, WMFont *font, WMFontStyle style);
WMFont* WMRetainFont(WMFont *font);
@@ -770,15 +748,6 @@ char* WMGetFontName(WMFont *font);
unsigned int WMFontHeight(WMFont *font);
Bool WMIsAntialiasedFont(WMFont *font);
/*
WMFont* WMUserFontOfSize(WMScreen *scrPtr, int size);
WMFont* WMUserFixedPitchFontOfSize(WMScreen *scrPtr, int size);
*/
void WMSetWidgetDefaultFont(WMScreen *scr, WMFont *font);
void WMSetWidgetDefaultBoldFont(WMScreen *scr, WMFont *font);
@@ -791,8 +760,6 @@ WMFont* WMSystemFontOfSize(WMScreen *scrPtr, int size);
WMFont* WMBoldSystemFontOfSize(WMScreen *scrPtr, int size);
XFontSet WMGetFontFontSet(WMFont *font);
/* ....................................................................... */
WMPixmap* WMRetainPixmap(WMPixmap *pixmap);
@@ -800,14 +767,14 @@ WMPixmap* WMRetainPixmap(WMPixmap *pixmap);
void WMReleasePixmap(WMPixmap *pixmap);
WMPixmap* WMCreatePixmap(WMScreen *scrPtr, int width, int height, int depth,
Bool masked);
Bool masked);
WMPixmap* WMCreatePixmapFromXPixmaps(WMScreen *scrPtr, Pixmap pixmap,
Pixmap mask, int width, int height,
int depth);
Pixmap mask, int width, int height,
int depth);
WMPixmap* WMCreatePixmapFromRImage(WMScreen *scrPtr, RImage *image,
int threshold);
int threshold);
WMPixmap* WMCreatePixmapFromXPMData(WMScreen *scrPtr, char **data);
@@ -819,7 +786,7 @@ WMPixmap* WMCreateBlendedPixmapFromRImage(WMScreen *scrPtr, RImage *image,
RColor *color);
WMPixmap* WMCreateBlendedPixmapFromFile(WMScreen *scrPtr, char *fileName,
RColor *color);
RColor *color);
void WMDrawPixmap(WMPixmap *pixmap, Drawable d, int x, int y);
@@ -846,16 +813,16 @@ GC WMColorGC(WMColor *color);
WMPixel WMColorPixel(WMColor *color);
void WMPaintColorSwatch(WMColor *color, Drawable d, int x, int y,
unsigned int width, unsigned int height);
void WMPaintColorSwatch(WMColor *color, Drawable d, int x, int y,
unsigned int width, unsigned int height);
void WMReleaseColor(WMColor *color);
WMColor* WMRetainColor(WMColor *color);
WMColor* WMCreateRGBColor(WMScreen *scr, unsigned short red,
unsigned short green, unsigned short blue,
Bool exact);
unsigned short green, unsigned short blue,
Bool exact);
WMColor* WMCreateRGBAColor(WMScreen *scr, unsigned short red,
unsigned short green, unsigned short blue,
@@ -863,6 +830,8 @@ WMColor* WMCreateRGBAColor(WMScreen *scr, unsigned short red,
WMColor* WMCreateNamedColor(WMScreen *scr, char *name, Bool exact);
RColor WMGetRColorFromColor(WMColor *color);
void WMSetColorAlpha(WMColor *color, unsigned short alpha);
unsigned short WMRedComponentOfColor(WMColor *color);
@@ -941,8 +910,8 @@ void WMRedisplayWidget(WMWidget *w);
void WMSetViewNotifySizeChanges(WMView *view, Bool flag);
void WMSetViewExpandsToParent(WMView *view, int topOffs, int leftOffs,
int rightOffs, int bottomOffs);
void WMSetViewExpandsToParent(WMView *view, int topOffs, int leftOffs,
int rightOffs, int bottomOffs);
WMSize WMGetViewSize(WMView *view);
@@ -986,7 +955,7 @@ WMWindow* WMCreateWindow(WMScreen *screen, char *name);
WMWindow* WMCreateWindowWithStyle(WMScreen *screen, char *name, int style);
WMWindow* WMCreatePanelWithStyleForWindow(WMWindow *owner, char *name,
int style);
int style);
WMWindow* WMCreatePanelForWindow(WMWindow *owner, char *name);
@@ -996,6 +965,8 @@ void WMSetWindowTitle(WMWindow *wPtr, char *title);
void WMSetWindowMiniwindowTitle(WMWindow *win, char *title);
void WMSetWindowMiniwindowImage(WMWindow *win, RImage *image);
void WMSetWindowMiniwindowPixmap(WMWindow *win, WMPixmap *pixmap);
void WMSetWindowCloseAction(WMWindow *win, WMAction *action, void *clientData);
@@ -1005,7 +976,7 @@ void WMSetWindowInitialPosition(WMWindow *win, int x, int y);
void WMSetWindowUserPosition(WMWindow *win, int x, int y);
void WMSetWindowAspectRatio(WMWindow *win, int minX, int minY,
int maxX, int maxY);
int maxX, int maxY);
void WMSetWindowMaxSize(WMWindow *win, unsigned width, unsigned height);
@@ -1026,16 +997,16 @@ void WMCloseWindow(WMWindow *win);
void WMSetButtonAction(WMButton *bPtr, WMAction *action, void *clientData);
#define WMCreateCommandButton(parent) \
WMCreateCustomButton((parent), WBBSpringLoadedMask\
|WBBPushInMask\
|WBBPushLightMask\
|WBBPushChangeMask)
WMCreateCustomButton((parent), WBBSpringLoadedMask\
|WBBPushInMask\
|WBBPushLightMask\
|WBBPushChangeMask)
#define WMCreateRadioButton(parent) \
WMCreateButton((parent), WBTRadio)
WMCreateButton((parent), WBTRadio)
#define WMCreateSwitchButton(parent) \
WMCreateButton((parent), WBTSwitch)
WMCreateButton((parent), WBTSwitch)
WMButton* WMCreateButton(WMWidget *parent, WMButtonType type);
@@ -1154,6 +1125,8 @@ void WMSelectTextFieldRange(WMTextField *tPtr, WMRange range);
void WMSetTextFieldCursorPosition(WMTextField *tPtr, unsigned int position);
unsigned WMGetTextFieldCursorPosition(WMTextField *tPtr);
void WMSetTextFieldNextTextField(WMTextField *tPtr, WMTextField *next);
void WMSetTextFieldPrevTextField(WMTextField *tPtr, WMTextField *prev);
@@ -1170,8 +1143,8 @@ extern char *WMTextDidEndEditingNotification;
WMScroller* WMCreateScroller(WMWidget *parent);
void WMSetScrollerParameters(WMScroller *sPtr, float floatValue,
float knobProportion);
void WMSetScrollerParameters(WMScroller *sPtr, float floatValue,
float knobProportion);
float WMGetScrollerKnobProportion(WMScroller *sPtr);
@@ -1181,8 +1154,8 @@ WMScrollerPart WMGetScrollerHitPart(WMScroller *sPtr);
void WMSetScrollerAction(WMScroller *sPtr, WMAction *action, void *clientData);
void WMSetScrollerArrowsPosition(WMScroller *sPtr,
WMScrollArrowPosition position);
void WMSetScrollerArrowsPosition(WMScroller *sPtr,
WMScrollArrowPosition position);
extern char *WMScrollerDidScrollNotification;
@@ -1309,8 +1282,8 @@ WMArray* WMGetBrowserPaths(WMBrowser *bPtr);
void WMSetBrowserAction(WMBrowser *bPtr, WMAction *action, void *clientData);
void WMSetBrowserDoubleAction(WMBrowser *bPtr, WMAction *action,
void *clientData);
void WMSetBrowserDoubleAction(WMBrowser *bPtr, WMAction *action,
void *clientData);
WMListItem* WMGetBrowserSelectedItemInColumn(WMBrowser *bPtr, int column);
@@ -1390,26 +1363,26 @@ void WMSetMenuItemMixedStatePixmap(WMMenuItem *item, WMPixmap *pixmap);
WMPixmap* WMGetMenuItemMixedStatePixmap(WMMenuItem *item);
/*void WMSetMenuItemSubmenu(WMMenuItem *item, WMMenu *submenu);
WMMenu* WMGetMenuItemSubmenu(WMMenuItem *item);
Bool WMGetMenuItemHasSubmenu(WMMenuItem *item);
*/
*/
/* ....................................................................... */
WMPopUpButton* WMCreatePopUpButton(WMWidget *parent);
void WMSetPopUpButtonAction(WMPopUpButton *sPtr, WMAction *action,
void *clientData);
void WMSetPopUpButtonAction(WMPopUpButton *sPtr, WMAction *action,
void *clientData);
void WMSetPopUpButtonPullsDown(WMPopUpButton *bPtr, Bool flag);
WMMenuItem* WMAddPopUpButtonItem(WMPopUpButton *bPtr, char *title);
WMMenuItem* WMInsertPopUpButtonItem(WMPopUpButton *bPtr, int index,
char *title);
char *title);
void WMRemovePopUpButtonItem(WMPopUpButton *bPtr, int index);
@@ -1428,7 +1401,6 @@ char* WMGetPopUpButtonItem(WMPopUpButton *bPtr, int index);
WMMenuItem* WMGetPopUpButtonMenuItem(WMPopUpButton *bPtr, int index);
int WMGetPopUpButtonNumberOfItems(WMPopUpButton *bPtr);
void WMSetPopUpButtonEnabled(WMPopUpButton *bPtr, Bool flag);
@@ -1491,7 +1463,7 @@ extern char *WMColorWellDidChangeNotification;
WMScrollView* WMCreateScrollView(WMWidget *parent);
void WMResizeScrollViewContent(WMScrollView *sPtr, unsigned int width,
unsigned int height);
unsigned int height);
void WMSetScrollViewHasHorizontalScroller(WMScrollView *sPtr, Bool flag);
@@ -1558,12 +1530,12 @@ void WMAddSplitViewSubview(WMSplitView *sPtr, WMView *subview);
void WMAdjustSplitViewSubviews(WMSplitView *sPtr);
void WMSetSplitViewConstrainProc(WMSplitView *sPtr,
WMSplitViewConstrainProc *proc);
void WMSetSplitViewConstrainProc(WMSplitView *sPtr,
WMSplitViewConstrainProc *proc);
/*
void WMSetSplitViewResizeSubviewsProc(WMSplitView *sPtr,
WMSplitViewResizeSubviewsProc *proc);
void WMSetSplitViewResizeSubviewsProc(WMSplitView *sPtr,
WMSplitViewResizeSubviewsProc *proc);
*/
int WMGetSplitViewDividerThickness(WMSplitView *sPtr);
@@ -1601,9 +1573,9 @@ WMText* WMCreateTextForDocumentType(WMWidget *parent, WMAction *parser,
void WMSetTextDelegate(WMText *tPtr, WMTextDelegate *delegate);
void WMFreezeText(WMText *tPtr);
void WMFreezeText(WMText *tPtr);
#define WMRefreshText(tPtr) WMThawText((tPtr))
#define WMRefreshText(tPtr) WMThawText((tPtr))
void WMThawText(WMText *tPtr);
@@ -1747,7 +1719,7 @@ void WMInsertItemInTabView(WMTabView *tPtr, int index, WMTabViewItem *item);
void WMRemoveTabViewItem(WMTabView *tPtr, WMTabViewItem *item);
WMTabViewItem* WMAddTabViewItemWithView(WMTabView *tPtr, WMView *view,
int identifier, char *label);
int identifier, char *label);
WMTabViewItem* WMTabViewItemAtPoint(WMTabView *tPtr, int x, int y);
@@ -1792,10 +1764,10 @@ WMBox* WMCreateBox(WMWidget *parent);
void WMSetBoxBorderWidth(WMBox *box, unsigned width);
void WMAddBoxSubview(WMBox *bPtr, WMView *view, Bool expand, Bool fill,
int minSize, int maxSize, int space);
int minSize, int maxSize, int space);
void WMAddBoxSubviewAtEnd(WMBox *bPtr, WMView *view, Bool expand, Bool fill,
int minSize, int maxSize, int space);
int minSize, int maxSize, int space);
void WMRemoveBoxSubview(WMBox *bPtr, WMView *view);
@@ -1803,26 +1775,26 @@ void WMSetBoxHorizontal(WMBox *box, Bool flag);
/* ....................................................................... */
int WMRunAlertPanel(WMScreen *app, WMWindow *owner, char *title, char *msg,
char *defaultButton, char *alternateButton,
char *otherButton);
int WMRunAlertPanel(WMScreen *app, WMWindow *owner, char *title, char *msg,
char *defaultButton, char *alternateButton,
char *otherButton);
/* you can free the returned string */
char* WMRunInputPanel(WMScreen *app, WMWindow *owner, char *title, char *msg,
char *defaultText, char *okButton, char *cancelButton);
char *defaultText, char *okButton, char *cancelButton);
WMAlertPanel* WMCreateAlertPanel(WMScreen *app, WMWindow *owner, char *title,
char *msg, char *defaultButton,
char *alternateButton, char *otherButton);
char *msg, char *defaultButton,
char *alternateButton, char *otherButton);
WMInputPanel* WMCreateInputPanel(WMScreen *app, WMWindow *owner, char *title,
char *msg, char *defaultText, char *okButton,
char *cancelButton);
char *msg, char *defaultText, char *okButton,
char *cancelButton);
WMGenericPanel* WMCreateGenericPanel(WMScreen *scrPtr, WMWindow *owner,
char *title, char *defaultButton,
char *alternateButton);
char *title, char *defaultButton,
char *alternateButton);
void WMDestroyAlertPanel(WMAlertPanel *panel);
@@ -1867,12 +1839,11 @@ void WMShowFontPanel(WMFontPanel *panel);
void WMHideFontPanel(WMFontPanel *panel);
void WMFreeFontPanel(WMFontPanel *panel);
void WMSetFontPanelAction(WMFontPanel *panel, WMAction2 *action, void *data);
void WMSetFontPanelFont(WMFontPanel *panel, WMFont *font);
/* you can free the returned string */
char* WMGetFontPanelFontName(WMFontPanel *panel);
void WMSetFontPanelFont(WMFontPanel *panel, char *fontName);
WMFont* WMGetFontPanelFont(WMFontPanel *panel);

View File

@@ -8,7 +8,7 @@
#include <WINGs/WINGs.h>
#if WINGS_H_VERSION < 20021124
#if WINGS_H_VERSION < 20041030
#error There_is_an_old_WINGs.h_file_somewhere_in_your_system._Please_remove_it.
#endif
@@ -22,19 +22,14 @@
extern "C" {
#endif /* __cplusplus */
#define DOUBLE_BUFFER
#define DOUBLE_BUFFER 1
#define WC_UserWidget 128
#define SCROLLER_WIDTH 20
#define SCROLLER_WIDTH 20
#define XDND_VERSION 4
#define XDND_VERSION 3
typedef struct W_Application {
@@ -48,17 +43,12 @@ typedef struct W_Application {
typedef struct W_Font {
struct W_Screen *screen;
union {
XFontSet set;
XFontStruct *normal;
struct _XftFont *xft;
} font;
struct _XftFont *font;
short height;
short y;
short refCount;
char *name;
unsigned int notFontSet:1;
unsigned int antialiased:1;
} W_Font;
@@ -81,42 +71,67 @@ typedef struct W_Color {
short refCount;
GC gc;
struct {
unsigned int exact:1;
unsigned int exact:1;
} flags;
} W_Color;
typedef struct W_FocusInfo {
struct W_View *toplevel;
struct W_View *focused; /* view that has the focus in this toplevel */
struct W_View *focused; /* view that has the focus in this toplevel */
struct W_FocusInfo *next;
} 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;
WMView *xdndAwareView;
Window sourceWindow;
W_DndState *state;
Bool sourceActionChanged;
WMArray *sourceTypes;
WMArray *requiredTypes;
Bool typeListAvailable;
WMArray *dropDatas;
} W_DragDestinationInfo;
struct W_DraggingInfo {
unsigned char protocolVersion; /* version supported on the other side */
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;
@@ -139,8 +154,6 @@ typedef struct W_Screen {
struct _XftDraw *xftdraw; /* shared XftDraw */
Bool hasXftSupport; /* if it can antialias text */
/* application related */
W_FocusInfo *focusInfo;
@@ -151,14 +164,14 @@ typedef struct W_Screen {
struct W_Window *windowList; /* list of windows in the app */
Window groupLeader; /* the leader of the application */
/* also used for other things */
Window groupLeader; /* the leader of the application */
/* 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;
@@ -172,7 +185,7 @@ typedef struct W_Screen {
struct W_View *dragSourceView;
struct W_DraggingInfo dragInfo;
/* colors */
W_Color *white;
W_Color *black;
@@ -180,15 +193,15 @@ typedef struct W_Screen {
W_Color *darkGray;
GC stippleGC;
GC copyGC;
GC clipGC;
GC monoGC; /* GC for 1bpp visuals */
GC monoGC; /* GC for 1bpp visuals */
GC xorGC;
GC ixorGC; /* IncludeInferiors XOR */
GC ixorGC; /* IncludeInferiors XOR */
GC drawStringGC; /* for WMDrawString() */
@@ -200,14 +213,6 @@ typedef struct W_Screen {
WMHashTable *fontCache;
WMHashTable *xftFontCache;
WMHashTable *fontSetCache;
WMHashTable *xftFontSetCache;
Bool useMultiByte;
Bool antialiasedText;
unsigned int ignoredModifierMask; /* modifiers to ignore when typing txt */
@@ -217,7 +222,7 @@ typedef struct W_Screen {
struct W_Pixmap *checkButtonImageOn;
struct W_Pixmap *checkButtonImageOff;
struct W_Pixmap *radioButtonImageOn;
struct W_Pixmap *radioButtonImageOff;
@@ -225,12 +230,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;
@@ -256,7 +261,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;
@@ -264,24 +269,24 @@ 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 */
Atom attribsAtom; /* GNUstepWindowAttributes */
Atom xdndAwareAtom; /* XdndAware */
Atom deleteWindowAtom; /* WM_DELETE_WINDOW */
Atom protocolsAtom; /* _XA_WM_PROTOCOLS */
Atom clipboardAtom; /* CLIPBOARD */
Atom xdndAwareAtom; /* XdndAware */
Atom xdndSelectionAtom;
Atom xdndEnterAtom;
Atom xdndLeaveAtom;
@@ -289,6 +294,8 @@ typedef struct W_Screen {
Atom xdndDropAtom;
Atom xdndFinishedAtom;
Atom xdndTypeListAtom;
Atom xdndActionListAtom;
Atom xdndActionDescriptionAtom;
Atom xdndStatusAtom;
Atom xdndActionCopy;
@@ -296,14 +303,20 @@ typedef struct W_Screen {
Atom xdndActionLink;
Atom xdndActionAsk;
Atom xdndActionPrivate;
Atom wmIconDragOffsetAtom;
Atom wmStateAtom; /* WM_STATE */
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 */
Time lastClickTime; /* time of last mousedown event */
Window lastClickWindow; /* window of the last mousedown */
struct W_View *modalView;
unsigned modalLoop:1;
@@ -322,7 +335,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;
@@ -330,74 +343,75 @@ typedef struct W_ViewDelegate {
typedef struct W_View {
struct W_Screen *screen;
WMWidget *self; /* must point to the widget the
* view belongs to */
WMWidget *self; /* must point to the widget the view belongs to */
W_ViewDelegate *delegate;
Window window;
WMSize size;
short topOffs;
short leftOffs;
short bottomOffs;
short rightOffs;
WMPoint pos;
struct W_View *nextFocusChain; /* next/prev in focus chain */
struct W_View *prevFocusChain;
struct W_View *nextResponder; /* next to receive keyboard events */
struct W_View *parent; /* parent WMView */
struct W_View *parent; /* parent WMView */
struct W_View *childrenList; /* first in list of child windows */
struct W_View *nextSister; /* next on parent's children list */
WMArray *eventHandlers; /* event handlers for this window */
struct W_View *nextSister; /* next on parent's children list */
WMArray *eventHandlers; /* event handlers for this window */
unsigned long attribFlags;
XSetWindowAttributes attribs;
void *hangedData; /* data holder for user program */
void *hangedData; /* data holder for user program */
WMColor *backColor;
Cursor cursor;
Atom *droppableTypes;
struct W_DragSourceProcs *dragSourceProcs;
struct W_DragSourceProcs *dragSourceProcs;
struct W_DragDestinationProcs *dragDestinationProcs;
WMPixmap *dragImage;
int helpContext;
XIC xic;
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;
@@ -416,11 +430,8 @@ typedef struct W_EventHandler {
typedef struct _WINGsConfiguration {
char *systemFont;
char *boldSystemFont;
char *antialiasedSystemFont;
char *antialiasedBoldSystemFont;
int defaultFontSize;
Bool antialiasedText;
Bool useMultiByte;
char *floppyPath;
unsigned doubleClickDelay;
unsigned mouseWheelUp;
@@ -439,7 +450,7 @@ 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
@@ -497,23 +508,23 @@ void W_SetViewBackgroundColor(W_View *view, WMColor *color);
void W_SetViewCursor(W_View *view, Cursor cursor);
void W_DrawRelief(W_Screen *scr, Drawable d, int x, int y, unsigned int width,
unsigned int height, WMReliefType relief);
unsigned int height, WMReliefType relief);
void W_DrawReliefWithGC(W_Screen *scr, Drawable d, int x, int y,
unsigned int width, unsigned int height,
WMReliefType relief,
GC black, GC dark, GC light, GC white);
unsigned int width, unsigned int height,
WMReliefType relief,
GC black, GC dark, GC light, GC white);
void W_CallDestroyHandlers(W_View *view);
void W_PaintTextAndImage(W_View *view, int wrap, WMColor *textColor,
W_Font *font, WMReliefType relief, char *text,
WMAlignment alignment, W_Pixmap *image,
WMImagePosition position, WMColor *backColor, int ofs);
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, WMColor *color,
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);
@@ -530,7 +541,7 @@ void W_SetFocusOfToplevel(W_View *toplevel, W_View *view);
W_View *W_FocusedViewOfToplevel(W_View *view);
void W_SetFocusOfTopLevel(W_View *toplevel, W_View *view);
void W_ReleaseView(WMView *view);
WMView *W_RetainView(WMView *view);
@@ -565,8 +576,63 @@ 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);
/* XIM */
void W_InitIM(WMScreen *scr);
void W_CreateIC(WMView *view);
void W_DestroyIC(WMView *view);
void W_FocusIC(WMView *view);
void W_UnFocusIC(WMView *view);
void W_SetPreeditPositon(W_View *view, int x, int y);
int W_LookupString(W_View *view, XKeyPressedEvent *event, char *buffer,
int buflen, KeySym *keysym, Status *status);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _WINGSP_H_ */

View File

@@ -28,6 +28,9 @@
# endif
#endif
#ifndef __GNUC__
#define __attribute__(x) /*NOTHING*/
#endif
#ifdef NDEBUG
@@ -47,18 +50,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 */
@@ -71,15 +74,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;
@@ -166,7 +169,7 @@ typedef struct {
/* NULL does nothing */
void* (*retainKey)(const void *);
/* NULL does nothing */
void (*releaseKey)(const void *);
void (*releaseKey)(const void *);
} WMHashTableCallbacks;
@@ -201,8 +204,8 @@ typedef struct ConnectionDelegate {
} ConnectionDelegate;
typedef void WMNotificationObserverAction(void *observerData,
WMNotification *notification);
typedef void WMNotificationObserverAction(void *observerData,
WMNotification *notification);
@@ -216,11 +219,11 @@ waborthandler* wsetabort(waborthandler* handler);
/* don't free the returned string */
char* wstrerror(int errnum);
void wmessage(const char *msg, ...);
void wwarning(const char *msg, ...);
void wfatal(const char *msg, ...);
void wsyserror(const char *msg, ...);
void wsyserrorwithcode(int error, const char *msg, ...);
void wmessage(const char *msg, ...) __attribute__((__format__(printf,1,2)));
void wwarning(const char *msg, ...) __attribute__((__format__(printf,1,2)));
void wfatal(const char *msg, ...) __attribute__((__format__(printf,1,2)));
void wsyserror(const char *msg, ...) __attribute__((__format__(printf,1,2)));
void wsyserrorwithcode(int error, const char *msg, ...) __attribute__((__format__(printf,2,3)));
char* wfindfile(char *paths, char *file);
@@ -234,9 +237,12 @@ char* wexpandpath(char *path);
char* wgethomedir();
void* wmalloc(size_t size);
void* wmalloc0(size_t size);
void* wrealloc(void *ptr, size_t newsize);
void wfree(void *ptr);
#define wnew(type, count) wmalloc(sizeof(type)*count)
#define wnew0(type, count) wmalloc0(sizeof(type)*count)
void wrelease(void *ptr);
void* wretain(void *ptr);
@@ -285,7 +291,7 @@ void wusleep(unsigned int microsec);
#if 0
int wsprintesc(char *buffer, int length, char *format, WMSEscapes **escapes,
int count);
int count);
#endif
/*......................................................................*/
@@ -293,7 +299,7 @@ int wsprintesc(char *buffer, int length, char *format, WMSEscapes **escapes,
/* Event handlers: timer, idle, input */
WMHandlerID WMAddTimerHandler(int milliseconds, WMCallback *callback,
void *cdata);
void *cdata);
WMHandlerID WMAddPersistentTimerHandler(int milliseconds, WMCallback *callback,
void *cdata);
@@ -306,8 +312,8 @@ WMHandlerID WMAddIdleHandler(WMCallback *callback, void *cdata);
void WMDeleteIdleHandler(WMHandlerID handlerID);
WMHandlerID WMAddInputHandler(int fd, int condition, WMInputProc *proc,
void *clientData);
WMHandlerID WMAddInputHandler(int fd, int condition, WMInputProc *proc,
void *clientData);
void WMDeleteInputHandler(WMHandlerID handlerID);
@@ -373,7 +379,7 @@ extern const WMHashTableCallbacks WMIntHashCallbacks;
/* sizeof(keys) are <= sizeof(void*) */
extern const WMHashTableCallbacks WMStringHashCallbacks;
/* keys are strings. Strings will be copied with wstrdup()
/* keys are strings. Strings will be copied with wstrdup()
* and freed with wfree() */
extern const WMHashTableCallbacks WMStringPointerHashCallbacks;
@@ -392,7 +398,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
*/
@@ -475,23 +481,23 @@ void* WMArrayPrevious(WMArray *array, WMArrayIterator *iter);
/* The following 2 macros assume that the array doesn't change in the for loop */
#define WM_ITERATE_ARRAY(array, var, i) \
for (var = WMArrayFirst(array, &(i)); (i) != WANotFound; \
var = WMArrayNext(array, &(i)))
for (var = WMArrayFirst(array, &(i)); (i) != WANotFound; \
var = WMArrayNext(array, &(i)))
#define WM_ETARETI_ARRAY(array, var, i) \
for (var = WMArrayLast(array, &(i)); (i) != WANotFound; \
var = WMArrayPrevious(array, &(i)))
for (var = WMArrayLast(array, &(i)); (i) != WANotFound; \
var = WMArrayPrevious(array, &(i)))
/*..........................................................................*/
/*
* Tree bags use a red-black tree for storage.
* Item indexes may be any integer number.
*
*
* Pros:
* O(lg n) insertion/deletion/search
* Good for large numbers of elements with sparse indexes
*
*
* Cons:
* O(lg n) insertion/deletion/search
* Slow for storing small numbers of elements
@@ -565,12 +571,12 @@ int WMBagIndexForIterator(WMBag *bag, WMBagIterator ptr);
/* The following 2 macros assume that the bag doesn't change in the for loop */
#define WM_ITERATE_BAG(bag, var, i) \
for (var = WMBagFirst(bag, &(i)); (i) != NULL; \
var = WMBagNext(bag, &(i)))
for (var = WMBagFirst(bag, &(i)); (i) != NULL; \
var = WMBagNext(bag, &(i)))
#define WM_ETARETI_BAG(bag, var, i) \
for (var = WMBagLast(bag, &(i)); (i) != NULL; \
var = WMBagPrevious(bag, &(i)))
for (var = WMBagLast(bag, &(i)); (i) != NULL; \
var = WMBagPrevious(bag, &(i)))
@@ -703,15 +709,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);
@@ -719,18 +725,18 @@ WMNotificationQueue* WMGetDefaultNotificationQueue(void);
WMNotificationQueue* WMCreateNotificationQueue(void);
void WMDequeueNotificationMatching(WMNotificationQueue *queue,
WMNotification *notification,
unsigned mask);
void WMDequeueNotificationMatching(WMNotificationQueue *queue,
WMNotification *notification,
unsigned mask);
void WMEnqueueNotification(WMNotificationQueue *queue,
WMNotification *notification,
WMPostingStyle postingStyle);
WMNotification *notification,
WMPostingStyle postingStyle);
void WMEnqueueCoalesceNotification(WMNotificationQueue *queue,
WMNotification *notification,
WMPostingStyle postingStyle,
unsigned coalesceMask);
void WMEnqueueCoalesceNotification(WMNotificationQueue *queue,
WMNotification *notification,
WMPostingStyle postingStyle,
unsigned coalesceMask);
/*......................................................................*/
@@ -855,7 +861,7 @@ WMPropList* WMGetUDKeys(WMUserDefaults *database);
WMPropList* WMGetUDObjectForKey(WMUserDefaults *database, char *defaultName);
void WMSetUDObjectForKey(WMUserDefaults *database, WMPropList *object,
char *defaultName);
char *defaultName);
void WMRemoveUDObjectForKey(WMUserDefaults *database, char *defaultName);
@@ -867,17 +873,17 @@ float WMGetUDFloatForKey(WMUserDefaults *database, char *defaultName);
Bool WMGetUDBoolForKey(WMUserDefaults *database, char *defaultName);
void WMSetUDStringForKey(WMUserDefaults *database, char *value,
char *defaultName);
void WMSetUDStringForKey(WMUserDefaults *database, char *value,
char *defaultName);
void WMSetUDIntegerForKey(WMUserDefaults *database, int value,
char *defaultName);
void WMSetUDIntegerForKey(WMUserDefaults *database, int value,
char *defaultName);
void WMSetUDFloatForKey(WMUserDefaults *database, float value,
char *defaultName);
void WMSetUDFloatForKey(WMUserDefaults *database, float value,
char *defaultName);
void WMSetUDBoolForKey(WMUserDefaults *database, Bool value,
char *defaultName);
char *defaultName);
WMPropList* WMGetUDSearchList(WMUserDefaults *database);

View File

@@ -1,368 +1,314 @@
/*
* Dynamically Resized Array
*
* Authors: Alfredo K. Kojima <kojima@windowmaker.org>
* Dan Pascu <dan@windowmaker.org>
* Authors: Alfredo K. Kojima <kojima@windowmaker.info>
* Dan Pascu <dan@windowmaker.info>
*
* This code is released to the Public Domain, but
* proper credit is always appreciated :)
*/
#include <stdlib.h>
#include <string.h>
#include "WUtil.h"
#define INITIAL_SIZE 8
#define RESIZE_INCREMENT 8
typedef struct W_Array {
void **items; /* the array data */
int itemCount; /* # of items in array */
int allocSize; /* allocated size of array */
WMFreeDataProc *destructor; /* the destructor to free elements */
void **items; /* the array data */
int itemCount; /* # of items in array */
int allocSize; /* allocated size of array */
WMFreeDataProc *destructor; /* the destructor to free elements */
} W_Array;
WMArray*
WMCreateArray(int initialSize)
WMArray *WMCreateArray(int initialSize)
{
return WMCreateArrayWithDestructor(initialSize, NULL);
return WMCreateArrayWithDestructor(initialSize, NULL);
}
WMArray*
WMCreateArrayWithDestructor(int initialSize, WMFreeDataProc *destructor)
WMArray *WMCreateArrayWithDestructor(int initialSize, WMFreeDataProc * destructor)
{
WMArray *array;
WMArray *array;
array = wmalloc(sizeof(WMArray));
array = wmalloc(sizeof(WMArray));
if (initialSize <= 0) {
initialSize = INITIAL_SIZE;
}
if (initialSize <= 0) {
initialSize = INITIAL_SIZE;
}
array->items = wmalloc(sizeof(void*) * initialSize);
array->items = wmalloc(sizeof(void *) * initialSize);
array->itemCount = 0;
array->allocSize = initialSize;
array->destructor = destructor;
array->itemCount = 0;
array->allocSize = initialSize;
array->destructor = destructor;
return array;
return array;
}
WMArray*
WMCreateArrayWithArray(WMArray *array)
WMArray *WMCreateArrayWithArray(WMArray * array)
{
WMArray *newArray;
WMArray *newArray;
newArray = wmalloc(sizeof(WMArray));
newArray = wmalloc(sizeof(WMArray));
newArray->items = wmalloc(sizeof(void*) * array->allocSize);
memcpy(newArray->items, array->items, sizeof(void*)*array->itemCount);
newArray->items = wmalloc(sizeof(void *) * array->allocSize);
memcpy(newArray->items, array->items, sizeof(void *) * array->itemCount);
newArray->itemCount = array->itemCount;
newArray->allocSize = array->allocSize;
newArray->destructor = NULL;
newArray->itemCount = array->itemCount;
newArray->allocSize = array->allocSize;
newArray->destructor = NULL;
return newArray;
return newArray;
}
void
WMEmptyArray(WMArray *array)
void WMEmptyArray(WMArray * array)
{
if (array->destructor) {
while (array->itemCount > 0) {
array->itemCount--;
array->destructor(array->items[array->itemCount]);
}
}
/*memset(array->items, 0, array->itemCount * sizeof(void*));*/
array->itemCount = 0;
if (array->destructor) {
while (array->itemCount > 0) {
array->itemCount--;
array->destructor(array->items[array->itemCount]);
}
}
/*memset(array->items, 0, array->itemCount * sizeof(void*)); */
array->itemCount = 0;
}
void
WMFreeArray(WMArray *array)
void WMFreeArray(WMArray * array)
{
WMEmptyArray(array);
wfree(array->items);
wfree(array);
WMEmptyArray(array);
wfree(array->items);
wfree(array);
}
int
WMGetArrayItemCount(WMArray *array)
int WMGetArrayItemCount(WMArray * array)
{
return array->itemCount;
return array->itemCount;
}
void
WMAppendArray(WMArray *array, WMArray *other)
void WMAppendArray(WMArray * array, WMArray * other)
{
if (other->itemCount == 0)
return;
if (other->itemCount == 0)
return;
if (array->itemCount + other->itemCount > array->allocSize) {
array->allocSize += other->allocSize;
array->items = wrealloc(array->items, sizeof(void*)*array->allocSize);
}
if (array->itemCount + other->itemCount > array->allocSize) {
array->allocSize += other->allocSize;
array->items = wrealloc(array->items, sizeof(void *) * array->allocSize);
}
memcpy(array->items+array->itemCount, other->items,
sizeof(void*)*other->itemCount);
array->itemCount += other->itemCount;
memcpy(array->items + array->itemCount, other->items, sizeof(void *) * other->itemCount);
array->itemCount += other->itemCount;
}
void
WMAddToArray(WMArray *array, void *item)
void WMAddToArray(WMArray * array, void *item)
{
if (array->itemCount >= array->allocSize) {
array->allocSize += RESIZE_INCREMENT;
array->items = wrealloc(array->items, sizeof(void*)*array->allocSize);
}
array->items[array->itemCount] = item;
if (array->itemCount >= array->allocSize) {
array->allocSize += RESIZE_INCREMENT;
array->items = wrealloc(array->items, sizeof(void *) * array->allocSize);
}
array->items[array->itemCount] = item;
array->itemCount++;
array->itemCount++;
}
void
WMInsertInArray(WMArray *array, int index, void *item)
void WMInsertInArray(WMArray * array, int index, void *item)
{
wassertr(index >= 0 && index <= array->itemCount);
wassertr(index >= 0 && index <= array->itemCount);
if (array->itemCount >= array->allocSize) {
array->allocSize += RESIZE_INCREMENT;
array->items = wrealloc(array->items, sizeof(void*)*array->allocSize);
}
if (index < array->itemCount) {
memmove(array->items+index+1, array->items+index,
sizeof(void*)*(array->itemCount-index));
}
array->items[index] = item;
if (array->itemCount >= array->allocSize) {
array->allocSize += RESIZE_INCREMENT;
array->items = wrealloc(array->items, sizeof(void *) * array->allocSize);
}
if (index < array->itemCount) {
memmove(array->items + index + 1, array->items + index,
sizeof(void *) * (array->itemCount - index));
}
array->items[index] = item;
array->itemCount++;
array->itemCount++;
}
void*
WMReplaceInArray(WMArray *array, int index, void *item)
void *WMReplaceInArray(WMArray * array, int index, void *item)
{
void *old;
void *old;
wassertrv(index >= 0 && index <= array->itemCount, NULL);
wassertrv(index >= 0 && index <= array->itemCount, NULL);
/* is it really useful to perform append if index == array->itemCount ? -Dan */
if (index == array->itemCount) {
WMAddToArray(array, item);
return NULL;
}
/* is it really useful to perform append if index == array->itemCount ? -Dan */
if (index == array->itemCount) {
WMAddToArray(array, item);
return NULL;
}
old = array->items[index];
array->items[index] = item;
old = array->items[index];
array->items[index] = item;
return old;
return old;
}
int
WMDeleteFromArray(WMArray *array, int index)
int WMDeleteFromArray(WMArray * array, int index)
{
wassertrv(index >= 0 && index < array->itemCount, 0);
wassertrv(index >= 0 && index < array->itemCount, 0);
if (array->destructor) {
array->destructor(array->items[index]);
}
if (array->destructor) {
array->destructor(array->items[index]);
}
if (index < array->itemCount-1) {
memmove(array->items+index, array->items+index+1,
sizeof(void*)*(array->itemCount-index-1));
}
if (index < array->itemCount - 1) {
memmove(array->items + index, array->items + index + 1,
sizeof(void *) * (array->itemCount - index - 1));
}
array->itemCount--;
array->itemCount--;
return 1;
return 1;
}
int
WMRemoveFromArrayMatching(WMArray *array, WMMatchDataProc *match, void *cdata)
int WMRemoveFromArrayMatching(WMArray * array, WMMatchDataProc * match, void *cdata)
{
int i;
int i;
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;
}
}
}
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;
}
}
}
return 0;
return 0;
}
void*
WMGetFromArray(WMArray *array, int index)
void *WMGetFromArray(WMArray * array, int index)
{
if (index < 0 || index >= array->itemCount)
return NULL;
if (index < 0 || index >= array->itemCount)
return NULL;
return array->items[index];
return array->items[index];
}
void*
WMPopFromArray(WMArray *array)
void *WMPopFromArray(WMArray * array)
{
array->itemCount--;
array->itemCount--;
return array->items[array->itemCount];
return array->items[array->itemCount];
}
int
WMFindInArray(WMArray *array, WMMatchDataProc *match, void *cdata)
int WMFindInArray(WMArray * array, WMMatchDataProc * match, void *cdata)
{
int i;
int i;
if (match!=NULL) {
for (i = 0; i < array->itemCount; i++) {
if ((*match)(array->items[i], cdata))
return i;
}
} else {
for (i = 0; i < array->itemCount; i++) {
if (array->items[i] == cdata)
return i;
}
}
if (match != NULL) {
for (i = 0; i < array->itemCount; i++) {
if ((*match) (array->items[i], cdata))
return i;
}
} else {
for (i = 0; i < array->itemCount; i++) {
if (array->items[i] == cdata)
return i;
}
}
return WANotFound;
return WANotFound;
}
int
WMCountInArray(WMArray *array, void *item)
int WMCountInArray(WMArray * array, void *item)
{
int i, count;
int i, count;
for (i=0, count=0; i<array->itemCount; i++) {
if (array->items[i] == item)
count++;
}
for (i = 0, count = 0; i < array->itemCount; i++) {
if (array->items[i] == item)
count++;
}
return count;
return count;
}
void
WMSortArray(WMArray *array, WMCompareDataProc *comparer)
void WMSortArray(WMArray * array, WMCompareDataProc * comparer)
{
if (array->itemCount > 1) { /* Don't sort empty or single element arrays */
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);
}
}
void
WMMapArray(WMArray *array, void (*function)(void*, void*), void *data)
void WMMapArray(WMArray * array, void (*function) (void *, void *), void *data)
{
int i;
int i;
for (i=0; i<array->itemCount; i++) {
(*function)(array->items[i], data);
}
for (i = 0; i < array->itemCount; i++) {
(*function) (array->items[i], data);
}
}
WMArray*
WMGetSubarrayWithRange(WMArray* array, WMRange aRange)
WMArray *WMGetSubarrayWithRange(WMArray * array, WMRange aRange)
{
WMArray *newArray;
WMArray *newArray;
if (aRange.count <= 0)
return WMCreateArray(0);
if (aRange.count <= 0)
return WMCreateArray(0);
if (aRange.position < 0)
aRange.position = 0;
if (aRange.position >= array->itemCount)
aRange.position = array->itemCount - 1;
if (aRange.position + aRange.count > array->itemCount)
aRange.count = array->itemCount - aRange.position;
if (aRange.position < 0)
aRange.position = 0;
if (aRange.position >= array->itemCount)
aRange.position = array->itemCount - 1;
if (aRange.position + aRange.count > array->itemCount)
aRange.count = array->itemCount - aRange.position;
newArray = WMCreateArray(aRange.count);
memcpy(newArray->items, array->items+aRange.position,
sizeof(void*)*aRange.count);
newArray->itemCount = aRange.count;
newArray = WMCreateArray(aRange.count);
memcpy(newArray->items, array->items + aRange.position, sizeof(void *) * aRange.count);
newArray->itemCount = aRange.count;
return newArray;
return newArray;
}
void*
WMArrayFirst(WMArray *array, WMArrayIterator *iter)
void *WMArrayFirst(WMArray * array, WMArrayIterator * iter)
{
if (array->itemCount == 0) {
*iter = WANotFound;
return NULL;
} else {
*iter = 0;
return array->items[0];
}
if (array->itemCount == 0) {
*iter = WANotFound;
return NULL;
} else {
*iter = 0;
return array->items[0];
}
}
void*
WMArrayLast(WMArray *array, WMArrayIterator *iter)
void *WMArrayLast(WMArray * array, WMArrayIterator * iter)
{
if (array->itemCount == 0) {
*iter = WANotFound;
return NULL;
} else {
*iter = array->itemCount-1;
return array->items[*iter];
}
if (array->itemCount == 0) {
*iter = WANotFound;
return NULL;
} else {
*iter = array->itemCount - 1;
return array->items[*iter];
}
}
void*
WMArrayNext(WMArray *array, WMArrayIterator *iter)
void *WMArrayNext(WMArray * array, WMArrayIterator * iter)
{
if (*iter >= 0 && *iter < array->itemCount-1) {
return array->items[++(*iter)];
} else {
*iter = WANotFound;
return NULL;
}
if (*iter >= 0 && *iter < array->itemCount - 1) {
return array->items[++(*iter)];
} else {
*iter = WANotFound;
return NULL;
}
}
void*
WMArrayPrevious(WMArray *array, WMArrayIterator *iter)
void *WMArrayPrevious(WMArray * array, WMArrayIterator * iter)
{
if (*iter > 0 && *iter < array->itemCount) {
return array->items[--(*iter)];
} else {
*iter = WANotFound;
return NULL;
}
if (*iter > 0 && *iter < array->itemCount) {
return array->items[--(*iter)];
} else {
*iter = WANotFound;
return NULL;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,210 +1,107 @@
#include "WINGsP.h"
#include "wconfig.h"
#include <X11/Xlocale.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 XFTSYSTEM_FONT "-*-arial-medium-r-normal-*-%d-*-*-*-*-*-*-*"
#define XFTBOLD_SYSTEM_FONT "-*-arial-bold-r-normal-*-%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"
static unsigned
getButtonWithName(const char *name, unsigned defaultButton)
static unsigned getButtonWithName(const char *name, unsigned defaultButton)
{
if (strncmp(name, "Button", 6)==0 && strlen(name)==7) {
switch (name[6]) {
case '1':
return Button1;
case '2':
return Button2;
case '3':
return Button3;
case '4':
return Button4;
case '5':
return Button5;
default:
break;
}
}
return defaultButton;
}
static Bool
missingOrInvalidXLFD(char *xlfd)
{
char *ptr = xlfd;
Bool broken = False;
int count = 0;
if (!xlfd)
return True;
while (*ptr) {
if (*ptr=='%') {
ptr++;
if ((*ptr=='d' || *ptr=='i') && count==0) {
count++;
} else {
broken = True;
break;
}
} else if (*ptr==',') {
count = 0;
}
ptr++;
}
if (broken) {
if (xlfd == WINGsConfiguration.systemFont) {
ptr = "system font";
} else if (xlfd == WINGsConfiguration.boldSystemFont) {
ptr = "bold system font";
} else if (xlfd == WINGsConfiguration.antialiasedSystemFont) {
ptr = "antialiased system font";
} else if (xlfd == WINGsConfiguration.antialiasedBoldSystemFont) {
ptr = "antialiased bold system font";
} else {
ptr = "Unknown System Font";
}
wwarning(_("Invalid %s specification: '%s' (only %%d is allowed and "
"at most once for each font in a fontset)."), ptr, xlfd);
}
return broken;
}
void
W_ReadConfigurations(void)
{
WMUserDefaults *defaults;
memset(&WINGsConfiguration, 0, sizeof(_WINGsConfiguration));
defaults = WMGetStandardUserDefaults();
if (defaults) {
char *buttonName;
unsigned button;
char *str;
WINGsConfiguration.systemFont =
WMGetUDStringForKey(defaults, "SystemFont");
WINGsConfiguration.boldSystemFont =
WMGetUDStringForKey(defaults, "BoldSystemFont");
WINGsConfiguration.antialiasedSystemFont =
WMGetUDStringForKey(defaults, "AntialiasedSystemFont");
WINGsConfiguration.antialiasedBoldSystemFont =
WMGetUDStringForKey(defaults, "AntialiasedBoldSystemFont");
#ifdef XFT
WINGsConfiguration.antialiasedText =
WMGetUDBoolForKey(defaults, "AntialiasedText");
#else
WINGsConfiguration.antialiasedText = False;
#endif
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, "ru", 2) == 0
|| strncmp(locale, "ko", 2) == 0)) {
WINGsConfiguration.useMultiByte = True;
if (strncmp(name, "Button", 6) == 0 && strlen(name) == 7) {
switch (name[6]) {
case '1':
return Button1;
case '2':
return Button2;
case '3':
return Button3;
case '4':
return Button4;
case '5':
return Button5;
default:
break;
}
}
}
WINGsConfiguration.doubleClickDelay =
WMGetUDIntegerForKey(defaults, "DoubleClickTime");
WINGsConfiguration.floppyPath =
WMGetUDStringForKey(defaults, "FloppyPath");
buttonName = WMGetUDStringForKey(defaults, "MouseWheelUp");
if (buttonName) {
button = getButtonWithName(buttonName, Button4);
wfree(buttonName);
} else {
button = Button4;
}
WINGsConfiguration.mouseWheelUp = button;
buttonName = WMGetUDStringForKey(defaults, "MouseWheelDown");
if (buttonName) {
button = getButtonWithName(buttonName, Button5);
wfree(buttonName);
} else {
button = Button5;
}
WINGsConfiguration.mouseWheelDown = button;
if (WINGsConfiguration.mouseWheelDown==WINGsConfiguration.mouseWheelUp) {
WINGsConfiguration.mouseWheelUp = Button4;
WINGsConfiguration.mouseWheelDown = Button5;
}
WINGsConfiguration.defaultFontSize =
WMGetUDIntegerForKey(defaults, "DefaultFontSize");
}
if (missingOrInvalidXLFD(WINGsConfiguration.systemFont)) {
WINGsConfiguration.systemFont = SYSTEM_FONT;
}
if (missingOrInvalidXLFD(WINGsConfiguration.boldSystemFont)) {
WINGsConfiguration.boldSystemFont = BOLD_SYSTEM_FONT;
}
if (missingOrInvalidXLFD(WINGsConfiguration.antialiasedSystemFont)) {
WINGsConfiguration.antialiasedSystemFont = XFTSYSTEM_FONT;
}
if (missingOrInvalidXLFD(WINGsConfiguration.antialiasedBoldSystemFont)) {
WINGsConfiguration.antialiasedBoldSystemFont = XFTBOLD_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;
}
if (WINGsConfiguration.defaultFontSize == 0) {
WINGsConfiguration.defaultFontSize = 12;
}
return defaultButton;
}
void W_ReadConfigurations(void)
{
WMUserDefaults *defaults;
memset(&WINGsConfiguration, 0, sizeof(_WINGsConfiguration));
defaults = WMGetStandardUserDefaults();
if (defaults) {
char *buttonName;
unsigned button;
WINGsConfiguration.systemFont = WMGetUDStringForKey(defaults, "SystemFont");
WINGsConfiguration.boldSystemFont = WMGetUDStringForKey(defaults, "BoldSystemFont");
WINGsConfiguration.antialiasedText = WMGetUDBoolForKey(defaults, "AntialiasedText");
WINGsConfiguration.doubleClickDelay = WMGetUDIntegerForKey(defaults, "DoubleClickTime");
WINGsConfiguration.floppyPath = WMGetUDStringForKey(defaults, "FloppyPath");
buttonName = WMGetUDStringForKey(defaults, "MouseWheelUp");
if (buttonName) {
button = getButtonWithName(buttonName, Button4);
wfree(buttonName);
} else {
button = Button4;
}
WINGsConfiguration.mouseWheelUp = button;
buttonName = WMGetUDStringForKey(defaults, "MouseWheelDown");
if (buttonName) {
button = getButtonWithName(buttonName, Button5);
wfree(buttonName);
} else {
button = Button5;
}
WINGsConfiguration.mouseWheelDown = button;
if (WINGsConfiguration.mouseWheelDown == WINGsConfiguration.mouseWheelUp) {
WINGsConfiguration.mouseWheelUp = Button4;
WINGsConfiguration.mouseWheelDown = Button5;
}
WINGsConfiguration.defaultFontSize = WMGetUDIntegerForKey(defaults, "DefaultFontSize");
}
if (!WINGsConfiguration.systemFont) {
WINGsConfiguration.systemFont = SYSTEM_FONT;
}
if (!WINGsConfiguration.boldSystemFont) {
WINGsConfiguration.boldSystemFont = BOLD_SYSTEM_FONT;
}
if (WINGsConfiguration.defaultFontSize == 0) {
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;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
/*
* WINGs WMData function library
*
*
* 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
@@ -18,333 +18,272 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <string.h>
#include "WUtil.h"
typedef struct W_Data {
unsigned length; /* How many bytes we have */
unsigned capacity; /* How many bytes it can hold */
unsigned growth; /* How much to grow */
void *bytes; /* Actual data */
unsigned retainCount;
WMFreeDataProc *destructor;
int format; /* 0, 8, 16 or 32 */
unsigned length; /* How many bytes we have */
unsigned capacity; /* How many bytes it can hold */
unsigned growth; /* How much to grow */
void *bytes; /* Actual data */
unsigned retainCount;
WMFreeDataProc *destructor;
int format; /* 0, 8, 16 or 32 */
} W_Data;
/* Creating and destroying data objects */
WMData*
WMCreateDataWithCapacity(unsigned capacity)
WMData *WMCreateDataWithCapacity(unsigned capacity)
{
WMData *aData;
WMData *aData;
aData = (WMData*)wmalloc(sizeof(WMData));
aData = (WMData *) wmalloc(sizeof(WMData));
if (capacity>0)
aData->bytes = wmalloc(capacity);
else
aData->bytes = NULL;
if (capacity > 0)
aData->bytes = wmalloc(capacity);
else
aData->bytes = NULL;
aData->capacity = capacity;
aData->growth = capacity/2 > 0 ? capacity/2 : 1;
aData->length = 0;
aData->retainCount = 1;
aData->format = 0;
aData->destructor = wfree;
aData->capacity = capacity;
aData->growth = capacity / 2 > 0 ? capacity / 2 : 1;
aData->length = 0;
aData->retainCount = 1;
aData->format = 0;
aData->destructor = wfree;
return aData;
return aData;
}
WMData*
WMCreateDataWithLength(unsigned length)
WMData *WMCreateDataWithLength(unsigned length)
{
WMData *aData;
WMData *aData;
aData = WMCreateDataWithCapacity(length);
if (length>0) {
memset(aData->bytes, 0, length);
aData->length = length;
}
aData = WMCreateDataWithCapacity(length);
if (length > 0) {
memset(aData->bytes, 0, length);
aData->length = length;
}
return aData;
return aData;
}
WMData*
WMCreateDataWithBytes(void *bytes, unsigned length)
WMData *WMCreateDataWithBytes(void *bytes, unsigned length)
{
WMData *aData;
WMData *aData;
aData = WMCreateDataWithCapacity(length);
aData->length = length;
memcpy(aData->bytes, bytes, length);
aData = WMCreateDataWithCapacity(length);
aData->length = length;
memcpy(aData->bytes, bytes, length);
return aData;
return aData;
}
WMData*
WMCreateDataWithBytesNoCopy(void *bytes, unsigned length,
WMFreeDataProc *destructor)
WMData *WMCreateDataWithBytesNoCopy(void *bytes, unsigned length, WMFreeDataProc * destructor)
{
WMData *aData;
WMData *aData;
aData = (WMData*)wmalloc(sizeof(WMData));
aData->length = length;
aData->capacity = length;
aData->growth = length/2 > 0 ? length/2 : 1;
aData->bytes = bytes;
aData->retainCount = 1;
aData->format = 0;
aData->destructor = destructor;
aData = (WMData *) wmalloc(sizeof(WMData));
aData->length = length;
aData->capacity = length;
aData->growth = length / 2 > 0 ? length / 2 : 1;
aData->bytes = bytes;
aData->retainCount = 1;
aData->format = 0;
aData->destructor = destructor;
return aData;
return aData;
}
WMData*
WMCreateDataWithData(WMData *aData)
WMData *WMCreateDataWithData(WMData * aData)
{
WMData *newData;
WMData *newData;
if (aData->length > 0) {
newData = WMCreateDataWithBytes(aData->bytes, aData->length);
} else {
newData = WMCreateDataWithCapacity(0);
}
newData->format = aData->format;
if (aData->length > 0) {
newData = WMCreateDataWithBytes(aData->bytes, aData->length);
} else {
newData = WMCreateDataWithCapacity(0);
}
newData->format = aData->format;
return newData;
return newData;
}
WMData*
WMRetainData(WMData *aData)
WMData *WMRetainData(WMData * aData)
{
aData->retainCount++;
return aData;
aData->retainCount++;
return aData;
}
void
WMReleaseData(WMData *aData)
void WMReleaseData(WMData * aData)
{
aData->retainCount--;
if (aData->retainCount > 0)
return;
if (aData->bytes!=NULL && aData->destructor!=NULL) {
aData->destructor(aData->bytes);
}
wfree(aData);
aData->retainCount--;
if (aData->retainCount > 0)
return;
if (aData->bytes != NULL && aData->destructor != NULL) {
aData->destructor(aData->bytes);
}
wfree(aData);
}
/* Adjusting capacity */
void
WMSetDataCapacity(WMData *aData, unsigned capacity)
void WMSetDataCapacity(WMData * aData, unsigned capacity)
{
if (aData->capacity != capacity) {
aData->bytes = wrealloc(aData->bytes, capacity);
aData->capacity = capacity;
aData->growth = capacity/2 > 0 ? capacity/2 : 1;
}
if (aData->length > capacity) {
aData->length = capacity;
}
if (aData->capacity != capacity) {
aData->bytes = wrealloc(aData->bytes, capacity);
aData->capacity = capacity;
aData->growth = capacity / 2 > 0 ? capacity / 2 : 1;
}
if (aData->length > capacity) {
aData->length = capacity;
}
}
void
WMSetDataLength(WMData *aData, unsigned length)
void WMSetDataLength(WMData * aData, unsigned length)
{
if (length > aData->capacity) {
WMSetDataCapacity(aData, length);
}
if (length > aData->length) {
memset((unsigned char*)aData->bytes + aData->length, 0,
length - aData->length);
}
aData->length = length;
if (length > aData->capacity) {
WMSetDataCapacity(aData, length);
}
if (length > aData->length) {
memset((unsigned char *)aData->bytes + aData->length, 0, length - aData->length);
}
aData->length = length;
}
void
WMSetDataFormat(WMData *aData, unsigned format)
void WMSetDataFormat(WMData * aData, unsigned format)
{
aData->format = format;
aData->format = format;
}
void
WMIncreaseDataLengthBy(WMData *aData, unsigned extraLength)
void WMIncreaseDataLengthBy(WMData * aData, unsigned extraLength)
{
WMSetDataLength(aData, aData->length + extraLength);
WMSetDataLength(aData, aData->length + extraLength);
}
/* Accessing data */
const void*
WMDataBytes(WMData *aData)
const void *WMDataBytes(WMData * aData)
{
return aData->bytes;
return aData->bytes;
}
void
WMGetDataBytes(WMData *aData, void *buffer)
void WMGetDataBytes(WMData * aData, void *buffer)
{
wassertr(aData->length > 0);
wassertr(aData->length > 0);
memcpy(buffer, aData->bytes, aData->length);
memcpy(buffer, aData->bytes, aData->length);
}
unsigned
WMGetDataFormat(WMData *aData)
unsigned WMGetDataFormat(WMData * aData)
{
return aData->format;
return aData->format;
}
void
WMGetDataBytesWithLength(WMData *aData, void *buffer, unsigned length)
void WMGetDataBytesWithLength(WMData * aData, void *buffer, unsigned length)
{
wassertr(aData->length > 0);
wassertr(length <= aData->length);
wassertr(aData->length > 0);
wassertr(length <= aData->length);
memcpy(buffer, aData->bytes, length);
memcpy(buffer, aData->bytes, length);
}
void
WMGetDataBytesWithRange(WMData *aData, void *buffer, WMRange aRange)
void WMGetDataBytesWithRange(WMData * aData, void *buffer, WMRange aRange)
{
wassertr(aRange.position < aData->length);
wassertr(aRange.count <= aData->length-aRange.position);
wassertr(aRange.position < aData->length);
wassertr(aRange.count <= aData->length - aRange.position);
memcpy(buffer, (unsigned char*)aData->bytes + aRange.position,
aRange.count);
memcpy(buffer, (unsigned char *)aData->bytes + aRange.position, aRange.count);
}
WMData*
WMGetSubdataWithRange(WMData *aData, WMRange aRange)
WMData *WMGetSubdataWithRange(WMData * aData, WMRange aRange)
{
void *buffer;
WMData *newData;
void *buffer;
WMData *newData;
if (aRange.count <= 0)
return WMCreateDataWithCapacity(0);
if (aRange.count <= 0)
return WMCreateDataWithCapacity(0);
buffer = wmalloc(aRange.count);
WMGetDataBytesWithRange(aData, buffer, aRange);
newData = WMCreateDataWithBytesNoCopy(buffer, aRange.count, wfree);
newData->format = aData->format;
buffer = wmalloc(aRange.count);
WMGetDataBytesWithRange(aData, buffer, aRange);
newData = WMCreateDataWithBytesNoCopy(buffer, aRange.count, wfree);
newData->format = aData->format;
return newData;
return newData;
}
/* Testing data */
Bool
WMIsDataEqualToData(WMData *aData, WMData *anotherData)
Bool WMIsDataEqualToData(WMData * aData, WMData * anotherData)
{
if (aData->length != anotherData->length)
return False;
else if (!aData->bytes && !anotherData->bytes) /* both are empty */
return True;
else if (!aData->bytes || !anotherData->bytes) /* one of them is empty */
return False;
return (memcmp(aData->bytes, anotherData->bytes, aData->length)==0);
if (aData->length != anotherData->length)
return False;
else if (!aData->bytes && !anotherData->bytes) /* both are empty */
return True;
else if (!aData->bytes || !anotherData->bytes) /* one of them is empty */
return False;
return (memcmp(aData->bytes, anotherData->bytes, aData->length) == 0);
}
unsigned
WMGetDataLength(WMData *aData)
unsigned WMGetDataLength(WMData * aData)
{
return aData->length;
return aData->length;
}
/* Adding data */
void
WMAppendDataBytes(WMData *aData, void *bytes, unsigned length)
void WMAppendDataBytes(WMData * aData, void *bytes, unsigned length)
{
unsigned oldLength = aData->length;
unsigned newLength = oldLength + length;
unsigned oldLength = aData->length;
unsigned newLength = oldLength + length;
if (newLength > aData->capacity) {
unsigned nextCapacity = aData->capacity + aData->growth;
unsigned nextGrowth = aData->capacity ? aData->capacity : 1;
if (newLength > aData->capacity) {
unsigned nextCapacity = aData->capacity + aData->growth;
unsigned nextGrowth = aData->capacity ? aData->capacity : 1;
while (nextCapacity < newLength) {
unsigned tmp = nextCapacity + nextGrowth;
while (nextCapacity < newLength) {
unsigned tmp = nextCapacity + nextGrowth;
nextGrowth = nextCapacity;
nextCapacity = tmp;
}
WMSetDataCapacity(aData, nextCapacity);
aData->growth = nextGrowth;
}
memcpy((unsigned char*)aData->bytes + oldLength, bytes, length);
aData->length = newLength;
nextGrowth = nextCapacity;
nextCapacity = tmp;
}
WMSetDataCapacity(aData, nextCapacity);
aData->growth = nextGrowth;
}
memcpy((unsigned char *)aData->bytes + oldLength, bytes, length);
aData->length = newLength;
}
void
WMAppendData(WMData *aData, WMData *anotherData)
void WMAppendData(WMData * aData, WMData * anotherData)
{
if (anotherData->length > 0)
WMAppendDataBytes(aData, anotherData->bytes, anotherData->length);
if (anotherData->length > 0)
WMAppendDataBytes(aData, anotherData->bytes, anotherData->length);
}
/* Modifying data */
void
WMReplaceDataBytesInRange(WMData *aData, WMRange aRange, void *bytes)
void WMReplaceDataBytesInRange(WMData * aData, WMRange aRange, void *bytes)
{
wassertr(aRange.position < aData->length);
wassertr(aRange.count <= aData->length-aRange.position);
wassertr(aRange.position < aData->length);
wassertr(aRange.count <= aData->length - aRange.position);
memcpy((unsigned char*)aData->bytes + aRange.position, bytes, aRange.count);
memcpy((unsigned char *)aData->bytes + aRange.position, bytes, aRange.count);
}
void
WMResetDataBytesInRange(WMData *aData, WMRange aRange)
void WMResetDataBytesInRange(WMData * aData, WMRange aRange)
{
wassertr(aRange.position < aData->length);
wassertr(aRange.count <= aData->length-aRange.position);
wassertr(aRange.position < aData->length);
wassertr(aRange.count <= aData->length - aRange.position);
memset((unsigned char*)aData->bytes + aRange.position, 0, aRange.count);
memset((unsigned char *)aData->bytes + aRange.position, 0, aRange.count);
}
void
WMSetData(WMData *aData, WMData *anotherData)
void WMSetData(WMData * aData, WMData * anotherData)
{
unsigned length = anotherData->length;
unsigned length = anotherData->length;
WMSetDataCapacity(aData, length);
if (length > 0)
memcpy(aData->bytes, anotherData->bytes, length);
aData->length = length;
WMSetDataCapacity(aData, length);
if (length > 0)
memcpy(aData->bytes, anotherData->bytes, length);
aData->length = length;
}
/* Storing data */

255
WINGs/dragcommon.c Normal file
View File

@@ -0,0 +1,255 @@
#include "WINGsP.h"
#define XDND_SOURCE_VERSION(dragInfo) dragInfo->protocolVersion
#define XDND_DEST_INFO(dragInfo) dragInfo->destInfo
#define XDND_DEST_VIEW(dragInfo) dragInfo->destInfo->destView
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;
#ifdef XDND_DEBUG
char *msgName = XGetAtomName(dpy, message);
printf("sending message %s ... ", msgName);
XFree(msgName);
#endif
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);
#ifdef XDND_DEBUG
printf("sent\n");
#endif
return True; /* message sent */
}
static void handleLeaveMessage(WMDraggingInfo * info)
{
if (XDND_DEST_INFO(info) != NULL) {
/* XDND_DEST_VIEW is never NULL (it's the xdnd aware view) */
wassertr(XDND_DEST_VIEW(info) != NULL);
if (XDND_DEST_VIEW(info)->dragDestinationProcs != 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) {
Bool positionSent = (XDND_DEST_INFO(info) != NULL);
W_DragDestinationStopTimer();
W_DragDestinationStoreEnterMsgInfo(info, toplevel, event);
/* Xdnd version 3 and up are not compatible with version 1 or 2 */
if (XDND_SOURCE_VERSION(info) > 2) {
if (positionSent) {
/* 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", XDND_SOURCE_VERSION(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-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
@@ -18,7 +18,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "wconfig.h"
#include <stdio.h>
@@ -29,174 +28,159 @@
extern char *_WINGS_progname;
#define MAXLINE 1024
/*********************************************************************
* Returns the system error message associated with error code 'errnum'
*********************************************************************/
char*
wstrerror(int errnum)
char *wstrerror(int errnum)
{
#if defined(HAVE_STRERROR)
return strerror(errnum);
return strerror(errnum);
#elif !defined(HAVE_STRERROR) && defined(BSD)
extern int errno, sys_nerr;
extern int errno, sys_nerr;
# ifndef __DECC
extern char *sys_errlist[];
extern char *sys_errlist[];
# endif
static char buf[] = "Unknown error 12345678901234567890";
static char buf[] = "Unknown error 12345678901234567890";
if (errno < sys_nerr)
return sys_errlist[errnum];
if (errno < sys_nerr)
return sys_errlist[errnum];
sprintf (buf, _("Unknown error %d"), errnum);
return buf;
#else /* no strerror() and no sys_errlist[] */
static char buf[] = "Error 12345678901234567890";
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);
return buf;
snprintf(buf, sizeof(buf), _("Error %d"), errnum);
return buf;
#endif
}
/*********************************************************************
* Prints a message with variable arguments
*
*
* msg - message to print with optional formatting
* ... - arguments to use on formatting
*********************************************************************/
void
wmessage(const char *msg, ...)
void wmessage(const char *msg, ...)
{
va_list args;
char buf[MAXLINE];
va_list args;
char buf[MAXLINE];
va_start(args, msg);
va_start(args, msg);
vsnprintf(buf, MAXLINE-3, msg, args);
strcat(buf,"\n");
fflush(stdout);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(": ",stderr);
fputs(buf, stderr);
fflush(stdout);
fflush(stderr);
vsnprintf(buf, MAXLINE - 3, msg, args);
strcat(buf, "\n");
fflush(stdout);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(": ", stderr);
fputs(buf, stderr);
fflush(stdout);
fflush(stderr);
va_end(args);
va_end(args);
}
/*********************************************************************
* 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
wwarning(const char *msg, ...)
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 ? _WINGS_progname : "WINGs", stderr);
fputs(_(" warning: "),stderr);
fputs(buf, stderr);
fflush(stdout);
fflush(stderr);
va_end(args);
}
va_list args;
char buf[MAXLINE];
va_start(args, msg);
vsnprintf(buf, MAXLINE - 3, msg, args);
strcat(buf, "\n");
fflush(stdout);
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
wfatal(const char *msg, ...)
void wfatal(const char *msg, ...)
{
va_list args;
char buf[MAXLINE];
va_list args;
char buf[MAXLINE];
va_start(args, msg);
va_start(args, msg);
vsnprintf(buf, MAXLINE-3, msg, args);
strcat(buf,"\n");
fflush(stdout);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" fatal error: "),stderr);
fputs(buf, stderr);
fflush(stdout);
fflush(stderr);
vsnprintf(buf, MAXLINE - 3, msg, args);
strcat(buf, "\n");
fflush(stdout);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" fatal error: "), stderr);
fputs(buf, stderr);
fflush(stdout);
fflush(stderr);
va_end(args);
va_end(args);
}
/*********************************************************************
* 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
wsyserror(const char *msg, ...)
void wsyserror(const char *msg, ...)
{
va_list args;
char buf[MAXLINE];
int error=errno;
va_list args;
char buf[MAXLINE];
int error = errno;
va_start(args, msg);
vsnprintf(buf, MAXLINE-3, msg, args);
fflush(stdout);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" error: "), stderr);
fputs(buf, stderr);
fputs(": ", stderr);
fputs(wstrerror(error), stderr);
fputs("\n", stderr);
fflush(stderr);
fflush(stdout);
va_end(args);
va_start(args, msg);
vsnprintf(buf, MAXLINE - 3, msg, args);
fflush(stdout);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" error: "), stderr);
fputs(buf, stderr);
fputs(": ", stderr);
fputs(wstrerror(error), stderr);
fputs("\n", stderr);
fflush(stderr);
fflush(stdout);
va_end(args);
}
/*********************************************************************
* 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
wsyserrorwithcode(int error, const char *msg, ...)
void wsyserrorwithcode(int error, const char *msg, ...)
{
va_list args;
char buf[MAXLINE];
va_list args;
char buf[MAXLINE];
va_start(args, msg);
vsnprintf(buf, MAXLINE-3, msg, args);
fflush(stdout);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" error: "), stderr);
fputs(buf, stderr);
fputs(": ", stderr);
fputs(wstrerror(error), stderr);
fputs("\n", stderr);
fflush(stderr);
fflush(stdout);
va_end(args);
va_start(args, msg);
vsnprintf(buf, MAXLINE - 3, msg, args);
fflush(stdout);
fputs(_WINGS_progname ? _WINGS_progname : "WINGs", stderr);
fputs(_(" error: "), stderr);
fputs(buf, stderr);
fputs(": ", stderr);
fputs(wstrerror(error), stderr);
fputs("\n", stderr);
fflush(stderr);
fflush(stdout);
va_end(args);
}

View File

@@ -1,8 +1,8 @@
/*
* Window Maker miscelaneous function library
*
*
* 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
@@ -18,11 +18,11 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "wconfig.h"
#include "WUtil.h"
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
@@ -33,337 +33,343 @@
#define PATH_MAX 1024
#endif
char*
wgethomedir()
char *wgethomedir()
{
char *home = getenv("HOME");
struct passwd *user;
char *home = getenv("HOME");
struct passwd *user;
if (home)
return home;
user = getpwuid(getuid());
if (!user) {
wsyserror(_("could not get password entry for UID %i"), getuid());
return "/";
}
if (!user->pw_dir) {
return "/";
} else {
return user->pw_dir;
}
}
if (home)
return home;
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;
}
if (!user->pw_dir) {
return "/";
} else {
return user->pw_dir;
}
}
char*
wexpandpath(char *path)
{
char buffer2[PATH_MAX+2];
char buffer[PATH_MAX+2];
int i;
memset(buffer, 0, PATH_MAX+2);
if (*path=='~') {
char *home;
path++;
if (*path=='/' || *path==0) {
home = wgethomedir();
strcat(buffer, home);
user = getpwuid(getuid());
if (!user) {
wsyserror(_("could not get password entry for UID %i"), getuid());
return "/";
}
if (!user->pw_dir) {
return "/";
} else {
int j;
j = 0;
while (*path!=0 && *path!='/') {
buffer2[j++] = *path;
buffer2[j] = 0;
path++;
}
home = getuserhomedir(buffer2);
if (!home)
return user->pw_dir;
}
}
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;
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;
}
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);
}
}
if (!user->pw_dir) {
return "/";
} else {
buffer[i++] = *path;
path++;
return user->pw_dir;
}
}
return wstrdup(buffer);
}
char *wexpandpath(char *path)
{
char *origpath = path;
char buffer2[PATH_MAX + 2];
char buffer[PATH_MAX + 2];
int i;
memset(buffer, 0, PATH_MAX + 2);
if (*path == '~') {
char *home;
path++;
if (*path == '/' || *path == 0) {
home = wgethomedir();
if (strlen(home) > PATH_MAX)
goto error;
strcat(buffer, home);
} else {
int j;
j = 0;
while (*path != 0 && *path != '/') {
if (j > PATH_MAX)
goto error;
buffer2[j++] = *path;
buffer2[j] = 0;
path++;
}
home = getuserhomedir(buffer2);
if (!home || strlen(home) > PATH_MAX)
goto error;
strcat(buffer, home);
}
}
i = strlen(buffer);
while (*path != 0 && i <= PATH_MAX) {
char *tmp;
if (*path == '$') {
int j = 0;
path++;
/* expand $(HOME) or $HOME style environment variables */
if (*path == '(') {
path++;
while (*path != 0 && *path != ')') {
if (j > PATH_MAX)
goto error;
buffer2[j++] = *(path++);
buffer2[j] = 0;
}
if (*path == ')') {
path++;
tmp = getenv(buffer2);
} else {
tmp = NULL;
}
if (!tmp) {
if ((i += strlen(buffer2) + 2) > PATH_MAX)
goto error;
buffer[i] = 0;
strcat(buffer, "$(");
strcat(buffer, buffer2);
if (*(path-1)==')') {
if (++i > PATH_MAX)
goto error;
strcat(buffer, ")");
}
} else {
if ((i += strlen(tmp)) > PATH_MAX)
goto error;
strcat(buffer, tmp);
}
} else {
while (*path != 0 && *path != '/') {
if (j > PATH_MAX)
goto error;
buffer2[j++] = *(path++);
buffer2[j] = 0;
}
tmp = getenv(buffer2);
if (!tmp) {
if ((i += strlen(buffer2) + 1) > PATH_MAX)
goto error;
strcat(buffer, "$");
strcat(buffer, buffer2);
} else {
if ((i += strlen(tmp)) > PATH_MAX)
goto error;
strcat(buffer, tmp);
}
}
} else {
buffer[i++] = *path;
path++;
}
}
if (*path!=0)
goto error;
return wstrdup(buffer);
error:
errno = ENAMETOOLONG;
wsyserror(_("could not expand %s"), origpath);
/* FIXME: too many functions handle a return value of NULL incorrectly */
exit(1);
}
/* return address of next char != tok or end of string whichever comes first */
static char*
skipchar(char *string, char tok)
static char *skipchar(char *string, char tok)
{
while(*string!=0 && *string==tok)
string++;
while (*string != 0 && *string == tok)
string++;
return string;
return string;
}
/* return address of next char == tok or end of string whichever comes first */
static char*
nextchar(char *string, char tok)
static char *nextchar(char *string, char tok)
{
while(*string!=0 && *string!=tok)
string++;
while (*string != 0 && *string != tok)
string++;
return 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 *wfindfile(char *paths, char *file)
{
char *path;
char *tmp, *tmp2;
int len, flen;
char *fullpath;
char *path;
char *tmp, *tmp2;
int len, flen;
char *fullpath;
if (!file)
return NULL;
if (*file=='/' || *file=='~' || *file=='$' || !paths || *paths==0) {
if (access(file, F_OK)<0) {
fullpath = wexpandpath(file);
if (!fullpath)
if (!file)
return NULL;
if (access(fullpath, F_OK)<0) {
wfree(fullpath);
return NULL;
} else {
return fullpath;
}
} else {
return wstrdup(file);
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;
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;
}
flen = strlen(file);
tmp = paths;
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;
return NULL;
}
char*
wfindfileinlist(char **path_list, char *file)
char *wfindfileinlist(char **path_list, char *file)
{
int i;
char *path;
int len, flen;
char *fullpath;
int i;
char *path;
int len, flen;
char *fullpath;
if (!file)
if (!file)
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);
}
}
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);
}
}
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);
}
}
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);
}
}
return NULL;
}
char*
wfindfileinarray(WMPropList *array, char *file)
char *wfindfileinarray(WMPropList * array, char *file)
{
int i;
char *path;
int len, flen;
char *fullpath;
int i;
char *path;
int len, flen;
char *fullpath;
if (!file)
if (!file)
return NULL;
if (*file == '/' || *file == '~' || !array) {
if (access(file, F_OK) < 0) {
fullpath = wexpandpath(file);
if (!fullpath)
return NULL;
if (access(fullpath, F_OK) < 0) {
wfree(fullpath);
return NULL;
} else {
return fullpath;
}
} else {
return wstrdup(file);
}
}
flen = strlen(file);
for (i = 0; i < WMGetPropListItemCount(array); i++) {
WMPropList *prop;
char *p;
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);
}
}
return NULL;
if (*file=='/' || *file=='~' || !array) {
if (access(file, F_OK)<0) {
fullpath = wexpandpath(file);
if (!fullpath)
return NULL;
if (access(fullpath, F_OK)<0) {
wfree(fullpath);
return NULL;
} else {
return fullpath;
}
} else {
return wstrdup(file);
}
}
flen = strlen(file);
for (i=0; i<WMGetPropListItemCount(array); i++) {
WMPropList *prop;
char *p;
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);
}
}
return NULL;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,4 @@
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
@@ -7,494 +6,433 @@
#include "WUtil.h"
#define INITIAL_CAPACITY 23
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
# define INLINE inline
#else
# define INLINE
#endif
typedef struct HashItem {
const void *key;
const void *data;
struct HashItem *next; /* collided item list */
const void *key;
const void *data;
struct HashItem *next; /* collided item list */
} HashItem;
typedef struct W_HashTable {
WMHashTableCallbacks callbacks;
WMHashTableCallbacks callbacks;
unsigned itemCount;
unsigned size; /* table size */
unsigned itemCount;
unsigned size; /* table size */
HashItem **table;
HashItem **table;
} 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)
static INLINE unsigned
hashString(const char *key)
static INLINE unsigned hashString(const char *key)
{
unsigned ret = 0;
unsigned ctr = 0;
unsigned ret = 0;
unsigned ctr = 0;
while (*key) {
ret ^= *(char*)key++ << ctr;
ctr = (ctr + 1) % sizeof (char *);
}
return ret;
}
static INLINE unsigned
hashPtr(const void *key)
{
return ((size_t)key / sizeof(char*));
}
static void
rellocateItem(WMHashTable *table, HashItem *item)
{
unsigned h;
h = HASH(table, item->key);
item->next = table->table[h];
table->table[h] = item;
}
static void
rebuildTable(WMHashTable *table)
{
HashItem *next;
HashItem **oldArray;
int i;
int oldSize;
int newSize;
oldArray = table->table;
oldSize = table->size;
newSize = table->size*2;
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 (*key) {
ret ^= *(char *)key++ << ctr;
ctr = (ctr + 1) % sizeof(char *);
}
}
wfree(oldArray);
return ret;
}
WMHashTable*
WMCreateHashTable(WMHashTableCallbacks callbacks)
static INLINE unsigned hashPtr(const void *key)
{
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;
return ((size_t) key / sizeof(char *));
}
void
WMResetHashTable(WMHashTable *table)
static void rellocateItem(WMHashTable * table, HashItem * item)
{
HashItem *item, *tmp;
int i;
unsigned h;
for (i = 0; i < table->size; i++) {
item = table->table[i];
while (item) {
tmp = item->next;
RELKEY(table, item->key);
wfree(item);
item = tmp;
h = HASH(table, item->key);
item->next = table->table[h];
table->table[h] = item;
}
static void rebuildTable(WMHashTable * table)
{
HashItem *next;
HashItem **oldArray;
int i;
int oldSize;
int newSize;
oldArray = table->table;
oldSize = table->size;
newSize = table->size * 2;
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;
}
}
}
wfree(oldArray);
}
WMHashTable *WMCreateHashTable(WMHashTableCallbacks callbacks)
{
HashTable *table;
table = wmalloc(sizeof(HashTable));
memset(table, 0, sizeof(HashTable));
table->callbacks = callbacks;
table->itemCount = 0;
if (table->size > INITIAL_CAPACITY) {
wfree(table->table);
table->size = INITIAL_CAPACITY;
table->table = wmalloc(sizeof(HashItem*)*table->size);
}
memset(table->table, 0, sizeof(HashItem*)*table->size);
table->table = wmalloc(sizeof(HashItem *) * table->size);
memset(table->table, 0, sizeof(HashItem *) * table->size);
return table;
}
void
WMFreeHashTable(WMHashTable *table)
void WMResetHashTable(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;
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;
}
}
}
wfree(table->table);
wfree(table);
table->itemCount = 0;
if (table->size > INITIAL_CAPACITY) {
wfree(table->table);
table->size = INITIAL_CAPACITY;
table->table = wmalloc(sizeof(HashItem *) * table->size);
}
memset(table->table, 0, sizeof(HashItem *) * table->size);
}
unsigned
WMCountHashTable(WMHashTable *table)
void WMFreeHashTable(WMHashTable * table)
{
return table->itemCount;
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;
}
}
wfree(table->table);
wfree(table);
}
void*
WMHashGet(WMHashTable *table, const void *key)
unsigned WMCountHashTable(WMHashTable * table)
{
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;
return table->itemCount;
}
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;
}
} else {
while (item) {
if (key == item->key) {
break;
}
item = item->next;
}
}
} else {
while (item) {
if (key == item->key) {
break;
}
item = item->next;
if (item)
return (void *)item->data;
else
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)
return (void*)item->data;
else
if (item) {
if (retKey)
*retKey = (void *)item->key;
if (retItem)
*retItem = (void *)item->data;
return True;
} else {
return False;
}
}
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;
}
} else {
while (item) {
if (key == item->key) {
replacing = 1;
break;
}
item = item->next;
}
}
if (replacing) {
const void *old;
old = item->data;
item->data = data;
RELKEY(table, item->key);
item->key = DUPKEY(table, key);
return (void *)old;
} else {
HashItem *nitem;
nitem = wmalloc(sizeof(HashItem));
nitem->key = DUPKEY(table, key);
nitem->data = data;
nitem->next = table->table[h];
table->table[h] = nitem;
table->itemCount++;
}
/* OPTIMIZE: put this in an idle handler. */
if (table->itemCount > table->size) {
#ifdef DEBUG0
printf("rebuilding hash table...\n");
#endif
rebuildTable(table);
#ifdef DEBUG0
printf("finished rebuild.\n");
#endif
}
return NULL;
}
Bool
WMHashGetItemAndKey(WMHashTable *table, const void *key,
void **retItem, void **retKey)
static HashItem *deleteFromList(HashTable * table, HashItem * item, 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;
HashItem *next;
if (item == 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--;
return next;
}
} else {
while (item) {
if (key == item->key) {
break;
}
item = item->next;
item->next = deleteFromList(table, item->next, key);
return item;
}
void WMHashRemove(WMHashTable * table, const void *key)
{
unsigned h;
h = HASH(table, key);
table->table[h] = deleteFromList(table, table->table[h], key);
}
WMHashEnumerator WMEnumerateHashTable(WMHashTable * table)
{
WMHashEnumerator enumerator;
enumerator.table = table;
enumerator.index = 0;
enumerator.nextItem = table->table[0];
return enumerator;
}
void *WMNextHashEnumeratorItem(WMHashEnumerator * enumerator)
{
const void *data = NULL;
/* 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;
}
}
}
}
if (item) {
if (retKey)
*retKey = (void*)item->key;
if (retItem)
*retItem = (void*)item->data;
return True;
} else {
return False;
}
}
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;
if (enumerator->nextItem) {
data = ((HashItem *) enumerator->nextItem)->data;
enumerator->nextItem = ((HashItem *) enumerator->nextItem)->next;
}
} else {
while (item) {
if (key == item->key) {
replacing = 1;
break;
}
item = item->next;
return (void *)data;
}
void *WMNextHashEnumeratorKey(WMHashEnumerator * enumerator)
{
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 (replacing) {
const void *old;
old = item->data;
item->data = data;
RELKEY(table, item->key);
item->key = DUPKEY(table, key);
return (void*)old;
} else {
HashItem *nitem;
nitem = wmalloc(sizeof(HashItem));
nitem->key = DUPKEY(table, key);
nitem->data = data;
nitem->next = table->table[h];
table->table[h] = nitem;
table->itemCount++;
}
/* OPTIMIZE: put this in an idle handler.*/
if (table->itemCount > table->size) {
#ifdef DEBUG0
printf("rebuilding hash table...\n");
#endif
rebuildTable(table);
#ifdef DEBUG0
printf("finished rebuild.\n");
#endif
}
return NULL;
}
static HashItem*
deleteFromList(HashTable *table, HashItem *item, const void *key)
{
HashItem *next;
if (item==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--;
return next;
}
item->next = deleteFromList(table, item->next, key);
return item;
}
void
WMHashRemove(WMHashTable *table, const void *key)
{
unsigned h;
h = HASH(table, key);
table->table[h] = deleteFromList(table, table->table[h], key);
}
WMHashEnumerator
WMEnumerateHashTable(WMHashTable *table)
{
WMHashEnumerator enumerator;
enumerator.table = table;
enumerator.index = 0;
enumerator.nextItem = table->table[0];
return enumerator;
}
void*
WMNextHashEnumeratorItem(WMHashEnumerator *enumerator)
{
const void *data = NULL;
/* 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;
}
if (enumerator->nextItem) {
key = ((HashItem *) enumerator->nextItem)->key;
enumerator->nextItem = ((HashItem *) enumerator->nextItem)->next;
}
}
if (enumerator->nextItem) {
data = ((HashItem*)enumerator->nextItem)->data;
enumerator->nextItem = ((HashItem*)enumerator->nextItem)->next;
}
return (void*)data;
return (void *)key;
}
void*
WMNextHashEnumeratorKey(WMHashEnumerator *enumerator)
Bool WMNextHashEnumeratorItemAndKey(WMHashEnumerator * enumerator, void **item, void **key)
{
const void *key = NULL;
/* this assumes the table doesn't change between
* WMEnumerateHashTable() and WMNextHashEnumeratorItemAndKey() calls */
/* 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 == 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;
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 True;
}
return False;
return False;
}
static Bool
compareStrings(const char *key1, const char *key2)
static Bool compareStrings(const char *key1, const char *key2)
{
return strcmp(key1, key2)==0;
return strcmp(key1, key2) == 0;
}
typedef unsigned (*hashFunc)(const void*);
typedef Bool (*isEqualFunc)(const void*, const void*);
typedef void* (*retainFunc)(const void*);
typedef void (*releaseFunc)(const void*);
typedef unsigned (*hashFunc) (const void *);
typedef Bool(*isEqualFunc) (const void *, const void *);
typedef void *(*retainFunc) (const void *);
typedef void (*releaseFunc) (const void *);
const WMHashTableCallbacks WMIntHashCallbacks = {
NULL,
NULL,
NULL,
NULL
NULL,
NULL,
NULL,
NULL
};
const WMHashTableCallbacks WMStringHashCallbacks = {
(hashFunc)hashString,
(isEqualFunc)compareStrings,
(retainFunc)wstrdup,
(releaseFunc)wfree
(hashFunc) hashString,
(isEqualFunc) compareStrings,
(retainFunc) wstrdup,
(releaseFunc) wfree
};
const WMHashTableCallbacks WMStringPointerHashCallbacks = {
(hashFunc)hashString,
(isEqualFunc)compareStrings,
NULL,
NULL
(hashFunc) hashString,
(isEqualFunc) compareStrings,
NULL,
NULL
};

View File

@@ -18,7 +18,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "wconfig.h"
#include <unistd.h>
@@ -30,7 +29,6 @@
#include "WUtil.h"
/* For Solaris */
#ifndef INADDR_NONE
# define INADDR_NONE (-1)
@@ -39,272 +37,229 @@
/* Max hostname length (RFC 1123) */
#define W_MAXHOSTNAMELEN 255
typedef struct W_Host {
char *name;
char *name;
WMArray *names;
WMArray *addresses;
WMArray *names;
WMArray *addresses;
int refCount;
int refCount;
} W_Host;
static WMHashTable *hostCache = NULL;
static Bool hostCacheEnabled = True;
static WMHost*
getHostFromCache(char *name)
static WMHost *getHostFromCache(char *name)
{
if (!hostCache)
return NULL;
if (!hostCache)
return NULL;
return WMHashGet(hostCache, name);
return WMHashGet(hostCache, name);
}
static WMHost*
getHostWithHostEntry(struct hostent *host, char *name)
static WMHost *getHostWithHostEntry(struct hostent *host, char *name)
{
WMHost *hPtr;
struct in_addr in;
int i;
WMHost *hPtr;
struct in_addr in;
int i;
hPtr = (WMHost*)wmalloc(sizeof(WMHost));
memset(hPtr, 0, sizeof(WMHost));
hPtr = (WMHost *) wmalloc(sizeof(WMHost));
memset(hPtr, 0, sizeof(WMHost));
hPtr->names = WMCreateArrayWithDestructor(1, wfree);
hPtr->addresses = WMCreateArrayWithDestructor(1, wfree);
hPtr->names = WMCreateArrayWithDestructor(1, wfree);
hPtr->addresses = WMCreateArrayWithDestructor(1, wfree);
WMAddToArray(hPtr->names, wstrdup(host->h_name));
WMAddToArray(hPtr->names, wstrdup(host->h_name));
for (i=0; host->h_aliases[i]!=NULL; i++) {
WMAddToArray(hPtr->names, wstrdup(host->h_aliases[i]));
}
for (i = 0; host->h_aliases[i] != NULL; i++) {
WMAddToArray(hPtr->names, wstrdup(host->h_aliases[i]));
}
for (i=0; host->h_addr_list[i]!=NULL; i++) {
memcpy((void*)&in.s_addr, (const void*)host->h_addr_list[i],
host->h_length);
WMAddToArray(hPtr->addresses, wstrdup(inet_ntoa(in)));
}
for (i = 0; host->h_addr_list[i] != NULL; i++) {
memcpy((void *)&in.s_addr, (const void *)host->h_addr_list[i], host->h_length);
WMAddToArray(hPtr->addresses, wstrdup(inet_ntoa(in)));
}
hPtr->refCount = 1;
hPtr->refCount = 1;
if (hostCacheEnabled) {
if (!hostCache)
hostCache = WMCreateHashTable(WMStringPointerHashCallbacks);
hPtr->name = wstrdup(name);
wassertr(WMHashInsert(hostCache, hPtr->name, hPtr)==NULL);
hPtr->refCount++;
}
if (hostCacheEnabled) {
if (!hostCache)
hostCache = WMCreateHashTable(WMStringPointerHashCallbacks);
hPtr->name = wstrdup(name);
wassertr(WMHashInsert(hostCache, hPtr->name, hPtr) == NULL);
hPtr->refCount++;
}
return hPtr;
return hPtr;
}
WMHost*
WMGetCurrentHost()
WMHost *WMGetCurrentHost()
{
char name[W_MAXHOSTNAMELEN+1];
char name[W_MAXHOSTNAMELEN + 1];
if (gethostname(name, W_MAXHOSTNAMELEN) < 0) {
wsyserror(_("Cannot get current host name"));
return NULL;
}
if (gethostname(name, W_MAXHOSTNAMELEN) < 0) {
wsyserror(_("Cannot get current host name"));
return NULL;
}
name[W_MAXHOSTNAMELEN] = 0;
name[W_MAXHOSTNAMELEN] = 0;
return WMGetHostWithName(name);
return WMGetHostWithName(name);
}
WMHost*
WMGetHostWithName(char *name)
WMHost *WMGetHostWithName(char *name)
{
struct hostent *host;
WMHost *hPtr;
struct hostent *host;
WMHost *hPtr;
wassertrv(name!=NULL, NULL);
wassertrv(name != NULL, NULL);
if (hostCacheEnabled) {
if ((hPtr = getHostFromCache(name)) != NULL) {
WMRetainHost(hPtr);
return hPtr;
}
}
if (hostCacheEnabled) {
if ((hPtr = getHostFromCache(name)) != NULL) {
WMRetainHost(hPtr);
return hPtr;
}
}
host = gethostbyname(name);
if (host == NULL) {
return NULL;
}
host = gethostbyname(name);
if (host == NULL) {
return NULL;
}
hPtr = getHostWithHostEntry(host, name);
hPtr = getHostWithHostEntry(host, name);
return hPtr;
return hPtr;
}
WMHost*
WMGetHostWithAddress(char *address)
WMHost *WMGetHostWithAddress(char *address)
{
struct hostent *host;
struct in_addr in;
WMHost *hPtr;
struct hostent *host;
struct in_addr in;
WMHost *hPtr;
wassertrv(address!=NULL, NULL);
if (hostCacheEnabled) {
if ((hPtr = getHostFromCache(address)) != NULL) {
WMRetainHost(hPtr);
return hPtr;
}
}
wassertrv(address != NULL, NULL);
if (hostCacheEnabled) {
if ((hPtr = getHostFromCache(address)) != NULL) {
WMRetainHost(hPtr);
return hPtr;
}
}
#ifndef HAVE_INET_ATON
if ((in.s_addr = inet_addr(address)) == INADDR_NONE)
return NULL;
if ((in.s_addr = inet_addr(address)) == INADDR_NONE)
return NULL;
#else
if (inet_aton(address, &in) == 0)
return NULL;
if (inet_aton(address, &in) == 0)
return NULL;
#endif
host = gethostbyaddr((char*)&in, sizeof(in), AF_INET);
if (host == NULL) {
return NULL;
}
host = gethostbyaddr((char *)&in, sizeof(in), AF_INET);
if (host == NULL) {
return NULL;
}
hPtr = getHostWithHostEntry(host, address);
hPtr = getHostWithHostEntry(host, address);
return hPtr;
return hPtr;
}
WMHost*
WMRetainHost(WMHost *hPtr)
WMHost *WMRetainHost(WMHost * hPtr)
{
hPtr->refCount++;
return hPtr;
hPtr->refCount++;
return hPtr;
}
void
WMReleaseHost(WMHost *hPtr)
void WMReleaseHost(WMHost * hPtr)
{
hPtr->refCount--;
hPtr->refCount--;
if (hPtr->refCount > 0)
return;
if (hPtr->refCount > 0)
return;
WMFreeArray(hPtr->names);
WMFreeArray(hPtr->addresses);
WMFreeArray(hPtr->names);
WMFreeArray(hPtr->addresses);
if (hPtr->name) {
WMHashRemove(hostCache, hPtr->name);
wfree(hPtr->name);
}
if (hPtr->name) {
WMHashRemove(hostCache, hPtr->name);
wfree(hPtr->name);
}
wfree(hPtr);
wfree(hPtr);
}
void
WMSetHostCacheEnabled(Bool flag)
void WMSetHostCacheEnabled(Bool flag)
{
hostCacheEnabled = ((flag==0) ? 0 : 1);
hostCacheEnabled = ((flag == 0) ? 0 : 1);
}
Bool
WMIsHostCacheEnabled()
Bool WMIsHostCacheEnabled()
{
return hostCacheEnabled;
return hostCacheEnabled;
}
void
WMFlushHostCache()
void WMFlushHostCache()
{
if (hostCache && WMCountHashTable(hostCache)>0) {
WMArray *hostArray = WMCreateArray(WMCountHashTable(hostCache));
WMHashEnumerator enumer = WMEnumerateHashTable(hostCache);
WMHost *hPtr;
int i;
if (hostCache && WMCountHashTable(hostCache) > 0) {
WMArray *hostArray = WMCreateArray(WMCountHashTable(hostCache));
WMHashEnumerator enumer = WMEnumerateHashTable(hostCache);
WMHost *hPtr;
int i;
while ((hPtr = WMNextHashEnumeratorItem(&enumer))) {
/* we can't release the host here, because we can't change the
* hash while using the enumerator functions. */
WMAddToArray(hostArray, hPtr);
}
for (i=0; i<WMGetArrayItemCount(hostArray); i++)
WMReleaseHost(WMGetFromArray(hostArray, i));
WMFreeArray(hostArray);
WMResetHashTable(hostCache);
}
while ((hPtr = WMNextHashEnumeratorItem(&enumer))) {
/* we can't release the host here, because we can't change the
* hash while using the enumerator functions. */
WMAddToArray(hostArray, hPtr);
}
for (i = 0; i < WMGetArrayItemCount(hostArray); i++)
WMReleaseHost(WMGetFromArray(hostArray, i));
WMFreeArray(hostArray);
WMResetHashTable(hostCache);
}
}
static int
matchAddress(void *item, void *cdata)
static int matchAddress(void *item, void *cdata)
{
return (strcmp((char*) item, (char*) cdata)==0);
return (strcmp((char *)item, (char *)cdata) == 0);
}
Bool
WMIsHostEqualToHost(WMHost* hPtr, WMHost* aPtr)
Bool WMIsHostEqualToHost(WMHost * hPtr, WMHost * aPtr)
{
char *adr;
int i;
char *adr;
int i;
wassertrv(hPtr!=NULL && aPtr!=NULL, False);
wassertrv(hPtr != NULL && aPtr != NULL, False);
if (hPtr == aPtr)
return True;
if (hPtr == aPtr)
return True;
for (i=0; i<WMGetArrayItemCount(aPtr->addresses); i++) {
adr = WMGetFromArray(aPtr->addresses, i);
if (WMFindInArray(hPtr->addresses, matchAddress, adr) != WANotFound) {
return True;
}
}
for (i = 0; i < WMGetArrayItemCount(aPtr->addresses); i++) {
adr = WMGetFromArray(aPtr->addresses, i);
if (WMFindInArray(hPtr->addresses, matchAddress, adr) != WANotFound) {
return True;
}
}
return False;
return False;
}
char*
WMGetHostName(WMHost *hPtr)
char *WMGetHostName(WMHost * hPtr)
{
return (WMGetArrayItemCount(hPtr->names) > 0 ?
WMGetFromArray(hPtr->names, 0) : NULL);
/*return WMGetFromArray(hPtr->names, 0);*/
return (WMGetArrayItemCount(hPtr->names) > 0 ? WMGetFromArray(hPtr->names, 0) : NULL);
/*return WMGetFromArray(hPtr->names, 0); */
}
WMArray*
WMGetHostNames(WMHost *hPtr)
WMArray *WMGetHostNames(WMHost * hPtr)
{
return hPtr->names;
return hPtr->names;
}
char*
WMGetHostAddress(WMHost *hPtr)
char *WMGetHostAddress(WMHost * hPtr)
{
return (WMGetArrayItemCount(hPtr->addresses) > 0 ?
WMGetFromArray(hPtr->addresses, 0) : NULL);
return (WMGetArrayItemCount(hPtr->addresses) > 0 ? WMGetFromArray(hPtr->addresses, 0) : NULL);
}
WMArray*
WMGetHostAddresses(WMHost *hPtr)
WMArray *WMGetHostAddresses(WMHost * hPtr)
{
return hPtr->addresses;
return hPtr->addresses;
}

View File

@@ -1,12 +1,9 @@
#include <X11/Xlib.h>
#include "WINGsP.h"
void
InitI18n(Display *dpy)
void InitI18n(Display * dpy)
{
}

53
WINGs/make-rgb Executable file
View File

@@ -0,0 +1,53 @@
#!/usr/bin/python
import sys
import re
from optparse import OptionParser
parser = OptionParser(version="%prog 1.0")
parser.add_option("-f", "--file", dest="rgbtxtFile", default='/etc/X11/rgb.txt',
help="rgb.txt file containing X11 colors (/etc/X11/rgb.txt)",
metavar="File")
(options, args) = parser.parse_args()
f = open(options.rgbtxtFile)
lines = f.readlines()
f.close()
colorLine = re.compile(r'''\s*
(?P<red>\d+) # red
\s+
(?P<green>\d+) # green
\s+
(?P<blue>\d+) # blue
\s+
(?P<name>[^\s]+) # name
''', re.VERBOSE)
print '''
/* Automatically generated file. Do NOT edit. Regenerate it using make-rgb */
#ifndef RGB_H_
#define RGB_H_
#include <wraster.h>
typedef struct RGBColor {
RColor color;
char *name;
} RGBColor;
RGBColor rgbColors[] = {'''
for line in lines:
m = colorLine.match(line)
if m:
print ''' {{%(red)3s, %(green)3s, %(blue)3s, 0}, "%(name)s"},''' % m.groupdict()
print ''' {{ 0, 0, 0, 0}, NULL}
};
#endif
'''

View File

@@ -1,8 +1,8 @@
/*
* Window Maker miscelaneous function library
*
*
* 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
@@ -18,9 +18,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "../src/config.h"
#include "wconfig.h"
#include "WUtil.h"
#include <stdlib.h>
@@ -42,181 +40,169 @@
# define True 1
#endif
static void
defaultHandler(int bla)
static void defaultHandler(int bla)
{
if (bla)
kill(getpid(), SIGABRT);
else
exit(1);
if (bla)
kill(getpid(), SIGABRT);
else
exit(1);
}
static waborthandler *aborthandler = (waborthandler*)defaultHandler;
static waborthandler *aborthandler = (waborthandler *) defaultHandler;
#define wAbort(a) (*aborthandler)(a)
waborthandler*
wsetabort(waborthandler *handler)
waborthandler *wsetabort(waborthandler * handler)
{
waborthandler *old = aborthandler;
waborthandler *old = aborthandler;
aborthandler = handler;
aborthandler = handler;
return old;
return old;
}
static int Aborting=0; /* if we're in the middle of an emergency exit */
static int Aborting = 0; /* if we're in the middle of an emergency exit */
static WMHashTable *table = NULL;
void*
wmalloc(size_t size)
void *wmalloc(size_t size)
{
void *tmp;
void *tmp;
assert(size > 0);
assert(size > 0);
#ifdef TEST_WITH_GC
tmp = GC_malloc(size);
tmp = GC_malloc(size);
#else
tmp = malloc(size);
#endif
if (tmp == NULL) {
wwarning("malloc() failed. Retrying after 2s.");
sleep(2);
#ifdef TEST_WITH_GC
tmp = GC_malloc(size);
#else
tmp = malloc(size);
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);
}
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);
}
}
}
}
return tmp;
return tmp;
}
void*
wrealloc(void *ptr, size_t newsize)
void *wmalloc0(size_t size)
{
void *nptr;
void *ptr = wmalloc(size);
if (!ptr)
return NULL;
if (!ptr) {
nptr = wmalloc(newsize);
} else if (newsize==0) {
wfree(ptr);
nptr = NULL;
} else {
#ifdef TEST_WITH_GC
nptr = GC_realloc(ptr, newsize);
#else
nptr = realloc(ptr, newsize);
#endif
if (nptr==NULL) {
wwarning("realloc() failed. Retrying after 2s.");
sleep(2);
#ifdef TEST_WITH_GC
nptr = GC_realloc(ptr, newsize);
#else
nptr = realloc(ptr, newsize);
#endif
if (nptr == NULL) {
if (Aborting) {
fputs("Really Bad Error: recursive realloc() failure.",
stderr);
exit(-1);
} else {
wfatal("virtual memory exhausted");
Aborting=1;
wAbort(False);
}
}
}
}
return nptr;
memset(ptr, 0, size);
return ptr;
}
void*
wretain(void *ptr)
void *wrealloc(void *ptr, size_t newsize)
{
int *refcount;
if (!table) {
table = WMCreateHashTable(WMIntHashCallbacks);
}
refcount = WMHashGet(table, ptr);
if (!refcount) {
refcount = wmalloc(sizeof(int));
*refcount = 1;
WMHashInsert(table, ptr, refcount);
#ifdef VERBOSE
printf("== %i (%p)\n", *refcount, ptr);
void *nptr;
if (!ptr) {
nptr = wmalloc(newsize);
} else if (newsize == 0) {
wfree(ptr);
nptr = NULL;
} else {
#ifdef TEST_WITH_GC
nptr = GC_realloc(ptr, newsize);
#else
nptr = realloc(ptr, newsize);
#endif
} else {
(*refcount)++;
#ifdef VERBOSE
printf("+ %i (%p)\n", *refcount, ptr);
if (nptr == NULL) {
wwarning("realloc() failed. Retrying after 2s.");
sleep(2);
#ifdef TEST_WITH_GC
nptr = GC_realloc(ptr, newsize);
#else
nptr = realloc(ptr, newsize);
#endif
}
return ptr;
if (nptr == NULL) {
if (Aborting) {
fputs("Really Bad Error: recursive realloc() failure.", stderr);
exit(-1);
} else {
wfatal("virtual memory exhausted");
Aborting = 1;
wAbort(False);
}
}
}
}
return nptr;
}
void *wretain(void *ptr)
{
int *refcount;
if (!table) {
table = WMCreateHashTable(WMIntHashCallbacks);
}
void
wfree(void *ptr)
refcount = WMHashGet(table, ptr);
if (!refcount) {
refcount = wmalloc(sizeof(int));
*refcount = 1;
WMHashInsert(table, ptr, refcount);
#ifdef VERBOSE
printf("== %i (%p)\n", *refcount, ptr);
#endif
} else {
(*refcount)++;
#ifdef VERBOSE
printf("+ %i (%p)\n", *refcount, ptr);
#endif
}
return ptr;
}
void wfree(void *ptr)
{
#ifdef TEST_WITH_GC
GC_free(ptr);
GC_free(ptr);
#else
free(ptr);
free(ptr);
#endif
}
void
wrelease(void *ptr)
void wrelease(void *ptr)
{
int *refcount;
refcount = WMHashGet(table, ptr);
if (!refcount) {
wwarning("trying to release unexisting data %p", ptr);
} else {
(*refcount)--;
if (*refcount < 1) {
int *refcount;
refcount = WMHashGet(table, ptr);
if (!refcount) {
wwarning("trying to release unexisting data %p", ptr);
} else {
(*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
}
}
}

View File

@@ -3,16 +3,12 @@
#include "WINGsP.h"
WMRange
wmkrange(int start, int count)
WMRange wmkrange(int start, int count)
{
WMRange range;
WMRange range;
range.position = start;
range.count = count;
range.position = start;
range.count = count;
return range;
return range;
}

View File

@@ -6,538 +6,466 @@
#include "WUtil.h"
typedef struct W_Notification {
const char *name;
void *object;
void *clientData;
int refCount;
const char *name;
void *object;
void *clientData;
int refCount;
} Notification;
extern void W_FlushASAPNotificationQueue();
const char*
WMGetNotificationName(WMNotification *notification)
const char *WMGetNotificationName(WMNotification * notification)
{
return notification->name;
return notification->name;
}
void*
WMGetNotificationObject(WMNotification *notification)
void *WMGetNotificationObject(WMNotification * notification)
{
return notification->object;
return notification->object;
}
void*
WMGetNotificationClientData(WMNotification *notification)
void *WMGetNotificationClientData(WMNotification * notification)
{
return notification->clientData;
return notification->clientData;
}
WMNotification*
WMCreateNotification(const char *name, void *object, void *clientData)
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;
Notification *nPtr;
nPtr = wmalloc(sizeof(Notification));
nPtr->name = name;
nPtr->object = object;
nPtr->clientData = clientData;
nPtr->refCount = 1;
return nPtr;
}
void
WMReleaseNotification(WMNotification *notification)
void WMReleaseNotification(WMNotification * notification)
{
notification->refCount--;
if (notification->refCount < 1) {
wfree(notification);
}
notification->refCount--;
if (notification->refCount < 1) {
wfree(notification);
}
}
WMNotification*
WMRetainNotification(WMNotification *notification)
WMNotification *WMRetainNotification(WMNotification * notification)
{
notification->refCount++;
return notification;
}
notification->refCount++;
return notification;
}
/***************** Notification Center *****************/
typedef struct NotificationObserver {
WMNotificationObserverAction *observerAction;
void *observer;
WMNotificationObserverAction *observerAction;
void *observer;
const char *name;
void *object;
const char *name;
void *object;
struct NotificationObserver *prev; /* for tables */
struct NotificationObserver *next;
struct NotificationObserver *nextAction; /* for observerTable */
struct NotificationObserver *prev; /* for tables */
struct NotificationObserver *next;
struct NotificationObserver *nextAction; /* for observerTable */
} NotificationObserver;
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;
WMHashTable *nameTable; /* names -> observer lists */
WMHashTable *objectTable; /* object -> observer lists */
NotificationObserver *nilList; /* obervers that catch everything */
WMHashTable *observerTable; /* observer -> NotificationObserver */
} NotificationCenter;
/* default (and only) center */
static NotificationCenter *notificationCenter = NULL;
void
W_InitNotificationCenter(void)
void W_InitNotificationCenter(void)
{
notificationCenter = wmalloc(sizeof(NotificationCenter));
notificationCenter->nameTable = WMCreateHashTable(WMStringPointerHashCallbacks);
notificationCenter->objectTable = WMCreateHashTable(WMIntHashCallbacks);
notificationCenter->nilList = NULL;
notificationCenter->observerTable = WMCreateHashTable(WMIntHashCallbacks);
notificationCenter = wmalloc(sizeof(NotificationCenter));
notificationCenter->nameTable = WMCreateHashTable(WMStringPointerHashCallbacks);
notificationCenter->objectTable = WMCreateHashTable(WMIntHashCallbacks);
notificationCenter->nilList = NULL;
notificationCenter->observerTable = WMCreateHashTable(WMIntHashCallbacks);
}
void
WMAddNotificationObserver(WMNotificationObserverAction *observerAction,
WMAddNotificationObserver(WMNotificationObserverAction * observerAction,
void *observer, const char *name, void *object)
{
NotificationObserver *oRec, *rec;
oRec = wmalloc(sizeof(NotificationObserver));
oRec->observerAction = observerAction;
oRec->observer = observer;
oRec->name = name;
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);
if (rec) {
/* if this is not the first action for the observer */
oRec->nextAction = rec;
} else {
oRec->nextAction = NULL;
}
NotificationObserver *oRec, *rec;
oRec = wmalloc(sizeof(NotificationObserver));
oRec->observerAction = observerAction;
oRec->observer = observer;
oRec->name = name;
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);
if (!name && !object) {
/* 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;
}
} else {
/* name && (object || !object) */
rec = (NotificationObserver*)WMHashInsert(notificationCenter->nameTable,
name, oRec);
oRec->next = rec;
if (rec) {
rec->prev = oRec;
}
}
}
void
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 an object */
orec = (NotificationObserver*)WMHashGet(notificationCenter->objectTable,
notification->object);
while (orec) {
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;
/* tell the observer */
if (orec->observerAction) {
(*orec->observerAction)(orec->observer, notification);
}
orec = tmp;
}
WMReleaseNotification(notification);
}
void
WMRemoveNotificationObserver(void *observer)
{
NotificationObserver *orec, *tmp, *rec;
/* get the list of actions the observer is doing */
orec = (NotificationObserver*)WMHashGet(notificationCenter->observerTable,
observer);
/*
* FOREACH orec IN actionlist for observer
* DO
* remove from respective lists/tables
* free
* END
*/
while (orec) {
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);
}
}
/* if this is not the first action for the observer */
oRec->nextAction = rec;
} 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);
oRec->nextAction = NULL;
}
if (!name && !object) {
/* 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;
}
} else {
/* name && (object || !object) */
rec = (NotificationObserver *) WMHashInsert(notificationCenter->nameTable, name, oRec);
oRec->next = rec;
if (rec) {
rec->prev = oRec;
}
}
}
void 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 an object */
orec = (NotificationObserver *) WMHashGet(notificationCenter->objectTable, notification->object);
while (orec) {
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;
/* tell the observer */
if (orec->observerAction) {
(*orec->observerAction) (orec->observer, notification);
}
orec = tmp;
}
WMReleaseNotification(notification);
}
void WMRemoveNotificationObserver(void *observer)
{
NotificationObserver *orec, *tmp, *rec;
/* get the list of actions the observer is doing */
orec = (NotificationObserver *) WMHashGet(notificationCenter->observerTable, observer);
/*
* FOREACH orec IN actionlist for observer
* DO
* remove from respective lists/tables
* free
* END
*/
while (orec) {
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 {
WMHashRemove(notificationCenter->nameTable, orec->name);
/* 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;
}
if (orec->prev)
orec->prev->next = orec->next;
if (orec->next)
orec->next->prev = orec->prev;
wfree(orec);
orec = tmp;
}
WMHashRemove(notificationCenter->observerTable, observer);
WMHashRemove(notificationCenter->observerTable, observer);
}
void
WMRemoveNotificationObserverWithName(void *observer, const char *name, void *object)
void WMRemoveNotificationObserverWithName(void *observer, const char *name, void *object)
{
NotificationObserver *orec, *tmp, *rec;
NotificationObserver *newList = NULL;
NotificationObserver *orec, *tmp, *rec;
NotificationObserver *newList = NULL;
/* get the list of actions the observer is doing */
orec = (NotificationObserver*)WMHashGet(notificationCenter->observerTable, observer);
/* get the list of actions the observer is doing */
orec = (NotificationObserver *) WMHashGet(notificationCenter->observerTable, observer);
WMHashRemove(notificationCenter->observerTable, observer);
WMHashRemove(notificationCenter->observerTable, observer);
/* rebuild the list of actions for the observer */
/* 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);
}
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);
}
}
}
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;
p = newList;
while (p->nextAction) {
p = p->nextAction;
}
p->nextAction = orec;
}
}
} 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);
} else {
/* 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;
}
orec = tmp;
}
/* reinsert the list to the table */
if (newList) {
WMHashInsert(notificationCenter->observerTable, observer, newList);
}
/* reinsert the list to the table */
if (newList) {
WMHashInsert(notificationCenter->observerTable, observer, newList);
}
}
void
WMPostNotificationName(const char *name, void *object, void *clientData)
void WMPostNotificationName(const char *name, void *object, void *clientData)
{
WMNotification *notification;
WMNotification *notification;
notification = WMCreateNotification(name, object, clientData);
WMPostNotification(notification);
notification = WMCreateNotification(name, object, clientData);
WMReleaseNotification(notification);
WMPostNotification(notification);
WMReleaseNotification(notification);
}
/**************** Notification Queues ****************/
typedef struct W_NotificationQueue {
WMArray *asapQueue;
WMArray *idleQueue;
WMArray *asapQueue;
WMArray *idleQueue;
struct W_NotificationQueue *next;
struct W_NotificationQueue *next;
} NotificationQueue;
static WMNotificationQueue *notificationQueueList = NULL;
/* default queue */
static WMNotificationQueue *notificationQueue = NULL;
WMNotificationQueue*
WMGetDefaultNotificationQueue(void)
WMNotificationQueue *WMGetDefaultNotificationQueue(void)
{
if (!notificationQueue)
notificationQueue = WMCreateNotificationQueue();
if (!notificationQueue)
notificationQueue = WMCreateNotificationQueue();
return notificationQueue;
return notificationQueue;
}
WMNotificationQueue*
WMCreateNotificationQueue(void)
WMNotificationQueue *WMCreateNotificationQueue(void)
{
NotificationQueue *queue;
NotificationQueue *queue;
queue = wmalloc(sizeof(NotificationQueue));
queue = wmalloc(sizeof(NotificationQueue));
queue->asapQueue =
WMCreateArrayWithDestructor(8, (WMFreeDataProc*)WMReleaseNotification);
queue->idleQueue =
WMCreateArrayWithDestructor(8, (WMFreeDataProc*)WMReleaseNotification);
queue->next = notificationQueueList;
queue->asapQueue = WMCreateArrayWithDestructor(8, (WMFreeDataProc *) WMReleaseNotification);
queue->idleQueue = WMCreateArrayWithDestructor(8, (WMFreeDataProc *) WMReleaseNotification);
queue->next = notificationQueueList;
notificationQueueList = queue;
notificationQueueList = queue;
return queue;
return queue;
}
void
WMEnqueueNotification(WMNotificationQueue *queue, WMNotification *notification,
WMPostingStyle postingStyle)
void WMEnqueueNotification(WMNotificationQueue * queue, WMNotification * notification, WMPostingStyle postingStyle)
{
WMEnqueueCoalesceNotification(queue, notification, postingStyle,
WNCOnName|WNCOnSender);
WMEnqueueCoalesceNotification(queue, notification, postingStyle, WNCOnName | WNCOnSender);
}
#define NOTIF ((WMNotification*)cdata)
#define ITEM ((WMNotification*)item)
static int
matchSenderAndName(void *item, void *cdata)
static int matchSenderAndName(void *item, void *cdata)
{
return (NOTIF->object==ITEM->object && strcmp(NOTIF->name, ITEM->name)==0);
return (NOTIF->object == ITEM->object && strcmp(NOTIF->name, ITEM->name) == 0);
}
static int
matchSender(void *item, void *cdata)
static int matchSender(void *item, void *cdata)
{
return (NOTIF->object == ITEM->object);
return (NOTIF->object == ITEM->object);
}
static int
matchName(void *item, void *cdata)
static int matchName(void *item, void *cdata)
{
return (strcmp(NOTIF->name, ITEM->name)==0);
return (strcmp(NOTIF->name, ITEM->name) == 0);
}
#undef NOTIF
#undef ITEM
void
WMDequeueNotificationMatching(WMNotificationQueue *queue,
WMNotification *notification, unsigned mask)
void WMDequeueNotificationMatching(WMNotificationQueue * queue, WMNotification * notification, unsigned mask)
{
WMMatchDataProc *matchFunc;
WMMatchDataProc *matchFunc;
if ((mask & WNCOnName) && (mask & WNCOnSender))
matchFunc = matchSenderAndName;
else if (mask & WNCOnName)
matchFunc = matchName;
else if (mask & WNCOnSender)
matchFunc = matchSender;
else
return;
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);
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);
if (coalesceMask != WNCNone)
WMDequeueNotificationMatching(queue, notification, coalesceMask);
switch (postingStyle) {
case WMPostNow:
WMPostNotification(notification);
WMReleaseNotification(notification);
break;
switch (postingStyle) {
case WMPostNow:
WMPostNotification(notification);
WMReleaseNotification(notification);
break;
case WMPostASAP:
WMAddToArray(queue->asapQueue, notification);
break;
case WMPostASAP:
WMAddToArray(queue->asapQueue, notification);
break;
case WMPostWhenIdle:
WMAddToArray(queue->idleQueue, notification);
break;
}
}
void
W_FlushASAPNotificationQueue()
{
WMNotificationQueue *queue = notificationQueueList;
while (queue) {
while (WMGetArrayItemCount(queue->asapQueue)) {
WMPostNotification(WMGetFromArray(queue->asapQueue, 0));
WMDeleteFromArray(queue->asapQueue, 0);
case WMPostWhenIdle:
WMAddToArray(queue->idleQueue, notification);
break;
}
queue = queue->next;
}
}
void
W_FlushIdleNotificationQueue()
void W_FlushASAPNotificationQueue()
{
WMNotificationQueue *queue = notificationQueueList;
WMNotificationQueue *queue = notificationQueueList;
while (queue) {
while (WMGetArrayItemCount(queue->idleQueue)) {
WMPostNotification(WMGetFromArray(queue->idleQueue, 0));
WMDeleteFromArray(queue->idleQueue, 0);
while (queue) {
while (WMGetArrayItemCount(queue->asapQueue)) {
WMPostNotification(WMGetFromArray(queue->asapQueue, 0));
WMDeleteFromArray(queue->asapQueue, 0);
}
queue = queue->next;
}
queue = queue->next;
}
}
void W_FlushIdleNotificationQueue()
{
WMNotificationQueue *queue = notificationQueueList;
while (queue) {
while (WMGetArrayItemCount(queue->idleQueue)) {
WMPostNotification(WMGetFromArray(queue->idleQueue, 0));
WMDeleteFromArray(queue->idleQueue, 0);
}
queue = queue->next;
}
}

View File

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

View File

@@ -24,14 +24,14 @@ POTFILES = \
SUFFIXES = .po .mo
.po.mo:
msgfmt -o $@ $<
msgfmt -c -o $@ $<
all-local: $(CATALOGS)
WINGs.pot: $(POTFILES)
xgettext --default-domain=WINGs \
--add-comments --keyword=_ $(POTFILES)
--add-comments --keyword=_ --keyword=N_ $(POTFILES)
if cmp -s WINGs.po WINGs.pot; then \
rm -f WINGs.po; \
else \

View File

@@ -2,17 +2,18 @@
Instructions for translating po files can be found in the po/README directory
in the top of the WindowMaker source tree.
All files are in UTF-8
File Language Note Current Maintainer
------------------------------------------------------------------------------
ca.po Catalan Ernest Adrogué <eadrogue@gmx.net>
cs.po Czech 1 Jiri Hnidek <Jiri.Hnidek@vslib.cz
de.po German 1 Guido Scholz <guido.scholz@bayernline.de>
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 1 Jan 'judas' Tomka <judas@linux.sk>
sk.po Slovak Jan 'judas' Tomka <judas@linux.sk>
bg.po Bulgarian Anton Zinoviev <zinoviev@debian.org>
Notes
-----
1. Uses iso8859-2 character set.

View File

@@ -10,58 +10,58 @@ msgstr ""
"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=CP1251\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 "Íåïðàâèëíà êîìáèíàöèÿ àäðåñ-óñëóãà-ïðîòîêîë"
msgstr "Неправилна комбинация адрес-услуга-протокол"
#: ../../WINGs/error.c:54
#, c-format
msgid "Unknown error %d"
msgstr "Íåïîçíàòà ãðåøêà %d"
msgstr "Непозната грешка %d"
#: ../../WINGs/error.c:59
#, c-format
msgid "Error %d"
msgstr "Ãðåøêà %d"
msgstr "Грешка %d"
#: ../../WINGs/error.c:110
msgid " warning: "
msgstr "âíèìàíèå: "
msgstr "внимание: "
#: ../../WINGs/error.c:137
msgid " fatal error: "
msgstr " êðèòè÷íà ãðåøêà: "
msgstr " критична грешка: "
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
msgid " error: "
msgstr " ãðåøêà: "
msgstr " грешка: "
#: ../../WINGs/findfile.c:48
#, c-format
msgid "could not get password entry for UID %i"
msgstr "íå ìîæå äà ñå ïîëó÷è çàïèñúò çà ïàðîëà íà ïîòðåáèòåë ñ íîìåð %i"
msgstr "не може да се получи записът за парола на потребител с номер %i"
#: ../../WINGs/findfile.c:66
#, c-format
msgid "could not get password entry for user %s"
msgstr "íå ìîæå äà ñå ïîëó÷è çàïèñúò çà ïàðîëà íà ïîòðåáèòåë %s<"
msgstr "не може да се получи записът за парола на потребител %s<"
#: ../../WINGs/host.c:114
msgid "Cannot get current host name"
msgstr "Íå ìîæå äà ñå ïîëó÷è èìåòî íà õîñòà"
msgstr "Не може да се получи името на хоста"
#: ../../WINGs/proplist.c:91
#, c-format
msgid "syntax error in %s %s, line %i: %s"
msgstr "ñèíòàêòè÷íà ãðåøêà â %s %s, ðåä %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 ñå ïîääúðæàò ñàìî íèçîâå èëè äàííè"
msgstr "Като ключ за достъп до proplist се поддържат само низове или данни"
#: ../../WINGs/proplist.c:184 ../../WINGs/proplist.c:236
#: ../../WINGs/proplist.c:394 ../../WINGs/proplist.c:474
@@ -69,153 +69,153 @@ msgstr "
#: ../../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"
msgstr "Ползват се proplist-функции за обекти, които не са от тип WMPropLists"
#: ../../WINGs/proplist.c:630
msgid "unterminated PropList string"
msgstr "íåçàâúðøåí íèç PropList"
msgstr "незавършен низ PropList"
#: ../../WINGs/proplist.c:670
msgid "unterminated PropList data"
msgstr "íåçàâúðøåíè äàííè PropList"
msgstr "незавършени данни PropList"
#: ../../WINGs/proplist.c:678
msgid "unterminated PropList data (missing hexdigit)"
msgstr "íåçàâúðøåíè äàííè PropList (ëèïñâà øåñòíàäåñåòè÷íî ÷èñëî)"
msgstr "незавършени данни PropList (липсва шестнадесетично число)"
#: ../../WINGs/proplist.c:690 ../../WINGs/proplist.c:695
msgid "non hexdigit character in PropList data"
msgstr "çíàê, êîéòî íå å øåñòíàäåñåòè÷íî ÷èñëî, â äàííè PropList"
msgstr "знак, който не е шестнадесетично число, в данни PropList"
#: ../../WINGs/proplist.c:729
msgid "unterminated PropList array"
msgstr "íåçàâúðøåí ìàñèâ PropList"
msgstr "незавършен масив PropList"
#: ../../WINGs/proplist.c:737
msgid "missing or unterminated PropList array"
msgstr "ëèïñâàù èëè íåçàâúðøåí ìàñèâ Proplist"
msgstr "липсващ или незавършен масив Proplist"
#: ../../WINGs/proplist.c:747
msgid "could not get PropList array element"
msgstr "íå ìîæå äà ñå ïîëó÷è åëåìåíò îò ìàñèâ PropList"
msgstr "не може да се получи елемент от масив PropList"
#: ../../WINGs/proplist.c:776
msgid "unterminated PropList dictionary"
msgstr "íåçàâúðøåí ðå÷íèê PropList"
msgstr "незавършен речник PropList"
#: ../../WINGs/proplist.c:793
msgid "missing PropList dictionary key"
msgstr "ëèïñâàù êëþ÷ çà äîñòúï äî PropList"
msgstr "липсващ ключ за достъп до PropList"
#: ../../WINGs/proplist.c:795
msgid "missing PropList dictionary entry key or unterminated dictionary"
msgstr "ëèïñâàù êëþ÷ çà äîñòúï äî PropList èëè íåçàâúðøåí ðå÷íèê"
msgstr "липсващ ключ за достъп до PropList или незавършен речник"
#: ../../WINGs/proplist.c:803
msgid "error parsing PropList dictionary key"
msgstr "ãðåøêà ïðè ðàçáîð íà êëþ÷ â PropList"
msgstr "грешка при разбор на ключ в PropList"
#: ../../WINGs/proplist.c:811
msgid "missing = in PropList dictionary entry"
msgstr "ëèïñâà çíàê çà ðàâåíñòâî â åëåìåíò íà PropList"
msgstr "липсва знак за равенство в елемент на PropList"
#: ../../WINGs/proplist.c:819
msgid "error parsing PropList dictionary entry value"
msgstr "ãðåøêà ïðè ðàçáîð íà ñòîéíîñò íà åëåìåíò â PropList"
msgstr "грешка при разбор на стойност на елемент в PropList"
#: ../../WINGs/proplist.c:827
msgid "missing ; in PropList dictionary entry"
msgstr "ëèïñâà çíàê òî÷êà è çàïåòàÿ â åëåìåíò íà PropList"
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 "î÷àêâàõà ñå íèç, äàííè, ìàñèâ èëè ðå÷íèê. Àêî å ðå÷íèê, ïðîáâàéòå äà ãî îãðàäèòå ñ \"."
msgstr "очакваха се низ, данни, масив или речник. Ако е речник, пробвайте да го оградите с \"."
#: ../../WINGs/proplist.c:892
msgid "Comments are not allowed inside WindowMaker owned domain files."
msgstr "Íå ñå ïîçâîëÿâàò êîìåíòàðè âúâ ôàéëîâå ñ îáëàñòè, ñîáñòâåíîñò íà Óèíäîó Ìåéêúð"
msgstr "Не се позволяват коментари във файлове с области, собственост на Уиндоу Мейкър"
#: ../../WINGs/proplist.c:1563 ../../WINGs/proplist.c:1628
msgid "extra data after end of property list"
msgstr "äàííè â ïîâå÷å ñëåä êðàÿ íà ñïèñúê ñâîéñòâà"
msgstr "данни в повече след края на списък свойства"
#: ../../WINGs/proplist.c:1606
#, c-format
msgid "could not get size for file '%s'"
msgstr "íå ìîæå äà ñå ïîëó÷è ðàçìåðúò çà ôàéë \"%s\""
msgstr "не може да се получи размерът за файл \"%s\""
#: ../../WINGs/proplist.c:1618
#, c-format
msgid "error reading from file '%s'"
msgstr "ãðåøêà ïðè ÷åòåíå îò ôàéë \"%s\""
msgstr "грешка при четене от файл \"%s\""
#: ../../WINGs/proplist.c:1669
#, c-format
msgid "mkstemp (%s) failed"
msgstr "mkstemp (%s) íå óñïÿ"
msgstr "mkstemp (%s) не успя"
#: ../../WINGs/proplist.c:1680
#, c-format
msgid "mktemp (%s) failed"
msgstr "mktemp (%s) íå óñïÿ"
msgstr "mktemp (%s) не успя"
#: ../../WINGs/proplist.c:1691
#, c-format
msgid "open (%s) failed"
msgstr "open (%s) íå óñïÿ"
msgstr "open (%s) не успя"
#: ../../WINGs/proplist.c:1698
#, c-format
msgid "writing to file: %s failed"
msgstr "çàïèñúò âúâ ôàéë %s íå óñïÿ"
msgstr "записът във файл %s не успя"
#: ../../WINGs/proplist.c:1706
#, c-format
msgid "fclose (%s) failed"
msgstr "fclose (%s) íå óñïÿ"
msgstr "fclose (%s) не успя"
#: ../../WINGs/proplist.c:1715
#, c-format
msgid "rename ('%s' to '%s') failed"
msgstr "ïðåèìåíóâàíåòî (îò \"%s\" íà \"%s\") íå óñïÿ"
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\" ïðè ñèíõðîíèçèðàíå"
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"
msgstr "не може да се задели цвят %s"
#: ../../WINGs/wcolor.c:198
msgid "white"
msgstr "áÿë"
msgstr "бял"
#: ../../WINGs/wcolor.c:211
msgid "black"
msgstr "÷åðåí"
msgstr "черен"
#: ../../WINGs/wcolor.c:250
msgid "gray"
msgstr "ñèâ"
msgstr "сив"
#: ../../WINGs/wcolor.c:291
msgid "dark gray"
msgstr "òúìíîñèâ"
msgstr "тъмносив"
#: ../../WINGs/wcolorpanel.c:415
msgid "Colors"
msgstr "Öâåòîâå"
msgstr "Цветове"
#: ../../WINGs/wcolorpanel.c:605 ../../WINGs/wcolorpanel.c:2824
msgid "Brightness"
msgstr "ßðêîñò"
msgstr "Яркост"
#: ../../WINGs/wcolorpanel.c:607 ../../WINGs/wcolorpanel.c:683
#: ../../WINGs/wcolorpanel.c:716 ../../WINGs/wcolorpanel.c:750
@@ -225,102 +225,102 @@ msgstr "
#: ../../WINGs/wcolorpanel.c:2862 ../../WINGs/wcolorpanel.c:2898
#: ../../WINGs/wcolorpanel.c:3746
msgid "Color Panel: Could not allocate memory"
msgstr "Color Panel: íå ìîæå äà ñå çàäåëè ïàìåò"
msgstr "Color Panel: не може да се задели памет"
#: ../../WINGs/wcolorpanel.c:680 ../../WINGs/wcolorpanel.c:681
msgid "Red"
msgstr "×åðâåí"
msgstr "Червен"
#: ../../WINGs/wcolorpanel.c:713 ../../WINGs/wcolorpanel.c:714
msgid "Green"
msgstr "Çåëåí"
msgstr "Зелен"
#: ../../WINGs/wcolorpanel.c:747 ../../WINGs/wcolorpanel.c:748
msgid "Blue"
msgstr "Ñèí"
msgstr "Син"
#: ../../WINGs/wcolorpanel.c:807 ../../WINGs/wcolorpanel.c:808
msgid "Cyan"
msgstr "Ñèíüîçåëåí"
msgstr "Синьозелен"
#: ../../WINGs/wcolorpanel.c:841 ../../WINGs/wcolorpanel.c:842
msgid "Magenta"
msgstr "Ïóðïóðåí"
msgstr "Пурпурен"
#: ../../WINGs/wcolorpanel.c:875 ../../WINGs/wcolorpanel.c:876
msgid "Yellow"
msgstr "Æúëò"
msgstr "Жълт"
#: ../../WINGs/wcolorpanel.c:910 ../../WINGs/wcolorpanel.c:911
msgid "Black"
msgstr "×åðåí"
msgstr "Черен"
#: ../../WINGs/wcolorpanel.c:991
msgid "Spectrum"
msgstr "Ñïåêòúð"
msgstr "Спектър"
#: ../../WINGs/wcolorpanel.c:1021
msgid "Palette"
msgstr "Ïàëèòðà"
msgstr "Палитра"
#: ../../WINGs/wcolorpanel.c:1027
msgid "New from File..."
msgstr "Íîâà îò ôàéë..."
msgstr "Нова от файл..."
#: ../../WINGs/wcolorpanel.c:1028 ../../WINGs/wcolorpanel.c:1076
#: ../../WINGs/wcolorpanel.c:1093
msgid "Rename..."
msgstr "Ïðåèìåíóâàé..."
msgstr "Преименувай..."
#: ../../WINGs/wcolorpanel.c:1029 ../../WINGs/wcolorpanel.c:1077
#: ../../WINGs/wcolorpanel.c:1094 ../../WINGs/wcolorpanel.c:3321
msgid "Remove"
msgstr "Ïðåìàõíè"
msgstr "Премахни"
#: ../../WINGs/wcolorpanel.c:1030
msgid "Copy"
msgstr "Êîïèðàé"
msgstr "Копирай"
#: ../../WINGs/wcolorpanel.c:1031
#, fuzzy
msgid "New from Clipboard"
msgstr "Íîâà îò Clipboard"
msgstr "Нова от Clipboard"
#: ../../WINGs/wcolorpanel.c:1052
msgid "X11-Colors"
msgstr "Öâåòîâå îò X11"
msgstr "Цветове от X11"
#: ../../WINGs/wcolorpanel.c:1069
msgid "Color"
msgstr "Öâÿò"
msgstr "Цвят"
#: ../../WINGs/wcolorpanel.c:1075
msgid "Add..."
msgstr "Äîáàâè..."
msgstr "Добави..."
#: ../../WINGs/wcolorpanel.c:1085
msgid "List"
msgstr "Ñïèñúê"
msgstr "Списък"
#: ../../WINGs/wcolorpanel.c:1092
msgid "New..."
msgstr "Íîâ..."
msgstr "Нов..."
#: ../../WINGs/wcolorpanel.c:1231
#, c-format
msgid ""
"Color Panel: Could not create directory %s needed to store configurations"
msgstr "Color Panel: Íå ìîæå äà ñå ñúçäàäå äèðåêòîðèÿ %s, íåîáõîäèìà çà äà ñå çàïàçÿò íàñòðîéêèòå"
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 "Ôàéëîâà ãðåøêà"
msgstr "Файлова грешка"
#: ../../WINGs/wcolorpanel.c:1238
msgid "Could not create ColorPanel configuration directory"
msgstr "Íå ìîæå äà ñå ñúçäàäå êîíôèãóðàöèîííà äèðåêòîðèÿ çà ColorPanel"
msgstr "Не може да се създаде конфигурационна директория за ColorPanel"
#: ../../WINGs/wcolorpanel.c:1239 ../../WINGs/wcolorpanel.c:3208
#: ../../WINGs/wcolorpanel.c:3213 ../../WINGs/wcolorpanel.c:3240
@@ -328,60 +328,60 @@ msgstr "
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wfilepanel.c:971 ../../WINGs/wfontpanel.c:709
msgid "OK"
msgstr "Ïðèåìàì"
msgstr "Приемам"
#: ../../WINGs/wcolorpanel.c:1245 ../../WINGs/wcolorpanel.c:1281
#: ../../WINGs/wcolorpanel.c:1299
msgid "Color Panel: Could not find file"
msgstr "Color Panel: Íå ìîæå äà ñå îòêðèå ôàéëà"
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"
msgstr "Color Panel: не успя заявка към X"
#: ../../WINGs/wcolorpanel.c:2860
msgid "Saturation"
msgstr "Íàñèòåíîñò"
msgstr "Наситеност"
#: ../../WINGs/wcolorpanel.c:2896
msgid "Hue"
msgstr "Íþàíñ"
msgstr "Нюанс"
#: ../../WINGs/wcolorpanel.c:3146
msgid "Open Palette"
msgstr "Îòâàðÿíå íà ïàëèòðà"
msgstr "Отваряне на палитра"
#: ../../WINGs/wcolorpanel.c:3208
msgid "Invalid file format !"
msgstr "Íåïðàâèëåí ôàéëîâ ôîðìàò!"
msgstr "Неправилен файлов формат!"
#: ../../WINGs/wcolorpanel.c:3210
#, c-format
msgid "can't remove file %s"
msgstr "íå ìîæå äà ñå èçòðèå ôàéëúò %s"
msgstr "не може да се изтрие файлът %s"
#: ../../WINGs/wcolorpanel.c:3212
msgid "Couldn't remove file from Configuration Directory !"
msgstr "Íå ìîæå äà ñå èçòðèå ôàéë îò äèðåêòîðèÿòà çà íàñòðîéêè!"
msgstr "Не може да се изтрие файл от директорията за настройки!"
#: ../../WINGs/wcolorpanel.c:3239
msgid "Rename"
msgstr "Ïðåèìåíóâàíå"
msgstr "Преименуване"
#: ../../WINGs/wcolorpanel.c:3239
msgid "Rename palette to:"
msgstr "Ïðåèìåíóâàé ïàëèòðàòà íà "
msgstr "Преименувай палитрата на "
#: ../../WINGs/wcolorpanel.c:3240 ../../WINGs/wfilepanel.c:259
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
msgid "Cancel"
msgstr "Îòìåíÿì"
msgstr "Отменям"
#. Careful, this palette exists already
#: ../../WINGs/wcolorpanel.c:3256 ../../WINGs/wfilepanel.c:760
msgid "Warning"
msgstr "Âíèìàíèå"
msgstr "Внимание"
#: ../../WINGs/wcolorpanel.c:3257
msgid ""
@@ -389,26 +389,26 @@ msgid ""
"\n"
"Overwrite ?"
msgstr ""
"Òàêàâà ïàëèòðà âå÷å ñúùåñòâóâà!\n"
"Такава палитра вече съществува!\n"
"\n"
"Äà áúäå ëè çàìåíåíà ñ íîâàòà?"
"Да бъде ли заменена с новата?"
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
msgid "No"
msgstr "Íå"
msgstr "Не"
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
msgid "Yes"
msgstr "Äà"
msgstr "Да"
#: ../../WINGs/wcolorpanel.c:3289
#, c-format
msgid "Couldn't rename palette %s to %s\n"
msgstr "Ïàëèòðàòà %s íå ìîæå äà ñå ïðåèìåíóâà íà %s\n"
msgstr "Палитрата %s не може да се преименува на %s\n"
#: ../../WINGs/wcolorpanel.c:3315
msgid "This will permanently remove the palette "
msgstr "Òîâà ùå îòñòðàíè ïàëèòðàòà íåîáðàòèìî "
msgstr "Това ще отстрани палитрата необратимо "
#: ../../WINGs/wcolorpanel.c:3318
msgid ""
@@ -418,243 +418,243 @@ msgid ""
msgstr ""
".\n"
"\n"
"Óáåäåíè ëè ñòå, ÷å èñêàòå äà îòñòðàíèòå òàçè ïàëèòðà?"
"Убедени ли сте, че искате да отстраните тази палитра?"
#: ../../WINGs/wcolorpanel.c:3343
#, c-format
msgid "Couldn't remove palette %s\n"
msgstr "Ïàëèòðàòà %s íå ìîæå äà áúäå îòñòðàíåíà\n"
msgstr "Палитрата %s не може да бъде отстранена\n"
#: ../../WINGs/wcolorpanel.c:3648
#, c-format
msgid "Could not open %s"
msgstr "Íå ìîæå äà áúäå îòâîðåí %s"
msgstr "Не може да бъде отворен %s"
#: ../../WINGs/wcolorpanel.c:3655
#, c-format
msgid "Could not create %s"
msgstr "Íå ìîæå äà áúäå ñúçäàäåí %s"
msgstr "Не може да бъде създаден %s"
#: ../../WINGs/wcolorpanel.c:3666
#, c-format
msgid "Write error on file %s"
msgstr "Ãðåøêà ïðè çàïèñ âúâ ôàéë %s"
msgstr "Грешка при запис във файл %s"
#: ../../WINGs/wcolorpanel.c:3711
msgid "Color Panel: Color unspecified"
msgstr "Color Panel: Íå å ïîñî÷åí öâÿò"
msgstr "Color Panel: Не е посочен цвят"
#: ../../WINGs/wfilepanel.c:235
msgid "Name:"
msgstr "Èìå:"
msgstr "Име:"
#: ../../WINGs/wfilepanel.c:332 ../../WINGs/wfilepanel.c:396
msgid "Open"
msgstr "Îòâîðè"
msgstr "Отвори"
#: ../../WINGs/wfilepanel.c:350 ../../WINGs/wfilepanel.c:402
msgid "Save"
msgstr "Çàïàçè"
msgstr "Запази"
#: ../../WINGs/wfilepanel.c:562
#, c-format
msgid "WINGs: could not open directory %s\n"
msgstr "WINGs: äèðåêòîðèÿòà %s íå ìîæå äà ñå îòâîðè\n"
msgstr "WINGs: директорията %s не може да се отвори\n"
#: ../../WINGs/wfilepanel.c:580
#, c-format
msgid "WINGs: could not stat %s\n"
msgstr "WINGs: íå ìîãàò äà ñå ïîëó÷àò àòðèáóòèòå (stat) çà %s\n"
msgstr "WINGs: не могат да се получат атрибутите (stat) за %s\n"
#: ../../WINGs/wfilepanel.c:647 ../../WINGs/wfilepanel.c:970
#: ../../WINGs/wfontpanel.c:708
msgid "Error"
msgstr "Ãðåøêà"
msgstr "Грешка"
#: ../../WINGs/wfilepanel.c:658
msgid "Create Directory"
msgstr "Ñúçäàâàíå íà äèðåêòîðèÿ"
msgstr "Създаване на директория"
#: ../../WINGs/wfilepanel.c:659
msgid "Enter directory name"
msgstr "Âúâåäåòå èìåòî íà äèðåêòîðèÿòà"
msgstr "Въведете името на директорията"
#: ../../WINGs/wfilepanel.c:695 ../../WINGs/wfilepanel.c:734
#: ../../WINGs/wfilepanel.c:765 ../../WINGs/wfilepanel.c:793
msgid "Permission denied."
msgstr "Îòêàçàí äîñòúï"
msgstr "Отказан достъп"
#: ../../WINGs/wfilepanel.c:698
#, c-format
msgid "'%s' already exists."
msgstr "âå÷å ñúùåñòâóâà \"%s\"."
msgstr "вече съществува \"%s\"."
#: ../../WINGs/wfilepanel.c:701
msgid "Path does not exist."
msgstr "Ïúòÿò íå ñúùåñòâóâà."
msgstr "Пътят не съществува."
#: ../../WINGs/wfilepanel.c:731 ../../WINGs/wfilepanel.c:790
#, c-format
msgid "'%s' does not exist."
msgstr "Íå ñúùåñòâóâà \"%s\"."
msgstr "Не съществува \"%s\"."
#: ../../WINGs/wfilepanel.c:738 ../../WINGs/wfilepanel.c:797
msgid "Insufficient memory available."
msgstr "Íå å äîñòúïíà äîñòàòú÷íî ïàìåò."
msgstr "Не е достъпна достатъчно памет."
#: ../../WINGs/wfilepanel.c:742 ../../WINGs/wfilepanel.c:801
#, c-format
msgid "'%s' is on a read-only filesystem."
msgstr "\"%s\" ñå íàìèðà âúâ ôàéëîâà ñèñòåìà ñ äîñòúï ñàìî çà ÷åòåíå."
msgstr "\"%s\" се намира във файлова система с достъп само за четене."
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:777
#: ../../WINGs/wfilepanel.c:804
#, c-format
msgid "Can not delete '%s'."
msgstr "\"%s\" íå ìîæå äà áúäå èçòðèò."
msgstr "\"%s\" не може да бъде изтрит."
#: ../../WINGs/wfilepanel.c:752
#, c-format
msgid "Delete directory %s ?"
msgstr "Äà ñå èçòðèå ëè äèðåêòîðèÿòà %s?"
msgstr "Да се изтрие ли директорията %s?"
#: ../../WINGs/wfilepanel.c:756
#, c-format
msgid "Delete file %s ?"
msgstr "Äà ñå èçòðèå ëè ôàéëúò %s?"
msgstr "Да се изтрие ли файлът %s?"
#: ../../WINGs/wfilepanel.c:768
#, c-format
msgid "Directory '%s' does not exist."
msgstr "Äèðåêòîðèÿòà \"%s\" íå ñúùåñòâóâà."
msgstr "Директорията \"%s\" не съществува."
#: ../../WINGs/wfilepanel.c:771
#, c-format
msgid "Directory '%s' is not empty."
msgstr "Äèðåêòîðèÿòà \"%s\" íå å ïðàçíà."
msgstr "Директорията \"%s\" не е празна."
#: ../../WINGs/wfilepanel.c:774
#, c-format
msgid "Directory '%s' is busy."
msgstr "Äèðåêòîðèÿòà \"%s å çàåòà."
msgstr "Директорията \"%s е заета."
#: ../../WINGs/wfilepanel.c:787
#, c-format
msgid "'%s' is a directory."
msgstr "\"%s\" å äèðåêòîðèÿ."
msgstr "\"%s\" е директория."
#: ../../WINGs/wfilepanel.c:829
#, c-format
msgid "An error occured browsing '%s'."
msgstr "Íàñòúïè ãðåøêà ïðè ïîêàçâàíå íà \"%s\"."
msgstr "Настъпи грешка при показване на \"%s\"."
#: ../../WINGs/wfilepanel.c:833
#, c-format
msgid "'%s' is not a directory."
msgstr "\"%s\" íå å äèðåêòîðèÿ."
msgstr "\"%s\" не е директория."
#: ../../WINGs/wfilepanel.c:970
msgid "File does not exist."
msgstr "Ôàéëúò íå ñúùåñòâóâà."
msgstr "Файлът не съществува."
#: ../../WINGs/wfont.c:129
#, c-format
msgid "the following character sets are missing in %s:"
msgstr "â %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\"."
msgstr "Вместо кой да е символ от тези кодирания ще се използва низът \"%s\"."
#: ../../WINGs/wfont.c:300 ../../WINGs/wfont.c:336
#, c-format
msgid "could not load font set %s. Trying fixed."
msgstr "íå ìîæå äà ñå çàðåäè øðèôòîâà êîìáèíàöèÿ %s. Îïèò çà øðèôò 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."
msgstr "не може да се зареди шрифт %s. Опит за шрифт fixed."
#: ../../WINGs/wfont.c:310 ../../WINGs/wfont.c:346
msgid "could not load fixed font!"
msgstr "íå ìîæå äà ñå çàðåäè øðèôòúò fixed!"
msgstr "не може да се зареди шрифтът fixed!"
#: ../../WINGs/wfont.c:441
#, c-format
msgid "font description %s is too large."
msgstr "øðèôòîâîòî îïèñàíèå %s å òâúðäå äúëãî."
msgstr "шрифтовото описание %s е твърде дълго."
#: ../../WINGs/wfontpanel.c:205
msgid "Test!!!"
msgstr "Ïðîáà!!! Test!!!"
msgstr "Проба!!! Test!!!"
#: ../../WINGs/wfontpanel.c:211
msgid "Family"
msgstr "Ãàðíèòóðà"
msgstr "Гарнитура"
#: ../../WINGs/wfontpanel.c:222
msgid "Typeface"
msgstr "Ñòèë"
msgstr "Стил"
#: ../../WINGs/wfontpanel.c:233
msgid "Size"
msgstr "Ðàçìåð"
msgstr "Размер"
#: ../../WINGs/wfontpanel.c:252
msgid "Set"
msgstr "Óñòàíîâè"
msgstr "Установи"
#: ../../WINGs/wfontpanel.c:257
msgid "Revert"
msgstr "Ïðåäèøíîòî"
msgstr "Предишното"
#: ../../WINGs/wfontpanel.c:709
msgid "Could not retrieve font list"
msgstr "Íå ìîæå äà ñå ïîëó÷è ñïèñúêà îò øðèôòîâå"
msgstr "Не може да се получи списъка от шрифтове"
#: ../../WINGs/wfontpanel.c:721
#, c-format
msgid "font name %s is longer than 256, which is invalid."
msgstr "èìåòî íà øðèôòà %s å ïî-äúëãî îò 256 ñèìâîëà, êîåòî å íåäîïóñòèìî."
msgstr "името на шрифта %s е по-дълго от 256 символа, което е недопустимо."
#: ../../WINGs/wfontpanel.c:868
msgid "Roman"
msgstr "Èçïðàâåí"
msgstr "Изправен"
#: ../../WINGs/wfontpanel.c:871
msgid "Italic"
msgstr "Êóðñèâ"
msgstr "Курсив"
#: ../../WINGs/wfontpanel.c:873
msgid "Oblique"
msgstr "Íàêëîíåí"
msgstr "Наклонен"
#: ../../WINGs/wfontpanel.c:875
msgid "Rev Italic"
msgstr "Îáðàòåí êóðñèâ"
msgstr "Обратен курсив"
#: ../../WINGs/wfontpanel.c:877
msgid "Rev Oblique"
msgstr "Îáðàòíî íàêëîíåí"
msgstr "Обратно наклонен"
#: ../../WINGs/wfontpanel.c:883
msgid "Normal"
msgstr "Íîðìàëåí"
msgstr "Нормален"
#: ../../WINGs/widgets.c:415
#, c-format
msgid "WINGs: could not load widget images file: %s"
msgstr "WINGs: íå ìîæå äà ñå çàðåäè èçîáðàæåíèåòî %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 "íå ìîæå äà ñå çàðåäè íèêàêúâ øðèôò. Óáåäåòå ñå, ÷å èìàòå ïðàâèëíî èíñòàëèðàíè øðèôòîâå è ïîñî÷åí åçèêîâ ëîêàë."
msgstr "не може да се зареди никакъв шрифт. Убедете се, че имате правилно инсталирани шрифтове и посочен езиков локал."
#: ../../WINGs/wruler.c:189
msgid "0 inches"
msgstr "0 öîëà"
msgstr "0 цола"

View File

@@ -1,27 +1,27 @@
# Catalan messages for WINGs.
# Copyright (C) 2003 Free Software Foundation, Inc.
# This file is distributed under the same license as GNU Window Maker.
# Ernest Adrogué <eadrogue@gmx.net>, 2003.
# 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
# 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-02-23 16:54+0100\n"
"PO-Revision-Date: 2002-12-06 14:15+0100\n"
"Last-Translator: Ernest Adrogué <eadrogue@gmx.net>\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=iso-8859-1\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../WINGs/connection.c:461 ../../WINGs/connection.c:526
#: ../../WINGs/connection.c:569
#: ../../WINGs/connection.c:467 ../../WINGs/connection.c:532
#: ../../WINGs/connection.c:575
msgid "Bad address-service-protocol combination"
msgstr "Combinació adreça-servei-protocol incorrecta"
msgstr "Combinació adreça-servei-protocol incorrecta"
#: ../../WINGs/error.c:54
#, c-format
@@ -35,39 +35,40 @@ msgstr "Error %d"
#: ../../WINGs/error.c:110
msgid " warning: "
msgstr " atenció: "
msgstr ": atenció: "
#: ../../WINGs/error.c:137
msgid " fatal error: "
msgstr " error fatal: "
msgstr ": error fatal: "
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
msgid " error: "
msgstr " 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ó d'usuari per l'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ó d'usuari per l'usuari %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 en %s %s, línia %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 ""
"Les entrades de diccionari PropList només poden contenir dades o una cadena"
"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
@@ -75,7 +76,7 @@ msgstr ""
#: ../../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"
msgstr "S'han usat funcions PropList en objectes no-WMPropLists"
#: ../../WINGs/proplist.c:630
msgid "unterminated PropList string"
@@ -115,23 +116,23 @@ 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"
msgstr "falta una entrada PropList de diccionari o bé està incompleta"
#: ../../WINGs/proplist.c:803
msgid "error parsing PropList dictionary key"
msgstr "error analitzant l'entrada PropList de diccionari"
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 de diccionari PropList"
msgstr "falta un \"=\" a l'entrada PropList de diccionari"
#: ../../WINGs/proplist.c:819
msgid "error parsing PropList dictionary entry value"
msgstr "error analitzant el valor de l'entrada de diccionari PropList"
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 \";\" en l'entrada de diccionari PropList"
msgstr "falta un \";\" a l'entrada PropList de diccionari"
#: ../../WINGs/proplist.c:888
msgid ""
@@ -143,283 +144,284 @@ msgstr ""
#: ../../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 Window Maker."
msgstr "No es permeten comentaris en els fitxers de domini de WindowMaker."
#: ../../WINGs/proplist.c:1563 ../../WINGs/proplist.c:1628
#: ../../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"
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:1618
#: ../../WINGs/proplist.c:1619
#, c-format
msgid "error reading from file '%s'"
msgstr "error llegint el fitxer \"%s\""
msgstr "error mentre es llegia el fitxer \"%s\""
#: ../../WINGs/proplist.c:1669
#: ../../WINGs/proplist.c:1671
#, c-format
msgid "mkstemp (%s) failed"
msgstr "la rutina mkstemp (%s) ha fallat"
#: ../../WINGs/proplist.c:1680
#: ../../WINGs/proplist.c:1682
#, c-format
msgid "mktemp (%s) failed"
msgstr "la rutina mktemp (%s) ha fallat"
#: ../../WINGs/proplist.c:1691
#: ../../WINGs/proplist.c:1693
#, c-format
msgid "open (%s) failed"
msgstr "la rutina open (%s) ha fallat"
#: ../../WINGs/proplist.c:1698
#: ../../WINGs/proplist.c:1700
#, c-format
msgid "writing to file: %s failed"
msgstr "l'escriptura del fitxer \"%s\" ha fallat"
#: ../../WINGs/proplist.c:1706
#: ../../WINGs/proplist.c:1708
#, c-format
msgid "fclose (%s) failed"
msgstr "la rutina fclose (%s) ha fallat"
#: ../../WINGs/proplist.c:1715
#: ../../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:192 ../../WINGs/userdefaults.c:208
#: ../../WINGs/userdefaults.c:188 ../../WINGs/userdefaults.c:204
#, c-format
msgid "cannot read domain from file '%s' when syncing"
msgstr "no s'ha pogut llegir un domini del fitxer \"%s\" quan es sincronitzava"
#: ../../WINGs/wcolor.c:198 ../../WINGs/wcolor.c:211 ../../WINGs/wcolor.c:250
#: ../../WINGs/wcolor.c:291
#: ../../WINGs/wcolor.c:224 ../../WINGs/wcolor.c:236 ../../WINGs/wcolor.c:275
#: ../../WINGs/wcolor.c:316
#, c-format
msgid "could not allocate %s color"
msgstr "no s'ha pogut assignar espai pel color \"%s\""
#: ../../WINGs/wcolor.c:198
#: ../../WINGs/wcolor.c:224
msgid "white"
msgstr "blanc"
#: ../../WINGs/wcolor.c:211
#: ../../WINGs/wcolor.c:236
msgid "black"
msgstr "negre"
#: ../../WINGs/wcolor.c:250
#: ../../WINGs/wcolor.c:275
msgid "gray"
msgstr "gris"
#: ../../WINGs/wcolor.c:291
#: ../../WINGs/wcolor.c:316
msgid "dark gray"
msgstr "gris fosc"
#: ../../WINGs/wcolorpanel.c:415
#: ../../WINGs/wcolorpanel.c:420
msgid "Colors"
msgstr "Colors"
#: ../../WINGs/wcolorpanel.c:605 ../../WINGs/wcolorpanel.c:2824
#: ../../WINGs/wcolorpanel.c:610 ../../WINGs/wcolorpanel.c:2829
msgid "Brightness"
msgstr "Claror"
#: ../../WINGs/wcolorpanel.c:607 ../../WINGs/wcolorpanel.c:683
#: ../../WINGs/wcolorpanel.c:716 ../../WINGs/wcolorpanel.c:750
#: ../../WINGs/wcolorpanel.c:810 ../../WINGs/wcolorpanel.c:844
#: ../../WINGs/wcolorpanel.c:878 ../../WINGs/wcolorpanel.c:913
#: ../../WINGs/wcolorpanel.c:2164 ../../WINGs/wcolorpanel.c:2826
#: ../../WINGs/wcolorpanel.c:2862 ../../WINGs/wcolorpanel.c:2898
#: ../../WINGs/wcolorpanel.c:3746
#: ../../WINGs/wcolorpanel.c:612 ../../WINGs/wcolorpanel.c:688
#: ../../WINGs/wcolorpanel.c:721 ../../WINGs/wcolorpanel.c:755
#: ../../WINGs/wcolorpanel.c:815 ../../WINGs/wcolorpanel.c:849
#: ../../WINGs/wcolorpanel.c:883 ../../WINGs/wcolorpanel.c:918
#: ../../WINGs/wcolorpanel.c:2169 ../../WINGs/wcolorpanel.c:2831
#: ../../WINGs/wcolorpanel.c:2867 ../../WINGs/wcolorpanel.c:2903
#: ../../WINGs/wcolorpanel.c:3745
msgid "Color Panel: Could not allocate memory"
msgstr "Panell de color: No s'ha pogut assignar memòria"
msgstr "Panell de color: No s'ha pogut assignar memòria"
#: ../../WINGs/wcolorpanel.c:680 ../../WINGs/wcolorpanel.c:681
#: ../../WINGs/wcolorpanel.c:685 ../../WINGs/wcolorpanel.c:686
msgid "Red"
msgstr "Roig"
#: ../../WINGs/wcolorpanel.c:713 ../../WINGs/wcolorpanel.c:714
#: ../../WINGs/wcolorpanel.c:718 ../../WINGs/wcolorpanel.c:719
msgid "Green"
msgstr "Verd"
#: ../../WINGs/wcolorpanel.c:747 ../../WINGs/wcolorpanel.c:748
#: ../../WINGs/wcolorpanel.c:752 ../../WINGs/wcolorpanel.c:753
msgid "Blue"
msgstr "Blau"
#: ../../WINGs/wcolorpanel.c:807 ../../WINGs/wcolorpanel.c:808
#: ../../WINGs/wcolorpanel.c:812 ../../WINGs/wcolorpanel.c:813
msgid "Cyan"
msgstr "Cian"
#: ../../WINGs/wcolorpanel.c:841 ../../WINGs/wcolorpanel.c:842
#: ../../WINGs/wcolorpanel.c:846 ../../WINGs/wcolorpanel.c:847
msgid "Magenta"
msgstr "Magenta"
#: ../../WINGs/wcolorpanel.c:875 ../../WINGs/wcolorpanel.c:876
#: ../../WINGs/wcolorpanel.c:880 ../../WINGs/wcolorpanel.c:881
msgid "Yellow"
msgstr "Groc"
#: ../../WINGs/wcolorpanel.c:910 ../../WINGs/wcolorpanel.c:911
#: ../../WINGs/wcolorpanel.c:915 ../../WINGs/wcolorpanel.c:916
msgid "Black"
msgstr "Negre"
#: ../../WINGs/wcolorpanel.c:991
#: ../../WINGs/wcolorpanel.c:996
msgid "Spectrum"
msgstr "Espectre"
#: ../../WINGs/wcolorpanel.c:1021
#: ../../WINGs/wcolorpanel.c:1026
msgid "Palette"
msgstr "Paleta"
#: ../../WINGs/wcolorpanel.c:1027
#: ../../WINGs/wcolorpanel.c:1032
msgid "New from File..."
msgstr "Obté d'un fitxer..."
msgstr "Obtenir d'un fitxer..."
#: ../../WINGs/wcolorpanel.c:1028 ../../WINGs/wcolorpanel.c:1076
#: ../../WINGs/wcolorpanel.c:1093
#: ../../WINGs/wcolorpanel.c:1033 ../../WINGs/wcolorpanel.c:1081
#: ../../WINGs/wcolorpanel.c:1098
msgid "Rename..."
msgstr "Reanomena..."
msgstr "Reanomenar..."
#: ../../WINGs/wcolorpanel.c:1029 ../../WINGs/wcolorpanel.c:1077
#: ../../WINGs/wcolorpanel.c:1094 ../../WINGs/wcolorpanel.c:3321
#: ../../WINGs/wcolorpanel.c:1034 ../../WINGs/wcolorpanel.c:1082
#: ../../WINGs/wcolorpanel.c:1099 ../../WINGs/wcolorpanel.c:3326
msgid "Remove"
msgstr "Elimina"
msgstr "Eliminar"
#: ../../WINGs/wcolorpanel.c:1030
#: ../../WINGs/wcolorpanel.c:1035
msgid "Copy"
msgstr "Copia"
msgstr "Copiar"
#: ../../WINGs/wcolorpanel.c:1031
#: ../../WINGs/wcolorpanel.c:1036
msgid "New from Clipboard"
msgstr "Obté del porta-retalls..."
msgstr "Obtenir del porta-retalls..."
#: ../../WINGs/wcolorpanel.c:1052
#: ../../WINGs/wcolorpanel.c:1057
msgid "X11-Colors"
msgstr "Colors-X11"
#: ../../WINGs/wcolorpanel.c:1069
#: ../../WINGs/wcolorpanel.c:1074
msgid "Color"
msgstr "Color"
#: ../../WINGs/wcolorpanel.c:1075
#: ../../WINGs/wcolorpanel.c:1080
msgid "Add..."
msgstr "Afegeix..."
#: ../../WINGs/wcolorpanel.c:1085
#: ../../WINGs/wcolorpanel.c:1090
msgid "List"
msgstr "Llista"
#: ../../WINGs/wcolorpanel.c:1092
#: ../../WINGs/wcolorpanel.c:1097
msgid "New..."
msgstr "Nou..."
#: ../../WINGs/wcolorpanel.c:1231
#: ../../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ó"
"la configuració"
#. Delete the file, it doesn't belong here
#: ../../WINGs/wcolorpanel.c:1237 ../../WINGs/wcolorpanel.c:3207
#: ../../WINGs/wcolorpanel.c:3211
#: ../../WINGs/wcolorpanel.c:1242 ../../WINGs/wcolorpanel.c:3212
#: ../../WINGs/wcolorpanel.c:3216
msgid "File Error"
msgstr "Error de fitxer"
#: ../../WINGs/wcolorpanel.c:1238
#: ../../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"
msgstr "No s'ha pogut crear el directori de configuració del Panell de color"
#: ../../WINGs/wcolorpanel.c:1239 ../../WINGs/wcolorpanel.c:3208
#: ../../WINGs/wcolorpanel.c:3213 ../../WINGs/wcolorpanel.c:3240
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:647
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wfilepanel.c:971 ../../WINGs/wfontpanel.c:709
#: ../../WINGs/wcolorpanel.c:1244 ../../WINGs/wcolorpanel.c:3213
#: ../../WINGs/wcolorpanel.c:3218 ../../WINGs/wcolorpanel.c:3245
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:650
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
#: ../../WINGs/wfilepanel.c:974 ../../WINGs/wfontpanel.c:751
msgid "OK"
msgstr "D'acord"
#: ../../WINGs/wcolorpanel.c:1245 ../../WINGs/wcolorpanel.c:1281
#: ../../WINGs/wcolorpanel.c:1299
#: ../../WINGs/wcolorpanel.c:1250 ../../WINGs/wcolorpanel.c:1286
#: ../../WINGs/wcolorpanel.c:1304
msgid "Color Panel: Could not find file"
msgstr "Panell de color: No s'ha trobat el fitxer"
#: ../../WINGs/wcolorpanel.c:1486 ../../WINGs/wcolorpanel.c:1551
#: ../../WINGs/wcolorpanel.c:1615
#: ../../WINGs/wcolorpanel.c:1491 ../../WINGs/wcolorpanel.c:1556
#: ../../WINGs/wcolorpanel.c:1620
msgid "Color Panel: X failed request"
msgstr "Panell de color: petició X fallida"
msgstr "Panell de color: petició X fallida"
#: ../../WINGs/wcolorpanel.c:2860
#: ../../WINGs/wcolorpanel.c:2865
msgid "Saturation"
msgstr "Saturació"
msgstr "Saturació"
#: ../../WINGs/wcolorpanel.c:2896
#: ../../WINGs/wcolorpanel.c:2901
msgid "Hue"
msgstr "Matís"
msgstr "Matís"
#: ../../WINGs/wcolorpanel.c:3146
# és el títol d'un quadre de diàleg. eac
#: ../../WINGs/wcolorpanel.c:3151
msgid "Open Palette"
msgstr "Obrir paleta"
#: ../../WINGs/wcolorpanel.c:3208
#: ../../WINGs/wcolorpanel.c:3213
msgid "Invalid file format !"
msgstr "El format del fitxer no és vàlid !"
msgstr "El format del fitxer no és vàlid !"
#: ../../WINGs/wcolorpanel.c:3210
#: ../../WINGs/wcolorpanel.c:3215
#, c-format
msgid "can't remove file %s"
msgstr "no s'ha pogut eliminar el fitxer \"%s\""
#: ../../WINGs/wcolorpanel.c:3212
#: ../../WINGs/wcolorpanel.c:3217
msgid "Couldn't remove file from Configuration Directory !"
msgstr "No s'ha pogut eliminar el fitxer del directori de configuració !"
msgstr "No s'ha pogut eliminar el fitxer del directori de configuració !"
#: ../../WINGs/wcolorpanel.c:3239
#: ../../WINGs/wcolorpanel.c:3244
msgid "Rename"
msgstr "Reanomena"
#: ../../WINGs/wcolorpanel.c:3239
#: ../../WINGs/wcolorpanel.c:3244
msgid "Rename palette to:"
msgstr "Reanomenar la paleta a:"
msgstr "Reanomena la paleta com a:"
#: ../../WINGs/wcolorpanel.c:3240 ../../WINGs/wfilepanel.c:259
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wcolorpanel.c:3245 ../../WINGs/wfilepanel.c:259
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
msgid "Cancel"
msgstr "Cancel·la"
msgstr "Cancel·la"
#. Careful, this palette exists already
#: ../../WINGs/wcolorpanel.c:3256 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wcolorpanel.c:3261 ../../WINGs/wfilepanel.c:763
msgid "Warning"
msgstr "Atenció"
msgstr "Atenció"
#: ../../WINGs/wcolorpanel.c:3257
#: ../../WINGs/wcolorpanel.c:3262
msgid ""
"Palette already exists !\n"
"\n"
"Overwrite ?"
msgstr ""
"La paleta existeix!\n"
"Ja existia una paleta amb aquest nom!\n"
"\n"
"La voleu sobreescriure?"
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
msgid "No"
msgstr "No"
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
msgid "Yes"
msgstr "Sí"
msgstr "Sí"
#: ../../WINGs/wcolorpanel.c:3289
#: ../../WINGs/wcolorpanel.c:3294
#, c-format
msgid "Couldn't rename palette %s to %s\n"
msgstr "No s'ha pogut reanomenar la paleta %s a %s\n"
msgstr "No s'ha pogut reanomenar la paleta %s com a %s\n"
#: ../../WINGs/wcolorpanel.c:3315
#: ../../WINGs/wcolorpanel.c:3320
msgid "This will permanently remove the palette "
msgstr "Això eliminarà la paleta per sempre "
msgstr "Això eliminarà la paleta per sempre "
#: ../../WINGs/wcolorpanel.c:3318
#: ../../WINGs/wcolorpanel.c:3323
msgid ""
".\n"
"\n"
@@ -429,27 +431,27 @@ msgstr ""
"\n"
"Esteu segurs que voleu eliminar aquesta paleta?"
#: ../../WINGs/wcolorpanel.c:3343
#: ../../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:3648
#: ../../WINGs/wcolorpanel.c:3647
#, c-format
msgid "Could not open %s"
msgstr "No s'ha pogut obrir %s"
#: ../../WINGs/wcolorpanel.c:3655
#: ../../WINGs/wcolorpanel.c:3654
#, c-format
msgid "Could not create %s"
msgstr "No s'ha pogut crear %s"
#: ../../WINGs/wcolorpanel.c:3666
#: ../../WINGs/wcolorpanel.c:3665
#, c-format
msgid "Write error on file %s"
msgstr "Error d'escriptura en el fitxer %s"
#: ../../WINGs/wcolorpanel.c:3711
#: ../../WINGs/wcolorpanel.c:3710
msgid "Color Panel: Color unspecified"
msgstr "Panell de color: Color no especificat"
@@ -465,211 +467,270 @@ msgstr "Obre"
msgid "Save"
msgstr "Desa"
#: ../../WINGs/wfilepanel.c:562
#: ../../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:580
#: ../../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:647 ../../WINGs/wfilepanel.c:970
#: ../../WINGs/wfontpanel.c:708
#: ../../WINGs/wfilepanel.c:650 ../../WINGs/wfilepanel.c:973
#: ../../WINGs/wfontpanel.c:750
msgid "Error"
msgstr "Error"
#: ../../WINGs/wfilepanel.c:658
# és el nom d'un quadre de diàleg. eac
#: ../../WINGs/wfilepanel.c:661
msgid "Create Directory"
msgstr "Crear directori"
#: ../../WINGs/wfilepanel.c:659
#: ../../WINGs/wfilepanel.c:662
msgid "Enter directory name"
msgstr "Entreu el nom del directori"
#: ../../WINGs/wfilepanel.c:695 ../../WINGs/wfilepanel.c:734
#: ../../WINGs/wfilepanel.c:765 ../../WINGs/wfilepanel.c:793
#: ../../WINGs/wfilepanel.c:698 ../../WINGs/wfilepanel.c:737
#: ../../WINGs/wfilepanel.c:768 ../../WINGs/wfilepanel.c:796
msgid "Permission denied."
msgstr "Permís denegat."
#: ../../WINGs/wfilepanel.c:698
#, c-format
msgid "'%s' already exists."
msgstr "\"%s\" existia prèviament."
msgstr "Permís denegat."
#: ../../WINGs/wfilepanel.c:701
msgid "Path does not exist."
msgstr "El camí no existeix."
#, c-format
msgid "'%s' already exists."
msgstr "\"%s\" existia prèviament."
#: ../../WINGs/wfilepanel.c:731 ../../WINGs/wfilepanel.c:790
#: ../../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:738 ../../WINGs/wfilepanel.c:797
#: ../../WINGs/wfilepanel.c:741 ../../WINGs/wfilepanel.c:800
msgid "Insufficient memory available."
msgstr "No hi ha prou memòria disponible."
msgstr "No hi ha prou memòria disponible."
#: ../../WINGs/wfilepanel.c:742 ../../WINGs/wfilepanel.c:801
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:804
#, c-format
msgid "'%s' is on a read-only filesystem."
msgstr "\"%s\" es troba en un sistema de fitxers de només lectura."
msgstr "\"%s\" es troba en un sistema de fitxers de només lectura."
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:777
#: ../../WINGs/wfilepanel.c:804
#: ../../WINGs/wfilepanel.c:748 ../../WINGs/wfilepanel.c:780
#: ../../WINGs/wfilepanel.c:807
#, c-format
msgid "Can not delete '%s'."
msgstr "No s'ha pogut eliminar \"%s\"."
#: ../../WINGs/wfilepanel.c:752
#: ../../WINGs/wfilepanel.c:755
#, c-format
msgid "Delete directory %s ?"
msgstr "Eliminar el directori %s ?"
msgstr "Voleu eliminar el directori %s ?"
#: ../../WINGs/wfilepanel.c:756
#: ../../WINGs/wfilepanel.c:759
#, c-format
msgid "Delete file %s ?"
msgstr "Eliminar el fitxer %s ?"
msgstr "Voleu eliminar el fitxer %s ?"
#: ../../WINGs/wfilepanel.c:768
#: ../../WINGs/wfilepanel.c:771
#, c-format
msgid "Directory '%s' does not exist."
msgstr "El directori \"%s\" no existeix."
#: ../../WINGs/wfilepanel.c:771
#: ../../WINGs/wfilepanel.c:774
#, c-format
msgid "Directory '%s' is not empty."
msgstr "El directori \"%s\" no està buit."
msgstr "El directori \"%s\" no està buit."
#: ../../WINGs/wfilepanel.c:774
#: ../../WINGs/wfilepanel.c:777
#, c-format
msgid "Directory '%s' is busy."
msgstr "El directori \"%s\" es troba ocupat."
#: ../../WINGs/wfilepanel.c:787
#: ../../WINGs/wfilepanel.c:790
#, c-format
msgid "'%s' is a directory."
msgstr "\"%s\" és un directori."
msgstr "\"%s\" és un directori."
#: ../../WINGs/wfilepanel.c:829
#: ../../WINGs/wfilepanel.c:832
#, c-format
msgid "An error occured browsing '%s'."
msgstr "S'ha produït un error mentre s'explorava \"%s\"."
msgstr "S'ha produït un error mentre s'explorava \"%s\"."
#: ../../WINGs/wfilepanel.c:833
#: ../../WINGs/wfilepanel.c:836
#, c-format
msgid "'%s' is not a directory."
msgstr "\"%s\" no és un directori."
msgstr "\"%s\" no és un directori."
#: ../../WINGs/wfilepanel.c:970
#: ../../WINGs/wfilepanel.c:973
msgid "File does not exist."
msgstr "El fitxer no existeix."
#: ../../WINGs/wfont.c:129
#: ../../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:"
msgstr "els següents conjunts de caràcters falten a %s:"
#: ../../WINGs/wfont.c:136
#: ../../WINGs/wfont.c:830
#, c-format
msgid ""
"the string \"%s\" will be used in place of any characters from those sets."
msgstr ""
"la cadena \"%s\" s'usarà en lloc dels caràcters d'aquests conjunts de "
"caràcters."
"la cadena \"%s\" s'usarà en lloc dels caràcters d'aquests conjunts de "
"caràcters."
#: ../../WINGs/wfont.c:300 ../../WINGs/wfont.c:336
#. is arial a good fallback for multibyte?
#: ../../WINGs/wfont.c:1232 ../../WINGs/wfont.c:1247
#, c-format
msgid "could not load font set %s. Trying fixed."
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:306 ../../WINGs/wfont.c:342
#: ../../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 el tipus de lletra %s. Provant amb \"fixed\"."
msgstr "no s'ha pogut carregar la font %s. Provant amb \"fixed\"."
#: ../../WINGs/wfont.c:310 ../../WINGs/wfont.c:346
#: ../../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:441
#: ../../WINGs/wfont.c:1520
#, c-format
msgid "font description %s is too large."
msgstr "la descripció de tipus de lletra %s és massa gran."
msgstr "la descripció de tipus de lletra %s és massa gran."
#: ../../WINGs/wfontpanel.c:205
#: ../../WINGs/wfontpanel.c:235
msgid "Test!!!"
msgstr "Prova!!!"
#: ../../WINGs/wfontpanel.c:211
#: ../../WINGs/wfontpanel.c:241
msgid "Family"
msgstr "Familia"
#: ../../WINGs/wfontpanel.c:222
#: ../../WINGs/wfontpanel.c:252
msgid "Typeface"
msgstr "Fosa"
#: ../../WINGs/wfontpanel.c:233
#: ../../WINGs/wfontpanel.c:263
msgid "Size"
msgstr "Mida"
#: ../../WINGs/wfontpanel.c:252
#: ../../WINGs/wfontpanel.c:282
msgid "Set"
msgstr "Conjunt"
#: ../../WINGs/wfontpanel.c:257
#: ../../WINGs/wfontpanel.c:288
msgid "Revert"
msgstr "Torna"
#: ../../WINGs/wfontpanel.c:709
#: ../../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:721
#: ../../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."
"el nom de tipus de lletra %s ocupa més de 256 caràcters, per tant no és "
"vàlid."
#: ../../WINGs/wfontpanel.c:868
#: ../../WINGs/wfontpanel.c:913
msgid "Roman"
msgstr "Romana"
#: ../../WINGs/wfontpanel.c:871
#: ../../WINGs/wfontpanel.c:916
msgid "Italic"
msgstr "Itàlica"
msgstr "Itàlica"
#: ../../WINGs/wfontpanel.c:873
#: ../../WINGs/wfontpanel.c:918
msgid "Oblique"
msgstr "Obliqua"
#: ../../WINGs/wfontpanel.c:875
#: ../../WINGs/wfontpanel.c:920
msgid "Rev Italic"
msgstr "Itàlica rev"
msgstr "Itàlica inv"
#: ../../WINGs/wfontpanel.c:877
#: ../../WINGs/wfontpanel.c:922
msgid "Rev Oblique"
msgstr "Obliqua rev"
msgstr "Obliqua inv"
#: ../../WINGs/wfontpanel.c:883
#: ../../WINGs/wfontpanel.c:928
msgid "Normal"
msgstr "Normal"
#: ../../WINGs/widgets.c:415
#: ../../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 dels elements: %s"
msgstr "WINGs: no s'ha pogut carregar el fitxer d'imatges: %s"
#: ../../WINGs/widgets.c:763
#: ../../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 l'instal·lació dels tipus "
"de lletra i la configuració del local és adquada."
"no s'ha pogut carregar cap font. Assegureu-vos que heu instal·lat i "
"configurat correctament les fonts i el local."
#: ../../WINGs/wruler.c:189
#: ../../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à."

View File

@@ -1,66 +1,66 @@
# Czech messages for WINGs
# (C) 2001 Jiøí Hnídek
# (C) 2001 Jiří Hnídek
# Special thanks to Jan "judas" Tomka
#
# Original translation by Jiøí Hnídek on Oct 11 2001
# Currently maintained by Jiøí Hnídek <jiri.hnidek@vslib.cz>
# Original translation by Jiří Hnídek on Oct 11 2001
# Currently maintained by Jiří Hnídek <jiri.hnidek@vslib.cz>
#
msgid ""
msgstr ""
"Project-Id-Version: WINGs 0.70.0\n"
"POT-Creation-Date: 2001-10-11 19:10+0100\n"
"PO-Revision-Date: 2001-10-11 22:00+0100\n"
"Last-Translator: Jiøí Hnídek <jiri.hnidek@vslib.cz>\n"
"Last-Translator: Jiří Hnídek <jiri.hnidek@vslib.cz>\n"
"Language-Team: Czech <cz@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: unknown\n"
#: ../../WINGs/connection.c:451 ../../WINGs/connection.c:516
#: ../../WINGs/connection.c:559
msgid "Bad address-service-protocol combination"
msgstr "Nesprávná kombinace adresa-slu¾ba-protokol"
msgstr "Nesprávná kombinace adresa-služba-protokol"
#: ../../WINGs/dragsource.c:541
msgid "DND selection lost during drag operation..."
msgstr "DND výbìr se ztratil bìhem opere táhnutí..."
msgstr "DND výběr se ztratil během opere táhnutí..."
#: ../../WINGs/dragsource.c:610
#, c-format
msgid "drag & drop timed out while waiting for response from 0x%x\n"
msgstr "èas pro drag & drop vypr¹el bìhem èekání na odpoveï z 0x%x\n"
msgstr "čas pro drag & drop vypršel během čekání na odpoveď z 0x%x\n"
#: ../../WINGs/dragsource.c:728
msgid "could not get ownership or DND selection"
msgstr "nemo¾né získat vlastnictví nebo DND výbìr"
msgstr "nemožné získat vlastnictví nebo DND výběr"
#: ../../WINGs/dragsource.c:898
#, c-format
msgid "drag source received unexpected XdndFinished message from %x"
msgstr "zdroj tahání pøijal neoèekávanou zprávu XdndFinished z %x"
msgstr "zdroj tahání přijal neočekávanou zprávu XdndFinished z %x"
#: ../../WINGs/dragsource.c:1040
#, c-format
msgid "unknown XDND action %s from 0x%x"
msgstr "neznámá XDND akce %s z 0x%x"
msgstr "neznámá XDND akce %s z 0x%x"
#: ../../WINGs/dragsource.c:1073
msgid "received invalid drag & drop type list"
msgstr "pøijatý nesprávný seznam typù drag & drop"
msgstr "přijatý nesprávný seznam typů drag & drop"
#: ../../WINGs/dragsource.c:1161
msgid "received Enter event in bad order"
msgstr "pøijatá událost Enter v nesprávném poøadí"
msgstr "přijatá událost Enter v nesprávném pořadí"
#: ../../WINGs/dragsource.c:1168
#, c-format
msgid "received drag & drop request with unsupported version %i"
msgstr "pøijatý po¾adavek drag & drop s nepodporovanou verzí %i"
msgstr "přijatý požadavek drag & drop s nepodporovanou verzí %i"
#: ../../WINGs/error.c:56
#, c-format
msgid "Unknown error %d"
msgstr "Neznámá chyba %d"
msgstr "Neznámá chyba %d"
#: ../../WINGs/error.c:61
#, c-format
@@ -69,11 +69,11 @@ msgstr "Chyba %d"
#: ../../WINGs/error.c:112
msgid " warning: "
msgstr " varovíní: "
msgstr " varovíní: "
#: ../../WINGs/error.c:139
msgid " fatal error: "
msgstr " fatální chyba: "
msgstr " fatální chyba: "
#: ../../WINGs/error.c:165 ../../WINGs/error.c:194
msgid " error: "
@@ -82,76 +82,76 @@ msgstr " chyba: "
#: ../../WINGs/findfile.c:50
#, c-format
msgid "could not get password entry for UID %i"
msgstr "nemo¾né zjistit informaci o UID %i"
msgstr "nemožné zjistit informaci o UID %i"
#: ../../WINGs/findfile.c:68
#, c-format
msgid "could not get password entry for user %s"
msgstr "nemo¾né zjistit informaci o u¾ivatelovi %s"
msgstr "nemožné zjistit informaci o uživatelovi %s"
#: ../../WINGs/hashtable.c:275
msgid "rebuilding hash table...\n"
msgstr "pøepis tabulky hashovských funkcí...\n"
msgstr "přepis tabulky hashovských funkcí...\n"
#: ../../WINGs/hashtable.c:279
msgid "finished rebuild.\n"
msgstr "konec pøepisu.\n"
msgstr "konec přepisu.\n"
#: ../../WINGs/host.c:116
msgid "Cannot get current host name"
msgstr "Nemo¾né zjistit aktuální jméno poèítaèe"
msgstr "Nemožné zjistit aktuální jméno počítače"
#: ../../WINGs/memory.c:94
msgid "malloc() failed. Retrying after 2s."
msgstr "chyba malloc(). Nový pokus o 2s."
msgstr "chyba malloc(). Nový pokus o 2s."
#: ../../WINGs/memory.c:103
msgid "Really Bad Error: recursive malloc() failure."
msgstr "Skuteènì o¹klivá chyba: rekurzivní chyba malloc()."
msgstr "Skutečně ošklivá chyba: rekurzivní chyba malloc()."
#: ../../WINGs/memory.c:106 ../../WINGs/memory.c:146
msgid "virtual memory exhausted"
msgstr "virtuální pamì» vyèerpaná"
msgstr "virtuální paměť vyčerpaná"
#: ../../WINGs/memory.c:133
msgid "realloc() failed. Retrying after 2s."
msgstr "chyba realloc(). Nový pokus o 2s."
msgstr "chyba realloc(). Nový pokus o 2s."
#: ../../WINGs/memory.c:142
msgid "Really Bad Error: recursive realloc() failure."
msgstr "Skuteènì o¹klivá chyba: rekurzivní chyba realloc()."
msgstr "Skutečně ošklivá chyba: rekurzivní chyba realloc()."
#: ../../WINGs/memory.c:205
#, c-format
msgid "trying to release unexisting data %p"
msgstr "pokus uvolnit neexistujícá data %p"
msgstr "pokus uvolnit neexistujícá data %p"
#: ../../WINGs/memory.c:210
#, c-format
msgid "RELEASING %p\n"
msgstr "UVOLNÌNÍ %p\n"
msgstr "UVOLNĚNÍ %p\n"
#: ../../WINGs/wcolor.c:198 ../../WINGs/wcolor.c:211 ../../WINGs/wcolor.c:250
#: ../../WINGs/wcolor.c:291
#, c-format
msgid "could not allocate %s color"
msgstr "nemo¾né alokovat %s barvu"
msgstr "nemožné alokovat %s barvu"
#: ../../WINGs/wcolor.c:198
msgid "white"
msgstr "bílou"
msgstr "bílou"
#: ../../WINGs/wcolor.c:211
msgid "black"
msgstr "èernou"
msgstr "černou"
#: ../../WINGs/wcolor.c:250
msgid "gray"
msgstr "¹edou"
msgstr "šedou"
#: ../../WINGs/wcolor.c:291
msgid "dark gray"
msgstr "tmavì ¹edou"
msgstr "tmavě šedou"
#: ../../WINGs/wcolorpanel.c:410
msgid "Colors"
@@ -159,7 +159,7 @@ msgstr "Barvy"
#: ../../WINGs/wcolorpanel.c:600 ../../WINGs/wcolorpanel.c:2819
msgid "Brightness"
msgstr "Svìtlost"
msgstr "Světlost"
#: ../../WINGs/wcolorpanel.c:602 ../../WINGs/wcolorpanel.c:678
#: ../../WINGs/wcolorpanel.c:711 ../../WINGs/wcolorpanel.c:745
@@ -169,19 +169,19 @@ msgstr "Sv
#: ../../WINGs/wcolorpanel.c:2857 ../../WINGs/wcolorpanel.c:2893
#: ../../WINGs/wcolorpanel.c:3741
msgid "Color Panel: Could not allocate memory"
msgstr "Panel barev: Nemo¾né alokovat pamì»"
msgstr "Panel barev: Nemožné alokovat paměť"
#: ../../WINGs/wcolorpanel.c:675 ../../WINGs/wcolorpanel.c:676
msgid "Red"
msgstr "Èervená"
msgstr "Červená"
#: ../../WINGs/wcolorpanel.c:708 ../../WINGs/wcolorpanel.c:709
msgid "Green"
msgstr "Zelená"
msgstr "Zelená"
#: ../../WINGs/wcolorpanel.c:742 ../../WINGs/wcolorpanel.c:743
msgid "Blue"
msgstr "Modrá"
msgstr "Modrá"
#: ../../WINGs/wcolorpanel.c:802 ../../WINGs/wcolorpanel.c:803
msgid "Cyan"
@@ -193,11 +193,11 @@ msgstr ""
#: ../../WINGs/wcolorpanel.c:870 ../../WINGs/wcolorpanel.c:871
msgid "Yellow"
msgstr "®lutá"
msgstr "Žlutá"
#: ../../WINGs/wcolorpanel.c:905 ../../WINGs/wcolorpanel.c:906
msgid "Black"
msgstr "Èerná"
msgstr "Černá"
#: ../../WINGs/wcolorpanel.c:986
msgid "Spectrum"
@@ -209,12 +209,12 @@ msgstr "Paleta"
#: ../../WINGs/wcolorpanel.c:1022
msgid "New from File..."
msgstr "Nová ze souboru..."
msgstr "Nová ze souboru..."
#: ../../WINGs/wcolorpanel.c:1023 ../../WINGs/wcolorpanel.c:1071
#: ../../WINGs/wcolorpanel.c:1088
msgid "Rename..."
msgstr "Pøejmenovat..."
msgstr "Přejmenovat..."
#: ../../WINGs/wcolorpanel.c:1024 ../../WINGs/wcolorpanel.c:1072
#: ../../WINGs/wcolorpanel.c:1089 ../../WINGs/wcolorpanel.c:3316
@@ -223,11 +223,11 @@ msgstr "Odstranit"
#: ../../WINGs/wcolorpanel.c:1025
msgid "Copy"
msgstr "Kopírovat"
msgstr "Kopírovat"
#: ../../WINGs/wcolorpanel.c:1026
msgid "New from Clipboard"
msgstr "Nová ze schránky"
msgstr "Nová ze schránky"
#: ../../WINGs/wcolorpanel.c:1047
msgid "X11-Colors"
@@ -239,7 +239,7 @@ msgstr "Barva"
#: ../../WINGs/wcolorpanel.c:1070
msgid "Add..."
msgstr "Pøidat..."
msgstr "Přidat..."
#: ../../WINGs/wcolorpanel.c:1080
msgid "List"
@@ -247,14 +247,14 @@ msgstr "Seznam"
#: ../../WINGs/wcolorpanel.c:1087
msgid "New..."
msgstr "Nový..."
msgstr "Nový..."
#: ../../WINGs/wcolorpanel.c:1226
#, c-format
msgid ""
"Color Panel: Could not create directory %s needed to store configurations"
msgstr ""
"Panel barev: Nemo¾né vytvoøit adresáø %s potøebný k ulo¾ení nastavení"
"Panel barev: Nemožné vytvořit adresář %s potřebný k uložení nastavení"
#. Delete the file, it doesn't belong here
#: ../../WINGs/wcolorpanel.c:1232 ../../WINGs/wcolorpanel.c:3202
@@ -264,7 +264,7 @@ msgstr "Chyba souboru"
#: ../../WINGs/wcolorpanel.c:1233
msgid "Could not create ColorPanel configuration directory"
msgstr "Nemo¾né vytvoøit konfiguraèní adresáø panelu barev"
msgstr "Nemožné vytvořit konfigurační adresář panelu barev"
#: ../../WINGs/wcolorpanel.c:1234 ../../WINGs/wcolorpanel.c:3203
#: ../../WINGs/wcolorpanel.c:3208 ../../WINGs/wcolorpanel.c:3235
@@ -277,12 +277,12 @@ msgstr "OK"
#: ../../WINGs/wcolorpanel.c:1240 ../../WINGs/wcolorpanel.c:1276
#: ../../WINGs/wcolorpanel.c:1294
msgid "Color Panel: Could not find file"
msgstr "Panel barev: Nemo¾né nalézt soubor"
msgstr "Panel barev: Nemožné nalézt soubor"
#: ../../WINGs/wcolorpanel.c:1481 ../../WINGs/wcolorpanel.c:1546
#: ../../WINGs/wcolorpanel.c:1610
msgid "Color Panel: X failed request"
msgstr "Panel barev: chyba po¾adavku X"
msgstr "Panel barev: chyba požadavku X"
#: ../../WINGs/wcolorpanel.c:2855
msgid "Saturation"
@@ -290,42 +290,42 @@ msgstr "Saturace"
#: ../../WINGs/wcolorpanel.c:2891
msgid "Hue"
msgstr "Odteï"
msgstr "Odteď"
#: ../../WINGs/wcolorpanel.c:3141
msgid "Open Palette"
msgstr "Otevøít paletu"
msgstr "Otevřít paletu"
#: ../../WINGs/wcolorpanel.c:3203
msgid "Invalid file format !"
msgstr "Nesprávný souborový formát!"
msgstr "Nesprávný souborový formát!"
#: ../../WINGs/wcolorpanel.c:3205
#, c-format
msgid "can't remove file %s"
msgstr "nemo¾né odstranit soubor %s"
msgstr "nemožné odstranit soubor %s"
#: ../../WINGs/wcolorpanel.c:3207
msgid "Couldn't remove file from Configuration Directory !"
msgstr "Nemo¾né odstranit soubor z konfiguraèního adresáøe!"
msgstr "Nemožné odstranit soubor z konfiguračního adresáře!"
#: ../../WINGs/wcolorpanel.c:3234
msgid "Rename"
msgstr "Pøejmenovat"
msgstr "Přejmenovat"
#: ../../WINGs/wcolorpanel.c:3234
msgid "Rename palette to:"
msgstr "Pøejmenovat paletu:"
msgstr "Přejmenovat paletu:"
#: ../../WINGs/wcolorpanel.c:3235 ../../WINGs/wfilepanel.c:252
#: ../../WINGs/wfilepanel.c:653 ../../WINGs/wfilepanel.c:752
msgid "Cancel"
msgstr "Zru¹it"
msgstr "Zrušit"
#. Careful, this palette exists already
#: ../../WINGs/wcolorpanel.c:3251 ../../WINGs/wfilepanel.c:752
msgid "Warning"
msgstr "Varování"
msgstr "Varování"
#: ../../WINGs/wcolorpanel.c:3252
msgid ""
@@ -333,9 +333,9 @@ msgid ""
"\n"
"Overwrite ?"
msgstr ""
"Paleta u¾ existuje!\n"
"Paleta už existuje!\n"
"\n"
"Pøepsat?"
"Přepsat?"
#: ../../WINGs/wcolorpanel.c:3252 ../../WINGs/wcolorpanel.c:3316
msgid "No"
@@ -348,11 +348,11 @@ msgstr "Ano"
#: ../../WINGs/wcolorpanel.c:3284
#, c-format
msgid "Couldn't rename palette %s to %s\n"
msgstr "Nemo¾né pøejmenovat paletu %s na %s\n"
msgstr "Nemožné přejmenovat paletu %s na %s\n"
#: ../../WINGs/wcolorpanel.c:3310
msgid "This will permanently remove the palette "
msgstr "Paleta bude natrvalo smazaná"
msgstr "Paleta bude natrvalo smazaná"
#: ../../WINGs/wcolorpanel.c:3313
msgid ""
@@ -362,53 +362,53 @@ msgid ""
msgstr ""
".\n"
"\n"
"Jste si jisti, ¾e chcete odstranit tuto paletu?"
"Jste si jisti, že chcete odstranit tuto paletu?"
#: ../../WINGs/wcolorpanel.c:3338
#, c-format
msgid "Couldn't remove palette %s\n"
msgstr "Nemo¾né odstranit paletu %s\n"
msgstr "Nemožné odstranit paletu %s\n"
#: ../../WINGs/wcolorpanel.c:3643
#, c-format
msgid "Could not open %s"
msgstr "Nemo¾né otevøít %s"
msgstr "Nemožné otevřít %s"
#: ../../WINGs/wcolorpanel.c:3650
#, c-format
msgid "Could not create %s"
msgstr "Nemo¾né vytvoøit %s"
msgstr "Nemožné vytvořit %s"
#: ../../WINGs/wcolorpanel.c:3661
#, c-format
msgid "Write error on file %s"
msgstr "Chyba pøi zápisu do souboru %s"
msgstr "Chyba při zápisu do souboru %s"
#: ../../WINGs/wcolorpanel.c:3706
msgid "Color Panel: Color unspecified"
msgstr "Panel barev: Nespecifikovaná barva"
msgstr "Panel barev: Nespecifikovaná barva"
#: ../../WINGs/wfilepanel.c:228
msgid "Name:"
msgstr "Jméno:"
msgstr "Jméno:"
#: ../../WINGs/wfilepanel.c:325 ../../WINGs/wfilepanel.c:390
msgid "Open"
msgstr "Otevøít"
msgstr "Otevřít"
#: ../../WINGs/wfilepanel.c:343 ../../WINGs/wfilepanel.c:396
msgid "Save"
msgstr "Ulo¾it"
msgstr "Uložit"
#: ../../WINGs/wfilepanel.c:556
#, c-format
msgid "WINGs: could not open directory %s\n"
msgstr "WINGs: nemo¾né otevøít adresáø %s\n"
msgstr "WINGs: nemožné otevřít adresář %s\n"
#: ../../WINGs/wfilepanel.c:574
#, c-format
msgid "WINGs: could not stat %s\n"
msgstr "WINGs: nemo¾né zjistit informace o %s\n"
msgstr "WINGs: nemožné zjistit informace o %s\n"
#: ../../WINGs/wfilepanel.c:641 ../../WINGs/wfilepanel.c:962
#: ../../WINGs/wfontpanel.c:716
@@ -417,21 +417,21 @@ msgstr "Chyba"
#: ../../WINGs/wfilepanel.c:652
msgid "Create Directory"
msgstr "Vytvoøit adresáø"
msgstr "Vytvořit adresář"
#: ../../WINGs/wfilepanel.c:653
msgid "Enter directory name"
msgstr "Jméno adresáøe"
msgstr "Jméno adresáře"
#: ../../WINGs/wfilepanel.c:689 ../../WINGs/wfilepanel.c:728
#: ../../WINGs/wfilepanel.c:757 ../../WINGs/wfilepanel.c:785
msgid "Permission denied."
msgstr "Pøístup odmítnut."
msgstr "Přístup odmítnut."
#: ../../WINGs/wfilepanel.c:692
#, c-format
msgid "'%s' already exists."
msgstr "'%s' u¾ existuje"
msgstr "'%s' už existuje"
#: ../../WINGs/wfilepanel.c:695
msgid "Path does not exist."
@@ -444,23 +444,23 @@ msgstr "'%s' neexistuje."
#: ../../WINGs/wfilepanel.c:732 ../../WINGs/wfilepanel.c:789
msgid "Insufficient memory available."
msgstr "Nedostatek pamìti."
msgstr "Nedostatek paměti."
#: ../../WINGs/wfilepanel.c:736 ../../WINGs/wfilepanel.c:793
#, c-format
msgid "'%s' is on a read-only filesystem."
msgstr "'%s' je na souborovém systému jen pro ètení."
msgstr "'%s' je na souborovém systému jen pro čtení."
#: ../../WINGs/wfilepanel.c:739 ../../WINGs/wfilepanel.c:769
#: ../../WINGs/wfilepanel.c:796
#, c-format
msgid "Can not delete '%s'."
msgstr "Nemo¾né odstranit '%s'."
msgstr "Nemožné odstranit '%s'."
#: ../../WINGs/wfilepanel.c:745
#, c-format
msgid "Delete directory %s ?"
msgstr "Odstranit adresáø %s?"
msgstr "Odstranit adresář %s?"
#: ../../WINGs/wfilepanel.c:748
#, c-format
@@ -470,32 +470,32 @@ msgstr "Odstranit soubor %s?"
#: ../../WINGs/wfilepanel.c:760
#, c-format
msgid "Directory '%s' does not exist."
msgstr "Adresáø '%s' neexistuje."
msgstr "Adresář '%s' neexistuje."
#: ../../WINGs/wfilepanel.c:763
#, c-format
msgid "Directory '%s' is not empty."
msgstr "Adresáø '%s' není prázdný."
msgstr "Adresář '%s' není prázdný."
#: ../../WINGs/wfilepanel.c:766
#, c-format
msgid "Directory '%s' is busy."
msgstr "Adresáø '%s' je pou¾ívaný."
msgstr "Adresář '%s' je používaný."
#: ../../WINGs/wfilepanel.c:779
#, c-format
msgid "'%s' is a directory."
msgstr "'%s' je adresáø."
msgstr "'%s' je adresář."
#: ../../WINGs/wfilepanel.c:821
#, c-format
msgid "An error occured browsing '%s'."
msgstr "Pøi prohlí¾ení '%s' nastala chyba."
msgstr "Při prohlížení '%s' nastala chyba."
#: ../../WINGs/wfilepanel.c:825
#, c-format
msgid "'%s' is not a directory."
msgstr "'%s' není adresáø."
msgstr "'%s' není adresář."
#: ../../WINGs/wfilepanel.c:962
msgid "File does not exist."
@@ -504,37 +504,37 @@ msgstr "Soubor neexistuje."
#: ../../WINGs/wfont.c:129
#, c-format
msgid "the following character sets are missing in %s:"
msgstr "nasledující sady znakù chybí v %s:"
msgstr "nasledující sady znaků chybí v %s:"
#: ../../WINGs/wfont.c:136
#, c-format
msgid ""
"the string \"%s\" will be used in place of any characters from those sets."
msgstr ""
"øetìzec \"%s\" bude pou¾itý namísto znakù z tìchto sad."
"řetězec \"%s\" bude použitý namísto znaků z těchto sad."
#: ../../WINGs/wfont.c:282 ../../WINGs/wfont.c:318
#, c-format
msgid "could not load font set %s. Trying fixed."
msgstr "nemo¾né naèíst font %s. Zkou¹í se naèíst fixed."
msgstr "nemožné načíst font %s. Zkouší se načíst fixed."
#: ../../WINGs/wfont.c:288 ../../WINGs/wfont.c:324
#, c-format
msgid "could not load font %s. Trying fixed."
msgstr "nemo¾no naèíst font %s. Zko¹í se naèíst fixed."
msgstr "nemožno načíst font %s. Zkoší se načíst fixed."
#: ../../WINGs/wfont.c:292 ../../WINGs/wfont.c:328
msgid "could not load fixed font!"
msgstr "nemo¾né naèíst font fixed!"
msgstr "nemožné načíst font fixed!"
#: ../../WINGs/wfont.c:423
#, c-format
msgid "font description %s is too large."
msgstr "popis fontu %s je pøíli¹ velký."
msgstr "popis fontu %s je příliš velký."
#: ../../WINGs/wfontpanel.c:205
msgid "Test!!!"
msgstr "Zkou¹ka!!!"
msgstr "Zkouška!!!"
#: ../../WINGs/wfontpanel.c:211
msgid "Family"
@@ -554,16 +554,16 @@ msgstr "Sada"
#: ../../WINGs/wfontpanel.c:257
msgid "Revert"
msgstr "Zpìt"
msgstr "Zpět"
#: ../../WINGs/wfontpanel.c:717
msgid "Could not retrieve font list"
msgstr "Nemo¾né obdr¾et seznam fontù"
msgstr "Nemožné obdržet seznam fontů"
#: ../../WINGs/wfontpanel.c:729
#, c-format
msgid "font name %s is longer than 256, which is invalid."
msgstr "jméno fontu %s je del¹í ne¾ 256, co¾ je ¹patnì."
msgstr "jméno fontu %s je delší než 256, což je špatně."
#: ../../WINGs/wfontpanel.c:880
msgid "Roman"
@@ -587,37 +587,37 @@ msgstr ""
#: ../../WINGs/wfontpanel.c:895
msgid "Normal"
msgstr "Normílní"
msgstr "Normílní"
#: ../../WINGs/widgets.c:414
#, c-format
msgid "WINGs: could not load widget images file: %s"
msgstr "WINGs: nemo¾né naèíst soubor s obrázky pro widgety: %s"
msgstr "WINGs: nemožné načíst soubor s obrázky pro widgety: %s"
#: ../../WINGs/widgets.c:525
#, c-format
msgid "WINGs: could not open display %s"
msgstr "WINGs: nemo¾né otevøít display %s"
msgstr "WINGs: nemožné otevřít display %s"
#: ../../WINGs/widgets.c:717
msgid ""
"could not load any fonts. Make sure your font installationand locale "
"settings are correct."
msgstr ""
"nemo¾né naèíst ¾ádný font. Ubezpeète se, ¾e instalace fontù a místního "
"nastavení jsou v poøádku."
"nemožné načíst žádný font. Ubezpečte se, že instalace fontů a místního "
"nastavení jsou v pořádku."
#: ../../WINGs/wruler.c:189
msgid "0 inches"
msgstr "0 palcù"
msgstr "0 palců"
#: ../../WINGs/wtext.c:1212
msgid "...for this app will surely crash :-)\n"
msgstr "...pro tuto aplikaci to urèitì spadne :-)\n"
msgstr "...pro tuto aplikaci to určitě spadne :-)\n"
#: ../../WINGs/wtext.c:2084
msgid "didn't get it\n"
msgstr "nedosa¾eno\n"
msgstr "nedosaženo\n"
#: ../../WINGs/wtext.c:2726
#, c-format
@@ -626,15 +626,15 @@ msgstr "typ je [%s]\n"
#: ../../WINGs/wtext.c:2797
msgid "could not request data for dropped data"
msgstr "nemohou být vy¾ádána data pro polo¾ená data"
msgstr "nemohou být vyžádána data pro položená data"
#: ../../WINGs/wtext.c:2995
msgid "could not create text's view\n"
msgstr "nemo¾né zobrazit text\n"
msgstr "nemožné zobrazit text\n"
#: ../../WINGs/wview.c:219
msgid "trying to realize widget of unrealized parent"
msgstr "snaha vytvoøit widget neexistujícího rodièe objektu"
msgstr "snaha vytvořit widget neexistujícího rodiče objektu"
#: ../../WINGs/wview.c:267
msgid "trying to reparent realized view to unrealized parent"
@@ -642,22 +642,22 @@ msgstr ""
#: ../../WINGs/wtextfield.c:490
msgid "only left alignment is supported in textfields"
msgstr "pro textové pole je povolené jen levé zarovnání"
msgstr "pro textové pole je povolené jen levé zarovnání"
#pozor, co je STRING?
#: ../../WINGs/wwindow.c:222
msgid "window title conversion error... using STRING encoding"
msgstr "chyba konverze titulku okna... pou¾ije se kódovaní STRING"
msgstr "chyba konverze titulku okna... použije se kódovaní STRING"
#: ../../WINGs/wwindow.c:313
msgid "could not allocate memory for window size hints"
msgstr "nemo¾né alokovat pamì» pro pokyny velikosti okna"
msgstr "nemožné alokovat paměť pro pokyny velikosti okna"
#: ../../WINGs/wwindow.c:586
msgid "could not allocate memory for WM hints"
msgstr "nemo¾né alokovat pamì» pro pokyny WM"
msgstr "nemožné alokovat paměť pro pokyny WM"
#: ../../WINGs/wwindow.c:627
msgid "icon title conversion error..using STRING encoding"
msgstr "chyba konverze titulku ikony... pou¾ije se kódovaní STRING"
msgstr "chyba konverze titulku ikony... použije se kódovaní STRING"

View File

@@ -1,24 +1,28 @@
# KTranslator Generated File
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
# German Message Catalog for WINGs
#
# Initial translation
# Gudio Scholz <guido.scholz@bayernline.de>
#
# Adapted to versions 0.80 ff.
# Torsten Marek <shlomme@gmx.net>
#
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"
"Project-Id-Version: WINGs\n"
"POT-Creation-Date: 2004-11-01 16:24+0100\n"
"PO-Revision-Date: 2004-11-05 23:48+0100\n"
"Last-Translator: shlomme@gmx.net\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: unknown\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../WINGs/connection.c:461 ../../WINGs/connection.c:526
#: ../../WINGs/connection.c:569
#: ../../WINGs/connection.c:471 ../../WINGs/connection.c:536
#: ../../WINGs/connection.c:579
msgid "Bad address-service-protocol combination"
msgstr "Ungültige Adress-Dienst-Protokoll Kombination"
msgstr "Ungültige Kombination von Adresse und Dienstprotokoll"
#: ../../WINGs/error.c:54
#, c-format
@@ -45,346 +49,349 @@ 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"
msgstr "Passworteintrag für UID %i konnte nicht ermittelt werden"
#: ../../WINGs/findfile.c:66
#, c-format
msgid "could not get password entry for user %s"
msgstr "konnte Passwort nicht ermitteln für Benutzer %s"
msgstr "Passworteintrag für Benutzer %s konnte nicht ermittelt werden"
#: ../../WINGs/host.c:114
msgid "Cannot get current host name"
msgstr "Kann aktuellen Hostnamen nicht ermitteln"
msgstr "Aktueller Hostname kann nicht ermittelt werden"
#: ../../WINGs/proplist.c:91
#, c-format
msgid "syntax error in %s %s, line %i: %s"
msgstr "Syntaxfehler in %s %s, Zeile %i: %s"
#: ../../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"
"Nur Zeichenketten oder Binärdaten werden 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
#: ../../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 ""
msgstr "PropList-Funktionen werden auf nicht-WMPropList-Objekte angewendet"
#: ../../WINGs/proplist.c:630
msgid "unterminated PropList string"
msgstr "nicht terminierter PropList string"
msgstr "nicht terminierte PropList-Zeichenkette"
#: ../../WINGs/proplist.c:670
msgid "unterminated PropList data"
msgstr "nicht terminiertes PropList data"
msgstr "nicht terminierte PropList-Binärdaten"
#: ../../WINGs/proplist.c:678
msgid "unterminated PropList data (missing hexdigit)"
msgstr "nicht terminiertes PropList data (fehlendes hex-Zeichen)"
msgstr "nicht terminierte PropList-Binärdaten (fehlendes Hex-Zeichen)"
#: ../../WINGs/proplist.c:690
#: ../../WINGs/proplist.c:690 ../../WINGs/proplist.c:695
msgid "non hexdigit character in PropList data"
msgstr "falsches hex-Zeichen in PropList data"
msgstr "falsches Hex-Zeichen in PropList-Binärdaten"
#: ../../WINGs/proplist.c:725
#: ../../WINGs/proplist.c:729
msgid "unterminated PropList array"
msgstr "nicht terminiertes PropList array"
msgstr "nicht terminiertes PropList-Array"
#: ../../WINGs/proplist.c:733
#: ../../WINGs/proplist.c:737
msgid "missing or unterminated PropList array"
msgstr "fehlendes oder nicht terminiertes PropList array"
msgstr "fehlendes oder nicht terminiertes PropList-Array"
#: ../../WINGs/proplist.c:743
#: ../../WINGs/proplist.c:747
msgid "could not get PropList array element"
msgstr ""
msgstr "PropList-Array-Element konnte nicht gelesen werden"
#: ../../WINGs/proplist.c:772
#: ../../WINGs/proplist.c:776
msgid "unterminated PropList dictionary"
msgstr ""
msgstr "nicht terminiertes PropList-Dictionary"
#: ../../WINGs/proplist.c:789
#: ../../WINGs/proplist.c:793
msgid "missing PropList dictionary key"
msgstr ""
msgstr "fehlender Schlüssel in PropList-Dictionary"
#: ../../WINGs/proplist.c:791
#: ../../WINGs/proplist.c:795
msgid "missing PropList dictionary entry key or unterminated dictionary"
msgstr ""
msgstr "fehlender Schlüssel in PropList-Dictionary oder fehlende Terminierung"
#: ../../WINGs/proplist.c:799
#: ../../WINGs/proplist.c:803
msgid "error parsing PropList dictionary key"
msgstr ""
msgstr "Fehler beim Parsen eines PropList-Dictionary-Schlüssels"
#: ../../WINGs/proplist.c:807
#: ../../WINGs/proplist.c:811
msgid "missing = in PropList dictionary entry"
msgstr ""
msgstr "fehlendes \"=\" in PropList-Dictionary-Schlüssel"
#: ../../WINGs/proplist.c:815
#: ../../WINGs/proplist.c:819
msgid "error parsing PropList dictionary entry value"
msgstr ""
msgstr "Fehler beim Parsen eines PropList-Dictionary-Wertes"
#: ../../WINGs/proplist.c:823
#: ../../WINGs/proplist.c:827
msgid "missing ; in PropList dictionary entry"
msgstr ""
msgstr "fehlendes \";\" in PropList-Dictionary-Eintrag"
#: ../../WINGs/proplist.c:884
#: ../../WINGs/proplist.c:888
msgid ""
"was expecting a string, data, array or dictionary. If it's a string, try "
"enclosing it with \"."
msgstr ""
"string, data, array oder dictionary wurde erwartet. Zeichenketten mit \" "
"Zeichenkette, Binärdaten, Array oder Dictionary erwartet. Zeichenketten ggf. mit \" "
"einklammern."
#: ../../WINGs/proplist.c:888
#: ../../WINGs/proplist.c:892
msgid "Comments are not allowed inside WindowMaker owned domain files."
msgstr "Kommentare sind in Domaindaten von WindowMaker nicht erlaubt."
msgstr "Kommentare sind in Domänendaten von WindowMaker nicht erlaubt."
#: ../../WINGs/proplist.c:1559 ../../WINGs/proplist.c:1624
#: ../../WINGs/proplist.c:1563 ../../WINGs/proplist.c:1630
msgid "extra data after end of property list"
msgstr "zusätzliche Daten hinter dem Ende der Propertyliste"
msgstr "zusätzliche Daten hinter dem Ende der Propertyliste"
#: ../../WINGs/proplist.c:1602
#: ../../WINGs/proplist.c:1606
#, c-format
msgid "could not get size for file '%s'"
msgstr "konnte Dateigrösse von '%s' nicht ermitteln"
msgstr "Dateigröße von '%s' konnte nicht ermittelt werden"
#: ../../WINGs/proplist.c:1614
#: ../../WINGs/proplist.c:1619
#, c-format
msgid "error reading from file '%s'"
msgstr "Fehler beim Lesen der Datei '%s'"
#: ../../WINGs/proplist.c:1665
#: ../../WINGs/proplist.c:1671
#, c-format
msgid "mkstemp (%s) failed"
msgstr "mkstemp (%s) schlug fehl"
msgstr "mkstemp (%s) fehlgeschlagen"
#: ../../WINGs/proplist.c:1676
#: ../../WINGs/proplist.c:1682
#, c-format
msgid "mktemp (%s) failed"
msgstr "mktemp (%s) schlug fehl"
msgstr "mktemp (%s) fehlgeschlagen"
#: ../../WINGs/proplist.c:1687
#: ../../WINGs/proplist.c:1693
#, c-format
msgid "open (%s) failed"
msgstr "open (%s) schlug fehl"
msgstr "open (%s) fehlgeschlagen"
#: ../../WINGs/proplist.c:1694
#: ../../WINGs/proplist.c:1700
#, c-format
msgid "writing to file: %s failed"
msgstr "Schreiben in Datei: %s schlug fehl"
msgstr "Schreiben in Datei: %s fehlgeschlagen"
#: ../../WINGs/proplist.c:1702
#: ../../WINGs/proplist.c:1708
#, c-format
msgid "fclose (%s) failed"
msgstr "fclose (%s) schlug fehl"
msgstr "fclose (%s) fehlgeschlagen"
#: ../../WINGs/proplist.c:1711
#: ../../WINGs/proplist.c:1717
#, c-format
msgid "rename ('%s' to '%s') failed"
msgstr "rename ('%s' to '%s') schlug fehl"
msgstr "rename ('%s' nach '%s') fehlgeschlagen"
#. something happened with the file. just overwrite it
#: ../../WINGs/userdefaults.c:192 ../../WINGs/userdefaults.c:208
#: ../../WINGs/userdefaults.c:188 ../../WINGs/userdefaults.c:204
#, c-format
msgid "cannot read domain from file '%s' when syncing"
msgstr "Kannn bei der Synchronisation nicht aus Datei '%s' lesen"
msgstr "Bei der Synchronisation konnte nicht aus der Datei '%s' gelesen werden"
#: ../../WINGs/wcolor.c:198 ../../WINGs/wcolor.c:211 ../../WINGs/wcolor.c:250
#: ../../WINGs/wcolor.c:291
#: ../../WINGs/wcolor.c:237 ../../WINGs/wcolor.c:249 ../../WINGs/wcolor.c:288
#: ../../WINGs/wcolor.c:329
#, c-format
msgid "could not allocate %s color"
msgstr "konnte die Farbe %s nicht erzeugen"
msgstr "Farbe %s konnte nicht erzeugt werden"
#: ../../WINGs/wcolor.c:198
#: ../../WINGs/wcolor.c:237
msgid "white"
msgstr "weiß"
msgstr "Weiß"
#: ../../WINGs/wcolor.c:211
#: ../../WINGs/wcolor.c:249
msgid "black"
msgstr "schwarz"
msgstr "Schwarz"
#: ../../WINGs/wcolor.c:250
#: ../../WINGs/wcolor.c:288
msgid "gray"
msgstr "grau"
msgstr "Grau"
#: ../../WINGs/wcolor.c:291
#: ../../WINGs/wcolor.c:329
msgid "dark gray"
msgstr "dunkelgrau"
msgstr "Dunkelgrau"
#: ../../WINGs/wcolorpanel.c:415
#: ../../WINGs/wcolorpanel.c:420
msgid "Colors"
msgstr "Farben"
#: ../../WINGs/wcolorpanel.c:605 ../../WINGs/wcolorpanel.c:2824
#: ../../WINGs/wcolorpanel.c:610 ../../WINGs/wcolorpanel.c:2829
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
#: ../../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 "Color Panel: Konnte keinen Speicher reservieren"
msgstr "Farb-Panel: Speicher konnte nicht reserviert werden"
#: ../../WINGs/wcolorpanel.c:680 ../../WINGs/wcolorpanel.c:681
#: ../../WINGs/wcolorpanel.c:685 ../../WINGs/wcolorpanel.c:686
msgid "Red"
msgstr "Rot"
#: ../../WINGs/wcolorpanel.c:713 ../../WINGs/wcolorpanel.c:714
#: ../../WINGs/wcolorpanel.c:718 ../../WINGs/wcolorpanel.c:719
msgid "Green"
msgstr "Grün"
msgstr "Grün"
#: ../../WINGs/wcolorpanel.c:747 ../../WINGs/wcolorpanel.c:748
#: ../../WINGs/wcolorpanel.c:752 ../../WINGs/wcolorpanel.c:753
msgid "Blue"
msgstr "Blau"
#: ../../WINGs/wcolorpanel.c:807 ../../WINGs/wcolorpanel.c:808
#: ../../WINGs/wcolorpanel.c:812 ../../WINGs/wcolorpanel.c:813
msgid "Cyan"
msgstr ""
#: ../../WINGs/wcolorpanel.c:841 ../../WINGs/wcolorpanel.c:842
#: ../../WINGs/wcolorpanel.c:846 ../../WINGs/wcolorpanel.c:847
msgid "Magenta"
msgstr ""
#: ../../WINGs/wcolorpanel.c:875 ../../WINGs/wcolorpanel.c:876
#: ../../WINGs/wcolorpanel.c:880 ../../WINGs/wcolorpanel.c:881
msgid "Yellow"
msgstr "Gelb"
#: ../../WINGs/wcolorpanel.c:910 ../../WINGs/wcolorpanel.c:911
#: ../../WINGs/wcolorpanel.c:915 ../../WINGs/wcolorpanel.c:916
msgid "Black"
msgstr "Schwarz"
#: ../../WINGs/wcolorpanel.c:991
#: ../../WINGs/wcolorpanel.c:996
msgid "Spectrum"
msgstr "Spektrum"
#: ../../WINGs/wcolorpanel.c:1021
#: ../../WINGs/wcolorpanel.c:1026
msgid "Palette"
msgstr ""
#: ../../WINGs/wcolorpanel.c:1027
#: ../../WINGs/wcolorpanel.c:1032
msgid "New from File..."
msgstr "Neu aus Datei..."
#: ../../WINGs/wcolorpanel.c:1028 ../../WINGs/wcolorpanel.c:1076
#: ../../WINGs/wcolorpanel.c:1093
#: ../../WINGs/wcolorpanel.c:1033 ../../WINGs/wcolorpanel.c:1081
#: ../../WINGs/wcolorpanel.c:1098
msgid "Rename..."
msgstr "Umbenennen..."
#: ../../WINGs/wcolorpanel.c:1029 ../../WINGs/wcolorpanel.c:1077
#: ../../WINGs/wcolorpanel.c:1094 ../../WINGs/wcolorpanel.c:3321
#: ../../WINGs/wcolorpanel.c:1034 ../../WINGs/wcolorpanel.c:1082
#: ../../WINGs/wcolorpanel.c:1099 ../../WINGs/wcolorpanel.c:3326
msgid "Remove"
msgstr "Entfernen"
#: ../../WINGs/wcolorpanel.c:1030
#: ../../WINGs/wcolorpanel.c:1035
msgid "Copy"
msgstr "Kopieren"
#: ../../WINGs/wcolorpanel.c:1031
#: ../../WINGs/wcolorpanel.c:1036
msgid "New from Clipboard"
msgstr "Neu aus Zwischenablage"
#: ../../WINGs/wcolorpanel.c:1052
#: ../../WINGs/wcolorpanel.c:1057
msgid "X11-Colors"
msgstr "X11-Farben"
#: ../../WINGs/wcolorpanel.c:1069
#: ../../WINGs/wcolorpanel.c:1074
msgid "Color"
msgstr "Farbe"
#: ../../WINGs/wcolorpanel.c:1075
#: ../../WINGs/wcolorpanel.c:1080
msgid "Add..."
msgstr "Hinzufügen..."
msgstr "Hinzufügen..."
#: ../../WINGs/wcolorpanel.c:1085
#: ../../WINGs/wcolorpanel.c:1090
msgid "List"
msgstr "Liste"
#: ../../WINGs/wcolorpanel.c:1092
#: ../../WINGs/wcolorpanel.c:1097
msgid "New..."
msgstr "Neu..."
#: ../../WINGs/wcolorpanel.c:1231
#: ../../WINGs/wcolorpanel.c:1236
#, 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"
msgid "Color Panel: Could not create directory %s needed to store configurations"
msgstr "Farb-Panel: Verzeichnis %s konnte zum Speichern der Konfiguration nicht erzeugt werden"
#. Delete the file, it doesn't belong here
#: ../../WINGs/wcolorpanel.c:1237 ../../WINGs/wcolorpanel.c:3207
#: ../../WINGs/wcolorpanel.c:3211
#: ../../WINGs/wcolorpanel.c:1242 ../../WINGs/wcolorpanel.c:3212
#: ../../WINGs/wcolorpanel.c:3216
msgid "File Error"
msgstr "Dateifehler"
#: ../../WINGs/wcolorpanel.c:1238
#: ../../WINGs/wcolorpanel.c:1243
msgid "Could not create ColorPanel configuration directory"
msgstr "Konnte Konfigurationsverzeichnis für Farbdialog nicht erzeugen"
msgstr "Konfigurationsverzeichnis für Farb-Panel konnte nicht erzeugt werden"
#: ../../WINGs/wcolorpanel.c:1239 ../../WINGs/wcolorpanel.c:3208
#: ../../WINGs/wcolorpanel.c:3213 ../../WINGs/wcolorpanel.c:3240
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:647
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wfilepanel.c:971 ../../WINGs/wfontpanel.c:709
#: ../../WINGs/wcolorpanel.c:1244 ../../WINGs/wcolorpanel.c:3213
#: ../../WINGs/wcolorpanel.c:3218 ../../WINGs/wcolorpanel.c:3245
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:650
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
#: ../../WINGs/wfilepanel.c:974 ../../WINGs/wfontpanel.c:591
msgid "OK"
msgstr "OK"
msgstr ""
#: ../../WINGs/wcolorpanel.c:1245 ../../WINGs/wcolorpanel.c:1281
#: ../../WINGs/wcolorpanel.c:1299
#: ../../WINGs/wcolorpanel.c:1250 ../../WINGs/wcolorpanel.c:1286
#: ../../WINGs/wcolorpanel.c:1304
msgid "Color Panel: Could not find file"
msgstr "Color Panel: Konnte Datei nicht finden"
msgstr "Farb-Panel: Datei konnte nicht gefunden werden"
#: ../../WINGs/wcolorpanel.c:1486 ../../WINGs/wcolorpanel.c:1551
#: ../../WINGs/wcolorpanel.c:1615
#: ../../WINGs/wcolorpanel.c:1491 ../../WINGs/wcolorpanel.c:1556
#: ../../WINGs/wcolorpanel.c:1620
msgid "Color Panel: X failed request"
msgstr "Color Panel: X Anfrage schlug fehl"
msgstr "Farb-Panel: X-Anfrage fehlgeschlagen"
#: ../../WINGs/wcolorpanel.c:2860
#: ../../WINGs/wcolorpanel.c:2865
msgid "Saturation"
msgstr "Sättigung"
msgstr "Sättigung"
#: ../../WINGs/wcolorpanel.c:2896
#: ../../WINGs/wcolorpanel.c:2901
msgid "Hue"
msgstr "Farbton"
#: ../../WINGs/wcolorpanel.c:3146
#: ../../WINGs/wcolorpanel.c:3151
msgid "Open Palette"
msgstr "Palette öffnen"
msgstr "Palette öffnen"
#: ../../WINGs/wcolorpanel.c:3208
#: ../../WINGs/wcolorpanel.c:3213
msgid "Invalid file format !"
msgstr "Ungültiges Dateiformat!"
msgstr "Ungültiges Dateiformat!"
#: ../../WINGs/wcolorpanel.c:3210
#: ../../WINGs/wcolorpanel.c:3215
#, c-format
msgid "can't remove file %s"
msgstr "kann Datei %s nicht entfernen"
msgstr "Datei %s konnte nicht entfert werden"
#: ../../WINGs/wcolorpanel.c:3212
#: ../../WINGs/wcolorpanel.c:3217
msgid "Couldn't remove file from Configuration Directory !"
msgstr "Konnte Datei nicht aus Konfigurationsverzeichnis entfernen!"
msgstr "Datei konnte nicht aus Konfigurationsverzeichnis entfernt werden!"
#: ../../WINGs/wcolorpanel.c:3239
#: ../../WINGs/wcolorpanel.c:3244
msgid "Rename"
msgstr "Umbenennen"
#: ../../WINGs/wcolorpanel.c:3239
#: ../../WINGs/wcolorpanel.c:3244
msgid "Rename palette to:"
msgstr "Palette umbenennen in:"
#: ../../WINGs/wcolorpanel.c:3240 ../../WINGs/wfilepanel.c:259
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wcolorpanel.c:3245 ../../WINGs/wfilepanel.c:259
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
msgid "Cancel"
msgstr "Abbrechen"
#. Careful, this palette exists already
#: ../../WINGs/wcolorpanel.c:3256 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wcolorpanel.c:3261 ../../WINGs/wfilepanel.c:763
msgid "Warning"
msgstr "Warnung"
#: ../../WINGs/wcolorpanel.c:3257
#: ../../WINGs/wcolorpanel.c:3262
msgid ""
"Palette already exists !\n"
"\n"
@@ -392,26 +399,26 @@ msgid ""
msgstr ""
"Palette existiert bereits!\n"
"\n"
"Überschreiben?"
"Überschreiben?"
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
msgid "No"
msgstr "Nein"
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
msgid "Yes"
msgstr "Ja"
#: ../../WINGs/wcolorpanel.c:3289
#: ../../WINGs/wcolorpanel.c:3294
#, c-format
msgid "Couldn't rename palette %s to %s\n"
msgstr "Konnte Palette %s nicht in %s umbenennen\n"
msgstr "Palette %s konnte nicht nach %s umbenannt werden\n"
#: ../../WINGs/wcolorpanel.c:3315
#: ../../WINGs/wcolorpanel.c:3320
msgid "This will permanently remove the palette "
msgstr "Das wird die Palette unwiderruflich löschen "
msgstr "Hiermit wird die Palette unwiderruflich gelöscht "
#: ../../WINGs/wcolorpanel.c:3318
#: ../../WINGs/wcolorpanel.c:3323
msgid ""
".\n"
"\n"
@@ -419,31 +426,31 @@ msgid ""
msgstr ""
".\n"
"\n"
"Sind Sie sicher, dass Sie die Palette löschen wollen?"
"Sind Sie sicher, dass Sie die Palette löschen wollen?"
#: ../../WINGs/wcolorpanel.c:3343
#: ../../WINGs/wcolorpanel.c:3348
#, c-format
msgid "Couldn't remove palette %s\n"
msgstr "Konnte Palette %s nicht löschen\n"
msgstr "Palette %s konnte nicht gelöscht werden\n"
#: ../../WINGs/wcolorpanel.c:3648
#: ../../WINGs/wcolorpanel.c:3647
#, c-format
msgid "Could not open %s"
msgstr "Konnte %s nicht öffnen"
msgstr "%s konnte nicht geöffnet werden"
#: ../../WINGs/wcolorpanel.c:3655
#: ../../WINGs/wcolorpanel.c:3654
#, c-format
msgid "Could not create %s"
msgstr "Konnte %s nicht erzeugen"
msgstr "%s konnte nicht erzeugt werden"
#: ../../WINGs/wcolorpanel.c:3666
#: ../../WINGs/wcolorpanel.c:3665
#, c-format
msgid "Write error on file %s"
msgstr "Schreibfehler bei Datei %s"
#: ../../WINGs/wcolorpanel.c:3711
#: ../../WINGs/wcolorpanel.c:3710
msgid "Color Panel: Color unspecified"
msgstr "Color Panel: Farbe nicht spezifiziert"
msgstr "Farb-Panel: Farbe nicht spezifiziert"
#: ../../WINGs/wfilepanel.c:235
msgid "Name:"
@@ -451,214 +458,170 @@ msgstr "Name:"
#: ../../WINGs/wfilepanel.c:332 ../../WINGs/wfilepanel.c:396
msgid "Open"
msgstr "Öffnen"
msgstr "Öffnen"
#: ../../WINGs/wfilepanel.c:350 ../../WINGs/wfilepanel.c:402
msgid "Save"
msgstr "Speichern"
#: ../../WINGs/wfilepanel.c:562
#: ../../WINGs/wfilepanel.c:565
#, c-format
msgid "WINGs: could not open directory %s\n"
msgstr "WINGs: Konnte Verzeichnis %s nicht öffen\n"
msgstr "WINGs: Verzeichnis %s konnte nicht geöffnet werden\n"
#: ../../WINGs/wfilepanel.c:580
#: ../../WINGs/wfilepanel.c:583
#, c-format
msgid "WINGs: could not stat %s\n"
msgstr "WINGs: Dateistatus von %s nicht bestimmbar\n"
msgstr "WINGs: Dateistatus von %s unbestimmbar\n"
#: ../../WINGs/wfilepanel.c:647 ../../WINGs/wfilepanel.c:970
#: ../../WINGs/wfontpanel.c:708
#: ../../WINGs/wfilepanel.c:650 ../../WINGs/wfilepanel.c:973
#: ../../WINGs/wfontpanel.c:590
msgid "Error"
msgstr "Fehler"
#: ../../WINGs/wfilepanel.c:658
#: ../../WINGs/wfilepanel.c:661
msgid "Create Directory"
msgstr "Verzeichnis anlegen"
#: ../../WINGs/wfilepanel.c:659
#: ../../WINGs/wfilepanel.c:662
msgid "Enter directory name"
msgstr "Verzeichnisname eingeben"
#: ../../WINGs/wfilepanel.c:695 ../../WINGs/wfilepanel.c:734
#: ../../WINGs/wfilepanel.c:765 ../../WINGs/wfilepanel.c:793
#: ../../WINGs/wfilepanel.c:698 ../../WINGs/wfilepanel.c:737
#: ../../WINGs/wfilepanel.c:768 ../../WINGs/wfilepanel.c:796
msgid "Permission denied."
msgstr "Zugriff verweigert."
#: ../../WINGs/wfilepanel.c:698
#: ../../WINGs/wfilepanel.c:701
#, c-format
msgid "'%s' already exists."
msgstr "'%s' existiert bereits."
#: ../../WINGs/wfilepanel.c:701
#: ../../WINGs/wfilepanel.c:704
msgid "Path does not exist."
msgstr "Pfad existiert nicht."
#: ../../WINGs/wfilepanel.c:731 ../../WINGs/wfilepanel.c:790
#: ../../WINGs/wfilepanel.c:734 ../../WINGs/wfilepanel.c:793
#, c-format
msgid "'%s' does not exist."
msgstr "'%s' existiert nicht."
#: ../../WINGs/wfilepanel.c:738 ../../WINGs/wfilepanel.c:797
#: ../../WINGs/wfilepanel.c:741 ../../WINGs/wfilepanel.c:800
msgid "Insufficient memory available."
msgstr "Nicht genügend Speicher verfügbar."
msgstr "Nicht genügend Speicher verfügbar."
#: ../../WINGs/wfilepanel.c:742 ../../WINGs/wfilepanel.c:801
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:804
#, c-format
msgid "'%s' is on a read-only filesystem."
msgstr "'%s' liegt auf einem read-only Dateisystem."
msgstr "'%s' liegt auf einem nur lesbaren Dateisystem."
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:777
#: ../../WINGs/wfilepanel.c:804
#: ../../WINGs/wfilepanel.c:748 ../../WINGs/wfilepanel.c:780
#: ../../WINGs/wfilepanel.c:807
#, c-format
msgid "Can not delete '%s'."
msgstr "Kann %s nicht löschen."
msgstr "Kann %s nicht löschen."
#: ../../WINGs/wfilepanel.c:752
#: ../../WINGs/wfilepanel.c:755
#, c-format
msgid "Delete directory %s ?"
msgstr "Verzeichnis % s löschen?"
msgstr "Verzeichnis %s löschen?"
#: ../../WINGs/wfilepanel.c:756
#: ../../WINGs/wfilepanel.c:759
#, c-format
msgid "Delete file %s ?"
msgstr "Datei %s löschen?"
msgstr "Datei %s löschen?"
#: ../../WINGs/wfilepanel.c:768
#: ../../WINGs/wfilepanel.c:771
#, c-format
msgid "Directory '%s' does not exist."
msgstr "Verzeichnis '%s' existiert nicht."
#: ../../WINGs/wfilepanel.c:771
#: ../../WINGs/wfilepanel.c:774
#, c-format
msgid "Directory '%s' is not empty."
msgstr "Verzeichnis '%s' ist nicht leer."
#: ../../WINGs/wfilepanel.c:774
#: ../../WINGs/wfilepanel.c:777
#, c-format
msgid "Directory '%s' is busy."
msgstr "Verzeichnis '%s' ist belegt."
msgstr "Verzeichnis '%s' wird benutz."
#: ../../WINGs/wfilepanel.c:787
#: ../../WINGs/wfilepanel.c:790
#, c-format
msgid "'%s' is a directory."
msgstr "'%s' ist ein Verzeichnis."
#: ../../WINGs/wfilepanel.c:829
#: ../../WINGs/wfilepanel.c:832
#, c-format
msgid "An error occured browsing '%s'."
msgstr "Fehler beim Lesen von '%s'."
#: ../../WINGs/wfilepanel.c:833
#: ../../WINGs/wfilepanel.c:836
#, c-format
msgid "'%s' is not a directory."
msgstr "'%s' ist kein Verzeichnis."
#: ../../WINGs/wfilepanel.c:970
#: ../../WINGs/wfilepanel.c:973
msgid "File does not exist."
msgstr "Datei existiert nicht."
#: ../../WINGs/wfont.c:129
#: ../../WINGs/wfont.c:40
#, c-format
msgid "the following character sets are missing in %s:"
msgstr "die folgenden Zeichensätze fehlen in %s:"
msgid "invalid font: %s. Trying '%s'"
msgstr "Ungültige Schriftart: %s. Wird ersetzt durch %s."
#: ../../WINGs/wfont.c:136
#: ../../WINGs/wfont.c:257 ../../WINGs/wfont.c:277
#, c-format
msgid ""
"the string \"%s\" will be used in place of any characters from those sets."
msgid "could not load font: %s."
msgstr "Schriftart konnte nicht geladen werden: %s"
#. WMSetWidgetBackgroundColor(panel->win, WMWhiteColor(scr));
#: ../../WINGs/wfontpanel.c:203
msgid "Font Panel"
msgstr "Schrift-Panel"
#: ../../WINGs/wfontpanel.c:239
msgid "The quick brown fox jumps over the lazy dog"
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 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 ist zu groß."
#: ../../WINGs/wfontpanel.c:205
msgid "Test!!!"
msgstr "Test!"
#: ../../WINGs/wfontpanel.c:211
#: ../../WINGs/wfontpanel.c:245
msgid "Family"
msgstr "Familie"
#: ../../WINGs/wfontpanel.c:222
#: ../../WINGs/wfontpanel.c:256
msgid "Typeface"
msgstr "Schriftart"
#: ../../WINGs/wfontpanel.c:233
#: ../../WINGs/wfontpanel.c:267
msgid "Size"
msgstr "Größe"
msgstr "Größe"
#: ../../WINGs/wfontpanel.c:252
#: ../../WINGs/wfontpanel.c:286
msgid "Set"
msgstr "Setzen"
#: ../../WINGs/wfontpanel.c:257
#: ../../WINGs/wfontpanel.c:292
msgid "Revert"
msgstr "Zurückn."
msgstr "Zurücksetzen"
#: ../../WINGs/wfontpanel.c:709
msgid "Could not retrieve font list"
msgstr "Konnte Fontliste nicht wiederherstellen"
#: ../../WINGs/wfontpanel.c:591
msgid "Could not init font config library\n"
msgstr "\"font-config\"-Bibliothek konnte nicht initialisiert werden\n"
#: ../../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
#: ../../WINGs/widgets.c:419
#, c-format
msgid "WINGs: could not load widget images file: %s"
msgstr "WINGs: Konnte Widget-Bildatei %s nicht laden."
msgstr "WINGs: Widget-Bilderdatei konnte nicht geladen werden: %s"
#: ../../WINGs/widgets.c:763
#: ../../WINGs/widgets.c:767
msgid ""
"could not load any fonts. Make sure your font installationand locale "
"could not load any fonts. Make sure your font installation and locale "
"settings are correct."
msgstr ""
"Konnte keine Fonts laden. Überprüfen Sie, ob Ihre Fontinstallation und "
"-einstellungen korrekt sind."
"Keine Schrifen konnten geladen werden. Überprüfen Sie, ob Ihre Schrifteninstallation und -"
"Lokalisierungseinstellungen korrekt sind."
#: ../../WINGs/wruler.c:189
#: ../../WINGs/wruler.c:192
msgid "0 inches"
msgstr "0 Inch"

View File

@@ -9,9 +9,9 @@ msgstr ""
"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"
"Language-Team: Français <fr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: unknown\n"
#: ../../WINGs/connection.c:467 ../../WINGs/connection.c:532
@@ -31,15 +31,15 @@ msgstr "Erreur %d"
#: ../../WINGs/error.c:110
msgid " warning: "
msgstr " Avertissement : "
msgstr " Avertissement : "
#: ../../WINGs/error.c:137
msgid " fatal error: "
msgstr " erreur fatale : "
msgstr " erreur fatale : "
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
msgid " error: "
msgstr " erreur : "
msgstr " erreur : "
#: ../../WINGs/findfile.c:48
#, c-format
@@ -49,22 +49,22 @@ 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 %i"
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"
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"
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 "
"Seuls les types string ou data sont supportés pour une clé de dictionnaire "
"Proplist"
#: ../../WINGs/proplist.c:184 ../../WINGs/proplist.c:236
@@ -73,23 +73,23 @@ msgstr ""
#: ../../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"
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"
msgstr "chaîne PropList sans fin"
#: ../../WINGs/proplist.c:670
msgid "unterminated PropList data"
msgstr "données PropList sans fin"
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)"
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"
msgstr "caractère non-hexadécimal dans les données PropList"
#: ../../WINGs/proplist.c:729
msgid "unterminated PropList array"
@@ -101,7 +101,7 @@ 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"
msgstr "impossible de lire l'élément du tableau PropList"
#: ../../WINGs/proplist.c:776
msgid "unterminated PropList dictionary"
@@ -121,39 +121,39 @@ 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"
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"
"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"
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 à '\"'."
"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 "
"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"
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'"
msgstr "impossible de déterminer la taille du fichier '%s'"
#: ../../WINGs/proplist.c:1618
#, c-format
@@ -163,22 +163,22 @@ msgstr "erreur pendant la lecture du fichier '%s'"
#: ../../WINGs/proplist.c:1669
#, c-format
msgid "mkstemp (%s) failed"
msgstr "mkstemp (%s) a échoué"
msgstr "mkstemp (%s) a échoué"
#: ../../WINGs/proplist.c:1680
#, c-format
msgid "mktemp (%s) failed"
msgstr "mktemp (%s) a échoué"
msgstr "mktemp (%s) a échoué"
#: ../../WINGs/proplist.c:1691
#, c-format
msgid "open (%s) failed"
msgstr "open (%s) a échoué"
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'"
msgstr "erreur pendant l'écriture dans le fichier '%s'"
#: ../../WINGs/proplist.c:1706
#, c-format
@@ -226,7 +226,7 @@ msgstr "Couleurs"
#: ../../WINGs/wcolorpanel.c:610 ../../WINGs/wcolorpanel.c:2829
msgid "Brightness"
msgstr "Luminosité"
msgstr "Luminosité"
#: ../../WINGs/wcolorpanel.c:612 ../../WINGs/wcolorpanel.c:688
#: ../../WINGs/wcolorpanel.c:721 ../../WINGs/wcolorpanel.c:755
@@ -236,7 +236,7 @@ msgstr "Luminosit
#: ../../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"
msgstr "Panneau de Sélection des Couleur: impossible d'allouer la mémoire"
#: ../../WINGs/wcolorpanel.c:685 ../../WINGs/wcolorpanel.c:686
msgid "Red"
@@ -276,7 +276,7 @@ msgstr "Palette"
#: ../../WINGs/wcolorpanel.c:1032
msgid "New from File..."
msgstr "Nouveau d'après le fichier..."
msgstr "Nouveau d'après le fichier..."
#: ../../WINGs/wcolorpanel.c:1033 ../../WINGs/wcolorpanel.c:1081
#: ../../WINGs/wcolorpanel.c:1098
@@ -294,7 +294,7 @@ msgstr "Copier"
#: ../../WINGs/wcolorpanel.c:1036
msgid "New from Clipboard"
msgstr "Nouveau d'après le presse-papier"
msgstr "Nouveau d'après le presse-papier"
#: ../../WINGs/wcolorpanel.c:1057
msgid "X11-Colors"
@@ -321,7 +321,7 @@ msgstr "Nouveau..."
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 "
"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
@@ -333,8 +333,8 @@ 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."
"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
@@ -347,12 +347,12 @@ 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."
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"
msgstr "Panneau de sélection des couleurs : échec d'une requête X"
#: ../../WINGs/wcolorpanel.c:2865
msgid "Saturation"
@@ -377,7 +377,7 @@ 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 !"
msgstr "Impossible de supprimer le fichier du répertoire de configuration !"
#: ../../WINGs/wcolorpanel.c:3244
msgid "Rename"
@@ -403,9 +403,9 @@ msgid ""
"\n"
"Overwrite ?"
msgstr ""
"La palette existe déjà !\n"
"La palette existe déjà !\n"
"\n"
"Écraser ?"
"Écraser ?"
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
msgid "No"
@@ -422,7 +422,7 @@ 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 "
msgstr "Ceci détruira définitivement la palette "
#: ../../WINGs/wcolorpanel.c:3323
msgid ""
@@ -432,12 +432,12 @@ msgid ""
msgstr ""
".\n"
"\n"
"Êtes-vous sûr de vouloir supprimer cette palette ?"
"Ê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"
msgstr "Impossible de détruire la palette %s.\n"
#: ../../WINGs/wcolorpanel.c:3647
#, c-format
@@ -447,16 +447,16 @@ msgstr "Impossible d'ouvrir %s."
#: ../../WINGs/wcolorpanel.c:3654
#, c-format
msgid "Could not create %s"
msgstr "Impossible de créer %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."
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."
msgstr "Panneau de sélection des couleurs: couleur non spécifiée."
#: ../../WINGs/wfilepanel.c:235
msgid "Name:"
@@ -473,12 +473,12 @@ 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"
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"
msgstr "WINGs : impossible de lire l'état du fichier %s.\n"
#: ../../WINGs/wfilepanel.c:650 ../../WINGs/wfilepanel.c:973
#: ../../WINGs/wfontpanel.c:750
@@ -487,21 +487,21 @@ msgstr "Erreur"
#: ../../WINGs/wfilepanel.c:661
msgid "Create Directory"
msgstr "Créer un répertoire"
msgstr "Créer un répertoire"
#: ../../WINGs/wfilepanel.c:662
msgid "Enter directory name"
msgstr "Saisissez le nom du répertoire"
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."
msgstr "Permission refusée."
#: ../../WINGs/wfilepanel.c:701
#, c-format
msgid "'%s' already exists."
msgstr "'%s' existe déjà."
msgstr "'%s' existe déjà."
#: ../../WINGs/wfilepanel.c:704
msgid "Path does not exist."
@@ -514,12 +514,12 @@ msgstr "'%s' n'existe pas."
#: ../../WINGs/wfilepanel.c:741 ../../WINGs/wfilepanel.c:800
msgid "Insufficient memory available."
msgstr "Mémoire disponible insuffisante."
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."
msgstr "'%s' est sur un système de fichiers en lecture seule."
#: ../../WINGs/wfilepanel.c:748 ../../WINGs/wfilepanel.c:780
#: ../../WINGs/wfilepanel.c:807
@@ -530,7 +530,7 @@ msgstr "Impossible de supprimer '%s'."
#: ../../WINGs/wfilepanel.c:755
#, c-format
msgid "Delete directory %s ?"
msgstr "Supprimer le répertoire %s ?"
msgstr "Supprimer le répertoire %s ?"
#: ../../WINGs/wfilepanel.c:759
#, c-format
@@ -540,22 +540,22 @@ 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."
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."
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é."
msgstr "Le répertoire '%s' est occupé."
#: ../../WINGs/wfilepanel.c:790
#, c-format
msgid "'%s' is a directory."
msgstr "'%s' est un répertoire."
msgstr "'%s' est un répertoire."
#: ../../WINGs/wfilepanel.c:832
#, c-format
@@ -565,7 +565,7 @@ 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."
msgstr "'%s' n'est pas un répertoire."
#: ../../WINGs/wfilepanel.c:973
msgid "File does not exist."
@@ -575,63 +575,63 @@ msgstr "Le fichier n'existe pas."
#, 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"
"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 :"
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."
"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 »."
"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."
"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 »."
 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."
"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 »."
"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 »."
 fixed »."
#: ../../WINGs/wfont.c:639
msgid "could not load fixed font!"
msgstr "Impossible de charger la police de caractères « fixed » !"
msgstr "Impossible de charger la police de caractères « fixed » !"
#: ../../WINGs/wfont.c:704 ../../WINGs/wfont.c:765 ../../WINGs/wfont.c:836
#, c-format
@@ -639,19 +639,19 @@ 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"
"É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."
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"
msgstr "Déclaration de police invalide : « %s »\n"
#: ../../WINGs/wfontpanel.c:235
msgid "Test!!!"
@@ -663,7 +663,7 @@ msgstr "Famille"
#: ../../WINGs/wfontpanel.c:252
msgid "Typeface"
msgstr "Caractère"
msgstr "Caractère"
#: ../../WINGs/wfontpanel.c:263
msgid "Size"
@@ -679,13 +679,13 @@ msgstr "Revenir"
#: ../../WINGs/wfontpanel.c:751
msgid "Could not retrieve font list"
msgstr "Impossible de lire la liste des polices de caractères."
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."
"Le nom de police %s a plus de 256 caractères et est par conséquent invalide."
#: ../../WINGs/wfontpanel.c:913
msgid "Roman"
@@ -697,7 +697,7 @@ msgstr "Italique"
#: ../../WINGs/wfontpanel.c:918
msgid "Oblique"
msgstr "Penché"
msgstr "Penché"
#: ../../WINGs/wfontpanel.c:920
msgid "Rev Italic"
@@ -705,7 +705,7 @@ msgstr "Italique inverse"
#: ../../WINGs/wfontpanel.c:922
msgid "Rev Oblique"
msgstr "Penché inverse"
msgstr "Penché inverse"
#: ../../WINGs/wfontpanel.c:928
msgid "Normal"
@@ -722,8 +722,8 @@ msgid ""
"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 "
"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
@@ -731,8 +731,8 @@ 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."
"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"

View File

@@ -5,32 +5,33 @@
# Currently maintained by Jan "judas" Tomka <judas@linux.sk>
#
# Version history:
# WM-ver author email date
# 0.65.1 Jan "judas" Tomka <judas@linux.sk> Aug 08 2001
# 0.70.0 Jan "judas" Tomka <judas@linux.sk> Oct 15 2001
# 0.70.1 Jan "judas" Tomka <judas@linux.sk> Nov 02 2001
# 0.80.0 Jan "judas" Tomka <judas@linux.sk> Dec 20 2001
# WM-ver author email date
# 0.65.1 Jan "judas" Tomka <judas@linux.sk> Aug 08 2001
# 0.70.0 Jan "judas" Tomka <judas@linux.sk> Oct 15 2001
# 0.70.1 Jan "judas" Tomka <judas@linux.sk> Nov 02 2001
# 0.80.0 Jan "judas" Tomka <judas@linux.sk> Dec 20 2001
# 0.80.2 Jan "judas" Tomka <judas@linux.sk> Jan 31 2004
#
msgid ""
msgstr ""
"Project-Id-Version: WINGs 0.80.0\n"
"POT-Creation-Date: 2001-12-20 03:50+0100\n"
"POT-Creation-Date: 2004-01-31 18:36+0100\n"
"PO-Revision-Date: 2001-12-20 04:00+0100\n"
"Last-Translator: Jan \"judas\" Tomka <judas@linux.sk>\n"
"Language-Team: Slovak <sk@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../WINGs/connection.c:461 ../../WINGs/connection.c:526
#: ../../WINGs/connection.c:569
#: ../../WINGs/connection.c:467 ../../WINGs/connection.c:532
#: ../../WINGs/connection.c:575
msgid "Bad address-service-protocol combination"
msgstr "Nesprávna kombinácia adresa-slu¾ba-protokol"
msgstr "Nesprávna kombinácia adresa-služba-protokol"
#: ../../WINGs/error.c:54
#, c-format
msgid "Unknown error %d"
msgstr "Nezmána chyba %d"
msgstr "Nezmána chyba %d"
#: ../../WINGs/error.c:59
#, c-format
@@ -43,7 +44,7 @@ msgstr " varovanie: "
#: ../../WINGs/error.c:137
msgid " fatal error: "
msgstr " fatálna chyba: "
msgstr " fatálna chyba: "
#: ../../WINGs/error.c:163 ../../WINGs/error.c:192
msgid " error: "
@@ -52,371 +53,376 @@ msgstr " chyba: "
#: ../../WINGs/findfile.c:48
#, c-format
msgid "could not get password entry for UID %i"
msgstr "nemo¾no zisti» informácie o UID %i"
msgstr "nemožno zistiť informácie o UID %i"
#: ../../WINGs/findfile.c:66
#, c-format
msgid "could not get password entry for user %s"
msgstr "nemo¾no zisti» informácie o u¾ívateµovi %s"
msgstr "nemožno zistiť informácie o užívateľovi %s"
#: ../../WINGs/host.c:114
msgid "Cannot get current host name"
msgstr "Nemo¾no zisti» aktuálne meno poèítaèa"
msgstr "Nemožno zistiť aktuálne meno počítača"
#: ../../WINGs/proplist.c:91
#, c-format
msgid "syntax error in %s %s, line %i: %s"
msgstr "chyba syntaxe v %s %s, riadok %i: %s"
#: ../../WINGs/proplist.c:150
msgid "Only string or data is supported for a proplist dictionary key"
msgstr "Pre kµúè slovníka proplist je podporovaný len re»azec alebo dáta"
msgstr "Pre kľúč slovníka proplist je podporovaný len reťazec alebo dáta"
#: ../../WINGs/proplist.c:184 ../../WINGs/proplist.c:236
#: ../../WINGs/proplist.c:394 ../../WINGs/proplist.c:474
#: ../../WINGs/proplist.c:1071 ../../WINGs/proplist.c:1123
#: ../../WINGs/proplist.c:1251 ../../WINGs/proplist.c:1330
#: ../../WINGs/proplist.c:1451 ../../WINGs/proplist.c:1498
#: ../../WINGs/proplist.c:1075 ../../WINGs/proplist.c:1127
#: ../../WINGs/proplist.c:1293 ../../WINGs/proplist.c:1372
#: ../../WINGs/proplist.c:1493 ../../WINGs/proplist.c:1540
msgid "Used proplist functions on non-WMPropLists objects"
msgstr "Pou¾itá proplist funkcia na iných ako WMPropLists objektoch"
msgstr "Použitá proplist funkcia na iných ako WMPropLists objektoch"
#: ../../WINGs/proplist.c:630
msgid "unterminated PropList string"
msgstr "neukonèený PropList re»azec"
msgstr "neukončený PropList reťazec"
#: ../../WINGs/proplist.c:670
msgid "unterminated PropList data"
msgstr "neukonèené PropList dáta"
msgstr "neukončené PropList dáta"
#: ../../WINGs/proplist.c:678
msgid "unterminated PropList data (missing hexdigit)"
msgstr "neukonèené PropList dáta (chýbajúca hex èíslica)"
msgstr "neukončené PropList dáta (chýbajúca hex číslica)"
#: ../../WINGs/proplist.c:690
#: ../../WINGs/proplist.c:690 ../../WINGs/proplist.c:695
msgid "non hexdigit character in PropList data"
msgstr "v PropList dátach je znak, ktorý nie je hex èíslicou"
msgstr "v PropList dátach je znak, ktorý nie je hex číslicou"
#: ../../WINGs/proplist.c:725
#: ../../WINGs/proplist.c:729
msgid "unterminated PropList array"
msgstr "neukonèené PropList pole"
msgstr "neukončené PropList pole"
#: ../../WINGs/proplist.c:733
#: ../../WINGs/proplist.c:737
msgid "missing or unterminated PropList array"
msgstr "chýbajúce alebo neukonèené PropList pole"
msgstr "chýbajúce alebo neukončené PropList pole"
#: ../../WINGs/proplist.c:743
#: ../../WINGs/proplist.c:747
msgid "could not get PropList array element"
msgstr "nemo¾no zisti» prvok PropList poµa"
msgstr "nemožno zistiť prvok PropList poľa"
#: ../../WINGs/proplist.c:772
#: ../../WINGs/proplist.c:776
msgid "unterminated PropList dictionary"
msgstr "neukonèený PropList slovník"
msgstr "neukončený PropList slovník"
#: ../../WINGs/proplist.c:789
#: ../../WINGs/proplist.c:793
msgid "missing PropList dictionary key"
msgstr "chýbajúci kµúè PropList slovníka"
msgstr "chýbajúci kľúč PropList slovníka"
#: ../../WINGs/proplist.c:791
#: ../../WINGs/proplist.c:795
msgid "missing PropList dictionary entry key or unterminated dictionary"
msgstr "chýbajúci kµúè polo¾ky PropList slovníka alebo neukonèený slovník"
msgstr "chýbajúci kľúč položky PropList slovníka alebo neukončený slovník"
#: ../../WINGs/proplist.c:799
#: ../../WINGs/proplist.c:803
msgid "error parsing PropList dictionary key"
msgstr "chyba pri parsovaní kµúèa PropList slovníka"
msgstr "chyba pri parsovaní kľúča PropList slovníka"
#: ../../WINGs/proplist.c:807
#: ../../WINGs/proplist.c:811
msgid "missing = in PropList dictionary entry"
msgstr "chýbajúce = v polo¾ke PropList slovníka"
msgstr "chýbajúce = v položke PropList slovníka"
#: ../../WINGs/proplist.c:815
#: ../../WINGs/proplist.c:819
msgid "error parsing PropList dictionary entry value"
msgstr "chyba pri parsovaní hodnoty polo¾ky PropList slovníka"
msgstr "chyba pri parsovaní hodnoty položky PropList slovníka"
#: ../../WINGs/proplist.c:823
#: ../../WINGs/proplist.c:827
msgid "missing ; in PropList dictionary entry"
msgstr "chýbajúca ; v polo¾ke PropList slovníka"
msgstr "chýbajúca ; v položke PropList slovníka"
#: ../../WINGs/proplist.c:884
#: ../../WINGs/proplist.c:888
msgid ""
"was expecting a string, data, array or dictionary. If it's a string, try "
"enclosing it with \"."
msgstr ""
"oèakávaný bol re»azec, dáta, pole alebo slovník. Ak je to re»azec, skúste ho "
"uzavrie» medzi \"."
"očakávaný bol reťazec, dáta, pole alebo slovník. Ak je to reťazec, skúste ho "
"uzavrieť medzi \"."
#: ../../WINGs/proplist.c:888
#: ../../WINGs/proplist.c:892
msgid "Comments are not allowed inside WindowMaker owned domain files."
msgstr "Komentáre v doménových súboroch Window Makera nie sú povolené."
msgstr "Komentáre v doménových súboroch Window Makera nie sú povolené."
#: ../../WINGs/proplist.c:1521 ../../WINGs/proplist.c:1586
#: ../../WINGs/proplist.c:1563 ../../WINGs/proplist.c:1630
msgid "extra data after end of property list"
msgstr "prebytoèné dáta na konci property listu"
msgstr "prebytočné dáta na konci property listu"
#: ../../WINGs/proplist.c:1564
#: ../../WINGs/proplist.c:1606
#, c-format
msgid "could not get size for file '%s'"
msgstr "nemo¾no zisti» veµkos» súboru '%s'"
msgstr "nemožno zistiť veľkosť súboru '%s'"
#: ../../WINGs/proplist.c:1576
#: ../../WINGs/proplist.c:1619
#, c-format
msgid "error reading from file '%s'"
msgstr "chyba pri èítaní zo súboru '%s'"
msgstr "chyba pri čítaní zo súboru '%s'"
#: ../../WINGs/proplist.c:1627
#: ../../WINGs/proplist.c:1671
#, c-format
msgid "mkstemp (%s) failed"
msgstr "chyba mkstemp (%s)"
#: ../../WINGs/proplist.c:1638
#: ../../WINGs/proplist.c:1682
#, c-format
msgid "mktemp (%s) failed"
msgstr "chyba mktemp(%s)"
#: ../../WINGs/proplist.c:1649
#: ../../WINGs/proplist.c:1693
#, c-format
msgid "open (%s) failed"
msgstr "chyba pri otváraní (%s)"
msgstr "chyba pri otváraní (%s)"
#: ../../WINGs/proplist.c:1656
#: ../../WINGs/proplist.c:1700
#, c-format
msgid "writing to file: %s failed"
msgstr "chyba pri zápise do súboru: %s"
msgstr "chyba pri zápise do súboru: %s"
#: ../../WINGs/proplist.c:1664
#: ../../WINGs/proplist.c:1708
#, c-format
msgid "fclose (%s) failed"
msgstr "chyba fclose (%s)"
#: ../../WINGs/proplist.c:1673
#: ../../WINGs/proplist.c:1717
#, c-format
msgid "rename ('%s' to '%s') failed"
msgstr "chyba rename ('%s' na '%s')"
#. something happened with the file. just overwrite it
#: ../../WINGs/userdefaults.c:192 ../../WINGs/userdefaults.c:208
#: ../../WINGs/userdefaults.c:188 ../../WINGs/userdefaults.c:204
#, c-format
msgid "cannot read domain from file '%s' when syncing"
msgstr "nemo¾no èíta» doménu zo súboru '%s' pri synchronizácii"
msgstr "nemožno čítať doménu zo súboru '%s' pri synchronizácii"
#: ../../WINGs/wcolor.c:198 ../../WINGs/wcolor.c:211 ../../WINGs/wcolor.c:250
#: ../../WINGs/wcolor.c:291
#: ../../WINGs/wcolor.c:224 ../../WINGs/wcolor.c:236 ../../WINGs/wcolor.c:275
#: ../../WINGs/wcolor.c:316
#, c-format
msgid "could not allocate %s color"
msgstr "nemo¾no alokova» %s farbu"
msgstr "nemožno alokovať %s farbu"
#: ../../WINGs/wcolor.c:198
#: ../../WINGs/wcolor.c:224
msgid "white"
msgstr "bielu"
#: ../../WINGs/wcolor.c:211
#: ../../WINGs/wcolor.c:236
msgid "black"
msgstr "èiernu"
msgstr "čiernu"
#: ../../WINGs/wcolor.c:250
#: ../../WINGs/wcolor.c:275
msgid "gray"
msgstr "¹edú"
msgstr "šedú"
#: ../../WINGs/wcolor.c:291
#: ../../WINGs/wcolor.c:316
msgid "dark gray"
msgstr "tmavo¹edú"
msgstr "tmavošedú"
#: ../../WINGs/wcolorpanel.c:415
#: ../../WINGs/wcolorpanel.c:420
msgid "Colors"
msgstr "Farby"
#: ../../WINGs/wcolorpanel.c:605 ../../WINGs/wcolorpanel.c:2824
#: ../../WINGs/wcolorpanel.c:610 ../../WINGs/wcolorpanel.c:2829
msgid "Brightness"
msgstr "Svetlos»"
msgstr "Svetlosť"
#: ../../WINGs/wcolorpanel.c:607 ../../WINGs/wcolorpanel.c:683
#: ../../WINGs/wcolorpanel.c:716 ../../WINGs/wcolorpanel.c:750
#: ../../WINGs/wcolorpanel.c:810 ../../WINGs/wcolorpanel.c:844
#: ../../WINGs/wcolorpanel.c:878 ../../WINGs/wcolorpanel.c:913
#: ../../WINGs/wcolorpanel.c:2164 ../../WINGs/wcolorpanel.c:2826
#: ../../WINGs/wcolorpanel.c:2862 ../../WINGs/wcolorpanel.c:2898
#: ../../WINGs/wcolorpanel.c:3746
#: ../../WINGs/wcolorpanel.c:612 ../../WINGs/wcolorpanel.c:688
#: ../../WINGs/wcolorpanel.c:721 ../../WINGs/wcolorpanel.c:755
#: ../../WINGs/wcolorpanel.c:815 ../../WINGs/wcolorpanel.c:849
#: ../../WINGs/wcolorpanel.c:883 ../../WINGs/wcolorpanel.c:918
#: ../../WINGs/wcolorpanel.c:2169 ../../WINGs/wcolorpanel.c:2831
#: ../../WINGs/wcolorpanel.c:2867 ../../WINGs/wcolorpanel.c:2903
#: ../../WINGs/wcolorpanel.c:3745
msgid "Color Panel: Could not allocate memory"
msgstr "Panel farieb: Nemo¾no alokova» pamä»"
msgstr "Panel farieb: Nemožno alokovať pamäť"
#: ../../WINGs/wcolorpanel.c:680 ../../WINGs/wcolorpanel.c:681
#: ../../WINGs/wcolorpanel.c:685 ../../WINGs/wcolorpanel.c:686
msgid "Red"
msgstr "Èervená"
msgstr "Červená"
#: ../../WINGs/wcolorpanel.c:713 ../../WINGs/wcolorpanel.c:714
#: ../../WINGs/wcolorpanel.c:718 ../../WINGs/wcolorpanel.c:719
msgid "Green"
msgstr "Zelená"
msgstr "Zelená"
#: ../../WINGs/wcolorpanel.c:747 ../../WINGs/wcolorpanel.c:748
#: ../../WINGs/wcolorpanel.c:752 ../../WINGs/wcolorpanel.c:753
msgid "Blue"
msgstr "Modrá"
msgstr "Modrá"
#: ../../WINGs/wcolorpanel.c:807 ../../WINGs/wcolorpanel.c:808
#: ../../WINGs/wcolorpanel.c:812 ../../WINGs/wcolorpanel.c:813
msgid "Cyan"
msgstr "Azúrová"
msgstr "Azúrová"
#: ../../WINGs/wcolorpanel.c:841 ../../WINGs/wcolorpanel.c:842
#: ../../WINGs/wcolorpanel.c:846 ../../WINGs/wcolorpanel.c:847
msgid "Magenta"
msgstr "Purpurová"
msgstr "Purpurová"
#: ../../WINGs/wcolorpanel.c:875 ../../WINGs/wcolorpanel.c:876
#: ../../WINGs/wcolorpanel.c:880 ../../WINGs/wcolorpanel.c:881
msgid "Yellow"
msgstr "®ltá"
msgstr "Žltá"
#: ../../WINGs/wcolorpanel.c:910 ../../WINGs/wcolorpanel.c:911
#: ../../WINGs/wcolorpanel.c:915 ../../WINGs/wcolorpanel.c:916
msgid "Black"
msgstr "Èierna"
msgstr "Čierna"
#: ../../WINGs/wcolorpanel.c:991
#: ../../WINGs/wcolorpanel.c:996
msgid "Spectrum"
msgstr "Spektrum"
#: ../../WINGs/wcolorpanel.c:1021
#: ../../WINGs/wcolorpanel.c:1026
msgid "Palette"
msgstr "Paleta"
#: ../../WINGs/wcolorpanel.c:1027
#: ../../WINGs/wcolorpanel.c:1032
msgid "New from File..."
msgstr "Nová zo súboru..."
msgstr "Nová zo súboru..."
#: ../../WINGs/wcolorpanel.c:1028 ../../WINGs/wcolorpanel.c:1076
#: ../../WINGs/wcolorpanel.c:1093
#: ../../WINGs/wcolorpanel.c:1033 ../../WINGs/wcolorpanel.c:1081
#: ../../WINGs/wcolorpanel.c:1098
msgid "Rename..."
msgstr "Premenova»..."
msgstr "Premenovať..."
#: ../../WINGs/wcolorpanel.c:1029 ../../WINGs/wcolorpanel.c:1077
#: ../../WINGs/wcolorpanel.c:1094 ../../WINGs/wcolorpanel.c:3321
#: ../../WINGs/wcolorpanel.c:1034 ../../WINGs/wcolorpanel.c:1082
#: ../../WINGs/wcolorpanel.c:1099 ../../WINGs/wcolorpanel.c:3326
msgid "Remove"
msgstr "Odstráni»"
msgstr "Odstrániť"
#: ../../WINGs/wcolorpanel.c:1030
#: ../../WINGs/wcolorpanel.c:1035
msgid "Copy"
msgstr "Kopírova»"
msgstr "Kopírovať"
#: ../../WINGs/wcolorpanel.c:1031
#: ../../WINGs/wcolorpanel.c:1036
msgid "New from Clipboard"
msgstr "Nová z nástenky"
msgstr "Nová z nástenky"
#: ../../WINGs/wcolorpanel.c:1052
#: ../../WINGs/wcolorpanel.c:1057
msgid "X11-Colors"
msgstr "Farby X11"
#: ../../WINGs/wcolorpanel.c:1069
#: ../../WINGs/wcolorpanel.c:1074
msgid "Color"
msgstr "Farba"
#: ../../WINGs/wcolorpanel.c:1075
#: ../../WINGs/wcolorpanel.c:1080
msgid "Add..."
msgstr "Prida»..."
msgstr "Pridať..."
#: ../../WINGs/wcolorpanel.c:1085
#: ../../WINGs/wcolorpanel.c:1090
msgid "List"
msgstr "Zoznam"
#: ../../WINGs/wcolorpanel.c:1092
#: ../../WINGs/wcolorpanel.c:1097
msgid "New..."
msgstr "Nový..."
msgstr "Nový..."
#: ../../WINGs/wcolorpanel.c:1231
#: ../../WINGs/wcolorpanel.c:1236
#, c-format
msgid ""
"Color Panel: Could not create directory %s needed to store configurations"
msgstr ""
"Panel farieb: Nemo¾no vytvori» adresár %s potrebný na ulo¾enie nastavení"
"Panel farieb: Nemožno vytvoriť adresár %s potrebný na uloženie nastavení"
#. Delete the file, it doesn't belong here
#: ../../WINGs/wcolorpanel.c:1237 ../../WINGs/wcolorpanel.c:3207
#: ../../WINGs/wcolorpanel.c:3211
#: ../../WINGs/wcolorpanel.c:1242 ../../WINGs/wcolorpanel.c:3212
#: ../../WINGs/wcolorpanel.c:3216
msgid "File Error"
msgstr "Chyba súboru"
msgstr "Chyba súboru"
#: ../../WINGs/wcolorpanel.c:1238
#: ../../WINGs/wcolorpanel.c:1243
msgid "Could not create ColorPanel configuration directory"
msgstr "Nemo¾no vytvori» konfiguraèný adresár panelu farieb"
msgstr "Nemožno vytvoriť konfiguračný adresár panelu farieb"
#: ../../WINGs/wcolorpanel.c:1239 ../../WINGs/wcolorpanel.c:3208
#: ../../WINGs/wcolorpanel.c:3213 ../../WINGs/wcolorpanel.c:3240
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:647
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wfilepanel.c:971 ../../WINGs/wfontpanel.c:709
#: ../../WINGs/wcolorpanel.c:1244 ../../WINGs/wcolorpanel.c:3213
#: ../../WINGs/wcolorpanel.c:3218 ../../WINGs/wcolorpanel.c:3245
#: ../../WINGs/wfilepanel.c:250 ../../WINGs/wfilepanel.c:650
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
#: ../../WINGs/wfilepanel.c:974 ../../WINGs/wfontpanel.c:751
msgid "OK"
msgstr "OK"
#: ../../WINGs/wcolorpanel.c:1245 ../../WINGs/wcolorpanel.c:1281
#: ../../WINGs/wcolorpanel.c:1299
#: ../../WINGs/wcolorpanel.c:1250 ../../WINGs/wcolorpanel.c:1286
#: ../../WINGs/wcolorpanel.c:1304
msgid "Color Panel: Could not find file"
msgstr "Panel farieb: Nemo¾no nájs» súbor"
msgstr "Panel farieb: Nemožno nájsť súbor"
#: ../../WINGs/wcolorpanel.c:1486 ../../WINGs/wcolorpanel.c:1551
#: ../../WINGs/wcolorpanel.c:1615
#: ../../WINGs/wcolorpanel.c:1491 ../../WINGs/wcolorpanel.c:1556
#: ../../WINGs/wcolorpanel.c:1620
msgid "Color Panel: X failed request"
msgstr "Panel farieb: chyba po¾iadavky X"
msgstr "Panel farieb: chyba požiadavky X"
#: ../../WINGs/wcolorpanel.c:2860
#: ../../WINGs/wcolorpanel.c:2865
msgid "Saturation"
msgstr "Saturácia"
msgstr "Saturácia"
#: ../../WINGs/wcolorpanel.c:2896
#: ../../WINGs/wcolorpanel.c:2901
msgid "Hue"
msgstr "Odtieò"
msgstr "Odtieň"
#: ../../WINGs/wcolorpanel.c:3146
#: ../../WINGs/wcolorpanel.c:3151
msgid "Open Palette"
msgstr "Otvori» paletu"
msgstr "Otvoriť paletu"
#: ../../WINGs/wcolorpanel.c:3208
#: ../../WINGs/wcolorpanel.c:3213
msgid "Invalid file format !"
msgstr "Nesprávny súborový formát!"
msgstr "Nesprávny súborový formát!"
#: ../../WINGs/wcolorpanel.c:3210
#: ../../WINGs/wcolorpanel.c:3215
#, c-format
msgid "can't remove file %s"
msgstr "namo¾no odstráni» súbor %s"
msgstr "namožno odstrániť súbor %s"
#: ../../WINGs/wcolorpanel.c:3212
#: ../../WINGs/wcolorpanel.c:3217
msgid "Couldn't remove file from Configuration Directory !"
msgstr "Nemo¾no odstráni» súbor z konfiguraèného adresára!"
msgstr "Nemožno odstrániť súbor z konfiguračného adresára!"
#: ../../WINGs/wcolorpanel.c:3239
#: ../../WINGs/wcolorpanel.c:3244
msgid "Rename"
msgstr "Premenova»"
msgstr "Premenovať"
#: ../../WINGs/wcolorpanel.c:3239
#: ../../WINGs/wcolorpanel.c:3244
msgid "Rename palette to:"
msgstr "Premenova» paletu:"
msgstr "Premenovať paletu:"
#: ../../WINGs/wcolorpanel.c:3240 ../../WINGs/wfilepanel.c:259
#: ../../WINGs/wfilepanel.c:659 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wcolorpanel.c:3245 ../../WINGs/wfilepanel.c:259
#: ../../WINGs/wfilepanel.c:662 ../../WINGs/wfilepanel.c:763
msgid "Cancel"
msgstr "Zru¹i»"
msgstr "Zrušiť"
#. Careful, this palette exists already
#: ../../WINGs/wcolorpanel.c:3256 ../../WINGs/wfilepanel.c:760
#: ../../WINGs/wcolorpanel.c:3261 ../../WINGs/wfilepanel.c:763
msgid "Warning"
msgstr "Varovanie"
#: ../../WINGs/wcolorpanel.c:3257
#: ../../WINGs/wcolorpanel.c:3262
msgid ""
"Palette already exists !\n"
"\n"
"Overwrite ?"
msgstr ""
"Paleta u¾ existuje!\n"
"Paleta už existuje!\n"
"\n"
"Prepísa»?"
"Prepísať?"
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
msgid "No"
msgstr "Nie"
#: ../../WINGs/wcolorpanel.c:3257 ../../WINGs/wcolorpanel.c:3321
#: ../../WINGs/wcolorpanel.c:3262 ../../WINGs/wcolorpanel.c:3326
msgid "Yes"
msgstr "Áno"
msgstr "Áno"
#: ../../WINGs/wcolorpanel.c:3289
#: ../../WINGs/wcolorpanel.c:3294
#, c-format
msgid "Couldn't rename palette %s to %s\n"
msgstr "Nemo¾no premenova» paletu %s na %s\n"
msgstr "Nemožno premenovať paletu %s na %s\n"
#: ../../WINGs/wcolorpanel.c:3315
#: ../../WINGs/wcolorpanel.c:3320
msgid "This will permanently remove the palette "
msgstr "Paleta bude natrvalo zmazaná"
msgstr "Paleta bude natrvalo zmazaná"
#: ../../WINGs/wcolorpanel.c:3318
#: ../../WINGs/wcolorpanel.c:3323
msgid ""
".\n"
"\n"
@@ -424,31 +430,31 @@ msgid ""
msgstr ""
".\n"
"\n"
"Ste si istý, ¾e chcete odstráni» túto paletu?"
"Ste si istý, že chcete odstrániť túto paletu?"
#: ../../WINGs/wcolorpanel.c:3343
#: ../../WINGs/wcolorpanel.c:3348
#, c-format
msgid "Couldn't remove palette %s\n"
msgstr "Nemo¾no odstráni» paletu %s\n"
msgstr "Nemožno odstrániť paletu %s\n"
#: ../../WINGs/wcolorpanel.c:3648
#: ../../WINGs/wcolorpanel.c:3647
#, c-format
msgid "Could not open %s"
msgstr "Nemo¾no otvori» %s"
msgstr "Nemožno otvoriť %s"
#: ../../WINGs/wcolorpanel.c:3655
#: ../../WINGs/wcolorpanel.c:3654
#, c-format
msgid "Could not create %s"
msgstr "Nemo¾no vytvori» %s"
msgstr "Nemožno vytvoriť %s"
#: ../../WINGs/wcolorpanel.c:3666
#: ../../WINGs/wcolorpanel.c:3665
#, c-format
msgid "Write error on file %s"
msgstr "Chyba zápisu do súboru %s"
msgstr "Chyba zápisu do súboru %s"
#: ../../WINGs/wcolorpanel.c:3711
#: ../../WINGs/wcolorpanel.c:3710
msgid "Color Panel: Color unspecified"
msgstr "Panel farieb: Ne¹pecifikovaná farba"
msgstr "Panel farieb: Nešpecifikovaná farba"
#: ../../WINGs/wfilepanel.c:235
msgid "Name:"
@@ -456,213 +462,258 @@ msgstr "Meno:"
#: ../../WINGs/wfilepanel.c:332 ../../WINGs/wfilepanel.c:396
msgid "Open"
msgstr "Otvori»"
msgstr "Otvoriť"
#: ../../WINGs/wfilepanel.c:350 ../../WINGs/wfilepanel.c:402
msgid "Save"
msgstr "Ulo¾i»"
msgstr "Uložiť"
#: ../../WINGs/wfilepanel.c:562
#: ../../WINGs/wfilepanel.c:565
#, c-format
msgid "WINGs: could not open directory %s\n"
msgstr "WINGs: nemo¾no otvori» adresár %s\n"
msgstr "WINGs: nemožno otvoriť adresár %s\n"
#: ../../WINGs/wfilepanel.c:580
#: ../../WINGs/wfilepanel.c:583
#, c-format
msgid "WINGs: could not stat %s\n"
msgstr "WINGs: nemo¾no zisti» informácie o %s\n"
msgstr "WINGs: nemožno zistiť informácie o %s\n"
#: ../../WINGs/wfilepanel.c:647 ../../WINGs/wfilepanel.c:970
#: ../../WINGs/wfontpanel.c:708
#: ../../WINGs/wfilepanel.c:650 ../../WINGs/wfilepanel.c:973
#: ../../WINGs/wfontpanel.c:750
msgid "Error"
msgstr "Chyba"
#: ../../WINGs/wfilepanel.c:658
#: ../../WINGs/wfilepanel.c:661
msgid "Create Directory"
msgstr "Vytvori» adresár"
msgstr "Vytvoriť adresár"
#: ../../WINGs/wfilepanel.c:659
#: ../../WINGs/wfilepanel.c:662
msgid "Enter directory name"
msgstr "Meno adresára"
msgstr "Meno adresára"
#: ../../WINGs/wfilepanel.c:695 ../../WINGs/wfilepanel.c:734
#: ../../WINGs/wfilepanel.c:765 ../../WINGs/wfilepanel.c:793
#: ../../WINGs/wfilepanel.c:698 ../../WINGs/wfilepanel.c:737
#: ../../WINGs/wfilepanel.c:768 ../../WINGs/wfilepanel.c:796
msgid "Permission denied."
msgstr "Prístup zamietnutý."
#: ../../WINGs/wfilepanel.c:698
#, c-format
msgid "'%s' already exists."
msgstr "'%s' u¾ existuje"
msgstr "Prístup zamietnutý."
#: ../../WINGs/wfilepanel.c:701
#, c-format
msgid "'%s' already exists."
msgstr "'%s' už existuje"
#: ../../WINGs/wfilepanel.c:704
msgid "Path does not exist."
msgstr "Cesta neexistuje."
#: ../../WINGs/wfilepanel.c:731 ../../WINGs/wfilepanel.c:790
#: ../../WINGs/wfilepanel.c:734 ../../WINGs/wfilepanel.c:793
#, c-format
msgid "'%s' does not exist."
msgstr "'%s' neexistuje."
#: ../../WINGs/wfilepanel.c:738 ../../WINGs/wfilepanel.c:797
#: ../../WINGs/wfilepanel.c:741 ../../WINGs/wfilepanel.c:800
msgid "Insufficient memory available."
msgstr "Nedostatok pamäti."
msgstr "Nedostatok pamäti."
#: ../../WINGs/wfilepanel.c:742 ../../WINGs/wfilepanel.c:801
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:804
#, c-format
msgid "'%s' is on a read-only filesystem."
msgstr "'%s' je na súborovom systéme len pre èítanie."
msgstr "'%s' je na súborovom systéme len pre čítanie."
#: ../../WINGs/wfilepanel.c:745 ../../WINGs/wfilepanel.c:777
#: ../../WINGs/wfilepanel.c:804
#: ../../WINGs/wfilepanel.c:748 ../../WINGs/wfilepanel.c:780
#: ../../WINGs/wfilepanel.c:807
#, c-format
msgid "Can not delete '%s'."
msgstr "Nemo¾no odstráni» '%s'."
msgstr "Nemožno odstrániť '%s'."
#: ../../WINGs/wfilepanel.c:752
#: ../../WINGs/wfilepanel.c:755
#, c-format
msgid "Delete directory %s ?"
msgstr "Odstráni» adresár %s?"
msgstr "Odstrániť adresár %s?"
#: ../../WINGs/wfilepanel.c:756
#: ../../WINGs/wfilepanel.c:759
#, c-format
msgid "Delete file %s ?"
msgstr "Odstráni» súbor %s?"
#: ../../WINGs/wfilepanel.c:768
#, c-format
msgid "Directory '%s' does not exist."
msgstr "Adresár '%s' neexistuje."
msgstr "Odstrániť súbor %s?"
#: ../../WINGs/wfilepanel.c:771
#, c-format
msgid "Directory '%s' is not empty."
msgstr "Adresár '%s' nie je prázdny."
msgid "Directory '%s' does not exist."
msgstr "Adresár '%s' neexistuje."
#: ../../WINGs/wfilepanel.c:774
#, c-format
msgid "Directory '%s' is busy."
msgstr "Adresár '%s' je pou¾ívaný."
msgid "Directory '%s' is not empty."
msgstr "Adresár '%s' nie je prázdny."
#: ../../WINGs/wfilepanel.c:787
#: ../../WINGs/wfilepanel.c:777
#, c-format
msgid "Directory '%s' is busy."
msgstr "Adresár '%s' je používaný."
#: ../../WINGs/wfilepanel.c:790
#, c-format
msgid "'%s' is a directory."
msgstr "'%s' je adresár."
msgstr "'%s' je adresár."
#: ../../WINGs/wfilepanel.c:829
#: ../../WINGs/wfilepanel.c:832
#, c-format
msgid "An error occured browsing '%s'."
msgstr "Pri prehliadaní '%s' nastala chyba."
msgstr "Pri prehliadaní '%s' nastala chyba."
#: ../../WINGs/wfilepanel.c:833
#: ../../WINGs/wfilepanel.c:836
#, c-format
msgid "'%s' is not a directory."
msgstr "'%s' nie je adresár."
msgstr "'%s' nie je adresár."
#: ../../WINGs/wfilepanel.c:970
#: ../../WINGs/wfilepanel.c:973
msgid "File does not exist."
msgstr "Súbor neexistuje."
msgstr "Súbor neexistuje."
#: ../../WINGs/wfont.c:129
#: ../../WINGs/wfont.c:324 ../../WINGs/wfont.c:344
#, c-format
msgid "could not load font %s."
msgstr "nemožno načítať font %s."
#: ../../WINGs/wfont.c:375 ../../WINGs/wfont.c:420 ../../WINGs/wfont.c:475
#: ../../WINGs/wfont.c:1337 ../../WINGs/wfont.c:1398 ../../WINGs/wfont.c:1469
#, c-format
msgid ""
"Conversion to widechar failed (possible invalid multibyte sequence): '%s':"
"(pos %d)\n"
msgstr ""
"Konverzia do widechar zlyhala (možno nesprávna multibyte sekvencia): '%s':"
"(pos %d)\n"
#. // remove warning later. or maybe not
#: ../../WINGs/wfont.c:591 ../../WINGs/wfont.c:1568
#, c-format
msgid "Invalid font specification: '%s'\n"
msgstr "Chybná špecifikácia fontu: '%s'\n"
#: ../../WINGs/wfont.c:770 ../../WINGs/wfont.c:780
#, c-format
msgid "Invalid size specification '%s' in %s. Using default %d\n"
msgstr "Chybná špecifikácia veľkosti '%s' v %s. Použije sa implicitná %d\n"
#: ../../WINGs/wfont.c:824
#, c-format
msgid "the following character sets are missing in %s:"
msgstr "nasledujúce sady znakov chýbajú v %s:"
msgstr "nasledujúce sady znakov chýbajú v %s:"
#: ../../WINGs/wfont.c:136
#: ../../WINGs/wfont.c:830
#, c-format
msgid ""
"the string \"%s\" will be used in place of any characters from those sets."
msgstr "re»azec \"%s\" bude pou¾itý namiesto znakov z týchto sád."
msgstr "reťazec \"%s\" bude použitý namiesto znakov z týchto sád."
#: ../../WINGs/wfont.c:282 ../../WINGs/wfont.c:318
#. is arial a good fallback for multibyte?
#: ../../WINGs/wfont.c:1232 ../../WINGs/wfont.c:1247
#, c-format
msgid "could not load font set %s. Trying fixed."
msgstr "nemo¾no naèíta» font %s. Skú¹a sa naèíta» fixed."
msgid "could not load font %s. Trying arial."
msgstr "nemožno načítať font %s. Skúša sa načítať arial."
#: ../../WINGs/wfont.c:288 ../../WINGs/wfont.c:324
#: ../../WINGs/wfont.c:1239
msgid "could not load antialiased font set. Reverting to standard font sets."
msgstr "nemožno načítať antialiasovanú sadu fontov. Späť k štandardnej sade fontov."
#: ../../WINGs/wfont.c:1242
#, c-format
msgid "could not load FontSet %s. Trying fixed."
msgstr "nemožno načítať sadu fontov %s. Skúša sa načítať fixed."
#: ../../WINGs/wfont.c:1254
msgid "could not load antialiased fonts. Reverting to normal fonts."
msgstr "nemožno zaviesť antialiasovaný font. Návrat k normálnemu fontu."
#: ../../WINGs/wfont.c:1257 ../../WINGs/wfont.c:1268
#, c-format
msgid "could not load font %s. Trying fixed."
msgstr "nemo¾no naèíta» font %s. Skú¹a sa naèíta» fixed."
msgstr "nemožno načítať font %s. Skúša sa načítať fixed."
#: ../../WINGs/wfont.c:292 ../../WINGs/wfont.c:328
#: ../../WINGs/wfont.c:1262
#, c-format
msgid "could not load font set %s. Trying fixed."
msgstr "nemožno načítať font %s. Skúša sa načítať fixed."
#: ../../WINGs/wfont.c:1272
msgid "could not load fixed font!"
msgstr "nemo¾no naèíta» font fixed!"
msgstr "nemožno načítať font fixed!"
#: ../../WINGs/wfont.c:423
#: ../../WINGs/wfont.c:1520
#, c-format
msgid "font description %s is too large."
msgstr "popis fontu %s je príli¹ veµký."
msgstr "popis fontu %s je príliš veľký."
#: ../../WINGs/wfontpanel.c:205
#: ../../WINGs/wfontpanel.c:235
msgid "Test!!!"
msgstr "Skú¹ka!!!"
msgstr "Skúška!!!"
#: ../../WINGs/wfontpanel.c:211
#: ../../WINGs/wfontpanel.c:241
msgid "Family"
msgstr "Rodina"
#: ../../WINGs/wfontpanel.c:222
msgid "Typeface"
msgstr "Vzhµad"
#: ../../WINGs/wfontpanel.c:233
msgid "Size"
msgstr "Veµkos»"
#: ../../WINGs/wfontpanel.c:252
msgid "Typeface"
msgstr "Vzhľad"
#: ../../WINGs/wfontpanel.c:263
msgid "Size"
msgstr "Veľkosť"
#: ../../WINGs/wfontpanel.c:282
msgid "Set"
msgstr "Sada"
#: ../../WINGs/wfontpanel.c:257
#: ../../WINGs/wfontpanel.c:288
msgid "Revert"
msgstr "Obráti»"
msgstr "Obrátiť"
#: ../../WINGs/wfontpanel.c:709
#: ../../WINGs/wfontpanel.c:751
msgid "Could not retrieve font list"
msgstr "Nemo¾no obdr¾a» zoznam fontov"
msgstr "Nemožno obdržať zoznam fontov"
#: ../../WINGs/wfontpanel.c:721
#: ../../WINGs/wfontpanel.c:765
#, c-format
msgid "font name %s is longer than 256, which is invalid."
msgstr "meno fontu %s je dlh¹ie ako 256, èo je nesprávne."
msgstr "meno fontu %s je dlhšie ako 256, čo je nesprávne."
#: ../../WINGs/wfontpanel.c:868
#: ../../WINGs/wfontpanel.c:913
msgid "Roman"
msgstr "roman"
#: ../../WINGs/wfontpanel.c:871
#: ../../WINGs/wfontpanel.c:916
msgid "Italic"
msgstr "kurzíva"
msgstr "kurzíva"
#: ../../WINGs/wfontpanel.c:873
#: ../../WINGs/wfontpanel.c:918
msgid "Oblique"
msgstr "¹ikmé"
msgstr "šikmé"
#: ../../WINGs/wfontpanel.c:875
#: ../../WINGs/wfontpanel.c:920
msgid "Rev Italic"
msgstr "obr. kurzíva"
msgstr "obr. kurzíva"
#: ../../WINGs/wfontpanel.c:877
#: ../../WINGs/wfontpanel.c:922
msgid "Rev Oblique"
msgstr "obr. ¹ikmé"
msgstr "obr. šikmé"
#: ../../WINGs/wfontpanel.c:883
#: ../../WINGs/wfontpanel.c:928
msgid "Normal"
msgstr "normálne"
msgstr "normálne"
#: ../../WINGs/widgets.c:415
#: ../../WINGs/widgets.c:419
#, c-format
msgid "WINGs: could not load widget images file: %s"
msgstr "WINGs: nemo¾no naèíta» súbor s obrázkami pre widgety: %s"
msgstr "WINGs: nemožno načítať súbor s obrázkami pre widgety: %s"
#: ../../WINGs/widgets.c:761
#: ../../WINGs/widgets.c:772
msgid ""
"could not load any fonts. Make sure your font installationand locale "
"could not load any fonts. Make sure your font installation and locale "
"settings are correct."
msgstr ""
"nemo¾no naèíta» ¾iadny font. Ubezpeète sa, ¾e in¹talácia fontov a miestne "
"nastavenia sú v poriadku."
"nemožno načítať žiadny font. Ubezpečte sa, že inštalácia fontov a miestne "
"nastavenia sú v poriadku."
#: ../../WINGs/wruler.c:189
#: ../../WINGs/wruler.c:192
msgid "0 inches"
msgstr "0 palcov"

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,10 @@
#include <stdlib.h>
#include <stdio.h>
#include <WINGs.h>
#define MAX_SIZE 10*10
WMWindow *win;
WMButton *Button[MAX_SIZE];
char Map[MAX_SIZE];
@@ -20,222 +15,218 @@ int MoveCount;
int WinSize = 120;
Bool CheckWin(void)
{
int i;
for (i = 0; i < Size*Size-1; i++) {
if (Map[i] != i)
return False;
}
return True;
}
int i;
for (i = 0; i < Size * Size - 1; i++) {
if (Map[i] != i)
return False;
}
return True;
}
void MoveButton(int button, int x, int y)
{
WMMoveWidget(Button[button], x*(WinSize/Size), y*(WinSize/Size));
WMMoveWidget(Button[button], x * (WinSize / Size), y * (WinSize / Size));
}
Bool SlideButton(int button)
{
int x, y, 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;
}
if (x > 0 && MAP(x-1, y) < 0) {
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;
} else if (y > 0 && MAP(x, y-1) < 0) {
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;
} else {
return False;
}
return True;
}
int x, y, 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;
}
if (x > 0 && MAP(x - 1, y) < 0) {
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;
} else if (y > 0 && MAP(x, y - 1) < 0) {
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;
} else {
return False;
}
return True;
}
#define SWAP(a,b) {int tmp; tmp=a; a=b; b=tmp;}
void ResetGame(void)
{
int i, x, y, ox, oy;
MoveCount = 0;
for (i = 0; i < Size*Size-1; i++) {
Map[i] = i;
}
Map[i] = -1;
ox = x = Size-1;
oy = y = Size-1;
for (i = 0; i < 5; 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 i, 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;
MoveCount = 0;
for (i = 0; i < Size * Size - 1; i++) {
Map[i] = i;
}
Map[i] = -1;
ox = x = Size - 1;
oy = y = Size - 1;
for (i = 0; i < 5; 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);
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;
}
}
}
}
void buttonClick(WMWidget *w, void *ptr)
void buttonClick(WMWidget * w, void *ptr)
{
char buffer[300];
char buffer[300];
if (SlideButton((int)ptr)) {
MoveCount++;
if (SlideButton((int)ptr)) {
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();
}
}
}
}
static void resizeObserver(void *self, WMNotification *notif)
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));
}
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));
}
}
}
}
}
int main(int argc, char **argv)
{
Display *dpy;
WMScreen *scr;
int x, y, i;
WMInitializeApplication("Puzzle", &argc, argv);
Display *dpy;
WMScreen *scr;
int x, y, i;
dpy = XOpenDisplay("");
if (!dpy) {
printf("could not open display\n");
exit(1);
}
scr = WMCreateScreen(dpy, DefaultScreen(dpy));
win = WMCreateWindow(scr, "puzzle");
WMResizeWidget(win, WinSize, WinSize);
WMSetWindowTitle(win, "zuPzel");
WMSetWindowMinSize(win, 80, 80);
WMSetWindowAspectRatio(win, 2, 2, 2, 2);
WMSetWindowResizeIncrements(win, Size, Size);
WMSetViewNotifySizeChanges(WMWidgetView(win), True);
WMAddNotificationObserver(resizeObserver, NULL,
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);
WMInitializeApplication("Puzzle", &argc, argv);
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++;
dpy = XOpenDisplay("");
if (!dpy) {
printf("could not open display\n");
exit(1);
}
}
WMMapSubwidgets(win);
WMMapWidget(win);
WMRealizeWidget(win);
ResetGame();
WMScreenMainLoop(scr);
return 0;
scr = WMCreateScreen(dpy, DefaultScreen(dpy));
win = WMCreateWindow(scr, "puzzle");
WMResizeWidget(win, WinSize, WinSize);
WMSetWindowTitle(win, "zuPzel");
WMSetWindowMinSize(win, 80, 80);
WMSetWindowAspectRatio(win, 2, 2, 2, 2);
WMSetWindowResizeIncrements(win, Size, Size);
WMSetViewNotifySizeChanges(WMWidgetView(win), True);
WMAddNotificationObserver(resizeObserver, NULL, 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);
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;
}

View File

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

View File

@@ -1,6 +1,6 @@
This is a python wrapper for the WINGs library. With it you can write python
based programs which will have WINGs based graphic interfaces.
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.
@@ -8,14 +8,13 @@ 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 even WINGs.py for an example.
run test.py or WINGs.py for an example.
the code is not yet finished and probably won't do everything you expect it
to do.
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 nstall the newly built WINGs, else the python module will
be built against the old version
you still need to install the newly built WINGs, else the python module will
be built against the old version.

View File

@@ -26,10 +26,11 @@ class WMTimer:
self._o = wings.pyWMAddPersistentTimerHandler(milliseconds, (callback, cdata))
else:
self._o = wings.pyWMAddTimerHandler(milliseconds, (callback, cdata))
self.__WMDeleteTimerHandler = wings.pyWMDeleteTimerHandler
def __del__(self):
wings.pyWMDeleteTimerHandler(self._o)
#delete = __del__
self.__WMDeleteTimerHandler(self._o)
class WMPersistentTimer(WMTimer):
def __init__(self, milliseconds, callback, cdata=None):
@@ -55,6 +56,16 @@ class WMScreen:
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)
@@ -77,14 +88,15 @@ class WMView:
class WMWidget(WMView):
def __init__(self):
self._o = None
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 != None):
wings.WMDestroyWidget(self._o)
if self._o is not None:
self.__WMDestroyWidget(self._o)
def resize(self, width, height):
wings.WMResizeWidget(self._o, width, height)

View File

@@ -8,24 +8,21 @@ from distutils.extension import Extension
## Get the include dirs
wings = os.popen("get-wings-flags --cflags", "r")
lines = [x.strip() for x in wings.readlines()]
flags = reduce(lambda x,y: x+y, [x.split() for x in lines if x])
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")
lines = [x.strip() for x in wings.readlines()]
flags = reduce(lambda x,y: x+y, [x.split() for x in lines if x])
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")
lines = [x.strip() for x in wings.readlines()]
flags = reduce(lambda x,y: x+y, [x.split() for x in lines if x])
flags = wings.read().split()
libraries = [x[2:] for x in flags]
wings.close()
@@ -52,10 +49,10 @@ setup (# Distribution meta-data
description = "A python interface to WINGs",
long_description=long_description,
author = "Dan Pascu",
author_email = "dan@windowmaker.org",
author_email = "dan@windowmaker.info",
license = "GPL",
platforms = "ALL",
url = "http://windowmaker.org/",
url = "http://windowmaker.info/",
# Description of the modules and packages in the distribution

771
WINGs/rgb.h Normal file
View File

@@ -0,0 +1,771 @@
/* Automatically generated file. Do NOT edit. Regenerate it using make-rgb */
#ifndef RGB_H_
#define RGB_H_
#include <wraster.h>
typedef struct RGBColor {
RColor color;
char *name;
} RGBColor;
RGBColor rgbColors[] = {
{{255, 250, 250, 0}, "snow"},
{{248, 248, 255, 0}, "ghost"},
{{248, 248, 255, 0}, "GhostWhite"},
{{245, 245, 245, 0}, "white"},
{{245, 245, 245, 0}, "WhiteSmoke"},
{{220, 220, 220, 0}, "gainsboro"},
{{255, 250, 240, 0}, "floral"},
{{255, 250, 240, 0}, "FloralWhite"},
{{253, 245, 230, 0}, "old"},
{{253, 245, 230, 0}, "OldLace"},
{{250, 240, 230, 0}, "linen"},
{{250, 235, 215, 0}, "antique"},
{{250, 235, 215, 0}, "AntiqueWhite"},
{{255, 239, 213, 0}, "papaya"},
{{255, 239, 213, 0}, "PapayaWhip"},
{{255, 235, 205, 0}, "blanched"},
{{255, 235, 205, 0}, "BlanchedAlmond"},
{{255, 228, 196, 0}, "bisque"},
{{255, 218, 185, 0}, "peach"},
{{255, 218, 185, 0}, "PeachPuff"},
{{255, 222, 173, 0}, "navajo"},
{{255, 222, 173, 0}, "NavajoWhite"},
{{255, 228, 181, 0}, "moccasin"},
{{255, 248, 220, 0}, "cornsilk"},
{{255, 255, 240, 0}, "ivory"},
{{255, 250, 205, 0}, "lemon"},
{{255, 250, 205, 0}, "LemonChiffon"},
{{255, 245, 238, 0}, "seashell"},
{{240, 255, 240, 0}, "honeydew"},
{{245, 255, 250, 0}, "mint"},
{{245, 255, 250, 0}, "MintCream"},
{{240, 255, 255, 0}, "azure"},
{{240, 248, 255, 0}, "alice"},
{{240, 248, 255, 0}, "AliceBlue"},
{{230, 230, 250, 0}, "lavender"},
{{255, 240, 245, 0}, "lavender"},
{{255, 240, 245, 0}, "LavenderBlush"},
{{255, 228, 225, 0}, "misty"},
{{255, 228, 225, 0}, "MistyRose"},
{{255, 255, 255, 0}, "white"},
{{ 0, 0, 0, 0}, "black"},
{{ 47, 79, 79, 0}, "dark"},
{{ 47, 79, 79, 0}, "DarkSlateGray"},
{{ 47, 79, 79, 0}, "dark"},
{{ 47, 79, 79, 0}, "DarkSlateGrey"},
{{105, 105, 105, 0}, "dim"},
{{105, 105, 105, 0}, "DimGray"},
{{105, 105, 105, 0}, "dim"},
{{105, 105, 105, 0}, "DimGrey"},
{{112, 128, 144, 0}, "slate"},
{{112, 128, 144, 0}, "SlateGray"},
{{112, 128, 144, 0}, "slate"},
{{112, 128, 144, 0}, "SlateGrey"},
{{119, 136, 153, 0}, "light"},
{{119, 136, 153, 0}, "LightSlateGray"},
{{119, 136, 153, 0}, "light"},
{{119, 136, 153, 0}, "LightSlateGrey"},
{{190, 190, 190, 0}, "gray"},
{{190, 190, 190, 0}, "grey"},
{{211, 211, 211, 0}, "light"},
{{211, 211, 211, 0}, "LightGrey"},
{{211, 211, 211, 0}, "light"},
{{211, 211, 211, 0}, "LightGray"},
{{ 25, 25, 112, 0}, "midnight"},
{{ 25, 25, 112, 0}, "MidnightBlue"},
{{ 0, 0, 128, 0}, "navy"},
{{ 0, 0, 128, 0}, "navy"},
{{ 0, 0, 128, 0}, "NavyBlue"},
{{100, 149, 237, 0}, "cornflower"},
{{100, 149, 237, 0}, "CornflowerBlue"},
{{ 72, 61, 139, 0}, "dark"},
{{ 72, 61, 139, 0}, "DarkSlateBlue"},
{{106, 90, 205, 0}, "slate"},
{{106, 90, 205, 0}, "SlateBlue"},
{{123, 104, 238, 0}, "medium"},
{{123, 104, 238, 0}, "MediumSlateBlue"},
{{132, 112, 255, 0}, "light"},
{{132, 112, 255, 0}, "LightSlateBlue"},
{{ 0, 0, 205, 0}, "medium"},
{{ 0, 0, 205, 0}, "MediumBlue"},
{{ 65, 105, 225, 0}, "royal"},
{{ 65, 105, 225, 0}, "RoyalBlue"},
{{ 0, 0, 255, 0}, "blue"},
{{ 30, 144, 255, 0}, "dodger"},
{{ 30, 144, 255, 0}, "DodgerBlue"},
{{ 0, 191, 255, 0}, "deep"},
{{ 0, 191, 255, 0}, "DeepSkyBlue"},
{{135, 206, 235, 0}, "sky"},
{{135, 206, 235, 0}, "SkyBlue"},
{{135, 206, 250, 0}, "light"},
{{135, 206, 250, 0}, "LightSkyBlue"},
{{ 70, 130, 180, 0}, "steel"},
{{ 70, 130, 180, 0}, "SteelBlue"},
{{176, 196, 222, 0}, "light"},
{{176, 196, 222, 0}, "LightSteelBlue"},
{{173, 216, 230, 0}, "light"},
{{173, 216, 230, 0}, "LightBlue"},
{{176, 224, 230, 0}, "powder"},
{{176, 224, 230, 0}, "PowderBlue"},
{{175, 238, 238, 0}, "pale"},
{{175, 238, 238, 0}, "PaleTurquoise"},
{{ 0, 206, 209, 0}, "dark"},
{{ 0, 206, 209, 0}, "DarkTurquoise"},
{{ 72, 209, 204, 0}, "medium"},
{{ 72, 209, 204, 0}, "MediumTurquoise"},
{{ 64, 224, 208, 0}, "turquoise"},
{{ 0, 255, 255, 0}, "cyan"},
{{224, 255, 255, 0}, "light"},
{{224, 255, 255, 0}, "LightCyan"},
{{ 95, 158, 160, 0}, "cadet"},
{{ 95, 158, 160, 0}, "CadetBlue"},
{{102, 205, 170, 0}, "medium"},
{{102, 205, 170, 0}, "MediumAquamarine"},
{{127, 255, 212, 0}, "aquamarine"},
{{ 0, 100, 0, 0}, "dark"},
{{ 0, 100, 0, 0}, "DarkGreen"},
{{ 85, 107, 47, 0}, "dark"},
{{ 85, 107, 47, 0}, "DarkOliveGreen"},
{{143, 188, 143, 0}, "dark"},
{{143, 188, 143, 0}, "DarkSeaGreen"},
{{ 46, 139, 87, 0}, "sea"},
{{ 46, 139, 87, 0}, "SeaGreen"},
{{ 60, 179, 113, 0}, "medium"},
{{ 60, 179, 113, 0}, "MediumSeaGreen"},
{{ 32, 178, 170, 0}, "light"},
{{ 32, 178, 170, 0}, "LightSeaGreen"},
{{152, 251, 152, 0}, "pale"},
{{152, 251, 152, 0}, "PaleGreen"},
{{ 0, 255, 127, 0}, "spring"},
{{ 0, 255, 127, 0}, "SpringGreen"},
{{124, 252, 0, 0}, "lawn"},
{{124, 252, 0, 0}, "LawnGreen"},
{{ 0, 255, 0, 0}, "green"},
{{127, 255, 0, 0}, "chartreuse"},
{{ 0, 250, 154, 0}, "medium"},
{{ 0, 250, 154, 0}, "MediumSpringGreen"},
{{173, 255, 47, 0}, "green"},
{{173, 255, 47, 0}, "GreenYellow"},
{{ 50, 205, 50, 0}, "lime"},
{{ 50, 205, 50, 0}, "LimeGreen"},
{{154, 205, 50, 0}, "yellow"},
{{154, 205, 50, 0}, "YellowGreen"},
{{ 34, 139, 34, 0}, "forest"},
{{ 34, 139, 34, 0}, "ForestGreen"},
{{107, 142, 35, 0}, "olive"},
{{107, 142, 35, 0}, "OliveDrab"},
{{189, 183, 107, 0}, "dark"},
{{189, 183, 107, 0}, "DarkKhaki"},
{{240, 230, 140, 0}, "khaki"},
{{238, 232, 170, 0}, "pale"},
{{238, 232, 170, 0}, "PaleGoldenrod"},
{{250, 250, 210, 0}, "light"},
{{250, 250, 210, 0}, "LightGoldenrodYellow"},
{{255, 255, 224, 0}, "light"},
{{255, 255, 224, 0}, "LightYellow"},
{{255, 255, 0, 0}, "yellow"},
{{255, 215, 0, 0}, "gold"},
{{238, 221, 130, 0}, "light"},
{{238, 221, 130, 0}, "LightGoldenrod"},
{{218, 165, 32, 0}, "goldenrod"},
{{184, 134, 11, 0}, "dark"},
{{184, 134, 11, 0}, "DarkGoldenrod"},
{{188, 143, 143, 0}, "rosy"},
{{188, 143, 143, 0}, "RosyBrown"},
{{205, 92, 92, 0}, "indian"},
{{205, 92, 92, 0}, "IndianRed"},
{{139, 69, 19, 0}, "saddle"},
{{139, 69, 19, 0}, "SaddleBrown"},
{{160, 82, 45, 0}, "sienna"},
{{205, 133, 63, 0}, "peru"},
{{222, 184, 135, 0}, "burlywood"},
{{245, 245, 220, 0}, "beige"},
{{245, 222, 179, 0}, "wheat"},
{{244, 164, 96, 0}, "sandy"},
{{244, 164, 96, 0}, "SandyBrown"},
{{210, 180, 140, 0}, "tan"},
{{210, 105, 30, 0}, "chocolate"},
{{178, 34, 34, 0}, "firebrick"},
{{165, 42, 42, 0}, "brown"},
{{233, 150, 122, 0}, "dark"},
{{233, 150, 122, 0}, "DarkSalmon"},
{{250, 128, 114, 0}, "salmon"},
{{255, 160, 122, 0}, "light"},
{{255, 160, 122, 0}, "LightSalmon"},
{{255, 165, 0, 0}, "orange"},
{{255, 140, 0, 0}, "dark"},
{{255, 140, 0, 0}, "DarkOrange"},
{{255, 127, 80, 0}, "coral"},
{{240, 128, 128, 0}, "light"},
{{240, 128, 128, 0}, "LightCoral"},
{{255, 99, 71, 0}, "tomato"},
{{255, 69, 0, 0}, "orange"},
{{255, 69, 0, 0}, "OrangeRed"},
{{255, 0, 0, 0}, "red"},
{{255, 105, 180, 0}, "hot"},
{{255, 105, 180, 0}, "HotPink"},
{{255, 20, 147, 0}, "deep"},
{{255, 20, 147, 0}, "DeepPink"},
{{255, 192, 203, 0}, "pink"},
{{255, 182, 193, 0}, "light"},
{{255, 182, 193, 0}, "LightPink"},
{{219, 112, 147, 0}, "pale"},
{{219, 112, 147, 0}, "PaleVioletRed"},
{{176, 48, 96, 0}, "maroon"},
{{199, 21, 133, 0}, "medium"},
{{199, 21, 133, 0}, "MediumVioletRed"},
{{208, 32, 144, 0}, "violet"},
{{208, 32, 144, 0}, "VioletRed"},
{{255, 0, 255, 0}, "magenta"},
{{238, 130, 238, 0}, "violet"},
{{221, 160, 221, 0}, "plum"},
{{218, 112, 214, 0}, "orchid"},
{{186, 85, 211, 0}, "medium"},
{{186, 85, 211, 0}, "MediumOrchid"},
{{153, 50, 204, 0}, "dark"},
{{153, 50, 204, 0}, "DarkOrchid"},
{{148, 0, 211, 0}, "dark"},
{{148, 0, 211, 0}, "DarkViolet"},
{{138, 43, 226, 0}, "blue"},
{{138, 43, 226, 0}, "BlueViolet"},
{{160, 32, 240, 0}, "purple"},
{{147, 112, 219, 0}, "medium"},
{{147, 112, 219, 0}, "MediumPurple"},
{{216, 191, 216, 0}, "thistle"},
{{255, 250, 250, 0}, "snow1"},
{{238, 233, 233, 0}, "snow2"},
{{205, 201, 201, 0}, "snow3"},
{{139, 137, 137, 0}, "snow4"},
{{255, 245, 238, 0}, "seashell1"},
{{238, 229, 222, 0}, "seashell2"},
{{205, 197, 191, 0}, "seashell3"},
{{139, 134, 130, 0}, "seashell4"},
{{255, 239, 219, 0}, "AntiqueWhite1"},
{{238, 223, 204, 0}, "AntiqueWhite2"},
{{205, 192, 176, 0}, "AntiqueWhite3"},
{{139, 131, 120, 0}, "AntiqueWhite4"},
{{255, 228, 196, 0}, "bisque1"},
{{238, 213, 183, 0}, "bisque2"},
{{205, 183, 158, 0}, "bisque3"},
{{139, 125, 107, 0}, "bisque4"},
{{255, 218, 185, 0}, "PeachPuff1"},
{{238, 203, 173, 0}, "PeachPuff2"},
{{205, 175, 149, 0}, "PeachPuff3"},
{{139, 119, 101, 0}, "PeachPuff4"},
{{255, 222, 173, 0}, "NavajoWhite1"},
{{238, 207, 161, 0}, "NavajoWhite2"},
{{205, 179, 139, 0}, "NavajoWhite3"},
{{139, 121, 94, 0}, "NavajoWhite4"},
{{255, 250, 205, 0}, "LemonChiffon1"},
{{238, 233, 191, 0}, "LemonChiffon2"},
{{205, 201, 165, 0}, "LemonChiffon3"},
{{139, 137, 112, 0}, "LemonChiffon4"},
{{255, 248, 220, 0}, "cornsilk1"},
{{238, 232, 205, 0}, "cornsilk2"},
{{205, 200, 177, 0}, "cornsilk3"},
{{139, 136, 120, 0}, "cornsilk4"},
{{255, 255, 240, 0}, "ivory1"},
{{238, 238, 224, 0}, "ivory2"},
{{205, 205, 193, 0}, "ivory3"},
{{139, 139, 131, 0}, "ivory4"},
{{240, 255, 240, 0}, "honeydew1"},
{{224, 238, 224, 0}, "honeydew2"},
{{193, 205, 193, 0}, "honeydew3"},
{{131, 139, 131, 0}, "honeydew4"},
{{255, 240, 245, 0}, "LavenderBlush1"},
{{238, 224, 229, 0}, "LavenderBlush2"},
{{205, 193, 197, 0}, "LavenderBlush3"},
{{139, 131, 134, 0}, "LavenderBlush4"},
{{255, 228, 225, 0}, "MistyRose1"},
{{238, 213, 210, 0}, "MistyRose2"},
{{205, 183, 181, 0}, "MistyRose3"},
{{139, 125, 123, 0}, "MistyRose4"},
{{240, 255, 255, 0}, "azure1"},
{{224, 238, 238, 0}, "azure2"},
{{193, 205, 205, 0}, "azure3"},
{{131, 139, 139, 0}, "azure4"},
{{131, 111, 255, 0}, "SlateBlue1"},
{{122, 103, 238, 0}, "SlateBlue2"},
{{105, 89, 205, 0}, "SlateBlue3"},
{{ 71, 60, 139, 0}, "SlateBlue4"},
{{ 72, 118, 255, 0}, "RoyalBlue1"},
{{ 67, 110, 238, 0}, "RoyalBlue2"},
{{ 58, 95, 205, 0}, "RoyalBlue3"},
{{ 39, 64, 139, 0}, "RoyalBlue4"},
{{ 0, 0, 255, 0}, "blue1"},
{{ 0, 0, 238, 0}, "blue2"},
{{ 0, 0, 205, 0}, "blue3"},
{{ 0, 0, 139, 0}, "blue4"},
{{ 30, 144, 255, 0}, "DodgerBlue1"},
{{ 28, 134, 238, 0}, "DodgerBlue2"},
{{ 24, 116, 205, 0}, "DodgerBlue3"},
{{ 16, 78, 139, 0}, "DodgerBlue4"},
{{ 99, 184, 255, 0}, "SteelBlue1"},
{{ 92, 172, 238, 0}, "SteelBlue2"},
{{ 79, 148, 205, 0}, "SteelBlue3"},
{{ 54, 100, 139, 0}, "SteelBlue4"},
{{ 0, 191, 255, 0}, "DeepSkyBlue1"},
{{ 0, 178, 238, 0}, "DeepSkyBlue2"},
{{ 0, 154, 205, 0}, "DeepSkyBlue3"},
{{ 0, 104, 139, 0}, "DeepSkyBlue4"},
{{135, 206, 255, 0}, "SkyBlue1"},
{{126, 192, 238, 0}, "SkyBlue2"},
{{108, 166, 205, 0}, "SkyBlue3"},
{{ 74, 112, 139, 0}, "SkyBlue4"},
{{176, 226, 255, 0}, "LightSkyBlue1"},
{{164, 211, 238, 0}, "LightSkyBlue2"},
{{141, 182, 205, 0}, "LightSkyBlue3"},
{{ 96, 123, 139, 0}, "LightSkyBlue4"},
{{198, 226, 255, 0}, "SlateGray1"},
{{185, 211, 238, 0}, "SlateGray2"},
{{159, 182, 205, 0}, "SlateGray3"},
{{108, 123, 139, 0}, "SlateGray4"},
{{202, 225, 255, 0}, "LightSteelBlue1"},
{{188, 210, 238, 0}, "LightSteelBlue2"},
{{162, 181, 205, 0}, "LightSteelBlue3"},
{{110, 123, 139, 0}, "LightSteelBlue4"},
{{191, 239, 255, 0}, "LightBlue1"},
{{178, 223, 238, 0}, "LightBlue2"},
{{154, 192, 205, 0}, "LightBlue3"},
{{104, 131, 139, 0}, "LightBlue4"},
{{224, 255, 255, 0}, "LightCyan1"},
{{209, 238, 238, 0}, "LightCyan2"},
{{180, 205, 205, 0}, "LightCyan3"},
{{122, 139, 139, 0}, "LightCyan4"},
{{187, 255, 255, 0}, "PaleTurquoise1"},
{{174, 238, 238, 0}, "PaleTurquoise2"},
{{150, 205, 205, 0}, "PaleTurquoise3"},
{{102, 139, 139, 0}, "PaleTurquoise4"},
{{152, 245, 255, 0}, "CadetBlue1"},
{{142, 229, 238, 0}, "CadetBlue2"},
{{122, 197, 205, 0}, "CadetBlue3"},
{{ 83, 134, 139, 0}, "CadetBlue4"},
{{ 0, 245, 255, 0}, "turquoise1"},
{{ 0, 229, 238, 0}, "turquoise2"},
{{ 0, 197, 205, 0}, "turquoise3"},
{{ 0, 134, 139, 0}, "turquoise4"},
{{ 0, 255, 255, 0}, "cyan1"},
{{ 0, 238, 238, 0}, "cyan2"},
{{ 0, 205, 205, 0}, "cyan3"},
{{ 0, 139, 139, 0}, "cyan4"},
{{151, 255, 255, 0}, "DarkSlateGray1"},
{{141, 238, 238, 0}, "DarkSlateGray2"},
{{121, 205, 205, 0}, "DarkSlateGray3"},
{{ 82, 139, 139, 0}, "DarkSlateGray4"},
{{127, 255, 212, 0}, "aquamarine1"},
{{118, 238, 198, 0}, "aquamarine2"},
{{102, 205, 170, 0}, "aquamarine3"},
{{ 69, 139, 116, 0}, "aquamarine4"},
{{193, 255, 193, 0}, "DarkSeaGreen1"},
{{180, 238, 180, 0}, "DarkSeaGreen2"},
{{155, 205, 155, 0}, "DarkSeaGreen3"},
{{105, 139, 105, 0}, "DarkSeaGreen4"},
{{ 84, 255, 159, 0}, "SeaGreen1"},
{{ 78, 238, 148, 0}, "SeaGreen2"},
{{ 67, 205, 128, 0}, "SeaGreen3"},
{{ 46, 139, 87, 0}, "SeaGreen4"},
{{154, 255, 154, 0}, "PaleGreen1"},
{{144, 238, 144, 0}, "PaleGreen2"},
{{124, 205, 124, 0}, "PaleGreen3"},
{{ 84, 139, 84, 0}, "PaleGreen4"},
{{ 0, 255, 127, 0}, "SpringGreen1"},
{{ 0, 238, 118, 0}, "SpringGreen2"},
{{ 0, 205, 102, 0}, "SpringGreen3"},
{{ 0, 139, 69, 0}, "SpringGreen4"},
{{ 0, 255, 0, 0}, "green1"},
{{ 0, 238, 0, 0}, "green2"},
{{ 0, 205, 0, 0}, "green3"},
{{ 0, 139, 0, 0}, "green4"},
{{127, 255, 0, 0}, "chartreuse1"},
{{118, 238, 0, 0}, "chartreuse2"},
{{102, 205, 0, 0}, "chartreuse3"},
{{ 69, 139, 0, 0}, "chartreuse4"},
{{192, 255, 62, 0}, "OliveDrab1"},
{{179, 238, 58, 0}, "OliveDrab2"},
{{154, 205, 50, 0}, "OliveDrab3"},
{{105, 139, 34, 0}, "OliveDrab4"},
{{202, 255, 112, 0}, "DarkOliveGreen1"},
{{188, 238, 104, 0}, "DarkOliveGreen2"},
{{162, 205, 90, 0}, "DarkOliveGreen3"},
{{110, 139, 61, 0}, "DarkOliveGreen4"},
{{255, 246, 143, 0}, "khaki1"},
{{238, 230, 133, 0}, "khaki2"},
{{205, 198, 115, 0}, "khaki3"},
{{139, 134, 78, 0}, "khaki4"},
{{255, 236, 139, 0}, "LightGoldenrod1"},
{{238, 220, 130, 0}, "LightGoldenrod2"},
{{205, 190, 112, 0}, "LightGoldenrod3"},
{{139, 129, 76, 0}, "LightGoldenrod4"},
{{255, 255, 224, 0}, "LightYellow1"},
{{238, 238, 209, 0}, "LightYellow2"},
{{205, 205, 180, 0}, "LightYellow3"},
{{139, 139, 122, 0}, "LightYellow4"},
{{255, 255, 0, 0}, "yellow1"},
{{238, 238, 0, 0}, "yellow2"},
{{205, 205, 0, 0}, "yellow3"},
{{139, 139, 0, 0}, "yellow4"},
{{255, 215, 0, 0}, "gold1"},
{{238, 201, 0, 0}, "gold2"},
{{205, 173, 0, 0}, "gold3"},
{{139, 117, 0, 0}, "gold4"},
{{255, 193, 37, 0}, "goldenrod1"},
{{238, 180, 34, 0}, "goldenrod2"},
{{205, 155, 29, 0}, "goldenrod3"},
{{139, 105, 20, 0}, "goldenrod4"},
{{255, 185, 15, 0}, "DarkGoldenrod1"},
{{238, 173, 14, 0}, "DarkGoldenrod2"},
{{205, 149, 12, 0}, "DarkGoldenrod3"},
{{139, 101, 8, 0}, "DarkGoldenrod4"},
{{255, 193, 193, 0}, "RosyBrown1"},
{{238, 180, 180, 0}, "RosyBrown2"},
{{205, 155, 155, 0}, "RosyBrown3"},
{{139, 105, 105, 0}, "RosyBrown4"},
{{255, 106, 106, 0}, "IndianRed1"},
{{238, 99, 99, 0}, "IndianRed2"},
{{205, 85, 85, 0}, "IndianRed3"},
{{139, 58, 58, 0}, "IndianRed4"},
{{255, 130, 71, 0}, "sienna1"},
{{238, 121, 66, 0}, "sienna2"},
{{205, 104, 57, 0}, "sienna3"},
{{139, 71, 38, 0}, "sienna4"},
{{255, 211, 155, 0}, "burlywood1"},
{{238, 197, 145, 0}, "burlywood2"},
{{205, 170, 125, 0}, "burlywood3"},
{{139, 115, 85, 0}, "burlywood4"},
{{255, 231, 186, 0}, "wheat1"},
{{238, 216, 174, 0}, "wheat2"},
{{205, 186, 150, 0}, "wheat3"},
{{139, 126, 102, 0}, "wheat4"},
{{255, 165, 79, 0}, "tan1"},
{{238, 154, 73, 0}, "tan2"},
{{205, 133, 63, 0}, "tan3"},
{{139, 90, 43, 0}, "tan4"},
{{255, 127, 36, 0}, "chocolate1"},
{{238, 118, 33, 0}, "chocolate2"},
{{205, 102, 29, 0}, "chocolate3"},
{{139, 69, 19, 0}, "chocolate4"},
{{255, 48, 48, 0}, "firebrick1"},
{{238, 44, 44, 0}, "firebrick2"},
{{205, 38, 38, 0}, "firebrick3"},
{{139, 26, 26, 0}, "firebrick4"},
{{255, 64, 64, 0}, "brown1"},
{{238, 59, 59, 0}, "brown2"},
{{205, 51, 51, 0}, "brown3"},
{{139, 35, 35, 0}, "brown4"},
{{255, 140, 105, 0}, "salmon1"},
{{238, 130, 98, 0}, "salmon2"},
{{205, 112, 84, 0}, "salmon3"},
{{139, 76, 57, 0}, "salmon4"},
{{255, 160, 122, 0}, "LightSalmon1"},
{{238, 149, 114, 0}, "LightSalmon2"},
{{205, 129, 98, 0}, "LightSalmon3"},
{{139, 87, 66, 0}, "LightSalmon4"},
{{255, 165, 0, 0}, "orange1"},
{{238, 154, 0, 0}, "orange2"},
{{205, 133, 0, 0}, "orange3"},
{{139, 90, 0, 0}, "orange4"},
{{255, 127, 0, 0}, "DarkOrange1"},
{{238, 118, 0, 0}, "DarkOrange2"},
{{205, 102, 0, 0}, "DarkOrange3"},
{{139, 69, 0, 0}, "DarkOrange4"},
{{255, 114, 86, 0}, "coral1"},
{{238, 106, 80, 0}, "coral2"},
{{205, 91, 69, 0}, "coral3"},
{{139, 62, 47, 0}, "coral4"},
{{255, 99, 71, 0}, "tomato1"},
{{238, 92, 66, 0}, "tomato2"},
{{205, 79, 57, 0}, "tomato3"},
{{139, 54, 38, 0}, "tomato4"},
{{255, 69, 0, 0}, "OrangeRed1"},
{{238, 64, 0, 0}, "OrangeRed2"},
{{205, 55, 0, 0}, "OrangeRed3"},
{{139, 37, 0, 0}, "OrangeRed4"},
{{255, 0, 0, 0}, "red1"},
{{238, 0, 0, 0}, "red2"},
{{205, 0, 0, 0}, "red3"},
{{139, 0, 0, 0}, "red4"},
{{255, 20, 147, 0}, "DeepPink1"},
{{238, 18, 137, 0}, "DeepPink2"},
{{205, 16, 118, 0}, "DeepPink3"},
{{139, 10, 80, 0}, "DeepPink4"},
{{255, 110, 180, 0}, "HotPink1"},
{{238, 106, 167, 0}, "HotPink2"},
{{205, 96, 144, 0}, "HotPink3"},
{{139, 58, 98, 0}, "HotPink4"},
{{255, 181, 197, 0}, "pink1"},
{{238, 169, 184, 0}, "pink2"},
{{205, 145, 158, 0}, "pink3"},
{{139, 99, 108, 0}, "pink4"},
{{255, 174, 185, 0}, "LightPink1"},
{{238, 162, 173, 0}, "LightPink2"},
{{205, 140, 149, 0}, "LightPink3"},
{{139, 95, 101, 0}, "LightPink4"},
{{255, 130, 171, 0}, "PaleVioletRed1"},
{{238, 121, 159, 0}, "PaleVioletRed2"},
{{205, 104, 137, 0}, "PaleVioletRed3"},
{{139, 71, 93, 0}, "PaleVioletRed4"},
{{255, 52, 179, 0}, "maroon1"},
{{238, 48, 167, 0}, "maroon2"},
{{205, 41, 144, 0}, "maroon3"},
{{139, 28, 98, 0}, "maroon4"},
{{255, 62, 150, 0}, "VioletRed1"},
{{238, 58, 140, 0}, "VioletRed2"},
{{205, 50, 120, 0}, "VioletRed3"},
{{139, 34, 82, 0}, "VioletRed4"},
{{255, 0, 255, 0}, "magenta1"},
{{238, 0, 238, 0}, "magenta2"},
{{205, 0, 205, 0}, "magenta3"},
{{139, 0, 139, 0}, "magenta4"},
{{255, 131, 250, 0}, "orchid1"},
{{238, 122, 233, 0}, "orchid2"},
{{205, 105, 201, 0}, "orchid3"},
{{139, 71, 137, 0}, "orchid4"},
{{255, 187, 255, 0}, "plum1"},
{{238, 174, 238, 0}, "plum2"},
{{205, 150, 205, 0}, "plum3"},
{{139, 102, 139, 0}, "plum4"},
{{224, 102, 255, 0}, "MediumOrchid1"},
{{209, 95, 238, 0}, "MediumOrchid2"},
{{180, 82, 205, 0}, "MediumOrchid3"},
{{122, 55, 139, 0}, "MediumOrchid4"},
{{191, 62, 255, 0}, "DarkOrchid1"},
{{178, 58, 238, 0}, "DarkOrchid2"},
{{154, 50, 205, 0}, "DarkOrchid3"},
{{104, 34, 139, 0}, "DarkOrchid4"},
{{155, 48, 255, 0}, "purple1"},
{{145, 44, 238, 0}, "purple2"},
{{125, 38, 205, 0}, "purple3"},
{{ 85, 26, 139, 0}, "purple4"},
{{171, 130, 255, 0}, "MediumPurple1"},
{{159, 121, 238, 0}, "MediumPurple2"},
{{137, 104, 205, 0}, "MediumPurple3"},
{{ 93, 71, 139, 0}, "MediumPurple4"},
{{255, 225, 255, 0}, "thistle1"},
{{238, 210, 238, 0}, "thistle2"},
{{205, 181, 205, 0}, "thistle3"},
{{139, 123, 139, 0}, "thistle4"},
{{ 0, 0, 0, 0}, "gray0"},
{{ 0, 0, 0, 0}, "grey0"},
{{ 3, 3, 3, 0}, "gray1"},
{{ 3, 3, 3, 0}, "grey1"},
{{ 5, 5, 5, 0}, "gray2"},
{{ 5, 5, 5, 0}, "grey2"},
{{ 8, 8, 8, 0}, "gray3"},
{{ 8, 8, 8, 0}, "grey3"},
{{ 10, 10, 10, 0}, "gray4"},
{{ 10, 10, 10, 0}, "grey4"},
{{ 13, 13, 13, 0}, "gray5"},
{{ 13, 13, 13, 0}, "grey5"},
{{ 15, 15, 15, 0}, "gray6"},
{{ 15, 15, 15, 0}, "grey6"},
{{ 18, 18, 18, 0}, "gray7"},
{{ 18, 18, 18, 0}, "grey7"},
{{ 20, 20, 20, 0}, "gray8"},
{{ 20, 20, 20, 0}, "grey8"},
{{ 23, 23, 23, 0}, "gray9"},
{{ 23, 23, 23, 0}, "grey9"},
{{ 26, 26, 26, 0}, "gray10"},
{{ 26, 26, 26, 0}, "grey10"},
{{ 28, 28, 28, 0}, "gray11"},
{{ 28, 28, 28, 0}, "grey11"},
{{ 31, 31, 31, 0}, "gray12"},
{{ 31, 31, 31, 0}, "grey12"},
{{ 33, 33, 33, 0}, "gray13"},
{{ 33, 33, 33, 0}, "grey13"},
{{ 36, 36, 36, 0}, "gray14"},
{{ 36, 36, 36, 0}, "grey14"},
{{ 38, 38, 38, 0}, "gray15"},
{{ 38, 38, 38, 0}, "grey15"},
{{ 41, 41, 41, 0}, "gray16"},
{{ 41, 41, 41, 0}, "grey16"},
{{ 43, 43, 43, 0}, "gray17"},
{{ 43, 43, 43, 0}, "grey17"},
{{ 46, 46, 46, 0}, "gray18"},
{{ 46, 46, 46, 0}, "grey18"},
{{ 48, 48, 48, 0}, "gray19"},
{{ 48, 48, 48, 0}, "grey19"},
{{ 51, 51, 51, 0}, "gray20"},
{{ 51, 51, 51, 0}, "grey20"},
{{ 54, 54, 54, 0}, "gray21"},
{{ 54, 54, 54, 0}, "grey21"},
{{ 56, 56, 56, 0}, "gray22"},
{{ 56, 56, 56, 0}, "grey22"},
{{ 59, 59, 59, 0}, "gray23"},
{{ 59, 59, 59, 0}, "grey23"},
{{ 61, 61, 61, 0}, "gray24"},
{{ 61, 61, 61, 0}, "grey24"},
{{ 64, 64, 64, 0}, "gray25"},
{{ 64, 64, 64, 0}, "grey25"},
{{ 66, 66, 66, 0}, "gray26"},
{{ 66, 66, 66, 0}, "grey26"},
{{ 69, 69, 69, 0}, "gray27"},
{{ 69, 69, 69, 0}, "grey27"},
{{ 71, 71, 71, 0}, "gray28"},
{{ 71, 71, 71, 0}, "grey28"},
{{ 74, 74, 74, 0}, "gray29"},
{{ 74, 74, 74, 0}, "grey29"},
{{ 77, 77, 77, 0}, "gray30"},
{{ 77, 77, 77, 0}, "grey30"},
{{ 79, 79, 79, 0}, "gray31"},
{{ 79, 79, 79, 0}, "grey31"},
{{ 82, 82, 82, 0}, "gray32"},
{{ 82, 82, 82, 0}, "grey32"},
{{ 84, 84, 84, 0}, "gray33"},
{{ 84, 84, 84, 0}, "grey33"},
{{ 87, 87, 87, 0}, "gray34"},
{{ 87, 87, 87, 0}, "grey34"},
{{ 89, 89, 89, 0}, "gray35"},
{{ 89, 89, 89, 0}, "grey35"},
{{ 92, 92, 92, 0}, "gray36"},
{{ 92, 92, 92, 0}, "grey36"},
{{ 94, 94, 94, 0}, "gray37"},
{{ 94, 94, 94, 0}, "grey37"},
{{ 97, 97, 97, 0}, "gray38"},
{{ 97, 97, 97, 0}, "grey38"},
{{ 99, 99, 99, 0}, "gray39"},
{{ 99, 99, 99, 0}, "grey39"},
{{102, 102, 102, 0}, "gray40"},
{{102, 102, 102, 0}, "grey40"},
{{105, 105, 105, 0}, "gray41"},
{{105, 105, 105, 0}, "grey41"},
{{107, 107, 107, 0}, "gray42"},
{{107, 107, 107, 0}, "grey42"},
{{110, 110, 110, 0}, "gray43"},
{{110, 110, 110, 0}, "grey43"},
{{112, 112, 112, 0}, "gray44"},
{{112, 112, 112, 0}, "grey44"},
{{115, 115, 115, 0}, "gray45"},
{{115, 115, 115, 0}, "grey45"},
{{117, 117, 117, 0}, "gray46"},
{{117, 117, 117, 0}, "grey46"},
{{120, 120, 120, 0}, "gray47"},
{{120, 120, 120, 0}, "grey47"},
{{122, 122, 122, 0}, "gray48"},
{{122, 122, 122, 0}, "grey48"},
{{125, 125, 125, 0}, "gray49"},
{{125, 125, 125, 0}, "grey49"},
{{127, 127, 127, 0}, "gray50"},
{{127, 127, 127, 0}, "grey50"},
{{130, 130, 130, 0}, "gray51"},
{{130, 130, 130, 0}, "grey51"},
{{133, 133, 133, 0}, "gray52"},
{{133, 133, 133, 0}, "grey52"},
{{135, 135, 135, 0}, "gray53"},
{{135, 135, 135, 0}, "grey53"},
{{138, 138, 138, 0}, "gray54"},
{{138, 138, 138, 0}, "grey54"},
{{140, 140, 140, 0}, "gray55"},
{{140, 140, 140, 0}, "grey55"},
{{143, 143, 143, 0}, "gray56"},
{{143, 143, 143, 0}, "grey56"},
{{145, 145, 145, 0}, "gray57"},
{{145, 145, 145, 0}, "grey57"},
{{148, 148, 148, 0}, "gray58"},
{{148, 148, 148, 0}, "grey58"},
{{150, 150, 150, 0}, "gray59"},
{{150, 150, 150, 0}, "grey59"},
{{153, 153, 153, 0}, "gray60"},
{{153, 153, 153, 0}, "grey60"},
{{156, 156, 156, 0}, "gray61"},
{{156, 156, 156, 0}, "grey61"},
{{158, 158, 158, 0}, "gray62"},
{{158, 158, 158, 0}, "grey62"},
{{161, 161, 161, 0}, "gray63"},
{{161, 161, 161, 0}, "grey63"},
{{163, 163, 163, 0}, "gray64"},
{{163, 163, 163, 0}, "grey64"},
{{166, 166, 166, 0}, "gray65"},
{{166, 166, 166, 0}, "grey65"},
{{168, 168, 168, 0}, "gray66"},
{{168, 168, 168, 0}, "grey66"},
{{171, 171, 171, 0}, "gray67"},
{{171, 171, 171, 0}, "grey67"},
{{173, 173, 173, 0}, "gray68"},
{{173, 173, 173, 0}, "grey68"},
{{176, 176, 176, 0}, "gray69"},
{{176, 176, 176, 0}, "grey69"},
{{179, 179, 179, 0}, "gray70"},
{{179, 179, 179, 0}, "grey70"},
{{181, 181, 181, 0}, "gray71"},
{{181, 181, 181, 0}, "grey71"},
{{184, 184, 184, 0}, "gray72"},
{{184, 184, 184, 0}, "grey72"},
{{186, 186, 186, 0}, "gray73"},
{{186, 186, 186, 0}, "grey73"},
{{189, 189, 189, 0}, "gray74"},
{{189, 189, 189, 0}, "grey74"},
{{191, 191, 191, 0}, "gray75"},
{{191, 191, 191, 0}, "grey75"},
{{194, 194, 194, 0}, "gray76"},
{{194, 194, 194, 0}, "grey76"},
{{196, 196, 196, 0}, "gray77"},
{{196, 196, 196, 0}, "grey77"},
{{199, 199, 199, 0}, "gray78"},
{{199, 199, 199, 0}, "grey78"},
{{201, 201, 201, 0}, "gray79"},
{{201, 201, 201, 0}, "grey79"},
{{204, 204, 204, 0}, "gray80"},
{{204, 204, 204, 0}, "grey80"},
{{207, 207, 207, 0}, "gray81"},
{{207, 207, 207, 0}, "grey81"},
{{209, 209, 209, 0}, "gray82"},
{{209, 209, 209, 0}, "grey82"},
{{212, 212, 212, 0}, "gray83"},
{{212, 212, 212, 0}, "grey83"},
{{214, 214, 214, 0}, "gray84"},
{{214, 214, 214, 0}, "grey84"},
{{217, 217, 217, 0}, "gray85"},
{{217, 217, 217, 0}, "grey85"},
{{219, 219, 219, 0}, "gray86"},
{{219, 219, 219, 0}, "grey86"},
{{222, 222, 222, 0}, "gray87"},
{{222, 222, 222, 0}, "grey87"},
{{224, 224, 224, 0}, "gray88"},
{{224, 224, 224, 0}, "grey88"},
{{227, 227, 227, 0}, "gray89"},
{{227, 227, 227, 0}, "grey89"},
{{229, 229, 229, 0}, "gray90"},
{{229, 229, 229, 0}, "grey90"},
{{232, 232, 232, 0}, "gray91"},
{{232, 232, 232, 0}, "grey91"},
{{235, 235, 235, 0}, "gray92"},
{{235, 235, 235, 0}, "grey92"},
{{237, 237, 237, 0}, "gray93"},
{{237, 237, 237, 0}, "grey93"},
{{240, 240, 240, 0}, "gray94"},
{{240, 240, 240, 0}, "grey94"},
{{242, 242, 242, 0}, "gray95"},
{{242, 242, 242, 0}, "grey95"},
{{245, 245, 245, 0}, "gray96"},
{{245, 245, 245, 0}, "grey96"},
{{247, 247, 247, 0}, "gray97"},
{{247, 247, 247, 0}, "grey97"},
{{250, 250, 250, 0}, "gray98"},
{{250, 250, 250, 0}, "grey98"},
{{252, 252, 252, 0}, "gray99"},
{{252, 252, 252, 0}, "grey99"},
{{255, 255, 255, 0}, "gray100"},
{{255, 255, 255, 0}, "grey100"},
{{169, 169, 169, 0}, "dark"},
{{169, 169, 169, 0}, "DarkGrey"},
{{169, 169, 169, 0}, "dark"},
{{169, 169, 169, 0}, "DarkGray"},
{{ 0, 0, 139, 0}, "dark"},
{{ 0, 0, 139, 0}, "DarkBlue"},
{{ 0, 139, 139, 0}, "dark"},
{{ 0, 139, 139, 0}, "DarkCyan"},
{{139, 0, 139, 0}, "dark"},
{{139, 0, 139, 0}, "DarkMagenta"},
{{139, 0, 0, 0}, "dark"},
{{139, 0, 0, 0}, "DarkRed"},
{{144, 238, 144, 0}, "light"},
{{144, 238, 144, 0}, "LightGreen"},
{{ 0, 0, 0, 0}, NULL}
};
#endif

View File

@@ -1,5 +1,4 @@
#include <stdlib.h>
#include <X11/Xatom.h>
@@ -8,436 +7,386 @@
#define MAX_PROPERTY_SIZE 8*1024
char *WMSelectionOwnerDidChangeNotification = "WMSelectionOwnerDidChange";
typedef struct SelectionHandler {
WMView *view;
Atom selection;
Time timestamp;
WMSelectionProcs procs;
void *data;
WMView *view;
Atom selection;
Time timestamp;
WMSelectionProcs procs;
void *data;
struct {
unsigned delete_pending:1;
unsigned done_pending:1;
} flags;
struct {
unsigned delete_pending:1;
unsigned done_pending:1;
} flags;
} SelectionHandler;
typedef struct SelectionCallback {
WMView *view;
Atom selection;
Atom target;
Time timestamp;
WMSelectionCallback *callback;
void *data;
WMView *view;
Atom selection;
Atom target;
Time timestamp;
WMSelectionCallback *callback;
void *data;
struct {
unsigned delete_pending:1;
unsigned done_pending:1;
} flags;
struct {
unsigned delete_pending:1;
unsigned done_pending:1;
} flags;
} SelectionCallback;
static WMArray *selCallbacks = NULL;
static WMArray *selHandlers = NULL;
static Bool gotXError = False;
void
WMDeleteSelectionHandler(WMView *view, Atom selection, Time timestamp)
void WMDeleteSelectionHandler(WMView * view, Atom selection, Time timestamp)
{
SelectionHandler *handler;
Display *dpy = W_VIEW_SCREEN(view)->display;
Window win = W_VIEW_DRAWABLE(view);
WMArrayIterator iter;
SelectionHandler *handler;
Display *dpy = W_VIEW_SCREEN(view)->display;
Window win = W_VIEW_DRAWABLE(view);
WMArrayIterator iter;
if (!selHandlers)
return;
/*//printf("deleting selection handler for %d", win);*/
WM_ITERATE_ARRAY(selHandlers, handler, iter) {
if (handler->view == view
&& (handler->selection == selection || selection == None)
&& (handler->timestamp == timestamp || timestamp == CurrentTime)) {
if (handler->flags.done_pending) {
handler->flags.delete_pending = 1;
/*//puts(": postponed because still pending");*/
return;
}
/*//printf(": found & removed");*/
WMRemoveFromArray(selHandlers, handler);
break;
}
}
/*//printf("\n");*/
XGrabServer(dpy);
if (XGetSelectionOwner(dpy, selection) == win) {
XSetSelectionOwner(dpy, selection, None, timestamp);
}
XUngrabServer(dpy);
}
void
WMDeleteSelectionCallback(WMView *view, Atom selection, Time timestamp)
{
SelectionCallback *handler;
WMArrayIterator iter;
if (!selCallbacks)
return;
WM_ITERATE_ARRAY(selCallbacks, handler, iter) {
if (handler->view == view
&& (handler->selection == selection || selection == None)
&& (handler->timestamp == timestamp || timestamp == CurrentTime)) {
if (handler->flags.done_pending) {
handler->flags.delete_pending = 1;
if (!selHandlers)
return;
}
WMRemoveFromArray(selCallbacks, handler);
break;
}
}
}
/*//printf("deleting selection handler for %d", win); */
static int
handleXError(Display *dpy, XErrorEvent *ev)
{
gotXError = True;
WM_ITERATE_ARRAY(selHandlers, handler, iter) {
if (handler->view == view && (handler->selection == selection || selection == None)
&& (handler->timestamp == timestamp || timestamp == CurrentTime)) {
return 1;
}
static Bool
writeSelection(Display *dpy, Window requestor, Atom property, Atom type,
WMData *data)
{
static void *oldHandler;
int format, bpi;
format = WMGetDataFormat(data);
if (format == 0)
format = 8;
bpi = format/8;
/* printf("write to %x: %s\n", requestor, XGetAtomName(dpy, property)); */
oldHandler = XSetErrorHandler(handleXError);
gotXError = False;
XChangeProperty(dpy, requestor, property, type, format, PropModeReplace,
WMDataBytes(data), WMGetDataLength(data)/bpi);
XFlush(dpy);
XSetErrorHandler(oldHandler);
return !gotXError;
}
static void
notifySelection(XEvent *event, Atom prop)
{
XEvent ev;
/* printf("event to %x\n", event->xselectionrequest.requestor); */
ev.xselection.type = SelectionNotify;
ev.xselection.serial = 0;
ev.xselection.send_event = True;
ev.xselection.display = event->xselectionrequest.display;
ev.xselection.requestor = event->xselectionrequest.requestor;
ev.xselection.target = event->xselectionrequest.target;
ev.xselection.selection = event->xselectionrequest.selection;
ev.xselection.property = prop;
ev.xselection.time = event->xselectionrequest.time;
XSendEvent(event->xany.display, event->xselectionrequest.requestor,
False, 0, &ev);
XFlush(event->xany.display);
}
static void
handleRequestEvent(XEvent *event)
{
SelectionHandler *handler;
WMArrayIterator iter;
WMArray *copy;
Bool handledRequest;
WM_ITERATE_ARRAY(selHandlers, handler, iter) {
switch (event->type) {
case SelectionClear:
if (W_VIEW_DRAWABLE(handler->view)
!= event->xselectionclear.window) {
break;
}
handler->flags.done_pending = 1;
if (handler->procs.selectionLost)
handler->procs.selectionLost(handler->view,
handler->selection,
handler->data);
handler->flags.done_pending = 0;
handler->flags.delete_pending = 1;
break;
case SelectionRequest:
if (W_VIEW_DRAWABLE(handler->view)!=event->xselectionrequest.owner) {
break;
}
if (handler->procs.convertSelection != NULL
&& handler->selection == event->xselectionrequest.selection) {
Atom atom;
WMData *data;
Atom prop;
/* they're requesting for something old.. maybe another handler
* can handle it */
if (event->xselectionrequest.time < handler->timestamp
&& event->xselectionrequest.time != CurrentTime) {
break;
if (handler->flags.done_pending) {
handler->flags.delete_pending = 1;
/*//puts(": postponed because still pending"); */
return;
}
/*//printf(": found & removed"); */
WMRemoveFromArray(selHandlers, handler);
break;
}
}
handledRequest = False;
/*//printf("\n"); */
XGrabServer(dpy);
if (XGetSelectionOwner(dpy, selection) == win) {
XSetSelectionOwner(dpy, selection, None, timestamp);
}
XUngrabServer(dpy);
}
void WMDeleteSelectionCallback(WMView * view, Atom selection, Time timestamp)
{
SelectionCallback *handler;
WMArrayIterator iter;
if (!selCallbacks)
return;
WM_ITERATE_ARRAY(selCallbacks, handler, iter) {
if (handler->view == view && (handler->selection == selection || selection == None)
&& (handler->timestamp == timestamp || timestamp == CurrentTime)) {
if (handler->flags.done_pending) {
handler->flags.delete_pending = 1;
return;
}
WMRemoveFromArray(selCallbacks, handler);
break;
}
}
}
static int handleXError(Display * dpy, XErrorEvent * ev)
{
gotXError = True;
return 1;
}
static Bool writeSelection(Display * dpy, Window requestor, Atom property, Atom type, WMData * data)
{
static void *oldHandler;
int format, bpi;
format = WMGetDataFormat(data);
if (format == 0)
format = 8;
bpi = format / 8;
/* printf("write to %x: %s\n", requestor, XGetAtomName(dpy, property)); */
oldHandler = XSetErrorHandler(handleXError);
gotXError = False;
XChangeProperty(dpy, requestor, property, type, format, PropModeReplace,
WMDataBytes(data), WMGetDataLength(data) / bpi);
XFlush(dpy);
XSetErrorHandler(oldHandler);
return !gotXError;
}
static void notifySelection(XEvent * event, Atom prop)
{
XEvent ev;
/* printf("event to %x\n", event->xselectionrequest.requestor); */
ev.xselection.type = SelectionNotify;
ev.xselection.serial = 0;
ev.xselection.send_event = True;
ev.xselection.display = event->xselectionrequest.display;
ev.xselection.requestor = event->xselectionrequest.requestor;
ev.xselection.target = event->xselectionrequest.target;
ev.xselection.selection = event->xselectionrequest.selection;
ev.xselection.property = prop;
ev.xselection.time = event->xselectionrequest.time;
XSendEvent(event->xany.display, event->xselectionrequest.requestor, False, 0, &ev);
XFlush(event->xany.display);
}
static void handleRequestEvent(XEvent * event)
{
SelectionHandler *handler;
WMArrayIterator iter;
WMArray *copy;
Bool handledRequest;
WM_ITERATE_ARRAY(selHandlers, handler, iter) {
switch (event->type) {
case SelectionClear:
if (W_VIEW_DRAWABLE(handler->view)
!= event->xselectionclear.window) {
break;
}
handler->flags.done_pending = 1;
if (handler->procs.selectionLost)
handler->procs.selectionLost(handler->view, handler->selection, handler->data);
handler->flags.done_pending = 0;
handler->flags.delete_pending = 1;
break;
case SelectionRequest:
if (W_VIEW_DRAWABLE(handler->view) != event->xselectionrequest.owner) {
break;
}
if (handler->procs.convertSelection != NULL
&& handler->selection == event->xselectionrequest.selection) {
Atom atom;
WMData *data;
Atom prop;
/* they're requesting for something old.. maybe another handler
* can handle it */
if (event->xselectionrequest.time < handler->timestamp
&& event->xselectionrequest.time != CurrentTime) {
break;
}
handledRequest = False;
handler->flags.done_pending = 1;
data = handler->procs.convertSelection(handler->view,
handler->selection,
event->xselectionrequest.target,
handler->data, &atom);
prop = event->xselectionrequest.property;
/* obsolete clients that don't set the property field */
if (prop == None)
prop = event->xselectionrequest.target;
if (data) {
if (writeSelection(event->xselectionrequest.display,
event->xselectionrequest.requestor, prop, atom, data)) {
handledRequest = True;
}
WMReleaseData(data);
}
notifySelection(event, (handledRequest == True ? prop : None));
if (handler->procs.selectionDone != NULL) {
handler->procs.selectionDone(handler->view,
handler->selection,
event->xselectionrequest.target,
handler->data);
}
handler->flags.done_pending = 0;
}
break;
}
}
/* delete handlers */
copy = WMDuplicateArray(selHandlers);
WM_ITERATE_ARRAY(copy, handler, iter) {
if (handler && handler->flags.delete_pending) {
WMDeleteSelectionHandler(handler->view, handler->selection, handler->timestamp);
}
}
WMFreeArray(copy);
}
static WMData *getSelectionData(Display * dpy, Window win, Atom where)
{
WMData *wdata;
unsigned char *data;
Atom rtype;
int bits, bpi;
unsigned long len, bytes;
if (XGetWindowProperty(dpy, win, where, 0, MAX_PROPERTY_SIZE,
False, AnyPropertyType, &rtype, &bits, &len, &bytes, &data) != Success) {
return NULL;
}
bpi = bits / 8;
wdata = WMCreateDataWithBytesNoCopy(data, len * bpi, (WMFreeDataProc *) XFree);
WMSetDataFormat(wdata, bits);
return wdata;
}
static void handleNotifyEvent(XEvent * event)
{
SelectionCallback *handler;
WMArrayIterator iter;
WMArray *copy;
WMData *data;
WM_ITERATE_ARRAY(selCallbacks, handler, iter) {
if (W_VIEW_DRAWABLE(handler->view) != event->xselection.requestor
|| handler->selection != event->xselection.selection) {
continue;
}
handler->flags.done_pending = 1;
data = handler->procs.convertSelection(handler->view,
handler->selection,
event->xselectionrequest.target,
handler->data,
&atom);
prop = event->xselectionrequest.property;
/* obsolete clients that don't set the property field */
if (prop == None)
prop = event->xselectionrequest.target;
if (data) {
if (writeSelection(event->xselectionrequest.display,
event->xselectionrequest.requestor,
prop, atom, data)) {
handledRequest = True;
}
WMReleaseData(data);
}
notifySelection(event, (handledRequest==True ? prop : None));
if (handler->procs.selectionDone != NULL) {
handler->procs.selectionDone(handler->view,
handler->selection,
event->xselectionrequest.target,
handler->data);
if (event->xselection.property == None) {
data = NULL;
} else {
data = getSelectionData(event->xselection.display,
event->xselection.requestor, event->xselection.property);
}
(*handler->callback) (handler->view, handler->selection,
handler->target, handler->timestamp, handler->data, data);
if (data != NULL) {
WMReleaseData(data);
}
handler->flags.done_pending = 0;
}
break;
handler->flags.delete_pending = 1;
}
}
/* delete handlers */
copy = WMDuplicateArray(selHandlers);
WM_ITERATE_ARRAY(copy, handler, iter) {
if (handler && handler->flags.delete_pending) {
WMDeleteSelectionHandler(handler->view, handler->selection,
handler->timestamp);
}
}
WMFreeArray(copy);
/* delete callbacks */
copy = WMDuplicateArray(selCallbacks);
WM_ITERATE_ARRAY(copy, handler, iter) {
if (handler && handler->flags.delete_pending) {
WMDeleteSelectionCallback(handler->view, handler->selection, handler->timestamp);
}
}
WMFreeArray(copy);
}
static WMData*
getSelectionData(Display *dpy, Window win, Atom where)
void W_HandleSelectionEvent(XEvent * event)
{
WMData *wdata;
unsigned char *data;
Atom rtype;
unsigned bits, bpi;
unsigned long len, bytes;
/*//printf("%d received selection ", event->xany.window); */
/*//switch(event->type) {
case SelectionNotify:
puts("notify"); break;
case SelectionRequest:
puts("request"); break;
case SelectionClear:
puts("clear"); break;
default:
puts("unknown"); break;
} */
if (XGetWindowProperty(dpy, win, where, 0, MAX_PROPERTY_SIZE,
False, AnyPropertyType, &rtype, &bits, &len,
&bytes, &data)!=Success) {
return NULL;
}
bpi = bits/8;
wdata = WMCreateDataWithBytesNoCopy(data, len*bpi, (WMFreeDataProc*)XFree);
WMSetDataFormat(wdata, bits);
return wdata;
}
static void
handleNotifyEvent(XEvent *event)
{
SelectionCallback *handler;
WMArrayIterator iter;
WMArray *copy;
WMData *data;
WM_ITERATE_ARRAY(selCallbacks, handler, iter) {
if (W_VIEW_DRAWABLE(handler->view) != event->xselection.requestor
|| handler->selection != event->xselection.selection) {
continue;
}
handler->flags.done_pending = 1;
if (event->xselection.property == None) {
data = NULL;
if (event->type == SelectionNotify) {
handleNotifyEvent(event);
} else {
data = getSelectionData(event->xselection.display,
event->xselection.requestor,
event->xselection.property);
handleRequestEvent(event);
}
}
Bool WMCreateSelectionHandler(WMView * view, Atom selection, Time timestamp, WMSelectionProcs * procs, void *cdata)
{
SelectionHandler *handler;
Display *dpy = W_VIEW_SCREEN(view)->display;
XSetSelectionOwner(dpy, selection, W_VIEW_DRAWABLE(view), timestamp);
if (XGetSelectionOwner(dpy, selection) != W_VIEW_DRAWABLE(view)) {
return False;
}
(*handler->callback)(handler->view, handler->selection,
handler->target, handler->timestamp,
handler->data, data);
WMPostNotificationName(WMSelectionOwnerDidChangeNotification, (void *)selection, (void *)view);
if (data != NULL) {
WMReleaseData(data);
/*//printf("created selection handler for %d\n", W_VIEW_DRAWABLE(view)); */
handler = wmalloc(sizeof(SelectionHandler));
handler->view = view;
handler->selection = selection;
handler->timestamp = timestamp;
handler->procs = *procs;
handler->data = cdata;
memset(&handler->flags, 0, sizeof(handler->flags));
if (selHandlers == NULL) {
selHandlers = WMCreateArrayWithDestructor(4, wfree);
}
handler->flags.done_pending = 0;
handler->flags.delete_pending = 1;
}
/* delete callbacks */
copy = WMDuplicateArray(selCallbacks);
WM_ITERATE_ARRAY(copy, handler, iter) {
if (handler && handler->flags.delete_pending) {
WMDeleteSelectionCallback(handler->view, handler->selection,
handler->timestamp);
}
}
WMFreeArray(copy);
WMAddToArray(selHandlers, handler);
return True;
}
void
W_HandleSelectionEvent(XEvent *event)
{
/*//printf("%d received selection ", event->xany.window);*/
/*//switch(event->type) {
case SelectionNotify:
puts("notify"); break;
case SelectionRequest:
puts("request"); break;
case SelectionClear:
puts("clear"); break;
default:
puts("unknown"); break;
}*/
if (event->type == SelectionNotify) {
handleNotifyEvent(event);
} else {
handleRequestEvent(event);
}
}
Bool
WMCreateSelectionHandler(WMView *view, Atom selection, Time timestamp,
WMSelectionProcs *procs, void *cdata)
WMRequestSelection(WMView * view, Atom selection, Atom target, Time timestamp,
WMSelectionCallback * callback, void *cdata)
{
SelectionHandler *handler;
Display *dpy = W_VIEW_SCREEN(view)->display;
SelectionCallback *handler;
XSetSelectionOwner(dpy, selection, W_VIEW_DRAWABLE(view), timestamp);
if (XGetSelectionOwner(dpy, selection) != W_VIEW_DRAWABLE(view)) {
return False;
}
if (XGetSelectionOwner(W_VIEW_SCREEN(view)->display, selection) == None)
return False;
WMPostNotificationName(WMSelectionOwnerDidChangeNotification,
(void*)selection, (void*)view);
if (!XConvertSelection(W_VIEW_SCREEN(view)->display, selection, target,
W_VIEW_SCREEN(view)->clipboardAtom, W_VIEW_DRAWABLE(view), timestamp)) {
return False;
}
/*//printf("created selection handler for %d\n", W_VIEW_DRAWABLE(view));*/
handler = wmalloc(sizeof(SelectionCallback));
handler = wmalloc(sizeof(SelectionHandler));
handler->view = view;
handler->selection = selection;
handler->target = target;
handler->timestamp = timestamp;
handler->callback = callback;
handler->data = cdata;
memset(&handler->flags, 0, sizeof(handler->flags));
handler->view = view;
handler->selection = selection;
handler->timestamp = timestamp;
handler->procs = *procs;
handler->data = cdata;
memset(&handler->flags, 0, sizeof(handler->flags));
if (selCallbacks == NULL) {
selCallbacks = WMCreateArrayWithDestructor(4, wfree);
}
if (selHandlers == NULL) {
selHandlers = WMCreateArrayWithDestructor(4, wfree);
}
WMAddToArray(selCallbacks, handler);
WMAddToArray(selHandlers, handler);
return True;
return True;
}
Bool
WMRequestSelection(WMView *view, Atom selection, Atom target, Time timestamp,
WMSelectionCallback *callback, void *cdata)
{
SelectionCallback *handler;
if (XGetSelectionOwner(W_VIEW_SCREEN(view)->display, selection) == None)
return False;
if (!XConvertSelection(W_VIEW_SCREEN(view)->display, selection, target,
W_VIEW_SCREEN(view)->clipboardAtom,
W_VIEW_DRAWABLE(view), timestamp)) {
return False;
}
handler = wmalloc(sizeof(SelectionCallback));
handler->view = view;
handler->selection = selection;
handler->target = target;
handler->timestamp = timestamp;
handler->callback = callback;
handler->data = cdata;
memset(&handler->flags, 0, sizeof(handler->flags));
if (selCallbacks == NULL) {
selCallbacks = WMCreateArrayWithDestructor(4, wfree);
}
WMAddToArray(selCallbacks, handler);
return True;
}

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